{"version":3,"file":"rangertechnologies-ngnxt.mjs","sources":["../../../projects/nxt-app/src/lib/nxt-app.service.ts","../../../projects/nxt-app/src/lib/nxt-app.component.ts","../../../projects/nxt-app/src/lib/model/errorWrapper.ts","../../../projects/nxt-app/src/lib/pipe/NxtDate.pipe.ts","../../../projects/nxt-app/src/lib/components/nxt-datepicker/custom-datepicker/custom-datepicker.component.ts","../../../projects/nxt-app/src/lib/components/nxt-datepicker/custom-datepicker/custom-datepicker.component.html","../../../projects/nxt-app/src/lib/services/data/data.service.ts","../../../projects/nxt-app/src/lib/components/nxt-datepicker/hijri-datepicker/hijri-datepicker.component.ts","../../../projects/nxt-app/src/lib/components/nxt-datepicker/hijri-datepicker/hijri-datepicker.component.html","../../../projects/nxt-app/src/lib/components/nxt-datepicker/nxt-datepicker.component.ts","../../../projects/nxt-app/src/lib/components/nxt-datepicker/nxt-datepicker.component.html","../../../projects/nxt-app/src/lib/services/translation/indexeddb-reader.service.ts","../../../projects/nxt-app/src/lib/services/translation/translation.service.ts","../../../projects/nxt-app/src/lib/pipe/custom-translate.pipe.ts","../../../projects/nxt-app/src/lib/pipe/amount-in-words/amount-in-words.pipe.ts","../../../projects/nxt-app/src/lib/services/GoogleMapsLoaderService/google-maps-loader-service.service.ts","../../../projects/nxt-app/src/lib/services/country/country.service.ts","../../../projects/nxt-app/src/lib/services/storage/storage.service.ts","../../../projects/nxt-app/src/lib/services/change/change.service.ts","../../../projects/nxt-app/src/lib/components/nxt-input/nxt-input.component.ts","../../../projects/nxt-app/src/lib/components/nxt-input/nxt-input.component.html","../../../projects/nxt-app/src/lib/components/nxt-dropdown/nxt-dropdown.component.ts","../../../projects/nxt-app/src/lib/components/nxt-dropdown/nxt-dropdown.component.html","../../../projects/nxt-app/src/lib/components/nxt-multi-select/nxt-multi-select.component.ts","../../../projects/nxt-app/src/lib/components/nxt-multi-select/nxt-multi-select.component.html","../../../projects/nxt-app/src/lib/pipe/button-styles.pipe.ts","../../../projects/nxt-app/src/lib/components/button/nxt-button.component.ts","../../../projects/nxt-app/src/lib/components/button/nxt-button.component.html","../../../projects/nxt-app/src/lib/components/pagination/pagination.component.ts","../../../projects/nxt-app/src/lib/components/pagination/pagination.component.html","../../../projects/nxt-app/src/lib/pipe/search-filter/search-filter.pipe.ts","../../../projects/nxt-app/src/lib/pipe/get-value.pipe.ts","../../../projects/nxt-app/src/lib/components/list-view-filter/list-view-filter.component.ts","../../../projects/nxt-app/src/lib/components/list-view-filter/list-view-filter.component.html","../../../projects/nxt-app/src/lib/components/icon-selector/icon-selector.component.ts","../../../projects/nxt-app/src/lib/components/icon-selector/icon-selector.component.html","../../../projects/nxt-app/src/lib/model/changeWrapper.ts","../../../projects/nxt-app/src/lib/components/search-box/search-box.component.ts","../../../projects/nxt-app/src/lib/components/search-box/search-box.component.html","../../../projects/nxt-app/src/lib/components/custom-radio/custom-radio.component.ts","../../../projects/nxt-app/src/lib/components/custom-radio/custom-radio.component.html","../../../projects/nxt-app/src/lib/services/shared/shared.service.ts","../../../projects/nxt-app/src/lib/components/file-upload/file-upload.component.ts","../../../projects/nxt-app/src/lib/components/file-upload/file-upload.component.html","../../../projects/nxt-app/src/lib/pipe/question-by-row.pipe.ts","../../../projects/nxt-app/src/lib/components/datatable/datatable.component.ts","../../../projects/nxt-app/src/lib/components/datatable/datatable.component.html","../../../projects/nxt-app/src/lib/services/salesforce/salesforce.service.ts","../../../projects/nxt-app/src/lib/pages/questionnaire/questionnaire.component.ts","../../../projects/nxt-app/src/lib/pages/questionnaire/questionnaire.component.html","../../../projects/nxt-app/src/lib/components/image-cropper/utils/cropper-position.utils.ts","../../../projects/nxt-app/src/lib/components/image-cropper/component/cropper.state.ts","../../../projects/nxt-app/src/lib/components/image-cropper/interfaces/move-start.interface.ts","../../../projects/nxt-app/src/lib/components/image-cropper/utils/resize.utils.ts","../../../projects/nxt-app/src/lib/components/image-cropper/utils/percentage.utils.ts","../../../projects/nxt-app/src/lib/components/image-cropper/services/crop.service.ts","../../../projects/nxt-app/src/lib/components/image-cropper/utils/exif.utils.ts","../../../projects/nxt-app/src/lib/components/image-cropper/services/load-image.service.ts","../../../projects/nxt-app/src/lib/components/image-cropper/utils/keyboard.utils.ts","../../../projects/nxt-app/src/lib/components/image-cropper/component/image-cropper.component.ts","../../../projects/nxt-app/src/lib/components/image-cropper/component/image-cropper.component.html","../../../projects/nxt-app/src/lib/components/custom-model/custom-model.component.ts","../../../projects/nxt-app/src/lib/components/custom-model/custom-model.component.html","../../../projects/nxt-app/src/lib/components/custom-calendar/custom-calendar.component.ts","../../../projects/nxt-app/src/lib/components/custom-calendar/custom-calendar.component.html","../../../projects/nxt-app/src/lib/pages/questionbook/questionbook.component.ts","../../../projects/nxt-app/src/lib/pages/questionbook/questionbook.component.html","../../../projects/nxt-app/src/lib/pages/booklet/booklet.component.ts","../../../projects/nxt-app/src/lib/pages/booklet/booklet.component.html","../../../projects/nxt-app/src/environments/version.ts","../../../projects/nxt-app/src/lib/components/formula-input/formula-input.component.ts","../../../projects/nxt-app/src/lib/components/formula-input/formula-input.component.html","../../../projects/nxt-app/src/lib/services/pdf-designer/pdf-designer.service.ts","../../../projects/nxt-app/src/lib/services/template/template.service.ts","../../../projects/nxt-app/src/lib/pages/pdfDesigner/pdf-properties/pdf-properties.component.ts","../../../projects/nxt-app/src/lib/pages/pdfDesigner/pdf-properties/pdf-properties.component.html","../../../projects/nxt-app/src/lib/pages/pdfDesigner/pdf-designer/pdf-designer.component.ts","../../../projects/nxt-app/src/lib/pages/pdfDesigner/pdf-designer/pdf-designer.component.html","../../../projects/nxt-app/src/lib/pages/builder/properties/common-fields.constants.ts","../../../projects/nxt-app/src/lib/services/form-builder/form-builder.service.ts","../../../projects/nxt-app/src/lib/pages/builder/properties/properties.component.ts","../../../projects/nxt-app/src/lib/pages/builder/properties/properties.component.html","../../../projects/nxt-app/src/lib/pages/builder/element/element.component.ts","../../../projects/nxt-app/src/lib/pages/builder/element/element.component.html","../../../projects/nxt-app/src/lib/pages/builder/form/form.component.ts","../../../projects/nxt-app/src/lib/pages/builder/form/form.component.html","../../../projects/nxt-app/src/lib/nxt-app.module.ts","../../../projects/nxt-app/src/public-api.ts","../../../projects/nxt-app/src/rangertechnologies-ngnxt.ts"],"sourcesContent":["import { Injectable } from '@angular/core';\n\n@Injectable({\n  providedIn: 'root'\n})\nexport class NxtAppService {\n\n  constructor() { }\n}\n","import { Component, OnInit } from '@angular/core';\n\n@Component({\n  selector: 'lib-nxt-app',\n  template: `\n    <p>\n      nxt-app works!\n    </p>\n  `,\n  styles: [],\n  standalone: false\n})\nexport class NxtAppComponent implements OnInit {\n\n  constructor() { }\n\n  ngOnInit() {\n  }\n\n}\n","export class ErrorWrapper {\n    errorCode: string;\n    errorMsg: string;\n    errorDetails: string;\n}\n","import { Injectable, Pipe, PipeTransform } from '@angular/core';\nimport moment from 'moment-hijri';\nimport 'moment/locale/ar-sa';\nimport 'moment/locale/en-gb';\n\n@Pipe({\n  name: 'NxtDate',\n  standalone: true\n})\n@Injectable({\n  providedIn: 'root'\n})\nexport class NxtDatePipe implements PipeTransform {\n\n  transform(\n    value: any,\n    typeOrFormat?: 'date' | 'datetime' | 'month' | 'time' | string,\n    languageCode: string = 'en',\n    dateFormatType: 'hijri' | 'gregorian' = 'gregorian'\n  ): string {\n    if (!value) return '';\n    const isDate = moment(value);\n    if (!isDate.isValid() && typeOrFormat !== 'time') {\n      return '';\n    }\n    const locale = languageCode === 'ar' ? 'ar-SA' : 'en';\n\n    // SKS29OCT25 Parse input date depending on Hijri or Gregorian\n    let date: moment.Moment;\n    // SKS29OCT25 Detect if first arg is a type or a format\n    const isKnownType = ['date', 'datetime', 'month', 'time'].includes(typeOrFormat || '');\n    const type = isKnownType ? typeOrFormat : undefined;\n    const formatArg = !isKnownType ? typeOrFormat : undefined;\n    if (type === 'time') {\n      date = moment(value, ['HH:mm', 'HH:mm:ss'], true);\n      if (!date.isValid()) return '';\n    } else {\n      date = dateFormatType === 'hijri'\n        ? moment(value, 'YYYY-MM-DDTHH:mm', true).locale(locale)\n        : moment(value).locale(locale);\n      if (!date.isValid()) return '';\n    }\n    // SKS29OCT25 Step 1: Default format based on type\n    let format = '';\n    switch (type) {\n      case 'date':\n        format = dateFormatType === 'hijri' ? 'iDD/iMM/iYYYY' : 'DD/MM/YYYY';\n        break;\n      case 'datetime':\n        format = dateFormatType === 'hijri' ? 'iDD iMMM iYYYY, HH:mm' : 'DD MMM YYYY, HH:mm';\n        break;\n      case 'month':\n        format = dateFormatType === 'hijri' ? 'iMMMM iYYYY' : 'MMMM YYYY';\n        break;\n      case 'time':\n        format = 'HH:mm';\n        break;\n      default:\n        // SKS29OCT25 Step 2: Angular-like or custom format\n        format = this.mapAngularFormat(formatArg || 'medium', dateFormatType);\n    }\n    let output = date.format(format);\n\n    // SKS14AUG25 Convert to Arabic numerals if needed\n    if (languageCode === 'ar') {\n      output = this.toArabicNumbers(output);\n    }\n\n    return (output && output !== '') ? output : '';\n  }\n\n  /** SKS29OCT25 Map Angular-style date aliases to Moment formats */\n  private mapAngularFormat(format: string, dateFormatType: 'hijri' | 'gregorian'): string {\n    const isHijri = dateFormatType === 'hijri';\n    switch (format) {\n      case 'short':\n        return isHijri ? 'iDD/iMM/iYYYY HH:mm' : 'DD/MM/YYYY HH:mm';\n      case 'medium':\n        return isHijri ? 'iMMM iDD, iYYYY, hh:mm:ss A' : 'MMM DD, YYYY, hh:mm:ss A';\n      case 'long':\n        return isHijri ? 'iMMMM iDD, iYYYY, hh:mm:ss A' : 'MMMM DD, YYYY, hh:mm:ss A';\n      case 'full':\n        return isHijri ? 'dddd, iMMMM iDD, iYYYY, hh:mm:ss A' : 'dddd, MMMM DD, YYYY, hh:mm:ss A';\n      case 'shortDate':\n        return isHijri ? 'iDD/iMM/iYYYY' : 'DD/MM/YYYY';\n      case 'mediumDate':\n        return isHijri ? 'iMMM iDD, iYYYY' : 'DD MMM YYYY';\n      case 'longDate':\n        return isHijri ? 'iMMMM iDD, iYYYY' : 'MMMM DD, YYYY';\n      case 'fullDate':\n        return isHijri ? 'dddd, iMMMM iDD, iYYYY' : 'dddd, MMMM DD, YYYY';\n      case 'shortTime':\n        return 'hh:mm A';\n      case 'mediumTime':\n        return 'hh:mm:ss A';\n      case 'mm:ss':\n        return 'mm:ss';\n      default:\n        return format; // Custom Moment-style format\n    }\n  }\n\n  /** SKS29OCT25 Convert digits to Arabic numerals */\n  private toArabicNumbers(input: string): string {\n    const easternArabicNumerals = ['٠', '١', '٢', '٣', '٤', '٥', '٦', '٧', '٨', '٩'];\n    return input.replace(/\\d/g, d => easternArabicNumerals[+d]);\n  }\n}\n","import { CommonModule } from '@angular/common';\nimport {\n  Component,\n  EventEmitter,\n  Input,\n  Output,\n  ViewChild,\n  Injectable,\n  OnInit,\n  OnChanges,\n  SimpleChanges\n} from '@angular/core';\nimport { FormsModule } from '@angular/forms';\nimport {\n  NgbDateStruct,\n  NgbDatepicker,\n  NgbDatepickerModule,\n  NgbDatepickerI18n\n} from '@ng-bootstrap/ng-bootstrap';\n\n@Injectable()\nexport class CustomDatepickerI18n extends NgbDatepickerI18n {\n  constructor(private parent: CustomDatepickerComponent) { super(); }\n\n  private toArabicNumber(num: number): string {\n    return this.parent.languageCode === 'ar'\n      ? num.toString().replace(/\\d/g, d => '٠١٢٣٤٥٦٧٨٩'[+d])\n      : num.toString();\n  }\n\n  override getWeekdayLabel(weekday: number): string {\n    return this.parent.languageCode === 'ar'\n      ? ['الإث', 'الث', 'الأر', 'الخ', 'الجم', 'السب', 'الأح'][weekday - 1]\n      : ['Mo', 'Tu', 'We', 'Th', 'Fr', 'Sa', 'Su'][weekday - 1];\n  }\n\n  override getMonthShortName(month: number): string {\n    return this.parent.languageCode === 'ar'\n      ? ['يناير', 'فبراير', 'مارس', 'أبريل', 'مايو', 'يونيو',\n         'يوليو', 'أغسطس', 'سبتمبر', 'أكتوبر', 'نوفمبر', 'ديسمبر'][month - 1]\n      : ['January', 'February', 'March', 'April', 'May', 'June',\n         'July', 'August', 'September', 'October', 'November', 'December'][month - 1];\n  }\n\n  override getMonthFullName(month: number): string {\n    return this.getMonthShortName(month);\n  }\n\n  override getDayNumerals(date: NgbDateStruct): string {\n    return this.toArabicNumber(date.day);\n  }\n\n  override getYearNumerals(year: number): string {\n    return this.toArabicNumber(year);\n  }\n\n  override getDayAriaLabel(date: NgbDateStruct): string {\n    return `${this.toArabicNumber(date.day)}-${this.toArabicNumber(date.month)}-${this.toArabicNumber(date.year)}`;\n  }\n}\n\n@Component({\n  selector: 'app-custom-datepicker',\n  standalone: true,\n  imports: [NgbDatepickerModule, FormsModule, CommonModule],\n  templateUrl: './custom-datepicker.component.html',\n  styleUrls: ['./custom-datepicker.component.css'],\n  providers: [{ provide: NgbDatepickerI18n, useClass: CustomDatepickerI18n }]\n})\nexport class CustomDatepickerComponent implements OnInit, OnChanges {\n  @Input() type: 'date' | 'datetime' | 'month' | 'time' = 'date';\n  @Input() languageCode: 'en' | 'ar' = 'en';\n  @Input() value: any;\n  @Input() min: any;\n  @Input() max: any;\n  @Output() modelChange = new EventEmitter<any>();\n\n  @ViewChild('dp', { static: false }) datepicker?: NgbDatepicker;\n\n  /** SKS14AUG25 Bound to the datepicker via [(ngModel)] */\n  selectedDate: NgbDateStruct | null = null;\n\n  /** SKS14AUG25 Simple time holder for datetime/time modes */\n  time = { hour: 12, minute: 0 };\n  hours: number[] = [];\n  minutes: number[] = [];\n  displayHours: string[] = [];\n  displayMinutes: string[] = [];\n  monthYear = { year: new Date().getFullYear(), month: new Date().getMonth() + 1 };\n  months = Array.from({ length: 12 }, (_, i) => i + 1);\n  years: number[] = [];\n  monthNamesEn = ['January', 'February', 'March', 'April', 'May', 'June',\n                  'July', 'August', 'September', 'October', 'November', 'December'];\n  monthNamesAr = ['يناير', 'فبراير', 'مارس', 'أبريل', 'مايو', 'يونيو',\n                'يوليو', 'أغسطس', 'سبتمبر', 'أكتوبر', 'نوفمبر', 'ديسمبر'];\n  minDate!: NgbDateStruct;\n  maxDate!: NgbDateStruct;\n  today!: NgbDateStruct;\n\n  ngOnInit() {\n    const now = new Date();\n    this.today = {\n      year: now.getFullYear(),\n      month: now.getMonth() + 1,\n      day: now.getDate()\n    };\n    if (!this.value) {\n      this.selectedDate = this.today;\n    }\n    const currentYear = new Date().getFullYear();\n    this.minDate = { year: currentYear - 100, month: 1, day: 1 };\n    this.maxDate = { year: currentYear + 100, month: 12, day: 31 };\n    // APPLY INPUT RANGE IF PROVIDED\n    const parsedMin = this.parseToDateStruct(this.min);\n    const parsedMax = this.parseToDateStruct(this.max);\n  \n    if (parsedMin) this.minDate = parsedMin;\n    if (parsedMax) this.maxDate = parsedMax;\n    this.initYears();\n    this.generateTimeArrays();\n    this.applyValue(this.value);\n  }\n\n  ngOnChanges(changes: SimpleChanges) {\n    if (changes['languageCode'] && !changes['languageCode'].firstChange) {\n      this.generateTimeArrays();\n    }\n    if (changes['value'] && !changes['value'].firstChange) {\n      this.applyValue(changes['value'].currentValue);\n    }\n    if (changes['min'] || changes['max']) {\n      const parsedMin = this.parseToDateStruct(this.min);\n      const parsedMax = this.parseToDateStruct(this.max);\n  \n      if (parsedMin) this.minDate = parsedMin;\n      if (parsedMax) this.maxDate = parsedMax;\n    }\n  }\n  /** SKS14AUG25 Create hours/minutes arrays and their display labels */\n  private generateTimeArrays() {\n    this.hours = Array.from({ length: 24 }, (_, i) => i);\n    this.minutes = Array.from({ length: 60 }, (_, i) => i);\n\n    if (this.languageCode === 'ar') {\n      this.displayHours = this.hours.map(h => this.convertToArabic(h));\n      this.displayMinutes = this.minutes.map(m => this.convertToArabic(m));\n    } else {\n      this.displayHours = this.hours.map(h => String(h).padStart(2, '0'));\n      this.displayMinutes = this.minutes.map(m => String(m).padStart(2, '0'));\n    }\n  }\n   /** SKS14AUG25 Converts number to Arabic digits with leading zero */\n  convertToArabic(num: number): string {\n    return num.toString().padStart(2, '0').replace(/\\d/g, d => '٠١٢٣٤٥٦٧٨٩'[+d]);\n  }\n  private initYears() {\n    const currentYear = new Date().getFullYear();\n    this.years = Array.from({ length: 201 }, (_, i) => currentYear - 100 + i);\n  }\n  /** SKS14AUG25 Accepts:\n   *  - \"2023-10-26T20:00\"\n   *  - Date\n   *  - { year, month, day }\n   *  - { date: { year, month, day, time? } }\n   */\n  private applyValue(val: any) {\n    if (!val) return;\n    // SKS14AUG25 Normalize to { year, month, day, time? }\n    let ymd: { year: number; month: number; day: number; time?: string } | null = null;\n\n    if (typeof val === 'string' || val instanceof Date) {\n      const d = new Date(val);\n      if (!isNaN(d.getTime())) {\n        ymd = {\n          year: d.getFullYear(),\n          month: d.getMonth() + 1,\n          day: d.getDate(),\n          time: this.type === 'datetime'\n            ? `${String(d.getHours()).padStart(2, '0')}:${String(d.getMinutes()).padStart(2, '0')}`\n            : undefined\n        };\n      }\n    } else if ('year' in val && 'month' in val && 'day' in val) {\n      ymd = val;\n    } else if (val.date && 'year' in val.date && 'month' in val.date && 'day' in val.date) {\n      ymd = val.date;\n    }\n    // Apply to picker\n    if (ymd) {\n      // For date & datetime: actually select the day\n      if (this.type === 'date' || this.type === 'datetime') {\n        this.selectedDate = { year: ymd.year, month: ymd.month, day: ymd.day };\n        // Ensure correct month is visible (optional but nice)\n        this.datepicker?.navigateTo({ year: ymd.year, month: ymd.month });\n\n        // If datetime, set time too\n        if (this.type === 'datetime' && ymd.time) {\n          const [h, m] = ymd.time.split(':').map(n => +n);\n          if (!isNaN(h) && !isNaN(m)) this.time = { hour: h, minute: m };\n        }\n      }\n      // SKS14AUG25 For month: show correct month/year; (datepicker is day-based, we don't select a day)\n      else if (this.type === 'month') {\n        this.selectedDate = null;\n        this.datepicker?.navigateTo({ year: ymd.year, month: ymd.month });\n      }\n    }\n     // For time only: set time if provided\n     if (this.type === 'time') {\n      if (val) {\n        const [h, m] = val.split(':').map(n => +n);\n        if (!isNaN(h) && !isNaN(m)) this.time = { hour: h, minute: m };\n      }\n    }\n    // SKS14AUG25 (existing logic for date/time)\n    if (this.type === 'month') {\n      if (typeof val === 'string') {\n        const [year, month] = val.split('-').map(Number);\n        this.monthYear = { year, month };\n      } else if (val?.date) {\n        this.monthYear = { year: val.date.year, month: val.date.month };\n      }\n    }\n  }\n\n  onDateSelect(date: NgbDateStruct) {\n    this.selectedDate = date;\n\n    if (this.type === 'date') {\n      this.modelChange.emit({from: this.languageCode === 'ar' ? 'gregorianAr' : 'gregorian', date });\n    } else if (this.type === 'datetime') {\n      this.modelChange.emit({from: this.languageCode === 'ar' ? 'gregorianAr' : 'gregorian',\n        date: { ...date, time: `${(this.time.hour).toString().padStart(2, '0')}:${(this.time.minute).toString().padStart(2, '0')}` }\n      });\n    } else if (this.type === 'month') {\n      // If you want month-only result:\n      this.modelChange.emit({from: this.languageCode === 'ar' ? 'gregorianAr' : 'gregorian', date: { year: date.year, month: date.month } });\n    }\n  }\n\n  onTimeChange() {\n    if (this.type === 'time') {\n      this.modelChange.emit({from: this.languageCode === 'ar' ? 'gregorianAr' : 'gregorian', date: `${(this.time.hour).toString().padStart(2, '0')}:${(this.time.minute).toString().padStart(2, '0')}` });\n    } else if (this.type === 'datetime' && this.selectedDate) {\n      this.modelChange.emit({from: this.languageCode === 'ar' ? 'gregorianAr' : 'gregorian',\n        date: { ...this.selectedDate, time: `${(this.time.hour).toString().padStart(2, '0')}:${(this.time.minute).toString().padStart(2, '0')}` }\n      });\n    }\n  }\n\n  toArabicNumber(num: number): string {\n    return num.toString().replace(/\\d/g, d => '٠١٢٣٤٥٦٧٨٩'[+d]);\n  }\n  onMonthSelect() {\n    this.modelChange.emit({\n      from: this.languageCode === 'ar' ? 'gregorianAr' : 'gregorian',\n      date: { year: this.monthYear.year, month: (this.monthYear.month).toString().padStart(2, '0')}\n    });\n  }\n  private parseToDateStruct(value: any): NgbDateStruct | null {\n    if (!value) return null;\n  \n    if (value === 'today') {\n      const today = new Date();\n      return {\n        year: today.getFullYear(),\n        month: today.getMonth() + 1,\n        day: today.getDate()\n      };\n    }\n  \n    if (typeof value === 'string') {\n      const parts = value.split('-').map(Number);\n      if (parts.length >= 3) {\n        return {\n          year: parts[0],\n          month: parts[1],\n          day: parts[2]\n        };\n      }\n    }\n  \n    return null;\n  }\n}\n","<div class=\"datepicker-popup\">\n       <!-- DATE / DATETIME / MONTH -->\n       <!-- SKS14AUG25 Show only when type uses a calendar -->\n       <ngb-datepicker *ngIf=\"type === 'date' || type === 'datetime'\" #dp [(ngModel)]=\"selectedDate\"\n              [ngModelOptions]=\"{ standalone: true }\" [startDate]=\"selectedDate || undefined\"\n              [minDate]=\"minDate\" [maxDate]=\"maxDate\"\n              (dateSelect)=\"onDateSelect($event)\">\n       </ngb-datepicker>\n       <!-- SKS14AUG25 Month Picker -->\n       <ng-container *ngIf=\"type === 'month'\">\n              <div class=\"month-picker\">\n                     <div class=\"select-group\">\n                            <label class=\"select-label\">{{languageCode === 'ar' ? 'السنة' : 'Year'}}</label>\n                            <!-- Year selector -->\n                            <select class=\"custom-select\" [(ngModel)]=\"monthYear.year\"\n                                   [ngModelOptions]=\"{ standalone: true }\" (change)=\"onMonthSelect()\">\n                                   <option *ngFor=\"let y of years\" [value]=\"y\">{{ languageCode === 'ar' ?\n                                          convertToArabic(y) : y }}\n                                   </option>\n                            </select>\n                     </div>\n                     <div class=\"select-group\">\n                            <label class=\"select-label\">{{languageCode === 'ar' ? 'الشهر' : 'Month'}}</label>\n                            <!-- Month selector -->\n                            <select class=\"custom-select\" [(ngModel)]=\"monthYear.month\"\n                                   [ngModelOptions]=\"{ standalone: true }\" (change)=\"onMonthSelect()\">\n                                   <option *ngFor=\"let m of months; let idx = index\" [value]=\"idx+1\">\n                                          {{ languageCode === 'ar' ? monthNamesAr[idx] : monthNamesEn[idx] }}\n                                   </option>\n                            </select>\n                     </div>\n              </div>\n       </ng-container>\n       <!-- SKS14AUG25 Time Picker -->\n       <ng-container *ngIf=\"type === 'time' || type === 'datetime'\">\n              <div class=\"time-picker\">\n                     <div class=\"time-section\">\n                            <div class=\"time-controls\">\n                                   <div class=\"time-group\">\n                                          <select class=\"time-select\" [(ngModel)]=\"time.hour\"\n                                                 [ngModelOptions]=\"{ standalone: true }\" (change)=\"onTimeChange()\">\n                                                 <option *ngFor=\"let h of hours; let i = index\" [value]=\"h\">\n                                                        {{ displayHours[i] }}\n                                                 </option>\n                                          </select>\n                                   </div>\n                                   <span class=\"time-separator\">:</span>\n                                   <div class=\"time-group\">\n                                          <select class=\"time-select\" [(ngModel)]=\"time.minute\"\n                                                 [ngModelOptions]=\"{ standalone: true }\" (change)=\"onTimeChange()\">\n                                                 <option *ngFor=\"let m of minutes; let i = index\" [value]=\"m\">\n                                                        {{ displayMinutes[i] }}\n                                                 </option>\n                                          </select>\n                                   </div>\n                            </div>\n                     </div>\n              </div>\n       </ng-container>\n</div>","import { Injectable, Optional } from '@angular/core';\nimport { HttpClient, HttpHeaders, HttpParams } from '@angular/common/http';\nimport { Observable } from 'rxjs';\nimport moment from 'moment-hijri';\n@Injectable({\n  providedIn: 'root'\n})\nexport class DataService {\n  apiUrl: any;\n  // VD 23JAN24 optionally declared httpClient\n  constructor(@Optional() private http: HttpClient) { }\n\n  public getAPIData(tkn: string, \n    params: string[],\n    resolve,\n    reject,\n    config?: any) {\n      const self = this;\n\n      // Call the ShengelGo Server\n      const headers = new HttpHeaders().set('Authorization', `${tkn}`);\n      headers.append('Accept', 'application/json');\n      headers.append('Access-Control-Allow-Origin', '*');\n\n      // MR 23JAN24 - This should be removed, for now testing with dev-hse-api\n      this.http.get('https://dev-hse-api.rangerfusion.com/nxt/api/process/?dataType=' + params[0] + '&operation=' + params[1] + '&param=' + params[2], { headers: headers , observe: 'response' })\n        .subscribe(response => {\n          if(response.status == 200) {\n            resolve(response.body);\n          } else {\n            reject(response.body);\n          }\n        }, error => {\n          reject(error);\n        });\n  }\n\n  //calling the node api\n  public getAPIFromNode(dataType: string, operation: string, param1: string,param2: string,api:string){\n    const apiUrl = api ? api : 'http://localhost:3001/nxt';\n    // let params = new HttpParams()\n    //   .set('dataType', dataType)\n    //   .set('operation', operation)\n    //   .set('param1', param1)\n    //   .set('param2',param2)\n\n    let body = {\n      \"dataType\" :dataType ,\n      \"operation\" :operation ,\n      \"param1\" :param1, \n      \"param2\" : param2,\n    }\n    return this.http.post<any>(apiUrl,body );\n\n  }\n\n    \n// VD 22May24 -funtion to  handling multiple child objects\npublic getValue(element: any, columns: any) {\n  if (!element || !columns) return null; //AP-25MAR25 Ensure both element and column are valid\n// MSM27MAR25 check if columns is an array\n  if(typeof columns === 'string' && !Array.isArray(columns)  ) {\n    columns = [columns];\n  }\n  columns.forEach((column) => {\n    let flds = column?.split('.') || [];\n\n    for (let i = 0; i < flds.length; i++) {\n      if (element == null) return null; //AP-25MAR25 Prevent errors if element is null or undefined\n\n      let splitFlds = flds[i].split('[');\n      if (splitFlds.length === 1) {\n        element = element[flds[i]] !== undefined ? element[flds[i]] : null;\n      } else {\n        let index = Number(splitFlds[1].split(']')[0]);\n        element = element[splitFlds[0]] && Array.isArray(element[splitFlds[0]]) \n          ? element[splitFlds[0]][index] !== undefined ? element[splitFlds[0]][index] : null\n          : null;\n      }\n    }\n  });\n  return element;\n}\n// AP-16APR25 Sets the API URL with the provided apidata\napikey(apidata: any){\n  this.apiUrl = apidata;\n}\n// VD 23JAN24 get callout \npublic apiResponse(endpoint: string): Observable<any> {\n  if (!endpoint || !endpoint.trim()) {\n    throw new Error('Invalid API endpoint');\n  }\n\n  const isAbsoluteUrl = endpoint.startsWith('http://') || endpoint.startsWith('https://');\n\n  const url = isAbsoluteUrl\n    ? endpoint\n    : `${this.apiUrl}${endpoint}`;\n\n  return this.http.get(url);\n}\n\n// public apiResponse(endpoint: any): Observable<any> {\n//   // Build headers with token\n//   const headers = new HttpHeaders({\n//     'Accept': 'application/json, text/plain, */*',\n//     'Cache-Control': 'no-cache',\n//     'Pragma': 'no-cache',\n//     'token': \"eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJjb21wYW55SWQiOiJlcmFrZGV2IiwidXNlck5hbWUiOiJrdW1hcmVzYW5AZWxlY3Ryb3Jhay5mdXNpb24iLCJ1X2lkIjoiNjg5MDc5NmY2MGRlZGU3MTM2ZmVhMThiIiwicGVybWlzc2lvbnMiOlsiU3VwZXIgVXNlciIsIkVTUyBVc2VyIiwiSFJNIE1hbmFnZXIiLCJIUk0gVXNlciIsIkFwcCBVc2VyIiwiQ1JNIE1hbmFnZXIiXSwiZW1wbG95ZWVJZCI6IjEwNDAiLCJ1c2VybmFtZSI6Ikt1bWFyZXNhbiBLdW1hcmVzYW4iLCJjb21wYW55TmFtZSI6IkVsZWN0cm8gUkFLIEluZGlhIFByaXZhdGUgTGltaXRlZCIsImlhdCI6MTc1OTQ3ODgyMCwiZXhwIjoxNzY0NjYyODIwfQ.WyqeQnvPJIX1n40nr28T4MflivA-XFFyfbwLGnSXhIc\"   // 👈 custom header exactly like your request\n//   });\n//   // Case 1: Full URL\n//   if (endpoint && endpoint.startsWith('https://')) {\n//     return this.http.get(endpoint, { headers });\n//   }\n//   // Case 2: Prepend apiUrl\n//   if (this.apiUrl && this.apiUrl.trim() !== '' && endpoint !== undefined) {\n//     const url = this.apiUrl + endpoint;\n//     return this.http.get(url, { headers });\n//   }\n//   // Case 3: Fallback\n//   return this.http.get(endpoint, { headers });\n// }\n  // SKS7AUG25 eng ISO format to hijri eng numaral\n  formatToHijriString(date: any, type?: 'year' | 'month' | 'date' | 'time'| any): any {\n    if (!date) return null;\n  \n    let hijriMoment;\n  \n    if (typeof date === 'string') {\n      //SKS7AUG25 Handle string input\n      hijriMoment = moment(date, ['YYYY-MM-DD', 'YYYY-MM', 'YYYY'], true)?.locale('en');\n    } else if (date instanceof Date) {\n      //SKS7AUG25 Handle native Date object\n      hijriMoment = moment(date).locale('en');\n    } else {\n      // Fallback (e.g., moment object passed directly)\n      hijriMoment = moment(date).locale('en');\n    }\n  \n    if (!hijriMoment?.isValid()) return null;\n  \n    const year = hijriMoment.iYear();\n    const month = hijriMoment.iMonth() + 1; // 0-based\n    const day = hijriMoment.iDate();\n    const hour = hijriMoment.hour();\n    const minute = hijriMoment.minute();\n  \n    const result: any = {};\n  \n    if (type === 'year') {\n      result['year'] = year;\n    } else if (type === 'month') {\n      result['year'] = year;\n      result['month'] = month;\n    } else if (type === 'time') {\n      result['time'] = `${hour}:${minute}`;\n    } else {\n      //SKS7AUG25 Auto-detect based on available data\n      result['year'] = year;\n  \n      if (!isNaN(month)) result['month'] = month;\n      if (!isNaN(day) && day > 0) result['day'] = day;\n      if (hour || minute) result['time'] = `${hour}:${minute}`;\n    }\n  \n    return result;\n  }\n  \n  // SKS7AUG25 en numaral to hijri en numaral object\n  formatToGregorianString(date: any, type?: any): string {  \n    const dateStr = `${date.year}-${date.month}-${date.day || 1}`; // Use day=1 if not provided\n    const hijriMoment = moment(dateStr, 'iYYYY-iM-iD').locale('en'); // Force English locale\n    if (date.time && type !== 'month') {\n      const [hours, minutes] = date.time.split(':').map(Number);\n      hijriMoment.set({ hour: hours, minute: minutes });\n    }\n    if (type === 'month') {\n      return hijriMoment.format('YYYY-MM'); // Gregorian year-month\n    }\n    return hijriMoment.toDate().toISOString(); // Full ISO Gregorian datetime\n  }  \n  nxtId(): string {\n    const prefix = 'ngnxt'; \n    const chars = 'ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789';\n    let core = '';\n    for (let i = 0; i < 14; i++) {\n      core += chars.charAt(Math.floor(Math.random() * chars.length));\n    }\n    return prefix + core; \n  }\n}\n","import {\n  Component,\n  EventEmitter,\n  Output,\n  AfterViewInit,\n  Injectable,\n  ElementRef,\n  ViewChild,\n  Input,\n  inject,\n  SimpleChanges,\n  OnInit,\n  OnChanges\n} from '@angular/core';\nimport {\n  NgbCalendar,\n  NgbCalendarIslamicUmalqura,\n  NgbDatepickerI18n,\n  NgbDatepickerModule,\n  NgbDateStruct\n} from '@ng-bootstrap/ng-bootstrap';\nimport { FormsModule } from '@angular/forms';\nimport { CommonModule } from '@angular/common';\nimport { DataService } from '../../../services/data/data.service';\n\nconst WEEKDAYS = ['ح', 'ن', 'ث', 'ر', 'خ', 'ج', 'س'];\nconst MONTHS = [\n  'محرم', 'صفر', 'ربيع الأول', 'ربيع الآخر',\n  'جمادى الأولى', 'جمادى الآخرة', 'رجب', 'شعبان',\n  'رمضان', 'شوال', 'ذو القعدة', 'ذو الحجة'\n];\n\n@Injectable()\nexport class IslamicI18n extends NgbDatepickerI18n {\n  toArabicNumber(value: string | number): string {\n    return value.toString().replace(/\\d/g, d => '٠١٢٣٤٥٦٧٨٩'[parseInt(d)]);\n  }\n\n  getMonthShortName(month: number): string {\n    return MONTHS[month - 1];\n  }\n\n  getMonthFullName(month: number): string {\n    return MONTHS[month - 1];\n  }\n\n  getWeekdayLabel(weekday: number): string {\n    return WEEKDAYS[weekday - 1];\n  }\n\n  getDayAriaLabel(date: NgbDateStruct): string {\n    return `${this.toArabicNumber(date.day)}-${this.toArabicNumber(date.month)}-${this.toArabicNumber(date.year)}`;\n  }\n}\n\n@Component({\n  selector: 'app-hijri-datepicker',\n  standalone: true,\n  imports: [NgbDatepickerModule, FormsModule, CommonModule],\n  providers: [\n    { provide: NgbCalendar, useClass: NgbCalendarIslamicUmalqura },\n    { provide: NgbDatepickerI18n, useClass: IslamicI18n }\n  ],\n  templateUrl: './hijri-datepicker.component.html',\n  styleUrl: './hijri-datepicker.component.css'\n})\nexport class HijriDatepickerComponent implements AfterViewInit, OnInit, OnChanges {\n  calendar = inject(NgbCalendarIslamicUmalqura);\n  model: NgbDateStruct = this.calendar.getToday();\n\n  @Input() type: 'date' | 'month' | 'datetime' | 'time' = 'date';\n  @Input() value: any;\n  @Input() min: any;\n  @Input() max: any;\n  @Input() languageCode: any = 'en'\n  @Output() dateChange = new EventEmitter<any>();\n  @ViewChild('dp', { static: false }) datepickerRef?: any;\n\n  months = MONTHS;\n  years: number[] = [];\n\n  hour: number = 12;\n  minute: number = 0;\n  hours = Array.from({ length: 24 }, (_, i) => i);\n  minutes = Array.from({ length: 60 }, (_, i) => i);\n  minDate!: NgbDateStruct;\n  maxDate!: NgbDateStruct;\n  today!: NgbDateStruct;\n\n  constructor(private dataService: DataService) {}\n\n  ngOnInit() {\n    const todayHijri = this.calendar.getToday();\n    this.today = todayHijri;\n  \n    if (!this.value) {\n      this.model = todayHijri;\n    }\n    // Default range (Hijri ±100 years)\n    const currentYear = todayHijri.year;\n    this.minDate = { year: currentYear - 100, month: 1, day: 1 };\n    this.maxDate = { year: currentYear + 100, month: 12, day: 30 };\n  \n    // Override if input provided\n    const parsedMin = this.parseToHijriDate(this.min);\n    const parsedMax = this.parseToHijriDate(this.max);\n  \n    if (parsedMin) this.minDate = parsedMin;\n    if (parsedMax) this.maxDate = parsedMax;\n    this.generateYears();\n    this.setInitialDateFromValue();\n  }\n\n  ngAfterViewInit() {\n    this.applyArabicNumerals();\n  }\n\n  ngOnChanges(changes: SimpleChanges) {\n    if (changes['value'] && !changes['value'].firstChange) {\n      this.setInitialDateFromValue();\n    }\n    if (changes['min'] || changes['max']) {\n      const parsedMin = this.parseToHijriDate(this.min);\n      const parsedMax = this.parseToHijriDate(this.max);\n  \n      if (parsedMin) this.minDate = parsedMin;\n      if (parsedMax) this.maxDate = parsedMax;\n    }\n  }\n\n  setInitialDateFromValue() {\n    if (this.value) {\n      this.model = this.dataService.formatToHijriString(this.value);\n      // Navigate & select the correct date in UI\n      setTimeout(() => {\n        this.datepickerRef?.navigateTo({\n          year: this.model.year,\n          month: this.model.month\n        });\n      });\n    }\n  }\n\n  // SKS14AUG25 Generate year range ±15 years\n  generateYears() {\n    const currentYear = this.model.year;\n    const startYear = currentYear - 100;\n    const endYear = currentYear + 100;\n    this.years = Array.from(\n      { length: endYear - startYear + 1 },\n      (_, i) => startYear + i\n    );\n  }\n\n  onDateChange(date: NgbDateStruct) {\n    this.model = date;\n    this.emitDateTime();\n    this.applyArabicNumerals();\n  }\n\n  onMonthChange() {\n    this.emitDateTime();\n  }\n\n  onTimeChange() {\n    this.emitDateTime();\n  }\n\n  emitDateTime() {\n    if (this.type === 'datetime') {\n      this.dateChange.emit({\n        ...this.model,\n        time: `${this.hour}:${this.minute}`\n      });\n    } else if (this.type === 'time') {\n      this.dateChange.emit(`${this.hour}:${this.minute}`);\n    } else if (this.type === 'month') {\n      let temp = { ...this.model };\n      delete temp.day;\n      this.dateChange.emit(temp);\n    } else {\n      this.dateChange.emit(this.model);\n    }\n  }\n\n  toArabicNumber(value: string | number): string {\n    return value.toString().replace(/\\d/g, d => '٠١٢٣٤٥٦٧٨٩'[parseInt(d)]);\n  }\n\n  applyArabicNumerals() {\n    setTimeout(() => {\n      const dayCells = document.querySelectorAll('.ngb-dp-day .btn-light, .ngb-dp-day .btn-primary');\n      dayCells.forEach((btn: Element) => {\n        const value = btn.textContent?.trim();\n        if (value && /^\\d+$/.test(value)) {\n          btn.textContent = this.toArabicNumber(value);\n        }\n      });\n\n      const yearOptions = document.querySelectorAll('ngb-datepicker select:nth-child(2) option');\n      yearOptions.forEach((option: HTMLOptionElement) => {\n        const value = option.textContent?.trim();\n        if (value && /^\\d+$/.test(value)) {\n          option.textContent = this.toArabicNumber(value);\n        }\n      });\n    });\n  }\n\n  onNavigate() {\n    setTimeout(() => {\n      this.applyArabicNumerals();\n    }, 50);\n  }\n  private parseToHijriDate(value: any): NgbDateStruct | null {\n    if (!value) return null;\n  \n    let gregorianDate: Date | null = null;\n  \n    if (value === 'today') {\n      gregorianDate = new Date();\n    } \n    else if (typeof value === 'string') {\n      const parsed = new Date(value);\n      if (!isNaN(parsed.getTime())) {\n        gregorianDate = parsed;\n      }\n    }\n  \n    if (gregorianDate) {\n      return this.calendar.fromGregorian(gregorianDate);\n    }\n  \n    return null;\n  }\n}\n","<!-- SKS14AUG25 Date Picker -->\n<ng-container *ngIf=\"type === 'date' || type === 'datetime'\">\n  <div class=\"date-picker-wrapper\">\n    <ngb-datepicker #dp [ngModel]=\"model\" (ngModelChange)=\"onDateChange($event)\"\n      [minDate]=\"minDate\" [maxDate]=\"maxDate\"\n      (navigate)=\"onNavigate()\" [firstDayOfWeek]=\"7\" [showWeekNumbers]=\"false\">\n    </ngb-datepicker>\n  </div>\n</ng-container>\n\n<!-- SKS14AUG25 Month Picker -->\n<ng-container *ngIf=\"type === 'month'\">\n  <div class=\"month-picker\">\n    <div class=\"select-group\">\n      <label class=\"select-label\">{{languageCode === 'ar' ? 'السنة' : 'Year'}}</label>\n      <select class=\"custom-select\" [(ngModel)]=\"model.year\" (change)=\"onMonthChange()\">\n        <option *ngFor=\"let year of years\" [value]=\"year\">\n          {{ toArabicNumber(year) }}\n        </option>\n      </select>\n    </div>\n    <div class=\"select-group\">\n      <label class=\"select-label\">{{languageCode === 'ar' ? 'الشهر' : 'Month'}}</label>\n      <select class=\"custom-select\" [(ngModel)]=\"model.month\" (change)=\"onMonthChange()\">\n        <option *ngFor=\"let month of months; let i = index\" [value]=\"i + 1\">\n          {{ month }}\n        </option>\n      </select>\n    </div>\n  </div>\n</ng-container>\n\n<!-- SKS14AUG25 Time Picker -->\n<ng-container *ngIf=\"type === 'datetime'\">\n  <div class=\"time-picker\">\n    <div class=\"time-section\">\n      <div class=\"time-controls\">\n        <div class=\"time-group\">\n          <select class=\"time-select\" [(ngModel)]=\"hour\" (change)=\"onTimeChange()\">\n            <option *ngFor=\"let h of hours\" [value]=\"h\">\n              {{ toArabicNumber(h.toString().padStart(2, '0')) }}\n            </option>\n          </select>\n        </div>\n        <span class=\"time-separator\">:</span>\n        <div class=\"time-group\">\n          <select class=\"time-select\" [(ngModel)]=\"minute\" (change)=\"onTimeChange()\">\n            <option *ngFor=\"let m of minutes\" [value]=\"m\">\n              {{ toArabicNumber(m.toString().padStart(2, '0')) }}\n            </option>\n          </select>\n        </div>\n      </div>\n    </div>\n  </div>\n</ng-container>","import { Component, EventEmitter, Input, Output } from '@angular/core';\nimport { CustomDatepickerComponent } from './custom-datepicker/custom-datepicker.component';\nimport { HijriDatepickerComponent } from './hijri-datepicker/hijri-datepicker.component';\nimport { CommonModule } from '@angular/common';\nimport { FormsModule } from '@angular/forms';\nimport { DataService } from '../../services/data/data.service';\n\n@Component({\n  selector: 'app-nxt-datepicker',\n  standalone: true,\n  imports: [CustomDatepickerComponent, HijriDatepickerComponent, CommonModule, FormsModule],\n  templateUrl: './nxt-datepicker.component.html',\n  styleUrls: ['./nxt-datepicker.component.css']\n})\nexport class NxtDatepickerComponent {\n  isHijriCalendar = true; //SKS14AUG25 true = Hijri, false = Gregorian\n  @Input() type: string = 'datetime';\n  @Input() languageCode: any = 'en'\n  @Input() value: any\n  @Input() min: any\n  @Input() max: any\n  @Output() dateChange = new EventEmitter<any>();\n  constructor(private dataService: DataService){}\n  ngOnInit() {  \n    this.isHijriCalendar = this.languageCode === 'ar' ? true : false\n  }\n  ngOnChange(){\n  }\n  toggleCalendarType() {\n    this.isHijriCalendar = !this.isHijriCalendar;\n  }\n\n  onDatePicked(date: any) {\n    let output: any;\n    if(date.from === \"hijri\"){\n      output = this.type === 'time' ? date.data : this.dataService.formatToGregorianString(date.data, this.type)\n    } else {\n      if (this.type === 'datetime' || this.type === 'date') {\n        const [hour, minute] = this.type === 'datetime' && date.data.date.time\n          ? date.data.date.time.split(':').map(Number)\n          : [0, 0];\n        const isoDate = new Date(\n          date.data.date.year,\n          date.data.date.month - 1, // JS months start at 0\n          date.data.date.day,\n          hour,\n          minute\n        );\n        output = isoDate.toISOString(); //SKS14AUG25 Always ISO 8601 datetime\n      } \n      else if (this.type === 'time') {\n        output = date.data.date;\n      } \n      else if (this.type === 'month') {\n        output = `${date.data.date.year}-${date.data.date.month}` ;\n      } \n      else {\n        const isoDate = new Date(\n          date.data.date.year,\n          date.data.date.month - 1,\n          date.data.date.day\n        );\n        output = isoDate.toISOString();\n      }\n    }\n    this.dateChange.emit({from: date.from,date: output})\n  }\n}\n","<div class=\"datepicker-container\">\n  <!-- SKS14AUG25 Calendar Type Switch -->\n  <div *ngIf=\"languageCode === 'ar' && type !== 'time'\" class=\"calendar-switch\">\n    <div class=\"switch-container\">\n      <div (click)=\"toggleCalendarType()\" class=\"calendar-type-label\">\n        {{ isHijriCalendar ? 'تقويم هجري' : 'تقويم ميلادي' }}\n      </div>\n    </div>\n  </div>\n\n  <!-- SKS14AUG25 Hijri Calendar -->\n  <app-hijri-datepicker\n    *ngIf=\"isHijriCalendar  && type !== 'time'\"\n    [type]=\"type\"\n    [min]=\"min\"\n    [max]=\"max\"\n    [value]=\"value\"\n    [languageCode]=\"languageCode\"\n    (dateChange)=\"onDatePicked({from: 'hijri',data: $event})\">\n  </app-hijri-datepicker>\n\n  <!-- SKS14AUG25 Gregorian Calendar -->\n  <app-custom-datepicker\n    *ngIf=\"!isHijriCalendar || type === 'time'\"\n    [type]=\"type\"\n    [value]=\"value\"\n    [min]=\"min\"\n    [max]=\"max\"\n    [languageCode]=\"languageCode\"\n    (modelChange)=\"onDatePicked({from: $event.from,data: $event})\">\n  </app-custom-datepicker>\n</div>\n","import { Injectable } from '@angular/core';\n\n@Injectable({\n  providedIn: 'root'\n})\nexport class IndexedDbReaderService {\n\n  private dbName = 'ranger';   //SKS3MAR25 MUST match main app\n  private storeName = 'appStore';\n  private path = 'translations';\n  private dbPromise: Promise<IDBDatabase | null>;\n\n  constructor() {\n    this.dbPromise = this.initDB();\n  }\n\n  private initDB(): Promise<IDBDatabase | null> {\n    return new Promise((resolve) => {\n      const request = indexedDB.open(this.dbName);\n      request.onsuccess = () => {\n        const db = request.result;\n        // SKS7MAR26 Skip if store doesn't exist\n        if (!db.objectStoreNames.contains(this.storeName)) {\n          resolve(null);\n        } else {\n          resolve(db);\n        }\n      };\n\n      request.onerror = () => resolve(null); // SKS7MAR26 skip DB if error\n      request.onupgradeneeded = (event: any) => {\n        // SKS7MAR26 optional: create store only if needed\n        const db = event.target.result;\n        if (!db.objectStoreNames.contains(this.storeName)) {\n          db.createObjectStore(this.storeName);\n        }\n      };\n    });\n  }\n\n  async getTranslation(lang: string): Promise<any> {\n    const db = await this.dbPromise;\n    if (!db) {\n      // SKS7MAR26 DB or store not ready → skip gracefully\n      return {};\n    }\n    return this.readTranslation(db, lang);\n  }\n\n  private readTranslation(db: IDBDatabase, lang: string): Promise<any> {\n    return new Promise((resolve) => {\n      try {\n        const tx = db.transaction(this.storeName, 'readonly');\n        const request = tx.objectStore(this.storeName).get(this.path);\n        request.onsuccess = () => {\n          const translations = request.result;\n          resolve(translations ? translations[lang] ?? {} : {});\n        };\n        request.onerror = () => resolve({});\n      } catch (e) {\n        // SKS7MAR26 transaction fails → skip gracefully\n        resolve({});\n      }\n    });\n  }\n}","import { Injectable } from '@angular/core';\nimport { BehaviorSubject } from 'rxjs';\nimport { DataService } from '../data/data.service';\nimport { IndexedDbReaderService } from './indexeddb-reader.service';\n\n@Injectable({\n  providedIn: 'root'\n})\nexport class TranslationService {\n  private translations: any = {};\n  private currentLang: string = 'en'; // Default language\n  private translationsLoaded = new BehaviorSubject<void>(null); // Signal when translations are loaded\n  public translationsLoaded$ = this.translationsLoaded.asObservable(); // Observable for components to subscribe to\n  private languageChange = new BehaviorSubject<any>(null); // Signal when translations are loaded\n  public languageChange$ = this.languageChange.asObservable(); // Observable for components to subscribe to\n\n  private formBuilderTranslations: any;\n  private formBuilderCurrentLang: string = 'en'; // Default language\n  private formBuilderTranslationsLoaded = new BehaviorSubject<string>(''); // Emit language string\n  public formBuilderTranslationsLoaded$ = this.formBuilderTranslationsLoaded.asObservable();\n  constructor(private dataService: DataService, private indexedDbReader: IndexedDbReaderService) { }\n\n  // SKS3MAR25 Load translations from localStorage\n  async load(): Promise<void> {\n    const stored = await this.indexedDbReader.getTranslation(this.currentLang);\n    if (stored) {\n      const flattened = this.flattenAppTranslations({\n        [this.currentLang]: stored\n      });\n      this.updateTranslations(flattened);\n    } else {\n      if(!this.translations) this.translations = {}\n      this.translations[this.currentLang] = {};\n    }\n    this.translationsLoaded.next();\n  }\n  // SKS17DEC25 Helpers \n  private safeParse<T>(value: string | null, fallback: T): T {\n    try {\n      return value ? JSON.parse(value) : fallback;\n    } catch {\n      return fallback;\n    }\n  }\n  // SKS17DEC25 Translation Logic \n  flattenAppTranslations(translations: any): any {\n    const newTranslations: any = {};\n    for (const lang of Object.keys(translations)) {\n      const { APP = {}, ...rest } = translations[lang] || {};\n      newTranslations[lang] = {\n        ...rest, // original keys\n        ...APP   // flattened APP keys\n      };\n    }\n    return newTranslations;\n  }\n  updateTranslations(newTranslations: any): void {\n    const oldTranslations = this.translations && typeof this.translations === 'object' ? this.translations : {};\n    // SKS17DEC25 Immutable merge (Angular-friendly)\n    this.translations = this.deepMerge(oldTranslations, newTranslations) || {};\n    this.translationsLoaded.next(); // Notify subscribers\n  }\n  // SKS17DEC25 Deep Merge (Immutable)\n  private deepMerge(target: any, source: any): any {\n    const output = { ...target };\n    for (const key in source) {\n      if (\n        source[key] &&\n        typeof source[key] === 'object' &&\n        !Array.isArray(source[key])\n      ) {\n        output[key] = this.deepMerge(output[key] || {}, source[key]);\n      } else {\n        output[key] = source[key];\n      }\n    }\n    return output;\n  }\n  \n  // Get current language\n  getLanguage(): string {\n    return this.currentLang;\n  }\n\n  // Set language (if applicable)\n  setLanguage(lang: string): void {\n    if(lang){\n      this.currentLang = lang;\n      this.load()\n      this.translationsLoaded.next(); // Optional: notify on language change\n      this.languageChange.next(lang)\n    }\n  }\n\n  translate(key: string): string | null {\n    const langTranslations = this.translations?.[this.currentLang];\n    if (langTranslations && this.dataService.getValue(langTranslations, key)) {\n      return this.dataService.getValue(langTranslations, key);\n    }\n    const fallback = this.translations?.['en'];\n    if (fallback && this.dataService.getValue(fallback, key)) {\n      return this.dataService.getValue(fallback, key);\n    }\n    return null;\n  }\n  // Set translations and notify subscribers\n  setFormBuilderTranslations(formBuilderTrans: any): void {\n    this.formBuilderTranslations = formBuilderTrans;\n    localStorage.setItem('formBuilderTranslations', JSON.stringify(formBuilderTrans));\n  }\n\n  // Get current language\n  getFormBuilderLanguage(): string {\n    return this.formBuilderCurrentLang;\n  }\n\n  // Set language (if applicable)\n  setFormBuilderLanguage(lang: string): void {\n    this.formBuilderCurrentLang = lang;\n    this.formBuilderTranslationsLoaded.next(lang); // Emit language\n  }\n  formBuilderTranslate(key: string,lang: any): string | null {\n    const langTranslations = this.formBuilderTranslations?.[lang];\n    if (langTranslations && this.dataService.getValue(langTranslations, key)) {\n      return this.dataService.getValue(langTranslations, key);\n    }\n    return null;\n  }\n}","import { inject, Pipe, PipeTransform } from '@angular/core';\nimport { TranslationService } from '../services/translation/translation.service';\nimport { takeUntilDestroyed } from '@angular/core/rxjs-interop';\n\n@Pipe({\n  name: 'nxtCustomTranslate',\n  pure: false,\n  standalone: true\n})\nexport class NxtCustomTranslatePipe implements PipeTransform {\n  private cache = new Map<string, string>();\n  private translationService = inject(TranslationService);\n\n  constructor() {\n    // SKS28JUL25 clear catch if input language code change\n    this.translationService.translationsLoaded$\n      .pipe(takeUntilDestroyed())\n      .subscribe(() => {\n        this.cache.clear();\n      });\n  }\n\n  transform(key: string, fallback: string, from?: string): string {\n    if (from !== 'formBuilder' && this.cache.has(key)) {\n      return this.cache.get(key)!;\n    }\n    const translated = from !== 'formBuilder' ? this.translationService.translate(key) : this.translationService.formBuilderTranslate(key,'en');\n    const result = translated || fallback || (from === 'formBuilder' ? null : key);\n    if (from !== 'formBuilder')this.cache.set(key, result);\n    return result;\n  }\n}\n","// SKS24OCT25\nimport { Pipe, PipeTransform } from \"@angular/core\";\n\n@Pipe({\n  name: \"amountInWords\"\n})\nexport class AmountInWordsPipe implements PipeTransform {\n    a = ['', 'One ', 'Two ', 'Three ', 'Four ', 'Five ', 'Six ', 'Seven ', 'Eight ', 'Nine ', 'Ten ', 'Eleven ', 'Twelve ', 'Thirteen ', 'Fourteen ', 'Fifteen ', 'Sixteen ', 'Seventeen ', 'Eighteen ', 'Nineteen '];\n    b = ['', '', 'Twenty', 'Thirty', 'Fourty', 'Fifty', 'Sixty', 'Seventy', 'Eighty', 'Ninty'];\n    transform(value: string): any {\n      if (value == null || value === '' || Number(value) === 0) {\n          return 'Zero Only';\n      }\n      value = value.toString();\n      if (value.length > 9) return 'overflow';\n      let n = ('000000000' + value)\n          .substr(-9)\n          .match(/^(\\d{2})(\\d{2})(\\d{2})(\\d{1})(\\d{2})$/);\n      if (!n) return '';\n      let str = '';\n      str += (Number(n[1]) != 0) ? (this.a[Number(n[1])] || this.b[n[1][0]] + ' ' + this.a[n[1][1]]) + 'Crore ' : '';\n      str += (Number(n[2]) != 0) ? (this.a[Number(n[2])] || this.b[n[2][0]] + ' ' + this.a[n[2][1]]) + 'Lakh ' : '';\n      str += (Number(n[3]) != 0) ? (this.a[Number(n[3])] || this.b[n[3][0]] + ' ' + this.a[n[3][1]]) + 'Thousand ' : '';\n      str += (Number(n[4]) != 0) ? (this.a[Number(n[4])] || this.b[n[4][0]] + ' ' + this.a[n[4][1]]) + 'Hundred ' : '';\n      str += (Number(n[5]) != 0) ? ((str != '') ? 'And ' : '') + (this.a[Number(n[5])] || this.b[n[5][0]] + ' ' + this.a[n[5][1]]) : '';\n      return str + ' Only';\n  }  \n}\n","import { Injectable } from '@angular/core';\n\n@Injectable({ providedIn: 'root' })\nexport class GoogleMapsLoaderService {\n  private loadPromise: Promise<void> | null = null;\n\n  load(apiKey: string): Promise<void> {\n    if (this.loadPromise) {\n      return this.loadPromise; // SKS18SEP25 already loading or loaded\n    }\n\n    this.loadPromise = new Promise<void>((resolve, reject) => {\n      if (window['google'] && window['google'].maps) {\n        resolve();\n        return;\n      }\n\n      const script = document.createElement('script');\n      script.src = `https://maps.googleapis.com/maps/api/js?key=${apiKey}&libraries=places`;\n      script.async = true;\n      script.defer = true;\n\n      script.onload = () => {\n        resolve();\n      };\n\n      script.onerror = () => {\n        reject('Google Maps failed to load');\n      };\n\n      document.head.appendChild(script);\n    });\n\n    return this.loadPromise;\n  }\n}\n","// country.service.ts\nimport { Injectable } from '@angular/core';\nimport countryJson from '../../country.json';\nimport { BehaviorSubject } from 'rxjs';\n\nexport interface CountryData {\n  countryName: string;\n  officialName: string;\n  isoAlpha2: string;\n  isoAlpha3: string;\n  isoNumeric: string;\n  capital: string[];\n  capitalPrimary: string;\n  coordinates: {\n    latitude: number;\n    longitude: number;\n    latLng: number[];\n  };\n  areaSqKm: number;\n  continent: string;\n  region: string;\n  subregion: string;\n  population: number;\n  languages: { [key: string]: string };\n  languagesName: string[];\n  languageCode: string[];\n  primaryLanguage: string;\n  primaryLanguageCode: string;\n  currencies: { [key: string]: any };\n  currencyCode: string;\n  currencyName: string;\n  currencySymbol: string;\n  phoneCodeFull: string;\n  flag: string;\n  flagPng: string;\n  flagSvg: string;\n  timezones: string[];\n  borders: string[];\n  [key: string]: any;\n}\n\n@Injectable({\n  providedIn: 'root'\n})\nexport class CountryService {\n  private countriesData: CountryData[] = [];\n  currentCurrencyOption: any;\n  private currentCurrencyOptionSubject = new BehaviorSubject<any[]>([]);\n  currentCurrencyOption$ = this.currentCurrencyOptionSubject.asObservable();\n\n\n  constructor() {\n    this.countriesData = this.transformData(countryJson);\n  }\n\n  //SKS24JUN25 Transform raw data to enhanced format\n  private transformData(countries: any[]): CountryData[] {\n    return countries.map(country => {\n      const getFirstValue = (obj: any) => obj ? Object.values(obj)[0] : null;\n      const getFirstKey = (obj: any) => obj ? Object.keys(obj)[0] : null;\n      const safeCurrency = country.currencies ? getFirstValue(country.currencies) : null;\n      const primaryLanguage = country.languages ? getFirstKey(country.languages) : 'en';\n\n      return {\n        countryName: country.name?.common || 'Unknown',\n        officialName: country.name?.official || country.name?.common || 'Unknown',\n        isoAlpha2: country.cca2 || '',\n        isoAlpha3: country.cca3 || '',\n        isoNumeric: country.ccn3 || '',\n        capital: Array.isArray(country.capital) ? country.capital : [country.capital || 'N/A'],\n        capitalPrimary: Array.isArray(country.capital) ? country.capital[0] : (country.capital || 'N/A'),\n        coordinates: {\n          latitude: country.latlng?.[0] || 0,\n          longitude: country.latlng?.[1] || 0,\n          latLng: country.latlng || [0, 0]\n        },\n        areaSqKm: country.area || 0,\n        continent: Array.isArray(country.continents) ? country.continents[0] : (country.continents || 'Unknown'),\n        region: country.region || 'Unknown',\n        subregion: country.subregion || 'Unknown',\n        population: country.population || 0,\n        languages: country.languages || {},\n        languagesCodeAndName: country.languages\n        ? Object.entries(country.languages).map(([code, name]) => ({\n            languageCode: code,\n            languagesName: name\n          }))\n        : [],\n        languagesName: country.languages ? Object.values(country.languages) : [],\n        languageCode: country.languages ? Object.keys(country.languages) : [],\n        primaryLanguage: country.languages ? getFirstValue(country.languages) : 'English',\n        primaryLanguageCode: primaryLanguage,\n        currencies: country.currencies || {},\n        currencyCode: safeCurrency ? getFirstKey(country.currencies) : 'USD',\n        currencyName: (safeCurrency as any)?.name || 'Unknown',\n        currencySymbol: (safeCurrency as any)?.symbol || '$',\n        phoneCodeFull: (country.idd?.root || '') + (country.idd?.suffixes?.[0] || ''),\n        flag: country.flag || '🏳️',\n        flagPng: country.flags?.png || '',\n        flagSvg: country.flags?.svg || '',\n        timezones: country.timezones || [],\n        borders: country.borders || [],\n        ...country\n      };\n    });\n  }\n  currentCurrency(option: any){\n    this.currentCurrencyOptionSubject.next(option);\n    this.currentCurrencyOption = option\n  }\n  // SKS24OCT25 currency code set function \n  currencyCodeSet(code: any){\n    let currencyOptions = this.getCountryData(['currencies'])\n    if(currencyOptions && currencyOptions.length > 0){\n      currencyOptions.forEach((option: any) => {\n        if(option.code === code){\n          this.currentCurrency(option)\n        }\n      })\n    }\n  }\n  getCurrentCurrency(){\n    return this.currentCurrencyOption || {\n      \"code\": \"INR\",\n      \"name\": \"Indian rupee\",\n      \"symbol\": \"₹\"\n  }\n  }\n  //SKS24JUN25 Single method to get requested fields, with deduplication for languageCode and languagesName\n  getCountryData(fields: (keyof CountryData)[]): any[] {\n    // SKS24JUN25 Handle special case for languageCode and languagesName to remove duplicates\n    if (fields.includes('languageCode') || fields.includes('languagesName')) {\n      const result: any[] = [];\n      const uniqueValues = new Set<string>();\n\n      if (fields.includes('languageCode') && !fields.includes('languagesName')) {\n        this.countriesData.forEach(country => {\n          country.languageCode.forEach(code => {\n            if (code && code !== '') {\n              uniqueValues.add(code);\n            }\n          });\n        });\n        result.push(...Array.from(uniqueValues).map(code => ({ languageCode: code })));\n      }\n\n      if (fields.includes('languagesName') && !fields.includes('languageCode')) {\n        uniqueValues.clear();\n        this.countriesData.forEach(country => {\n          country.languagesName.forEach(lang => {\n            if (lang && lang !== '') {\n              uniqueValues.add(lang);\n            }\n          });\n        });\n        result.push(...Array.from(uniqueValues).map(lang => ({ languagesName: lang })));\n      }\n      if(fields.includes('languagesName') && fields.includes('languageCode')){\n        const uniqueLanguageMap = new Map();\n        this.countriesData.forEach(country => {\n          country.languagesCodeAndName.forEach(language => {\n            const key = `${language.languageCode}-${language.languagesName}`;\n            if (!uniqueLanguageMap.has(key)) {\n              uniqueLanguageMap.set(key, language);\n            }\n          });\n        });\n        result.push(...Array.from(uniqueLanguageMap.values()));\n      }\n\n      // SKS24JUN25 Include other requested fields\n      const otherFields = fields.filter(f => f !== 'languageCode' && f !== 'languagesName');\n      if (otherFields.length > 0) {\n        const otherData = this.countriesData.map(country => {\n          const obj: any = {};\n          otherFields.forEach(field => {\n            if (country[field] != null && country[field] !== '' && country[field] !== 'Unknown') {\n              obj[field] = country[field];\n            }\n          });\n          return Object.keys(obj).length > 0 ? obj : null;\n        }).filter(obj => obj != null);\n        result.push(...otherData);\n      }\n\n      return result;\n    }\n\n    // SKS24JUN25 General case: return requested fields for all countries\n    const result = this.countriesData.map(country => {\n      const obj: any = {};\n      fields.forEach(field => {\n        if (country[field] != null && country[field] !== '' && country[field] !== 'Unknown') {\n          obj[field] = country[field];\n        }\n      });\n      return Object.keys(obj).length > 0 ? obj : null;\n    }).filter(obj => obj != null);\n\n    if(fields.includes('currencies')){\n      return result.flatMap(item => {\n        const currencies = item.currencies;\n        // Skip if currencies is empty\n        if (!currencies || Object.keys(currencies).length === 0) {\n          return [];\n        }\n        // Map each currency code to the desired format\n        return Object.keys(currencies).map(code => ({\n          code: code,\n          name: currencies[code].name,\n          symbol: currencies[code].symbol\n        }));\n      });\n    } else {\n      return result\n    }\n  }\n}","import { Injectable } from '@angular/core';\n@Injectable({\n  providedIn: 'root'\n})\nexport class StorageService {\n  private queryValueMap = new Map<string, any>();\n  private apiResponseData = {}\n  private conditionQuestionValue = {}\n\n  constructor() { }\n\n  queryValueStore(questionId: string, key: string, value: any): void {\n    const existing = this.queryValueMap.get(questionId) || {};\n    existing[key] = value;\n    this.queryValueMap.set(questionId, existing);\n  }\n  \n  getQueryValue(questionId: string): any {\n    return this.queryValueMap.get(questionId) || {};\n  }\n\n  // Optional: clear specific or all\n  clearQueryValue(questionId: string): void {\n    this.queryValueMap.delete(questionId);\n  }\n\n  clearAllQueryValues(): void {\n    this.queryValueMap.clear();\n  }\n\n//SKS7AUG25 Store API response data keyed by questionId\napiResponseStore(questionId: string, value: any): void {\n  this.apiResponseData[questionId] = value ?? {};\n}\n\n//SKS7AUG25 Retrieve API response value by questionId\ngetApiResponseValue(questionId: string): any {\n  return this.apiResponseData[questionId] ?? null;\n}\n\n//SKS7AUG25 Clear a specific API response value\nclearApiResponseValue(questionId: string): void {\n  delete this.apiResponseData[questionId];\n}\n\n//SKS7AUG25 Clear all stored API response values\nclearAllApiResponseValues(): void {\n  this.apiResponseData = {};\n}\n// SKS12SEP25 condition based question status store\nsetConditionQuestionValue(quesId: any,condQId: any,status: boolean){\n if(!this.conditionQuestionValue[quesId])this.conditionQuestionValue[quesId] = {}\n if(!this.conditionQuestionValue[quesId][condQId]) this.conditionQuestionValue[quesId][condQId] = {}\n this.conditionQuestionValue[quesId][condQId]['status'] = status\n}\ngetConditionQuestionValue(quesId: any,condQId: any){\n return this.conditionQuestionValue[quesId][condQId]\n}\nsetConditionQuestionData(quesId: any,condQId: any,data: any){\n  if(!this.conditionQuestionValue[quesId])this.conditionQuestionValue[quesId] = {}\n if(!this.conditionQuestionValue[quesId][condQId]) this.conditionQuestionValue[quesId][condQId] = {}\n this.conditionQuestionValue[quesId][condQId]['data'] = data\n}\n}\n","import { Injectable } from '@angular/core';\nimport { BehaviorSubject } from 'rxjs';\n\n@Injectable({\n  providedIn: 'root'\n})\nexport class ChangeService {\n\n  constructor() { }\n// Observable parentQuestion sources\nprivate changeAnnouncedSource =new BehaviorSubject<any>(null);\nprivate changeConfirmedSource = new BehaviorSubject<any>(null);\nprivate validationSource = new BehaviorSubject<any>(null);\nprivate fieldSource = new BehaviorSubject<any>(null);\n// VD 13Sep24 - databind changes\nprivate customChanges = new BehaviorSubject<any>(null);\n\n// Observable parentQuestion streams\nchangeAnnounced$ = this.changeAnnouncedSource.asObservable();\nchangeConfirmed$ = this.changeConfirmedSource.asObservable();\nsubmitValidate$ = this.validationSource.asObservable();\nchangeField$ = this.fieldSource.asObservable();\n// VD 13Sep24 - databind changes\ncustomChange$ = this.customChanges.asObservable();\n\n// Service message commands\nannounceChange(changeValue: any) {\n  this.changeAnnouncedSource.next(changeValue);\n}\n\nconfirmChange(childQuestion: string) {\n  this.changeConfirmedSource.next(childQuestion);\n}\n// VD 13Sep24 - databind changes\ndataChanges(data: string) {\n  this.customChanges.next(data);\n}\n\nsubmitChange(value:string){\n  this.validationSource.next(value);\n}\nfieldChange(value:any){\n this.fieldSource.next(value);\n}\n}","//SKS31JAN25\nimport { CommonModule } from '@angular/common';\nimport { Component, Input, Output, EventEmitter, forwardRef, ChangeDetectionStrategy, ViewChildren, QueryList, ElementRef, SimpleChanges, HostListener, ViewChild, AfterViewInit, Renderer2, ChangeDetectorRef, NgZone } from '@angular/core';\nimport { AbstractControl, FormArray, FormControl, FormsModule, NG_VALIDATORS, NG_VALUE_ACCESSOR, ReactiveFormsModule, ValidationErrors, ValidatorFn, Validators } from '@angular/forms';\nimport { Subscription } from 'rxjs';\nimport { QuillEditorComponent, QuillModules } from 'ngx-quill';\nimport Quill from 'quill';\nimport { Mention } from 'quill-mention';\nimport ImageResizor from 'quill-image-resizor';\nimport { ChangeService } from '../../services/change/change.service';\nimport { DataService } from '../../services/data/data.service';\nimport { TranslationService } from '../../services/translation/translation.service';\nimport { NxtDatePipe } from '../../pipe/NxtDate.pipe';\nimport { StorageService } from '../../services/storage/storage.service';\nimport { NxtDatepickerComponent } from '../nxt-datepicker/nxt-datepicker.component';\nimport { CountryService } from '../../services/country/country.service';\nimport { MatTooltipModule } from '@angular/material/tooltip';\nimport { GoogleMapsModule } from '@angular/google-maps';\nimport { NxtCustomTranslatePipe } from '../../pipe/custom-translate.pipe';\nimport { GoogleMapsLoaderService } from '../../services/GoogleMapsLoaderService/google-maps-loader-service.service';\nimport { AmountInWordsPipe } from '../../pipe/amount-in-words/amount-in-words.pipe';\nimport { Subject, takeUntil } from 'rxjs';\n\n// SKS11JUN25 An array fontFamilyArr is created containing a list of font family names as strings.\nconst fontFamilyArr = [\"Roboto\", \"Roboto Condensed\", \"Arial\", \"Verdana\", \"Tahoma\", \"Trebuchet MS\",\n  \"Georgia\", \"Times New Roman\", \"Courier New\", \"Palatino Linotype\",\n  \"Segoe UI\", \"Calibri\", \"Calibri Light\", \"Sans-Serif\", \"Helvetica\",\n  \"Impact\", \"Garamond\", \"Comic Sans MS\", \"Lucida Console\", \"Franklin Gothic Medium\"];\n// SKS11JUN25 Register Quill modules\nQuill.register('modules/mention', Mention);\nImageResizor.Quill = Quill;\nQuill.register('modules/imageResizor', ImageResizor);\n\n// SKS11JUN25 The Quill font style attributor is imported and it is registered with Quil\nlet fonts: any = Quill.import(\"attributors/style/font\");\nfonts.whitelist = fontFamilyArr;\nQuill.register(fonts, true);\nconst icons = Quill.import('ui/icons');\nicons['save'] = `<svg width=\"12\" height=\"13\" viewBox=\"0 0 12 13\" fill=\"none\"\n            xmlns=\"http://www.w3.org/2000/svg\">\n            <path\n              d=\"M5.95 12.8004C9.23609 12.8004 11.9 10.1365 11.9 6.85039C11.9 3.5643 9.23609 0.900391 5.95 0.900391C2.66391 0.900391 0 3.5643 0 6.85039C0 10.1365 2.66391 12.8004 5.95 12.8004Z\"\n              fill=\"#259566\" />\n            <path\n              d=\"M8.88111 4.74622C8.83269 4.69759 8.77513 4.65899 8.71176 4.63266C8.64838 4.60633 8.58043 4.59277 8.5118 4.59277C8.44317 4.59277 8.37521 4.60633 8.31184 4.63266C8.24846 4.65899 8.19091 4.69759 8.14249 4.74622L4.8269 8.06386L3.35253 6.58949C3.30403 6.54099 3.24646 6.50252 3.18309 6.47627C3.11972 6.45003 3.05181 6.43652 2.98322 6.43652C2.91463 6.43652 2.84672 6.45003 2.78335 6.47627C2.71999 6.50252 2.66241 6.54099 2.61391 6.58949C2.56541 6.63799 2.52694 6.69557 2.50069 6.75893C2.47445 6.8223 2.46094 6.89022 2.46094 6.9588C2.46094 7.02739 2.47445 7.09531 2.50069 7.15867C2.52694 7.22204 2.56541 7.27961 2.61391 7.32811L4.45677 9.17097C4.50519 9.21961 4.56274 9.2582 4.62612 9.28453C4.6895 9.31086 4.75745 9.32442 4.82608 9.32442C4.89471 9.32442 4.96266 9.31086 5.02604 9.28453C5.08942 9.2582 5.14697 9.21961 5.19539 9.17097L8.88111 5.48484C8.92974 5.43642 8.96834 5.37887 8.99467 5.31549C9.021 5.25212 9.03456 5.18416 9.03456 5.11553C9.03456 5.0469 9.021 4.97895 8.99467 4.91557C8.96834 4.8522 8.92974 4.79465 8.88111 4.74622Z\"\n              fill=\"white\" />\n          </svg>`;\nicons['discard'] = `<svg *ngIf=\"isDiscardHovered\" (click)=\"discardChanges()\" width=\"12\" height=\"13\" viewBox=\"0 0 12 13\"\n                fill=\"none\" xmlns=\"http://www.w3.org/2000/svg\">\n                <path\n                  d=\"M7.05555 4.97471L5.94 6.09026L4.82445 4.97471C4.57861 4.72887 4.18191 4.72887 3.93607 4.97471C3.69023 5.22055 3.69023 5.61725 3.93607 5.86309L5.05162 6.97864L3.93607 8.09419C3.69023 8.34003 3.69023 8.73673 3.93607 8.98257C4.18191 9.22841 4.57861 9.22841 4.82445 8.98257L5.94 7.86702L7.05555 8.98257C7.30139 9.22841 7.69809 9.22841 7.94393 8.98257C8.18977 8.73673 8.18977 8.34003 7.94393 8.09419L6.82838 6.97864L7.94393 5.86309C8.18977 5.61725 8.18977 5.22055 7.94393 4.97471C7.69809 4.73873 7.30021 4.73873 7.05555 4.97471ZM5.94 1.06062C2.70017 1.06062 0.0808594 3.67993 0.0808594 6.91977C0.0808594 10.1596 2.70017 12.7789 5.94 12.7789C9.17983 12.7789 11.7991 10.1596 11.7991 6.91977C11.7991 3.67993 9.17983 1.06062 5.94 1.06062ZM5.94 11.6153C3.35426 11.6153 1.24422 9.50525 1.24422 6.91977C1.24422 4.33412 3.35426 2.22408 5.94 2.22408C8.52558 2.22408 10.6356 4.33412 10.6356 6.91977C10.6356 9.50525 8.52558 11.6153 5.94 11.6153Z\"\n                  fill=\"#FF3636\" />\n                </svg>`;\n\nfunction getFormArray(size: number): FormArray {\n  const arr = [];\n\n  for (let i = 0; i < size; i++) {\n    arr.push(new FormControl(''));\n  }\n\n  return new FormArray(arr);\n}\n\n@Component({\n  standalone: true,\n  imports: [CommonModule, NxtCustomTranslatePipe, GoogleMapsModule, MatTooltipModule, ReactiveFormsModule, QuillEditorComponent, FormsModule, NxtDatePipe, NxtDatepickerComponent, AmountInWordsPipe],\n  selector: 'nxt-input',\n  templateUrl: './nxt-input.component.html',\n  styleUrls: ['./nxt-input.component.css'],\n  providers: [\n    {\n      provide: NG_VALUE_ACCESSOR,\n      useExisting: forwardRef(() => NxtInput),\n      multi: true\n    },\n    {\n      provide: NG_VALIDATORS,\n      useExisting: forwardRef(() => NxtInput),\n      multi: true,\n    },\n  ],\n})\nexport class NxtInput implements AfterViewInit {\n  // SKS30JAN25\n  @Input() label: string = '';  // Input label\n  @Input() labelFont: string = '';  // Input label font\n  @Input() labelWeight: string = '';  // Input label Weight\n  @Input() inputWeight: string = '';  // Input Weight\n  @Input() labelSize: string = '';  // Input label Size\n  @Input() inputValueSize: string = ''; //Input value Size\n  @Input() textAlign: string = ''; // SKS16OCT25 Input alignment ex:- start, center, end\n  @Input() labelColor: string = '';  // Input label Color\n  @Input() showLabel: boolean = true;  // Input label Color\n  @Input() svgHeight: string = '';  // Input svg height\n  @Input() svgWidth: string = '';  // Input svg weight\n  @Input() type: string = 'text';  // Input type (text, email, password)\n  @Input() inputIconRightSrc: string = '';  // Path to SVG icon\n  @Input() inputIconLeftSrc: string = '';\n  @Input() required: boolean = false;  // Required validation\n  @Input() minLength?: number;  // Min length validation\n  @Input() pattern?: any;  // Pattern validation (e.g., email regex)\n  @Input() errorMessages: { [key: string]: string } = {};   // Custom error messages\n  @Input() maxLength: number = 0; // Maximum length validation\n  @Input() placeholder: string = '';\n  @Input() inputBgColor: string = ''; // Use this input to set a custom background color for the input.\n  @Input() inputBorder: string = ''; // Use this input to set a custom border style for the input.\n  @Input() placeholderColor: string = ''; // Use this input to set a custom text color for the input.\n  @Input() placeholderFont: string = ''; // Use this input to set a custom placeholder font\n  @Input() placeholderWeight: string = ''; // Use this input to set a custom\n  @Input() placeholderSize: string = ''; // Use this input to set a custom size\n  @Input() inputTextColor: string = ''; // Use this input to set a custom text color for the input value.\n  @Input() inputHeight: string = ''; // Use this input to set a custom height for the input.\n  @Input() inputWidth: string = ''; // Use this input to set a custom width for the Input.\n  @Input() inputId: string = 'default'; // Use this input to set a custom ID for the input. Default is 'default'.\n  @Input() inputBorderSize: string = undefined; // Use this input to set the border size of the input. Default is '0px' for no border.\n  @Input() inputConfig: any = ''; // Use this input to pass configuration settings for the input (e.g., styles, actions).\n  @Input() confPassVal: any = ''; // Password value to check if the current field matches the confirmed password\n  @Input() confPass: boolean = false; // Set to true to enable password confirmation validation\n  @Input() mode: 'view' | 'edit' | 'print' = 'edit'; // New mode input\n  @Input() value: any ; // input value\n  @Input() question: any = {}\n  @Input() showSuggestion: boolean = false; // showSuggestion the input\n  @Input() ariaOwns?: string;\n  @Input() ariaHasPopup?: string;\n  @Input() isLoading: boolean = false; // Set to true to show a loading animation\n  @Input() options: any[] = []; // For radio buttons\n  @Input() minDate: any; // For date/datetime picker\n  @Input() maxDate: any; // For date/datetime picker\n  @Input() rows: number = 2; // SKS16OCT25 default textarea height set to 2 rows, commonly used size\n  @Input() from: any;\n  @Input() selectedOption: any;\n  @Input() apiMeta: any;\n  @Input() direction: any = \"ltr\"\n  @Input() currency: any = 'INR'\n  @Input() helpText: any\n  @Input() apiKey: any; // HA10012024 declared Api key to src\n  @Input() readOnly: boolean = false;\n  @Input() padding: any; // SKS16OCT25 input padding\n  @Input() margin: any; // SKS16OCT25 input margin\n  @Input() onlyView: boolean = false;\n  @Input() //otp box size\n  set size(size: number) {\n    this.inputs = getFormArray(size);\n    this.#size = size;\n  }\n  \n  @Output() valueChange = new EventEmitter<string>();  // Emits input value changes\n  @Output() inputValue = new EventEmitter<any>(); \n  @Output() selectEmit = new EventEmitter<any>(); \n  @Output() onBlur = new EventEmitter<any>();\n  @Output() onFocus = new EventEmitter<any>();\n  @Output() toggleEmit = new EventEmitter<any>();\n  @Output() removeValueEmit = new EventEmitter<any>();\n  \n  @ViewChildren('inputEl') inputEls!: QueryList<ElementRef<HTMLInputElement>>;\n  @ViewChild('inputRef', { static: false }) inputRef: ElementRef;\n\n  #size = 4;\n  #scheduledFocus: number | null = null;\n\n  inputs = getFormArray(this.#size);\n  control: FormControl = new FormControl('');\n  isPasswordVisible: boolean = false;\n  countryCode: string = '';\n  // SKS28FEB25 countries list\n  countries = [\n    {\n      \"name\": \"Afghanistan\",\n      \"flag\": \"🇦🇫\",\n      \"code\": \"AF\",\n      \"dial_code\": \"+93\",\n      \"regex\": \"^\\\\+93[0-9]{9}$\",\n      \"placeholder\": \"+93 70 123 4567\"\n    },\n    {\n      \"name\": \"Åland Islands\",\n      \"flag\": \"🇦🇽\",\n      \"code\": \"AX\",\n      \"dial_code\": \"+358\",\n      \"regex\": \"^\\\\+358[0-9]{6,12}$\",\n      \"placeholder\": \"+358 18 123 45\"\n    },\n    {\n      \"name\": \"Albania\",\n      \"flag\": \"🇦🇱\",\n      \"code\": \"AL\",\n      \"dial_code\": \"+355\",\n      \"regex\": \"^\\\\+355[0-9]{9}$\",\n      \"placeholder\": \"+355 69 123 4567\"\n    },\n    {\n      \"name\": \"Algeria\",\n      \"flag\": \"🇩🇿\",\n      \"code\": \"DZ\",\n      \"dial_code\": \"+213\",\n      \"regex\": \"^\\\\+213[0-9]{9}$\",\n      \"placeholder\": \"+213 551 234 567\"\n    },\n    {\n      \"name\": \"American Samoa\",\n      \"flag\": \"🇦🇸\",\n      \"code\": \"AS\",\n      \"dial_code\": \"+1684\",\n      \"regex\": \"^\\\\+1684[0-9]{7}$\",\n      \"placeholder\": \"+1684 123 4567\"\n    },\n    {\n      \"name\": \"Andorra\",\n      \"flag\": \"🇦🇩\",\n      \"code\": \"AD\",\n      \"dial_code\": \"+376\",\n      \"regex\": \"^\\\\+376[0-9]{6}$\",\n      \"placeholder\": \"+376 123 456\"\n    },\n    {\n      \"name\": \"Angola\",\n      \"flag\": \"🇦🇴\",\n      \"code\": \"AO\",\n      \"dial_code\": \"+244\",\n      \"regex\": \"^\\\\+244[0-9]{9}$\",\n      \"placeholder\": \"+244 923 123 456\"\n    },\n    {\n      \"name\": \"Anguilla\",\n      \"flag\": \"🇦🇮\",\n      \"code\": \"AI\",\n      \"dial_code\": \"+1264\",\n      \"regex\": \"^\\\\+1264[0-9]{7}$\",\n      \"placeholder\": \"+1264 235 1234\"\n    },\n    {\n      \"name\": \"Antarctica\",\n      \"flag\": \"🇦🇶\",\n      \"code\": \"AQ\",\n      \"dial_code\": \"+672\",\n      \"regex\": \"^\\\\+672[0-9]{6,12}$\",\n      \"placeholder\": \"+672 123 456\"\n    },\n    {\n      \"name\": \"Antigua and Barbuda\",\n      \"flag\": \"🇦🇬\",\n      \"code\": \"AG\",\n      \"dial_code\": \"+1268\",\n      \"regex\": \"^\\\\+1268[0-9]{7}$\",\n      \"placeholder\": \"+1268 234 5678\"\n    },\n    {\n      \"name\": \"Argentina\",\n      \"flag\": \"🇦🇷\",\n      \"code\": \"AR\",\n      \"dial_code\": \"+54\",\n      \"regex\": \"^\\\\+54[0-9]{10,11}$\",\n      \"placeholder\": \"+54 9 11 1234 5678\"\n    },\n    {\n      \"name\": \"Armenia\",\n      \"flag\": \"🇦🇲\",\n      \"code\": \"AM\",\n      \"dial_code\": \"+374\",\n      \"regex\": \"^\\\\+374[0-9]{8}$\",\n      \"placeholder\": \"+374 94 123 456\"\n    },\n    {\n      \"name\": \"Aruba\",\n      \"flag\": \"🇦🇼\",\n      \"code\": \"AW\",\n      \"dial_code\": \"+297\",\n      \"regex\": \"^\\\\+297[0-9]{7}$\",\n      \"placeholder\": \"+297 560 1234\"\n    },\n    {\n      \"name\": \"Australia\",\n      \"flag\": \"🇦🇺\",\n      \"code\": \"AU\",\n      \"dial_code\": \"+61\",\n      \"regex\": \"^\\\\+61[0-9]{9}$\",\n      \"placeholder\": \"+61 4 1234 5678\"\n    },\n    {\n      \"name\": \"Austria\",\n      \"flag\": \"🇦🇹\",\n      \"code\": \"AT\",\n      \"dial_code\": \"+43\",\n      \"regex\": \"^\\\\+43[0-9]{10,12}$\",\n      \"placeholder\": \"+43 664 123 4567\"\n    },\n    {\n      \"name\": \"Azerbaijan\",\n      \"flag\": \"🇦🇿\",\n      \"code\": \"AZ\",\n      \"dial_code\": \"+994\",\n      \"regex\": \"^\\\\+994[0-9]{9}$\",\n      \"placeholder\": \"+994 50 123 45 67\"\n    },\n    {\n      \"name\": \"Bahamas\",\n      \"flag\": \"🇧🇸\",\n      \"code\": \"BS\",\n      \"dial_code\": \"+1242\",\n      \"regex\": \"^\\\\+1242[0-9]{7}$\",\n      \"placeholder\": \"+1242 323 1234\"\n    },\n    {\n      \"name\": \"Bahrain\",\n      \"flag\": \"🇧🇭\",\n      \"code\": \"BH\",\n      \"dial_code\": \"+973\",\n      \"regex\": \"^\\\\+973[0-9]{8}$\",\n      \"placeholder\": \"+973 3123 4567\"\n    },\n    {\n      \"name\": \"Bangladesh\",\n      \"flag\": \"🇧🇩\",\n      \"code\": \"BD\",\n      \"dial_code\": \"+880\",\n      \"regex\": \"^\\\\+880[0-9]{10}$\",\n      \"placeholder\": \"+880 1712 345678\"\n    },\n    {\n      \"name\": \"Barbados\",\n      \"flag\": \"🇧🇧\",\n      \"code\": \"BB\",\n      \"dial_code\": \"+1246\",\n      \"regex\": \"^\\\\+1246[0-9]{7}$\",\n      \"placeholder\": \"+1246 250 1234\"\n    },\n    {\n      \"name\": \"Belarus\",\n      \"flag\": \"🇧🇾\",\n      \"code\": \"BY\",\n      \"dial_code\": \"+375\",\n      \"regex\": \"^\\\\+375[0-9]{9}$\",\n      \"placeholder\": \"+375 29 123 45 67\"\n    },\n    {\n      \"name\": \"Belgium\",\n      \"flag\": \"🇧🇪\",\n      \"code\": \"BE\",\n      \"dial_code\": \"+32\",\n      \"regex\": \"^\\\\+32[0-9]{9}$\",\n      \"placeholder\": \"+32 470 12 34 56\"\n    },\n    {\n      \"name\": \"Belize\",\n      \"flag\": \"🇧🇿\",\n      \"code\": \"BZ\",\n      \"dial_code\": \"+501\",\n      \"regex\": \"^\\\\+501[0-9]{7}$\",\n      \"placeholder\": \"+501 610 1234\"\n    },\n    {\n      \"name\": \"Benin\",\n      \"flag\": \"🇧🇯\",\n      \"code\": \"BJ\",\n      \"dial_code\": \"+229\",\n      \"regex\": \"^\\\\+229[0-9]{8}$\",\n      \"placeholder\": \"+229 90 12 3456\"\n    },\n    {\n      \"name\": \"Bermuda\",\n      \"flag\": \"🇧🇲\",\n      \"code\": \"BM\",\n      \"dial_code\": \"+1441\",\n      \"regex\": \"^\\\\+1441[0-9]{7}$\",\n      \"placeholder\": \"+1441 370 1234\"\n    },\n    {\n      \"name\": \"Bhutan\",\n      \"flag\": \"🇧🇹\",\n      \"code\": \"BT\",\n      \"dial_code\": \"+975\",\n      \"regex\": \"^\\\\+975[0-9]{7,8}$\",\n      \"placeholder\": \"+975 17 123 456\"\n    },\n    {\n      \"name\": \"Bolivia, Plurinational State of bolivia\",\n      \"flag\": \"🇧🇴\",\n      \"code\": \"BO\",\n      \"dial_code\": \"+591\",\n      \"regex\": \"^\\\\+591[1-9]\\\\d{7}$\",\n      \"placeholder\": \"+591 12345678\",\n      \"example\": \"+591 70123456\"\n    },\n    {\n      \"name\": \"Bosnia and Herzegovina\",\n      \"flag\": \"🇧🇦\",\n      \"code\": \"BA\",\n      \"dial_code\": \"+387\",\n      \"regex\": \"^\\\\+387[0-9]{8,9}$\",\n      \"placeholder\": \"+387 61 123 456\"\n    },\n    {\n      \"name\": \"Botswana\",\n      \"flag\": \"🇧🇼\",\n      \"code\": \"BW\",\n      \"dial_code\": \"+267\",\n      \"regex\": \"^\\\\+267[0-9]{8}$\",\n      \"placeholder\": \"+267 71 123 456\"\n    },\n    {\n      \"name\": \"Bouvet Island\",\n      \"code\": \"BV\",\n      \"dial_code\": \"+47\",\n      \"regex\": \"^\\\\+47\\\\d{8}$\",\n      \"placeholder\": \"+47 XXXXXXXX\",\n      \"format\": \"+47 XX XX XX XX\",\n      \"flag\": \"🇧🇻\"\n    },\n    {\n      \"name\": \"Brazil\",\n      \"flag\": \"🇧🇷\",\n      \"code\": \"BR\",\n      \"dial_code\": \"+55\",\n      \"regex\": \"^\\\\+55[0-9]{10,11}$\",\n      \"placeholder\": \"+55 11 91234 5678\"\n    },\n    {\n      \"name\": \"British Indian Ocean Territory\",\n      \"flag\": \"🇮🇴\",\n      \"code\": \"IO\",\n      \"dial_code\": \"+246\",\n      \"regex\": \"^\\\\+246[0-9]{7}$\",\n      \"placeholder\": \"+246 380 1234\"\n    },\n    {\n      \"name\": \"Brunei Darussalam\",\n      \"flag\": \"🇧🇳\",\n      \"code\": \"BN\",\n      \"dial_code\": \"+673\",\n      \"regex\": \"^\\\\+673[0-9]{7}$\",\n      \"placeholder\": \"+673 712 3456\"\n    },\n    {\n      \"name\": \"Bulgaria\",\n      \"flag\": \"🇧🇬\",\n      \"code\": \"BG\",\n      \"dial_code\": \"+359\",\n      \"regex\": \"^\\\\+359[0-9]{9}$\",\n      \"placeholder\": \"+359 87 123 4567\"\n    },\n    {\n      \"name\": \"Burkina Faso\",\n      \"flag\": \"🇧🇫\",\n      \"code\": \"BF\",\n      \"dial_code\": \"+226\",\n      \"regex\": \"^\\\\+226[0-9]{8}$\",\n      \"placeholder\": \"+226 70 12 3456\"\n    },\n    {\n      \"name\": \"Burundi\",\n      \"flag\": \"🇧🇮\",\n      \"code\": \"BI\",\n      \"dial_code\": \"+257\",\n      \"regex\": \"^\\\\+257[0-9]{8}$\",\n      \"placeholder\": \"+257 79 12 3456\"\n    },\n    {\n      \"name\": \"Cambodia\",\n      \"flag\": \"🇰🇭\",\n      \"code\": \"KH\",\n      \"dial_code\": \"+855\",\n      \"regex\": \"^\\\\+855[0-9]{8,9}$\",\n      \"placeholder\": \"+855 91 234 567\"\n    },\n    {\n      \"name\": \"Cameroon\",\n      \"flag\": \"🇨🇲\",\n      \"code\": \"CM\",\n      \"dial_code\": \"+237\",\n      \"regex\": \"^\\\\+237[0-9]{8}$\",\n      \"placeholder\": \"+237 6 71 23 45 67\"\n    },\n    {\n      \"name\": \"Canada\",\n      \"flag\": \"🇨🇦\",\n      \"code\": \"CA\",\n      \"dial_code\": \"+1\",\n      \"regex\": \"^\\\\+1[0-9]{10}$\",\n      \"placeholder\": \"+1 204 123 4567\"\n    },\n    {\n      \"name\": \"Cape Verde\",\n      \"flag\": \"🇨🇻\",\n      \"code\": \"CV\",\n      \"dial_code\": \"+238\",\n      \"regex\": \"^\\\\+238[0-9]{7}$\",\n      \"placeholder\": \"+238 991 2345\"\n    },\n    {\n      \"name\": \"Cayman Islands\",\n      \"flag\": \"🇰🇾\",\n      \"code\": \"KY\",\n      \"dial_code\": \"+345\",\n      \"regex\": \"^\\\\+345[0-9]{7}$\",\n      \"placeholder\": \"+345 321 1234\"\n    },\n    {\n      \"name\": \"Central African Republic\",\n      \"flag\": \"🇨🇫\",\n      \"code\": \"CF\",\n      \"dial_code\": \"+236\",\n      \"regex\": \"^\\\\+236[0-9]{8}$\",\n      \"placeholder\": \"+236 72 12 3456\"\n    },\n    {\n      \"name\": \"Chad\",\n      \"flag\": \"🇹🇩\",\n      \"code\": \"TD\",\n      \"dial_code\": \"+235\",\n      \"regex\": \"^\\\\+235[0-9]{8}$\",\n      \"placeholder\": \"+235 63 12 3456\"\n    },\n    {\n      \"name\": \"Chile\",\n      \"flag\": \"🇨🇱\",\n      \"code\": \"CL\",\n      \"dial_code\": \"+56\",\n      \"regex\": \"^\\\\+56[0-9]{9}$\",\n      \"placeholder\": \"+56 9 1234 5678\"\n    },\n    {\n      \"name\": \"China\",\n      \"flag\": \"🇨🇳\",\n      \"code\": \"CN\",\n      \"dial_code\": \"+86\",\n      \"regex\": \"^\\\\+86[0-9]{11}$\",\n      \"placeholder\": \"+86 131 2345 6789\"\n    },\n    {\n      \"name\": \"Christmas Island\",\n      \"flag\": \"🇨🇽\",\n      \"code\": \"CX\",\n      \"dial_code\": \"+61\",\n      \"regex\": \"^\\\\+61[0-9]{9}$\",\n      \"placeholder\": \"+61 4 1234 5678\"\n    },\n    {\n      \"name\": \"Cocos (Keeling) Islands\",\n      \"flag\": \"🇨🇨\",\n      \"code\": \"CC\",\n      \"dial_code\": \"+61\",\n      \"regex\": \"^\\\\+61[0-9]{9}$\",\n      \"placeholder\": \"+61 4 1234 5678\"\n    },\n    {\n      \"name\": \"Colombia\",\n      \"flag\": \"🇨🇴\",\n      \"code\": \"CO\",\n      \"dial_code\": \"+57\",\n      \"regex\": \"^\\\\+57[0-9]{10}$\",\n      \"placeholder\": \"+57 312 345 6789\"\n    },\n    {\n      \"name\": \"Comoros\",\n      \"flag\": \"🇰🇲\",\n      \"code\": \"KM\",\n      \"dial_code\": \"+269\",\n      \"regex\": \"^\\\\+269[0-9]{7}$\",\n      \"placeholder\": \"+269 321 2345\"\n    },\n    {\n      \"name\": \"Congo\",\n      \"flag\": \"🇨🇬\",\n      \"code\": \"CG\",\n      \"dial_code\": \"+242\",\n      \"regex\": \"^\\\\+242[0-9]{9}$\",\n      \"placeholder\": \"+242 06 123 4567\"\n    },\n    {\n      \"name\": \"Congo, The Democratic Republic of the Congo\",\n      \"flag\": \"🇨🇩\",\n      \"code\": \"CD\",\n      \"dial_code\": \"+243\",\n      \"regex\": \"^\\\\+243[89]\\\\d{8}$\",\n      \"placeholder\": \"+243 9XXXXXXXX\",\n      \"example\": \"+243 991234567\"\n    },\n    {\n      \"name\": \"Cook Islands\",\n      \"flag\": \"🇨🇰\",\n      \"code\": \"CK\",\n      \"dial_code\": \"+682\",\n      \"regex\": \"^\\\\+682[0-9]{5}$\",\n      \"placeholder\": \"+682 71 234\"\n    },\n    {\n      \"name\": \"Costa Rica\",\n      \"flag\": \"🇨🇷\",\n      \"code\": \"CR\",\n      \"dial_code\": \"+506\",\n      \"regex\": \"^\\\\+506[0-9]{8}$\",\n      \"placeholder\": \"+506 8123 4567\"\n    },\n    {\n      \"name\": \"Cote d'Ivoire\",\n      \"flag\": \"🇨🇮\",\n      \"code\": \"CI\",\n      \"dial_code\": \"+225\",\n      \"regex\": \"^\\\\+225[0-9]{8}$\",\n      \"placeholder\": \"+225 01 23 45 67\"\n    },\n    {\n      \"name\": \"Croatia\",\n      \"flag\": \"🇭🇷\",\n      \"code\": \"HR\",\n      \"dial_code\": \"+385\",\n      \"regex\": \"^\\\\+385[0-9]{8,9}$\",\n      \"placeholder\": \"+385 98 123 456\"\n    },\n    {\n      \"name\": \"Cuba\",\n      \"flag\": \"🇨🇺\",\n      \"code\": \"CU\",\n      \"dial_code\": \"+53\",\n      \"regex\": \"^\\\\+53[0-9]{8}$\",\n      \"placeholder\": \"+53 5 1234 5678\"\n    },\n    {\n      \"name\": \"Cyprus\",\n      \"flag\": \"🇨🇾\",\n      \"code\": \"CY\",\n      \"dial_code\": \"+357\",\n      \"regex\": \"^\\\\+357[0-9]{8}$\",\n      \"placeholder\": \"+357 96 123 456\"\n    },\n    {\n      \"name\": \"Czech Republic\",\n      \"flag\": \"🇨🇿\",\n      \"code\": \"CZ\",\n      \"dial_code\": \"+420\",\n      \"regex\": \"^\\\\+420[0-9]{9}$\",\n      \"placeholder\": \"+420 601 123 456\"\n    },\n    {\n      \"name\": \"Denmark\",\n      \"flag\": \"🇩🇰\",\n      \"code\": \"DK\",\n      \"dial_code\": \"+45\",\n      \"regex\": \"^\\\\+45[0-9]{8}$\",\n      \"placeholder\": \"+45 20 12 34 56\"\n    },\n    {\n      \"name\": \"Djibouti\",\n      \"flag\": \"🇩🇯\",\n      \"code\": \"DJ\",\n      \"dial_code\": \"+253\",\n      \"regex\": \"^\\\\+253[0-9]{8}$\",\n      \"placeholder\": \"+253 77 12 34 56\"\n    },\n    {\n      \"name\": \"Dominica\",\n      \"flag\": \"🇩🇲\",\n      \"code\": \"DM\",\n      \"dial_code\": \"+1767\",\n      \"regex\": \"^\\\\+1767[0-9]{7}$\",\n      \"placeholder\": \"+1767 235 1234\"\n    },\n    {\n      \"name\": \"Dominican Republic\",\n      \"flag\": \"🇩🇴\",\n      \"code\": \"DO\",\n      \"dial_code\": \"+1849\",\n      \"regex\": \"^\\\\+1849[0-9]{7}$\",\n      \"placeholder\": \"+1849 234 5678\"\n    },\n    {\n      \"name\": \"Ecuador\",\n      \"flag\": \"🇪🇨\",\n      \"code\": \"EC\",\n      \"dial_code\": \"+593\",\n      \"regex\": \"^\\\\+593[0-9]{9}$\",\n      \"placeholder\": \"+593 99 123 4567\"\n    },\n    {\n      \"name\": \"Egypt\",\n      \"flag\": \"🇪🇬\",\n      \"code\": \"EG\",\n      \"dial_code\": \"+20\",\n      \"regex\": \"^\\\\+20[0-9]{10}$\",\n      \"placeholder\": \"+20 100 123 4567\"\n    },\n    {\n      \"name\": \"El Salvador\",\n      \"flag\": \"🇸🇻\",\n      \"code\": \"SV\",\n      \"dial_code\": \"+503\",\n      \"regex\": \"^\\\\+503[0-9]{8}$\",\n      \"placeholder\": \"+503 7123 4567\"\n    },\n    {\n      \"name\": \"Equatorial Guinea\",\n      \"flag\": \"🇬🇶\",\n      \"code\": \"GQ\",\n      \"dial_code\": \"+240\",\n      \"regex\": \"^\\\\+240[0-9]{9}$\",\n      \"placeholder\": \"+240 222 123 456\"\n    },\n    {\n      \"name\": \"Eritrea\",\n      \"flag\": \"🇪🇷\",\n      \"code\": \"ER\",\n      \"dial_code\": \"+291\",\n      \"regex\": \"^\\\\+291[0-9]{7}$\",\n      \"placeholder\": \"+291 7 123 456\"\n    },\n    {\n      \"name\": \"Estonia\",\n      \"flag\": \"🇪🇪\",\n      \"code\": \"EE\",\n      \"dial_code\": \"+372\",\n      \"regex\": \"^\\\\+372[0-9]{7,8}$\",\n      \"placeholder\": \"+372 5123 456\"\n    },\n    {\n      \"name\": \"Ethiopia\",\n      \"flag\": \"🇪🇹\",\n      \"code\": \"ET\",\n      \"dial_code\": \"+251\",\n      \"regex\": \"^\\\\+251[0-9]{9}$\",\n      \"placeholder\": \"+251 91 123 4567\"\n    },\n    {\n      \"name\": \"Falkland Islands (Malvinas)\",\n      \"flag\": \"🇫🇰\",\n      \"code\": \"FK\",\n      \"dial_code\": \"+500\",\n      \"regex\": \"^\\\\+500\\\\d{5}$\",\n      \"placeholder\": \"+500 XXXXX\",\n      \"example\": \"+500 12345\"\n    },\n    {\n      \"name\": \"Faroe Islands\",\n      \"flag\": \"🇫🇴\",\n      \"code\": \"FO\",\n      \"dial_code\": \"+298\",\n      \"regex\": \"^\\\\+298[0-9]{6}$\",\n      \"placeholder\": \"+298 123 456\"\n    },\n    {\n      \"name\": \"Fiji\",\n      \"flag\": \"🇫🇯\",\n      \"code\": \"FJ\",\n      \"dial_code\": \"+679\",\n      \"regex\": \"^\\\\+679[0-9]{7,8}$\",\n      \"placeholder\": \"+679 701 2345\"\n    },\n    {\n      \"name\": \"Finland\",\n      \"flag\": \"🇫🇮\",\n      \"code\": \"FI\",\n      \"dial_code\": \"+358\",\n      \"regex\": \"^\\\\+358[0-9]{6,12}$\",\n      \"placeholder\": \"+358 40 123 4567\"\n    },\n    {\n      \"name\": \"France\",\n      \"flag\": \"🇫🇷\",\n      \"code\": \"FR\",\n      \"dial_code\": \"+33\",\n      \"regex\": \"^\\\\+33[0-9]{9}$\",\n      \"placeholder\": \"+33 6 12 34 56 78\"\n    },\n    {\n      \"name\": \"French Guiana\",\n      \"flag\": \"🇬🇫\",\n      \"code\": \"GF\",\n      \"dial_code\": \"+594\",\n      \"regex\": \"^\\\\+594[0-9]{9}$\",\n      \"placeholder\": \"+594 694 12 34 56\"\n    },\n    {\n      \"name\": \"French Polynesia\",\n      \"flag\": \"🇵🇫\",\n      \"code\": \"PF\",\n      \"dial_code\": \"+689\",\n      \"regex\": \"^\\\\+689[0-9]{8}$\",\n      \"placeholder\": \"+689 87 12 34 56\"\n    },\n    {\n      \"name\": \"French Southern Territories\",\n      \"flag\": \"🇹🇫\",\n      \"code\": \"TF\",\n      \"dial_code\": \"+262\",\n      \"regex\": \"^\\\\+262[0-9]{9}$\",\n      \"placeholder\": \"+262 639 12 34 56\"\n    },\n    {\n      \"name\": \"Gabon\",\n      \"flag\": \"🇬🇦\",\n      \"code\": \"GA\",\n      \"dial_code\": \"+241\",\n      \"regex\": \"^\\\\+241[0-9]{8}$\",\n      \"placeholder\": \"+241 06 12 34 56\"\n    },\n    {\n      \"name\": \"Gambia\",\n      \"flag\": \"🇬🇲\",\n      \"code\": \"GM\",\n      \"dial_code\": \"+220\",\n      \"regex\": \"^\\\\+220[0-9]{7}$\",\n      \"placeholder\": \"+220 301 2345\"\n    },\n    {\n      \"name\": \"Georgia\",\n      \"flag\": \"🇬🇪\",\n      \"code\": \"GE\",\n      \"dial_code\": \"+995\",\n      \"regex\": \"^\\\\+995[0-9]{9}$\",\n      \"placeholder\": \"+995 555 12 34 56\"\n    },\n    {\n      \"name\": \"Germany\",\n      \"flag\": \"🇩🇪\",\n      \"code\": \"DE\",\n      \"dial_code\": \"+49\",\n      \"regex\": \"^\\\\+49[0-9]{10,11}$\",\n      \"placeholder\": \"+49 151 1234 5678\"\n    },\n    {\n      \"name\": \"Ghana\",\n      \"flag\": \"🇬🇭\",\n      \"code\": \"GH\",\n      \"dial_code\": \"+233\",\n      \"regex\": \"^\\\\+233[0-9]{9}$\",\n      \"placeholder\": \"+233 24 123 4567\"\n    },\n    {\n      \"name\": \"Gibraltar\",\n      \"flag\": \"🇬🇮\",\n      \"code\": \"GI\",\n      \"dial_code\": \"+350\",\n      \"regex\": \"^\\\\+350[0-9]{8}$\",\n      \"placeholder\": \"+350 57123456\"\n    },\n    {\n      \"name\": \"Greece\",\n      \"flag\": \"🇬🇷\",\n      \"code\": \"GR\",\n      \"dial_code\": \"+30\",\n      \"regex\": \"^\\\\+30[0-9]{10}$\",\n      \"placeholder\": \"+30 691 234 5678\"\n    },\n    {\n      \"name\": \"Greenland\",\n      \"flag\": \"🇬🇱\",\n      \"code\": \"GL\",\n      \"dial_code\": \"+299\",\n      \"regex\": \"^\\\\+299[0-9]{6}$\",\n      \"placeholder\": \"+299 22 12 34\"\n    },\n    {\n      \"name\": \"Grenada\",\n      \"flag\": \"🇬🇩\",\n      \"code\": \"GD\",\n      \"dial_code\": \"+1473\",\n      \"regex\": \"^\\\\+1473[0-9]{7}$\",\n      \"placeholder\": \"+1473 403 1234\"\n    },\n    {\n      \"name\": \"Guadeloupe\",\n      \"code\": \"GP\",\n      \"dial_code\": \"+590\",\n      \"regex\": \"^\\\\+590[67]\\\\d{8}$\",\n      \"placeholder\": \"+590 6XXXXXXXX\",\n      \"format\": \"+590 XXX XX XX XX\",\n      \"flag\": \"🇬🇵\"\n    },\n    {\n      \"name\": \"Guam\",\n      \"code\": \"GU\",\n      \"dial_code\": \"+1671\",\n      \"regex\": \"^\\\\+1671\\\\d{7}$\",\n      \"placeholder\": \"+1671 XXXXXXX\",\n      \"format\": \"+1671 XXX XXXX\",\n      \"flag\": \"🇬🇺\"\n    },\n    {\n      \"name\": \"Guatemala\",\n      \"code\": \"GT\",\n      \"dial_code\": \"+502\",\n      \"regex\": \"^\\\\+502[2-9]\\\\d{7}$\",\n      \"placeholder\": \"+502 8XXXXXXX\",\n      \"format\": \"+502 XXXX XXXX\",\n      \"flag\": \"🇬🇹\"\n    },\n    {\n      \"name\": \"Guernsey\",\n      \"code\": \"GG\",\n      \"dial_code\": \"+44\",\n      \"regex\": \"^\\\\+44[1487]\\\\d{9}$\",\n      \"placeholder\": \"+44 1481 XXXXXX\",\n      \"format\": \"+44 1481 XXXXXX\",\n      \"flag\": \"🇬🇬\"\n    },\n    {\n      \"name\": \"Guinea\",\n      \"code\": \"GN\",\n      \"dial_code\": \"+224\",\n      \"regex\": \"^\\\\+224\\\\d{9}$\",\n      \"placeholder\": \"+224 XXXXXXXXX\",\n      \"format\": \"+224 XXX XXX XXX\",\n      \"flag\": \"🇬🇳\"\n    },\n    {\n      \"name\": \"Guinea-Bissau\",\n      \"code\": \"GW\",\n      \"dial_code\": \"+245\",\n      \"regex\": \"^\\\\+245\\\\d{7}$\",\n      \"placeholder\": \"+245 XXXXXXX\",\n      \"format\": \"+245 XXX XXXX\",\n      \"flag\": \"🇬🇼\"\n    },\n    {\n      \"name\": \"Guyana\",\n      \"code\": \"GY\",\n      \"dial_code\": \"+592\",\n      \"regex\": \"^\\\\+592[2-9]\\\\d{6}$\",\n      \"placeholder\": \"+592 6XXXXXX\",\n      \"format\": \"+592 XXX XXXX\",\n      \"flag\": \"🇬🇾\"\n    },\n    {\n      \"name\": \"Haiti\",\n      \"code\": \"HT\",\n      \"dial_code\": \"+509\",\n      \"regex\": \"^\\\\+509[2-9]\\\\d{7}$\",\n      \"placeholder\": \"+509 2XXXXXXX\",\n      \"format\": \"+509 XXXX XXXX\",\n      \"flag\": \"🇭🇹\"\n    },\n    {\n      \"name\": \"Heard Island and Mcdonald Islands\",\n      \"flag\": \"🇭🇲\",\n      \"code\": \"HM\",\n      \"dial_code\": \"+672\",\n      \"regex\": \"^\\\\+672\\\\d{6}$\",\n      \"placeholder\": \"+672 XXXXXX\",\n      \"example\": \"+672 123456\"\n    },\n    {\n      \"name\": \"Holy See (Vatican City State)\",\n      \"flag\": \"🇻🇦\",\n      \"code\": \"VA\",\n      \"dial_code\": \"+379\",\n      \"regex\": \"^\\\\+379\\\\d{10}$\",\n      \"placeholder\": \"+379 XXXXXXXXXX\",\n      \"example\": \"+379 0612345678\"\n    },\n    {\n      \"name\": \"Honduras\",\n      \"code\": \"HN\",\n      \"dial_code\": \"+504\",\n      \"regex\": \"^\\\\+504[2-9]\\\\d{7}$\",\n      \"placeholder\": \"+504 9XXXXXXX\",\n      \"format\": \"+504 XXXX XXXX\",\n      \"flag\": \"🇭🇳\"\n    },\n    {\n      \"name\": \"Hong Kong\",\n      \"code\": \"HK\",\n      \"dial_code\": \"+852\",\n      \"regex\": \"^\\\\+852[2-9]\\\\d{7}$\",\n      \"placeholder\": \"+852 5XXXXXXX\",\n      \"format\": \"+852 XXXX XXXX\",\n      \"flag\": \"🇭🇰\"\n    },\n    {\n      \"name\": \"Hungary\",\n      \"code\": \"HU\",\n      \"dial_code\": \"+36\",\n      \"regex\": \"^\\\\+36[1-9]\\\\d{7,8}$\",\n      \"placeholder\": \"+36 30XXXXXXX\",\n      \"format\": \"+36 XX XXX XXXX\",\n      \"flag\": \"🇭🇺\"\n    },\n    {\n      \"name\": \"Iceland\",\n      \"code\": \"IS\",\n      \"dial_code\": \"+354\",\n      \"regex\": \"^\\\\+354\\\\d{7}$\",\n      \"placeholder\": \"+354 XXXXXXX\",\n      \"format\": \"+354 XXX XXXX\",\n      \"flag\": \"🇮🇸\"\n    },\n    {\n      \"name\": \"India\",\n      \"code\": \"IN\",\n      \"dial_code\": \"+91\",\n      \"regex\": \"^\\\\+91[6789]\\\\d{9}$\",\n      \"placeholder\": \"+91 9XXXXXXXXX\",\n      \"format\": \"+91 XXXXX XXXXX\",\n      \"flag\": \"🇮🇳\"\n    },\n    {\n      \"name\": \"Indonesia\",\n      \"code\": \"ID\",\n      \"dial_code\": \"+62\",\n      \"regex\": \"^\\\\+62[8]\\\\d{9,10}$\",\n      \"placeholder\": \"+62 8XXXXXXXXX\",\n      \"format\": \"+62 8XX XXXX XXXX\",\n      \"flag\": \"🇮🇩\"\n    },\n    {\n      \"name\": \"Iran, Islamic Republic of Persian Gulf\",\n      \"flag\": \"🇮🇷\",\n      \"code\": \"IR\",\n      \"dial_code\": \"+98\",\n      \"regex\": \"^\\\\+98[1-9]\\\\d{9}$\",\n      \"placeholder\": \"+98 9XXXXXXXXX\",\n      \"example\": \"+98 9123456789\"\n    },\n    {\n      \"name\": \"Iraq\",\n      \"code\": \"IQ\",\n      \"dial_code\": \"+964\",\n      \"regex\": \"^\\\\+964[7]\\\\d{9}$\",\n      \"placeholder\": \"+964 7XXXXXXXXX\",\n      \"format\": \"+964 7XX XXX XXXX\",\n      \"flag\": \"🇮🇶\"\n    },\n    {\n      \"name\": \"Ireland\",\n      \"code\": \"IE\",\n      \"dial_code\": \"+353\",\n      \"regex\": \"^\\\\+353[1-9]\\\\d{8}$\",\n      \"placeholder\": \"+353 8XXXXXXXX\",\n      \"format\": \"+353 XX XXX XXXX\",\n      \"flag\": \"🇮🇪\"\n    },\n    {\n      \"name\": \"Isle of Man\",\n      \"code\": \"IM\",\n      \"dial_code\": \"+44\",\n      \"regex\": \"^\\\\+44[1624]\\\\d{6}$\",\n      \"placeholder\": \"+44 1624 XXXXXX\",\n      \"format\": \"+44 1624 XXXXXX\",\n      \"flag\": \"🇮🇲\"\n    },\n    {\n      \"name\": \"Israel\",\n      \"code\": \"IL\",\n      \"dial_code\": \"+972\",\n      \"regex\": \"^\\\\+972[5-9]\\\\d{8}$\",\n      \"placeholder\": \"+972 5XXXXXXXX\",\n      \"format\": \"+972 5X XXX XXXX\",\n      \"flag\": \"🇮🇱\"\n    },\n    {\n      \"name\": \"Italy\",\n      \"code\": \"IT\",\n      \"dial_code\": \"+39\",\n      \"regex\": \"^\\\\+39[0-9]\\\\d{9}$\",\n      \"placeholder\": \"+39 3XXXXXXXXX\",\n      \"format\": \"+39 3XX XXX XXXX\",\n      \"flag\": \"🇮🇹\"\n    },\n    {\n      \"name\": \"Jamaica\",\n      \"code\": \"JM\",\n      \"dial_code\": \"+1876\",\n      \"regex\": \"^\\\\+1876\\\\d{7}$\",\n      \"placeholder\": \"+1876 XXXXXXX\",\n      \"format\": \"+1876 XXX XXXX\",\n      \"flag\": \"🇯🇲\"\n    },\n    {\n      \"name\": \"Japan\",\n      \"code\": \"JP\",\n      \"dial_code\": \"+81\",\n      \"regex\": \"^\\\\+81[0-9]\\\\d{9}$\",\n      \"placeholder\": \"+81 9XXXXXXXXX\",\n      \"format\": \"+81 XX XXXX XXXX\",\n      \"flag\": \"🇯🇵\"\n    },\n    {\n      \"name\": \"Jersey\",\n      \"code\": \"JE\",\n      \"dial_code\": \"+44\",\n      \"regex\": \"^\\\\+44[1534]\\\\d{6}$\",\n      \"placeholder\": \"+44 1534 XXXXXX\",\n      \"format\": \"+44 1534 XXXXXX\",\n      \"flag\": \"🇯🇪\"\n    },\n    {\n      \"name\": \"Jordan\",\n      \"code\": \"JO\",\n      \"dial_code\": \"+962\",\n      \"regex\": \"^\\\\+962[7]\\\\d{8}$\",\n      \"placeholder\": \"+962 7XXXXXXXX\",\n      \"format\": \"+962 7 XXXX XXXX\",\n      \"flag\": \"🇯🇴\"\n    },\n    {\n      \"name\": \"Kazakhstan\",\n      \"code\": \"KZ\",\n      \"dial_code\": \"+7\",\n      \"regex\": \"^\\\\+7[7]\\\\d{9}$\",\n      \"placeholder\": \"+7 7XXXXXXXXX\",\n      \"format\": \"+7 7XX XXX XXXX\",\n      \"flag\": \"🇰🇿\"\n    },\n    {\n      \"name\": \"Kenya\",\n      \"code\": \"KE\",\n      \"dial_code\": \"+254\",\n      \"regex\": \"^\\\\+254[7]\\\\d{8}$\",\n      \"placeholder\": \"+254 7XXXXXXXX\",\n      \"format\": \"+254 7XX XXX XXX\",\n      \"flag\": \"🇰🇪\"\n    },\n    {\n      \"name\": \"Kiribati\",\n      \"code\": \"KI\",\n      \"dial_code\": \"+686\",\n      \"regex\": \"^\\\\+686\\\\d{5}$\",\n      \"placeholder\": \"+686 XXXXX\",\n      \"format\": \"+686 XXXXX\",\n      \"flag\": \"🇰🇮\"\n    },\n    {\n      \"name\": \"Korea, Democratic People's Republic of Korea\",\n      \"flag\": \"🇰🇵\",\n      \"code\": \"KP\",\n      \"dial_code\": \"+850\",\n      \"regex\": \"^\\\\+850\\\\d{7,10}$\",\n      \"placeholder\": \"+850 XXXXXXXXXX\",\n      \"example\": \"+850 2123456789\"\n    },\n    {\n      \"name\": \"Korea, Republic of South Korea\",\n      \"flag\": \"🇰🇷\",\n      \"code\": \"KR\",\n      \"dial_code\": \"+82\",\n      \"regex\": \"^\\\\+82\\\\d{9,10}$\",\n      \"placeholder\": \"+82 10XXXXXXXX\",\n      \"example\": \"+82 1012345678\"\n    },\n    {\n      \"name\": \"Kosovo\",\n      \"code\": \"XK\",\n      \"dial_code\": \"+383\",\n      \"regex\": \"^\\\\+383[4-9]\\\\d{7}$\",\n      \"placeholder\": \"+383 4XXXXXXX\",\n      \"format\": \"+383 4X XXX XXX\",\n      \"flag\": \"🇽🇰\"\n    },\n    {\n      \"name\": \"Kuwait\",\n      \"code\": \"KW\",\n      \"dial_code\": \"+965\",\n      \"regex\": \"^\\\\+965[5-9]\\\\d{7}$\",\n      \"placeholder\": \"+965 5XXXXXXX\",\n      \"format\": \"+965 5XXX XXXX\",\n      \"flag\": \"🇰🇼\"\n    },\n    {\n      \"name\": \"Kyrgyzstan\",\n      \"code\": \"KG\",\n      \"dial_code\": \"+996\",\n      \"regex\": \"^\\\\+996[5-9]\\\\d{8}$\",\n      \"placeholder\": \"+996 5XXXXXXXX\",\n      \"format\": \"+996 XXX XXX XXX\",\n      \"flag\": \"🇰🇬\"\n    },\n    {\n      \"name\": \"Laos\",\n      \"code\": \"LA\",\n      \"dial_code\": \"+856\",\n      \"regex\": \"^\\\\+856[2]\\\\d{8}$\",\n      \"placeholder\": \"+856 2XXXXXXXX\",\n      \"format\": \"+856 20 XXX XXX\",\n      \"flag\": \"🇱🇦\"\n    },\n    {\n      \"name\": \"Latvia\",\n      \"code\": \"LV\",\n      \"dial_code\": \"+371\",\n      \"regex\": \"^\\\\+371[2]\\\\d{7}$\",\n      \"placeholder\": \"+371 2XXXXXXX\",\n      \"format\": \"+371 2XXX XXXX\",\n      \"flag\": \"🇱🇻\"\n    },\n    {\n      \"name\": \"Lebanon\",\n      \"code\": \"LB\",\n      \"dial_code\": \"+961\",\n      \"regex\": \"^\\\\+961[3-9]\\\\d{6,7}$\",\n      \"placeholder\": \"+961 3XXXXXX\",\n      \"format\": \"+961 3 XXX XXX\",\n      \"flag\": \"🇱🇧\"\n    },\n    {\n      \"name\": \"Lesotho\",\n      \"code\": \"LS\",\n      \"dial_code\": \"+266\",\n      \"regex\": \"^\\\\+266[2-9]\\\\d{7}$\",\n      \"placeholder\": \"+266 5XXXXXXX\",\n      \"format\": \"+266 5XXX XXXX\",\n      \"flag\": \"🇱🇸\"\n    },\n    {\n      \"name\": \"Liberia\",\n      \"code\": \"LR\",\n      \"dial_code\": \"+231\",\n      \"regex\": \"^\\\\+231[4-9]\\\\d{7}$\",\n      \"placeholder\": \"+231 4XXXXXXX\",\n      \"format\": \"+231 XX XXX XXX\",\n      \"flag\": \"🇱🇷\"\n    },\n    {\n      \"name\": \"Libyan Arab Jamahiriya\",\n      \"flag\": \"🇱🇾\",\n      \"code\": \"LY\",\n      \"dial_code\": \"+218\",\n      \"regex\": \"^\\\\+218[89]\\\\d{8}$\",\n      \"placeholder\": \"+218 9XXXXXXXX\",\n      \"example\": \"+218 912345678\"\n    },\n    {\n      \"name\": \"Liechtenstein\",\n      \"code\": \"LI\",\n      \"dial_code\": \"+423\",\n      \"regex\": \"^\\\\+423[2-9]\\\\d{6}$\",\n      \"placeholder\": \"+423 6XXXXXX\",\n      \"format\": \"+423 XXX XXXX\",\n      \"flag\": \"🇱🇮\"\n    },\n    {\n      \"name\": \"Lithuania\",\n      \"code\": \"LT\",\n      \"dial_code\": \"+370\",\n      \"regex\": \"^\\\\+370[6]\\\\d{7}$\",\n      \"placeholder\": \"+370 6XXXXXXX\",\n      \"format\": \"+370 6XX XXXXX\",\n      \"flag\": \"🇱🇹\"\n    },\n    {\n      \"name\": \"Luxembourg\",\n      \"code\": \"LU\",\n      \"dial_code\": \"+352\",\n      \"regex\": \"^\\\\+352[2689]\\\\d{7}$\",\n      \"placeholder\": \"+352 6XXXXXXX\",\n      \"format\": \"+352 XXX XXX XXX\",\n      \"flag\": \"🇱🇺\"\n    },\n    {\n      \"name\": \"Macao\",\n      \"code\": \"MO\",\n      \"dial_code\": \"+853\",\n      \"regex\": \"^\\\\+853[6]\\\\d{7}$\",\n      \"placeholder\": \"+853 6XXXXXXX\",\n      \"format\": \"+853 XXXX XXXX\",\n      \"flag\": \"🇲🇴\"\n    },\n    {\n      \"name\": \"Macedonia\",\n      \"code\": \"MK\",\n      \"dial_code\": \"+389\",\n      \"regex\": \"^\\\\+389[27]\\\\d{7}$\",\n      \"placeholder\": \"+389 7XXXXXXX\",\n      \"format\": \"+389 XX XXX XXX\",\n      \"flag\": \"🇲🇰\"\n    },\n    {\n      \"name\": \"Madagascar\",\n      \"code\": \"MG\",\n      \"dial_code\": \"+261\",\n      \"regex\": \"^\\\\+261[3]\\\\d{8}$\",\n      \"placeholder\": \"+261 3XXXXXXXX\",\n      \"format\": \"+261 3X XXX XXXX\",\n      \"flag\": \"🇲🇬\"\n    },\n    {\n      \"name\": \"Malawi\",\n      \"code\": \"MW\",\n      \"dial_code\": \"+265\",\n      \"regex\": \"^\\\\+265[1-9]\\\\d{7}$\",\n      \"placeholder\": \"+265 9XXXXXXX\",\n      \"format\": \"+265 9XX XXX XXX\",\n      \"flag\": \"🇲🇼\"\n    },\n    {\n      \"name\": \"Malaysia\",\n      \"code\": \"MY\",\n      \"dial_code\": \"+60\",\n      \"regex\": \"^\\\\+60[1-9]\\\\d{7,9}$\",\n      \"placeholder\": \"+60 1XXXXXXXXX\",\n      \"format\": \"+60 1X XXXX XXXX\",\n      \"flag\": \"🇲🇾\"\n    },\n    {\n      \"name\": \"Maldives\",\n      \"code\": \"MV\",\n      \"dial_code\": \"+960\",\n      \"regex\": \"^\\\\+960[7-9]\\\\d{6}$\",\n      \"placeholder\": \"+960 7XXXXXX\",\n      \"format\": \"+960 XXX XXXX\",\n      \"flag\": \"🇲🇻\"\n    },\n    {\n      \"name\": \"Mali\",\n      \"code\": \"ML\",\n      \"dial_code\": \"+223\",\n      \"regex\": \"^\\\\+223[6-9]\\\\d{7}$\",\n      \"placeholder\": \"+223 7XXXXXXX\",\n      \"format\": \"+223 XX XX XX XX\",\n      \"flag\": \"🇲🇱\"\n    },\n    {\n      \"name\": \"Malta\",\n      \"code\": \"MT\",\n      \"dial_code\": \"+356\",\n      \"regex\": \"^\\\\+356[2379]\\\\d{7}$\",\n      \"placeholder\": \"+356 7XXXXXXX\",\n      \"format\": \"+356 XXXX XXXX\",\n      \"flag\": \"🇲🇹\"\n    },\n    {\n      \"name\": \"Marshall Islands\",\n      \"code\": \"MH\",\n      \"dial_code\": \"+692\",\n      \"regex\": \"^\\\\+692[2-9]\\\\d{6}$\",\n      \"placeholder\": \"+692 2XXXXXX\",\n      \"format\": \"+692 XXX XXXX\",\n      \"flag\": \"🇲🇭\"\n    },\n    {\n      \"name\": \"Martinique\",\n      \"code\": \"MQ\",\n      \"dial_code\": \"+596\",\n      \"regex\": \"^\\\\+596[6-7]\\\\d{8}$\",\n      \"placeholder\": \"+596 6XXXXXXXX\",\n      \"format\": \"+596 XXX XX XX XX\",\n      \"flag\": \"🇲🇶\"\n    },\n    {\n      \"name\": \"Mauritania\",\n      \"code\": \"MR\",\n      \"dial_code\": \"+222\",\n      \"regex\": \"^\\\\+222[2-9]\\\\d{7}$\",\n      \"placeholder\": \"+222 4XXXXXXX\",\n      \"format\": \"+222 XXXX XXXX\",\n      \"flag\": \"🇲🇷\"\n    },\n    {\n      \"name\": \"Mauritius\",\n      \"code\": \"MU\",\n      \"dial_code\": \"+230\",\n      \"regex\": \"^\\\\+230[2-9]\\\\d{6}$\",\n      \"placeholder\": \"+230 5XXXXXX\",\n      \"format\": \"+230 XXXX XXXX\",\n      \"flag\": \"🇲🇺\"\n    },\n    {\n      \"name\": \"Mayotte\",\n      \"code\": \"YT\",\n      \"dial_code\": \"+262\",\n      \"regex\": \"^\\\\+262[2-9]\\\\d{7}$\",\n      \"placeholder\": \"+262 6XXXXXXX\",\n      \"format\": \"+262 XXX XX XX XX\",\n      \"flag\": \"🇾🇹\"\n    },\n    {\n      \"name\": \"Mexico\",\n      \"code\": \"MX\",\n      \"dial_code\": \"+52\",\n      \"regex\": \"^\\\\+52[1]\\\\d{10}$\",\n      \"placeholder\": \"+52 1XXXXXXXXXX\",\n      \"format\": \"+52 1 XXX XXX XXXX\",\n      \"flag\": \"🇲🇽\"\n    },\n    {\n      \"name\": \"Micronesia, Federated States of Micronesia\",\n      \"flag\": \"🇫🇲\",\n      \"code\": \"FM\",\n      \"dial_code\": \"+691\",\n      \"regex\": \"^\\\\+691[1-9]\\\\d{6}$\",\n      \"placeholder\": \"+691 XXXXXXX\",\n      \"example\": \"+691 3201234\"\n    },\n    {\n      \"name\": \"Moldova\",\n      \"code\": \"MD\",\n      \"dial_code\": \"+373\",\n      \"regex\": \"^\\\\+373[67]\\\\d{7}$\",\n      \"placeholder\": \"+373 6XXXXXXX\",\n      \"format\": \"+373 XX XXX XXX\",\n      \"flag\": \"🇲🇩\"\n    },\n    {\n      \"name\": \"Monaco\",\n      \"code\": \"MC\",\n      \"dial_code\": \"+377\",\n      \"regex\": \"^\\\\+377[4-9]\\\\d{7,8}$\",\n      \"placeholder\": \"+377 6XXXXXXXX\",\n      \"format\": \"+377 6 XX XX XX XX\",\n      \"flag\": \"🇲🇨\"\n    },\n    {\n      \"name\": \"Mongolia\",\n      \"code\": \"MN\",\n      \"dial_code\": \"+976\",\n      \"regex\": \"^\\\\+976[5-9]\\\\d{7}$\",\n      \"placeholder\": \"+976 8XXXXXXX\",\n      \"format\": \"+976 XX XX XXXX\",\n      \"flag\": \"🇲🇳\"\n    },\n    {\n      \"name\": \"Montenegro\",\n      \"code\": \"ME\",\n      \"dial_code\": \"+382\",\n      \"regex\": \"^\\\\+382[2-9]\\\\d{7,8}$\",\n      \"placeholder\": \"+382 6XXXXXXXX\",\n      \"format\": \"+382 6X XXX XXX\",\n      \"flag\": \"🇲🇪\"\n    },\n    {\n      \"name\": \"Montserrat\",\n      \"code\": \"MS\",\n      \"dial_code\": \"+1664\",\n      \"regex\": \"^\\\\+1664\\\\d{7}$\",\n      \"placeholder\": \"+1664 XXXXXXX\",\n      \"format\": \"+1664 XXX XXXX\",\n      \"flag\": \"🇲🇸\"\n    },\n    {\n      \"name\": \"Morocco\",\n      \"code\": \"MA\",\n      \"dial_code\": \"+212\",\n      \"regex\": \"^\\\\+212[5-9]\\\\d{8}$\",\n      \"placeholder\": \"+212 6XXXXXXXX\",\n      \"format\": \"+212 6XX XXX XXX\",\n      \"flag\": \"🇲🇦\"\n    },\n    {\n      \"name\": \"Mozambique\",\n      \"code\": \"MZ\",\n      \"dial_code\": \"+258\",\n      \"regex\": \"^\\\\+258[28]\\\\d{7}$\",\n      \"placeholder\": \"+258 8XXXXXXX\",\n      \"format\": \"+258 8X XXX XXXX\",\n      \"flag\": \"🇲🇿\"\n    },\n    {\n      \"name\": \"Myanmar\",\n      \"code\": \"MM\",\n      \"dial_code\": \"+95\",\n      \"regex\": \"^\\\\+95[4-9]\\\\d{8}$\",\n      \"placeholder\": \"+95 9XXXXXXXX\",\n      \"format\": \"+95 9 XXX XXX XXX\",\n      \"flag\": \"🇲🇲\"\n    },\n    {\n      \"name\": \"Namibia\",\n      \"code\": \"NA\",\n      \"dial_code\": \"+264\",\n      \"regex\": \"^\\\\+264[6-8]\\\\d{7,8}$\",\n      \"placeholder\": \"+264 81XXXXXXX\",\n      \"format\": \"+264 81 XXX XXXX\",\n      \"flag\": \"🇳🇦\"\n    },\n    {\n      \"name\": \"Nauru\",\n      \"code\": \"NR\",\n      \"dial_code\": \"+674\",\n      \"regex\": \"^\\\\+674[0-9]\\\\d{4}$\",\n      \"placeholder\": \"+674 XXXXX\",\n      \"format\": \"+674 XXX XXXX\",\n      \"flag\": \"🇳🇷\"\n    },\n    {\n      \"name\": \"Nepal\",\n      \"code\": \"NP\",\n      \"dial_code\": \"+977\",\n      \"regex\": \"^\\\\+977[9]\\\\d{9}$\",\n      \"placeholder\": \"+977 9XXXXXXXXX\",\n      \"format\": \"+977 98X XXX XXXX\",\n      \"flag\": \"🇳🇵\"\n    },\n    {\n      \"name\": \"Netherlands\",\n      \"code\": \"NL\",\n      \"dial_code\": \"+31\",\n      \"regex\": \"^\\\\+31[1-9]\\\\d{8}$\",\n      \"placeholder\": \"+31 6XXXXXXXX\",\n      \"format\": \"+31 6 XXXX XXXX\",\n      \"flag\": \"🇳🇱\"\n    },\n    {\n      \"name\": \"Netherlands Antilles\",\n      \"code\": \"AN\",\n      \"dial_code\": \"+599\",\n      \"regex\": \"^\\\\+599[9]\\\\d{6}$\",\n      \"placeholder\": \"+599 9XXXXXX\",\n      \"format\": \"+599 9XXX XXXX\",\n      \"flag\": \"\"\n    },\n    {\n      \"name\": \"New Caledonia\",\n      \"code\": \"NC\",\n      \"dial_code\": \"+687\",\n      \"regex\": \"^\\\\+687\\\\d{6}$\",\n      \"placeholder\": \"+687 XXXXXX\",\n      \"format\": \"+687 XX XX XX\",\n      \"flag\": \"🇳🇨\"\n    },\n    {\n      \"name\": \"New Zealand\",\n      \"code\": \"NZ\",\n      \"dial_code\": \"+64\",\n      \"regex\": \"^\\\\+64[2-9]\\\\d{7,9}$\",\n      \"placeholder\": \"+64 21XXXXXXX\",\n      \"format\": \"+64 21 XXX XXXX\",\n      \"flag\": \"🇳🇿\"\n    },\n    {\n      \"name\": \"Nicaragua\",\n      \"code\": \"NI\",\n      \"dial_code\": \"+505\",\n      \"regex\": \"^\\\\+505[5-8]\\\\d{7}$\",\n      \"placeholder\": \"+505 8XXXXXXX\",\n      \"format\": \"+505 XXXX XXXX\",\n      \"flag\": \"🇳🇮\"\n    },\n    {\n      \"name\": \"Niger\",\n      \"code\": \"NE\",\n      \"dial_code\": \"+227\",\n      \"regex\": \"^\\\\+227[0-9]\\\\d{7}$\",\n      \"placeholder\": \"+227 9XXXXXXX\",\n      \"format\": \"+227 XX XX XX XX\",\n      \"flag\": \"🇳🇪\"\n    },\n    {\n      \"name\": \"Nigeria\",\n      \"code\": \"NG\",\n      \"dial_code\": \"+234\",\n      \"regex\": \"^\\\\+234[789]\\\\d{9}$\",\n      \"placeholder\": \"+234 8XXXXXXXXX\",\n      \"format\": \"+234 8XX XXX XXXX\",\n      \"flag\": \"🇳🇬\"\n    },\n    {\n      \"name\": \"Niue\",\n      \"code\": \"NU\",\n      \"dial_code\": \"+683\",\n      \"regex\": \"^\\\\+683\\\\d{4}$\",\n      \"placeholder\": \"+683 XXXX\",\n      \"format\": \"+683 XXXX\",\n      \"flag\": \"🇳🇺\"\n    },\n    {\n      \"name\": \"Norfolk Island\",\n      \"code\": \"NF\",\n      \"dial_code\": \"+672\",\n      \"regex\": \"^\\\\+672[3]\\\\d{5}$\",\n      \"placeholder\": \"+672 3XXXXX\",\n      \"format\": \"+672 3 XX XXX\",\n      \"flag\": \"🇳🇫\"\n    },\n    {\n      \"name\": \"Northern Mariana Islands\",\n      \"code\": \"MP\",\n      \"dial_code\": \"+1670\",\n      \"regex\": \"^\\\\+1670\\\\d{7}$\",\n      \"placeholder\": \"+1670 XXXXXXX\",\n      \"format\": \"+1670 XXX XXXX\",\n      \"flag\": \"🇲🇵\"\n    },\n    {\n      \"name\": \"Norway\",\n      \"code\": \"NO\",\n      \"dial_code\": \"+47\",\n      \"regex\": \"^\\\\+47[2-9]\\\\d{7}$\",\n      \"placeholder\": \"+47 4XXXXXXX\",\n      \"format\": \"+47 XXX XX XXX\",\n      \"flag\": \"🇳🇴\"\n    },\n    {\n      \"name\": \"Oman\",\n      \"code\": \"OM\",\n      \"dial_code\": \"+968\",\n      \"regex\": \"^\\\\+968[79]\\\\d{7}$\",\n      \"placeholder\": \"+968 9XXXXXXX\",\n      \"format\": \"+968 9XXX XXXX\",\n      \"flag\": \"🇴🇲\"\n    },\n    {\n      \"name\": \"Pakistan\",\n      \"code\": \"PK\",\n      \"dial_code\": \"+92\",\n      \"regex\": \"^\\\\+92[3]\\\\d{9}$\",\n      \"placeholder\": \"+92 3XXXXXXXXX\",\n      \"format\": \"+92 3XX XXX XXXX\",\n      \"flag\": \"🇵🇰\"\n    },\n    {\n      \"name\": \"Palau\",\n      \"code\": \"PW\",\n      \"dial_code\": \"+680\",\n      \"regex\": \"^\\\\+680\\\\d{7}$\",\n      \"placeholder\": \"+680 XXXXXXX\",\n      \"format\": \"+680 XXX XXXX\",\n      \"flag\": \"🇵🇼\"\n    },\n    {\n      \"name\": \"Palestinian Territory, Occupied\",\n      \"flag\": \"🇵🇸\",\n      \"code\": \"PS\",\n      \"dial_code\": \"+970\",\n      \"regex\": \"^\\\\+970[59]\\\\d{8}$\",\n      \"placeholder\": \"+970 5XXXXXXXX\",\n      \"example\": \"+970 599123456\"\n    },\n    {\n      \"name\": \"Panama\",\n      \"code\": \"PA\",\n      \"dial_code\": \"+507\",\n      \"regex\": \"^\\\\+507[1-9]\\\\d{6}$\",\n      \"placeholder\": \"+507 6XXXXXX\",\n      \"format\": \"+507 XXXX XXXX\",\n      \"flag\": \"🇵🇦\"\n    },\n    {\n      \"name\": \"Papua New Guinea\",\n      \"code\": \"PG\",\n      \"dial_code\": \"+675\",\n      \"regex\": \"^\\\\+675[7]\\\\d{7}$\",\n      \"placeholder\": \"+675 7XXXXXXX\",\n      \"format\": \"+675 7XXX XXXX\",\n      \"flag\": \"🇵🇬\"\n    },\n    {\n      \"name\": \"Paraguay\",\n      \"code\": \"PY\",\n      \"dial_code\": \"+595\",\n      \"regex\": \"^\\\\+595[9]\\\\d{8}$\",\n      \"placeholder\": \"+595 9XXXXXXXX\",\n      \"format\": \"+595 9XX XXX XXX\",\n      \"flag\": \"🇵🇾\"\n    },\n    {\n      \"name\": \"Peru\",\n      \"code\": \"PE\",\n      \"dial_code\": \"+51\",\n      \"regex\": \"^\\\\+51[9]\\\\d{8}$\",\n      \"placeholder\": \"+51 9XXXXXXXX\",\n      \"format\": \"+51 9XX XXX XXX\",\n      \"flag\": \"🇵🇪\"\n    },\n    {\n      \"name\": \"Philippines\",\n      \"code\": \"PH\",\n      \"dial_code\": \"+63\",\n      \"regex\": \"^\\\\+63[9]\\\\d{9}$\",\n      \"placeholder\": \"+63 9XXXXXXXXX\",\n      \"format\": \"+63 9XX XXX XXXX\",\n      \"flag\": \"🇵🇭\"\n    },\n    {\n      \"name\": \"Pitcairn\",\n      \"code\": \"PN\",\n      \"dial_code\": \"+64\",\n      \"regex\": \"^\\\\+64\\\\d{10}$\",\n      \"placeholder\": \"+64 XXXXXXXXXX\",\n      \"format\": \"+64 XXX XXX XXXX\",\n      \"flag\": \"🇵🇳\"\n    },\n    {\n      \"name\": \"Poland\",\n      \"code\": \"PL\",\n      \"dial_code\": \"+48\",\n      \"regex\": \"^\\\\+48[1-9]\\\\d{8}$\",\n      \"placeholder\": \"+48 5XXXXXXXX\",\n      \"format\": \"+48 5XX XXX XXX\",\n      \"flag\": \"🇵🇱\"\n    },\n    {\n      \"name\": \"Portugal\",\n      \"code\": \"PT\",\n      \"dial_code\": \"+351\",\n      \"regex\": \"^\\\\+351[1-9]\\\\d{8}$\",\n      \"placeholder\": \"+351 9XXXXXXXX\",\n      \"format\": \"+351 9XX XXX XXX\",\n      \"flag\": \"🇵🇹\"\n    },\n    {\n      \"name\": \"Puerto Rico\",\n      \"code\": \"PR\",\n      \"dial_code\": \"+1939\",\n      \"regex\": \"^\\\\+1939\\\\d{7}$\",\n      \"placeholder\": \"+1939 XXXXXXX\",\n      \"format\": \"+1939 XXX XXXX\",\n      \"flag\": \"🇵🇷\"\n    },\n    {\n      \"name\": \"Qatar\",\n      \"code\": \"QA\",\n      \"dial_code\": \"+974\",\n      \"regex\": \"^\\\\+974[3-7]\\\\d{7}$\",\n      \"placeholder\": \"+974 3XXXXXXX\",\n      \"format\": \"+974 XXXX XXXX\",\n      \"flag\": \"🇶🇦\"\n    },\n    {\n      \"name\": \"Romania\",\n      \"code\": \"RO\",\n      \"dial_code\": \"+40\",\n      \"regex\": \"^\\\\+40[7]\\\\d{8}$\",\n      \"placeholder\": \"+40 7XXXXXXXX\",\n      \"format\": \"+40 7XX XXX XXX\",\n      \"flag\": \"🇷🇴\"\n    },\n    {\n      \"name\": \"Russia\",\n      \"code\": \"RU\",\n      \"dial_code\": \"+7\",\n      \"regex\": \"^\\\\+7[9]\\\\d{9}$\",\n      \"placeholder\": \"+7 9XXXXXXXXX\",\n      \"format\": \"+7 9XX XXX XX XX\",\n      \"flag\": \"🇷🇺\"\n    },\n    {\n      \"name\": \"Rwanda\",\n      \"code\": \"RW\",\n      \"dial_code\": \"+250\",\n      \"regex\": \"^\\\\+250[7]\\\\d{8}$\",\n      \"placeholder\": \"+250 7XXXXXXXX\",\n      \"format\": \"+250 7XX XXX XXX\",\n      \"flag\": \"🇷🇼\"\n    },\n    {\n      \"name\": \"Reunion\",\n      \"code\": \"RE\",\n      \"dial_code\": \"+262\",\n      \"regex\": \"^\\\\+262[6-7]\\\\d{8}$\",\n      \"placeholder\": \"+262 6XXXXXXXX\",\n      \"format\": \"+262 6XX XX XX XX\",\n      \"flag\": \"🇷🇪\"\n    },\n    {\n      \"name\": \"Saint Barthelemy\",\n      \"code\": \"BL\",\n      \"dial_code\": \"+590\",\n      \"regex\": \"^\\\\+590[6-7]\\\\d{8}$\",\n      \"placeholder\": \"+590 6XXXXXXXX\",\n      \"format\": \"+590 6XX XX XX XX\",\n      \"flag\": \"🇧🇱\"\n    },\n    {\n      \"name\": \"Saint Helena, Ascension and Tristan Da Cunha\",\n      \"flag\": \"🇸🇭\",\n      \"code\": \"SH\",\n      \"dial_code\": \"+290\",\n      \"regex\": \"^\\\\+290\\\\d{4}$\",\n      \"placeholder\": \"+290 XXXX\",\n      \"example\": \"+290 2380\"\n    },\n    {\n      \"name\": \"Saint Kitts and Nevis\",\n      \"code\": \"KN\",\n      \"dial_code\": \"+1869\",\n      \"regex\": \"^\\\\+1869\\\\d{7}$\",\n      \"placeholder\": \"+1869 XXXXXXX\",\n      \"format\": \"+1869 XXX XXXX\",\n      \"flag\": \"🇰🇳\"\n    },\n    {\n      \"name\": \"Saint Lucia\",\n      \"code\": \"LC\",\n      \"dial_code\": \"+1758\",\n      \"regex\": \"^\\\\+1758\\\\d{7}$\",\n      \"placeholder\": \"+1758 XXXXXXX\",\n      \"format\": \"+1758 XXX XXXX\",\n      \"flag\": \"🇱🇨\"\n    },\n    {\n      \"name\": \"Saint Martin\",\n      \"code\": \"MF\",\n      \"dial_code\": \"+590\",\n      \"regex\": \"^\\\\+590[6-7]\\\\d{8}$\",\n      \"placeholder\": \"+590 6XXXXXXXX\",\n      \"format\": \"+590 6XX XX XX XX\",\n      \"flag\": \"🇲🇫\"\n    },\n    {\n      \"name\": \"Saint Pierre and Miquelon\",\n      \"code\": \"PM\",\n      \"dial_code\": \"+508\",\n      \"regex\": \"^\\\\+508\\\\d{6}$\",\n      \"placeholder\": \"+508 XXXXXX\",\n      \"example\": \"+508 412345\",\n      \"flag\": \"🇵🇲\"\n    },\n    {\n      \"name\": \"Saint Vincent and the Grenadines\",\n      \"code\": \"VC\",\n      \"dial_code\": \"+1784\",\n      \"regex\": \"^\\\\+1784\\\\d{7}$\",\n      \"placeholder\": \"+1784 XXXXXXX\",\n      \"example\": \"+1784 4561234\",\n      \"flag\": \"🇻🇨\"\n    },\n    {\n      \"name\": \"Samoa\",\n      \"code\": \"WS\",\n      \"dial_code\": \"+685\",\n      \"regex\": \"^\\\\+685\\\\d{5,7}$\",\n      \"placeholder\": \"+685 XXXXXX\",\n      \"example\": \"+685 721234\",\n      \"flag\": \"🇼🇸\"\n    },\n    {\n      \"name\": \"San Marino\",\n      \"code\": \"SM\",\n      \"dial_code\": \"+378\",\n      \"regex\": \"^\\\\+378\\\\d{6,10}$\",\n      \"placeholder\": \"+378 XXXXXXXX\",\n      \"example\": \"+378 0549123456\",\n      \"flag\": \"🇸🇲\"\n    },\n    {\n      \"name\": \"Sao Tome and Principe\",\n      \"code\": \"ST\",\n      \"dial_code\": \"+239\",\n      \"regex\": \"^\\\\+239\\\\d{7}$\",\n      \"placeholder\": \"+239 XXXXXXX\",\n      \"example\": \"+239 9912345\",\n      \"flag\": \"🇸🇹\"\n    },\n    {\n      \"name\": \"Saudi Arabia\",\n      \"code\": \"SA\",\n      \"dial_code\": \"+966\",\n      \"regex\": \"^\\\\+966\\\\d{9}$\",\n      \"placeholder\": \"+966 5XXXXXXXX\",\n      \"example\": \"+966 512345678\",\n      \"flag\": \"🇸🇦\"\n    },\n    {\n      \"name\": \"Senegal\",\n      \"code\": \"SN\",\n      \"dial_code\": \"+221\",\n      \"regex\": \"^\\\\+221\\\\d{9}$\",\n      \"placeholder\": \"+221 7XXXXXXXX\",\n      \"example\": \"+221 771234567\",\n      \"flag\": \"🇸🇳\"\n    },\n    {\n      \"name\": \"Serbia\",\n      \"code\": \"RS\",\n      \"dial_code\": \"+381\",\n      \"regex\": \"^\\\\+381\\\\d{8,9}$\",\n      \"placeholder\": \"+381 6XXXXXXXX\",\n      \"example\": \"+381 601234567\",\n      \"flag\": \"🇷🇸\"\n    },\n    {\n      \"name\": \"Seychelles\",\n      \"code\": \"SC\",\n      \"dial_code\": \"+248\",\n      \"regex\": \"^\\\\+248\\\\d{7}$\",\n      \"placeholder\": \"+248 XXXXXXX\",\n      \"example\": \"+248 2512345\",\n      \"flag\": \"🇸🇨\"\n    },\n    {\n      \"name\": \"Sierra Leone\",\n      \"code\": \"SL\",\n      \"dial_code\": \"+232\",\n      \"regex\": \"^\\\\+232\\\\d{8}$\",\n      \"placeholder\": \"+232 7XXXXXXX\",\n      \"example\": \"+232 76123456\",\n      \"flag\": \"🇸🇱\"\n    },\n    {\n      \"name\": \"Singapore\",\n      \"code\": \"SG\",\n      \"dial_code\": \"+65\",\n      \"regex\": \"^\\\\+65\\\\d{8}$\",\n      \"placeholder\": \"+65 8XXXXXXX\",\n      \"example\": \"+65 81234567\",\n      \"flag\": \"🇸🇬\"\n    },\n    {\n      \"name\": \"Slovakia\",\n      \"code\": \"SK\",\n      \"dial_code\": \"+421\",\n      \"regex\": \"^\\\\+421\\\\d{9}$\",\n      \"placeholder\": \"+421 9XXXXXXXX\",\n      \"example\": \"+421 912345678\",\n      \"flag\": \"🇸🇰\"\n    },\n    {\n      \"name\": \"Slovenia\",\n      \"code\": \"SI\",\n      \"dial_code\": \"+386\",\n      \"regex\": \"^\\\\+386\\\\d{8}$\",\n      \"placeholder\": \"+386 3XXXXXXX\",\n      \"example\": \"+386 31234567\",\n      \"flag\": \"🇸🇮\"\n    },\n    {\n      \"name\": \"Solomon Islands\",\n      \"code\": \"SB\",\n      \"dial_code\": \"+677\",\n      \"regex\": \"^\\\\+677\\\\d{5,7}$\",\n      \"placeholder\": \"+677 7XXXXX\",\n      \"example\": \"+677 7123456\",\n      \"flag\": \"🇸🇧\"\n    },\n    {\n      \"name\": \"Somalia\",\n      \"code\": \"SO\",\n      \"dial_code\": \"+252\",\n      \"regex\": \"^\\\\+252\\\\d{8}$\",\n      \"placeholder\": \"+252 6XXXXXXX\",\n      \"example\": \"+252 61234567\",\n      \"flag\": \"🇸🇴\"\n    },\n    {\n      \"name\": \"South Africa\",\n      \"code\": \"ZA\",\n      \"dial_code\": \"+27\",\n      \"regex\": \"^\\\\+27\\\\d{9}$\",\n      \"placeholder\": \"+27 8XXXXXXXX\",\n      \"example\": \"+27 831234567\",\n      \"flag\": \"🇿🇦\"\n    },\n    {\n      \"name\": \"South Sudan\",\n      \"code\": \"SS\",\n      \"dial_code\": \"+211\",\n      \"regex\": \"^\\\\+211\\\\d{9}$\",\n      \"placeholder\": \"+211 9XXXXXXXX\",\n      \"example\": \"+211 977123456\",\n      \"flag\": \"🇸🇸\"\n    },\n    {\n      \"name\": \"South Georgia and the South Sandwich Islands\",\n      \"flag\": \"🇬🇸\",\n      \"code\": \"GS\",\n      \"dial_code\": \"+500\",\n      \"regex\": \"^\\\\+500\\\\d{5}$\",\n      \"placeholder\": \"+500 XXXXX\",\n      \"example\": \"+500 12345\"\n    },\n    {\n      \"name\": \"Spain\",\n      \"code\": \"ES\",\n      \"dial_code\": \"+34\",\n      \"regex\": \"^\\\\+34\\\\d{9}$\",\n      \"placeholder\": \"+34 6XXXXXXXX\",\n      \"example\": \"+34 612345678\",\n      \"flag\": \"🇪🇸\"\n    },\n    {\n      \"name\": \"Sri Lanka\",\n      \"code\": \"LK\",\n      \"dial_code\": \"+94\",\n      \"regex\": \"^\\\\+94\\\\d{9}$\",\n      \"placeholder\": \"+94 7XXXXXXXX\",\n      \"example\": \"+94 712345678\",\n      \"flag\": \"🇱🇰\"\n    },\n    {\n      \"name\": \"Sudan\",\n      \"code\": \"SD\",\n      \"dial_code\": \"+249\",\n      \"regex\": \"^\\\\+249\\\\d{9}$\",\n      \"placeholder\": \"+249 9XXXXXXXX\",\n      \"example\": \"+249 912345678\",\n      \"flag\": \"🇸🇩\"\n    },\n    {\n      \"name\": \"Suriname\",\n      \"code\": \"SR\",\n      \"dial_code\": \"+597\",\n      \"regex\": \"^\\\\+597\\\\d{6,7}$\",\n      \"placeholder\": \"+597 XXXXXXX\",\n      \"example\": \"+597 8123456\",\n      \"flag\": \"🇸🇷\"\n    },\n    {\n      \"name\": \"Svalbard and Jan Mayen\",\n      \"code\": \"SJ\",\n      \"dial_code\": \"+47\",\n      \"regex\": \"^\\\\+47\\\\d{8}$\",\n      \"placeholder\": \"+47 XXXXXXXX\",\n      \"example\": \"+47 41234567\",\n      \"flag\": \"🇸🇯\"\n    },\n    {\n      \"name\": \"Eswatini\",\n      \"code\": \"SZ\",\n      \"dial_code\": \"+268\",\n      \"regex\": \"^\\\\+268\\\\d{8}$\",\n      \"placeholder\": \"+268 7XXXXXXX\",\n      \"example\": \"+268 76123456\",\n      \"flag\": \"🇸🇿\"\n    },\n    {\n      \"name\": \"Sweden\",\n      \"code\": \"SE\",\n      \"dial_code\": \"+46\",\n      \"regex\": \"^\\\\+46\\\\d{7,10}$\",\n      \"placeholder\": \"+46 7XXXXXXXX\",\n      \"example\": \"+46 701234567\",\n      \"flag\": \"🇸🇪\"\n    },\n    {\n      \"name\": \"Switzerland\",\n      \"code\": \"CH\",\n      \"dial_code\": \"+41\",\n      \"regex\": \"^\\\\+41\\\\d{9}$\",\n      \"placeholder\": \"+41 7XXXXXXXX\",\n      \"example\": \"+41 781234567\",\n      \"flag\": \"🇨🇭\"\n    },\n    {\n      \"name\": \"Syrian Arab Republic\",\n      \"flag\": \"🇸🇾\",\n      \"code\": \"SY\",\n      \"dial_code\": \"+963\",\n      \"regex\": \"^\\\\+963[9]\\\\d{8}$\",\n      \"placeholder\": \"+963 9XXXXXXXX\",\n      \"example\": \"+963 991234567\"\n    },\n    {\n      \"name\": \"Taiwan\",\n      \"code\": \"TW\",\n      \"dial_code\": \"+886\",\n      \"regex\": \"^\\\\+886\\\\d{8,9}$\",\n      \"placeholder\": \"+886 9XXXXXXXX\",\n      \"example\": \"+886 912345678\",\n      \"flag\": \"🇹🇼\"\n    },\n    {\n      \"name\": \"Tajikistan\",\n      \"code\": \"TJ\",\n      \"dial_code\": \"+992\",\n      \"regex\": \"^\\\\+992\\\\d{9}$\",\n      \"placeholder\": \"+992 9XXXXXXXX\",\n      \"example\": \"+992 917123456\",\n      \"flag\": \"🇹🇯\"\n    },\n    {\n      \"name\": \"Tanzania, United Republic of Tanzania\",\n      \"flag\": \"🇹🇿\",\n      \"code\": \"TZ\",\n      \"dial_code\": \"+255\",\n      \"regex\": \"^\\\\+255[67]\\\\d{8}$\",\n      \"placeholder\": \"+255 7XXXXXXXX\",\n      \"example\": \"+255 712345678\"\n    },\n    {\n      \"name\": \"Thailand\",\n      \"code\": \"TH\",\n      \"dial_code\": \"+66\",\n      \"regex\": \"^\\\\+66\\\\d{8,9}$\",\n      \"placeholder\": \"+66 8XXXXXXXX\",\n      \"example\": \"+66 812345678\",\n      \"flag\": \"🇹🇭\"\n    },\n    {\n      \"name\": \"Timor-Leste\",\n      \"code\": \"TL\",\n      \"dial_code\": \"+670\",\n      \"regex\": \"^\\\\+670\\\\d{8}$\",\n      \"placeholder\": \"+670 7XXXXXXX\",\n      \"example\": \"+670 77123456\",\n      \"flag\": \"🇹🇱\"\n    },\n    {\n      \"name\": \"Togo\",\n      \"code\": \"TG\",\n      \"dial_code\": \"+228\",\n      \"regex\": \"^\\\\+228\\\\d{8}$\",\n      \"placeholder\": \"+228 9XXXXXXX\",\n      \"example\": \"+228 91234567\",\n      \"flag\": \"🇹🇬\"\n    },\n    {\n      \"name\": \"Tokelau\",\n      \"code\": \"TK\",\n      \"dial_code\": \"+690\",\n      \"regex\": \"^\\\\+690\\\\d{4}$\",\n      \"placeholder\": \"+690 XXXX\",\n      \"example\": \"+690 1234\",\n      \"flag\": \"🇹🇰\"\n    },\n    {\n      \"name\": \"Tonga\",\n      \"code\": \"TO\",\n      \"dial_code\": \"+676\",\n      \"regex\": \"^\\\\+676\\\\d{5}$\",\n      \"placeholder\": \"+676 XXXXX\",\n      \"example\": \"+676 71234\",\n      \"flag\": \"🇹🇴\"\n    },\n    {\n      \"name\": \"Trinidad and Tobago\",\n      \"code\": \"TT\",\n      \"dial_code\": \"+1868\",\n      \"regex\": \"^\\\\+1868\\\\d{7}$\",\n      \"placeholder\": \"+1868 XXXXXXX\",\n      \"example\": \"+1868 2841234\",\n      \"flag\": \"🇹🇹\"\n    },\n    {\n      \"name\": \"Tunisia\",\n      \"code\": \"TN\",\n      \"dial_code\": \"+216\",\n      \"regex\": \"^\\\\+216\\\\d{8}$\",\n      \"placeholder\": \"+216 XXXXXXXX\",\n      \"example\": \"+216 20123456\",\n      \"flag\": \"🇹🇳\"\n    },\n    {\n      \"name\": \"Turkey\",\n      \"code\": \"TR\",\n      \"dial_code\": \"+90\",\n      \"regex\": \"^\\\\+90\\\\d{10}$\",\n      \"placeholder\": \"+90 5XXXXXXXXX\",\n      \"example\": \"+90 5312345678\",\n      \"flag\": \"🇹🇷\"\n    },\n    {\n      \"name\": \"Turkmenistan\",\n      \"code\": \"TM\",\n      \"dial_code\": \"+993\",\n      \"regex\": \"^\\\\+993\\\\d{8}$\",\n      \"placeholder\": \"+993 6XXXXXXX\",\n      \"example\": \"+993 61234567\",\n      \"flag\": \"🇹🇲\"\n    },\n    {\n      \"name\": \"Turks and Caicos Islands\",\n      \"code\": \"TC\",\n      \"dial_code\": \"+1649\",\n      \"regex\": \"^\\\\+1649\\\\d{7}$\",\n      \"placeholder\": \"+1649 XXXXXXX\",\n      \"example\": \"+1649 2311234\",\n      \"flag\": \"🇹🇨\"\n    },\n    {\n      \"name\": \"Tuvalu\",\n      \"code\": \"TV\",\n      \"dial_code\": \"+688\",\n      \"regex\": \"^\\\\+688\\\\d{5}$\",\n      \"placeholder\": \"+688 XXXXX\",\n      \"example\": \"+688 20123\",\n      \"flag\": \"🇹🇻\"\n    },\n    {\n      \"name\": \"Uganda\",\n      \"code\": \"UG\",\n      \"dial_code\": \"+256\",\n      \"regex\": \"^\\\\+256\\\\d{9}$\",\n      \"placeholder\": \"+256 7XXXXXXXX\",\n      \"example\": \"+256 712345678\",\n      \"flag\": \"🇺🇬\"\n    },\n    {\n      \"name\": \"Ukraine\",\n      \"code\": \"UA\",\n      \"dial_code\": \"+380\",\n      \"regex\": \"^\\\\+380\\\\d{9}$\",\n      \"placeholder\": \"+380 9XXXXXXXX\",\n      \"example\": \"+380 931234567\",\n      \"flag\": \"🇺🇦\"\n    },\n    {\n      \"name\": \"United Arab Emirates\",\n      \"code\": \"AE\",\n      \"dial_code\": \"+971\",\n      \"regex\": \"^\\\\+971\\\\d{9}$\",\n      \"placeholder\": \"+971 5XXXXXXXX\",\n      \"example\": \"+971 501234567\",\n      \"flag\": \"🇦🇪\"\n    },\n    {\n      \"name\": \"United Kingdom\",\n      \"flag\": \"🇬🇧\",\n      \"code\": \"GB\",\n      \"dial_code\": \"+44\",\n      \"regex\": \"^\\\\+44[0-9]{10}$\",\n      \"placeholder\": \"+44 7123 456 789\"\n    },\n    {\n      \"name\": \"United States\",\n      \"flag\": \"🇺🇸\",\n      \"code\": \"US\",\n      \"dial_code\": \"+1\",\n      \"regex\": \"^\\\\+1[0-9]{10}$\",\n      \"placeholder\": \"+1 213 123 4567\"\n    },\n    {\n      \"name\": \"Uruguay\",\n      \"code\": \"UY\",\n      \"dial_code\": \"+598\",\n      \"regex\": \"^\\\\+598\\\\d{8}$\",\n      \"placeholder\": \"+598 9XXXXXXX\",\n      \"example\": \"+598 91234567\",\n      \"flag\": \"🇺🇾\"\n    },\n    {\n      \"name\": \"Uzbekistan\",\n      \"code\": \"UZ\",\n      \"dial_code\": \"+998\",\n      \"regex\": \"^\\\\+998\\\\d{9}$\",\n      \"placeholder\": \"+998 9XXXXXXXX\",\n      \"example\": \"+998 901234567\",\n      \"flag\": \"🇺🇿\"\n    },\n    {\n      \"name\": \"Vanuatu\",\n      \"code\": \"VU\",\n      \"dial_code\": \"+678\",\n      \"regex\": \"^\\\\+678\\\\d{5,7}$\",\n      \"placeholder\": \"+678 XXXXXX\",\n      \"example\": \"+678 591234\",\n      \"flag\": \"🇻🇺\"\n    },\n    {\n      \"name\": \"Venezuela, Bolivarian Republic of Venezuela\",\n      \"flag\": \"🇻🇪\",\n      \"code\": \"VE\",\n      \"dial_code\": \"+58\",\n      \"regex\": \"^\\\\+58[24]\\\\d{9}$\",\n      \"placeholder\": \"+58 4XXXXXXXXX\",\n      \"example\": \"+58 4121234567\"\n    },\n    {\n      \"name\": \"Vietnam\",\n      \"code\": \"VN\",\n      \"dial_code\": \"+84\",\n      \"regex\": \"^\\\\+84\\\\d{9,10}$\",\n      \"placeholder\": \"+84 9XXXXXXXX\",\n      \"example\": \"+84 912345678\",\n      \"flag\": \"🇻🇳\"\n    },\n    {\n      \"name\": \"Virgin Islands, British\",\n      \"flag\": \"🇻🇬\",\n      \"code\": \"VG\",\n      \"dial_code\": \"+1284\",\n      \"regex\": \"^\\\\+1284\\\\d{7}$\",\n      \"placeholder\": \"+1284 XXXXXXX\",\n      \"example\": \"+1284 3001234\"\n    },\n    {\n      \"name\": \"Virgin Islands, U.S.\",\n      \"flag\": \"🇻🇮\",\n      \"code\": \"VI\",\n      \"dial_code\": \"+1340\",\n      \"regex\": \"^\\\\+1340\\\\d{7}$\",\n      \"placeholder\": \"+1340 XXXXXXX\",\n      \"example\": \"+1340 7741234\"\n    },\n    {\n      \"name\": \"Wallis and Futuna\",\n      \"code\": \"WF\",\n      \"dial_code\": \"+681\",\n      \"regex\": \"^\\\\+681\\\\d{6}$\",\n      \"placeholder\": \"+681 XXXXXX\",\n      \"example\": \"+681 501234\",\n      \"flag\": \"🇼🇫\"\n    },\n    {\n      \"name\": \"Yemen\",\n      \"code\": \"YE\",\n      \"dial_code\": \"+967\",\n      \"regex\": \"^\\\\+967\\\\d{8,9}$\",\n      \"placeholder\": \"+967 7XXXXXXXX\",\n      \"example\": \"+967 712345678\",\n      \"flag\": \"🇾🇪\"\n    },\n    {\n      \"name\": \"Zambia\",\n      \"code\": \"ZM\",\n      \"dial_code\": \"+260\",\n      \"regex\": \"^\\\\+260\\\\d{9}$\",\n      \"placeholder\": \"+260 9XXXXXXXX\",\n      \"example\": \"+260 971234567\",\n      \"flag\": \"🇿🇲\"\n    },\n    {\n      \"name\": \"Zimbabwe\",\n      \"flag\": \"🇿🇼\",\n      \"code\": \"ZW\",\n      \"dial_code\": \"+263\",\n      \"regex\": \"^\\\\+263[0-9]{9}$\",\n      \"placeholder\": \"+263 71 234 5678\"\n    }\n  ];\n  filteredCountries: any\n  selectedCountry!: any;\n  showCountryDropdown = false;\n  countrySearch = '';\n  subscription: Subscription;\n  // Internal state\n  viewEdit: boolean = false \n  originalValue: any; // To store the original value when entering view edit mode\n  private lastClickTime = 0;\n  public cachedInputList: any[] = [];\n  showHijriPicker = false; // SKS7AUG25 for hijri popup\n  dateFormatName: any // SKS14AUG25 for hijri format\n  rawInputVal: any;\n  languageCode: any = 'en';\n  currencyOptions: any;\n  currentCurrency: any;\n  showModal: boolean = false;\n  private geoCoder;\n  markerOptions:any;\n  markerPosition: { lat: number; lng: number; };\n  private googleMapsPromise: Promise<void> | null = null;\n  private destroy$ = new Subject<void>();\n  private removeDocClick?: () => void;\n  private timers: number[] = [];\n\n  constructor( private nxtDatePipe: NxtDatePipe, private mapsLoader: GoogleMapsLoaderService, private cdr: ChangeDetectorRef, private ngZone: NgZone,private countryService: CountryService, private storageService: StorageService,private translationService: TranslationService, private renderer: Renderer2, private elRef: ElementRef,private elementRef: ElementRef, private changeService: ChangeService,private dataService: DataService) {}\n  ngAfterViewInit(): void {    \n    this.removeDocClick = this.renderer.listen('document', 'click', (event: Event) => {\n      if (!this.elRef.nativeElement.contains(event.target)) {\n        this.showCountryDropdown = false;\n      }\n    });    \n  }\n\n  ngOnChanges(changes: SimpleChanges) {\n    // SKS12SEP25 get current currency code from service\n    this.currencyOptions = this.countryService.getCountryData(['currencies'])\n    if(this.currencyOptions && this.currencyOptions.length > 0){\n      this.currencyOptions.forEach((option: any) => {\n        if(option.code === this.currency){\n          this.currentCurrency = option\n          this.countryService.currentCurrency(option)\n        }\n      })\n    }\n    if (changes['mode']) {\n      this.viewEdit = false\n      this.updateControlState();\n    }\n    if (changes['value']) {\n      if(this.type === 'dropdown'){\n        if(this.selectedOption.value){\n          if( this.selectedOption.value === changes['value'].currentValue){\n            this.writeValue( this.selectedOption.label,'onChange');\n          }\n        } else {\n          this.writeValue( changes['value'].currentValue,'onChange');\n        }\n      } if(this.type === 'location'){\n        // SKS18SEP25 latitude & longitude update when the value changes\n        if (this.value) {\n          this.geoCoder.geocode({ value: this.value }, (results, status) => {\n            if (status === 'OK' && results[0]?.geometry?.location) {\n              this.markerPosition = { lat: results[0].geometry.location.lat() || 0, lng: results[0].geometry.location.lng() || 0};\n              this.cdr.detectChanges();  // Force Angular to update the UI\n            }\n          });\n        } else {\n          // SKS18SEP25 Reset if no value is provided\n          this.markerPosition = null;\n          this.cdr.detectChanges();  // FORCE UI UPDATE\n        }\n      } else {\n        this.writeValue(changes['value'].currentValue, 'onChange');\n      }\n      if(this.type !== 'List' && changes['value'].currentValue) {\n        this.searchFromApi(changes['value'].currentValue, 'onChange')\n      }\n    }\n    if (this.confPass && changes['confPassVal'] && !changes['confPassVal'].firstChange) {\n      this.value = ''; // Reset input value\n    }\n    if (changes['type']) {\n      this.setupValidators();\n    }\n    this.updateInputList();\n  }\n  ngOnInit() {    \n    // SKS28FEB25 default country set \n    // SKS12SEP25 get current currency code from service\n    this.countryService.currentCurrencyOption$\n    .pipe(takeUntil(this.destroy$))\n    .subscribe(option => {\n      if (option) {\n        this.currentCurrency = this.countryService.getCurrentCurrency()\n        this.currency = this.currentCurrency?.code\n        this.cdr.detectChanges()\n      }\n    });\n    this.currencyOptions = this.countryService.getCountryData(['currencies'])\n    if(this.currencyOptions && this.currencyOptions.length > 0){\n      this.currencyOptions.forEach((option: any) => {\n        if(option.code === this.currency){\n          this.currentCurrency = option\n          this.countryService.currentCurrency(option)\n        }\n      })\n    }\n    this.selectedCountry = this.countries.find(c => c.code === 'IN') || this.countries[0];\n    this.filteredCountries = [...this.countries];\n    const validators: ValidatorFn | ValidatorFn[] | null = [];\n    if (this.required) validators.push(Validators.required);\n    if (this.minLength) validators.push(Validators.minLength(this.minLength));\n    if (this.pattern) validators.push(Validators.pattern(this.pattern));\n    if (this.maxLength) validators.push(Validators.maxLength(this.maxLength));\n    if (this.confPass) validators.push(this.passwordMatchValidator());\n    this.control.setValidators(validators);\n  \n    if (this.type === 'otp') {\n      this.inputs.controls.forEach((control) => {\n        control.setValidators(validators);\n      });\n    }else if (this.type === 'tel') {\n      this.control.setValidators([\n        Validators.pattern(this.removeDialCodeFromRegex(this.selectedCountry.regex, this.selectedCountry.dial_code))\n      ]);\n    } else if(this.type === 'time' || this.type === 'month' || this.type === 'datetime' || this.type === 'date'){\n      this.control?.disable({ emitEvent: false });\n    }\n    //AP-01JUL25 - Disable the field unless in 'edit' mode and question is not marked as read-only\n    this.setDisabledState(this.mode === 'edit' ? this.readOnly === true : true);\n    if (typeof this.question?.subText === 'string') {\n      if (this.question.subText.trim() === '') {\n        this.question.subText = null;\n      } else {\n        try {\n          this.question.subText = JSON.parse(this.question.subText);\n        } catch (e) {\n          this.question.subText = null; // Or handle differently\n        }\n      }\n    }\n    if(this.question?.subText != undefined) {\n      // this.disabled = true;\n      let dependencyObj: any = this.question?.subText;\n      // Subscribe for the changes\n      this.changeService.changeAnnounced$\n      .pipe(takeUntil(this.destroy$))\n      .subscribe(changeValue => {\n          if(changeValue != undefined) {\n            if(changeValue.fromQuestionId && changeValue.valueObj !== undefined && ( Array.isArray(dependencyObj.sourceQuestionId)? dependencyObj.sourceQuestionId.includes(changeValue.fromQuestionId) : changeValue.fromQuestionId === dependencyObj.sourceQuestionId)) {\n              if(Array.isArray(dependencyObj.queryValue)? dependencyObj.queryValue.includes(changeValue.referenceField) : changeValue.referenceField === dependencyObj.queryValue){\n                this.storageService.queryValueStore(this.question.id,changeValue.referenceField,this.type === 'list' && changeValue.field ? this.dataService.getValue(changeValue.valueObj, changeValue.field) : changeValue.valueObj)\n              }\n              let apiResponseVal = this.storageService.getApiResponseValue(changeValue.fromQuestionId)\n              // VD 20Aug24 handling the multiple object\n              if(dependencyObj.valueField){\n                let tempData = this.dataService.getValue(apiResponseVal || changeValue.valueObj,dependencyObj.valueField)\n                this.value = (this.type === \"dropdown\" && dependencyObj.field)  ? this.dataService.getValue(tempData,dependencyObj.field) : tempData\n                let change: any={};\n                change['isObject'] = this.apiMeta?.isObject\n                change['fromQuestionId'] = this.question.id;\n                change['valueObj'] = this.value;\n                change['field'] = this.apiMeta?.defaultField || (Array.isArray(this.apiMeta?.field) ? this.apiMeta?.field?.[0] : this.apiMeta?.field);\n                change['referenceField'] = this.question.referenceField;\n                this.inputValue.emit({question : this.question, value: change, tsChange: true});\n                if(this.apiMeta?.isCurrencyField){\n                  this.countryService.currencyCodeSet(this.value)\n                }\n              }\n              // SKS12SEP25 condition based dependent field\n              if(dependencyObj.isDependentField){\n                if (typeof changeValue.valueObj === 'boolean') {\n                  this.question.isHidden = changeValue.valueObj\n                    ? !(dependencyObj.dependentValue === 'true')\n                    : !(dependencyObj.dependentValue === 'false');\n                  this.value = this.question.defaultValue && this.question.defaultValue != '' ? this.question.defaultValue : ''\n                  let change: any={};\n                  change['isObject'] = this.apiMeta?.isObject\n                  change['fromQuestionId'] = this.question.id;\n                  change['valueObj'] =  this.question.isHidden ? null : this.value;\n                  change['field'] = this.apiMeta?.defaultField || (Array.isArray(this.apiMeta?.field) ? this.apiMeta?.field?.[0] : this.apiMeta?.field);\n                  change['referenceField'] = this.question.referenceField;\n                  this.inputValue.emit({question : this.question, value: change, tsChange: true});\n                  this.selectEmit.emit(this.question.isHidden ? null : this.value)\n                  if(this.apiMeta?.isCurrencyField){\n                    this.countryService.currencyCodeSet(this.value)\n                  }\n                } else if(changeValue.valueObj && changeValue.valueObj === dependencyObj.dependentValue){\n                  this.question.isHidden = false\n                  this.value =this.question.defaultValue && this.question.defaultValue != '' ? this.question.defaultValue : this.value || ''\n                  let change: any={};\n                  change['isObject'] = this.apiMeta?.isObject\n                  change['fromQuestionId'] = this.question.id;\n                  change['valueObj'] = this.value;\n                  change['field'] = this.apiMeta?.defaultField || (Array.isArray(this.apiMeta?.field) ? this.apiMeta?.field?.[0] : this.apiMeta?.field);\n                  change['referenceField'] = this.question.referenceField;\n                  this.inputValue.emit({question : this.question, value: change, tsChange: true});\n                  this.selectEmit.emit(this.value)\n                  if(this.apiMeta?.isCurrencyField){\n                    this.countryService.currencyCodeSet(this.value)\n                  }\n                } else {\n                  this.question.isHidden = true\n                  let change: any={};\n                    change['isObject'] = this.apiMeta?.isObject\n                    change['fromQuestionId'] = this.question.id;\n                    change['valueObj'] = null;\n                    change['field'] = this.apiMeta?.defaultField || (Array.isArray(this.apiMeta?.field) ? this.apiMeta?.field?.[0] : this.apiMeta?.field);\n                    change['referenceField'] = this.question.referenceField;\n                    this.inputValue.emit({question : this.question, value: change, tsChange: true});\n                    this.selectEmit.emit('')\n                    if(this.apiMeta?.isCurrencyField){\n                      this.countryService.currencyCodeSet('INR')\n                    }\n                }\n              }\n              if(dependencyObj.conditionQuestionId){\n                this.storageService.setConditionQuestionData(this.question.id, dependencyObj.conditionQuestionId, changeValue.valueObj)\n                if(this.storageService.getConditionQuestionValue(this.question.id, dependencyObj.conditionQuestionId).status){\n                  this.value = changeValue.valueObj\n                  let change: any={};\n                  change['isObject'] = this.apiMeta?.isObject\n                  change['fromQuestionId'] = this.question.id;\n                  change['valueObj'] = this.value;\n                  change['field'] = this.apiMeta?.defaultField || (Array.isArray(this.apiMeta?.field) ? this.apiMeta?.field?.[0] : this.apiMeta?.field);\n                  change['referenceField'] = this.question.referenceField;\n                  this.inputValue.emit({question : this.question, value: change, tsChange: true});\n                  this.selectEmit.emit(this.value)\n                  if(this.apiMeta?.isCurrencyField){\n                    this.countryService.currencyCodeSet(this.value)\n                  }\n                }\n              }\n              if(Array.isArray(dependencyObj.sourceQuestionId)? dependencyObj.sourceQuestionId.includes(changeValue.fromQuestionId) : changeValue.fromQuestionId === dependencyObj.sourceQuestionId){\n                this.storageService.setConditionQuestionData(this.question.id, dependencyObj.conditionQuestionId, changeValue.valueObj)\n              }\n            }\n            if(changeValue.fromQuestionId && changeValue.valueObj !== undefined && ( Array.isArray(dependencyObj.conditionQuestionId)? dependencyObj.conditionQuestionId.includes(changeValue.fromQuestionId) : changeValue.fromQuestionId === dependencyObj.conditionQuestionId)) {\n              if(typeof changeValue.valueObj === 'boolean' ? (changeValue.valueObj ? dependencyObj.conditionQuestionValue === 'true' : dependencyObj.conditionQuestionValue === 'false') : changeValue.valueObj === dependencyObj.conditionQuestionValue){\n                this.storageService.setConditionQuestionValue(this.question.id, dependencyObj.conditionQuestionId, true)\n                this.value = this.storageService.getConditionQuestionValue(this.question.id, dependencyObj.conditionQuestionId).data\n                let change: any={};\n                change['isObject'] = this.apiMeta?.isObject\n                change['fromQuestionId'] = this.question.id;\n                change['valueObj'] = this.value;\n                change['field'] = this.apiMeta?.defaultField || (Array.isArray(this.apiMeta?.field) ? this.apiMeta?.field?.[0] : this.apiMeta?.field);\n                change['referenceField'] = this.question.referenceField;\n                this.inputValue.emit({question : this.question, value: change, tsChange: true});\n                this.selectEmit.emit(this.value)\n                if(this.apiMeta?.isCurrencyField){\n                  this.countryService.currencyCodeSet(this.value)\n                }\n              }else{\n                this.storageService.setConditionQuestionValue(this.question.id, dependencyObj.conditionQuestionId, false)\n              }\n            }\n            this.changeService.confirmChange(changeValue.fromQuestionId);\n          }\n        }\n      );\n    }\n    document.addEventListener('quill-save', this.saveChanges);\n    document.addEventListener('quill-discard', this.discardChanges);\n    this.updateInputList();\n    this.translationService.languageChange$\n    .pipe(takeUntil(this.destroy$))\n    .subscribe(lang => {\n      this.languageCode = lang\n    });\n    // HA-11-01-2024 Changed the map Call from constructor to ngOnInit as it was giving undefined values in the outsourced\n    if (this.apiKey && this.type === 'location') {\n      this.mapsLoader.load(this.apiKey)\n        .then(() => {\n          this.geoCoder = new google.maps.Geocoder();\n          // safe to use google.maps here\n          this.markerOptions = {\n            draggable: true,\n            animation: google.maps.Animation.DROP,\n          };\n          new google.maps.Marker({\n            draggable: true,\n            animation: google.maps.Animation.DROP,\n          });\n          this.initAutocomplete();\n        })\n        .catch(err => console.error(err));\n    }\n  }\n  ngOnDestroy(): void {\n    this.destroy$.next();\n    this.destroy$.complete();\n    this.removeDocClick?.();\n    this.timers.forEach(t => clearTimeout(t));\n    document.removeEventListener('quill-save', this.saveChanges);\n    document.removeEventListener('quill-discard', this.discardChanges);\n  }\n  private updateInputList() {\n    this.cachedInputList = this.type !== 'otp' ? this.inputs.controls.slice(0, 1) : this.inputs.controls;\n  }\n  // SKS14JUN25  Dynamically load Quill editor toolbar\n  getQuillModules(questionId: string): QuillModules {\n    if(this.viewEdit){\n      return {\n        imageResizor: {},\n        toolbar: {\n          container: [\n            [{ 'font': fontFamilyArr }],  //RS 17JAN2025  Added font family dropdown\n            ['bold', 'italic', 'underline', 'strike'],\n            ['blockquote', 'code-block'],\n            [{ header: [1, 2, 3, 4, 5, 6, false] }],\n            [{ list: 'ordered' }, { list: 'bullet' }],\n            [{ color: [] }, { background: [] }],\n            [{ align: [] }],\n            ['link', 'image', 'video'],\n            ['formula'],\n            ['clean'],\n            ['save', 'discard']\n          ],\n          handlers: {\n            save: function () {\n              const event = new CustomEvent('quill-save', {\n                detail: { id: questionId }  // You inject the correct ID directly here\n              });\n              document.dispatchEvent(event);\n            },\n            discard: function () {\n              const event = new CustomEvent('quill-discard', {\n                detail: { id: questionId }\n              });\n              document.dispatchEvent(event);\n            }\n          }\n        },\n        mention: {\n          allowedChars: /^[A-Za-z\\sÅÄÖåäö]*$/,\n          mentionDenotationChars: ['@', '#'],\n          source: function (searchTerm: string, renderList: any) {\n            const values = [\n              { id: 1, value: 'User 1' },\n              { id: 2, value: 'User 2' },\n            ];\n      \n            if (searchTerm.length === 0) {\n              renderList(values, searchTerm);\n            } else {\n              const matches = values.filter((item) =>\n                item.value.toLowerCase().includes(searchTerm.toLowerCase())\n              );\n              renderList(matches, searchTerm);\n            }\n          },\n        },\n      }\n    }else {\n      return {\n        imageResizor: {},\n        toolbar: {\n          container: [\n            [{ 'font': fontFamilyArr }],  //RS 17JAN2025  Added font family dropdown\n            ['bold', 'italic', 'underline', 'strike'],\n            ['blockquote', 'code-block'],\n            [{ header: [1, 2, 3, 4, 5, 6, false] }],\n            [{ list: 'ordered' }, { list: 'bullet' }],\n            [{ color: [] }, { background: [] }],\n            [{ align: [] }],\n            ['link', 'image', 'video'],\n            ['formula'],\n            ['clean'],\n          ],\n        },\n        mention: {\n          allowedChars: /^[A-Za-z\\sÅÄÖåäö]*$/,\n          mentionDenotationChars: ['@', '#'],\n          source: function (searchTerm: string, renderList: any) {\n            const values = [\n              { id: 1, value: 'User 1' },\n              { id: 2, value: 'User 2' },\n            ];\n        \n            if (searchTerm.length === 0) {\n              renderList(values, searchTerm);\n            } else {\n              const matches = values.filter((item) =>\n                item.value.toLowerCase().includes(searchTerm.toLowerCase())\n              );\n              renderList(matches, searchTerm);\n            }\n          },\n        },\n      }\n    }\n  }\n  private setupValidators() {\n    const validators: ValidatorFn[] = [];\n    \n    if (this.required) validators.push(Validators.required);\n    if (this.minLength) validators.push(Validators.minLength(this.minLength));\n    if (this.maxLength) validators.push(Validators.maxLength(this.maxLength));\n    if (this.pattern) validators.push(Validators.pattern(this.pattern));\n    \n    this.control.setValidators(validators);\n  }\n  // SKS28FEB25 Country Dropdown close \n  @HostListener('document:click', ['$event'])\n  closeDropdown(event: Event) {\n    const now = Date.now();\n    if (now - this.lastClickTime < 100) return; // throttle repeated calls\n    this.lastClickTime = now;\n\n    if (!this.elementRef.nativeElement.contains(event.target)) {\n      this.showCountryDropdown = false;\n    }\n  }\n  @HostListener('document:click', ['$event'])\n  onClickOutside(event: Event) {\n      const clickedInside = (event?.target as HTMLElement)?.closest(`.nxt-${this.question?.nxtTableId || this.question?.id}`);\n      if (!clickedInside) {\n        this.showHijriPicker = false;\n      }\n  }  \n\n  onChange: (value: string) => void = () => {};\n  onTouched: () => void = () => {};\n\n  registerOnTouched(fn: any): void {\n    this.onTouched = fn;\n  }\n\n  onInputChange(event: any) {\n    const inputElement = event?.target as HTMLInputElement;\n    const cursorPos = inputElement?.selectionStart; // save cursor position\n    if(this.type === 'datetime' || this.type === 'date' || this.type === 'month' || this.type === 'time'){\n        this.dateFormatName = event.from\n        this.value = event.date\n        this.showHijriPicker = false;\n    } else if(this.type === 'richtext'){\n      this.value = event;\n    }else if(this.type === 'checkbox'){ // SKS23JUN25 handel checkbox event\n      const isChecked = (event.target as HTMLInputElement).checked;\n      this.value = isChecked;\n    } else {\n      const inputElement = event.target as HTMLInputElement;\n      this.rawInputVal = inputElement.value;\n      if(this.type === 'tel') {\n        this.value = this.selectedCountry.dial_code+ \" \" + inputElement.value;\n      } else {\n        this.value = inputElement.value;\n      }\n    }\n    this.onChange(this.value);\n    this.onTouched();\n    // SKS11JUN25 Only emit the value if not in view edit mode\n    if (!this.viewEdit || this.type === 'list') {\n      let change: any={};\n      let addObj1 = {};\n      if(this.type === 'location'){\n        addObj1['address'] = this.value;\n        addObj1['latitude'] = null;\n        addObj1['longitude'] = null;\n      }\n      change['isObject'] = this.apiMeta?.isObject\n      change['fromQuestionId'] = this.question?.id;\n      change['valueObj'] =this.type === 'location' ? addObj1 : this.value;\n      change['field'] = this.apiMeta?.defaultField || (Array.isArray(this.apiMeta?.field) ? this.apiMeta?.field?.[0] : this.apiMeta?.field);\n      change['referenceField'] = this.question?.referenceField;\n      this.inputValue.emit({question : this.question, value: change});\n      if(this.apiMeta?.isCurrencyField){\n        this.countryService.currencyCodeSet(this.value)\n      }\n    }\n    if(this.type !== 'list') this.searchFromApi(this.value)\n    // SKS13MAR26 restore cursor position\n    setTimeout(() => {\n      if(this.type !== 'checkbox')inputElement?.setSelectionRange(cursorPos, cursorPos);\n    });\n  }\n\n  togglePasswordVisibility() {\n    this.isPasswordVisible = !this.isPasswordVisible;\n  }\n  passwordMatchValidator(): ValidatorFn {\n    return (control: AbstractControl): ValidationErrors | null => {\n      const confirmPassword = control.value; // Get confirm password field value\n      if(this.confPassVal === ''){\n        return { passwordMismatch: true };\n      }\n      return this.confPassVal === confirmPassword ? null : { passwordMismatch: true };\n    };\n  }\n  getErrorMessage(): string {\n    if (this.control.hasError('required')) return this.errorMessages['required'] || 'This field is required';\n    if (this.control.hasError('minlength')) return this.errorMessages['minlength'] || `Minimum ${this.minLength} characters required`;\n    if (this.control.hasError('pattern')) return this.errorMessages['pattern'] || (this.type === 'tel' ? `Invalid ${this.selectedCountry.name} phone number format` : 'Invalid format');\n    if (this.control.hasError('maxlength')) return this.errorMessages['maxlength'] || `Maximum ${this.maxLength} characters allowed`;\n    if (this.control.hasError('passwordMismatch')) return this.errorMessages['confPass'] || `Passwords do not match`;\n    return '';\n  }\n  writeValue(value: any, from?:any ): void {\n    if (this.type === 'otp') {\n      const values = value.split('').slice(0, this.#size);\n      values.forEach((val, index) => this.inputs.controls[index].setValue(val));\n    } else if(this.type === 'time' || this.type === 'month' || this.type === 'datetime' || this.type === 'date'){\n      let displayValue = this.nxtDatePipe.transform( value, this.type, this.languageCode, this.dateFormatName);\n      this.control.setValue(displayValue);\n      this.value = value;\n    } else {\n      this.control.setValue(value);\n      this.value = value;\n    }\n  }\n\n  registerOnChange(fn: any): void {\n    this.onChange = fn;\n    if (this.type === 'otp') {\n      this.inputs.valueChanges\n      .pipe(takeUntil(this.destroy$))\n      .subscribe(() => {\n        const value = this.inputs.value.join('');\n        this.onChange(value);\n      });\n    } else {\n      this.control.valueChanges\n      .pipe(takeUntil(this.destroy$))\n      .subscribe((value) => {\n        this.onChange(value);\n      });\n    }\n  }\n  setDisabledState(isDisabled: boolean): void {\n    if (this.type === 'otp') {\n        if (isDisabled) {\n            this.inputs.disable();\n        } else {\n            this.inputs.enable();\n        }\n    } else {\n        if (isDisabled) {\n            this.control.disable();\n        } else {\n            this.control.enable();\n        }\n    }\n}\nprivate updateControlState() {\n  //AP-01JUL25 - Determine if the field should be disabled based on mode and question's read-only status\n  const shouldDisable = this.mode === 'edit' ? this.readOnly === true : true;\n  this.setDisabledState(shouldDisable);\n}\n  validate(control: AbstractControl<string, string>): ValidationErrors | null {\n    if (this.type === 'otp') {\n      if (!control.value || control.value.length < this.#size) {\n        return { otpInput: 'Value is incorrect' };\n      }\n    } else {\n      if (this.control.invalid) {\n        return this.control.errors;\n      }\n    }\n    return null;\n  }\n\n  handleKeyDown(e: KeyboardEvent, idx: number) {\n    if (e.key === 'Backspace' || e.key === 'Delete') {\n      if (idx > 0) {\n        this.#scheduledFocus = idx - 1;\n      } else {\n        this.#scheduledFocus = null;\n      }\n    }\n  }\n\n  // Due to iOS/iPadOS Safari bug/special behavior we are forced to\n  // schedule focus transition during keypress/keydown event and only\n  // after input event happened - execute the transition\n  // otherwise inputs don't get their values filled\n  handleInput() {\n    this.#updateWiredValue();\n    if (this.#scheduledFocus !== null) {\n      this.#focusInput(this.#scheduledFocus);\n      this.#scheduledFocus = null; // Reset to null after focusing\n    }\n  }\n\n  handleKeyPress(e: KeyboardEvent, idx: number) {\n    const isDigit = /\\d/.test(e.key);\n  \n    if (e.key === 'v' && e.metaKey) {\n      return true;\n    }\n  \n    if (isDigit && idx + 1 < this.#size) {\n      this.#scheduledFocus = idx + 1;\n    } else {\n      this.#scheduledFocus = null; // Ensure it's null if not moving focus\n    }\n  \n    if (isDigit && this.inputs.controls[idx].value) {\n      this.inputs.controls[idx].setValue('');\n    }\n  \n    return isDigit;\n  }\n\n  handlePaste(e: ClipboardEvent, idx: number) {\n    e.preventDefault();\n\n    if (idx !== 0) {\n      // If the target input is not the first one - ignore\n      return;\n    }\n\n    const pasteData = e.clipboardData?.getData('text');\n    const regex = new RegExp(`\\\\d{${this.#size}}`);\n\n    if (!pasteData || !regex.test(pasteData)) {\n      // If there is nothing to be pasted or the pasted data does not\n      // comply with the required format - ignore the event\n      return;\n    }\n\n    for (let i = 0; i < pasteData.length; i++) {\n      this.inputs.controls[i].setValue(pasteData[i]);\n    }\n\n    this.#focusInput(this.inputEls.length - 1);\n    this.#updateWiredValue();\n    this.onTouched();\n  }\n\n  handleFocus(e: FocusEvent) {\n    // Select previously entered value to replace with a new input\n    (e.target as HTMLInputElement).select();\n  }\n\n  #focusInput(idx: number) {\n    // In order not to interfere with the input we setTimeout\n    // before advancing the focus\n    setTimeout(() => this.inputEls.get(idx)?.nativeElement.focus());\n  }\n\n  #updateWiredValue() {\n    // We want to expose the value as a plain string\n    //\n    // In order not to interfere with the input we setTimeout\n    // before advancing the focus\n    setTimeout(() => this.onChange?.(this.inputs.value.join('')));\n  }\n  // SKS28FEB25 toggle Country Dropdown\n  toggleCountryDropdown() {\n    this.showCountryDropdown = !this.showCountryDropdown;\n  }\n\n  // SKS28FEB25 Country Dropdown search filter\n  filterCountries(event : any) {\n    const inputElement = event.target as HTMLInputElement;\n    this.countrySearch = inputElement.value;\n    this.filteredCountries = this.countries.filter(country =>\n      country.name.toLowerCase().includes(this.countrySearch.toLowerCase()) ||\n      country.dial_code.includes(this.countrySearch)\n    );\n  }\n\n  // SKS28FEB25 Country Dropdown select function\n  selectCountry(country: any) {\n    this.selectedCountry = country;\n    this.showCountryDropdown = false;\n    this.control.setValidators([\n      Validators.required,\n      Validators.pattern(this.removeDialCodeFromRegex(this.selectedCountry.regex, this.selectedCountry.dial_code))\n    ]);\n    // SKS28FEB25 Update the control's value with the new dial code\n    this.control.setValue(this.rawInputVal);\n\n    // SKS28FEB25 Immediately update validity status\n    this.control.updateValueAndValidity();\n\n    // SKS28FEB25 Trigger change detection if needed\n    this.control.markAsTouched();\n    this.value = this.selectedCountry.dial_code+ \" \" + this.rawInputVal;\n    this.onChange(this.value);\n  }\n  // SKS28FEB25 remove DialCode From Regex\n  removeDialCodeFromRegex(originalRegex: string, dialCode: string): string {\n    const escapedDialCode = dialCode.replace(/\\+/g, \"\\\\+\");\n    return originalRegex.replace(`^${escapedDialCode}`, '^');\n  }\n\n  // SKS28FEB25 remove DialCode From Regex for show in input\n  removeDialCode(placeholder: string): string {\n    return placeholder.replace(/^\\+\\d+\\s*/, '');\n  }\n  blurEmit(){\n    this.onBlur.emit(this.value);\n  }\n  focusinEmit(event: any){\n    this.onFocus.emit(event);\n  }\n  toggle(event: any){\n    this.toggleEmit.emit(event);\n  }\n  onEditorFocusOut(): void {\n    const currentValue = this.value || '';\n    this.valueChange.emit(currentValue);\n  }\n  viewEditClick(ques: any) {\n    this.originalValue = this.value; // Store the original value\n    this.viewEdit = true; // Enter view edit mode\n    this.mode = 'edit';\n    this.updateControlState(); // Update control state\n  }\n  saveChanges = (event?: CustomEvent) => {\n    // SKS14JUN25 Emit save/discard event only if the current question was changed\n    if(event) if (event.detail?.id !== this.question?.id) return;\n    let ques = this.question\n    ques['singleFieldChange'] = true\n    let change: any= {};\n    change['isObject'] = this.apiMeta?.isObject\n    change['fromQuestionId'] = this.question?.id;\n    change['valueObj'] = this.value;\n    change['field'] = this.apiMeta?.defaultField || (Array.isArray(this.apiMeta?.field) ? this.apiMeta?.field?.[0] : this.apiMeta?.field);\n    change['referenceField'] = this.question?.referenceField;\n    this.inputValue.emit({question : ques, value: change, tsChange: true}); // Emit the updated value\n    if(this.apiMeta?.isCurrencyField){\n      this.countryService.currencyCodeSet(this.value)\n    }\n    this.viewEdit = false; // Exit view edit mode\n    this.mode = 'view'; // Switch back to view mode\n    this.updateControlState(); // Update control state\n  }\n  discardChanges = (event?: CustomEvent) => {\n    // SKS14JUN25 Emit save/discard event only if the current question was changed\n    if(event) if (event.detail?.id !== this.question?.id) return;\n    this.writeValue(this.originalValue); // Revert to original value\n    this.viewEdit = false; // Exit view edit mode\n    this.mode = 'view'; // Switch back to view mode\n    this.updateControlState(); // Update control state\n  }\n  openDatePicker(type: string) {\n    if(type === 'datetime' || type === 'date' || this.type === 'month' || this.type === 'time') {\n      this.showHijriPicker = !this.showHijriPicker\n    }\n  }\n  removeValue(){\n    this.removeValueEmit.emit()\n  }\n  // SKS7AUG25 hijri popup open flag\n  onHijriInputClick() {\n    if(this.mode !== 'edit') return\n    const t = window.setTimeout(() => {\n      this.showHijriPicker = true;\n    });\n    this.timers.push(t);\n  }\n  // SKS7AUG25 data get function from endpoint\n  private searchFromApi(keyword: string, from?: any): void {\n    if(!this.apiMeta || !this.apiMeta.endpoint){\n      return \n    }\n    this.isLoading = true;\n    if(!this.apiMeta.endpoint && Array.isArray(this.question?.input) ){\n      this.isLoading = false;\n      let response;\n      if (this.apiMeta.variable) {\n        response = this.dataService.getValue(this.question?.input, this.apiMeta.variable);\n        this.storageService.apiResponseStore(this.question.id,response)\n      } else {\n        response = this.question?.input;\n      }\n    } else {\n      let finalGetCall = this.apiMeta.endpoint;\n      // SKS18JUL25 query params creation\n      if(this.apiMeta?.queryParameter){\n        const isFieldArray = Array.isArray(this.apiMeta?.queryParameter);\n        const fields = isFieldArray ? this.apiMeta.queryParameter : [this.apiMeta.queryParameter]; // always an array now\n        //SKS7AUG25 Build query params string\n        const queryParams = fields\n          .map(field => `${field}=${keyword}`)\n          .join('&');\n        // SKS7AUG25 Check if endpoint already has query params\n        if(queryParams && queryParams !== ''){\n          if (finalGetCall.includes('?')) {\n            finalGetCall += `&${queryParams}`;\n          } else {\n            finalGetCall += `?${queryParams}`;\n          }\n        }\n      }\n      if (this.apiMeta?.queryField && this.apiMeta?.queryValue) {\n        const queryFields = Array.isArray(this.apiMeta.queryField)\n          ? this.apiMeta.queryField\n          : [this.apiMeta.queryField];\n      \n        const queryValues = Array.isArray(this.apiMeta.queryValue)\n          ? this.apiMeta.queryValue\n          : [this.apiMeta.queryValue];\n      \n        const stored = this.storageService.getQueryValue(this.question.id); // single object\n      \n        const queryParamsArray: string[] = [];\n      \n        queryFields.forEach((field, index) => {\n          const valueKey = queryValues[index] ?? queryValues[0];\n          const value = this.dataService.getValue(stored, valueKey);\n          if (value !== undefined && value !== null) {\n            queryParamsArray.push(`${field}=${encodeURIComponent(value)}`);\n          }\n        });\n      \n        const queryParams = queryParamsArray.join('&');\n      \n        if (queryParams) {\n          finalGetCall += finalGetCall.includes('?') ? `&${queryParams}` : `?${queryParams}`;\n        }\n      }      \n      if(finalGetCall){\n        this.dataService.apiResponse(finalGetCall)\n        .pipe(takeUntil(this.destroy$))\n        .subscribe({\n          next: (apiResponse) => {\n              let response;\n              this.isLoading = false;\n              if (this.apiMeta.variable) {\n                response = this.dataService.getValue(apiResponse, this.apiMeta.variable);\n              } else {\n                response = apiResponse;\n              }\n              this.storageService.apiResponseStore(this.question.id,response)\n              let change: any={};\n              change['isObject'] = this.apiMeta?.isObject\n              change['fromQuestionId'] = this.question?.id;\n              change['valueObj'] = keyword || this.value;\n              change['field'] = this.apiMeta?.defaultField || (Array.isArray(this.apiMeta?.field) ? this.apiMeta?.field?.[0] : this.apiMeta?.field);\n              change['referenceField'] = this.question?.referenceField;\n              this.inputValue.emit({question : this.question, value: change, tsChange: from === 'onChange'});\n              if(this.apiMeta?.isCurrencyField){\n                this.countryService.currencyCodeSet(this.value)\n              }\n          },\n          error: (error) => {\n              this.isLoading = false;\n          }\n        });\n      }\n    }\n  }\n  initAutocomplete(): void {\n    if (this.geoCoder) {\n      const autocomplete = new google.maps.places.Autocomplete(this.inputRef?.nativeElement, {\n        types: []\n      });\n      autocomplete.addListener('place_changed', () => {\n        this.ngZone.run(() => {\n          const place: google.maps.places.PlaceResult = autocomplete.getPlace();\n\n          if (place.geometry === undefined || place.geometry === null) {\n            return;\n          }\n          this.value = place.formatted_address;\n          // VD 21DEC23 - dependent field change\n          let change: any ={};\n          // RS 09DEC24 Changed keys\n          change['fromQuestionId'] = this.question.id;\n          let addObj = {};\n          addObj['address'] = this.value;\n          addObj['latitude'] = place.geometry.location.lat();\n          addObj['longitude'] = place.geometry.location.lng();\n          change['valueObj'] = addObj;\n          change['field'] = this.apiMeta?.defaultField || (Array.isArray(this.apiMeta?.field) ? this.apiMeta?.field?.[0] : this.apiMeta?.field);\n          change['referenceField'] = this.question.referenceField;\n          this.inputValue.emit({question : this.question, value: change, tsChange: true});\n          if(this.apiMeta?.isCurrencyField){\n            this.countryService.currencyCodeSet(this.value)\n          }\n        });\n      });\n    }\n  }\n  openMap() {\n    this.showModal = true;\n    if(this.value){\n      this.geoCoder.geocode({ value: this.value }, (results, status) => {\n        if (status === 'OK' && results[0]?.geometry?.location) {\n          this.markerPosition = { lat: results[0].geometry.location.lat(), lng: results[0].geometry.location.lng() };\n        } else {\n          this.setCurrentLocation();\n        }\n      });\n    } else {\n      this.setCurrentLocation()\n      this.markerPosition = { lat: 0, lng: 0 };\n    }\n  }\n  closeModal() {\n    this.showModal = false;\n  }\n  private setCurrentLocation() {\n    if ('geolocation' in navigator) {\n      navigator.geolocation.getCurrentPosition((position) => {\n        this.markerPosition = { lat: position.coords.latitude || 0, lng: position.coords.longitude || 0};\n        this.getAddress(position.coords.latitude, position.coords.longitude);\n      });\n    }\n  }\n  getAddress(latitude: number, longitude: number) {\n    if (this.geoCoder) {\n      this.geoCoder.geocode({ location: { lat: latitude || 0, lng: longitude || 0} }, (results, status) => {\n        if (status === 'OK') {\n          if (results[0]) {\n            this.value = results[0].formatted_address;\n            // VD 21DEC23 - dependent field change\n            let change: any ={};\n            // RS 09DEC24 Changed keys\n            let addObj1 = {};\n            addObj1['address'] = this.value;\n            addObj1['latitude'] = latitude;\n            addObj1['longitude'] = longitude;\n            change['valueObj'] = addObj1;\n            change['field'] = this.apiMeta?.defaultField || (Array.isArray(this.apiMeta?.field) ? this.apiMeta?.field?.[0] : this.apiMeta?.field);\n            change['fromQuestionId'] = this.question.id;\n            change['referenceField'] = this.question.referenceField;\n            this.inputValue.emit({question : this.question, value: change});\n            if(this.apiMeta?.isCurrencyField){\n              this.countryService.currencyCodeSet(this.value)\n            }\n          }\n        }\n      });\n    }\n  }\n  onMapClick(event: google.maps.MapMouseEvent): void {\n    this.getAddress(event.latLng.lat(), event.latLng.lng());\n  }\n  onMarkerDragEnd(event: google.maps.MapMouseEvent): void {\n    if (event.latLng) {\n      this.getAddress(event.latLng.lat(), event.latLng.lng());\n    }\n  }\n  loadGoogleMaps(): Promise<void> {\n    if (this.googleMapsPromise) {\n      return this.googleMapsPromise;\n    }\n    this.googleMapsPromise = new Promise<void>((resolve, reject) => {\n      if (window['google'] && window['google'].maps) {\n        resolve();\n        return;\n      }\n      const script = document.createElement('script');\n      script.src = `https://maps.googleapis.com/maps/api/js?key=${this.apiKey}&libraries=places`;\n      script.async = true;\n      script.defer = true;\n      script.onload = () => {\n        resolve();\n      };\n      script.onerror = () => {\n        console.error('Failed to load Google Maps');\n        reject();\n      };\n      document.head.appendChild(script);\n    });\n    return this.googleMapsPromise;\n  }\n  allowNumberDecimal(event: KeyboardEvent) { //SKS13MAR26 text to decimal\n    const allowedKeys = [\n      'Backspace','Tab','ArrowLeft','ArrowRight','Delete'\n    ];\n    if (allowedKeys.includes(event.key)) {\n      return;\n    }\n    // allow numbers\n    if (/^[0-9]$/.test(event.key)) {\n      return;\n    }\n    const input = event.target as HTMLInputElement;\n    // allow single dot\n    if (event.key === '.' && !input.value.includes('.')) {\n      return;\n    }\n    event.preventDefault();\n  }\n}\n","<!-- SKS31JAN25 -->\n<div class=\"hover-wrapper input-wrapper\" (document:click)=\"closeDropdown($event)\">\n  <div>\n    <div *ngIf=\"label && type != 'checkbox' && showLabel\" [ngStyle]=\"{\n        'padding-top': type === 'label' ? '10px' : '',\n        'padding-bottom': type === 'label' ? '10px' : ''\n      }\"  \n      [style.justify-content]=\"textAlign || 'start'\"\n      [style.font-weight]=\"labelWeight ||  type === 'label' ? 'bold' : 'normal'\" [style.font-size]=\"(labelSize && labelSize !== '' )? labelSize : type === 'label' ? '16px' : '14px'\"\n      style=\"display: flex; gap: 5px;\"> \n      {{ label }}\n      <div *ngIf=\"helpText\" [matTooltip]=\"helpText\" matTooltipClass=\"white-tooltip\">\n        <svg width=\"16\" height=\"16\" viewBox=\"0 0 16 16\" fill=\"none\" xmlns=\"http://www.w3.org/2000/svg\">\n          <path fill-rule=\"evenodd\" clip-rule=\"evenodd\" d=\"M8.00009 0.615356C3.90779 0.615356 0.615479 3.90766 0.615479 7.99997C0.615479 12.0923 3.90779 15.3846 8.00009 15.3846C12.0924 15.3846 15.3847 12.0923 15.3847 7.99997C15.3847 3.90766 12.0924 0.615356 8.00009 0.615356ZM8.00012 13.5385C4.92319 13.5385 2.46165 11.0769 2.46165 8C2.46165 4.92307 4.92319 2.46153 8.00012 2.46153C11.077 2.46153 13.5386 4.92307 13.5386 8C13.5386 11.0769 11.077 13.5385 8.00012 13.5385ZM8.00027 4.33846C8.52335 4.33846 8.92335 4.73846 8.92335 5.26153C8.92335 5.78461 8.52335 6.18461 8.00027 6.18461C7.47719 6.18461 7.07719 5.78461 7.07719 5.26153C7.07719 4.73846 7.47719 4.33846 8.00027 4.33846ZM9.53859 10.8C9.53859 10.9538 9.41552 11.0769 9.2309 11.0769H6.76936C6.61552 11.0769 6.46167 10.9846 6.46167 10.8V10.1846C6.46167 10.0308 6.58475 9.84614 6.76936 9.84614C6.92321 9.84614 7.07706 9.75383 7.07706 9.56921V8.33844C7.07706 8.1846 6.95398 7.99998 6.76936 7.99998C6.61552 7.99998 6.46167 7.90767 6.46167 7.72306V7.10767C6.46167 6.95383 6.58475 6.76921 6.76936 6.76921H8.61552C8.76936 6.76921 8.92321 6.92306 8.92321 7.10767V9.56921C8.92321 9.72306 9.04629 9.84614 9.2309 9.84614C9.38475 9.84614 9.53859 9.99998 9.53859 10.1846V10.8Z\" fill=\"#747474\"/>\n        </svg>\n      </div>\n      <div *ngIf=\"label && type != 'checkbox' && required && showLabel && mode === 'edit'\" style=\"color: red;\">*</div>\n    </div>\n    <div *ngIf=\"type !== 'label' && type !== 'richtext' && type !== 'textarea'\" style=\"display: flex;\">\n      <div class=\"input-container\"\n        [ngStyle]=\"{ 'padding-left': mode === 'edit' ? '' : '0px' }\"\n        [style.backgroundColor]=\"(type === 'otp' || mode !== 'edit') ? (inputBgColor || '#f5f5f5') : from === 'nxtTable' ? '' : inputBgColor\"\n        [class.invalid]=\"control.invalid && control.touched\"\n        [style.border-radius]=\"mode !== 'edit' && from === 'nxtTable' ? 'none': ''\"\n        [style.padding]=\"(mode === 'edit' && from !== 'nxtTable') ? (type === 'checkbox' ? '10px 13px 10px 0px !important' : '' ) : type === 'checkbox' ? '10px 0px 9px 0px !important' : ''\"\n        [style.margin]=\"(margin && margin !== '') ? margin : (showLabel && label) ? from === 'nxtTable' ? '0px !important' : '' : (from === 'nxtTable' || from === 'normalDropDown') ? '0px !important' : from === 'nxtForm' ? '21px 0px 0px 0px' : '0px !important'\"\n        [style.border]=\"type === 'space' ? 'none' : mode === 'edit' ? (from === 'nxtTable' && !readOnly) ? '1px solid #d2d2d2' : inputBorder === 'none' ? ('1px solid ' + (inputBgColor || '#ffffff')) : ( (inputBorderSize || 1) + 'px solid ' + inputBorder)  : 'none'\"\n        style=\"position: relative; width: 100%;\"\n        [ngClass]=\"{\n          'checkbox-padding': type === 'checkbox' || type === 'otp',\n          'pad-nxt-0': from === 'nxtTable' && mode !== 'edit',\n          'pad-nxt-1': from === 'nxtTable' && mode === 'edit'\n        }\">\n        <img *ngIf=\"inputIconLeftSrc && mode === 'edit'\" [src]=\"inputIconLeftSrc\" alt=\"icon\" class=\"icon left-icon\"\n          [style.height]=\"svgHeight\" [style.width]=\"svgWidth\" />\n        <div *ngIf=\"mode === 'edit' && type === 'list'\">\n          <!-- Inline search icon SVG -->\n          <svg [attr.width]=\"from === 'nxtTable' ? 12 : 18\" [attr.height]=\"from === 'nxtTable' ? 12 : 18\" fill=\"none\" stroke=\"#434555\" stroke-opacity=\"0.65\" stroke-width=\"1.5\" xmlns=\"http://www.w3.org/2000/svg\" viewBox=\"0 0 18 18\">\n            <circle cx=\"8.25\" cy=\"8.25\" r=\"5.25\" />\n            <path d=\"M15 15L12.75 12.75\" stroke-linecap=\"round\" />\n          </svg>\n        </div>\n        <!-- SKS28FEB25 mobile number input -->\n        <div *ngIf=\"type === 'tel'\" class=\"phone-input-container\">\n          <div  class=\"country-selector\" style=\"padding-left: 10px;\"\n            (click)=\"toggleCountryDropdown()\">\n            <!-- <span class=\"flag\">{{ selectedCountry.flag }}</span> -->\n            <span class=\"dial-code\" [style.font-weight]=\"inputWeight || '400'\" [style.font-size]=\"inputValueSize || '12px'\">{{ selectedCountry.dial_code }}</span>\n            <svg class=\"arrow\" width=\"9\" height=\"6\" viewBox=\"0 0 9 6\" fill=\"none\" xmlns=\"http://www.w3.org/2000/svg\">\n              <path fill-rule=\"evenodd\" clip-rule=\"evenodd\"\n                d=\"M0.684136 0.767477C0.922999 0.5378 1.30282 0.545248 1.5325 0.784111L4.5 3.93431L7.4675 0.784111C7.69718 0.545248 8.077 0.5378 8.31587 0.767477C8.55473 0.997153 8.56218 1.37698 8.3325 1.61584L4.9325 5.21584C4.81938 5.33349 4.66321 5.39998 4.5 5.39998C4.33679 5.39998 4.18062 5.33349 4.0675 5.21584L0.667501 1.61584C0.437825 1.37698 0.445272 0.997153 0.684136 0.767477Z\"\n                fill=\"#626262\" />\n            </svg>\n          </div>\n          <div *ngIf=\"showCountryDropdown\" class=\"country-dropdown\">\n            <div class=\"search-box\">\n              <input type=\"text\" [readOnly]=\"mode !== 'edit'\" placeholder=\"Search country...\" [value]=\"countrySearch\"\n                (input)=\"filterCountries($event)\">\n            </div>\n            <div class=\"country-list\">\n              <div *ngFor=\"let country of filteredCountries\" class=\"country-item\" (click)=\"selectCountry(country)\">\n                <span class=\"flag\">{{ country.flag }}</span>\n                <span class=\"name\">{{ country.name }}</span>\n                <span class=\"dial-code\">{{ country.dial_code }}</span>\n              </div>\n            </div>\n          </div>\n        </div>\n        <!-- SKS12SEP25 currency code -->\n        <div *ngIf=\"mode === 'edit' && readOnly !== true && type === 'currency'\" [style.font-size]=\"inputValueSize || '12px'\" class=\"phone-input-container\">\n          {{currentCurrency.symbol}}\n        </div>\n        @if((type === 'currency' ? mode === 'edit' && readOnly === false : type !== 'datetime' && type !== 'date' && type !== 'time' && type !== 'month' && type !== 'space')){\n          <input *ngFor=\"let input of cachedInputList; let i = index\" #inputEl #inputRef [id]=\"inputId\"\n            [type]=\"isPasswordVisible ? 'text' : type === 'otp' || type === 'dropdown' || type === 'number' ? 'text' : type\"\n            [attr.placeholder]=\"type === 'otp' || mode !== 'edit' ? '' : (type === 'tel' ? removeDialCode(selectedCountry.placeholder) : placeholder)\"\n            [formControl]=\"type === 'otp' ? $any(input) : control\"\n            [style.backgroundColor]=\"(type === 'otp'|| mode !== 'edit') ? '#f5f5f5' : from === 'nxtTable' ? '' : inputBgColor\"\n            [style.color]=\"type === 'otp' || mode !== 'edit' ? '' : inputTextColor\"\n            [style.border]=\" (type === 'otp' || mode !== 'edit')  ? '' : from === 'nxtTable' ? type === 'checkbox' ? '1px solid gray !important' : 'none' : type === 'checkbox' ? ( inputBorderSize || 1 + 'px solid ' + inputBorder) : inputBorder\"\n            [style.height]=\"type === 'otp' ? '' : inputHeight\" [style.width]=\"type === 'otp' ? '100% !important' : type === 'checkbox' ? 'auto' : inputWidth || '100% !important'\"\n            [style.padding]=\"(padding && padding !== '') ? padding : from === 'nxtTable' ? '0px' : mode === 'edit' ? '10px 10px 10px 5px' : '10px 10px 10px 0px' \"\n            [value]=\"type === 'tel' ? rawInputVal : value\"\n            (input)=\"type === 'otp' ? handleInput() : onInputChange($event)\"\n            [checked]=\"type === 'checkbox' ? value : ''\"\n            [style.font-size]=\"type === 'otp' ? '' : inputValueSize || '12px'\" (focus)=\"type === 'otp' ? handleFocus($event) : null\"\n            [style.text-align]=\"(type === 'currency' && mode === 'edit') ? 'start' : textAlign || 'start'\"\n            [style.font-weight]=\"inputWeight || '400'\"\n            (blur)=\"type === 'otp' ? onTouched() : blurEmit()\"\n            (keypress)=\"type === 'otp' ? handleKeyPress($event, i) : type === 'number' ? allowNumberDecimal($event) : null\"\n            (keydown)=\"type === 'otp' ? handleKeyDown($event, i) : from === 'normalDropDown' ? $event.preventDefault() : type === 'number' ? allowNumberDecimal($event) : null\"\n            (paste)=\"type === 'otp' ? handlePaste($event, i) : null\" inputmode=\"type === 'otp' ? numeric : null\"\n            [attr.autocomplete]=\"type === 'otp' && i === 0 ? 'one-time-code' : 'off'\"\n            [attr.aria-expanded]=\"type === 'list' ? showSuggestion : 'off'\"\n            [attr.inputmode]=\"type === 'otp' ? 'numeric' : type === 'number' ? 'decimal' : null\" [attr.name]=\"type === 'otp' && i === 0 ? 'otp' : null\"\n            (focusin)=\"focusinEmit($event)\" [attr.aria-owns]=\"type === 'list' ? ariaOwns : 'off'\"\n            [attr.aria-haspopup]=\"type === 'list' ? ariaHasPopup : 'off'\" \n            [readonly]=\"from === 'normalDropDown'\" \n            [ngClass]= \"{\n              'is-edit':mode === 'edit',\n            }\"\n            [ngStyle]=\"{\n                '--placeholder-font': mode === 'edit' ? placeholderFont || labelFont : '',\n                '--placeholder-color': mode === 'edit' ? placeholderColor || '#9a9a9a' : '',\n                '--placeholder-size': mode === 'edit' ? placeholderSize || inputValueSize || '12px' : '',\n                '--placeholder-weight': mode === 'edit' ? placeholderWeight || inputWeight || '400' : ''\n              }\" (keydown.enter)=\"type === 'location' ? $event.preventDefault() : ''\"\n            autocorrect=\"type === 'location' ? 'off' : ''\" autocapitalize=\"type === 'location' ? 'off' : ''\"\n            spellcheck=\"type === 'location' ? 'off' : ''\"\n          />\n        }\n        @else if(type === 'time' || type === 'month' || type === 'datetime' || type === 'date') {\n            <div style=\"position: relative; width: 100%;\">\n              <input [id]=\"inputId\"\n                type=\"text\" \n                [formControl]=\"control\"\n                readonly\n                [attr.placeholder]=\"mode !== 'edit' ? '' : placeholder || ''\"\n                [ngClass]=\"'nxt-custom-input'\" \n                [value]=\"value | NxtDate : type : languageCode : dateFormatName\"\n                [style.backgroundColor]=\"mode !== 'edit' ? '#f5f5f5' : from === 'nxtTable' ? '' : inputBgColor\"\n                [style.color]=\"mode !== 'edit' ? '' : inputTextColor\" [style.border]=\"mode !== 'edit' ? 'none' : from === 'nxtTable' ? 'none' : inputBorder\"\n                [style.height]=\"inputHeight\"\n                [style.padding]=\"(padding && padding !== '') ? padding : from === 'nxtTable' ? '0px' :  mode === 'edit' ? '10px 10px 10px 5px' : '10px 10px 10px 0px' \"\n                [style.font-size]=\"inputValueSize || '12px'\" (blur)=\" blurEmit()\" (focusin)=\"focusinEmit($event)\"\n                [style.text-align]=\"textAlign || 'start'\"\n                [style.font-weight]=\"inputWeight || '400'\"\n                (focus)=\"onHijriInputClick(); $event.stopPropagation()\"\n                (click)=\"onHijriInputClick();\"\n                [attr.autocomplete]=\"'off'\"\n                [attr.readonly]=\"'true'\"\n                [readonly]=\"'true'\" \n                [disabled]=\"mode === 'edit' ? readOnly === true : true\"\n                [class]=\"'nxt-' + (question.nxtTableId || question.id)\"\n                [ngClass]= \"{\n                  'is-edit':mode === 'edit',\n                }\"\n                [ngStyle]=\"{\n                  '--placeholder-font': mode === 'edit' ? placeholderFont || labelFont : '',\n                  '--placeholder-color': mode === 'edit' ? placeholderColor || '#9a9a9a' : '',\n                  '--placeholder-size': mode === 'edit' ? placeholderSize || inputValueSize || '12px' : '',\n                  '--placeholder-weight': mode === 'edit' ? placeholderWeight || inputWeight || '400' : ''\n                }\" style=\"\n                    width: 100% !important;\n                    padding: 10px;\n                    padding-left: 5px;\n                    border-radius: 5px;\n                    border: none !important;\n                    font-size: 14px;\" \n              />\n              <!-- SKS14AUG25 Hijri Datepicker Popup -->\n              <div *ngIf=\"showHijriPicker\" class=\"hijri-popup\" [ngClass]=\"{'rtl-class': direction === 'rtl'}\" [class]=\"'nxt-' + (question.nxtTableId || question.id)\">\n                <app-nxt-datepicker\n                  [type]=\"type\"\n                  [value]=\"value\"\n                  [min]=\"minDate\"\n                  [max]=\"maxDate\"\n                  [languageCode]=\"languageCode\"\n                  (dateChange)=\"onInputChange($event);\"\n                  >\n                </app-nxt-datepicker>\n              </div>\n            </div>\n          }\n          <div *ngIf=\"(type === 'currency' && (mode !== 'edit' || readOnly === true))\"\n            [style.backgroundColor]=\"from === 'nxtTable' ? '' : inputBgColor\"\n            [style.color]=\"inputTextColor\"\n            [style.border]=\"from === 'nxtTable' ? 'none' : inputBorder\"\n            [style.height]=\"inputHeight\" \n            [style.width]=\"inputWidth || '100% !important'\"\n            [style.padding]=\"(padding && padding !== '') ? padding : from === 'nxtTable' ? '0px' : mode === 'edit' ? '10px 10px 10px 5px' : '10px 10px 10px 0px' \"\n            [style.font-size]=\"inputValueSize || '12px'\"\n            [style.text-align]=\"textAlign || 'start'\"\n            [style.font-weight]=\"inputWeight || '400'\"\n          >\n          @if(question?.subText?.isAmountInWords){\n            {{value | amountInWords }}\n          } @else {\n            {{value | currency : currentCurrency.code : currentCurrency.symbol }}\n          }\n        </div>\n        <!-- SKS7AUG25 api call Dotted Loader -->\n        <div *ngIf=\"mode === 'edit' && isLoading\" class=\"dotted-loader input-icons\" aria-label=\"Loading\" role=\"status\">\n          <span *ngFor=\"let dot of [].constructor(6); let i = index\" class=\"dot\" [style.--i]=\"i\"></span>\n        </div>\n        <div *ngIf=\"mode === 'edit' && (type === 'datetime' || type === 'date' || type === 'month' || type === 'time')\" (click)=\"openDatePicker(type);   $event.stopPropagation()\" class=\"input-icons\"\n           style=\"cursor: pointer;\">\n          <svg xmlns=\"http://www.w3.org/2000/svg\" [attr.width]=\"from === 'nxtTable' ? 12 : 18\" [attr.height]=\"from === 'nxtTable' ? 12 : 18\" viewBox=\"0 0 18 18\" fill=\"none\">\n            <path d=\"M2.32031 7.05285H15.6883\" stroke=\"#B0ADAB\" stroke-width=\"1.5\" stroke-linecap=\"round\" stroke-linejoin=\"round\"/>\n            <path d=\"M12.3322 9.98254H12.3392\" stroke=\"#B0ADAB\" stroke-width=\"1.5\" stroke-linecap=\"round\" stroke-linejoin=\"round\"/>\n            <path d=\"M9.00408 9.98254H9.01103\" stroke=\"#B0ADAB\" stroke-width=\"1.5\" stroke-linecap=\"round\" stroke-linejoin=\"round\"/>\n            <path d=\"M5.66815 9.98254H5.67509\" stroke=\"#B0ADAB\" stroke-width=\"1.5\" stroke-linecap=\"round\" stroke-linejoin=\"round\"/>\n            <path d=\"M12.3322 12.8976H12.3392\" stroke=\"#B0ADAB\" stroke-width=\"1.5\" stroke-linecap=\"round\" stroke-linejoin=\"round\"/>\n            <path d=\"M9.00408 12.8976H9.01103\" stroke=\"#B0ADAB\" stroke-width=\"1.5\" stroke-linecap=\"round\" stroke-linejoin=\"round\"/>\n            <path d=\"M5.66815 12.8976H5.67509\" stroke=\"#B0ADAB\" stroke-width=\"1.5\" stroke-linecap=\"round\" stroke-linejoin=\"round\"/>\n            <path d=\"M12.0329 1.5V3.96809\" stroke=\"#B0ADAB\" stroke-width=\"1.5\" stroke-linecap=\"round\" stroke-linejoin=\"round\"/>\n            <path d=\"M5.97435 1.5V3.96809\" stroke=\"#B0ADAB\" stroke-width=\"1.5\" stroke-linecap=\"round\" stroke-linejoin=\"round\"/>\n            <path fill-rule=\"evenodd\" clip-rule=\"evenodd\" d=\"M12.1787 2.68457H5.82822C3.6257 2.68457 2.25 3.91152 2.25 6.16684V12.9541C2.25 15.2449 3.6257 16.5002 5.82822 16.5002H12.1718C14.3812 16.5002 15.75 15.2661 15.75 13.0108V6.16684C15.7569 3.91152 14.3882 2.68457 12.1787 2.68457Z\" stroke=\"#B0ADAB\" stroke-width=\"1.5\" stroke-linecap=\"round\" stroke-linejoin=\"round\"/>\n          </svg>\n        </div>\n        <div *ngIf=\"mode === 'edit' && !readOnly && type === 'location' \" class=\"input-icons\">\n          <svg *ngIf=\"!isLoading\" (click)=\"openMap()\" (keydown.enter)=\"openMap()\" xmlns=\"http://www.w3.org/2000/svg\" width=\"16\" height=\"16\" viewBox=\"0 0 16 16\" fill=\"none\">\n            <rect x=\"0.5\" y=\"0.5\" [attr.width]=\"from === 'nxtTable' ? 12 : 15\" [attr.height]=\"from === 'nxtTable' ? 12 : 15\" stroke=\"white\"/>\n            <path d=\"M7.99992 8.95321C9.14867 8.95321 10.0799 8.02197 10.0799 6.87321C10.0799 5.72446 9.14867 4.79321 7.99992 4.79321C6.85117 4.79321 5.91992 5.72446 5.91992 6.87321C5.91992 8.02197 6.85117 8.95321 7.99992 8.95321Z\" stroke=\"#B1ADAB\" stroke-width=\"1.5\"/>\n            <path d=\"M2.41379 5.65992C3.72712 -0.113413 12.2805 -0.106746 13.5871 5.66659C14.3538 9.05325 12.2471 11.9199 10.4005 13.6933C9.06046 14.9866 6.94046 14.9866 5.59379 13.6933C3.75379 11.9199 1.64712 9.04659 2.41379 5.65992Z\" stroke=\"#B1ADAB\" stroke-width=\"1.5\"/>\n          </svg>        \n        </div>\n        <div *ngIf=\"mode === 'edit' && type === 'list'\" class=\"input-icons\">\n          <svg *ngIf=\"!isLoading\" (click)=\"removeValue()\" (keydown.enter)=\"removeValue()\" style=\"cursor: pointer;\" [attr.width]=\"from === 'nxtTable' ? 12 : 16\" [attr.height]=\"from === 'nxtTable' ? 12 : 16\" viewBox=\"0 0 0.48 0.48\" fill=\"none\" xmlns=\"http://www.w3.org/2000/svg\"><path d=\"M0.03 0.075a0.015 0.015 0 0 0 0 0.03zm0.42 0.03a0.015 0.015 0 0 0 0 -0.03zm-0.42 0h0.42v-0.03h-0.42z\" fill=\"#71717A\"/><path d=\"M0.195 0.03V0.015zM0.165 0.06H0.15zM0.15 0.09a0.015 0.015 0 0 0 0.03 0zm0.15 0a0.015 0.015 0 0 0 0.03 0zm0.015 -0.03h0.015zM0.285 0.015h-0.09v0.03h0.09zm-0.09 0a0.045 0.045 0 0 0 -0.032 0.013l0.021 0.021a0.015 0.015 0 0 1 0.011 -0.004zm-0.032 0.013A0.045 0.045 0 0 0 0.15 0.06H0.18a0.015 0.015 0 0 1 0.004 -0.011zM0.15 0.06v0.03H0.18V0.06zm0.18 0.03V0.06H0.3v0.03zm0 -0.03a0.045 0.045 0 0 0 -0.013 -0.032l-0.021 0.021c0.003 0.003 0.004 0.007 0.004 0.011zm-0.013 -0.032A0.045 0.045 0 0 0 0.285 0.015v0.03a0.015 0.015 0 0 1 0.011 0.004z\" fill=\"#71717A\"/><path d=\"M0.18 0.345a0.015 0.015 0 0 0 0.03 0zm0.03 -0.15a0.015 0.015 0 0 0 -0.03 0zm0 0.15v-0.15H0.18v0.15z\" fill=\"#71717A\"/><path d=\"M0.27 0.345a0.015 0.015 0 0 0 0.03 0zm0.03 -0.15a0.015 0.015 0 0 0 -0.03 0zm0 0.15v-0.15h-0.03v0.15z\" fill=\"#71717A\"/><path d=\"m0.377 0.422 -0.015 -0.001zM0.347 0.45v-0.015zm-0.215 0v-0.015zm-0.03 -0.028 0.015 -0.001zM0.09 0.089a0.015 0.015 0 0 0 -0.03 0.002zm0.33 0.002a0.015 0.015 0 1 0 -0.03 -0.002zm-0.058 0.33a0.015 0.015 0 0 1 -0.005 0.01l0.02 0.022a0.045 0.045 0 0 0 0.014 -0.029zm-0.005 0.01a0.015 0.015 0 0 1 -0.01 0.004v0.03a0.045 0.045 0 0 0 0.03 -0.012zm-0.01 0.004H0.133v0.03H0.347zm-0.215 0a0.015 0.015 0 0 1 -0.01 -0.004l-0.02 0.022c0.008 0.008 0.019 0.012 0.03 0.012zm-0.01 -0.004a0.015 0.015 0 0 1 -0.005 -0.01l-0.03 0.002a0.045 0.045 0 0 0 0.014 0.029zm-0.005 -0.01L0.09 0.089l-0.03 0.002 0.028 0.332zm0.272 -0.332 -0.028 0.332 0.03 0.002 0.028 -0.332z\" fill=\"#71717A\"/></svg>      \n        </div>\n        <label class=\"nxt-checkboxLab\" *ngIf=\"label && type === 'checkbox' && showLabel\" [style.font-weight]=\"labelWeight\"\n          [style.font-size]=\"labelSize\" [style.color]=\"inputTextColor || labelColor || '#212529'\"\n          [style.justify-content]=\"textAlign || 'start'\"\n          style=\"margin-bottom: 0; padding-right: 10px; width: 100% !important;\"> {{ label }}\n          <div *ngIf=\"label && type === 'checkbox' && required && showLabel\" style=\"color: red;\">*</div>\n        </label>     \n        <!-- Always Show Dropdown Icon -->\n        <div *ngIf=\"mode === 'edit' && type === 'dropdown'\" class=\"input-icons\">\n          <svg (mousedown)=\"toggle($event); $event.preventDefault()\" xmlns=\"http://www.w3.org/2000/svg\" [attr.width]=\"from === 'nxtTable' ? 12 : 16\" [attr.height]=\"from === 'nxtTable' ? 12 : 16\" viewBox=\"0 0 12 12\" fill=\"none\">\n            <path d=\"M4.5 11H7.5C10 11 11 10 11 7.5V4.5C11 2 10 1 7.5 1H4.5C2 1 1 2 1 4.5V7.5C1 10 2 11 4.5 11Z\" stroke=\"#B0ADAB\" stroke-width=\"1\" stroke-linecap=\"round\" stroke-linejoin=\"round\" />\n            <path d=\"M4.23499 5.32L6 7.08L7.765 5.32\" stroke=\"#B0ADAB\" stroke-width=\"1\" stroke-linecap=\"round\" stroke-linejoin=\"round\" />\n          </svg>\n        </div>\n\n        <img *ngIf=\"mode === 'edit' && inputIconRightSrc\" [src]=\"inputIconRightSrc\" class=\"icon right-icon\"\n          [style.height]=\"svgHeight\" [style.width]=\"svgWidth\">\n        <img *ngIf=\"mode === 'edit' && type === 'password'\" class=\"toggle-icon\" (click)=\"togglePasswordVisibility()\"\n          [src]=\"!isPasswordVisible ? '/assets/images/icons/general/Hide-Password.svg' : '/assets/images/icons/general/Show-Password.svg'\" />\n       <div *ngIf=\"mode !== 'edit' && !readOnly && from !== 'nxtTable' && !onlyView && type !== 'space'\" class=\"input-icons\">\n        <svg class=\"edit-icon\" \n          (click)=\"viewEditClick(question)\" width=\"13\" height=\"14\" viewBox=\"0 0 13 14\" fill=\"none\"\n          xmlns=\"http://www.w3.org/2000/svg\">\n          <path fill-rule=\"evenodd\" clip-rule=\"evenodd\"\n            d=\"M1.99987 9.0017L4.39602 11.3979C4.50371 11.5055 4.66525 11.5055 4.77294 11.3979L10.7499 5.39401C10.8576 5.28631 10.8576 5.12477 10.7499 5.01708L8.38064 2.64785C8.27294 2.54016 8.11141 2.54016 8.00371 2.64785L1.99987 8.6517C1.89217 8.75939 1.89217 8.92093 1.99987 9.0017ZM9.1614 1.54401C9.05371 1.6517 9.05371 1.81324 9.1614 1.92093L11.5306 4.29016C11.6383 4.39785 11.7999 4.39785 11.9076 4.29016L12.5806 3.61708C13.0114 3.21324 13.0114 2.56708 12.5806 2.13631L11.3153 0.870928C10.8845 0.440159 10.2114 0.440159 9.78063 0.870928L9.1614 1.54401ZM0.00755862 12.9863C-0.0462875 13.2555 0.19602 13.4979 0.465251 13.444L3.39987 12.744C3.50756 12.7171 3.58833 12.6632 3.64217 12.6094L3.69602 12.5555C3.74987 12.5017 3.77679 12.3132 3.6691 12.2055L1.24602 9.78247C1.13833 9.67478 0.949866 9.7017 0.89602 9.75554L0.842174 9.80939C0.761405 9.89016 0.734482 9.97093 0.707559 10.0517L0.00755862 12.9863Z\"\n            fill=\"#B0ADAB\" />\n        </svg>\n       </div>\n        <!-- SKS14JUN25 Show save and cancel icons only when the input value is edited -->\n        <div *ngIf=\"(apiMeta?.singleFieldDisable === undefined || !apiMeta?.singleFieldDisable) && viewEdit ? (!apiMeta?.singleFieldDisable && type !== 'space') : (viewEdit && type !== 'space')\" class=\"input-icons\">\n          <svg (click)=\"saveChanges()\" width=\"16\" height=\"16\" viewBox=\"0 0 12 12\" fill=\"none\"\n            xmlns=\"http://www.w3.org/2000/svg\">\n            <path\n              d=\"M5.9502 0.5C8.96006 0.500106 11.4004 2.94031 11.4004 5.9502C11.4003 8.95999 8.95999 11.4003 5.9502 11.4004C2.94031 11.4004 0.500106 8.96006 0.5 5.9502C0.5 2.94024 2.94024 0.5 5.9502 0.5Z\"\n              stroke=\"#B0ADAB\" />\n            <path\n              d=\"M8.88111 3.84583C8.83269 3.7972 8.77513 3.7586 8.71176 3.73227C8.64838 3.70594 8.58043 3.69238 8.5118 3.69238C8.44317 3.69238 8.37521 3.70594 8.31184 3.73227C8.24846 3.7586 8.19091 3.7972 8.14249 3.84583L4.8269 7.16347L3.35253 5.6891C3.30403 5.6406 3.24646 5.60213 3.18309 5.57588C3.11972 5.54964 3.05181 5.53613 2.98322 5.53613C2.91463 5.53613 2.84672 5.54964 2.78335 5.57588C2.71999 5.60213 2.66241 5.6406 2.61391 5.6891C2.56541 5.7376 2.52694 5.79518 2.50069 5.85854C2.47445 5.92191 2.46094 5.98982 2.46094 6.05841C2.46094 6.127 2.47445 6.19491 2.50069 6.25828C2.52694 6.32165 2.56541 6.37922 2.61391 6.42772L4.45677 8.27058C4.50519 8.31922 4.56274 8.35781 4.62612 8.38414C4.6895 8.41047 4.75745 8.42403 4.82608 8.42403C4.89471 8.42403 4.96266 8.41047 5.02604 8.38414C5.08942 8.35781 5.14697 8.31922 5.19539 8.27058L8.88111 4.58445C8.92974 4.53603 8.96834 4.47848 8.99467 4.4151C9.021 4.35173 9.03456 4.28377 9.03456 4.21514C9.03456 4.14651 9.021 4.07856 8.99467 4.01518C8.96834 3.9518 8.92974 3.89425 8.88111 3.84583Z\"\n              fill=\"#B0ADAB\" />\n          </svg>\n        </div>\n        <div *ngIf=\"viewEdit && type !== 'space'\" class=\"input-icons\">\n          <svg (click)=\"discardChanges()\" width=\"16\" height=\"16\" viewBox=\"0 0 12 12\" fill=\"none\"\n            xmlns=\"http://www.w3.org/2000/svg\">\n            <path\n              d=\"M7.05555 4.00883L5.94 5.12438L4.82445 4.00883C4.57861 3.76299 4.18191 3.76299 3.93607 4.00883C3.69023 4.25467 3.69023 4.65137 3.93607 4.89721L5.05162 6.01276L3.93607 7.12831C3.69023 7.37415 3.69023 7.77085 3.93607 8.01669C4.18191 8.26253 4.57861 8.26253 4.82445 8.01669L5.94 6.90114L7.05555 8.01669C7.30139 8.26253 7.69809 8.26253 7.94393 8.01669C8.18977 7.77085 8.18977 7.37415 7.94393 7.12831L6.82838 6.01276L7.94393 4.89721C8.18977 4.65137 8.18977 4.25467 7.94393 4.00883C7.69809 3.77285 7.30021 3.77285 7.05555 4.00883ZM5.94 0.0820312C2.70017 0.0820312 0.0808594 2.70134 0.0808594 5.94118C0.0808594 9.18101 2.70017 11.8003 5.94 11.8003C9.17983 11.8003 11.7991 9.18101 11.7991 5.94118C11.7991 2.70134 9.17983 0.0820312 5.94 0.0820312ZM5.94 10.6367C3.35426 10.6367 1.24422 8.52667 1.24422 5.94118C1.24422 3.35553 3.35426 1.24549 5.94 1.24549C8.52558 1.24549 10.6356 3.35553 10.6356 5.94118C10.6356 8.52667 8.52558 10.6367 5.94 10.6367Z\"\n              fill=\"#B0ADAB\" />\n          </svg>\n        </div>\n      </div>\n    </div>\n    <div *ngIf=\"type !== 'label' && type !== 'checkbox' && (type === 'richtext' || type === 'textarea')\" style=\"display: flex;\">\n      <div class=\"input-container\"\n        [ngStyle]=\"{ 'padding-left': mode === 'edit' ? '' : '0px' }\"\n        [style.margin]=\"(margin && margin !== '') ? margin : showLabel && label ? '' : from === 'nxtTable' || from === 'normalDropDown' ? '' :  from === 'nxtForm' ? '21px 0px 0px 0px' : '0px !important'\"\n        [style.border-radius]=\"mode !== 'edit' && from === 'nxtTable' ? 'none': ''\"\n        [style.backgroundColor]=\"mode === 'edit' ? from === 'nxtTable' ? '' : inputBgColor : (inputBgColor || '#f5f5f5')\"\n        [class.invalid]=\"control.invalid && control.touched\"\n        [style.border]=\"mode === 'edit' ? from === 'nxtTable' ? '1px solid #d2d2d2' : inputBorder === 'none' ? ('1px solid ' + inputBgColor) : (inputBorderSize || 1 + 'px solid ' + inputBorder) : 'none'\"\n        [ngClass]=\"{\n          'pad-nxt-0': from === 'nxtTable' && mode !== 'edit',\n          'pad-nxt-1': from === 'nxtTable' && mode === 'edit',\n          'pad-rich-0': mode === 'edit' && type === 'richtext'\n        }\">\n        <!-- SKS14JUN25  Dynamically load Quill editor toolbar -->\n        <quill-editor *ngIf=\"mode === 'edit' && type === 'richtext'\" [(ngModel)]=\"value\" (ngModelChange)=\"onInputChange($event)\" [placeholder]=\"placeholder || ''\"\n          [readOnly]=\"mode !== 'edit' || readOnly\"\n          (focusout)=\"onEditorFocusOut()\" [class.error]=\"control.invalid && (control.touched || control.dirty)\"\n          [modules]=\"getQuillModules(question.id)\"\n          [style.padding]=\"'0px'\"\n          style=\"width: 100%;\n          border-radius: 5px;\n          border: none;\n          font-size: 16px;\">\n        </quill-editor>\n        <!-- View mode -->\n        <div  *ngIf=\"mode !== 'edit' && type === 'richtext'\" class=\"quill-view-content ql-snow\"\n          style=\"width: 98.5%;\n            border-radius: 5px;\n            border: none;\n            padding: unset;\n            font-size: 16px;\n            min-height: 38px;\">\n          <div class=\"ql-editor\" [innerHTML]=\"value\"\n          [style.padding]=\"(padding && padding !== '') ? padding : (from === 'nxtTable' ? '0px' : (mode === 'view' ? '1px 10px 0px 0px' : '1px 10px 0px 5px' ))\"\n          [style.text-align]=\"direction === 'rtl' ? 'right' : '' \"\n          [attr.dir]='direction' style=\"font-size: 12px;\"\n          ></div>\n        </div>\n        <textarea *ngIf=\"type === 'textarea'\" [id]=\"inputId\" [rows]=\"from === 'nxtTable' ? 1 : rows\"\n          [attr.placeholder]=\"mode !== 'edit' ? '' : placeholder || ''\" [ngClass]=\"'custom-input'\"\n          [formControl]=\"control\"\n          [style.backgroundColor]=\"mode !== 'edit' ? '#f5f5f5' : from === 'nxtTable' ? '' : inputBgColor\"\n          [style.color]=\"mode !== 'edit' ? '' : inputTextColor\" [style.border]=\"mode !== 'edit' ? 'none' : from === 'nxtTable' ? '1px solid #d2d2d2' : inputBorder\"\n          [style.height]=\"inputHeight\" [value]=\"value\" (input)=\" onInputChange($event)\"\n          [style.font-size]=\"inputValueSize || '12px'\" (blur)=\" blurEmit()\" (focusin)=\"focusinEmit($event)\"\n          [style.text-align]=\"textAlign || 'start'\"\n          [style.font-weight]=\"inputWeight || '400'\"\n          [readOnly]=\"mode !== 'edit' || readOnly\" [ngStyle]=\"{\n            '--placeholder-font': mode === 'edit' ? placeholderFont || labelFont : '',\n            '--placeholder-color': mode === 'edit' ? placeholderColor || '#9a9a9a' : '',\n            '--placeholder-size': mode === 'edit' ? placeholderSize || inputValueSize || '12px' : '',\n            '--placeholder-weight': mode === 'edit' ? placeholderWeight || inputWeight || '400' : ''\n          }\" \n          [style.padding]=\"(padding && padding !== '') ? padding : from === 'nxtTable' ? '0px' : (mode === 'view' ? '1px 10px 0px 0px' : '1px 10px 0px 5px' )\"\n          style=\"\n              width: 100%;\n              border-radius: 5px;\n              border: none !important;\n              font-size: 14px;\"\n          >\n          </textarea>\n        <svg *ngIf=\"mode !== 'edit' && !viewEdit && from !== 'nxtTable' && (type === 'richtext' || type === 'textarea') && !readOnly && !onlyView \"\n          class=\"edit-icon\" (click)=\"viewEditClick(question)\" width=\"13\" height=\"14\" viewBox=\"0 0 13 14\" fill=\"none\"\n          xmlns=\"http://www.w3.org/2000/svg\">\n          <path fill-rule=\"evenodd\" clip-rule=\"evenodd\"\n            d=\"M1.99987 9.0017L4.39602 11.3979C4.50371 11.5055 4.66525 11.5055 4.77294 11.3979L10.7499 5.39401C10.8576 5.28631 10.8576 5.12477 10.7499 5.01708L8.38064 2.64785C8.27294 2.54016 8.11141 2.54016 8.00371 2.64785L1.99987 8.6517C1.89217 8.75939 1.89217 8.92093 1.99987 9.0017ZM9.1614 1.54401C9.05371 1.6517 9.05371 1.81324 9.1614 1.92093L11.5306 4.29016C11.6383 4.39785 11.7999 4.39785 11.9076 4.29016L12.5806 3.61708C13.0114 3.21324 13.0114 2.56708 12.5806 2.13631L11.3153 0.870928C10.8845 0.440159 10.2114 0.440159 9.78063 0.870928L9.1614 1.54401ZM0.00755862 12.9863C-0.0462875 13.2555 0.19602 13.4979 0.465251 13.444L3.39987 12.744C3.50756 12.7171 3.58833 12.6632 3.64217 12.6094L3.69602 12.5555C3.74987 12.5017 3.77679 12.3132 3.6691 12.2055L1.24602 9.78247C1.13833 9.67478 0.949866 9.7017 0.89602 9.75554L0.842174 9.80939C0.761405 9.89016 0.734482 9.97093 0.707559 10.0517L0.00755862 12.9863Z\"\n            fill=\"#B0ADAB\" />\n        </svg>\n        <!-- SKS14JUN25 Show save and cancel icons only when the input value is edited -->\n        <div *ngIf=\"(apiMeta?.singleFieldDisable === undefined || !apiMeta?.singleFieldDisable) && (viewEdit ? !apiMeta?.singleFieldDisable : viewEdit) && type === 'textarea'\" class=\"input-icons\">\n          <svg (click)=\"saveChanges()\" width=\"16\" height=\"16\" viewBox=\"0 0 12 12\" fill=\"none\"\n            xmlns=\"http://www.w3.org/2000/svg\">\n            <path\n              d=\"M5.9502 0.5C8.96006 0.500106 11.4004 2.94031 11.4004 5.9502C11.4003 8.95999 8.95999 11.4003 5.9502 11.4004C2.94031 11.4004 0.500106 8.96006 0.5 5.9502C0.5 2.94024 2.94024 0.5 5.9502 0.5Z\"\n              stroke=\"#B0ADAB\" />\n            <path\n              d=\"M8.88111 3.84583C8.83269 3.7972 8.77513 3.7586 8.71176 3.73227C8.64838 3.70594 8.58043 3.69238 8.5118 3.69238C8.44317 3.69238 8.37521 3.70594 8.31184 3.73227C8.24846 3.7586 8.19091 3.7972 8.14249 3.84583L4.8269 7.16347L3.35253 5.6891C3.30403 5.6406 3.24646 5.60213 3.18309 5.57588C3.11972 5.54964 3.05181 5.53613 2.98322 5.53613C2.91463 5.53613 2.84672 5.54964 2.78335 5.57588C2.71999 5.60213 2.66241 5.6406 2.61391 5.6891C2.56541 5.7376 2.52694 5.79518 2.50069 5.85854C2.47445 5.92191 2.46094 5.98982 2.46094 6.05841C2.46094 6.127 2.47445 6.19491 2.50069 6.25828C2.52694 6.32165 2.56541 6.37922 2.61391 6.42772L4.45677 8.27058C4.50519 8.31922 4.56274 8.35781 4.62612 8.38414C4.6895 8.41047 4.75745 8.42403 4.82608 8.42403C4.89471 8.42403 4.96266 8.41047 5.02604 8.38414C5.08942 8.35781 5.14697 8.31922 5.19539 8.27058L8.88111 4.58445C8.92974 4.53603 8.96834 4.47848 8.99467 4.4151C9.021 4.35173 9.03456 4.28377 9.03456 4.21514C9.03456 4.14651 9.021 4.07856 8.99467 4.01518C8.96834 3.9518 8.92974 3.89425 8.88111 3.84583Z\"\n              fill=\"#B0ADAB\" />\n          </svg>\n        </div>\n        <div *ngIf=\"viewEdit && type === 'textarea'\" class=\"input-icons\">\n          <svg (click)=\"discardChanges()\" width=\"16\" height=\"16\" viewBox=\"0 0 12 12\" fill=\"none\"\n            xmlns=\"http://www.w3.org/2000/svg\">\n            <path\n              d=\"M7.05555 4.00883L5.94 5.12438L4.82445 4.00883C4.57861 3.76299 4.18191 3.76299 3.93607 4.00883C3.69023 4.25467 3.69023 4.65137 3.93607 4.89721L5.05162 6.01276L3.93607 7.12831C3.69023 7.37415 3.69023 7.77085 3.93607 8.01669C4.18191 8.26253 4.57861 8.26253 4.82445 8.01669L5.94 6.90114L7.05555 8.01669C7.30139 8.26253 7.69809 8.26253 7.94393 8.01669C8.18977 7.77085 8.18977 7.37415 7.94393 7.12831L6.82838 6.01276L7.94393 4.89721C8.18977 4.65137 8.18977 4.25467 7.94393 4.00883C7.69809 3.77285 7.30021 3.77285 7.05555 4.00883ZM5.94 0.0820312C2.70017 0.0820312 0.0808594 2.70134 0.0808594 5.94118C0.0808594 9.18101 2.70017 11.8003 5.94 11.8003C9.17983 11.8003 11.7991 9.18101 11.7991 5.94118C11.7991 2.70134 9.17983 0.0820312 5.94 0.0820312ZM5.94 10.6367C3.35426 10.6367 1.24422 8.52667 1.24422 5.94118C1.24422 3.35553 3.35426 1.24549 5.94 1.24549C8.52558 1.24549 10.6356 3.35553 10.6356 5.94118C10.6356 8.52667 8.52558 10.6367 5.94 10.6367Z\"\n              fill=\"#B0ADAB\" />\n          </svg>\n        </div>\n      </div>\n    </div>\n    <!-- SKS23APR25 Use control.invalid to show error on submit click -->\n    <div *ngIf=\"type != 'checkbox' && type !== 'label' && control.invalid && (control.touched || control.dirty)\" style=\"height: 20px;\">\n      <div class=\"nxt-error-message\">\n        {{ getErrorMessage() }}\n      </div>\n    </div>\n  </div>\n</div>\n<!-- SKS18SEP25 google map popup -->\n<div class=\"map-overlay\" *ngIf=\"showModal\">\n  <div class=\"map-modal\">\n    <div class=\"map-modal-content\">\n      <div class=\"map-modal-header\">\n        <!-- HA 19DEC23 For translation -->\n        <h4>{{ 'pickYourLocation' | nxtCustomTranslate : 'pickYourLocation' }}</h4>\n        <button class=\"close-button\" (click)=\"closeModal()\">X</button>\n      </div>\n      <google-map [zoom]=\"10\" [center]=\"markerPosition\" (mapClick)=\"onMapClick($event)\">\n        <map-marker\n          [position]=\"markerPosition\"\n          [options]=\"markerOptions\"\n          (mapDragend)=\"onMarkerDragEnd($event)\">\n        </map-marker>\n      </google-map>\n    </div>\n  </div>\n</div>","import { Component, OnInit, Input, Output, EventEmitter, Optional, HostListener, ElementRef, ViewChild, SimpleChanges, ChangeDetectorRef } from '@angular/core';\nimport { Subscription } from 'rxjs';\nimport { ChangeWrapper } from '../../model/changeWrapper';\n// HA 19DEC23 imported translation service\n// VD 23JAN24 used service file for callout\nimport { CommonModule } from '@angular/common';\nimport { FormsModule } from '@angular/forms';\nimport { NxtInput } from '../nxt-input/nxt-input.component';\nimport { ChangeService } from '../../services/change/change.service';\nimport { DataService } from '../../services/data/data.service';\nimport { NxtCustomTranslatePipe } from '../../pipe/custom-translate.pipe';\nimport { TranslationService } from '../../services/translation/translation.service';\nimport { StorageService } from '../../services/storage/storage.service';\nimport { CountryService } from '../../services/country/country.service';\n\n@Component({\n  selector: 'nxt-dropdown',\n  standalone: true,\n  imports: [\n    CommonModule, FormsModule, NxtInput, NxtCustomTranslatePipe\n  ],\n  templateUrl: './nxt-dropdown.component.html',\n  styleUrls: ['./nxt-dropdown.component.css']\n})\nexport class nxtDropdown implements OnInit {\n  @Input() options: any[] = [];\n  @Input() placeholder: string;\n  @Input() apiMeta: any;\n  @Input() selectedValue: string;\n  @Input() progressBar: boolean;\n  @Input() readOnly: boolean = false; // VD 12Jun24 - readonly change\n  @Input() error: any;\n  @Input() fromShengel: boolean = false;\n  @Input() question: any;\n  @Input() mode: 'view' | 'edit' | 'print' = 'edit'; // SKS11JUN25 New mode input\n  @Input() from: any\n  @Input() padding: any;\n  @Input() onlyView: boolean = false;\n  @Input() labelFont: any;\n  @Input() label: any;\n  @Input() labelColor: any;\n  @Input() inputTextColor: any;\n  @Input() labelSize: any;\n  @Input() inputValueSize: any;\n  @Input() labelWeight: any;\n  @Input() inputWeight: any;\n  @Input() showLabel: boolean = true\n  @Input() inputBorder: any = '#ccc'\n  @Input() inputBgColor: any\n  @Input() inputIconLeftSrc: any\n  \n\n  @Output() valueChange: EventEmitter<any> = new EventEmitter<any>();\n\n  @ViewChild('dropdownWrapper') dropdownWrapper: ElementRef;\n  constructor( private countryService: CountryService, private translationService: TranslationService, private changeService: ChangeService, private dataService: DataService, private storageService: StorageService, private cdr: ChangeDetectorRef ) { \n  }\n\n  subscription: Subscription;\n  showOptions = false;\n  selectedOption: any ={}\n  isLoading = false;\n  noDataFound = false;\n  searchText: string = '';\n  filteredOptions: any[] = [];\n\n\n  ngOnInit(): void {\n    let sourceId = this.apiMeta?.sourceQuestionId;\n    if (sourceId && this.apiMeta?.variable || this.apiMeta?.valueField) {\n      // Subscribe for the changes\n      this.subscription = this.changeService.changeAnnounced$.subscribe(\n        (changeValue) => {\n          if (changeValue != undefined) {\n            if (changeValue.fromQuestionId && changeValue.valueObj !== undefined && ( Array.isArray(this.apiMeta?.sourceQuestionId)? this.apiMeta?.sourceQuestionId.includes(changeValue.fromQuestionId) : changeValue.fromQuestionId === this.apiMeta?.sourceQuestionId)) {\n              //  this.selectedValue = changeValue.valueObj[this.apiMeta.valueField];\n              //  let value ={};\n              //  value['name'] = this.selectedValue;\n              let apiResponseVal = this.storageService.getApiResponseValue(changeValue.fromQuestionId)\n              let responses;\n              if (this.apiMeta.variable) {\n                responses = this.dataService.getValue(apiResponseVal || changeValue.valueObj, this.apiMeta.variable);\n                let results = [];\n                for (let i = 0; i < responses?.length; i++) {\n                  var resp = responses[i];\n                  results.push(resp);\n                }\n               this.options = Array.isArray(results) ? results : [];\n                this.filteredOptions = [...this.options];\n              } else {\n                responses = changeValue.valueObj;\n                this.options = Array.isArray(responses)? responses: [];\n                this.filteredOptions = [...this.options];\n              }\n              this.cdr.markForCheck(); \n              // VD 25Oct24 - Store fetched options in local storage\n              if (this.apiMeta?.uniqueKey) {\n                localStorage.setItem(this.apiMeta?.uniqueKey, JSON.stringify(this.options || []));\n              }\n            }\n            this.changeService.confirmChange(changeValue.fromQuestionId);\n          }\n        }\n      );\n    }\n  }\n  ngOnChanges(changes: SimpleChanges) {\n    if (changes['mode']) {\n      this.mode = changes['mode'].currentValue;\n    }\n    // SKS7AUG25 option translation creation\n    if (changes['selectedValue'] || changes['options']) {\n      const changeField = this.apiMeta?.defaultField || (Array.isArray(this.apiMeta?.field) ? this.apiMeta?.field?.[0] : this.apiMeta?.field)\n      const change = changes['selectedValue'];\n      if (!change) return;\n      const value = change.currentValue;\n      this.selectedValue = value ? (changeField && value?.[changeField]) ? value?.[changeField] : value : value;      \n      if (Array.isArray(this.options) && this.options?.length > 0) {\n        const tempOption = [...this.options];\n        for (const opt of tempOption) {\n          if (this.apiMeta && !this.apiMeta.isDependentField &&( changeField ? opt?.[changeField] === this.selectedValue : opt?.value === this.selectedValue)) {\n            this.selectedOption = opt;\n            break;\n          }\n          // SKS12SEP25 label translation\n          if(changeField && opt?.[changeField] === this.selectedValue){\n            const tempOpt = { ...opt }; // Proper clone\n            tempOpt[changeField] = this.from !== 'normalDropDown' ? this.translationService.translate(tempOpt.id + '.label') ? this.translationService.translate(tempOpt.id + '.label') : tempOpt[this.apiMeta?.field] : tempOpt[this.apiMeta?.field];\n            this.selectedOption = tempOpt;\n            break;\n          } else if (opt?.value === this.selectedValue) {\n            const tempOpt = { ...opt }; // Proper clone\n            tempOpt.label = this.from !== 'normalDropDown' ? this.translationService.translate(tempOpt.id + '.label') ? this.translationService.translate(tempOpt.id + '.label') : tempOpt.label : tempOpt.label;\n            this.selectedOption = tempOpt;\n            break;\n          }\n        }\n      } \n      if(this.apiMeta && !this.apiMeta.isDependentField && this.selectedOption?.value === this.selectedValue){\n        this.selectedValue = this.selectedOption?.label\n      }\n      this.filteredOptions = Array.isArray(this.options)? [...this.options]: [];\n    }\n  }\n  getOptions() {\n    this.showOptions = true;\n    this.noDataFound = false;\n    //VD 07Aug24 - isDependentField change\n    // VD 25Oct24 - changes\n    this.placeholder = this.placeholder ? this.placeholder : '';\n    if (this.apiMeta) {\n      try {\n        // MSM-27MAR25 Ensure ques.subText is always an object by parsing it if it's a string\n        this.apiMeta = typeof this.apiMeta === 'object' ? this.apiMeta : JSON.parse(this.apiMeta);\n\n        // Check if apiMeta and apiMeta.field are defined\n        if (this.apiMeta && this.apiMeta?.field) {\n          this.showOptions = true;\n          const cachedOptions = localStorage.getItem(this.apiMeta?.uniqueKey);\n          if (cachedOptions) {\n            let cachedOptionsVal = JSON.parse(cachedOptions) || [];\n            this.options = Array.isArray(cachedOptionsVal)? cachedOptionsVal: [];\n            this.filteredOptions = [...this.options];\n          } else {\n            if (this.apiMeta.endpoint && !this.apiMeta.isDependentField) {\n              this.options = [];\n              this.filteredOptions = [...this.options];\n            }\n\n            // VD 09Sep24- setup the query param for api call // MR 08JAN24 DependentField API Fix moved below logic from above if condition\n            let fullEndPoint;\n            if (this.apiMeta.endpoint) {\n              this.isLoading = true;\n              if (this.apiMeta.queryValueReference && this.apiMeta.queryField) {\n                // process the end point with query param\n                let queryReferences = this.apiMeta.queryValueReference.split(',');\n                let queryFields = this.apiMeta.queryField.split(',');    // MR 08JAN24 similar to above valuereference get list of QUERY Fields\n                let queryValues = this.apiMeta.queryValue.split(',');    // MR 08JAN24 similar to above valuereference get list of QUERY Values (Default)\n                let queryParams = [];\n                let qIndex = 0;                                         // MR 08JAN24 Query Index\n                // Iterate over queryReferences and find the corresponding element in referenceData\n                queryReferences.forEach(reference => {\n                  // Find the element in referenceData that matches the current reference\n                  // RS 09DEC24 Changed keys\n                  let matchingElement = this.question?.referenceQueryData.find(element => element.referenceField === reference);\n                  // If a matching element is found, get its input value and create a query parameter\n                  if (reference && matchingElement) {   // MR 08JAN24 if reference exist & matching element found\n                    queryParams.push(`${queryFields[qIndex]}=${matchingElement.input}`);    // MR 08JAN24 removed reference\n                  } else {    // MR 08JAN24 included option for multiple query params and default value in case of reference is not found\n                    queryParams.push(`${queryFields[qIndex]}=${queryValues[qIndex]}`);\n                  }\n\n                  qIndex++;\n                });\n                fullEndPoint = this.apiMeta.endpoint + '?' + queryParams.join('&');\n              } else {\n                // if no query param get the actual endPoint\n                fullEndPoint = this.apiMeta.endpoint;\n              }\n\n              // VD 19JAN24 - added one more param for authentication\n              if(fullEndPoint){\n                this.dataService.apiResponse(fullEndPoint)?.subscribe({\n                  next: (apiResponse) => {\n                    // HA 18-JAN-24 Assigned apiresponse directly if we have the response in array also\n                    // VD 19JAN24 - if response has key with value(which is array)\n                    let responses;\n                    if (this.apiMeta.variable) {\n                      // VD 21May24 - handling multiple child objects\n                      // VD 22May24 - used common service file\n                      responses = this.dataService.getValue(apiResponse, this.apiMeta.variable);\n                      let results = [];\n                      // HA 19JAN24 To avoid undefined error in console\n                      for (let i = 0; i < responses?.length; i++) {\n                        var resp = responses[i];\n                        results.push(resp);\n                      }\n                     this.options = Array.isArray(results) ? results : [];\n                      this.filteredOptions = [...this.options];\n                    } else {  // VD 19JAN24 - if response has value(which is array) only\n                      responses = apiResponse;\n                      this.options = Array.isArray(responses)? responses: [];\n                      this.filteredOptions = [...this.options];\n                    }\n                    // VD 25Oct24 - Store fetched options in local storage\n                    if (this.apiMeta?.uniqueKey) {\n                      localStorage.setItem(this.apiMeta?.uniqueKey, JSON.stringify(this.options || []));\n                    }\n                    this.noDataFound = this.options?.length === 0;  // check empty\n                    this.isLoading = false;                        // stop loader\n                    this.cdr.markForCheck(); \n                  }, error: () => {\n                    this.options = [];\n                    this.filteredOptions = [...this.options];\n                    this.noDataFound = true;\n                    this.isLoading = false;\n                    this.cdr.markForCheck(); \n                  }\n                });\n              }\n            }\n          }\n        }\n      } catch (error) {\n        console.error('Error parsing apiMeta:', error);\n      }\n    }\n  }\n  // VD 22May24 - used common service file\n\n  selectChange(event: any) {\n    const changeField = this.apiMeta?.defaultField || (Array.isArray(this.apiMeta?.field) ? this.apiMeta?.field?.[0] : this.apiMeta?.field)\n    let change: any = {};\n    change['fromQuestionId'] = this.question?.id;\n    let value = '';\n    if (event) {\n      if (this.apiMeta?.isObject) {\n        value = event;\n      } else if (changeField && event?.[changeField] !== undefined) {\n        value = event[changeField];\n      } else {\n        value = event?.value ?? '';\n      }\n    }\n    change['valueObj'] = value;\n    change['field'] = changeField\n    change['referenceField'] = this.apiMeta?.referenceField;\n    this.valueChange.emit({question : this.question, value: change});\n    if(this.apiMeta?.isCurrencyField){\n      this.countryService.currencyCodeSet(change['valueObj'])\n    }\n    // SKS7AUG25 option translation creation\n    let currentValue = change['valueObj']\n    if (Array.isArray(this.options) && this.options?.length > 0) {\n      const tempOption = [...this.options];\n      for (const opt of tempOption) {\n        const label = opt?.[changeField];\n        if (this.apiMeta && !this.apiMeta.isDependentField && label === currentValue && this.from !== 'normalDropDown') {\n          this.selectedOption = opt;\n          break;\n        }\n        if (opt?.label === currentValue) {\n          const tempOpt = { ...opt }; // Proper clone\n          tempOpt.label = this.from !== 'normalDropDown' ? this.translationService.translate(tempOpt.id + '.label') ? this.translationService.translate(tempOpt.id + '.label') : tempOpt.label : tempOpt.label;\n          this.selectedOption = tempOpt;\n          break;\n        }\n      }\n    }\n    this.showOptions = false;\n  }\ntoggle(){\n  this.showOptions = !this.showOptions;\n}\n\n@HostListener('document:click', ['$event'])\nonDocumentClick(event: MouseEvent): void {\n  const target = event.target as HTMLElement;\n  if (this.dropdownWrapper && !this.dropdownWrapper.nativeElement.contains(target)) {\n    this.showOptions = false;\n  }\n}\n\n\n  clearSelection() {\n    this.selectedValue = '';\n    this.selectedOption = {}\n    this.valueChange.emit({question : this.question, value: {\n      fromQuestionId: this.question?.id,\n      valueObj: '',\n      referenceField: this.apiMeta?.referenceField,\n    }});\n    if(this.apiMeta?.isCurrencyField){\n      this.countryService.currencyCodeSet('INR')\n    }\n  }\n  inputValue(event,ques){\n    const changeField = this.apiMeta?.defaultField || (Array.isArray(this.apiMeta?.field) ? this.apiMeta?.field?.[0] : this.apiMeta?.field)\n    let value = '';\n      if (event) {\n        if (this.apiMeta?.isObject) {\n          value = event;\n        } else if (changeField && event?.[changeField] !== undefined) {\n          value = event[changeField];\n        } else {\n          value = event?.value || event?.valueObj || event || '';\n        }\n      }\n    if(ques.singleFieldChange){\n      let change: any = {}; \n      change['fromQuestionId'] = this.question?.id;\n      change['valueObj'] = value;\n      change['field'] = changeField\n      change['referenceField'] = this.apiMeta?.referenceField;\n      this.valueChange.emit({question : ques, value: change});\n      if(this.apiMeta?.isCurrencyField){\n        this.countryService.currencyCodeSet(change['valueObj'])\n      }\n      return\n    }\n    this.filterOptions(value)\n  }\n  // SKS3MAR25 searchable functionality\n  filterOptions(searchValue: any) {\n    this.searchText = searchValue;\n    if (!searchValue || searchValue === \"\" || typeof searchValue !== 'string' ) {\n      this.filteredOptions = Array.isArray(this.options) ? [...this.options] : [];\n      return;\n    }\n    const lowerSearch = searchValue?.trim()?.toLowerCase();\n    const changeField = this.apiMeta?.defaultField || (Array.isArray(this.apiMeta?.field) ? this.apiMeta?.field?.[0] : this.apiMeta?.field);\n    this.filteredOptions = this.options?.filter(option => {\n      let valueToCheck = '';\n      if (changeField && option?.[changeField]) {\n        valueToCheck = option[changeField];\n      } else {\n        valueToCheck = option?.label || option?.value || '';\n      }\n      return valueToCheck?.toString()?.toLowerCase()?.includes(lowerSearch);\n    });\n    this.cdr.markForCheck();\n    this.noDataFound = this.filteredOptions.length === 0;\n  }\n}\n","<div #dropdownWrapper class=\"nxt-dropdown-wrapper\" [ngClass]=\"{ 'loading' : isLoading }\">\n  <nxt-input\n    [type]=\"'dropdown'\"\n    [mode]=\"mode\"\n    [from]=\"from\"\n    [value]=\"selectedValue || null\"\n    [selectedOption]=\"selectedOption\"\n    (onFocus)=\"getOptions()\"\n    [labelFont]=\"labelFont\"\n    [label]=\"label ? ((question?.id+'.questionText') | nxtCustomTranslate : label) : ''\"\n    [labelColor]=\"labelColor\"\n    [inputTextColor]=\"inputTextColor\"\n    [labelSize]=\"labelSize\"\n    [inputValueSize]=\"inputValueSize\"\n    [labelWeight]=\"labelWeight\"\n    [inputWeight]=\"inputWeight\"\n    [showLabel]=\"showLabel\"\n    [readOnly]=\"readOnly\"\n    [padding]=\"padding\"\n    [inputBorder]=\"inputBorder\" \n    svgHeight=\"20px\" svgWidth=\"20px\"\n    [placeholder]=\"placeholder\"\n    [required]=\"question?.isOptional\" \n    [inputBgColor]=\" (from === 'normalDropDown' && !inputBgColor) ? '#eff8ff' : (inputBgColor || '#ffffff')\"\n    [inputId]=\"question?.trackingId\"\n    [errorMessages]=\"{ required: 'This field is required' }\"\n    [inputIconLeftSrc]=\"inputIconLeftSrc\"\n    (toggleEmit)=\"toggle()\"\n    (clearInputEmit)=\"clearSelection()\"\n    [question]=\"question\"\n    [onlyView]=\"onlyView\"\n    (selectEmit)=\"selectChange({value:$event})\"\n    (inputValue)=\"inputValue($event.value,$event.question)\"\n    >\n  </nxt-input>\n  <!-- SKS11JUN25 Dropdown list -->\n  <ul class=\"nxt-dropdown-menu\" *ngIf=\"!isLoading && showOptions\">\n    <!-- No Data -->\n    <li *ngIf=\"!isLoading && noDataFound\" class=\"no-data\">\n      No Data Found\n    </li>\n    <!-- SKS3MAR25 searchable functionality -->\n    <ng-container  *ngIf=\"!isLoading && filteredOptions?.length > 0\">\n      <li *ngFor=\"let item of filteredOptions\" (mousedown)=\"selectChange(item)\" [style.font-size]=\"question?.fontSize || '12px'\">\n        @if(apiMeta && !apiMeta.isDependentField && item[apiMeta.field]){\n          {{item[ apiMeta.field?.constructor?.name === 'Array' ? apiMeta.field[0] : apiMeta.field ]}}\n        } @else {\n          {{ item.id +'.label' | nxtCustomTranslate : item?.label || item?.value}}\n        }\n      </li>\n    </ng-container>\n    \n  </ul>\n</div>","import { CommonModule } from '@angular/common';\nimport { Component, ElementRef, EventEmitter, HostListener, Input, OnDestroy, OnInit, Output, SimpleChanges, ViewChild, ChangeDetectorRef } from '@angular/core';\nimport { FormsModule } from '@angular/forms';\nimport { Subscription } from 'rxjs';\nimport { NxtCustomTranslatePipe } from '../../pipe/custom-translate.pipe';\nimport { ChangeService } from '../../services/change/change.service';\nimport { CountryService } from '../../services/country/country.service';\nimport { DataService } from '../../services/data/data.service';\nimport { StorageService } from '../../services/storage/storage.service';\nimport { TranslationService } from '../../services/translation/translation.service';\n\n@Component({\n  selector: 'nxt-multi-select',\n  standalone: true,\n  imports: [\n    CommonModule, FormsModule, NxtCustomTranslatePipe\n  ],\n  templateUrl: './nxt-multi-select.component.html',\n  styleUrls: ['./nxt-multi-select.component.css']\n})\nexport class NxtMultiSelect implements OnInit, OnDestroy {\n  @Input() options: any[] = [];\n  @Input() placeholder: string;\n  @Input() apiMeta: any;\n  @Input() selectedValue: any;\n  @Input() progressBar: boolean;\n  @Input() readOnly: boolean = false;\n  @Input() error: any;\n  @Input() fromShengel: boolean = false;\n  @Input() question: any;\n  @Input() mode: 'view' | 'edit' | 'print' = 'edit';\n  @Input() from: any;\n  @Input() padding: any;\n  @Input() onlyView: boolean = false;\n  @Input() labelFont: any;\n  @Input() label: any;\n  @Input() labelColor: any;\n  @Input() inputTextColor: any;\n  @Input() labelSize: any;\n  @Input() inputValueSize: any;\n  @Input() labelWeight: any;\n  @Input() inputWeight: any;\n  @Input() showLabel: boolean = true;\n  @Input() inputBorder: any = '#ccc';\n  @Input() inputBgColor: any;\n  @Input() inputIconLeftSrc: any;\n  @Input() inputId: string;\n  @Input() allowCustomOptions: boolean = true;\n\n  @Output() valueChange: EventEmitter<any> = new EventEmitter<any>();\n\n  @ViewChild('multiSelectWrapper') multiSelectWrapper: ElementRef;\n  @ViewChild('searchInput') searchInput: ElementRef<HTMLInputElement>;\n\n  subscription: Subscription;\n  showOptions = false;\n  isLoading = false;\n  noDataFound = false;\n  searchText: string = '';\n  filteredOptions: any[] = [];\n  selectedValues: any[] = [];\n\n  constructor(\n    private countryService: CountryService,\n    private translationService: TranslationService,\n    private changeService: ChangeService,\n    private dataService: DataService,\n    private storageService: StorageService,\n    private cdr: ChangeDetectorRef\n  ) {}\n\n  ngOnInit(): void {\n    const sourceId = this.apiMeta?.sourceQuestionId;\n    if (sourceId && (this.apiMeta?.variable || this.apiMeta?.valueField)) {\n      this.subscription = this.changeService.changeAnnounced$.subscribe(\n        (changeValue) => {\n          if (changeValue != undefined) {\n            if (changeValue.fromQuestionId && changeValue.valueObj !== undefined && (Array.isArray(this.apiMeta?.sourceQuestionId) ? this.apiMeta?.sourceQuestionId.includes(changeValue.fromQuestionId) : changeValue.fromQuestionId === this.apiMeta?.sourceQuestionId)) {\n              const apiResponseVal = this.storageService.getApiResponseValue(changeValue.fromQuestionId);\n              let responses;\n              if (this.apiMeta.variable) {\n                responses = this.dataService.getValue(apiResponseVal || changeValue.valueObj, this.apiMeta.variable);\n                const results = [];\n                for (let i = 0; i < responses?.length; i++) {\n                  const resp = responses[i];\n                  results.push(resp);\n                }\n                this.options = Array.isArray(results) ? results : [];\n                this.filteredOptions = [...this.options];\n              } else {\n                responses = changeValue.valueObj;\n                this.options = Array.isArray(responses) ? responses : [];\n                this.filteredOptions = [...this.options];\n              }\n              this.normalizeSelectedValues();\n              this.cdr.markForCheck();\n              if (this.apiMeta?.uniqueKey) {\n                localStorage.setItem(this.apiMeta?.uniqueKey, JSON.stringify(this.options || []));\n              }\n            }\n            this.changeService.confirmChange(changeValue.fromQuestionId);\n          }\n        }\n      );\n    }\n  }\n\n  ngOnChanges(changes: SimpleChanges) {\n    if (changes['mode']) {\n      this.mode = changes['mode'].currentValue;\n    }\n    if (changes['selectedValue'] || changes['options'] || changes['apiMeta']) {\n      this.normalizeSelectedValues();\n      this.filteredOptions = Array.isArray(this.options) ? [...this.options] : [];\n      this.noDataFound = this.filteredOptions.length === 0;\n    }\n  }\n\n  ngOnDestroy(): void {\n    this.subscription?.unsubscribe();\n  }\n\n  getOptions() {\n    if (this.mode !== 'edit' || this.readOnly) {\n      return;\n    }\n    this.showOptions = true;\n    this.noDataFound = false;\n    this.placeholder = this.placeholder ? this.placeholder : '';\n    this.filterOptions(this.searchText);\n    this.focusSearchInput();\n    if (this.apiMeta) {\n      try {\n        this.apiMeta = typeof this.apiMeta === 'object' ? this.apiMeta : JSON.parse(this.apiMeta);\n        if (this.apiMeta && this.apiMeta?.field) {\n          const cachedOptions = localStorage.getItem(this.apiMeta?.uniqueKey);\n          if (cachedOptions) {\n            const cachedOptionsVal = JSON.parse(cachedOptions) || [];\n            this.options = Array.isArray(cachedOptionsVal) ? cachedOptionsVal : [];\n            this.filteredOptions = [...this.options];\n            this.filterOptions(this.searchText);\n          } else {\n            if (this.apiMeta.endpoint && !this.apiMeta.isDependentField) {\n              this.options = [];\n              this.filteredOptions = [...this.options];\n            }\n\n            let fullEndPoint;\n            if (this.apiMeta.endpoint) {\n              this.isLoading = true;\n              if (this.apiMeta.queryValueReference && this.apiMeta.queryField) {\n                const queryReferences = this.apiMeta.queryValueReference.split(',');\n                const queryFields = this.apiMeta.queryField.split(',');\n                const queryValues = this.apiMeta.queryValue.split(',');\n                const queryParams = [];\n                let qIndex = 0;\n                queryReferences.forEach(reference => {\n                  const matchingElement = this.question?.referenceQueryData.find(element => element.referenceField === reference);\n                  if (reference && matchingElement) {\n                    queryParams.push(`${queryFields[qIndex]}=${matchingElement.input}`);\n                  } else {\n                    queryParams.push(`${queryFields[qIndex]}=${queryValues[qIndex]}`);\n                  }\n                  qIndex++;\n                });\n                fullEndPoint = this.apiMeta.endpoint + '?' + queryParams.join('&');\n              } else {\n                fullEndPoint = this.apiMeta.endpoint;\n              }\n\n              if (fullEndPoint) {\n                this.dataService.apiResponse(fullEndPoint)?.subscribe({\n                  next: (apiResponse) => {\n                    let responses;\n                    if (this.apiMeta.variable) {\n                      responses = this.dataService.getValue(apiResponse, this.apiMeta.variable);\n                      const results = [];\n                      for (let i = 0; i < responses?.length; i++) {\n                        const resp = responses[i];\n                        results.push(resp);\n                      }\n                      this.options = Array.isArray(results) ? results : [];\n                      this.filteredOptions = [...this.options];\n                    } else {\n                      responses = apiResponse;\n                      this.options = Array.isArray(responses) ? responses : [];\n                      this.filteredOptions = [...this.options];\n                    }\n                    this.normalizeSelectedValues();\n                    this.filterOptions(this.searchText);\n                    if (this.apiMeta?.uniqueKey) {\n                      localStorage.setItem(this.apiMeta?.uniqueKey, JSON.stringify(this.options || []));\n                    }\n                    this.noDataFound = this.options?.length === 0;\n                    this.isLoading = false;\n                    this.cdr.markForCheck();\n                  }, error: () => {\n                    this.options = [];\n                    this.filteredOptions = [...this.options];\n                    this.noDataFound = true;\n                    this.isLoading = false;\n                    this.cdr.markForCheck();\n                  }\n                });\n              }\n            }\n          }\n        }\n      } catch (error) {\n        console.error('Error parsing apiMeta:', error);\n      }\n    }\n  }\n\n  toggle(event?: Event) {\n    event?.stopPropagation();\n    if (this.mode !== 'edit' || this.readOnly) {\n      return;\n    }\n    this.showOptions = !this.showOptions;\n    if (this.showOptions) {\n      this.getOptions();\n    } else {\n      this.searchText = '';\n      this.filterOptions('');\n    }\n  }\n\n  openOptions() {\n    if (this.mode !== 'edit' || this.readOnly) {\n      return;\n    }\n    if (!this.showOptions) {\n      this.getOptions();\n    } else {\n      this.focusSearchInput();\n    }\n  }\n\n  toggleOption(option: any, event?: Event) {\n    event?.preventDefault();\n    event?.stopPropagation();\n    const optionKey = this.getComparableValue(option);\n    if (this.isSelected(option)) {\n      this.selectedValues = this.selectedValues.filter(selected => this.getComparableValue(selected) !== optionKey);\n    } else {\n      this.selectedValues = [...this.selectedValues, this.apiMeta?.isObject ? option : this.getOptionValue(option)];\n    }\n    this.emitSelection();\n    this.filterOptions(this.searchText);\n  }\n\n  addSearchTextAsOption(event?: Event) {\n    event?.preventDefault();\n    event?.stopPropagation();\n    const customText = this.customOptionText;\n    if (!customText) {\n      return;\n    }\n    const existingOption = this.findExactOptionByText(customText);\n    if (existingOption) {\n      if (!this.isSelected(existingOption)) {\n        this.selectedValues = [...this.selectedValues, this.apiMeta?.isObject ? existingOption : this.getOptionValue(existingOption)];\n        this.emitSelection();\n      }\n      this.searchText = '';\n      this.filterOptions('');\n      this.focusSearchInput();\n      return;\n    }\n    if (!this.canCreateCustomOption) {\n      return;\n    }\n    const customOption = this.createCustomOption(customText);\n    this.options = [...(Array.isArray(this.options) ? this.options : []), customOption];\n    this.selectedValues = [...this.selectedValues, this.apiMeta?.isObject ? customOption : this.getOptionValue(customOption)];\n    this.searchText = '';\n    this.emitSelection();\n    this.filterOptions('');\n    this.focusSearchInput();\n  }\n\n  removeSelected(selected: any, event?: Event) {\n    event?.preventDefault();\n    event?.stopPropagation();\n    const selectedKey = this.getComparableValue(selected);\n    this.selectedValues = this.selectedValues.filter(item => this.getComparableValue(item) !== selectedKey);\n    this.emitSelection();\n    this.filterOptions(this.searchText);\n  }\n\n  clearSelection(event?: Event) {\n    event?.preventDefault();\n    event?.stopPropagation();\n    this.selectedValues = [];\n    this.emitSelection();\n    this.filterOptions(this.searchText);\n    if (this.apiMeta?.isCurrencyField) {\n      this.countryService.currencyCodeSet('INR');\n    }\n  }\n\n  toggleSelectAll(event?: Event) {\n    event?.preventDefault();\n    event?.stopPropagation();\n    const visibleOptions = this.orderedOptions;\n    if (!visibleOptions.length) {\n      return;\n    }\n    if (this.areAllVisibleSelected()) {\n      const visibleKeys = visibleOptions.map(option => this.getComparableValue(option));\n      this.selectedValues = this.selectedValues.filter(selected => !visibleKeys.includes(this.getComparableValue(selected)));\n    } else {\n      const selectedKeys = this.selectedValues.map(selected => this.getComparableValue(selected));\n      const valuesToAdd = visibleOptions\n        .filter(option => !selectedKeys.includes(this.getComparableValue(option)))\n        .map(option => this.apiMeta?.isObject ? option : this.getOptionValue(option));\n      this.selectedValues = [...this.selectedValues, ...valuesToAdd];\n    }\n    this.emitSelection();\n    this.filterOptions(this.searchText);\n  }\n\n  inputValue(value: string) {\n    this.searchText = value || '';\n    this.filterOptions(this.searchText);\n  }\n\n  filterOptions(searchValue: any) {\n    this.searchText = searchValue || '';\n    const allOptions = Array.isArray(this.options) ? [...this.options] : [];\n    if (!searchValue || searchValue === '' || typeof searchValue !== 'string') {\n      this.filteredOptions = allOptions;\n      this.noDataFound = allOptions.length === 0;\n      return;\n    }\n    const lowerSearch = searchValue?.trim()?.toLowerCase();\n    this.filteredOptions = allOptions.filter(option => this.getOptionSearchText(option).includes(lowerSearch));\n    this.noDataFound = this.filteredOptions.length === 0;\n    this.cdr.markForCheck();\n  }\n\n  emitSelection() {\n    const changeField = this.getChangeField();\n    const valueObj = this.apiMeta?.isObject ? this.selectedItems : [...this.selectedValues];\n    const change: any = {};\n    change['fromQuestionId'] = this.question?.id;\n    change['valueObj'] = valueObj;\n    change['field'] = changeField;\n    change['referenceField'] = this.apiMeta?.referenceField;\n    change['isObject'] = this.apiMeta?.isObject;\n    this.valueChange.emit({ question: this.question, value: change });\n  }\n\n  get selectedItems(): any[] {\n    return this.selectedValues.map(value => this.findOptionByValue(value) || value);\n  }\n\n  get selectedLabels(): string {\n    return this.selectedItems.map(item => this.getOptionLabel(item)).filter(label => label !== '').join(', ');\n  }\n\n  get customOptionText(): string {\n    return (this.searchText || '').trim();\n  }\n\n  get canCreateCustomOption(): boolean {\n    const customText = this.customOptionText;\n    if (!this.allowCustomOptions || !customText) {\n      return false;\n    }\n    return !this.findExactOptionByText(customText) && !this.isTextSelected(customText);\n  }\n\n  get orderedOptions(): any[] {\n    const options = Array.isArray(this.filteredOptions) ? [...this.filteredOptions] : [];\n    const selectedKeys = this.selectedValues.map(selected => this.getComparableValue(selected));\n    const selectedOptions = options.filter(option => selectedKeys.includes(this.getComparableValue(option)));\n    const unselectedOptions = options.filter(option => !selectedKeys.includes(this.getComparableValue(option)));\n    return [...selectedOptions, ...unselectedOptions];\n  }\n\n  get hasPartialVisibleSelection(): boolean {\n    const visibleOptions = this.orderedOptions;\n    if (!visibleOptions.length) {\n      return false;\n    }\n    const selectedCount = visibleOptions.filter(option => this.isSelected(option)).length;\n    return selectedCount > 0 && selectedCount < visibleOptions.length;\n  }\n\n  get showSelectedDivider(): boolean {\n    const visibleOptions = this.orderedOptions;\n    return this.selectedValues.length > 0 && visibleOptions.some(option => !this.isSelected(option));\n  }\n\n  areAllVisibleSelected(): boolean {\n    const visibleOptions = this.orderedOptions;\n    return visibleOptions.length > 0 && visibleOptions.every(option => this.isSelected(option));\n  }\n\n  isLastSelectedOption(index: number): boolean {\n    if (!this.showSelectedDivider) {\n      return false;\n    }\n    const visibleOptions = this.orderedOptions;\n    return this.isSelected(visibleOptions[index]) && !this.isSelected(visibleOptions[index + 1]);\n  }\n\n  isSelected(option: any): boolean {\n    const optionKey = this.getComparableValue(option);\n    return this.selectedValues.some(selected => this.getComparableValue(selected) === optionKey);\n  }\n\n  getOptionLabel(option: any): string {\n    if (option === null || option === undefined) {\n      return '';\n    }\n    if (typeof option !== 'object') {\n      return option?.toString();\n    }\n    const labelField = this.apiMeta?.labelField || this.getChangeField();\n    if (this.apiMeta && !this.apiMeta.isDependentField && labelField && option?.[labelField] !== undefined) {\n      return option[labelField]?.toString();\n    }\n    if (labelField && option?.[labelField] !== undefined) {\n      const translated = this.from !== 'normalDropDown' && option?.id ? this.translationService.translate(option.id + '.label') : null;\n      return (translated || option[labelField])?.toString();\n    }\n    if (option?.label !== undefined) {\n      const translated = this.from !== 'normalDropDown' && option?.id ? this.translationService.translate(option.id + '.label') : null;\n      return (translated || option.label)?.toString();\n    }\n    if (option?.value !== undefined) {\n      return option.value?.toString();\n    }\n    return JSON.stringify(option);\n  }\n\n  getSelectionDisplay(selected: any): string {\n    const option = this.findOptionByValue(selected) || selected;\n    return this.getOptionLabel(option);\n  }\n\n  getOptionPrimaryText(option: any): string {\n    const values = this.getOptionDisplayValues(option);\n    return values[0] || this.getOptionLabel(option);\n  }\n\n  getOptionSecondaryValues(option: any): string[] {\n    return this.getOptionDisplayValues(option).slice(1);\n  }\n\n  highlightOptionText(text: string): string {\n    if (!text || !this.searchText) {\n      return this.sanitizeHtml(text || '');\n    }\n    const terms = this.searchText.toLowerCase().split(' ').filter(term => term.length > 0);\n    if (terms.length === 0) {\n      return this.sanitizeHtml(text);\n    }\n    const escapedTerms = terms.map(term => term.replace(/[.*+?^${}()|[\\]\\\\]/g, '\\\\$&'));\n    const regex = new RegExp(`(${escapedTerms.join('|')})`, 'gi');\n    return this.sanitizeHtml(text).replace(regex, '<span class=\"highlight\">$1</span>');\n  }\n\n  getOptionValue(option: any): any {\n    if (option === null || option === undefined) {\n      return option;\n    }\n    if (this.apiMeta?.isObject || typeof option !== 'object') {\n      return option;\n    }\n    const valueField = this.apiMeta?.valueField || this.apiMeta?.defaultField || this.getChangeField();\n    if (valueField && option?.[valueField] !== undefined) {\n      return option[valueField];\n    }\n    if (option?.value !== undefined) {\n      return option.value;\n    }\n    if (option?.label !== undefined) {\n      return option.label;\n    }\n    return option;\n  }\n\n  @HostListener('document:click', ['$event'])\n  onDocumentClick(event: MouseEvent): void {\n    const target = event.target as HTMLElement;\n    if (this.multiSelectWrapper && !this.multiSelectWrapper.nativeElement.contains(target)) {\n      this.showOptions = false;\n      this.searchText = '';\n      this.filterOptions('');\n    }\n  }\n\n  private normalizeSelectedValues() {\n    if (Array.isArray(this.selectedValue)) {\n      this.selectedValues = [...this.selectedValue];\n    } else if (this.selectedValue === null || this.selectedValue === undefined || this.selectedValue === '') {\n      this.selectedValues = [];\n    } else if (typeof this.selectedValue === 'string' && this.selectedValue.includes(',')) {\n      this.selectedValues = this.selectedValue.split(',').map(value => value.trim()).filter(value => value !== '');\n    } else {\n      this.selectedValues = [this.selectedValue];\n    }\n  }\n\n  private getChangeField(): any {\n    return this.apiMeta?.defaultField || (Array.isArray(this.apiMeta?.field) ? this.apiMeta?.field?.[0] : this.apiMeta?.field);\n  }\n\n  private getComparableValue(value: any): any {\n    if (value === null || value === undefined) {\n      return value;\n    }\n    if (typeof value !== 'object') {\n      return value;\n    }\n    const valueField = this.apiMeta?.valueField || this.apiMeta?.defaultField || this.getChangeField();\n    if (valueField && value?.[valueField] !== undefined) {\n      return value[valueField];\n    }\n    if (value?.value !== undefined) {\n      return value.value;\n    }\n    if (value?.label !== undefined) {\n      return value.label;\n    }\n    return JSON.stringify(value);\n  }\n\n  private findOptionByValue(value: any): any {\n    const selectedKey = this.getComparableValue(value);\n    return this.options?.find(option => this.getComparableValue(option) === selectedKey);\n  }\n\n  private findExactOptionByText(text: string): any {\n    const normalizedText = this.normalizeText(text);\n    return this.options?.find(option => {\n      const optionLabel = this.normalizeText(this.getOptionLabel(option));\n      const optionValue = this.normalizeText(this.getComparableValue(option));\n      const optionDisplayValue = this.getOptionDisplayValues(option).some(value => this.normalizeText(value) === normalizedText);\n      return optionLabel === normalizedText || optionValue === normalizedText || optionDisplayValue;\n    });\n  }\n\n  private isTextSelected(text: string): boolean {\n    const normalizedText = this.normalizeText(text);\n    return this.selectedValues.some(selected => {\n      const selectedLabel = this.normalizeText(this.getSelectionDisplay(selected));\n      const selectedValue = this.normalizeText(this.getComparableValue(selected));\n      return selectedLabel === normalizedText || selectedValue === normalizedText;\n    });\n  }\n\n  private createCustomOption(text: string): any {\n    if (!this.apiMeta?.isObject && !this.usesObjectOptions()) {\n      return text;\n    }\n    const labelField = this.apiMeta?.labelField || this.getChangeField() || 'label';\n    const valueField = this.apiMeta?.valueField || this.apiMeta?.defaultField || labelField || 'value';\n    const customOption = {\n      [labelField]: text,\n      [valueField]: text\n    };\n    return customOption;\n  }\n\n  private usesObjectOptions(): boolean {\n    return Array.isArray(this.options) && this.options.some(option => option && typeof option === 'object');\n  }\n\n  private getOptionDisplayValues(option: any): string[] {\n    if (option === null || option === undefined) {\n      return [];\n    }\n    if (typeof option !== 'object') {\n      return [option.toString()];\n    }\n    const displayFields = this.getDisplayFields();\n    const displayValues = displayFields\n      .map(field => this.getNestedDisplayValue(option, field))\n      .filter(value => value !== '');\n    if (displayValues.length > 0) {\n      return displayValues;\n    }\n    const label = this.getOptionLabel(option);\n    return label ? [label] : [];\n  }\n\n  private getOptionSearchText(option: any): string {\n    return this.getOptionDisplayValues(option).join(' ').toLowerCase();\n  }\n\n  private getDisplayFields(): string[] {\n    const fields = this.apiMeta?.field;\n    if (Array.isArray(fields)) {\n      return fields.filter(field => !!field);\n    }\n    if (typeof fields === 'string' && fields.includes(',')) {\n      return fields.split(',').map(field => field.trim()).filter(field => field !== '');\n    }\n    if (typeof fields === 'string' && fields.trim() !== '') {\n      return [fields.trim()];\n    }\n    const labelField = this.apiMeta?.labelField || this.getChangeField();\n    return labelField ? [labelField] : [];\n  }\n\n  private getNestedDisplayValue(option: any, field: any): string {\n    if (!option || !field) {\n      return '';\n    }\n    const path = field.toString().replace(/\\[(\\d+)\\]/g, '.$1').split('.');\n    let value = option;\n    for (const key of path) {\n      if (value === null || value === undefined || typeof value !== 'object') {\n        return '';\n      }\n      value = value[key];\n    }\n    if (value === null || value === undefined) {\n      return '';\n    }\n    return typeof value === 'object' ? JSON.stringify(value) : value.toString();\n  }\n\n  private sanitizeHtml(text: string): string {\n    return text\n      .replace(/&/g, '&amp;')\n      .replace(/</g, '&lt;')\n      .replace(/>/g, '&gt;')\n      .replace(/\"/g, '&quot;')\n      .replace(/'/g, '&#39;');\n  }\n\n  private normalizeText(value: any): string {\n    return (value === null || value === undefined ? '' : value.toString()).trim().toLowerCase();\n  }\n\n  private focusSearchInput() {\n    setTimeout(() => this.searchInput?.nativeElement?.focus());\n  }\n}\n","<div #multiSelectWrapper class=\"nxt-multi-select-wrapper\" [ngClass]=\"{ 'loading' : isLoading }\">\n  <div *ngIf=\"label && showLabel\" class=\"nxt-multi-select-label\"\n    [style.font-family]=\"labelFont\"\n    [style.font-weight]=\"labelWeight || 'normal'\"\n    [style.font-size]=\"labelSize || '14px'\"\n    [style.color]=\"labelColor || '#212529'\">\n    {{ label ? ((question?.id+'.questionText') | nxtCustomTranslate : label) : '' }}\n    <span *ngIf=\"question?.isOptional && mode === 'edit'\" class=\"required-mark\">*</span>\n  </div>\n\n  <div\n    class=\"nxt-multi-select-control\"\n    [ngClass]=\"{\n      'open': showOptions,\n      'readonly': readOnly || mode !== 'edit',\n      'has-value': selectedValues.length > 0\n    }\"\n    [style.min-height]=\"from !== 'nxtTable' ? '40px' : null\"\n    [style.backgroundColor]=\"mode !== 'edit' ? (inputBgColor || '#ffffff') : (from === 'normalDropDown' && !inputBgColor) ? '#eff8ff' : (inputBgColor || '#ffffff')\"\n    [style.border]=\"mode === 'edit' ? (inputBorder === 'none' ? ('1px solid ' + (inputBgColor || '#ffffff')) : '1px solid ' + inputBorder) : 'none'\"\n    [style.padding]=\"padding || ''\"\n    (click)=\"openOptions()\">\n\n    <img *ngIf=\"inputIconLeftSrc && mode === 'edit'\" [src]=\"inputIconLeftSrc\" alt=\"icon\" class=\"left-icon\" />\n\n    <ng-container *ngIf=\"mode === 'edit'; else viewModeValue\">\n      <div class=\"nxt-multi-select-value\">\n        <ng-container *ngIf=\"!showOptions; else searchMode\">\n          <span *ngIf=\"selectedValues.length === 0\" class=\"placeholder\">{{ placeholder }}</span>\n          <span *ngFor=\"let selected of selectedValues\" class=\"selected-chip\"\n            [style.font-size]=\"inputValueSize || '12px'\"\n            [style.font-weight]=\"inputWeight || '400'\">\n            {{ getSelectionDisplay(selected) }}\n            <button *ngIf=\"!readOnly\" type=\"button\" class=\"chip-remove\" aria-label=\"Remove selected item\"\n              (click)=\"removeSelected(selected, $event)\">×</button>\n          </span>\n        </ng-container>\n\n        <ng-template #searchMode>\n          <div class=\"nxt-multi-select-search-row\">\n            <input\n              #searchInput\n              [id]=\"inputId || question?.trackingId\"\n              type=\"text\"\n              [ngStyle]=\"{\n                padding: from === 'nxtTable' ? '0px': null\n              }\"\n              class=\"nxt-multi-select-search\"\n              [value]=\"searchText\"\n              [placeholder]=\"selectedValues.length ? 'Search or add' : placeholder\"\n              [readOnly]=\"readOnly\"\n              [style.color]=\"inputTextColor\"\n              [style.font-size]=\"inputValueSize || '12px'\"\n              [style.font-weight]=\"inputWeight || '400'\"\n              (input)=\"inputValue($any($event.target).value)\"\n              (keydown.enter)=\"addSearchTextAsOption($event)\"\n              (click)=\"$event.stopPropagation()\" />\n          </div>\n        </ng-template>\n      </div>\n\n      <button *ngIf=\"showOptions && selectedValues.length > 0\" type=\"button\" class=\"selected-count\"\n        (click)=\"clearSelection($event)\">\n        {{ selectedValues.length }}\n        <span>×</span>\n      </button>\n      <svg (click)=\"toggle($event)\" xmlns=\"http://www.w3.org/2000/svg\" [attr.width]=\"from === 'nxtTable' ? 12 : 16\" [attr.height]=\"from === 'nxtTable' ? 12 : 16\" viewBox=\"0 0 12 12\" fill=\"none\">\n        <path d=\"M4.5 11H7.5C10 11 11 10 11 7.5V4.5C11 2 10 1 7.5 1H4.5C2 1 1 2 1 4.5V7.5C1 10 2 11 4.5 11Z\" stroke=\"#B0ADAB\" stroke-width=\"1\" stroke-linecap=\"round\" stroke-linejoin=\"round\" />\n        <path d=\"M4.23499 5.32L6 7.08L7.765 5.32\" stroke=\"#B0ADAB\" stroke-width=\"1\" stroke-linecap=\"round\" stroke-linejoin=\"round\" />\n      </svg>\n    </ng-container>\n\n    <ng-template #viewModeValue>\n      <div class=\"nxt-multi-select-view\"\n        [style.color]=\"inputTextColor || '#212529'\"\n        [style.font-size]=\"inputValueSize || '12px'\"\n        [style.font-weight]=\"inputWeight || '400'\">\n        {{ selectedLabels || '' }}\n      </div>\n    </ng-template>\n  </div>\n\n  <ul class=\"nxt-multi-select-menu\" *ngIf=\"!isLoading && showOptions\">\n    <li *ngIf=\"!isLoading && noDataFound && !canCreateCustomOption\" class=\"no-data\">\n      No Data Found\n    </li>\n\n    <li *ngIf=\"canCreateCustomOption\" class=\"add-option\" (mousedown)=\"addSearchTextAsOption($event)\">\n      <span class=\"add-indicator\">+</span>\n      <span>Add \"{{ customOptionText }}\"</span>\n    </li>\n\n    <ng-container *ngIf=\"!isLoading && orderedOptions?.length > 0\">\n      <li class=\"select-all-option\" (mousedown)=\"toggleSelectAll($event)\">\n        <span class=\"check-indicator\" [ngClass]=\"{ 'checked': areAllVisibleSelected(), 'partial': hasPartialVisibleSelection }\">\n          <span *ngIf=\"areAllVisibleSelected()\">✓</span>\n          <span *ngIf=\"hasPartialVisibleSelection && !areAllVisibleSelected()\">−</span>\n        </span>\n        <span>Select all</span>\n      </li>\n\n      <li *ngFor=\"let item of orderedOptions; let i = index\"\n        class=\"multi-select-option\"\n        (mousedown)=\"toggleOption(item, $event)\"\n        [ngClass]=\"{ 'selected': isSelected(item), 'selected-divider': isLastSelectedOption(i) }\"\n        [style.font-size]=\"question?.fontSize || inputValueSize || '12px'\">\n        <div class=\"item-content\">\n          <div class=\"item-details\">\n            <div class=\"item-text\">\n              <div class=\"item-name primary\" [innerHTML]=\"highlightOptionText(getOptionPrimaryText(item))\"></div>\n              <div class=\"item-secondary\" *ngIf=\"getOptionSecondaryValues(item).length > 0\">\n                <ng-container *ngFor=\"let value of getOptionSecondaryValues(item); let last = last\">\n                  <span class=\"secondary-text\" [innerHTML]=\"highlightOptionText(value)\"></span>\n                  <span class=\"separator\" *ngIf=\"!last\"> | </span>\n                </ng-container>\n              </div>\n            </div>\n            <span *ngIf=\"isSelected(item)\" class=\"option-selected-mark\">✓</span>\n          </div>\n        </div>\n      </li>\n    </ng-container>\n  </ul>\n</div>\n","import { Pipe, PipeTransform } from '@angular/core';\n\n@Pipe({\n  name: 'buttonStyles',\n  pure: true,\n  standalone: true,\n})\nexport class ButtonStylesPipe implements PipeTransform {\n  transform(config: any): { [key: string]: string } {\n    return {\n      'button-custom-bg': config.btnBgColor || '',\n      'button-custom-border': config.btnBorder || '',\n      'button-custom-color': config.btnTextColor || '',\n      'button-custom-height': config.btnHeight || '',\n      'button-custom-width': config.btnWidth || '',\n      'button-hover-bg': config.btnHoverBgColor || '',\n      'button-hover-text-color': config.btnHoverTextColor || ''\n    };\n  }\n}\n","import { CommonModule } from '@angular/common';\nimport { ChangeDetectorRef, Component, ElementRef, EventEmitter, HostListener, Input, OnInit, Output, SimpleChanges } from '@angular/core';\nimport { NxtCustomTranslatePipe } from '../../pipe/custom-translate.pipe';\nimport { ButtonStylesPipe } from '../../pipe/button-styles.pipe';\nimport { TranslationService } from '../../services/translation/translation.service';\n@Component({\n  selector: 'nxt-button',\n  standalone: true,\n  imports: [CommonModule, NxtCustomTranslatePipe, ButtonStylesPipe],\n  templateUrl: './nxt-button.component.html',\n  styleUrls: ['./nxt-button.component.css']\n})\nexport class NxtButtonComponent implements OnInit {\n \n  @Input() buttonValue: string = ''; //SKS24JAN25 button text \n  @Input() buttonType: string = 'primary'; //SKS24JAN25 If the button type is 'text-only', it should display only the text without a border or outline. For 'grey-text', the button should have a border and a background color, but the text color should be gray, similar to 'blue-text'\n  @Input() type: string = 'button'; //SKS24JAN25 The button types are \"button,\" \"group,\" and \"dropdown.\"\n  @Input() buttonDisable: boolean = false; //SKS24JAN25 use this input to disable a button when needed.\n  @Input() btnBgColor: string = ''; // Use this input to set a custom background color for the button.\n  @Input() btnBorder: string = ''; // Use this input to set a custom border style for the button.\n  @Input() btnBorderRadius: string = ''; \n  @Input() btnBorderColor: string = '';\n  @Input() btnTextColor: string = ''; // Use this input to set a custom text color for the button.\n  @Input() btnHeight: string = ''; // Use this input to set a custom height for the button.\n  @Input() btnWidth: string = ''; // Use this input to set a custom width for the button.\n  @Input() btnIconLeftSrc: string = ''; // Use this input to set the source of the left-side icon for the button.\n  @Input() btnIconRightSrc: string = ''; // Use this input to set the source of the right-side icon for the button.\n  @Input() btnHoverBgColor: string = ''; // Use this input to set the background color of the button on hover.\n  @Input() btnHoverTextColor: string = ''; // Use this input to set the text color of the button on hover.\n  @Input() btnId: string = 'default'; // Use this input to set a custom ID for the button. Default is 'default'.\n  @Input() dataDismiss: string = ''; // Use this input to specify the dismiss action for the button (e.g., 'modal' to close a modal).\n  @Input() modalToTrigger: string = ''; // Use this input to specify the ID or target of the modal to be triggered.\n  @Input() isImageSvg: boolean = false; // Use this input to determine if the image is an SVG. Default is false (non-SVG).\n  @Input() tabIndex: any = '';// Use this input to set the tab index for the element, controlling the focus order.\n  @Input() buttonConfig: any = ''; // Use this input to pass configuration settings for the group and dropdown buttons (e.g., styles, actions).\n  @Input() mode: 'view' | 'edit' | 'print' = 'edit'; // New mode input\n  @Input() languageCode: any ;\n  @Input() padding: any\n  @Input() isLoading: boolean = false; //SKS4SEP25 Set to true to show a loading animation\n  @Input() selector: boolean = false; // SKS16OCT25 flag to enable button selection style\n  @Input() dropdownLoadingButton: any\n  \n  @Output() buttonClickEmit:EventEmitter<any> = new EventEmitter<any>();\n  \n  iconSrc: any = ''; // Ensure it's always a string\n  isDropdownOpen = false;\n\n  \n\n  // SKS24JAN25 dropdown button config\n\n  // dropdownButton = {\n  //   btnBgColor: '#007bff',\n  //   btnBorder: '1px solid #0056b3',\n  //   btnTextColor: '#ffffff',\n  //   btnHeight: '40px',\n  //   btnWidth: '150px',\n  //   btnHoverBgColor: '#0056b3',\n  //   btnHoverTextColor: '#ffffff',\n  //   label: 'Dropdown',\n  //   iconSrc: '',\n  //   items: [\n  //     { label: 'Action 1',iconSrc: '', hover: false },\n  //     { label: 'Action 2',iconSrc: '', hover: false },\n  //     { label: 'Action 3',iconSrc: '', hover: false }\n  //   ]\n  // };\n  constructor(private cdRef: ChangeDetectorRef, private translationService: TranslationService, private elementRef: ElementRef) { }\n\n  ngOnInit(): void {\n    // SKS14JUL25 Initialize language settings on component load\n    // SKS14JUL25 Get the saved language from localStorage (if any)\n    let lang = this.languageCode || this.translationService.getLanguage() || localStorage.getItem('language') || 'en';\n    // SKS14JUL25 If languageCode is already set (e.g., from input or config), apply it\n    if (lang) {\n      this.translationService.setLanguage(this.languageCode);\n      this.languageCode = lang;\n    }\n    // SKS14JUL25 Subscribe to translation load event to trigger change detection,\n    //SKS14JUL25 ensuring that translations using pipes get updated properly\n    this.translationService.translationsLoaded$.subscribe(() => {\n      this.cdRef.detectChanges(); //SKS14JUL25 Force pipe re-evaluation after language change\n    });\n  }\n  \n  ngOnChanges(changes: SimpleChanges) {\n    // SKS14JUL25 Check if there's a change in the input property 'languageCode'\n    if (changes['languageCode']) {\n      // SKS14JUL25 If new languageCode is set, update the translation service\n      if (this.languageCode) {\n        this.translationService.setLanguage(this.languageCode);\n      }\n    }\n    if(changes['dropdownLoadingButton'] && (this.dropdownLoadingButton === \"\" || this.dropdownLoadingButton === null || this.dropdownLoadingButton == undefined)){\n      this.isDropdownOpen = false;\n    }\n  } \n  // SKS15OCT25 active sate set \n  setActive(selectedBtn: any) {\n    this.buttonConfig.buttons.forEach(btn => btn.isActive = false);\n    selectedBtn.isActive = true;\n  }\n  // SKS21NOV25 when clicking main dropdown button\n  onMainButtonClick(btn: any) {\n    // If it's NOT expanding button → act normal\n    if (!btn.isExpendingButton) {\n      this.buttonClicked(btn);\n      return;\n    }\n    // Toggle expand\n    btn.expanded = !btn.expanded;\n  }\n  // SKS21NOV25 When selecting radio/checkbox option\n  onOptionSelect(btn: any, fld: any) {\n    btn.selectedOption = fld.name;\n  }\n  buttonClicked(btn:any){\n    this.buttonClickEmit.emit(btn);\n    if(this.isDropdownOpen && !btn.isLoaderButtion){\n      this.isDropdownOpen=false\n    } \n    if(btn.isExpendingButton){\n      btn.expanded = !btn.expanded;\n    }\n  }\n\n  toggleDropdown() {\n    this.isDropdownOpen = !this.isDropdownOpen;\n  }\n//SKS24JAN25 Listener for clicks outside the dropdown button to close or manage its state.\n  @HostListener('document:click', ['$event'])\n  onClickOutside(event: MouseEvent) {\n    if (this.isDropdownOpen && !this.elementRef.nativeElement.contains(event.target)) {\n      this.isDropdownOpen = false;\n    }\n  }\n}\n","<!-- SKS24JAN25 group button -->\n<div *ngIf=\"type === 'group'\" class=\"btn-group\" role=\"group\" aria-label=\"Button Group\">\n    <button *ngFor=\"let btn of buttonConfig.buttons\"\n            type=\"button\"  [style.padding]=\"btn.padding ? btn.padding : ''\"\n            class=\"btn btn-icon {{btn.buttonType}} tooltip-container\"\n            [attr.tabindex]=\"btn.tabIndex\"\n            [attr.data-bs-toggle]=\"btn.modalToTrigger ? 'modal' : null\"\n            [attr.data-bs-target]=\"btn.modalToTrigger ? '#' + btn.modalToTrigger : null\"\n            [ngStyle]=\"btn | buttonStyles\"\n            [disabled]=\"btn.buttonDisable\"\n            [attr.data-bs-dismiss]=\"btn.dataDismiss\"\n            (click)=\"buttonClicked(btn);setActive(btn)\"\n            [class.active]=\"selector && btn.isActive\"\n            [attr.id]=\"btn.btnId !== 'default' ? btn.btnId : null\">\n        <div class=\"flex\" style=\"gap: 3px; align-items: center;\">\n            <img *ngIf=\"btn.isImageSvg && (btn.svgPosition === 'start' || !btn.isLabel)\" [src]=\"btn.iconSrc\">\n            <div *ngIf=\"btn.isLabel\" style=\"color: {{btn.labelColor}}; font-size: 12px;  align-items: center;\"> {{btn.label || btn.tooltip | nxtCustomTranslate : btn.label || btn.tooltip}}</div>\n            <img *ngIf=\"btn.isImageSvg && btn.svgPosition === 'end'\" [src]=\"btn.iconSrc\">\n        </div>\n        <div *ngIf=\"btn.tooltip\" class=\"custom-tooltip\" \n            style=\"background-color:{{btn.tooltipBcColor}};\n            color:{{btn.tooltipColor}};\n            font-size:{{btn.tooltipFSize}}\">\n            {{ btn.tooltipPath ? (btn.tooltipPath | nxtCustomTranslate : btn.tooltip) : (btn.tooltip | nxtCustomTranslate : btn.tooltip) }}\n            <div class=\"tooltip-pointer\" style=\"background-color:{{btn.tooltipBcColor}};\"></div>\n        </div>\n    </button>\n</div>\n  \n<!-- SKS24JAN25 single button -->\n<button type=\"button\"  *ngIf=\"type !== 'group' && type !== 'dropdown'\" class=\"btn fc-button {{buttonType}}\" [tabindex]=\"tabIndex\"\n    [attr.data-bs-toggle]=\"modalToTrigger != '' ? 'modal' : ''\"\n    [attr.data-bs-target]=\"modalToTrigger != '' ? '#'+modalToTrigger : ''\"\n    [ngClass]=\"buttonType === 'custom-btn' || buttonType === 'border-btn'  ? '' : 'btn-primary'\"   \n    [ngStyle]=\"buttonType === 'custom-btn' ? {\n        '--button-custom-bg': btnBgColor ?? null,\n        '--button-custom-border': btnBorder\n            ? (btnBorder + 'px solid ' + (btnBorderColor || 'transparent'))\n            : null,\n        '--button-custom-border-radius': btnBorderRadius ? btnBorderRadius + 'px' : null,\n        '--button-custom-color': btnTextColor ?? null,\n        '--button-custom-height': btnHeight ? btnHeight + 'px' : null,\n        '--button-custom-width': btnWidth ? btnWidth + 'px' : null,\n        '--button-hover-bg': btnHoverBgColor ?? null,\n        '--button-hover-text-color': btnHoverTextColor ?? null\n    } : buttonType === 'border-btn' ? {\n        '--button-border-btn-bg': btnBgColor ?? null,\n        '--button-border-btn-border': btnBorder && btnBorderColor\n            ? (btnBorder + 'px solid ' + (btnBorderColor))\n            : null,\n        '--button-custom-border-radius': btnBorderRadius ? btnBorderRadius + 'px' : null,\n        '--button-border-btn-color': btnTextColor ?? null,\n        '--button-custom-height': btnHeight ? btnHeight + 'px' : null,\n        '--button-custom-width': btnWidth ? btnWidth + 'px' : null,\n        '--button-border-btn-hover-bg': btnHoverBgColor ?? null,\n        '--button-border-btn-hover-text-color': btnHoverTextColor ?? null\n    } : {\n        '--button-custom-bg': btnBgColor ?? null,\n        '--button-custom-border': btnBorder\n            ? (btnBorder + 'px solid ' + (btnBorderColor || 'transparent'))\n            : null,\n        '--button-custom-border-radius': btnBorderRadius ? btnBorderRadius + 'px' : null,\n        '--button-custom-color': btnTextColor ?? null,\n        '--button-custom-height': btnHeight ? btnHeight + 'px' : null,\n        '--button-custom-width': btnWidth ? btnWidth + 'px' : null,\n        '--button-hover-bg': btnHoverBgColor ?? null,\n        '--button-hover-text-color': btnHoverTextColor ?? null\n    }\"\n    [style.padding]=\"padding ? padding : ''\"\n    [disabled]=\"isLoading || buttonDisable\" [attr.data-bs-dismiss]='dataDismiss' (click)=\"buttonClicked($event)\"\n    [attr.id]=\"btnId != 'default' ? btnId : null\"\n    style=\"display: flex; align-items: center; justify-content: center;\">\n    <img *ngIf=\"btnIconLeftSrc && btnIconLeftSrc != '' && isImageSvg\" src=\"{{btnIconLeftSrc}}\"\n        class=\"fc-btn-icon left-icon\">\n    <img *ngIf=\"btnIconLeftSrc && btnIconLeftSrc != '' && !isImageSvg\" src=\"{{btnIconLeftSrc}}\" class=\"fc-btn-icon left-icon\">\n    <div class=\"fc-btn-text\">{{buttonValue}}</div>\n    <img *ngIf=\"btnIconRightSrc && btnIconRightSrc != '' && isImageSvg\" src=\"{{btnIconRightSrc}}\"\n        class=\"fc-btn-icon right-icon\">\n    <img *ngIf=\"btnIconRightSrc && btnIconRightSrc != '' && !isImageSvg\" src=\"{{btnIconRightSrc}}\" class=\"fc-btn-icon right-icon\">\n    <!-- SKS4SEP25 api call Dotted Loader -->\n    <div *ngIf=\"isLoading\" class=\"dotted-loader\" aria-label=\"Loading\" role=\"status\">\n        <div *ngFor=\"let dot of [].constructor(6); let i = index\" class=\"dot\" [style.--i]=\"i\"></div>\n    </div>\n</button>\n\n<!-- SKS24JAN25 dropdown button -->\n<div *ngIf=\"type === 'dropdown'\" class=\"dropdown\">\n    <div class=\"clickable-img\" (click)=\"toggleDropdown()\" [style.padding]=\"buttonConfig.padding ? buttonConfig.padding : ''\">\n        <svg *ngIf=\"!buttonConfig.isImageSvg\" width=\"40\" height=\"40\" viewBox=\"0 0 40 40\" fill=\"none\" xmlns=\"http://www.w3.org/2000/svg\">\n            <rect x=\"0.3\" y=\"0.3\" width=\"39.4\" height=\"39.4\" rx=\"11.7\" fill=\"#FAFBFD\" stroke=\"#D5D5D5\" stroke-width=\"0.6\"/>\n            <path d=\"M19.9999 25.6667C23.6818 25.6667 26.6666 22.6819 26.6666 19C26.6666 15.3181 23.6818 12.3334 19.9999 12.3334C16.318 12.3334 13.3333 15.3181 13.3333 19C13.3333 22.6819 16.318 25.6667 19.9999 25.6667Z\" fill=\"#292D32\" stroke=\"#292D32\" stroke-width=\"1.5\" stroke-miterlimit=\"10\" stroke-linecap=\"round\" stroke-linejoin=\"round\"/>\n            <path d=\"M17.6467 18.16L20.0001 20.5067L22.3534 18.16\" stroke=\"white\" stroke-width=\"1.5\" stroke-linecap=\"round\" stroke-linejoin=\"round\"/>\n        </svg>  \n        <!-- SKS15OCT25 label and svg -->\n        <img *ngIf=\"buttonConfig.isImageSvg && buttonConfig.svgPosition === 'start'\" [src]=\"buttonConfig.iconSrc\">\n        <div *ngIf=\"buttonConfig.isLabel\" style=\"color: {{buttonConfig.labelColor}}; font-size: 12px;\"> {{buttonConfig.label || buttonConfig.tooltip | nxtCustomTranslate : buttonConfig.label || buttonConfig.tooltip}}</div>\n        <img *ngIf=\"buttonConfig.isImageSvg && buttonConfig.svgPosition === 'end'\" [src]=\"buttonConfig.iconSrc\">\n    </div>\n    <div class=\"dropdown-menu\"  *ngIf=\"isDropdownOpen\" (click)=\"$event.stopPropagation()\">\n        <ng-container *ngFor=\"let btn of buttonConfig.buttons\">\n            <button type=\"button\" [style.padding]=\"btn.padding ? btn.padding : ''\"\n                class=\"btn btn-icon {{btn.buttonType}} tooltip-container\"\n                [attr.tabindex]=\"btn.tabIndex\"\n                [attr.data-bs-toggle]=\"btn.modalToTrigger ? 'modal' : null\"\n                [attr.data-bs-target]=\"btn.modalToTrigger ? '#' + btn.modalToTrigger : null\"\n                [ngStyle]=\"btn | buttonStyles\"\n                [disabled]=\"btn.buttonDisable || (btn.isLoaderButtion && dropdownLoadingButton === btn.name)\"\n                [attr.data-bs-dismiss]=\"btn.dataDismiss\"\n                (click)=\"onMainButtonClick(btn)\"\n                [attr.id]=\"btn.btnId !== 'default' ? btn.btnId : null\">\n                <div  style=\"display: flex;\">\n                    <img *ngIf=\"btn.isImageSvg\" [src]=\"btn.iconSrc\">\n                    <div class=\"fc-btn-text\" style=\"padding-left: 12px;\">{{btn.name}} </div>\n                    <!-- SKS4SEP25 api call Dotted Loader -->\n                    <div *ngIf=\"btn.isLoaderButtion && (dropdownLoadingButton === btn.name)\" class=\"small-dotted-loader\" aria-label=\"Loading\" role=\"status\">\n                        <div *ngFor=\"let dot of [].constructor(6); let i = index\" class=\"dot\" style=\"background-color: gray;\" [style.--i]=\"i\"></div>\n                    </div>\n                </div>\n            </button>\n            <!-- SKS21NOV25 EXPANDED AREA (ONLY FOR isExpendingButton = TRUE) -->\n            <div *ngIf=\"btn.isExpendingButton && btn.expanded\" class=\"expand-box\">\n                <div *ngFor=\"let fld of btn.expendFieldList; let i = index\" class=\"expand-field\">\n                  <label class=\"flex\" style=\"cursor: pointer;gap: 3px; font-size: 13px; padding-left: 8px;\">\n                    <input \n                      style=\"width: auto !important;\"\n                      [id]=\"btn.name + '_' + i\"\n                      [type]=\"fld.type\"\n                      [name]=\"btn.name\"\n                      [value]=\"fld.label\"\n                      [checked]=\"btn.selectedOption === fld.name\"\n                      (change)=\"onOptionSelect(btn, fld)\"\n                    >\n                    {{ fld.label }}\n                  </label>\n                </div>\n                <div class=\"selected-output\">\n                    <div *ngFor=\"let fld of btn.expendFieldAction; let i = index\" (click)=\"$event.stopPropagation()\" style=\"display: flex; justify-content: end; gap: 3px; padding-right: 5px;\">\n                      <button style=\"border: 1px solid gray; border-radius: 3px; font-size: 12px;\"\n                        [disabled]=\"!btn.selectedOption\" \n                        (click)=\"buttonClicked(btn); $event.stopPropagation()\"\n                      >\n                        {{ fld.name }}\n                      </button>\n                    </div>\n                  </div>                  \n              </div>              \n        </ng-container>\n    </div>\n</div>\n","import { CommonModule } from '@angular/common';\nimport { Component, EventEmitter, Input, OnInit, Output, SimpleChanges } from '@angular/core';\nimport { FormsModule } from '@angular/forms';\nimport { NxtCustomTranslatePipe } from '../../pipe/custom-translate.pipe';\n\n\n@Component({\n  selector: 'nxt-pagination',\n  standalone: true,\n  imports: [CommonModule, FormsModule, NxtCustomTranslatePipe],\n  templateUrl: './pagination.component.html',\n  styleUrl: './pagination.component.css'\n})\nexport class NxtPagination implements OnInit {\n  @Output() event = new EventEmitter<any>;\n  // page size Options\n  @Input() pageSizeOptions: number[] = [5, 10, 15, 20, 50];\n  /** The total number of records */\n  @Input() collectionSize = 0;\n\n  /** The number of records to display */\n  @Input() pageSize = 10;\n\n  /** Current page */\n  @Input() currentPage = 1;\n\n  /** The number of buttons to show either side of the current page */\n  @Input() maxSize = 2;\n\n  /** Display the First/Last buttons */\n  @Input() firstLastButtons = false;\n\n  /** Display the Next/Previous buttons */\n  @Input() nextPreviousButtons = true;\n\n  /** Display small pagination buttons */\n  @Input() small = false;\n\n  totalPages: any[] = [];\n  startIndex = 0;\n  endIndex = 0;\n\n  constructor() {}\n\n  ngOnInit(): void {\n    this.pageSize = this.pageSize ?? 10; // Ensure a default value\n    this.currentPage = this.currentPage === 0 ? 1 : this.currentPage\n    if (this.collectionSize) {\n      this.totalPages = new Array(Math.ceil(this.collectionSize / Number(this.pageSize)));\n    }\n    this.updateIndexes();\n  }\n\n  ngOnChanges(changes: SimpleChanges) {\n    this.pageSize = this.pageSize ?? 10; // Ensure a default value\n    this.currentPage = this.currentPage === 0 ? 1 : this.currentPage ?? 1\n    if (this.collectionSize) {\n      this.totalPages = new Array(Math.ceil(this.collectionSize / Number(this.pageSize)));\n    }\n    this.updateIndexes();\n  }\n  updateIndexes() {\n    this.startIndex = (this.currentPage - 1) * Number(this.pageSize);\n    this.endIndex = Math.min(this.startIndex + Number(this.pageSize), this.collectionSize);\n  }\n\n  /** Set page number */\n  selectPageNumber(pageNumber: number) {\n    this.currentPage = pageNumber;\n    this.updateIndexes();\n    this.emit()\n  }\n\n  /** Set next page number */\n  next() {\n    const nextPage = this.currentPage + 1;\n    nextPage <= this.totalPages.length && this.selectPageNumber(nextPage);\n  }\n\n  /** Set previous page number */\n  previous() {\n    const previousPage = this.currentPage - 1;\n    previousPage >= 1 && this.selectPageNumber(previousPage);\n  }\n  onPageSizeChange(newSize:any): void {\n    this.pageSize = newSize; // Update the pageSize\n    this.totalPages = new Array(Math.ceil(this.collectionSize / this.pageSize));\n    // Ensure the current page is within bounds\n    // if (this.currentPage > this.totalPages.length) {\n    //   this.currentPage = this.totalPages.length;\n    // }\n    this.currentPage = 1\n    this.updateIndexes();\n    this.emit(); // Emit an event if necessary\n  }    \n  emit(){\n    this.event.emit({\"length\":this.collectionSize, \"pageSize\": this.pageSize, \"pageIndex\" : this.currentPage})\n  }\n}","<!-- SKS24JAN25 -->\n<div class=\"flex content-space-between main-cont\">\n    <div class=\"info\" style=\"padding-left: 6px;\">\n     <div *ngIf=\"endIndex\">\n     {{'SHOWING_DATA' | nxtCustomTranslate : 'Showing data'}}  {{ startIndex + 1 }} {{'TO' | nxtCustomTranslate : 'to'}} {{ endIndex }} {{'OF' | nxtCustomTranslate : 'of'}}  {{ collectionSize }} {{'ENTRIES' | nxtCustomTranslate : 'entries'}} \n    </div>\n   </div>\n    <div>\n     <ul [class]=\"small ? 'pagination pagination-sm' : 'pagination'\" style=\"align-items: center;\">\n        <!-- select button -->\n       <div style=\"font-size: 14px; font-weight: 400; padding-right: 10px; align-items: center;\" for=\"perPage\">{{'RESULT_PER_PAGE' | nxtCustomTranslate : 'Result per page'}}</div>\n       <div class=\"dropdown-wrapper\">\n         <select id=\"perPage\" [ngModel]=\"pageSize\" (ngModelChange)=\"onPageSizeChange($event)\">\n           <option *ngFor=\"let size of pageSizeOptions\" [value]=\"size\">{{ size }}</option>\n         </select>\n         <svg class=\"dropdown-arrow\" width=\"9\" height=\"6\" viewBox=\"0 0 9 6\" fill=\"none\" xmlns=\"http://www.w3.org/2000/svg\">\n           <path fill-rule=\"evenodd\" clip-rule=\"evenodd\" d=\"M0.684136 0.767477C0.922999 0.5378 1.30282 0.545248 1.5325 0.784111L4.5 3.93431L7.4675 0.784111C7.69718 0.545248 8.077 0.5378 8.31587 0.767477C8.55473 0.997153 8.56218 1.37698 8.3325 1.61584L4.9325 5.21584C4.81938 5.33349 4.66321 5.39998 4.5 5.39998C4.33679 5.39998 4.18062 5.33349 4.0675 5.21584L0.667501 1.61584C0.437825 1.37698 0.445272 0.997153 0.684136 0.767477Z\" fill=\"#626262\"/>\n          </svg>   \n       </div>     \n       <!-- first button -->\n       <li [class]=\"currentPage === 1 ? 'page-item disabled' : 'page-item'\" *ngIf=\"firstLastButtons\" >\n         <button class=\"page-link\" (click)=\"selectPageNumber(1)\">««</button>\n       </li>\n       <!-- last button -->\n       <li [class]=\"currentPage === totalPages.length ? 'page-item disabled' : 'page-item'\" *ngIf=\"firstLastButtons\">\n         <button class=\"page-link\" (click)=\"selectPageNumber(totalPages.length)\">»»</button>\n       </li>\n       <!-- previous button -->\n       <li [class]=\"currentPage === 1 ? 'page-item disabled' : 'page-item'\" *ngIf=\"nextPreviousButtons\" >\n         <button class=\"page-link\" (click)=\"previous()\">«</button>\n       </li>\n       <!-- page numbers -->\n       <ng-container *ngFor=\"let p of totalPages; index as i\">\n         <li *ngIf=\"i + 1 >= currentPage - maxSize && i + 1 <= currentPage + maxSize\" [class]=\"currentPage === i + 1 ? 'page-item active' : 'page-item'\">\n           <button class=\"page-link\" (click)=\"selectPageNumber(i + 1)\">\n             {{ i + 1 }}\n           </button>\n         </li>\n       </ng-container>\n       <!-- next button -->\n       <li [class]=\"currentPage === totalPages.length ? 'page-item disabled' : 'page-item'\" *ngIf=\"nextPreviousButtons\">\n         <button class=\"page-link\" (click)=\"next()\">»</button>\n       </li>\n     </ul>\n    </div>\n </div>\n   ","import { Pipe, PipeTransform } from '@angular/core';\n\n\n@Pipe({\n  name: 'searchFilter',\n  pure: true,\n  standalone: true\n})\nexport class NxtSearchFilterPipe implements PipeTransform {\n\n\n  //getting the array datas and search data from pipe element on every change\n  transform(items: any[], searchText: string, ele?:any): any[] {\n    if (!items) return [];\n    if (!searchText) return items;\n    return this.searchItems(items, searchText?.toLowerCase(), ele);\n  }\n  // passing that data here, and if the search element included in that array, that element will be returned in new array\n  private searchItems(items: any[], searchText: string, ele?:any): any[] {\n    let results: any[] = [];\n    items.forEach((data: any) => {\n      if(ele){\n        if (data[ele]?.toLowerCase().includes(searchText)) {\n          results.push(data);\n        }\n      } else {\n        if (data?.toLowerCase().includes(searchText)) {\n          results.push(data);\n        }\n      }\n    });\n    return results;\n  }\n}","import { Pipe, PipeTransform } from '@angular/core';\nimport { DomSanitizer } from '@angular/platform-browser';\n\n@Pipe({\n  name: 'getValue',\n  pure: false,\n  standalone: true\n})\nexport class NxtGetValuePipe implements PipeTransform {\n  constructor(private sanitizer: DomSanitizer) {}\n  transform(element: any, column: any, type?: any, ques?: any, from?: any, mode?:any): any {\n    if (!element || !column) return from === 'table' ? '' : '';\n    const flds = column?.split('.');\n    for (let i = 0; i < flds?.length; i++) {\n      if (element === null || element === undefined) return from === 'table' ? '' : ''; // <-- Protect against null here\n      let splitFlds = flds[i].split('[');\n      if (splitFlds.length === 1) {\n        const value = element[splitFlds[0]];\n        if (typeof value === \"number\") {\n          element = value ?? 0;\n        } else if (typeof value === \"boolean\") {\n          element = value;\n        } else {\n          element = (value && value !== '') ? value : (from === 'table' ? '' : '');\n        }\n      } else {\n        const arrayKey = splitFlds[0];\n        const index = Number(splitFlds[1].split(']')[0]);\n        if (!element[arrayKey] || !Array.isArray(element[arrayKey])) return from === 'table' ? '' : '';\n        const value = element[arrayKey][index];\n        if (typeof value === \"number\") {\n          element = value ?? 0;\n        } else if (typeof value === \"boolean\") {\n          element = value;\n        } else {\n          element = (value && value !== '') ? value : (from === 'table' ? '' : '');\n        }\n      }\n    }\n    if(type === 'list'){\n      if(typeof element === 'string'){\n        return element\n      } else {\n        return this.listDataGet(element, ques,from,mode)\n      }\n    }\n    if (typeof element === 'boolean') return element;\n    if (typeof element === 'number') return element;\n    return element ?? '';\n  }  \n  // SKS11AUG25 list data get function\n  listDataGet(event: any, ques?: any, from?: any, mode?: any): any {\n    const values = this.getValues(event, ques?.question?.subText?.field, from);\n    const filteredValues = Object.values(values).filter(val => val && val !== '');\n    if (mode === 'view') {\n      if (filteredValues.length === 0) return from === 'table' ? '' : '';\n      const html = filteredValues\n        .map((val, index) => {\n          if (index === 0) {\n            return filteredValues.length > 1 ? `<b>${val}</b>` : val ;\n          } else if (index === 1) {\n            return `<span style=\"font-size: 12px !important;\">${val}</span>`;\n          } else {\n            return `<small style=\"font-size: 11px !important;\">${val}</small>`;\n          }\n        })\n        .join('<br>');\n  \n      return this.sanitizer.bypassSecurityTrustHtml(html);\n    }\n    return filteredValues.join(' | ') || (from === 'table' ? '' : '');\n  }\n  // SKS11AUG25 data get from array fields\n  public getValues(element: any, columns: any, from?: any): any {\n    const result: any = {};\n    if (!element || !columns) return result;\n    const columnArray = Array.isArray(columns) ? columns : [columns];\n    columnArray.forEach((column) => {\n      if (!column) return;\n      let tempElement = element;\n      const fields = column.split('.');\n      for (const field of fields) {\n        if (!tempElement) break;\n        const splitFields = field.split('[');\n        if (splitFields.length === 1) {\n          tempElement = tempElement[field];\n        } else {\n          const indexMatch = splitFields[1]?.match(/(\\d+)\\]/);\n          if (indexMatch) {\n            const index = Number(indexMatch[1]);\n            tempElement = tempElement[splitFields[0]]?.[index];\n          }\n        }\n      }\n      result[column] = tempElement || (from === 'table' ? '' : '');\n    });\n    return typeof result === \"boolean\" ? result : typeof result === \"number\" ? result ?? 0 : result || '';\n  }\n}\n","import { Component, OnInit, Input, Output, EventEmitter, HostListener, SimpleChanges } from '@angular/core';\nimport { CommonModule } from '@angular/common';\nimport { FormsModule, ReactiveFormsModule, FormBuilder, FormGroup, FormArray, Validators } from '@angular/forms';\nimport { NxtCustomTranslatePipe } from '../../pipe/custom-translate.pipe';\nimport { MatTooltipModule } from '@angular/material/tooltip';\nimport { DataService } from '../../services/data/data.service';\n\ninterface ListView {\n  filterName: string;\n  labelPath: any;\n  order: number;\n  isDefault: boolean;\n  isSelected:boolean;\n  system: boolean;\n  conditions: ListViewFilter[];\n  columns: ListViewColumn[];\n}\n\ninterface ListViewFilter {\n  field: string;\n  operator: string;\n  value: string;\n}\n\ninterface ListViewColumn {\n  name: string;\n  sortable: boolean;\n  filterable: boolean;\n}\n\n@Component({\n  selector: 'app-list-view-filter',\n  standalone: true,\n  imports: [CommonModule, FormsModule, ReactiveFormsModule, NxtCustomTranslatePipe,MatTooltipModule],\n  providers: [NxtCustomTranslatePipe],\n  templateUrl: './list-view-filter.component.html',\n  styleUrls: ['./list-view-filter.component.css']\n})\nexport class ListViewFilterComponent implements OnInit {\n  @Input() listViews: ListView[] = [];\n  @Input() tableData: any = [];\n  @Input() tableFilterArray: any = [];\n  @Input() selectedView: string = '';\n  @Input() displayedColumns: any = [];\n  @Input() title: any;\n  @Input() availableOperators: { label: string,labelPath: string, value: string }[] = [\n    { label: 'Equals (=)',labelPath:'EQUALS', value: '=' },\n    { label: 'Not Equal (!=)',labelPath:'NOT_EQUAL', value: '!=' },\n    { label: 'Greater Than (>)',labelPath:'GREATER_THAN', value: '>' },\n    { label: 'Less Than (<)',labelPath:'LESS_THAN', value: '<' },\n    { label: 'Greater Than or Equal (>=)',labelPath:'GREATER_THAN_OR_EQUAL', value: '>=' },\n    { label: 'Less Than or Equal (<=)',labelPath:'LESS_THAN_OR_EQUAL', value: '<=' }\n  ];  // 'contains', 'not contains', 'starts with', 'ends with'\n\n  @Output() listViewEmit = new EventEmitter<any>();\n\n  isDropdownOpen: boolean = false;\n  isModalOpen: boolean = false;\n  isDeleteModalOpen: boolean = false;\n  isAdding: boolean = false;\n  viewToDelete: ListView | null = null;\n\n  editingView: FormGroup;\n\n  isColumnDropdownOpen: boolean[] = [];\n  isOperatorDropdownOpen: boolean[] = [];\n  isValueDropdownOpen: boolean[] = [];\n  isColumnNameDropdownOpen: boolean[] = [];\n  selectedViewPath: string;\n  tableFilterArrayTrans: any;\n  displayedColumnsTrans: any;\n  availableOperatorsTrans: { label: string; value: string; }[];\n  conditions: FormArray;\n  columns: FormArray;\n  staticFilterData = [{\n    \"filterName\": \"All Data\",\n    \"label\": \"All Data\",\n    \"labelPath\": \"APP.ALL_DATA\",\n    \"isDefault\": false,\n    \"isSelected\": false,\n    \"system\": true,\n    \"order\": 1,\n    \"conditions\": [],\n    \"columns\": [],\n    \"_id\": \"6818bfe226163850ecb084ee\",\n    \"id\": \"6818bfe226163850ecb084ee\"\n},\n{\n  \"filterName\": \"Closed Records\",\n  \"label\": \"Closed Records\",\n  \"labelPath\": \"APP.CLOSED_RECORDS\",\n  \"isDefault\": false,\n  \"isSelected\": false,\n  \"system\": true,\n  \"order\": 2,\n  \"conditions\": [],\n  \"columns\": [],\n  \"_id\": \"6818bfe226163850ecb084ee1\",\n  \"id\": \"6818bfe226163850ecb084ee1\"\n}\n]\n\n  constructor(private fb: FormBuilder,private nxtCustomTranslate: NxtCustomTranslatePipe, private dataService: DataService) {\n    this.editingView = this.fb.group({\n      filterName: ['', Validators.required],\n      order: [0, [Validators.required, Validators.min(0)]],\n      isDefault: [false],\n      conditions: this.fb.array([]),\n      columns: this.fb.array([])\n    });\n  }\n\n  ngOnInit(): void {\n    if (!this.listViews || (this.listViews && !this.listViews.some(ele => ele.filterName === 'All Data'))) {\n      this.listViews = [...(this.staticFilterData), ...(this.listViews || [])];\n    }\n    if (!this.selectedView && this.listViews?.length > 0) {\n      if(this.listViews.some(ele => ele.isSelected)){\n        let tempfilter = this.listViews.find(ele => ele.isSelected)\n        this.selectedView = tempfilter.filterName;\n        this.selectedViewPath = tempfilter.labelPath\n      } else {\n        this.selectedView = this.listViews[0].filterName;\n        this.selectedViewPath = this.listViews[0].labelPath\n      }\n    } else {\n      if(this.listViews.some(ele => ele.isSelected)){\n        let tempfilter = this.listViews.find(ele => ele.isSelected)\n        this.selectedView = tempfilter.filterName;\n        this.selectedViewPath = tempfilter.labelPath\n      } else {\n        this.selectedViewPath = this.selectedView === 'All Data' ? this.listViews[0].labelPath : this.selectedView\n      }\n    }\n    // SKS9oct25 filter condtion label retain\n    if(this.listViews?.length > 0 && this.displayedColumns?.length > 0){\n      for(const listView of this.listViews){\n        if(listView?.conditions?.length > 0){\n          for(const cond of listView?.conditions){\n            for( const col of this.displayedColumns){\n              if(cond.field === col.filterField){\n                cond.field = col.label\n              }\n              if(cond.field === col.label && col.filterValue){\n                for(const tableData of this.tableData){\n                  let res = this.dataService.getValue(tableData, col.filterValue)\n                  if(res === cond.value){\n                    cond.value = this.dataService.getValue(tableData, col.fieldName) || cond.value\n                  }\n                }\n              }\n            }\n          }\n        }\n      }\n    }\n    if(this.tableFilterArray){\n      this.tableFilterArrayTrans =this.tableFilterArray\n      this.tableFilterArrayTrans.forEach((ele:any) => {\n        ele.label = this.nxtCustomTranslate.transform(ele.labelPath || ele.label,ele.label )\n      });\n    }\n    if(this.displayedColumns){\n      this.displayedColumnsTrans =this.displayedColumns\n      this.displayedColumnsTrans.forEach((ele:any) => {\n        ele.label = this.nxtCustomTranslate.transform(ele.labelPath || ele.label,ele.label )\n      });\n    }\n    this.availableOperatorsTrans = this.availableOperators\n    this.availableOperatorsTrans.forEach((ele:any) => {\n      ele.label = this.nxtCustomTranslate.transform(ele.labelPath || ele.label,ele.label )\n    });\n    this.conditions = this.editingView.get('conditions') as FormArray;\n    this.columns = this.editingView.get('columns') as FormArray;\n  }\n  ngOnChanges(changes: SimpleChanges) {\n    if (changes['tableFilterArray']) {\n      if(this.tableFilterArray){\n        this.tableFilterArrayTrans =this.tableFilterArray\n        this.tableFilterArrayTrans.forEach((ele:any) => {\n          ele.label = this.nxtCustomTranslate.transform(ele.labelPath || ele.label,ele.label )\n        });\n      }\n    }\n    if (!this.listViews || this.listViews && !this.listViews.some(ele => ele.filterName === 'All Data')) {\n      this.listViews = [...(this.staticFilterData), ...(this.listViews || [])];\n    }\n    if (!this.selectedView && this.listViews?.length > 0) {\n      if(this.listViews.some(ele => ele.isSelected)){\n        let tempfilter = this.listViews.find(ele => ele.isSelected)\n        this.selectedView = tempfilter.filterName;\n        this.selectedViewPath = tempfilter.labelPath\n      } else {\n        this.selectedView = this.listViews[0].filterName;\n        this.selectedViewPath = this.listViews[0].labelPath\n      }\n    }else {\n      if(this.listViews.some(ele => ele.isSelected)){\n        let tempfilter = this.listViews.find(ele => ele.isSelected)\n        this.selectedView = tempfilter.filterName;\n        this.selectedViewPath = tempfilter.labelPath\n      } else {\n        this.selectedViewPath = this.selectedView === 'All Data' ? this.listViews[0].labelPath : this.selectedView\n      }\n    }\n    // SKS9oct25 filter condtion label retain\n    if(this.listViews?.length > 0 && this.displayedColumns?.length > 0){\n      for(const listView of this.listViews){\n        if(listView?.conditions?.length > 0){\n          for(const cond of listView?.conditions){\n            for( const col of this.displayedColumns){\n              if(cond.field === col.filterField){\n                cond.field = col.label\n              }\n              if(cond.field === col.label && col.filterValue){\n                for(const tableData of this.tableData){\n                  let res = this.dataService.getValue(tableData, col.filterValue)\n                  if(res === cond.value){\n                    cond.value = this.dataService.getValue(tableData, col.fieldName) || cond.value\n                  }\n                }\n              }\n            }\n          }\n        }\n      }\n    }\n    this.conditions = this.editingView.get('conditions') as FormArray;\n    this.columns = this.editingView.get('columns') as FormArray;\n  }\n\n  // SKS3MAY25 Adds a new filter condition to the form\n  addFilter(): void {\n    this.conditions.push(this.fb.group({\n      field: ['', Validators.required],\n      operator: ['', Validators.required],\n      value: ['']\n    }));\n    this.isColumnDropdownOpen.push(false);\n    this.isOperatorDropdownOpen.push(false);\n    this.isValueDropdownOpen.push(false);\n  }\n\n  // SKS3MAY25 Removes a filter condition by index\n  removeFilter(index: number): void {\n    this.conditions.removeAt(index);\n    this.isColumnDropdownOpen.splice(index, 1);\n    this.isOperatorDropdownOpen.splice(index, 1);\n    this.isValueDropdownOpen.splice(index, 1);\n  }\n\n  addColumn(): void {\n    this.columns.push(this.fb.group({\n      name: ['', Validators.required],\n      sortable: [false],\n      filterable: [false]\n    }));\n    this.isColumnNameDropdownOpen.push(false);\n  }\n\n  removeColumn(index: number): void {\n    this.columns.removeAt(index);\n    this.isColumnNameDropdownOpen.splice(index, 1);\n  }\n\n  toggleDropdown(): void {\n    this.listViewEmit.emit({\"action\": 'filterGet'});\n    this.isDropdownOpen = !this.isDropdownOpen;\n  }\n\n  // SKS3MAY25 Handles selecting a list view from the dropdown\n  selectListView(view: any): void {\n    this.selectedView = view.filterName;\n    this.selectedViewPath = view.labelPath || view.filterName;\n    this.listViewEmit.emit({'action':'select', 'data':view});\n    this.isDropdownOpen = false;\n  }\n\n  // SKS3MAY25 Opens modal to edit an existing list view\n  startEdit(view: ListView, event?: Event): void {\n    if (event) event.stopPropagation();\n\n    this.isAdding = false;\n    this.isModalOpen = true;\n\n    this.editingView.reset();\n    while (this.conditions.length) this.conditions.removeAt(0);\n    while (this.columns.length) this.columns.removeAt(0);\n\n    this.editingView.patchValue({\n      filterName: view.filterName,\n      order: view.order,\n      isDefault: view.isDefault\n    });\n\n    view?.conditions?.forEach(filter => {\n      this.conditions.push(this.fb.group({\n        field: [filter.field, Validators.required],\n        operator: [filter.operator, Validators.required],\n        value: [filter.value]\n      }));\n    });\n\n    \n    view?.columns?.forEach(col => {\n      this.displayedColumnsTrans.forEach(field => {\n        if(col.name == field.fieldName) {\n          this.columns.push(this.fb.group({\n            name: [field.label, Validators.required],\n            sortable: [col.sortable || false],\n            filterable: [col.filterable || false]\n          }));\n        }\n      });\n    });\n\n  }\n\n  // SKS3MAY25 Opens modal to create a new list view\n  startAdd(): void {\n    this.isAdding = true;\n    this.isModalOpen = true;\n\n    this.editingView.reset();\n    while (this.conditions.length) this.conditions.removeAt(0);\n    while (this.columns.length) this.columns.removeAt(0);\n\n    this.editingView.patchValue({\n      order: this.listViews?.length,\n      isDefault: false\n    });\n    this.isDropdownOpen = false;\n\n    // SKS26MAY25 Second loop: from displayedColumnsTrans, skip duplicates\n    this.displayedColumnsTrans.forEach(field => {\n      this.columns.push(this.fb.group({\n        name: [field.label, Validators.required],\n        sortable: [field.hyperLink || false],\n        filterable: [field.filter || false]\n      }));\n    });\n  }\n\n  // SKS3MAY25 Saves the currently edited or added list view\n  save(): void {\n    if (this.editingView.valid) {\n      const formValue = this.editingView.value;\n      formValue?.columns?.forEach((col)=>{\n        this.displayedColumnsTrans.forEach((dCol) => {\n          if (dCol.label === col.name) {\n            col.name = dCol.fieldName\n          }\n        })\n      })\n      formValue?.conditions?.forEach((col)=>{\n        this.displayedColumnsTrans.forEach((dCol) => {\n          if (dCol.label === col.field) {\n            col.field = dCol.fieldName\n          }\n        })\n      })\n      const listView: ListView = {\n        filterName: formValue.filterName,\n        labelPath: formValue.labelPath || formValue.filterName,\n        order: formValue.order,\n        isDefault: formValue.isDefault,\n        isSelected: false,\n        conditions: formValue.conditions,\n        columns: formValue.columns,\n        system: false\n      };\n      this.listViews.sort((a, b) => a.order - b.order);\n      this.selectedView = listView.filterName;\n      this.selectedViewPath = listView.labelPath || listView.filterName;\n      this.listViewEmit.emit({'action':'save', \"data\": listView});\n      this.closeModal();\n    }\n  }\n\n  closeModal(): void {\n    this.isModalOpen = false;\n  }\n\n  // SKS3MAY25 Opens confirmation modal to delete a list view\n  confirmDelete(view: ListView, event?: Event): void {\n    if (event) event.stopPropagation();\n    this.viewToDelete = view;\n    this.isDeleteModalOpen = true;\n    this.isDropdownOpen = false;\n  }\n\n  // SKS3MAY25 Closes the delete confirmation modal\n  closeDeleteModal(): void {\n    this.isDeleteModalOpen = false;\n    this.viewToDelete = null;\n  }\n\n  // SKS3MAY25 Deletes the selected list view after confirmation\n  deleteConfirmed(): void {\n    if (this.viewToDelete) {\n      const index = this.listViews.findIndex(view => view.filterName === this.viewToDelete?.filterName);\n      if (index >= 0) {\n        // this.listViews.splice(index, 1);\n        if (this.selectedView === this.viewToDelete.filterName) {\n          this.selectedView = this.listViews?.length > 0 ? this.listViews[0].filterName : '';\n          this.selectedViewPath = this.listViews?.length > 0 ? this.listViews[0].labelPath : '' \n          this.listViewEmit.emit({'action':'select', 'data':this.selectedView});\n        }\n        this.listViewEmit.emit({'action': 'delete', \"data\": this.viewToDelete});\n      }\n      this.closeDeleteModal();\n    }\n  }\n\n  // SKS3MAY25 Returns filtered list of columns based on input search term\n  getFilteredColumns(term: string): any[] {\n    if (!term) return this.tableFilterArrayTrans || [];\n    term = term.toLowerCase();\n    return this.tableFilterArrayTrans.filter(col =>\n      col.label.toLowerCase().includes(term)\n    );\n  }\n\n  getColumnColumns(term: string): any[] {\n    if (!term) return this.displayedColumnsTrans;\n    term = term.toLowerCase();\n    return this.displayedColumnsTrans.filter(col =>\n      col.label.toLowerCase().includes(term)\n    );\n  }  \n   // SKS3MAY25 Returns possible values for a selected field/column\n   getPossibleValues(field: string, term: string): string[] {\n    const match = this.tableFilterArrayTrans?.find(col => col.label === field);\n    if (!match || !Array.isArray(match.value)) return [];\n    if (!term) return match.value;\n    const lowerTerm = term.toLowerCase();\n    return match.value.filter(val =>\n      typeof val === 'string' && val.toLowerCase().includes(lowerTerm)\n    );\n  }  \n  // SKS3MAY25 Returns filtered list of operators based on input search term\n  getFilteredOperators(term: string): { label: string, value: string }[] {\n    if (!term) return this.availableOperatorsTrans;\n    term = term.toLowerCase();\n    return this.availableOperatorsTrans.filter(operator =>\n      operator.label.toLowerCase().includes(term)\n    );\n  }  \n  operatorInput: string[] = [];\n\n  onOperatorInput(value: string, index: number) {\n    this.operatorInput[index] = value;\n  }\n  \n  getOperatorLabel(value: string): string {\n    const found = this.availableOperatorsTrans.find(op => op.value === value);\n    return found ? found.label : value;\n  }\n\n  // SKS3MAY25 Opens a dropdown on focus for the given input type and index\n  onFocus(type: string, index: number): void {\n    if (type === 'field') {\n      this.isColumnDropdownOpen[index] = true;\n    } else if (type === 'operator') {\n      this.isOperatorDropdownOpen[index] = true;\n    } else if (type === 'value') {\n      this.isValueDropdownOpen[index] = true;\n    } else if (type === 'columnName') {\n      this.isColumnNameDropdownOpen[index] = true;\n    }\n  }\n\n  // SKS3MAY25 Delays closing dropdown to allow selection on blur\n  onBlur(type: string, index: number): void {\n    setTimeout(() => {\n      if (type === 'field') {\n        this.isColumnDropdownOpen[index] = false;\n      } else if (type === 'operator') {\n        this.isOperatorDropdownOpen[index] = false;\n      } else if (type === 'value') {\n        this.isValueDropdownOpen[index] = false;\n      } else if (type === 'columnName') {\n        this.isColumnNameDropdownOpen[index] = false;\n      }\n    }, 200);\n  }\n\n// SKS3MAY25 Sets selected value in the form control and closes the dropdown\n  selectOption(type: string, index: number, value: string): void {\n    if (type === 'field') {\n      this.conditions.at(index).get('field')?.setValue(value);\n      this.isColumnDropdownOpen[index] = false;\n    } else if (type === 'operator') {\n      this.conditions.at(index).get('operator')?.setValue(value);\n      this.isOperatorDropdownOpen[index] = false;\n    } else if (type === 'value') {\n      this.conditions.at(index).get('value')?.setValue(value);\n      this.isValueDropdownOpen[index] = false;\n    } else if (type === 'columnName') {\n      this.columns.at(index).get('name')?.setValue(value);\n      this.isColumnNameDropdownOpen[index] = false;\n    }\n  }\n  getLabelByFieldName(fieldName: string): string {\n    const match = this.displayedColumnsTrans.find(col => col.fieldName === fieldName);\n    return match?.label ? match.label : fieldName;\n  }\n\n  onManualInput(inputValue: string, index: number): void {\n    const match = this.displayedColumnsTrans.find(col => col.label.toLowerCase() === inputValue.toLowerCase());\n    if (match) {\n      this.columns.at(index).get('name').setValue(match.label);\n    }\n  }    \n  // SKS3MAY25 Listens to document click and closes the dropdown if clicked outside\n  @HostListener('document:click', ['$event'])\n  onDocumentClick(event: any) {\n    event.stopPropagation();\n    const target = event.target as HTMLElement;\n    if (!target.closest('.list-view-filter')) {\n      this.isDropdownOpen = false;\n    }\n  }\n}","<div class=\"list-view-filter\">\n    <div class=\"custom-dropdown\">\n        <div *ngIf=\"title\" class=\"filter-label\">{{title}}</div>\n        <div class=\"select-wrapper\">\n            <svg class=\"filter-icon\" width=\"24\" height=\"24\" viewBox=\"0 0 24 24\" fill=\"none\" xmlns=\"http://www.w3.org/2000/svg\">\n                <rect width=\"24\" height=\"24\" rx=\"5\" fill=\"#F1F1F1\" />\n                <path d=\"M5.51288 4.5H12.1879C12.7429 4.5 13.2004 4.9575 13.2004 5.5125V6.62249C13.2004 7.02749 12.9454 7.53 12.6979 7.785L10.5229 9.705C10.2229 9.96 10.0204 10.4625 10.0204 10.8675V13.0425C10.0204 13.3425 9.8179 13.7475 9.5629 13.905L8.85789 14.3625C8.19789 14.7675 7.29037 14.31 7.29037 13.5V10.8225C7.29037 10.47 7.08789 10.0125 6.88539 9.75751L4.96539 7.7325C4.71039 7.4775 4.5079 7.02749 4.5079 6.71999V5.5575C4.5004 4.9575 4.95788 4.5 5.51288 4.5Z\" stroke=\"#292D32\" stroke-width=\"1.5\" stroke-miterlimit=\"10\" stroke-linecap=\"round\" stroke-linejoin=\"round\" />\n                <path d=\"M4.5 11.9999V14.2499C4.5 17.9999 6 19.4999 9.75 19.4999H14.25C18 19.4999 19.5 17.9999 19.5 14.2499V9.74994C19.5 7.40994 18.915 5.93993 17.5575 5.17493C17.175 4.95743 16.41 4.79243 15.7125 4.67993\" stroke=\"#292D32\" stroke-width=\"1.5\" stroke-linecap=\"round\" stroke-linejoin=\"round\" />\n                <path d=\"M12.75 12.75H16.5\" stroke=\"#292D32\" stroke-width=\"1.5\" stroke-linecap=\"round\" stroke-linejoin=\"round\" />\n                <path d=\"M11.25 15.75H16.5\" stroke=\"#292D32\" stroke-width=\"1.5\" stroke-linecap=\"round\" stroke-linejoin=\"round\" />\n            </svg>\n            <div class=\"custom-dropdown\">\n                <div class=\"selected-option\" style=\"cursor: pointer;\" (click)=\"toggleDropdown()\">\n                    <div style=\"display: flex; align-items: center;\">\n                        {{ selectedViewPath || selectedView | nxtCustomTranslate : selectedView}}\n                    </div>\n                    <svg style=\"cursor: pointer;\" class=\"chevron-icon\" width=\"24\" height=\"24\" viewBox=\"0 0 40 40\" fill=\"none\" xmlns=\"http://www.w3.org/2000/svg\">\n                        <path d=\"M19.9999 25.6667C23.6818 25.6667 26.6666 22.6819 26.6666 19C26.6666 15.3181 23.6818 12.3334 19.9999 12.3334C16.318 12.3334 13.3333 15.3181 13.3333 19C13.3333 22.6819 16.318 25.6667 19.9999 25.6667Z\" fill=\"#292D32\" stroke=\"#292D32\" stroke-width=\"1.5\" stroke-miterlimit=\"10\" stroke-linecap=\"round\" stroke-linejoin=\"round\" />\n                        <path d=\"M17.6467 18.16L20.0001 20.5067L22.3534 18.16\" stroke=\"white\" stroke-width=\"1.5\" stroke-linecap=\"round\" stroke-linejoin=\"round\" />\n                    </svg>\n                </div>\n            </div>\n        </div>\n        <!-- SKS3MAY25 list view Drop down-->\n        <div *ngIf=\"isDropdownOpen\" class=\"dropdown-options-container\">\n            <ul class=\"dropdown-options\">\n                <li *ngFor=\"let view of listViews\" [class.selected]=\"selectedView === view.filterName\" (click)=\"selectListView(view)\" class=\"list-view-item\" style=\"line-height: 1.5;\">\n                    <div class=\"view-name\">{{ view.labelPath || view.filterName | nxtCustomTranslate : view.filterName }}</div>\n                    <div *ngIf=\"!view.system\" class=\"actions\">\n                        <div  class=\"edit-icon\" (click)=\"startEdit(view, $event)\" style=\"cursor: pointer;\">\n                            <svg style=\"cursor: pointer;\" fill=\"#000000\" width=\"16px\" height=\"16px\" viewBox=\"0 0 0.48 0.48\" xmlns=\"http://www.w3.org/2000/svg\"><path d=\"M0.44 0.145a0.02 0.02 0 0 0 -0.006 -0.014l-0.085 -0.085a0.02 0.02 0 0 0 -0.014 -0.006 0.02 0.02 0 0 0 -0.014 0.006l-0.057 0.057L0.046 0.321a0.02 0.02 0 0 0 -0.006 0.014V0.42a0.02 0.02 0 0 0 0.02 0.02h0.085a0.02 0.02 0 0 0 0.015 -0.006l0.217 -0.219L0.434 0.16a0.024 0.024 0 0 0 0.004 -0.007 0.02 0.02 0 0 0 0 -0.005 0.014 0.014 0 0 0 0 -0.003ZM0.137 0.4H0.08v-0.057l0.199 -0.199 0.057 0.057ZM0.363 0.173l-0.057 -0.057 0.028 -0.028 0.056 0.056Z\"/></svg>\n                        </div>\n                        <div class=\"delete-icon\" (click)=\"confirmDelete(view, $event)\" *ngIf=\"listViews.length > 1\" style=\"cursor: pointer;\">\n                            <svg style=\"cursor: pointer;\" width=\"16\" height=\"16\" viewBox=\"0 0 16 16\" fill=\"none\" xmlns=\"http://www.w3.org/2000/svg\">\n                                <path d=\"M14 3.98726C11.78 3.76726 9.54667 3.65393 7.32 3.65393C6 3.65393 4.68 3.7206 3.36 3.85393L2 3.98726\" stroke=\"#000000\" stroke-width=\"1.5\" stroke-linecap=\"round\" stroke-linejoin=\"round\" />\n                                <path d=\"M5.6665 3.31362L5.81317 2.44028C5.91984 1.80695 5.99984 1.33362 7.1265 1.33362H8.87317C9.99984 1.33362 10.0865 1.83362 10.1865 2.44695L10.3332 3.31362\" stroke=\"#000000\" stroke-width=\"1.5\" stroke-linecap=\"round\" stroke-linejoin=\"round\" />\n                                <path d=\"M12.5667 6.09375L12.1334 12.8071C12.06 13.8537 12 14.6671 10.14 14.6671H5.86002C4.00002 14.6671 3.94002 13.8537 3.86668 12.8071L3.43335 6.09375\" stroke=\"#000000\" stroke-width=\"1.5\" stroke-linecap=\"round\" stroke-linejoin=\"round\" />\n                                <path d=\"M6.88647 11.0004H9.10647\" stroke=\"#000000\" stroke-width=\"1.5\" stroke-linecap=\"round\" stroke-linejoin=\"round\" />\n                                <path d=\"M6.3335 8.33325H9.66683\" stroke=\"#000000\" stroke-width=\"1.5\" stroke-linecap=\"round\" stroke-linejoin=\"round\" />\n                            </svg>\n                        </div>\n                    </div>\n                </li>\n            </ul>\n            <div class=\"add-filter\" style=\"cursor: pointer; font-size: 14px;\" (click)=\"startAdd()\">\n                <div class=\"add-icon\">\n                    <svg style=\"cursor: pointer;\" width=\"16\" height=\"16\" viewBox=\"0 0 16 16\" fill=\"none\" xmlns=\"http://www.w3.org/2000/svg\">\n                        <path d=\"M8 3.33325V12.6666\" stroke=\"#007bff\" stroke-width=\"1.5\" stroke-linecap=\"round\" stroke-linejoin=\"round\" />\n                        <path d=\"M3.33301 8H12.6663\" stroke=\"#007bff\" stroke-width=\"1.5\" stroke-linecap=\"round\" stroke-linejoin=\"round\" />\n                    </svg>\n                </div>\n                <div>{{'NEW_LIST_VIEW' | nxtCustomTranslate : 'New List View'}}</div>\n            </div>\n        </div>\n    </div>\n     <!-- SKS3MAY25 Add New List View-->\n    <div *ngIf=\"isModalOpen\" class=\"modal\">\n        <div class=\"modal-content\">\n            <div class=\"modal-header-div\" style=\"align-items: center;\">\n                <div style=\"align-items: center;\">\n                    {{ (isAdding ? 'ADD_NEW_LIST_VIEW' : 'EDIT_LIST_VIEW')  | nxtCustomTranslate : (isAdding ? 'Add New List View' : 'Edit List View') }} \n                </div>\n                <div class=\"close\" (click)=\"closeModal()\">&times;</div>\n            </div>\n            <form [formGroup]=\"editingView\">\n                <div class=\"form-row\">\n                    <div class=\"form-group\">\n                        <div style=\"display: flex;\">\n                            <div>{{'NAME' | nxtCustomTranslate :'Name'}}</div>\n                            <div style=\"color: red; padding-left: 3px;\">*</div>\n                        </div>\n                        <input formControlName=\"filterName\" [placeholder]=\"'ENTER_LIST_VIEW_NAME' | nxtCustomTranslate : 'Enter list view name'\" required>\n                        <div *ngIf=\"editingView.get('filterName')?.invalid && (editingView.get('filterName')?.dirty || editingView.get('filterName')?.touched)\" class=\"error-message\">\n                            {{ 'NAME_IS_REQ' | nxtCustomTranslate : 'Name is required'}}.\n                        </div>\n                    </div>\n                    <div class=\"form-group\">\n                        <div>{{'ORDER' | nxtCustomTranslate : 'Order'}}</div>\n                        <input type=\"number\" formControlName=\"order\" [placeholder]=\" 'ENTER_DISPLAY_ORDER' | nxtCustomTranslate : 'Enter display order'\" required>\n                        <div *ngIf=\"editingView.get('order')?.invalid && (editingView.get('order')?.dirty || editingView.get('order')?.touched)\" class=\"error-message\">\n                            {{'ORDER_IS_REQ_AND_BE_A_NUM' | nxtCustomTranslate : 'Order is required and must be a number'}}.\n                        </div>\n                    </div>\n                    <div class=\"form-group\">\n                        <div>{{'DEFAULT_VIEW' | nxtCustomTranslate : 'Default View'}}</div>\n                        <div class=\"toggle-wrapper small\" style=\"line-height: 0px;\">\n                            <input type=\"checkbox\" formControlName=\"isDefault\" id=\"isDefault\" style=\"line-height: 0px;\">\n                            <label for=\"isDefault\" class=\"toggle-button\" style=\"margin-bottom: 0px; display: flex;\"></label>\n                        </div>\n                    </div>\n                </div>\n\n                <div class=\"section-header\">\n                    <h3>{{'FILTERS' | nxtCustomTranslate : 'Filters'}}</h3>\n                    <div class=\"section-description\">{{'DEFINE_CONDITIONS_FOR_FILTERED_LIST_VIEW' | nxtCustomTranslate : 'Define conditions for filtered list view'}}</div>\n                </div>\n                <div formArrayName=\"conditions\" class=\"table-container\">\n                    <div class=\"table-header\">\n                        <div class=\"column-cell\">{{'COLUMN' | nxtCustomTranslate : 'Column'}}</div>\n                        <div class=\"operator-cell\">{{'OPERATOR' | nxtCustomTranslate : 'Operator'}}</div>\n                        <div class=\"value-cell\">{{'VALUE' | nxtCustomTranslate : 'Value'}}</div>\n                        <div class=\"action-cell\">{{'ACTION' | nxtCustomTranslate : 'Action'}}</div>\n                    </div>\n                    \n                    <div *ngFor=\"let filter of conditions.controls; let i = index\" [formGroupName]=\"i\" class=\"filter-row\">\n                        <div class=\"column-cell\">\n                            <div class=\"listview-custom-select\">\n                                <input formControlName=\"field\" [value]=\"getLabelByFieldName(conditions.at(i).get('field').value)\" (focus)=\"onFocus('field', i)\" (blur)=\"onBlur('field', i)\" [placeholder]=\"'ENTER_OR_SELECT_COLUMN' | nxtCustomTranslate : 'Enter or select column'\">\n                                <div class=\"dropdown-list\" *ngIf=\"isColumnDropdownOpen[i]\">\n                                    <div *ngFor=\"let field of getFilteredColumns(conditions.at(i).get('field').value)\" class=\"dropdown-item\" (click)=\"selectOption('field', i, field.label)\">\n                                        {{ field.label }}\n                                    </div>\n                                </div>\n                            </div>\n                            <div *ngIf=\"filter.get('field')?.invalid && (filter.get('field')?.dirty || filter.get('field')?.touched)\" class=\"error-message\">\n                                {{'COLUMN_IS_REQ' | nxtCustomTranslate : 'Column is required'}}.\n                            </div>\n                        </div>\n                        \n                        <div class=\"operator-cell\">\n                            <div class=\"listview-custom-select\">\n                                <input\n                                  [value]=\"getOperatorLabel(conditions.at(i).get('operator').value)\"\n                                  (input)=\"onOperatorInput($event.target.value, i)\"\n                                  (focus)=\"onFocus('operator', i)\"\n                                  (blur)=\"onBlur('operator', i)\"\n                                  [placeholder]=\"'ENTER_OR_SELECT_OPERATOR' | nxtCustomTranslate : 'Enter or select operator'\"\n                                />\n                              \n                                <div class=\"dropdown-list\" *ngIf=\"isOperatorDropdownOpen[i]\">\n                                  <div\n                                    *ngFor=\"let operator of getFilteredOperators(operatorInput[i])\"\n                                    class=\"dropdown-item\"\n                                    (click)=\"selectOption('operator', i, operator.value)\"\n                                  >\n                                    {{ operator.label }}\n                                  </div>\n                                </div>\n                              </div>                              \n                            <div *ngIf=\"filter.get('operator')?.invalid && (filter.get('operator')?.dirty || filter.get('operator')?.touched)\" class=\"error-message\">\n                                {{'OPERATOR_IS_REQ' | nxtCustomTranslate : 'Operator is required'}}.\n                            </div>\n                        </div>\n                        \n                        <div class=\"value-cell\">\n                            <div class=\"listview-custom-select\">\n                                <input formControlName=\"value\" (focus)=\"onFocus('value', i)\" (blur)=\"onBlur('value', i)\" [placeholder]=\"'ENTER_OR_SELECT_VALUE' | nxtCustomTranslate : 'Enter or select value'\">\n                                <div class=\"dropdown-list\" *ngIf=\"isValueDropdownOpen[i] && getPossibleValues(conditions.at(i).get('field').value, conditions.at(i).get('value').value)?.length > 0\">\n                                    <div *ngFor=\"let val of getPossibleValues(conditions.at(i).get('field').value, conditions.at(i).get('value').value)\" class=\"dropdown-item\" (click)=\"selectOption('value', i, val)\">\n                                        {{ val }}\n                                    </div>\n                                </div>\n                            </div>\n                            <!-- <div *ngIf=\"filter.get('value')?.invalid && (filter.get('value')?.dirty || filter.get('value')?.touched)\" class=\"error-message\">\n                                {{'VALUE_IS_REQUIRED' | nxtCustomTranslate : 'Value is required'}}.\n                            </div> -->\n                        </div>\n                        \n                        <div class=\"action-cell\">\n                            <div class=\"dicon-container\" [matTooltip]=\"'REMOVE' | nxtCustomTranslate : 'Remove'\">\n                                <div class=\"delete-icon\" (click)=\"removeFilter(i)\">\n                                    <svg width=\"16\" height=\"16\" viewBox=\"0 0 16 16\" fill=\"none\" xmlns=\"http://www.w3.org/2000/svg\">\n                                        <path d=\"M14 3.98726C11.78 3.76726 9.54667 3.65393 7.32 3.65393C6 3.65393 4.68 3.7206 3.36 3.85393L2 3.98726\" stroke=\"#FF2C10\" stroke-width=\"1.5\" stroke-linecap=\"round\" stroke-linejoin=\"round\" />\n                                        <path d=\"M5.6665 3.31362L5.81317 2.44028C5.91984 1.80695 5.99984 1.33362 7.1265 1.33362H8.87317C9.99984 1.33362 10.0865 1.83362 10.1865 2.44695L10.3332 3.31362\" stroke=\"#FF2C10\" stroke-width=\"1.5\" stroke-linecap=\"round\" stroke-linejoin=\"round\" />\n                                        <path d=\"M12.5667 6.09375L12.1334 12.8071C12.06 13.8537 12 14.6671 10.14 14.6671H5.86002C4.00002 14.6671 3.94002 13.8537 3.86668 12.8071L3.43335 6.09375\" stroke=\"#FF2C10\" stroke-width=\"1.5\" stroke-linecap=\"round\" stroke-linejoin=\"round\" />\n                                        <path d=\"M6.88647 11.0004H9.10647\" stroke=\"#FF2C10\" stroke-width=\"1.5\" stroke-linecap=\"round\" stroke-linejoin=\"round\" />\n                                        <path d=\"M6.3335 8.33325H9.66683\" stroke=\"#FF2C10\" stroke-width=\"1.5\" stroke-linecap=\"round\" stroke-linejoin=\"round\" />\n                                    </svg>\n                                </div>\n                            </div>\n                        </div>\n                    </div>\n                    \n                    <div class=\"add-row\">\n                        <div class=\"flex addIconBor cursor-pointer\" (click)=\"addFilter()\" [matTooltip]=\"'ADD_FILTER' | nxtCustomTranslate : 'Add Filter'\">\n                            <div class=\"addIcon\">\n                                <svg width=\"16\" height=\"16\" viewBox=\"0 0 16 16\" fill=\"none\" xmlns=\"http://www.w3.org/2000/svg\">\n                                    <path d=\"M8 3.33325V12.6666\" stroke=\"#007bff\" stroke-width=\"1.5\" stroke-linecap=\"round\" stroke-linejoin=\"round\" />\n                                    <path d=\"M3.33301 8H12.6663\" stroke=\"#007bff\" stroke-width=\"1.5\" stroke-linecap=\"round\" stroke-linejoin=\"round\" />\n                                </svg>\n                            </div>\n                        </div>\n                        <div>{{'ADD_FILTER' | nxtCustomTranslate : 'Add Filter'}}</div>\n                    </div>\n                </div>\n\n                <div class=\"section-header\">\n                    <h3>{{'COLUMNS' | nxtCustomTranslate : 'Columns'}}</h3>\n                    <div class=\"section-description\">{{'SELECT_FIELD_TO_DISPLAY_IN_TABLE' | nxtCustomTranslate : 'Select field to display in table'}}</div>\n                </div>\n                <div formArrayName=\"columns\" class=\"table-container\">\n                    <div class=\"table-header\">\n                        <div class=\"name-cell\">{{'COLUMN_NAME' | nxtCustomTranslate : 'Column Name'}}</div>\n                        <div class=\"bool-cell\">{{'SORTABLE' | nxtCustomTranslate : 'Sortable'}}</div>\n                        <div class=\"bool-cell\">{{'FILTERABLE' | nxtCustomTranslate :'Filterable'}}</div>\n                        <div class=\"action-cell\">{{'ACTION' | nxtCustomTranslate : 'Action'}}</div>\n                    </div>\n                    \n                    <div *ngFor=\"let field of columns.controls; let i = index\" [formGroupName]=\"i\" class=\"column-row\">\n                        <div class=\"name-cell\">\n                            <div class=\"listview-custom-select\">\n                                <input \n                                formControlName=\"name\" \n                                (focus)=\"onFocus('columnName', i)\" \n                                (blur)=\"onBlur('columnName', i)\" \n                                (input)=\"onManualInput($event.target.value, i)\"\n                                [placeholder]=\"'ENTER_OR_SELECT_COLUMN_NAME' | nxtCustomTranslate : 'Enter or select column name'\">\n                                 <div class=\"dropdown-list\" *ngIf=\"isColumnNameDropdownOpen[i]\">\n                                    <div *ngFor=\"let colName of getColumnColumns(columns.at(i).get('name').value)\" class=\"dropdown-item\" (click)=\"selectOption('columnName', i, colName.label); isColumnNameDropdownOpen[i] = false\">\n                                        {{ colName.label }}\n                                    </div>\n                                </div>\n                            </div>\n                            <div *ngIf=\"field.get('name')?.invalid && (field.get('name')?.dirty || field.get('name')?.touched)\" class=\"error-message\">\n                                {{'COLUMN_NAME_IS_REQ' | nxtCustomTranslate : 'Column name is required'}}.\n                            </div>\n                        </div>\n                        \n                        <div class=\"bool-cell\">\n                            <div class=\"toggle-wrapper small\">\n                                <input type=\"checkbox\" [id]=\"'sortable-' + i\" formControlName=\"sortable\">\n                                <label [for]=\"'sortable-' + i\" class=\"toggle-button\"></label>\n                            </div>\n                        </div>\n                        \n                        <div class=\"bool-cell\">\n                            <div class=\"toggle-wrapper small\">\n                                <input type=\"checkbox\" [id]=\"'filterable-' + i\" formControlName=\"filterable\">\n                                <label [for]=\"'filterable-' + i\" class=\"toggle-button\"></label>\n                            </div>\n                        </div>\n                        \n                        <div class=\"action-cell\">\n                            <div class=\"dicon-container\" [matTooltip]=\"'REMOVE' | nxtCustomTranslate : 'Remove'\">\n                                <div class=\"delete-icon\" (click)=\"removeColumn(i)\">\n                                    <svg width=\"16\" height=\"16\" viewBox=\"0 0 16 16\" fill=\"none\" xmlns=\"http://www.w3.org/2000/svg\">\n                                        <path d=\"M14 3.98726C11.78 3.76726 9.54667 3.65393 7.32 3.65393C6 3.65393 4.68 3.7206 3.36 3.85393L2 3.98726\" stroke=\"#FF2C10\" stroke-width=\"1.5\" stroke-linecap=\"round\" stroke-linejoin=\"round\" />\n                                        <path d=\"M5.6665 3.31362L5.81317 2.44028C5.91984 1.80695 5.99984 1.33362 7.1265 1.33362H8.87317C9.99984 1.33362 10.0865 1.83362 10.1865 2.44695L10.3332 3.31362\" stroke=\"#FF2C10\" stroke-width=\"1.5\" stroke-linecap=\"round\" stroke-linejoin=\"round\" />\n                                        <path d=\"M12.5667 6.09375L12.1334 12.8071C12.06 13.8537 12 14.6671 10.14 14.6671H5.86002C4.00002 14.6671 3.94002 13.8537 3.86668 12.8071L3.43335 6.09375\" stroke=\"#FF2C10\" stroke-width=\"1.5\" stroke-linecap=\"round\" stroke-linejoin=\"round\" />\n                                        <path d=\"M6.88647 11.0004H9.10647\" stroke=\"#FF2C10\" stroke-width=\"1.5\" stroke-linecap=\"round\" stroke-linejoin=\"round\" />\n                                        <path d=\"M6.3335 8.33325H9.66683\" stroke=\"#FF2C10\" stroke-width=\"1.5\" stroke-linecap=\"round\" stroke-linejoin=\"round\" />\n                                    </svg>\n                                </div>\n                            </div>\n                        </div>\n                    </div>\n                    \n                    <div class=\"add-row\">\n                        <div class=\"flex addIconBor cursor-pointer\" (click)=\"addColumn()\" [matTooltip]=\"'ADD_COLUMN' | nxtCustomTranslate : 'Add Column'\">\n                            <div class=\"addIcon\">\n                                <svg width=\"16\" height=\"16\" viewBox=\"0 0 16 16\" fill=\"none\" xmlns=\"http://www.w3.org/2000/svg\">\n                                    <path d=\"M8 3.33325V12.6666\" stroke=\"#007bff\" stroke-width=\"1.5\" stroke-linecap=\"round\" stroke-linejoin=\"round\" />\n                                    <path d=\"M3.33301 8H12.6663\" stroke=\"#007bff\" stroke-width=\"1.5\" stroke-linecap=\"round\" stroke-linejoin=\"round\" />\n                                </svg>\n                            </div>\n                        </div>\n                        <div>{{'ADD_COLUMN' | nxtCustomTranslate : 'Add Column'}}</div>\n                    </div>\n                </div>\n                <div *ngIf=\"conditions.length === 0 && columns.length === 0\" class=\"error-message\">\n                   {{'AT_LEAST_ONE_FILTER_OR_ONE_COLUMN_IS_REQ' | nxtCustomTranslate : ' At least one filter or one column is required'}}.\n                </div>                  \n                <div class=\"form-actions\">\n                    <button type=\"button\" class=\"save-button\" (click)=\"save()\" [disabled]=\"!editingView.valid || (conditions.length === 0 && columns.length === 0)\">{{'SAVE' | nxtCustomTranslate : 'Save'}}</button>\n                    <button type=\"button\" (click)=\"closeModal()\">{{'CANCEL' | nxtCustomTranslate : 'Cancel'}}</button>\n                </div>\n            </form>\n        </div>\n    </div>\n    <!-- SKS3MAY25 Delete List View-->\n    <div *ngIf=\"isDeleteModalOpen\" class=\"modal\">\n        <div class=\"modal-content\">\n            <h2>{{'DELETE_LIST_VIEW' | nxtCustomTranslate : 'Delete List View'}}</h2>\n            <p>{{'ARE_YOU_SURE_YOU_WANT_TO_DELETE' | nxtCustomTranslate : 'Are you sure you want to delete'}} \"{{ viewToDelete?.filterName }}\"?</p>\n            <div class=\"form-delete\">\n                <button type=\"button\" (click)=\"deleteConfirmed()\">{{'DELETE' | nxtCustomTranslate : 'Delete'}}</button>\n                <button type=\"button\" (click)=\"closeDeleteModal()\">{{'CANCEL' | nxtCustomTranslate : 'Cancel'}}</button>\n            </div>\n        </div>\n    </div>\n</div>","//MSM10JUL25\nimport { Component, ElementRef, EventEmitter, HostListener, Input, Output, SimpleChanges, ViewChild } from '@angular/core';\nimport { CommonModule } from '@angular/common';\nimport { FormsModule } from '@angular/forms';\nimport { MatTooltipModule } from '@angular/material/tooltip';\nimport { NxtCustomTranslatePipe } from \"../../pipe/custom-translate.pipe\";\n\n@Component({\n  selector: 'nxt-icon-selector',\n  templateUrl: './icon-selector.component.html',\n  imports: [CommonModule, FormsModule, MatTooltipModule, NxtCustomTranslatePipe],\n  styleUrls: ['./icon-selector.component.css'],\n  standalone: true,\n})\nexport class IconSelectorComponent {\n  @Input() allIcons: [];\n  @Input() themeColor: string = '#ff0000'; // Default theme color\n  @Input() height: string = '300px'; // Default height\n  @Input() tooltipPosition: string = \"above\"; // above, below, left, right, before, after\n  @Input() selectedIcon: any; // Selected icon name\n  @Input() cdnIconURL: string = \"\"; // CDN URL for icons\n\n  @Input() label: string = '';  // Input label\n  @Input() labelFont: string = '';  // Input label font\n  @Input() labelWeight: string = '';  // Input label Weight\n  @Input() inputWeight: string = '';  // Input Weight\n  @Input() labelSize: string = '';  // Input label Size\n  @Input() labelColor: string = '';  // Input label Color\n  @Input() showLabel: string = '';  // Input label Color\n  @Input() required: boolean = false;  // Required validation\n  @Input() mode: 'view' | 'edit' | 'print' = 'edit'; // New mode input\n  @Input() question: any = {}\n  @Input() options: any[] = []; // For radio buttons\n\n  @Output() iconSelected = new EventEmitter<string>(); // Event emitter for selected icon\n  filteredIcons: any[] = [];\n  searchQuery = '';\n  showDropdown = false;\n  @ViewChild('dropdownWrapper') dropdownWrapper: ElementRef;\n\n  ngOnInit() {\n    this.filteredIcons = this.allIcons != null && this.allIcons.length > 0 ? [...this.allIcons] : [];\n  }\n  ngOnChanges(simpleChanges: SimpleChanges) {\n    if (simpleChanges['allIcons']) {\n      this.filteredIcons = this.allIcons != null && this.allIcons.length > 0 ? [...this.allIcons] : [];\n    }\n  }\n  filterIcons() {\n    if (!this.searchQuery) {\n      this.filteredIcons = this.allIcons != null && this.allIcons.length > 0 ? [...this.allIcons] : [];\n      return;\n    }\n    this.filteredIcons = this.allIcons?.filter((icon: any) =>\n      icon?.metadata?.name?.toLowerCase().includes(this.searchQuery?.toLowerCase())\n    );\n  }\n\n  selectIcon(icon: any) {\n    this.selectedIcon = icon;\n    this.iconSelected.emit(icon);\n  }\n\n  toggleDropdown(): void {\n    this.showDropdown = !this.showDropdown;\n  }\n  @HostListener('document:click', ['$event'])\n  onDocumentClick(event: MouseEvent): void {\n    const target = event.target as HTMLElement;\n    if (this.dropdownWrapper && !this.dropdownWrapper.nativeElement.contains(target)) {\n      this.showDropdown = false;\n    }\n  }\n}\n","<!-- MSM10JUL25 for icon selector UI -->\n<div #dropdownWrapper class=\"icon-selector\">\n  <div class=\"selected-icon\" (click)=\"toggleDropdown()\">\n    <span *ngIf=\"!selectedIcon\">{{ 'CHOOSE_ICON' | nxtCustomTranslate : 'Choose Icon' }}</span>\n    <div *ngIf=\"selectedIcon\" class=\"svg-container\">\n      <i [class]=\"'fusion-icon fusion-icon-' + selectedIcon.metadata.name\"></i>\n    </div>\n    \n    <span class=\"material-icons\">arrow_drop_down</span>\n  </div>\n\n  <div class=\"icon-selector-container\" [style.height]=\"height\" *ngIf=\"showDropdown\">\n    <div class=\"search-container\">\n      <div class=\"search-box\">\n        <input type=\"text\" [(ngModel)]=\"searchQuery\" (input)=\"filterIcons()\" [placeholder]=\"('SEARCH_ICONS' | nxtCustomTranslate : 'Search icons...')\"\n          class=\"search-input\">\n      </div>\n    </div>\n\n    <div class=\"icon-grid-container\" [style.max-height]=\"'calc(' + height + ' - 120px)'\">\n      <div *ngIf=\"filteredIcons && filteredIcons?.length === 0\" class=\"no-results\">\n        {{ 'NO_ICONS_FOUND' | nxtCustomTranslate : 'No icons found matching' }} \"{{searchQuery}}\"\n      </div>\n\n      <div class=\"icon-grid\">\n        <div *ngFor=\"let icon of filteredIcons\" class=\"icon-option\" [matTooltip]=icon.metadata.name\n          [matTooltipPosition]=tooltipPosition>\n          <div class=\"icon-option\">\n            <div class=\"click-overlay\" (click)=\"selectIcon(icon); toggleDropdown()\"></div>\n            <div class=\"svg-container\">\n              @defer (on viewport) {\n                <i [class]=\"'fusion-icon fusion-icon-' + icon.metadata.name\"></i>\n              } @placeholder {\n                  <span></span>\n              }\n            </div>\n          </div>\n        </div>\n      </div>\n    </div>\n  </div>\n</div>","export class ChangeWrapper {\n    fromQuestionId: string;\n    fromQuestionName: string;\n    toQuestionId: string;\n    toQuestionName: string;\n    valueObj: any;\n    referenceField:string;\n    field:string; // VD 20Aug24 getting the field name\n}\n","import { Component, OnInit, OnDestroy, OnChanges, Input, Output, EventEmitter, ViewChild, ElementRef, SimpleChanges, signal, WritableSignal, TrackByFunction, HostListener} from \"@angular/core\";\nimport { ChangeWrapper } from \"../../model/changeWrapper\";\nimport { CommonModule } from \"@angular/common\";\nimport { FormsModule } from \"@angular/forms\";\nimport { NxtInput } from \"../nxt-input/nxt-input.component\";\nimport { Subject, Subscription, debounceTime, distinctUntilChanged, takeUntil } from \"rxjs\";\nimport { StorageService } from \"../../services/storage/storage.service\";\nimport { ChangeService } from \"../../services/change/change.service\";\nimport { DataService } from \"../../services/data/data.service\";\nimport { CountryService } from \"../../services/country/country.service\";\nimport { NxtCustomTranslatePipe } from \"../../pipe/custom-translate.pipe\";\n\n@Component({\n  selector: 'nxt-search-box',\n  standalone: true,\n  imports: [\n    CommonModule,\n    FormsModule,\n    NxtInput,\n    NxtCustomTranslatePipe\n  ],\n  templateUrl: './search-box.component.html',\n  styleUrls: ['./search-box.component.css']\n})\nexport class NxtSearchBox implements OnInit, OnChanges, OnDestroy {\n  @Input() placeHolderText: string = '';\n  @Input() question: any;\n  @Input() apiMeta: any;\n  @Input() id: string = '';\n  @Input() readOnly = false;\n  @Input() mode: 'view' | 'edit' | 'print' = 'edit';\n  @Input() from: any;\n  @Input() value: any;\n  @Input() onlyView: boolean = false;\n  @Input() rowData: any = {}\n  \n  @Output() searchValueChange: EventEmitter<any> = new EventEmitter<any>();\n  @ViewChild('searchWrapper', { static: true }) searchWrapper!: ElementRef;\n\n  SearchItem: any;\n  public finalResults: WritableSignal<any[]> = signal([]);\n  public searchKeyWord: string = '';\n  public newResult: any;\n  public showResult = false;\n  public noResult = false;\n  public showSuggestion = false;\n  public isLoading = false;\n  public viewFilterName: string = '';\n  public isSingleFieldChange = false;\n  public valueObj: any;\n  public inputFocused = false;\n  public lastSearchLength = 0;\n  public filterName =''\n\n  private destroy$ = new Subject<void>();\n  private searchSubject = new Subject<string>();\n  subscription: Subscription;\n\n  // TrackBy function for performance optimization\n  trackByFn: TrackByFunction<any> = (index: number, item: any) => {\n    return item.id || item.name || index;\n  };\n\n  constructor(private storageService: StorageService,private changeService: ChangeService,private dataService: DataService, private countryService: CountryService, private elementRef: ElementRef) {\n    if(this.value && typeof this.value === 'object' && !Array.isArray(this.value)){\n      this.clickItem(this.value)\n    } else {\n      this.filterName = this.value\n      this.viewFilterName = this.value\n    }    \n    // Setup debounced search\n    this.searchSubject\n      .pipe(\n        debounceTime(300),\n        distinctUntilChanged(),\n        takeUntil(this.destroy$)\n      )\n      .subscribe(keyword => {\n        if(this.lastSearchLength > 2) this.performSearch(keyword);\n      });\n  }\n\n  ngOnInit(): void {\n    if(this.value && typeof this.value === 'object' && !Array.isArray(this.value)){\n      this.clickItem(this.value)\n    } else if(Array.isArray(this.value)){\n      this.filterName = ''\n      this.viewFilterName = ''\n    } else {\n      this.filterName = this.value\n      this.viewFilterName = this.value\n    }\n    this.parseApiMeta();\n    if(this.question?.subText != undefined) {\n      let dependencyObj: any = this.question?.subText;\n      // Subscribe for the changes\n      this.subscription = this.changeService.changeAnnounced$.subscribe(\n        (changeValue) => {\n          if(changeValue != undefined) {\n            if(changeValue.fromQuestionId && changeValue.valueObj !== undefined && ( Array.isArray(dependencyObj.sourceQuestionId)? dependencyObj.sourceQuestionId.includes(changeValue.fromQuestionId) : changeValue.fromQuestionId === dependencyObj.sourceQuestionId)) {\n              if(Array.isArray(dependencyObj.queryValue)? dependencyObj.queryValue.includes(changeValue.referenceField) : changeValue.referenceField === dependencyObj.queryValue){\n                this.storageService.queryValueStore(this.question.id,changeValue.referenceField,changeValue.field ? this.dataService.getValue(changeValue.valueObj, changeValue.field) : changeValue.valueObj)\n              }\n            }\n            this.changeService.confirmChange(changeValue.fromQuestionId);\n          }\n        }\n      );\n    }\n  }\n\n  ngOnChanges(changes: SimpleChanges): void {\n    if(changes['value']){\n      if(this.value && typeof this.value === 'object' && !Array.isArray(this.value)){\n        this.clickItem(this.value)\n      } else if(Array.isArray(this.value)){\n        this.filterName = ''\n        this.viewFilterName = ''\n      } else {\n        const defaultField = this.apiMeta?.defaultField || (Array.isArray(this.apiMeta?.field) ? this.apiMeta?.field?.[0] : this.apiMeta?.field);\n        if(typeof this.valueObj === 'object' && this.value === this.dataService.getValue(this.valueObj,defaultField)){\n          this.clickItem(this.valueObj)\n        } else {\n          this.filterName = this.value\n          this.viewFilterName = this.value\n        }\n      }\n    }\n    if (changes['mode']) {\n      this.mode = changes['mode'].currentValue;\n    }\n    if (changes['apiMeta'] && this.apiMeta) {\n      this.parseApiMeta();\n    }\n  }\n\n  ngOnDestroy(): void {\n    this.destroy$.next();\n    this.destroy$.complete();\n    this.resetComponentState();\n  }\n\n  // Handle clicks outside the search component\n  @HostListener('document:click', ['$event'])\n  onDocumentClick(event: Event): void {\n    if (!this.elementRef.nativeElement.contains(event.target as Node)) {\n      this.hideSuggestions();\n    }\n  }\n\n  // Handle escape key to close suggestions\n  @HostListener('document:keydown.escape', ['$event'])\n  onEscapeKey(event: KeyboardEvent): void {\n    this.hideSuggestions();\n  }\n\n  private parseApiMeta(): void {\n    if (this.apiMeta) {\n      this.apiMeta = typeof this.apiMeta === 'object' ? this.apiMeta : JSON.parse(this.apiMeta || '{}');\n      this.SearchItem = this.apiMeta?.field || [];\n    }\n  }\n\n  private resetComponentState(): void {\n    this.finalResults.set([]);\n    this.searchKeyWord = '';\n    this.showSuggestion = false;\n    this.noResult = false;\n    this.isLoading = false;\n    this.inputFocused = false;\n    this.lastSearchLength = 0;\n  }\n\n  private hideSuggestions(): void {\n    this.showSuggestion = false;\n    this.inputFocused = false;\n  }\n\n  onInputFocus(): void {\n    this.inputFocused = true;\n    // Trigger a search with an empty keyword to show all data\n    if (!this.searchKeyWord) {\n      // this.performSearch('');\n    } else if (this.finalResults().length > 0) {\n      this.showSuggestion = true;\n    }\n  }\n\n  onInputBlur(): void {\n    // Don't immediately hide suggestions to allow for clicking\n    // The document click handler will handle hiding\n  }\n\n  clearList(): void {\n    // Remove the setTimeout delay that was causing issues\n    this.hideSuggestions();\n  }\n\n  getSourceDataLocal(event: any): void {\n    if (!event?.value?.valueObj) {\n      this.resetComponentState();\n      return;\n    }\n\n    const searchValue =  event.value?.valueObj?.includes('|') ? event.value?.valueObj?.split('|')[0].trim() : event.value?.valueObj?.trim();\n    const currentLength = searchValue.length;\n    \n    // Always update the search keyword\n    this.searchKeyWord = searchValue;\n    \n    // Handle the case where user types 3+ characters\n    if (currentLength > 2 && !this.isSingleFieldChange) {\n      this.showSuggestion = !event.question?.singleFieldChange;\n      this.showResult = false;\n      this.noResult = false;\n      // Always perform search when we have 3+ characters\n      this.lastSearchLength = currentLength;\n      this.searchSubject.next(searchValue);\n      \n    } else if (currentLength <= 2) {\n      // When length is 2 or less, hide suggestions but keep the search keyword\n      this.isSingleFieldChange = false;\n      this.showSuggestion = false;\n      this.noResult = false;\n      this.lastSearchLength = currentLength;\n      this.searchSubject.next(searchValue);\n      this.finalResults.set([]);\n    }\n  }\n\n  private performSearch(keyword: string): void {\n    if (!this.apiMeta) return;\n\n    this.parseApiMeta();\n    \n    if (!this.apiMeta.isStaticData) {\n      this.searchFromApi(keyword);\n    } else {\n      this.searchFromStaticData(keyword);\n    }\n  }\n\n  private searchFromApi(keyword: string): void {\n    this.isLoading = true;\n    this.finalResults.set([]);\n    if(!this.apiMeta.endpoint && Array.isArray(this.value) ){\n      this.isLoading = false;\n      this.processSearchResults(this.value, keyword);\n    } else {\n      let finalGetCall = this.apiMeta.endpoint;\n      // SKS18JUL25 query params creation\n      if(this.apiMeta?.queryParameter){\n        const isFieldArray = Array.isArray(this.apiMeta?.queryParameter);\n        const fields = isFieldArray ? this.apiMeta.queryParameter : [this.apiMeta.queryParameter]; // always an array now\n        // Build query params string\n        const queryParams = fields\n          .map(field => `${field}=${this.searchKeyWord}`)\n          .join('&');\n        // Check if endpoint already has query params\n        if(queryParams && queryParams !== ''){\n          if (this.apiMeta.endpoint.includes('?')) {\n            finalGetCall += `&${queryParams}`;\n          } else {\n            finalGetCall += `?${queryParams}`;\n          }\n        }\n      }\n      if (this.apiMeta?.queryField && this.apiMeta?.queryValue) {\n        const queryFields = Array.isArray(this.apiMeta.queryField)\n          ? this.apiMeta.queryField\n          : [this.apiMeta.queryField];\n      \n        const queryValues = Array.isArray(this.apiMeta.queryValue)\n          ? this.apiMeta.queryValue\n          : [this.apiMeta.queryValue];\n      \n        const stored = this.from === 'nxtTable' ? this.rowData : this.storageService.getQueryValue(this.question.id); // single object\n      \n        const queryParamsArray: string[] = [];\n        queryFields.forEach((field, index) => {\n          const valueKey = queryValues[index] ?? queryValues[0];\n          const value = this.dataService.getValue(stored, valueKey);\n          if (value !== undefined && value !== null) {\n            queryParamsArray.push(`${field}=${encodeURIComponent(value)}`);\n          }\n        });\n      \n        const queryParams = queryParamsArray.join('&');\n      \n        if (queryParams) {\n          finalGetCall += this.apiMeta.endpoint.includes('?') ? `&${queryParams}` : `?${queryParams}`;\n        }\n      }      \n      if(finalGetCall){\n        this.dataService.apiResponse(finalGetCall)\n        .pipe(takeUntil(this.destroy$))\n        .subscribe({\n          next: (apiResponse) => {\n            this.isLoading = false;\n            this.processSearchResults(apiResponse, keyword);\n          },\n          error: (error) => {\n            this.isLoading = false;\n            this.noResult = true;\n            this.finalResults.set([]);\n          }\n        });\n      }\n    }\n  }\n\n  private searchFromStaticData(keyword: string): void {\n    const response = this.countryService.getCountryData(this.apiMeta?.field);\n    this.processSearchResults(response, keyword);\n  }\n\n  private processSearchResults(apiResponse: any, keyword: string): void {\n    let response;\n  \n    if (this.apiMeta.variable) {\n      response = this.dataService.getValue(apiResponse, this.apiMeta.variable);\n    } else {\n      response = apiResponse;\n    }\n  \n    if (!Array.isArray(response)) {\n      this.noResult = true;\n      this.finalResults.set([]);\n      return;\n    }\n  \n    if (!keyword) {\n      // If no keyword, show all results\n      this.finalResults.set(response);\n      this.noResult = response.length === 0;\n      this.showSuggestion = true; // Ensure suggestions are visible\n    } else {\n      // Filter results based on the keyword\n      const searchTerms = keyword.toLowerCase().split(\" \").filter(term => term.length > 0);\n      const results = response.filter(obj => {\n        const combinedValues = this.getCombinedValuesFromColumns(obj, this.apiMeta?.field);\n        return searchTerms.every(term => combinedValues.includes(term));\n      });\n  \n      this.noResult = results.length === 0;\n      this.finalResults.set(results);\n      this.showSuggestion = true; // Show suggestions only if there are results\n    }\n  }\n\n  private getNestedValue(obj: any, path: string): string {\n    if (!obj || !path) return '';\n    \n    const processedPath = path.replace(/\\[(\\d+)\\]/g, '.$1');\n    const parts = processedPath.split('.');\n    let current = obj;\n\n    for (const part of parts) {\n      if (!current || typeof current !== 'object') return '';\n      current = current[part];\n    }\n\n    return current !== null && current !== undefined \n      ? String(current).toLowerCase().trim() \n      : '';\n  }\n\n  private getCombinedValuesFromColumns(obj: any, columns: string[]): string {\n    if (!obj || !columns) return '';\n    \n    const columnArray = Array.isArray(columns) ? columns : [columns];\n    const values: string[] = [];\n\n    for (const column of columnArray) {\n      const value = this.getNestedValue(obj, column);\n      if (value) {\n        values.push(value);\n      }\n    }\n\n    return values.join(' ');\n  }\n\n  public getValues(element: any, columns: any): any {\n    const result: any = {};\n    if (!element || !columns) return result;\n\n    const columnArray = Array.isArray(columns) ? columns : [columns];\n    \n    columnArray.forEach((column) => {\n      if (!column) return;\n      \n      let tempElement = element;\n      const fields = column.split('.');\n      \n      for (const field of fields) {\n        if (!tempElement) break;\n        \n        const splitFields = field.split('[');\n        if (splitFields.length === 1) {\n          tempElement = tempElement[field];\n        } else {\n          const indexMatch = splitFields[1]?.match(/(\\d+)\\]/);\n          if (indexMatch) {\n            const index = Number(indexMatch[1]);\n            tempElement = tempElement[splitFields[0]]?.[index];\n          }\n        }\n      }\n      \n      result[column] = tempElement || '';\n    });\n\n    return result;\n  }\n\n  getKeys(obj: any): string[] {\n    return obj ? Object.keys(obj) : [];\n  }\n\n  public clickItem(event: any): void {\n    if (!this.apiMeta) return;\n    this.parseApiMeta();\n    const values = this.getValues(event, this.SearchItem);\n    const displayValue = Object.values(values)\n      .filter(val => val)\n      .join(' | ');\n    this.viewFilterName = displayValue;\n    this.filterName = displayValue;\n    const defaultField = this.apiMeta?.defaultField || \n      (Array.isArray(this.apiMeta?.field) ? this.apiMeta?.field?.[0] : this.apiMeta?.field);\n    const change = new ChangeWrapper();\n    change['fromQuestionId'] = this.id || this.question.id;\n    change['isObject'] = this.apiMeta?.isObject\n    change['valueObj'] = event;\n    change['field'] = defaultField;\n    change['referenceField'] = this.question.referenceField;\n    this.valueObj = event;\n    this.hideSuggestions();\n    this.searchValueChange.emit({\n      question: this.question,\n      value: change\n    });\n  }\n\n  inputValue(event: any, ques: any): void {\n    this.filterName = event?.valueObj ? event?.valueObj?.trim() : this.filterName\n    if (!ques?.singleFieldChange || !this.apiMeta) return;\n    this.isSingleFieldChange = true;\n    this.parseApiMeta();\n    const defaultField = this.apiMeta?.defaultField || \n      (Array.isArray(this.apiMeta?.field) ? this.apiMeta?.field?.[0] : this.apiMeta?.field);\n    const change = new ChangeWrapper();\n    change['isObject'] = this.apiMeta?.isObject\n    change['fromQuestionId'] = this.id || this.question.id;\n    change['valueObj'] = this.valueObj;\n    change['field'] = defaultField;\n    change['referenceField'] = this.question.referenceField;\n    this.filterName = this.viewFilterName;\n    this.searchValueChange.emit({\n      question: ques,\n      value: change\n    });\n  }\n\n  highlightText(text: string, searchTerm: string): string {\n    if (!text || !searchTerm) return text || '';\n\n    // Sanitize the input text\n    const sanitizedText = this.sanitizeHtml(text);\n    const terms = searchTerm.toLowerCase().split(' ').filter(term => term.length > 0);\n    \n    if (terms.length === 0) return sanitizedText;\n\n    // Escape special regex characters\n    const escapedTerms = terms.map(term => \n      term.replace(/[.*+?^${}()|[\\]\\\\]/g, '\\\\$&')\n    );\n\n    const regex = new RegExp(`(${escapedTerms.join('|')})`, 'gi');\n    return sanitizedText.replace(regex, '<span class=\"highlight\">$1</span>');\n  }\n\n  private sanitizeHtml(text: string): string {\n    return text\n      .replace(/&/g, '&amp;')\n      .replace(/</g, '&lt;')\n      .replace(/>/g, '&gt;')\n      .replace(/\"/g, '&quot;')\n      .replace(/'/g, '&#39;');\n  }\n  removeValueEmit(){\n    this.clickItem(null)\n  }\n}","<div class=\"search-wrapper\" #searchWrapper>\n  <nxt-input \n    [type]=\"'list'\" \n    [mode]=\"mode\" \n    [from]=\"from\" [readOnly]=\"readOnly\"\n    [value]=\"mode === 'edit' ? filterName : viewFilterName\"\n    [labelFont]=\"question?.font\" \n    [label]=\"question?.questionText ? ((question?.id+'.questionText') | nxtCustomTranslate : question?.questionText): ''\" \n    [labelColor]=\"question?.color\"\n    [labelSize]=\"question?.fontSize\" \n    [inputValueSize]=\"question?.fontSize\" \n    [labelWeight]=\"question?.fontWeight\"\n    [inputWeight]=\"question?.fontWeight\" \n    [showLabel]=\"question?.style?.showLabel\" \n    inputBorder=\"#ccc\" \n    svgHeight=\"20px\"\n    svgWidth=\"20px\" \n    [placeholder]=\"placeHolderText\" \n    [required]=\"question?.isOptional\" \n    inputBgColor=\"#ffffff\"\n    [inputId]=\"question?.trackingId\" \n    [errorMessages]=\"{ required: 'This field is required' }\"\n    [inputIconLeftSrc]=\"question?.iconLeftSrc\" \n    (inputValue)=\"getSourceDataLocal($event); inputValue($event.value, $event.question)\" \n    (onFocus)=\"onInputFocus()\"\n    (onBlur)=\"onInputBlur()\"\n    [showSuggestion]=\"showSuggestion\" \n    ariaOwns=\"selectList\" \n    ariaHasPopup=\"listbox\" \n    [isLoading]=\"isLoading\" \n    [question]=\"question\"\n    [onlyView]=\"onlyView\"\n    (removeValueEmit)=\"removeValueEmit()\">\n  </nxt-input>\n\n  <div id=\"selectList\" class=\"suggestion-wrapper\" role=\"listbox\" *ngIf=\"showSuggestion\">\n    <div *ngIf=\"finalResults().length > 0\" class=\"nxt-suggestions-container\">\n      <div *ngFor=\"let item of finalResults(); trackBy: trackByFn\" \n           (click)=\"clickItem(item)\" \n           class=\"suggestion-item\" \n           role=\"option\"\n           tabindex=\"0\"\n           (keydown.enter)=\"clickItem(item)\"\n           (keydown.space)=\"clickItem(item)\">\n        <div class=\"item-content\">\n          <div class=\"item-details\">\n            <div *ngIf=\"item.thumbnail\" class=\"thumbnail-wrapper\">\n              <img [src]=\"item.thumbnail\" [alt]=\"item.name + ' avatar'\" />\n            </div>\n            <div class=\"item-text\">\n              <!-- Primary text (first key) -->\n              <ng-container *ngIf=\"getKeys(getValues(item, SearchItem)).length > 0\">\n                <div class=\"item-name primary\" \n                     [innerHTML]=\"highlightText(getValues(item, SearchItem)[getKeys(getValues(item, SearchItem))[0]], searchKeyWord)\">\n                </div>\n              </ng-container>\n              \n              <!-- Secondary text (remaining keys) -->\n              <div class=\"item-secondary\" *ngIf=\"getKeys(getValues(item, SearchItem)).length > 1\">\n                <ng-container *ngFor=\"let key of getKeys(getValues(item, SearchItem)); let i = index\">\n                  <ng-container *ngIf=\"i > 0\">\n                    <span class=\"secondary-text\" \n                          [innerHTML]=\"highlightText(getValues(item, SearchItem)[key], searchKeyWord)\">\n                    </span>\n                    <span class=\"separator\" *ngIf=\"i < getKeys(getValues(item, SearchItem)).length - 1\"> | </span>\n                  </ng-container>\n                </ng-container>\n              </div>\n            </div>\n          </div>\n        </div>\n      </div>\n    </div>\n\n    <div *ngIf=\"noResult && searchKeyWord\" class=\"no-results\">\n      <div class=\"no-results-content\">\n        <p>\n          <svg width=\"24\" height=\"24\" viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"1\">\n            <circle cx=\"11\" cy=\"11\" r=\"8\"></circle>\n            <path d=\"m21 21-4.35-4.35\"></path>\n          </svg>\n          {{ 'NO_RESULTS_FOUND' | nxtCustomTranslate : 'No results found for' }} {{searchKeyWord}}\n        </p>\n      </div>\n    </div>\n  </div>\n</div>","import { ChangeDetectionStrategy, ChangeDetectorRef, Component, EventEmitter, Input, OnInit, Output, SimpleChanges } from '@angular/core';\nimport { ChangeWrapper } from '../../model/changeWrapper';\nimport { Subscription } from 'rxjs';\nimport { CommonModule } from '@angular/common';\nimport { ChangeService } from '../../services/change/change.service';\nimport { DataService } from '../../services/data/data.service';\nimport { NxtCustomTranslatePipe } from \"../../pipe/custom-translate.pipe\";\nimport { StorageService } from '../../services/storage/storage.service';\nimport { MatTooltipModule } from '@angular/material/tooltip';\n\n@Component({\n  selector: 'nxt-radio',\n  standalone: true,\n  imports: [\n    CommonModule,\n    NxtCustomTranslatePipe,\n    MatTooltipModule\n],\n  templateUrl: './custom-radio.component.html',\n  styleUrls: ['./custom-radio.component.css'],\n  changeDetection: ChangeDetectionStrategy.OnPush\n})\nexport class NxtRadio implements OnInit {\n\n  @Input() options: any[] = [];\n  @Input() question: any = {}\n  @Input() apiMeta: any;\n  @Input() selectedValue: string;\n  @Input() progressBar: boolean;\n  @Input() id: string;\n  @Input() readOnly = false;\n  @Input() errorMessage: string;\n  @Input() fromShengel: boolean = false;\n  @Input() referenceField: string;\n  @Input() token: string;\n  @Input() label: string;\n  @Input() mode: 'view' | 'edit' | 'print' = 'edit'; // New mode input\n  @Input() onlyView: boolean = false\n  @Output() valueChange: EventEmitter<any> = new EventEmitter<any>();\n\n  public labelField: string;\n  public valueField: string;\n  subscription: Subscription;\n  originalValue: any; // SKS11JUN25 To store the original value when entering view edit mode\n  value: ChangeWrapper;\n  selectedOptionId: any;\n\n  constructor(\n    private cdRef: ChangeDetectorRef,\n    private changeService: ChangeService,\n    private dataService: DataService,\n    private storageService: StorageService\n  ) {}\n  viewEdit: boolean = false \n\n  ngOnInit(): void {\n    // VD 31NOV24 null check\n    if (this.apiMeta) {\n      this.apiMeta = typeof this.apiMeta === 'object' ? this.apiMeta : JSON.parse(this.apiMeta);\n      let apiObj: any = this.apiMeta;\n      this.labelField = apiObj.field;\n      if(apiObj?.endpoint){\n        this.dataService.apiResponse(apiObj.endpoint)?.subscribe((apiResponse) => {\n          let responses;\n          if (apiObj.variable) {\n            responses = this.dataService.getValue(apiResponse, apiObj.variable);\n            let results = [];\n            for (let i = 0; i < responses?.length; i++) {\n              var resp = responses[i];\n              results.push(resp);\n            }\n            this.options = results;\n          } else {\n            responses = apiResponse;\n            this.options = responses;\n          }\n        });\n      }\n\n      let sourceId = apiObj.sourceQuestionId;\n      if (sourceId) {\n        this.subscription = this.changeService.changeAnnounced$.subscribe(\n          (changeValue) => {\n            if (changeValue != undefined) {\n              let apiResponseVal = this.storageService.getApiResponseValue(changeValue.fromQuestionId)\n              if (changeValue.fromQuestionId && changeValue.valueObj !== undefined && ( Array.isArray(apiObj.sourceQuestionId)? apiObj.sourceQuestionId.includes(changeValue.fromQuestionId) : changeValue.fromQuestionId === apiObj.sourceQuestionId)) {\n                this.selectedValue = apiResponseVal ? apiResponseVal[apiObj.valueField] : changeValue.valueObj[apiObj.valueField];\n                let value = {};\n                value['name'] = this.selectedValue;\n                this.radioChange(value);\n              }\n              this.changeService.confirmChange(changeValue.fromQuestionId);\n            }\n          }\n        );\n      }\n    }\n    this.radioChange(this.selectedValue);\n  }\nngOnChanges(changes: SimpleChanges) {\n    if (changes['mode']) {\n      this.viewEdit = false\n    }\n    if(changes['selectedValue']){\n      this.radioChange(this.selectedValue);\n    }\n  }\n  radioChange(event: any) {\n    let change = new ChangeWrapper();\n    change['fromQuestionId'] = this.id;\n    change['valueObj'] = event?.target?.id ? event?.target?.id : event?.valueObj ? event?.valueObj : event || '';\n    change['field'] = this.apiMeta?.defaultField || (Array.isArray(this.apiMeta?.field) ? this.apiMeta?.field?.[0] : this.apiMeta?.field);\n    change['referenceField'] = this.referenceField;\n    // SKS11JUN25 Only emit the value if not in view edit mode\n    if (!this.viewEdit) {\n      this.valueChange.emit({question : this.question, value: change});\n    }\n    // SKS7AUG25 selected option id get\n    if(Array.isArray(this.options) && this.options?.length > 0){\n      this.options.forEach((opt: any) => {\n        if(opt.value === change['valueObj']){\n          this.selectedOptionId = opt.id\n          return\n        }\n      })\n    }\n    this.value = change\n    this.cdRef.detectChanges();\n  }\n  viewEditClick(ques: any) {\n    this.originalValue = ques.input; // SKS11JUN25 Store the original value\n    this.viewEdit = true; // Enter view edit mode\n    this.mode = 'edit';\n  }\n  discardChanges() {\n    this.viewEdit = false; // Exit view edit mode\n    this.mode = 'view'; // Switch back to view mode\n    this.selectedValue = this.originalValue; // SKS11JUN25 Restore the original value\n  }\n  saveChanges() {\n    let ques = this.question\n    ques['singleFieldChange'] = true\n    let change: any ={};\n    change['fromQuestionId'] = this.question.id;\n    change['valueObj'] = this.value;\n    change['field'] = this.apiMeta?.defaultField || (Array.isArray(this.apiMeta?.field) ? this.apiMeta?.field?.[0] : this.apiMeta?.field);\n    change['referenceField'] = this.question.referenceField;\n    this.valueChange.emit({question : ques, value: change}); // Emit the updated value\n    this.viewEdit = false; // SKS11JUN25 Exit view edit mode\n    this.mode = 'view'; // Switch back to view mode\n  }\n}\n","<!-- AP26MAR25  Mark as checked if it matches the selected value -->\n<div *ngIf=\"label && question.style?.showLabel\" [style.font-weight]=\"question.fontWeight || 'normal'\" [style.font-size]=\"question.fontWeight || '14px'\"\n  style=\"display: flex; gap: 5px;\"> \n  {{ label }}\n  <div *ngIf=\"question.helpText\" [matTooltip]=\"question.helpText\" matTooltipClass=\"white-tooltip\">\n    <svg width=\"16\" height=\"16\" viewBox=\"0 0 16 16\" fill=\"none\" xmlns=\"http://www.w3.org/2000/svg\">\n      <path fill-rule=\"evenodd\" clip-rule=\"evenodd\" d=\"M8.00009 0.615356C3.90779 0.615356 0.615479 3.90766 0.615479 7.99997C0.615479 12.0923 3.90779 15.3846 8.00009 15.3846C12.0924 15.3846 15.3847 12.0923 15.3847 7.99997C15.3847 3.90766 12.0924 0.615356 8.00009 0.615356ZM8.00012 13.5385C4.92319 13.5385 2.46165 11.0769 2.46165 8C2.46165 4.92307 4.92319 2.46153 8.00012 2.46153C11.077 2.46153 13.5386 4.92307 13.5386 8C13.5386 11.0769 11.077 13.5385 8.00012 13.5385ZM8.00027 4.33846C8.52335 4.33846 8.92335 4.73846 8.92335 5.26153C8.92335 5.78461 8.52335 6.18461 8.00027 6.18461C7.47719 6.18461 7.07719 5.78461 7.07719 5.26153C7.07719 4.73846 7.47719 4.33846 8.00027 4.33846ZM9.53859 10.8C9.53859 10.9538 9.41552 11.0769 9.2309 11.0769H6.76936C6.61552 11.0769 6.46167 10.9846 6.46167 10.8V10.1846C6.46167 10.0308 6.58475 9.84614 6.76936 9.84614C6.92321 9.84614 7.07706 9.75383 7.07706 9.56921V8.33844C7.07706 8.1846 6.95398 7.99998 6.76936 7.99998C6.61552 7.99998 6.46167 7.90767 6.46167 7.72306V7.10767C6.46167 6.95383 6.58475 6.76921 6.76936 6.76921H8.61552C8.76936 6.76921 8.92321 6.92306 8.92321 7.10767V9.56921C8.92321 9.72306 9.04629 9.84614 9.2309 9.84614C9.38475 9.84614 9.53859 9.99998 9.53859 10.1846V10.8Z\" fill=\"#747474\"/>\n    </svg>\n  </div>\n  <div *ngIf=\"label && question.isOptional && question.style?.showLabel && mode === 'edit'\" style=\"color: red;\">*</div>\n</div>\n<div class=\"hover-wrapper custom-radio-container\" [style.backgroundColor]=\"mode === 'edit' ? '#ffffff' : '#f5f5f5'\">\n  <div style=\"display: flex; justify-content: space-between; align-items: center; flex-wrap: wrap; background-color: #ffffff; border-radius: 5px;\">\n    @if(mode === 'edit'){\n      <div style=\"display: flex; gap: 10px; min-height: 40px; align-items: center;\">\n        <div *ngFor=\"let option of options\"\n          [class]=\"'custom-radio-option'\">\n\n          <input type=\"radio\" [id]=\"apiMeta ? option[labelField] ?? option.value : option.value\"\n            [checked]=\"(selectedValue ?? '') == option.value\" [name]=\"id\" [value]=\"selectedValue\"\n            (change)=\"radioChange($event)\" />\n          <label class=\"nxt-radio-label\" [for]=\"apiMeta ? option[labelField] ?? option.value : option.value\">\n            @if(apiMeta && option[labelField]){\n              {{option[labelField]}}\n            } @else {\n              {{option.id +'.label' | nxtCustomTranslate : option.label || option.value }}\n            }\n          </label>\n        </div>\n      </div>\n    }\n    <div *ngIf=\"viewEdit\" class=\"flex\" style=\"display: flex; margin-left: auto;\">\n      <div *ngIf=\"apiMeta?.singleFieldDisable !== undefined && viewEdit ? !apiMeta?.singleFieldDisable : viewEdit && originalValue !== value\"\n          style=\"padding-right: 5px;\">\n          <svg (click)=\"saveChanges()\" width=\"16\" height=\"16\" viewBox=\"0 0 12 12\" fill=\"none\"\n            xmlns=\"http://www.w3.org/2000/svg\">\n            <path\n              d=\"M5.9502 0.5C8.96006 0.500106 11.4004 2.94031 11.4004 5.9502C11.4003 8.95999 8.95999 11.4003 5.9502 11.4004C2.94031 11.4004 0.500106 8.96006 0.5 5.9502C0.5 2.94024 2.94024 0.5 5.9502 0.5Z\"\n              stroke=\"#B0ADAB\" />\n            <path\n              d=\"M8.88111 3.84583C8.83269 3.7972 8.77513 3.7586 8.71176 3.73227C8.64838 3.70594 8.58043 3.69238 8.5118 3.69238C8.44317 3.69238 8.37521 3.70594 8.31184 3.73227C8.24846 3.7586 8.19091 3.7972 8.14249 3.84583L4.8269 7.16347L3.35253 5.6891C3.30403 5.6406 3.24646 5.60213 3.18309 5.57588C3.11972 5.54964 3.05181 5.53613 2.98322 5.53613C2.91463 5.53613 2.84672 5.54964 2.78335 5.57588C2.71999 5.60213 2.66241 5.6406 2.61391 5.6891C2.56541 5.7376 2.52694 5.79518 2.50069 5.85854C2.47445 5.92191 2.46094 5.98982 2.46094 6.05841C2.46094 6.127 2.47445 6.19491 2.50069 6.25828C2.52694 6.32165 2.56541 6.37922 2.61391 6.42772L4.45677 8.27058C4.50519 8.31922 4.56274 8.35781 4.62612 8.38414C4.6895 8.41047 4.75745 8.42403 4.82608 8.42403C4.89471 8.42403 4.96266 8.41047 5.02604 8.38414C5.08942 8.35781 5.14697 8.31922 5.19539 8.27058L8.88111 4.58445C8.92974 4.53603 8.96834 4.47848 8.99467 4.4151C9.021 4.35173 9.03456 4.28377 9.03456 4.21514C9.03456 4.14651 9.021 4.07856 8.99467 4.01518C8.96834 3.9518 8.92974 3.89425 8.88111 3.84583Z\"\n              fill=\"#B0ADAB\" />\n          </svg>\n        </div>\n        <div *ngIf=\"viewEdit && originalValue !== value\">\n          <svg (click)=\"discardChanges()\" width=\"16\" height=\"16\" viewBox=\"0 0 12 12\" fill=\"none\"\n            xmlns=\"http://www.w3.org/2000/svg\">\n            <path\n              d=\"M7.05555 4.00883L5.94 5.12438L4.82445 4.00883C4.57861 3.76299 4.18191 3.76299 3.93607 4.00883C3.69023 4.25467 3.69023 4.65137 3.93607 4.89721L5.05162 6.01276L3.93607 7.12831C3.69023 7.37415 3.69023 7.77085 3.93607 8.01669C4.18191 8.26253 4.57861 8.26253 4.82445 8.01669L5.94 6.90114L7.05555 8.01669C7.30139 8.26253 7.69809 8.26253 7.94393 8.01669C8.18977 7.77085 8.18977 7.37415 7.94393 7.12831L6.82838 6.01276L7.94393 4.89721C8.18977 4.65137 8.18977 4.25467 7.94393 4.00883C7.69809 3.77285 7.30021 3.77285 7.05555 4.00883ZM5.94 0.0820312C2.70017 0.0820312 0.0808594 2.70134 0.0808594 5.94118C0.0808594 9.18101 2.70017 11.8003 5.94 11.8003C9.17983 11.8003 11.7991 9.18101 11.7991 5.94118C11.7991 2.70134 9.17983 0.0820312 5.94 0.0820312ZM5.94 10.6367C3.35426 10.6367 1.24422 8.52667 1.24422 5.94118C1.24422 3.35553 3.35426 1.24549 5.94 1.24549C8.52558 1.24549 10.6356 3.35553 10.6356 5.94118C10.6356 8.52667 8.52558 10.6367 5.94 10.6367Z\"\n              fill=\"#B0ADAB\" />\n          </svg>\n        </div>\n    </div>\n  </div>\n  @if(mode !== 'edit') {\n    <div class=\"flex content-space-between\" style=\"height: 40px; align-items: center;font-size: 12px;\">\n      <div style=\"color: #999;\">{{selectedOptionId +'.label' | nxtCustomTranslate : selectedValue || '' : 'formBuilder' }}</div>\n      <div>\n        <svg *ngIf=\"!readOnly && !viewEdit && !onlyView\" class=\"edit-icon\" (click)=\"viewEditClick(question)\" width=\"13\"\n          height=\"14\" viewBox=\"0 0 13 14\" fill=\"none\" xmlns=\"http://www.w3.org/2000/svg\">\n          <path fill-rule=\"evenodd\" clip-rule=\"evenodd\"\n            d=\"M1.99987 9.0017L4.39602 11.3979C4.50371 11.5055 4.66525 11.5055 4.77294 11.3979L10.7499 5.39401C10.8576 5.28631 10.8576 5.12477 10.7499 5.01708L8.38064 2.64785C8.27294 2.54016 8.11141 2.54016 8.00371 2.64785L1.99987 8.6517C1.89217 8.75939 1.89217 8.92093 1.99987 9.0017ZM9.1614 1.54401C9.05371 1.6517 9.05371 1.81324 9.1614 1.92093L11.5306 4.29016C11.6383 4.39785 11.7999 4.39785 11.9076 4.29016L12.5806 3.61708C13.0114 3.21324 13.0114 2.56708 12.5806 2.13631L11.3153 0.870928C10.8845 0.440159 10.2114 0.440159 9.78063 0.870928L9.1614 1.54401ZM0.00755862 12.9863C-0.0462875 13.2555 0.19602 13.4979 0.465251 13.444L3.39987 12.744C3.50756 12.7171 3.58833 12.6632 3.64217 12.6094L3.69602 12.5555C3.74987 12.5017 3.77679 12.3132 3.6691 12.2055L1.24602 9.78247C1.13833 9.67478 0.949866 9.7017 0.89602 9.75554L0.842174 9.80939C0.761405 9.89016 0.734482 9.97093 0.707559 10.0517L0.00755862 12.9863Z\"\n            fill=\"#B0ADAB\" />\n        </svg>\n      </div>\n    </div>\n  }\n</div>","import { Injectable, Optional } from '@angular/core';\nimport { HttpClient } from '@angular/common/http';\nimport { BehaviorSubject } from 'rxjs';\n\n@Injectable({\n  providedIn: 'root'\n})\nexport class SharedService {\n  // VD 23JAN24 optionally declared httpClient\n  constructor(@Optional() private __http: HttpClient) { }\n  // loader changes\n  private loadingSubject = new BehaviorSubject<boolean>(false);\n  public isLoading$ = this.loadingSubject.asObservable();\n\n  processViewFile(fileName: string = '',api:string) {\n    if (fileName) {\n      this.viewFile(fileName,api).subscribe( (apiResponse: any) => {\n        if (apiResponse && apiResponse.sas_url) {\n          window.open(apiResponse.sas_url, '_blank');\n        }\n      }, (apiError) => {\n         console.error('ERROR WHILE VIEWING File');\n      });\n    }\n  }\n\n  viewFile(fileName: string = '',api:string) {\n    const params = { file_name: fileName };\n    return this.__http.post(api , params);\n  }\n\n docIcon(ext) {\n    if (ext === 'pdf') {\n      return 'https://rnxt.s3.amazonaws.com/Icons/fileTypeIcons/img-file-PDF.png';\n    } else if (ext === 'xlsx') {\n      return 'https://rnxt.s3.amazonaws.com/Icons/fileTypeIcons/img-file-XLSX.png';\n    } else if (ext === 'docx') {\n      return 'https://rnxt.s3.amazonaws.com/Icons/fileTypeIcons/img-file-DOCX.png';\n    } else if (ext === 'avi') {\n      return 'https://rnxt.s3.amazonaws.com/Icons/fileTypeIcons/img-file-AVI.png';\n    } else if (ext === 'doc') {\n      return 'https://rnxt.s3.amazonaws.com/Icons/fileTypeIcons/img-file-DOC.png';\n    } else if (ext === 'gif') {\n      return 'https://rnxt.s3.amazonaws.com/Icons/fileTypeIcons/img-file-GIF.png';\n    } else if (ext === 'jpg') {\n      return 'https://rnxt.s3.amazonaws.com/Icons/fileTypeIcons/img-file-JPG.png';\n    } else if (ext === 'mov') {\n      return 'https://rnxt.s3.amazonaws.com/Icons/fileTypeIcons/img-file-MOV.png';\n    } else if (ext === 'mp3') {\n      return 'https://rnxt.s3.amazonaws.com/Icons/fileTypeIcons/img-file-MP3.png';\n    } else if (ext === 'mp4') {\n      return 'https://rnxt.s3.amazonaws.com/Icons/fileTypeIcons/img-file-MP4.png';\n    } else if (ext === 'mpeg') {\n      return 'https://rnxt.s3.amazonaws.com/Icons/fileTypeIcons/img-file-MPEG.png';\n    } else if (ext === 'mpg') {\n      return 'https://rnxt.s3.amazonaws.com/Icons/fileTypeIcons/img-file-MPG.png';\n    } else if (ext === 'png') {\n      return 'https://rnxt.s3.amazonaws.com/Icons/fileTypeIcons/img-file-PNG.png';\n    } else if (ext === 'ppt') {\n      return 'https://rnxt.s3.amazonaws.com/Icons/fileTypeIcons/img-file-PPT.png';\n    } else if (ext === 'txt') {\n      return 'https://rnxt.s3.amazonaws.com/Icons/fileTypeIcons/img-file-TXT.png';\n    } else if (ext === 'xls') {\n      return 'https://rnxt.s3.amazonaws.com/Icons/fileTypeIcons/img-file-XLS.png';\n    } else {\n      return 'https://rnxt.s3.amazonaws.com/Icons/fileTypeIcons/ic_document.svg';\n    }\n  }\n  // VD loader changes\n\n  showLoader() {\n    this.loadingSubject.next(true);\n  }\n\n  hideLoader() {\n    this.loadingSubject.next(false);\n  }\n}\n","import { Component, OnInit, Output, EventEmitter, Input, ElementRef, OnChanges, SimpleChanges, ChangeDetectionStrategy, ChangeDetectorRef } from '@angular/core';\n// HA 19DEC23 imported translation service\nimport { SharedService } from '../../services/shared/shared.service';\nimport { DomSanitizer } from '@angular/platform-browser';\nimport { CommonModule } from '@angular/common';\nimport { catchError, of } from 'rxjs';\nimport { DataService } from '../../services/data/data.service';\nimport { NxtCustomTranslatePipe } from '../../pipe/custom-translate.pipe';\nimport { MatTooltipModule } from '@angular/material/tooltip';\n@Component({\n  selector: 'nxt-file-upload',\n  standalone: true,\n  imports: [\n    CommonModule, NxtCustomTranslatePipe, MatTooltipModule\n  ],\n  templateUrl: './file-upload.component.html',\n  styleUrls: ['./file-upload.component.css'],\n  changeDetection: ChangeDetectionStrategy.OnPush\n})\nexport class NxtFileUpload implements OnInit, OnChanges {\n  @Output() selectedFileData = new EventEmitter<any>();\n  @Output() deletedFileData = new EventEmitter<any>();\n  \n  @Input() allFiles: any;\n  @Input() mode: 'view' | 'edit' | 'print' = 'edit'; // SKS11JUN25 New mode input\n  @Input() config: any;\n  @Input() from: any;\n  @Input() dragAndDrop: boolean = false;\n  @Input() readOnly: boolean = false;\n  @Input() onlyView: boolean = false;\n  @Input() required: boolean = false;\n  @Input() hideSubtext: boolean = false;\n  @Input() label: any\n  @Input() fileConfig: any;\n\n  //RS 09JAN2025\n  public allowedFileTypes: string[] = [];\n  public maxFileSize: number = 0;  // in bytes(Binary)\n  public maxFiles: number = 5;     // default limit\n  public validationErrors: string[] = [];\n  // Drag and drop properties\n  isDragging = false;\n  dragCounter = 0;\n  isPopupDragging = false;\n  popupDragCounter = 0;\n  public selectedFileNameArray: string[] = [];\n  public copyOfInputAllFiles;\n  public fileUrl;\n  public isImage = false;\n  public fileName = '';\n  currentFile: any;\n  public showPopup = false; // SKS11JUN25 Add popup visibility control\n  viewEdit: boolean = false\n  originalValue: any; // SKS13JUN25 To store the original value when entering view edit mode\n  isLoading = false;\n  fileCache = {}\n\n  constructor(private cdRef: ChangeDetectorRef, private SharedService: SharedService, private dataService: DataService, private sanitizer: DomSanitizer) { }\n  //RS 09JAN2025\n  ngOnInit() {\n    this.initializeFileConfigs();\n  }\n  ngOnChanges(simpleChanges: SimpleChanges) {\n    if (simpleChanges['mode']) {\n      this.mode = simpleChanges['mode'].currentValue;\n    }\n    if (simpleChanges.allFiles) {  //SKS5NOV25\n      this.copyOfInputAllFiles = simpleChanges.allFiles.currentValue || [];\n    }\n  }\n\n  //RS 09JAN2025 Initializes file upload settings (allowed types, max size, and max files) by parsing metadata from fieldsMeta\n  initializeFileConfigs() {\n    if (this.fileConfig) {\n      this.allowedFileTypes = (this.fileConfig.allowedTypes || []).map(ext => ext.toLowerCase().startsWith('.') ? ext.toLowerCase() : '.' + ext.toLowerCase());\n      this.maxFileSize = this.fileConfig.maxFileSize ? this.fileConfig.maxFileSize * 1024 * 1024 : 0;\n      this.maxFiles = this.fileConfig.maxFiles || 5;\n      this.dragAndDrop  = this.dragAndDrop || this.fileConfig?.dragAndDrop\n    } else if (this.config?.fieldsMeta) {\n      try {\n        // SKS20MAR25 check if config fieldsmeta is string\n        const metaData = typeof this.config['fieldsMeta'] === 'object' ? this.config['fieldsMeta'] || [] : JSON.parse(this.config['fieldsMeta']);\n        const fileConfig = metaData[0];  // Get first config object\n        if (fileConfig) {\n          this.allowedFileTypes = fileConfig.allowedTypes || [];\n          this.maxFileSize = fileConfig.maxFileSize || 0;\n          this.maxFiles = fileConfig.maxFiles || 5;\n        }\n      } catch (error) {\n        // console.error('Error parsing fieldsMeta:', error);\n      }\n    }\n  }\n  // SKS11JUN25 Open the popup\n  openPopup(file?: any) {\n    this.showPopup = true;\n    this.viewFile(file ? file : this.copyOfInputAllFiles[0])\n  }\n\n  // SKS11JUN25 Close the popup\n  closePopup() {\n    this.showPopup = false;\n  }\n  uploadMultipleFiles(event: any) {\n    this.validationErrors = []; // RS 17JAN2025 Clear previous errors\n    let inputFiles: any[] = this.copyOfInputAllFiles ? this.copyOfInputAllFiles : [];\n    const selectedFileData = [];\n    const uploadedFiles = event.target.files;\n\n    // RS 09JAN2025 Check file count limit\n    if (this.maxFiles && uploadedFiles.length + inputFiles.length > this.maxFiles) {\n      this.validationErrors.push(`Maximum ${this.maxFiles} files allowed`);\n      event.target.value = '';\n      return;\n    }\n\n    const readFilesPromises = [];\n\n    for (const eachUploadedFile of uploadedFiles) {\n      const file: File = eachUploadedFile;\n\n      //RS 09JAN2025 Check file type\n      const fileExt = '.' + (file.name.split('.').pop() || '').toLowerCase();\n      if (this.allowedFileTypes.length > 0 && !this.allowedFileTypes.includes(fileExt)) {\n        this.validationErrors.push(`File type ${fileExt} not allowed. Allowed types: ${this.allowedFileTypes.join(', ')}`);\n        continue;\n      }\n\n      //RS 09JAN2025 Check file size\n      if (this.maxFileSize && file.size > this.maxFileSize) {\n        this.validationErrors.push(`File \"${file.name}\" exceeds size limit of ${this.maxFileSize / 1048576}MB`);\n        continue;\n      }\n\n      if (!this.validationErrors.length) {\n        const format = fileExt.substring(1);\n        const fileReadPromise = new Promise<void>((resolve, reject) => {\n          const reader = new FileReader();\n          reader.readAsDataURL(file);\n\n          reader.onload = () => {\n            const fileData = {\n              doc: reader.result,\n              name: file.name,\n              type: file.type,\n              format,\n              size: file.size, // RS 17JAN2025 \n              id: null,\n            };\n\n            selectedFileData.push(fileData);\n            inputFiles.push(fileData);\n            resolve();\n          };\n\n          reader.onerror = () => {\n            reject();\n            this.validationErrors.push(`Error reading file \"${file.name}\"`);// RS 17JAN2025 \n          };\n        });\n        readFilesPromises.push(fileReadPromise);\n      }\n    }\n    if (readFilesPromises.length > 0) {\n      // Wait for all promises to resolve\n      Promise.all(readFilesPromises).then(() => {\n        this.copyOfInputAllFiles = [...inputFiles];\n        this.cdRef.markForCheck(); // Trigger change detection\n        let change: any = {};\n        change['fromQuestionId'] = this.config?.id;\n        change['valueObj'] = inputFiles;\n        change['field'] = this.config?.subText?.defaultField || (Array.isArray(this.config?.subText?.field) ? this.config?.subText?.field?.[0] : this.config?.subText?.field);\n        change['referenceField'] = this.config?.referenceField;\n        this.selectedFileData.emit({ config: this.config, value: change });\n      }).catch(() => {\n        // console.error('Error reading files');\n      });\n    } else {\n      console.warn('You can upload max 5 files');\n      // this.toastr.warning(TOASTER_MESSAGES.MAX_FIVE_FILES, TOASTER_MESSAGES.WARNING_TITLE);\n    }\n    event.target.value = '';\n  }\n\n  deleteFile(currentFileIndex) {\n    const deletedFileName = this.selectedFileNameArray.splice(currentFileIndex, 1);\n    const deletedFile = this.copyOfInputAllFiles.splice(currentFileIndex, 1);\n    this.copyOfInputAllFiles.length > 0 ? this.viewFile(this.copyOfInputAllFiles[0]) : this.viewFile(null);\n    this.deletedFileData.emit(deletedFile[0]);\n    let change: any;\n    change['fromQuestionId'] = this.config?.id;\n    change['valueObj'] = this.copyOfInputAllFiles;\n    change['field'] = this.config?.subText?.defaultField || (Array.isArray(this.config?.subText?.field) ? this.config?.subText?.field?.[0] : this.config?.subText?.field);\n    change['referenceField'] = this.config?.referenceField;\n    this.selectedFileData.emit({ config: this.config, value: change });\n    this.cdRef.markForCheck(); // Trigger change detection\n  }\n\n  viewableTypes = [\n    // Images\n    'image/png',\n    'image/jpeg',\n    'image/jpg',\n    'image/gif',\n    'image/webp',\n    'image/bmp',\n    'image/svg+xml',\n    // Documents\n    'application/pdf',\n    // Text\n    'text/plain',\n    'text/html',\n    'application/json'\n  ];\n  // VD 20May24 - preview changes\n  // RS 09DEC24 Changed keys\n  viewFile(currentFile) {\n    this.currentFile = currentFile;\n    // AP-25MAR25 Ensure subText is parsed into an object if it's not already\n    if (this.config?.subText) this.config['subText'] = typeof this.config?.subText === 'object' ? this.config?.subText : JSON.parse(this.config['subText']) || {};\n    if (this.config?.subText != undefined) {\n      let endpoint = this.config?.subText?.endpoint;\n      let queryParameter = this.config?.subText?.queryParameter;\n      let file = currentFile;\n      if (endpoint && file[queryParameter]) {\n        this.isLoading = true\n        const fullEndPoint = endpoint + '?' + queryParameter + '=' + file[queryParameter];\n        if(this.fileCache[fullEndPoint]){\n          this.handleFileContent(this.fileCache[fullEndPoint]);\n        } else if (fullEndPoint) {\n          this.dataService.apiResponse(fullEndPoint).pipe(\n            catchError((error) => {\n              this.viewLocalFile(); // Call fallback method\n              return of(null); // Return a fallback value to keep observable chain alive\n            })\n          ).subscribe((apiResponse) => {\n            if (apiResponse) {\n              this.isLoading = false\n              this.fileCache[fullEndPoint] = apiResponse\n              this.handleFileContent(apiResponse);\n            }\n          });\n        }\n      } else {\n        this.viewLocalFile();\n      }\n    } else {\n      this.viewLocalFile()\n    }\n  }\n\n  viewLocalFile() {\n    if (this.currentFile?.doc) {\n      this.setFileUrl(this.currentFile.doc);\n      this.fileName = this.currentFile.name;\n      this.isImage = this.currentFile.type?.startsWith('image/');\n    }\n    this.isLoading = false;\n    this.cdRef.markForCheck();\n  }\n\n\n  handleFileContent(fileResponse: any) {\n    if (!fileResponse?.content?.data?.length) {\n      console.error('Empty file buffer');\n      return;\n    }\n    const byteArray = new Uint8Array(fileResponse.content.data);\n    const blob = new Blob([byteArray], { type: fileResponse.type });\n    const url = window.URL.createObjectURL(blob);\n    this.setFileUrl(url);\n    this.isImage = false;\n    if (fileResponse.name) {\n      this.fileName = fileResponse.name;\n      const imageExtensions = ['jpg', 'jpeg', 'png', 'gif', 'bmp', 'webp'];\n      const fileExtension = fileResponse.name.split('.').pop()?.toLowerCase();\n      this.isImage = imageExtensions.includes(fileExtension || '');\n    }\n    this.cdRef.markForCheck(); // Trigger change detection\n  }\n\n  setFileUrl(url: any) {\n    if (url) {\n      this.fileUrl = this.sanitizer.bypassSecurityTrustResourceUrl(url);\n    } else {\n      this.fileUrl = null; // or handle gracefully\n      this.isLoading = false\n    }\n  }\n\n  getDocIcon(docName) {\n    const ext = docName.split('.').pop(-1);\n    return this.SharedService.docIcon(ext);\n  }\n\n  close() {\n    this.fileName = '';\n    this.fileUrl = '';\n    this.isImage = false;\n    if (this.fileUrl) {\n      URL.revokeObjectURL(this.fileUrl);\n    }\n  }\n  viewEditClick(ques: any) {\n    this.originalValue = this.copyOfInputAllFiles; //SKS13JUN25 Store the original value\n    this.viewEdit = true; // Enter view edit mode\n    this.mode = 'edit';\n  }\n  saveChanges() {\n    let ques = this.config\n    ques['singleFieldChange'] = true\n    let change: any = {};\n    change['fromQuestionId'] = this.config?.id;\n    change['valueObj'] = this.copyOfInputAllFiles;\n    change['field'] = this.config?.subText?.defaultField || (Array.isArray(this.config?.subText?.field) ? this.config?.subText?.field?.[0] : this.config?.subText?.field);\n    change['referenceField'] = this.config?.referenceField;\n    this.selectedFileData.emit({ config: ques, value: change });\n    this.viewEdit = false; // Exit view edit mode\n    this.mode = 'view'; // Switch back to view mode\n  }\n  discardChanges() {\n    this.copyOfInputAllFiles = this.originalValue; // Revert to original value\n    this.viewEdit = false; // SKS13JUN25 Exit view edit mode\n    this.mode = 'view'; // SKS13JUN25 Switch back to view mode\n  }\n  downloadFile(file: any) {\n    if (file?.doc) {\n      // Local file case (Base64 or URL)\n      const link = document.createElement('a');\n      link.href = file.doc;\n      link.download = file.name;\n      link.click();\n    } else if (file?.id && this.config?.subText?.endpoint) { //SKS23FEB25 API Fetch Case\n      const endpoint = this.config?.subText?.endpoint;\n      const queryParameter = this.config?.subText?.queryParameter;\n      if (endpoint && file[queryParameter]) {\n        const fullEndPoint = `${endpoint}?${queryParameter}=${file[queryParameter]}`;\n        this.dataService.apiResponse(fullEndPoint)\n          .pipe( catchError(() => of(null)))\n          .subscribe((apiResponse) => {\n            if (!apiResponse?.content?.data?.length) {\n              console.error('Empty file from API');\n              return;\n            }\n            const byteArray = new Uint8Array(apiResponse.content.data);\n            const blob = new Blob([byteArray], { type: apiResponse.type });\n            // Direct download (no recursion needed)\n            const link = document.createElement('a');\n            link.href = window.URL.createObjectURL(blob);\n            link.download = apiResponse.name || 'download';\n            link.click();\n          });\n      }\n    }\n  }\n  isPreviewable(type: string, name: string): boolean {\n    return this.viewableTypes.includes(type || '');\n  }\n  get fileConfigTooltip(): string {\n    const types = this.fileConfig?.allowedTypes?.length\n      ? this.fileConfig.allowedTypes.join(', ')\n      : 'Any';\n    const size = this.fileConfig?.maxFileSize\n      ? this.fileConfig.maxFileSize + ' MB'\n      : 'No limit';\n    const count = this.fileConfig?.maxFiles\n      ? this.fileConfig.maxFiles\n      : 'No limit';\n    return `Allowed types: ${types}\\nMax size: ${size}\\nMax files: ${count}`;\n  }\n  // Main drag and drop handlers\n  onDragEnter(event: DragEvent) {\n    if (!this.dragAndDrop || this.readOnly) return;\n    event.preventDefault();\n    event.stopPropagation();\n    this.dragCounter++;\n    if (event.dataTransfer?.items && event.dataTransfer.items.length > 0) {\n      this.isDragging = true;\n      this.cdRef.markForCheck();\n    }\n  }\n\n  onDragOver(event: DragEvent) {\n    if (!this.dragAndDrop || this.readOnly) return;\n    event.preventDefault();\n    event.stopPropagation();\n  }\n\n  onDragLeave(event: DragEvent) {\n    if (!this.dragAndDrop || this.readOnly) return;\n    event.preventDefault();\n    event.stopPropagation();\n    this.dragCounter--;\n    if (this.dragCounter === 0) {\n      this.isDragging = false;\n      this.cdRef.markForCheck();\n    }\n  }\n\n  onDrop(event: DragEvent) {\n    if (!this.dragAndDrop || this.readOnly) return;\n    event.preventDefault();\n    event.stopPropagation();\n    this.isDragging = false;\n    this.dragCounter = 0;\n\n    const files = event.dataTransfer?.files;\n    if (files && files.length > 0) {\n      this.processFiles(files);\n    }\n    this.cdRef.markForCheck();\n  }\n\n  // Popup drag and drop handlers\n  onPopupDragEnter(event: DragEvent) {\n    if (this.readOnly) return;\n    event.preventDefault();\n    event.stopPropagation();\n    this.popupDragCounter++;\n    if (event.dataTransfer?.items && event.dataTransfer.items.length > 0) {\n      this.isPopupDragging = true;\n      this.cdRef.markForCheck();\n    }\n  }\n\n  onPopupDragOver(event: DragEvent) {\n    if (this.readOnly) return;\n    event.preventDefault();\n    event.stopPropagation();\n  }\n\n  onPopupDragLeave(event: DragEvent) {\n    if (this.readOnly) return;\n    event.preventDefault();\n    event.stopPropagation();\n    this.popupDragCounter--;\n    if (this.popupDragCounter === 0) {\n      this.isPopupDragging = false;\n      this.cdRef.markForCheck();\n    }\n  }\n\n  onPopupDrop(event: DragEvent) {\n    if (this.readOnly) return;\n    event.preventDefault();\n    event.stopPropagation();\n    this.isPopupDragging = false;\n    this.popupDragCounter = 0;\n\n    const files = event.dataTransfer?.files;\n    if (files && files.length > 0) {\n      this.processFiles(files);\n    }\n    this.cdRef.markForCheck();\n  }\n  // Process dropped or selected files\n  processFiles(fileList: FileList) {\n    this.validationErrors = [];\n    let inputFiles: any[] = this.copyOfInputAllFiles ? [...this.copyOfInputAllFiles] : [];\n    const selectedFileData = [];\n\n    // Check file count limit\n    if (this.maxFiles && fileList.length + inputFiles.length > this.maxFiles) {\n      this.validationErrors.push(`Maximum ${this.maxFiles} files allowed`);\n      this.cdRef.markForCheck();\n      return;\n    }\n\n    const readFilesPromises = [];\n\n    for (let i = 0; i < fileList.length; i++) {\n      const file: File = fileList[i];\n\n      // Check file type\n      const fileExt = '.' + (file.name.split('.').pop() || '').toLowerCase();\n      if (this.allowedFileTypes.length > 0 && !this.allowedFileTypes.includes(fileExt)) {\n        this.validationErrors.push(`File type ${fileExt} not allowed. Allowed types: ${this.allowedFileTypes.join(', ')}`);\n        continue;\n      }\n\n      // Check file size\n      if (this.maxFileSize && file.size > this.maxFileSize) {\n        this.validationErrors.push(`File \"${file.name}\" exceeds size limit of ${this.maxFileSize / 1048576}MB`);\n        continue;\n      }\n\n      if (!this.validationErrors.length) {\n        const format = fileExt.substring(1);\n        const fileReadPromise = new Promise<void>((resolve, reject) => {\n          const reader = new FileReader();\n          reader.readAsDataURL(file);\n\n          reader.onload = () => {\n            const fileData = {\n              doc: reader.result,\n              name: file.name,\n              type: file.type,\n              format,\n              size: file.size,\n              id: null,\n            };\n\n            selectedFileData.push(fileData);\n            inputFiles.push(fileData);\n            resolve();\n          };\n\n          reader.onerror = () => {\n            reject();\n            this.validationErrors.push(`Error reading file \"${file.name}\"`);\n          };\n        });\n        readFilesPromises.push(fileReadPromise);\n      }\n    }\n\n    if (readFilesPromises.length > 0) {\n      Promise.all(readFilesPromises).then(() => {\n        this.copyOfInputAllFiles = [...inputFiles];\n        this.cdRef.markForCheck();\n        let change: any = {};\n        change['fromQuestionId'] = this.config?.id;\n        change['valueObj'] = inputFiles;\n        change['field'] = this.config?.subText?.defaultField || (Array.isArray(this.config?.subText?.field) ? this.config?.subText?.field?.[0] : this.config?.subText?.field);\n        change['referenceField'] = this.config?.referenceField;\n        this.selectedFileData.emit({ config: this.config, value: change });\n      }).catch(() => {\n        // console.error('Error reading files');\n      });\n    }\n    this.cdRef.markForCheck();\n  }\n}\n","<!-- SKS11JUN25 file-upload.component.html -->\n<div *ngIf=\"label\" style=\"gap: 5px; display: flex; align-items: center;\" [style]=\"config?.style?.labelValueStyle\" [ngStyle]=\"{\n        'font-family': config?.font,\n        'color': config?.color || '#212529',\n        'font-size': config?.fontSize || '14px',\n        'font-weight': config?.fontWeight || 'normal'\n    }\">{{ label ? ((config?.id+'.questionText') | nxtCustomTranslate : label):''}}\n  <div *ngIf=\"required\" style=\"color: red;\">*</div>\n  <!--  Displays icons with tooltips for file requirements -->\n  <div class=\"icon\" *ngIf=\"fileConfig\" [matTooltip]=\"fileConfigTooltip\" matTooltipClass=\"white-tooltip\">i\n  </div>\n</div>\n<!-- Main drag and drop zone -->\n<div class=\"flex hover-wrapper\" style=\"align-items: center;\" *ngIf=\"dragAndDrop && mode === 'edit' && !readOnly && maxFiles !== copyOfInputAllFiles.length\"\n  [class.drag-active]=\"isDragging\" (dragenter)=\"onDragEnter($event)\" (dragover)=\"onDragOver($event)\"\n  (dragleave)=\"onDragLeave($event)\" (drop)=\"onDrop($event)\">\n  <div class=\"drag-drop-zone\" [class.dragging]=\"isDragging\">\n    <div class=\"drag-drop-content\">\n      <div class=\"flex\" style=\"justify-content: center;\n      align-items: center;\n      gap: 10px;\">\n        <svg xmlns=\"http://www.w3.org/2000/svg\" width=\"42\" height=\"42\" viewBox=\"0 0 42 42\" fill=\"none\">\n          <g clip-path=\"url(#clip0_1637_30111)\">\n          <path d=\"M33.4417 3.12109H14.1743V11.1111H37.5567V7.23451C37.5567 4.96616 35.7107 3.12109 33.4417 3.12109Z\" fill=\"#CED9F9\"/>\n          <path d=\"M22.5352 12.3403H0V4.92636C0 2.20972 2.21068 0 4.92828 0H12.1336C12.8497 0 13.5396 0.150925 14.1664 0.434509C15.0418 0.828964 15.7939 1.47913 16.3213 2.3286L22.5352 12.3403Z\" fill=\"#1640C1\"/>\n          <path d=\"M42 14.0004V37.8817C42 40.153 40.1511 42.0003 37.8789 42.0003H4.12111C1.84891 42.0003 0 40.153 0 37.8817V9.88086H37.8789C40.1511 9.88086 42 11.7288 42 14.0004Z\" fill=\"#2354E6\"/>\n          <path d=\"M42 14.0004V37.8817C42 40.153 40.1511 42.0003 37.8789 42.0003H21V9.88086H37.8789C40.1511 9.88086 42 11.7288 42 14.0004Z\" fill=\"#1849D6\"/>\n          <path d=\"M32.048 25.9395C32.048 32.032 27.0919 36.9884 21.0001 36.9884C14.9083 36.9884 9.95215 32.032 9.95215 25.9395C9.95215 19.8481 14.9083 14.8916 21.0001 14.8916C27.0919 14.8916 32.048 19.8481 32.048 25.9395Z\" fill=\"#E7ECFC\"/>\n          <path d=\"M32.0479 25.9395C32.0479 32.032 27.0918 36.9884 21 36.9884V14.8916C27.0918 14.8916 32.0479 19.8481 32.0479 25.9395Z\" fill=\"#CED9F9\"/>\n          <path d=\"M24.5612 26.0758C24.3308 26.2709 24.0485 26.3661 23.7688 26.3661C23.4185 26.3661 23.0705 26.2177 22.827 25.9287L22.2307 25.2218V29.8499C22.2307 30.5292 21.6795 31.0803 21.0002 31.0803C20.3209 31.0803 19.7698 30.5292 19.7698 29.8499V25.2218L19.1734 25.9287C18.7344 26.4481 17.9587 26.5145 17.4392 26.0758C16.9201 25.6378 16.8535 24.8617 17.2915 24.3422L19.7271 21.4548C20.0447 21.0793 20.508 20.8633 21.0002 20.8633C21.4924 20.8633 21.9558 21.0793 22.2733 21.4548L24.7089 24.3422C25.147 24.8617 25.0803 25.6378 24.5612 26.0758Z\" fill=\"#6C8DEF\"/>\n          <path d=\"M24.561 26.0758C24.3306 26.2709 24.0483 26.3661 23.7686 26.3661C23.4183 26.3661 23.0703 26.2177 22.8268 25.9287L22.2305 25.2218V29.8499C22.2305 30.5292 21.6793 31.0803 21 31.0803V20.8633C21.4922 20.8633 21.9555 21.0793 22.2731 21.4548L24.7087 24.3422C25.1467 24.8617 25.0801 25.6378 24.561 26.0758Z\" fill=\"#3B67E9\"/>\n          </g>\n          <defs>\n          <clipPath id=\"clip0_1637_30111\">\n          <rect width=\"42\" height=\"42\" fill=\"white\"/>\n          </clipPath>\n          </defs>\n        </svg>\n        <div class=\"drag-text flex\" style=\"gap: 10px;\n        align-items: center; font-size: 13px;\n        justify-content: center;\">\n          Drag your file to upload <div style=\"font-size: 10px; color: rgb(157, 155, 155);\">--- OR ---</div> <button style=\"color: #007bff;    border: 1px solid #007bff;\n          font-size: 12px;\n          border-radius: 5px;\" (click)=\"fileInput.click()\"> Browse files </button>\n        </div>\n      </div>\n      <div *ngIf=\"!hideSubtext\" class=\"drag-subtext\">\n          @if(allowedFileTypes.length > 0) {\n            Supported: {{ allowedFileTypes.join(', ') }}\n          }\n          @if(maxFileSize > 0) {\n            <div>\n              <span> Max {{ maxFileSize / 1048576 }}MB</span>\n            </div>\n          }\n      </div>\n      <input #fileInput type=\"file\" name=\"fileUpload\" multiple=\"multiple\" [accept]=\"allowedFileTypes.join(',')\"\n        style=\"display:none;\" (change)=\"uploadMultipleFiles($event)\" />\n    </div>\n  </div>\n  <!-- Edit icon -->\n  <svg *ngIf=\"mode !== 'edit' && !viewEdit && !readOnly && from !== 'nxtTable' && !onlyView \" class=\"edit-icon\"\n    (click)=\"viewEditClick(config)\" width=\"13\" height=\"14\" viewBox=\"0 0 13 14\" fill=\"none\"\n    xmlns=\"http://www.w3.org/2000/svg\">\n    <path fill-rule=\"evenodd\" clip-rule=\"evenodd\"\n      d=\"M1.99987 9.0017L4.39602 11.3979L0.734482 9.97093L0.707559 10.0517L0.00755862 12.9863Z\" fill=\"#B0ADAB\" />\n  </svg>\n</div>\n<div *ngIf=\"dragAndDrop && mode === 'edit' && !readOnly\" style=\"display: flex; gap: 10px; padding-top: 10px; flex-wrap: wrap;\">\n  <div class=\"file-item\" *ngFor=\"let file of copyOfInputAllFiles; let i = index\" [class.selected]=\"currentFile === file\"\n    (click)=\"viewFile(file);openPopup(file);\">\n    <div class=\"file-icon\">\n      <img style=\"width: 28px;height: 28px;\" [src]=\"getDocIcon(file?.name)\">\n    </div>\n    <div class=\"file-details\">\n      <div class=\"file-name\">{{ file.name }}</div>\n    </div>\n    <div *ngIf=\"!readOnly\" class=\"file-actions\">\n      <!-- DOWNLOAD -->\n      <button class=\"action-btn-down\" title=\"Download\" (click)=\"downloadFile(file); $event.stopPropagation(); $event.preventDefault()\">\n        <svg width=\"16\" height=\"16\" viewBox=\"0 0 0.48 0.48\" fill=\"none\" xmlns=\"http://www.w3.org/2000/svg\">\n          <path\n            d=\"M.24.04a.02.02 0 0 1 .02.02v.212L.306.226a.02.02 0 0 1 .028.028l-.08.08a.02.02 0 0 1-.028 0l-.08-.08A.02.02 0 1 1 .174.226L.22.272V.06A.02.02 0 0 1 .24.04M.1.34a.02.02 0 0 1 .02.02V.4h.24V.36a.02.02 0 1 1 .04 0V.4a.04.04 0 0 1-.04.04H.12A.04.04 0 0 1 .08.4V.36A.02.02 0 0 1 .1.34\"\n            fill=\"#6b7280\" />\n        </svg>\n      </button>\n      <button class=\"action-btn\" (click)=\"$event.stopPropagation(); deleteFile(i)\"\n        title=\"{{ 'DELETE' | nxtCustomTranslate : 'Delete' }}\">\n        <svg width=\"16\" height=\"16\" viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"2\">\n          <polyline points=\"3,6 5,6 21,6\"></polyline>\n          <path d=\"m19,6v14a2,2 0 0,1 -2,2H7a2,2 0 0,1 -2,-2V6m3,0V4a2,2 0 0,1 2,-2h4a2,2 0 0,1 2,2v2\"></path>\n        </svg>\n      </button>\n    </div>\n  </div>\n</div>\n<div class=\"flex hover-wrapper\" style=\"align-items: center;\" *ngIf=\"!dragAndDrop || mode !== 'edit' || readOnly\">\n  <div class=\"flex file-inner-div\" [style.padding]=\"from === 'nxtTable' ? '0px' : mode !== 'edit' ? '10px 10px 10px 0px' : ''\">\n    <svg *ngIf=\"from !== 'nxtTable'\" width=\"24\" height=\"24\" viewBox=\"0 0 24 24\" fill=\"none\"\n      xmlns=\"http://www.w3.org/2000/svg\" xmlns:xlink=\"http://www.w3.org/1999/xlink\">\n      <rect width=\"24\" height=\"24\" fill=\"url(#pattern0_616_35125)\" />\n      <defs>\n        <pattern id=\"pattern0_616_35125\" patternContentUnits=\"objectBoundingBox\" width=\"1\" height=\"1\">\n          <use xlink:href=\"#image0_616_35125\" transform=\"scale(0.00195312)\" />\n        </pattern>\n        <image id=\"image0_616_35125\" width=\"512\" height=\"512\" preserveAspectRatio=\"none\"\n          xlink:href=\"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAgAAAAIACAYAAAD0eNT6AAAACXBIWXMAAA7DAAAOwwHHb6hkAAAAGXRFWHRTb2Z0d2FyZQB3d3cuaW5rc2NhcGUub3Jnm+48GgAAIABJREFUeJzt3XfYH1WZ//F3SE/oCaETAgoiJXTpggiKgitR1JUVXcu6+LOg/izsWqKra8e66qLigooIAipWykaUJiAgRUVqILSEhCSU9GT/ON9HHpKnfOvcZ2ber+u6r4AXV+aTmcece86cOTMCVcU4YBqwfaO2ATYDJgOTGr+OBzZu/PdjgIlFh5R6ZBWwuPHPTwLLgceBR4B5wKONXx8E7gHuAuYAawpPKmViRHQAtWwMsCuwe6OmN/59q8hQUgktJTUDdwA3Azc0anZkKKkoNgD5mwwcBBzcqH2BsaGJpGpbQGoErgJ+C1wDLIkMJPWCDUB+RpEG/GOAF5Pu8L1OUpylwB+AWcAlpIZgdWgiqQscWPIwHngJ8CrgaJ5+Ti8pP48APwN+AlwGLIuNI7XHBiDOGNId/quBlwHrx8aR1IbHgZ8DZ5FmB1bFxpGaZwNQvGcBbwbeAGweG0VSFz0I/Bj4DmlRoZQ1G4BijASOB04GjsDzLlXdFcCXgQtxVkCZciDqrXGk5/r/BuwcnEVS8e4FvgmcDjwWG0V6JhuA3tgEeA/wNmDT4CyS4i0mNQGfJW1IJIWzAeiu9YH/B3wQV/JLWteTpDUCnwTmBmdRzdkAdMc44J3A+0nb7krSUBYBX2zU4mH+W6knbAA6dxzwJWCH6CCSSmc+8B/AV3FzIRXMBqB900kD/+HBOSSV3zXAO4Dro4OoPtaLDlBC40kLea7HwV9SdxxA2m74dNIiYqnnnAFozaHAt/CVPkm98wjwr6SthqWecQagOeuTOvPLcfCX1FubkzYQ+i6+TaQecgZgePsDPyBt4StJRZoDvJH0nQGpq0ZGB8jYeqRX+34IbBacRVI9bQj8E2nt0SxgTWwcVYkzAAObApxD2rdfknJwCXAi7iSoLrEBWNf+pC96bRsdRJLWMof0CfGrooOo/FwE+EwnAb/FwV9SnrYhPQp4XXQQlZ9rAJKRpE19Pg2MDs4iSUMZCbycNIN7eXAWlZgNAEwEfgS8PjqIJDVpBGkjsu2BXwKrIsOonOq+BmAL4GfAftFBJKlNl5FmBJ6IDqJyqXMDMBW4FN/vl1R+VwIvwS8LqgV1bQCmkbrmadFBJKlLrgdeBCyIDqJyqGMDsAvpzn+r6CCS1GU3AEdhE6Am1K0B2I30Cs3k6CCS1CPXAS/ANQEaRp32AXgWcDEO/pKqbT/gp8DY6CDKW11eA9yWdOfvBj+S6mAasCNwQXQQ5asODcAWwO+AHaKDSFKBdgfGkdY8SeuoegMwEfgN6dm/JNXNIcBc0hsC0jNUeRHgeqSP+hwfHUSSAq0AjgR+Hx1EeanyIsAv4uAvSaOBc/HVZ62lqg3AW4F3RoeQpExsQZoRHRMdRPmo4hqA/Und7qjoIJKUkW2BDYFfRwdRHqrWAEwhbfG7aXQQScrQAcD9wI3RQRSvSosARwKXAEdEB5GkjC0BDgX+GB1Esaq0BuBUHPwlaTjjgQtJM6aqsarMAOwDXE1a7SpJGt6VpG8GLI8OohhVWAMwkbTHv92sJDVvO2AT4FfRQRSjCg3AfwFHR4eQpBLaH7gPuCk6iIpX9kcAhwP/S/n/HJIUZRlwGHBtdBAVq8wD53jgZtJnfiVJ7XsI2Bd4MDqIilPmtwA+joO/JHXDlqSdAsdGB1FxyroGYDpwBuVuYCQpJ9sCk4FfRAdRMcraAJwD7BAdQpIqZl/S4wA3CaqBMq4BeCVwXnQISaooPx9cE2VrAMYCt+Kzf0nqpYdJswEPRAdR75TtGfq7cPCXpF7r+3ywiwIrrExrANYHfkTa+U+S1FvbkHYL/El0EPVGmRqAU4GXRoeQpBqZDswFro8Oou4ryxqAjYG7SftWS5KKswI4Crg8Ooi6qyxrAN6Lg78kRRhNevy6TXQQdVcZZgAmkD5WMSk6iCTV2I3AwcCS6CDqjjLMALwZB39JirYX8N/RIdQ9uS8CHAl8H9g0OogkienAAvxyYCXkPgNwPLBjdAhJ0t99gfQpdpVc7g3AydEBJEnPMJq0SdC06CDqTM6LAHcE7iDvjJJUVzeRFgU+FR1E7cl5BuBfcPCXpFztCZweHULty3UR4Gjgf0jb/0qS8rQH8DhwdXQQtS7XGYBjSB+jkCTl7TOkzwerZHJtAF4THUCS1JRRwLn4xlbp5PiMfQLwCE7/S1KZ3AwcBDwZHUTNyXEG4CU4+EtS2ewBnEWeN5YaQI6LAD8K7BodQpLUsl1IrwVeGR1Ew8utUxsFzCN9/leSVD6rgWOBX0UH0dByewRwEA7+klRm6wE/AJ4VHURDy60BOCY6gCSpY5sAPwM2jA6iwdkASJJ6YRfgTPJ71KyGnBYBTgY+jz8sklQVzwGWA7+PDqJ15TQDcDAO/pJUNf9BWhSozOTWAEiSqmU94GzSIwFlxAZAktRrGwAXAhtFB9HTcplyHwssavwqSaqmnwAzgDXRQZTPDMBzcfCXpKp7OfDh6BBKcmkA9ogOIEkqxEzgFdEhZAMgSSrWCOC7+M2XcDYAkqSibQBcgFu/h8qlAXhudABJUqF2In0+OJdxqHZy2AlwPPAp8nkjQZJUjJ1JDcCs6CB1lEPntT0O/pJUVx8CTogOUUe5NACSpHoaAZwB7BYdpG5yaACmRQeQJIVan/T54EnRQeokhwZgm+gAkqRw04Dvkce4VAs5nOjNogNIkrJwDPCJ6BB1kUMD4JSPJKnPB4FXR4eogxwagMnRASRJ2ejbKXDv6CBVZwMgScrNeOB8HB96KocGYIPoAJKk7GwP/IA8NqyrpBwaAD8DLEkayNGknWLVAzk0AGOiA0iSsvU+4PXRIaoohy14nyI975EkaSBLgEOBP0YHqZIcGoCV+IxHkjS02cB+wLzoIFWRwyMAB39J0nCmAucAo6KDVEUODYAkSc14AfDZ6BBVkcMjgDXRASRJpfIm0hcE1QEbAElS2SwFDgOuiw5SZjYAkqQyuh/YF5gbHaSsXAMgSSqjbYELcC+ZttkASJLK6mDgC9EhyspHAJKksnsL8O3oEGVjAyBJKrtlpEWB10YHKRMbAElSFTxEWhT4YHSQsnANgCSpCrYEfoxfmG2aDYAkqSoOBL4UHaIsfAQgSaqatwKnR4fInQ2AJKlqVgBHAr+PDpIzGwBJUhU9TFoU+EB0kFy5BkCSVEVb4KLAIdkASJKq6gBcCzAoGwBJUpWdBJwcHSJHrgGQJFXdCuAo4PLoIDmxAZAk1cEjwH6kzwgLHwFIkuphc+CnwPjoILmwAZAk1cVewH9Hh8iFDYAkqU5eB7wjOkQOXAMgSaqblcDRwKzoIJFsACRJdTSftCjwnuggUXwEIEmqo0nABcCE6CBRbAAkSXW1JzXeKdAGQJJUZycC74kOEcE1AJKkulsFHAv8OjpIkWwAJEmCBcD+wF3RQYriIwBJkmBT0qLAidFBimIDIElSsgdwFnnMjvecDYAkSU+bAbwvOkQRcuhyXAMgScrJauA44JfRQXrJBkCSpHU9RloUeGd0kF7xEYAkSevaBPgZsGF0kF6xAZAkaWC7AGeSx2x519kASJI0uJcDp0aH6IUcuhrXAEiScrYaeBFwaXSQbrIBkCRpeA8Au5MWB1aCjwAkSRre1sBp0SG6yRkASZKaNwO4MDpEN9gASJLUvLmkRwFzo4N0ykcAkiQ1bwrw5egQ3eAMgCRJrXsVcF50iE7YAEiS1Lq5wE7Aougg7fIRgCRJrZsCfDQ6RCecAZAkqT0rgb2AW6ODtMMZAEmS2jMK+GJ0iHbZAEiS1L4XAsdFh2iHjwAkSerMXcCuwLLoIK1wBkCSpM7sCJwSHaJVzgBIktS5xcA0YEF0kGY5AyBJUuc2BN4VHaIVzgBIktQdi0izAKX4ZLAzAJIkdcdGwDuiQzTLGQBJkrpnIWkWYGF0kOE4AyBJUvdsDJwcHaIZzgBIktRd80mzAI9HBxmKMwCSJHXXJOAt0SGG4wyAJEndN5u0QdCq6CCDsQGQFGE5cC9pC9U7gYeBB4FHSN9Zfwp4koGnUCcA40jPWicBmzVqa9K06w6N2qiXfwCpCS8DLooOMRgbAEm9thi4BrixUTeRBv1e3xltB+zeqH2Ag4CtenxMqb9LgKOjQwzGBkBStz0BXAr8L/B74BbymQadChwMHEn6i3mb2DiquDXATqSGNzs2AJK6YQ5wPvBz0qBflq+i7QIcC8wAnkcefyeqWj4JfCg6xEBy+GG3AZDKaS5wDnAucBXl///yNsArgJOAvYOzqDrmANuTzyzY39kASGrFauBi4NukxU3LY+P0zO7A64E3kBYaSp04Bvh1dIi12QBIasYTwNnAacDtwVmKNBZ4NfBuYM/gLCqv75FmlrJiAyBpKI8Anwe+RfrSWZ0dCfwb8ILoICqdRcAWwNLoIP25E6CkgcwF/j/pffrP4+APcBmpCTgQ+GVwFpXLRsCLokOszQZAUn9PAh8lDfxfIG3Io2e6Bngp8Hzg6uAsKo8TogOszUcAkiAt7vsf4MOkHfnUvBmkZmn74BzK2wJgc2BldJA+zgBIupm0Oc6bcPBvxwXAc4GPkdkzXmVlU9Ljo2zYAEj19STpOf8+pGlttW8JMBPYDZgVG0UZe2l0gP58BCDV01Wk99yz3KK05EYAbwU+C2wQnEV5uRmYHh2ijw2AVC/LSVPVnyHDnckqZirwfeCQ6CDKxhpgCvBodBDwEYBUJ/eSBqP/xMG/CLOBI4CP4/lWMoL09kgWbACkevgF6Vn/ddFBamYl6bXKI4GHg7MoD4dHB+hjAyBV2xrgI8BxpNeQFONyYF/gD9FBFO7Q6AB9XAMgVdcq0v7jZ0cH0d+NBf6L9Mql6mklaWfA8E22nAGQqusUHPxzswx4M3Aq3vzU1Sgy+bCUDYBUTecCX4sOoUF9GjiR1BCofvaLDgA2AFIVLQLeGR1Cw/oh6TvxT0QHUeGy2AvABkCqnq+SPuOr/M0ivSo4PzqICrVLdABwEaBUNStJX/K7PzqIWrI38BtgcnQQFWIRsHF0CGcApGr5KQ7+ZXQD6Xvxi6KDqBAbAVtHh7ABkKrlp9EB1LYbgBfjmoC62CE6gA2AVC1XRQdQR64Bjse3A+pganQAGwCpOh4B7ooOoY5dSvpSo+ujqm3b6AA2AFJ13BEdQF3zI9JHhFRd20UHsAGQqsMFZNXyMeAH0SHUM1OiA9gASNWxMDqAumoNadvgG6KDqCc2jQ5gAyBVh/9/rp6lwKuwuasiGwBJXRO+qEg9cRcuCqyi8AbAnQCl6riPDF4tasMIUvOyU6OmkHZJ66vRwJON/3YhsASYDcwhbXp0JzCv2Mghvgq8PTqEumY+wTs/2gBI1bEK2AR4PDrIMCYDhzXqUNK+6OM7/D3vA64D/gBc3ahVHf6euZkA/BF4TnQQdcXjwIaRAWwApGo5FvhFdIgBPJf0LHsGsBu9/7tnPvBL4GekPfZzb4qatS9ps6fR0UHUsWXAuOgQ0dZYltW1Oot8bA78O3AzsefkCeBbwF69/eMW5hPE/5xZndfqtS9s0ZwBkKrlKWAaMDcww+7AKcCJwNjAHAO5GvgycB4Z/AXcpvGkpupZ0UHUsdAx2LcApGqZQLrrjrA38GvgT8AbyW/wBzgQOIf0bv1Lg7O0awnwtugQUjdET8NYVtVqJfA8irMd6dHDqi7/OYqo3wP7dP+UFOIc4s+f1VmF8hGAVE1zSE3Agz08xljgQ8B76XwVf6SVwGdJe++X6St82wN/wYVkZeYjAEldtw0wi97tCzAduJbUAJR58AcYBfwb6RW7/YKztOJe4CvRIVRezgBI1TYXOIn0Klw3jALeD3wUGNOl3zMnK4B3Ad+IDtKkjUgbIYVuKKO2OQMgqWemAL8Cvgfs0OHvNZ30DvonqebgD+n9+q8D36Qc79ovAj4fHULl5AyAVB+rSc3A14BLSc++hzOCtFvf24ATqNdNw+9IGxfNjw4yjPWBe3AWoIxCx2AbAKmeniRtnXsF6WMzi0l3k5DWD0wl7cv/AmDLiICZuAl4Ifk3AR8EPhUdQi2zAYgOIElD+BOpCXg0OsgQNiB9GGmj6CBqiWsAJClj04HLyHuK/XHgO9EhVC7OAEhSc64jPRJ5IjrIIKaS3ggYFR1ETXMGQJJKYD/SNwRyfTtgNunrh1JTbAAkqXkvBs4k3787vx0dQOXhIwBJat2ngVOjQwxgJOmVwG2jg6gpPgKQpJL5APAP0SEGsIo0QyENyxkASWrPo8BepA8v5WQn4PboEGqKMwCSVEKTgbPJb9X930h7F0hDsgGQpPYdSvqSYG7Oiw6g/PkIQJI6sxTYjbSlci58DFAObgUcHUAq2ELgDtJU7SLSLm6LSPvzLwM2Jn3gZSJpi9epwLOB7XDWLlc/B46LDrGWv5F+bpSv0DE4t2dXUtU8Tvqq3CzgWtJd2dw2f6+xpL/QdyVNPR8OPJc8Gvm6O7ZRP48O0s+vsQHQEHL4i8MZAFXNncAPSH8BX09zn91t1xTg+cDxpNfSJvTwWBraXaSGbHl0kIaXkldDonX5CCA6gNQFC4FzgbOAq4j5uV6f1AicSPp63ciADHX3RuC70SEaJgILgDHRQTQoG4DoAFIH5gLfAE4DFgdn6W8q8B7gzTgrUKTbSbMAq6ODNFwNHBAdQoNyHwCphB4BPghsD8wkr8Ef0odh3kVqBD5GuhNU7+0MvDw6RD9XRAdQvmwApNYsBz5BGvg/AywJTTO8R0kNyo7A10hbxaq3PhgdoJ8rowMoXz4CkJp3BfBW4M/RQTowndQIHBIdpOL2AW6IDgFsBTwQHUKD8hGAlLmlwMnAYZR78Ie0RexhwBtIew+oN06MDtDwIO2/dqqKswGQhnY/6TW7b1Kd2ao1pC/GTSctElP3/SP5vIXhdwE0IBsAaXCXkL72dm10kB6ZTdpM6ItUp7nJxZakc5sDGwANyAZAGthXgGOA+dFBemw56XXB40lbEat7TogO0PDX6ADKkw2AtK7Pk16hq9OK+Z8CRwDzooNUyBHRARpy+kiRMmIDID3TZ4H3RYcIch1pgeB90UEqYidg6+gQpK2ppXXYAEhP+zjwgegQwf4KHATcFh2kIg6PDkB6DXBpdAjlxwZASj4GfDQ6RCYeAI4C7okOUgGHRwcgLfB8MDqE8mMDIKWd8mYGZ8jNQ6Qm4JHoICW3R3SAhoejAyg/NgCqu5mku3+t6y7SN+6fiA5SYjtHB2h4KDqA8mMDoDr7GA7+w7keeB3uE9CujYAp0SFwN0ANwAZAdTUTp/2b9RPS9wPUnmdHBwAejw6g/NgAqI6882/d+4CbokOU1A7RAcjvc9XKgA2A6uZjeOffjmXAa3C3wHZsFB0AGwANwAZAdTITB/9O3E7aK0GtWT86AKmBk57BBkB1MROn/bvhS6RGQM3bIDoALuLUAGwAVAczcfDvluXAO6JDlEwODcDq6ADKjw2Aqs4Ff913CXBRdAi1xAZA67ABUJXNxGf+vfJhnFZuVg4L8MZGB1B+bABUVTPxzr+X/gRcFh2iJHLYSXF8dADlxwZAVTQTB/8ifDY6QEnksAnPuOgAyo8NgKrGZ/7FuQS4MTpECSyKDgBMiA6g/NgAqEpm4jP/op0RHaAE7ooOAEyODqD82ACoKmbinX+EHwEro0Nk7m/RAbAB0ABGRQeQuqDM0/6TgQOB5wHTSc9q1yft3HZHo64CrgZWBWUcyjzgUuDF0UEytQCYHx0CGwBlao1ldVAzKZ/1gGOAC4EVNPfnvB/4IHk+yz2J+J+DXOvqDs5rN/2Z+HNhrVu1F30BrPLWTMrnANIrdO3+me8Hjio89dAmkzaaif55yLFy+IzyCNJHnKLPhbVu1V70BbDKWTMpl9HAV0nT+J3+2VcB7yw2/rBuJv5nIsd6RScntUs2I/48WANX7UVfAKt8NZNyGQ2cT/fPw1uL/EMM4yvE/1zkVquASZ2c1C7Zj/hzYQ1coXwLQGXzMcrVAIwGzgFm9OD3/hrwkh78vu24PDpAhm4mjwWAO0UHUJ5sAFQmDv7PNAo4D9i7R79/K3JZ7JaTS6IDNOwaHUB5sgFQWTj4D2wCcC6wYY+PM5wHyeOjNzk5OzpAgw2ABmQDoDJw8B/ajuSxD0IOG97k4hbgpugQDbtFB1CebACUOwf/5rwdmFbwMdd2e/Dxc/K96AANk4j/uVCmbACUMwf/5o0C3htw3P7uCD5+LlYCP4gO0bAfaR8AaR02AMqVg3/r/hEYG3j8RwOPnZMfktZE5GD/6ADKlw2AcuTg355NgYMDj78w8Ni5WAV8MjpEPwdFB1C+bACUGwf/zhwaeGwbgPRaZi5rIcYAh0SHUL5sAJQTB//O7RJ47EWBx87BauAT0SH6eR4wMTqE8mUDoFw4+HfH5oHHXhl47Bz8N3BbdIh+XhAdQHmzAVAOHPy7Z3zgsccEHjvaQ8Cp0SHWkss20cqUDYCiOfh31xOBxx4XeOxo7yKvRyBbkV4BlAZlA6BIDv7dNyfw2JGvIEb6OWnxX06Oxff/NQwbAEVx8O+NWwOPXccFZ/cDb4oOMYDjowMofzYAivA5HPx75beBx94m8NgRlgGvBOZGB1nLFOCF0SGUv1HRAVQ7ZwAfiA7RgtHAjyjHHdVs4I+Bx98u8NgR3g5cGx1iAP+If7erCc4AqEjfA94CrIkO0qS+O/8yDP4A3yH23NZpBuAbwLejQwzixOgAUrPWWLWoS0kDalmMBs4n/rw1WwuBTXpyJpp3PfHnoYg6k3xvnvYg/vxYzVcop4lUhL8AJwArooM0qUzT/n0+AjwWePyRwHMCj1+UH5MW/a2ODjKIk6MDSK2I7sCs3tbDwFTKo2x3/muAWaQBONJ04s9Dr+s88r5p2gBYTPx5spqvULlOY6kaVpDu/GdHB2lSmVb797kPeC3pK3SR9g0+fq9dQDrPOW93/HpSEyCVRnQHZvWuTqE8ynjnP4/Yj//0903iz0ev6nzyX78yCrib+HNltVa1F30BrN7UDymPsg7+e/TiZLTpVuLPSS+qDIM/pFf/os+V1XrVXvQFsLpfd1KeqUgH/85NI/6c9KLKMviPAG4i/nxZrVco1wCo21YCrwMejw7ShL7V/mV65j8POBK4OTpIP8dFB+iBC4DXUI43V15BWoQplU50B2Z1t2ZSDqNJf8lHn69Wai553fn3+Q3x56abVZY7f0hvf9xG/Dmz2qvai74AVvfqOvJ+TaqP0/7dsxGwlPjz060q0+APcBLx58xqv2ov+gJY3akVwN7kzzv/7no78eenW1W2wX88cC/x581qv2ov+gJY3alPr31hM+Tg3303En+OulFlG/wBPk78ebM6q9qLvgBW53UXMGHtC5sZp/277wDiz1E3qoyD/zTgKeLPndVZ1V70BbA6r9z3zHfw740ziD9PnVYZB3+Ai4g/d1bnVXvRF8DqrGate0mz4rR/b2wHLCP+XHVSZR38X0v8ubO6U7UXfQGs9msVsM+6lzQbDv69czrx56qTKuvgPxl4hPjzZ3Wnai/6Aljt15kDXM9cOO3fO9sDy4k/X+1WWQd/gHOJP39W96r2oi+A1V6tAJ41wPXMgYN/b32b+PPVbpV58H8T8efP6m7VXvQFsNqrMwa6mBlw2r+39iNt9xx9ztqpMg/+zwIWE38Ore5W7UVfAKv1WgHsONDFDFbGO/8yDf6jKO97/2Ue/CdQ3vNuDV21F30BrNbrnAGvZKyRwI+JPzetVJkGf4D3En/O2qkyD/4A3yf+HFq9qdqLvgBW6/W8Aa9krM8Tf15aqbIN/tOAJ4g/b61W2Qf/dxN/Dq3eVe1FXwCrtbpy4MsY6p+JPy+tVNkG/zHANcSft1ar7IP/DNLjtujzaPWuai/6Alit1WsGvoxhDqVcG9KUbfAH+BLx563VqsLgX+ZXLa3mqvaiL4DVfD0KjB34MobYnHJtilLGwX8GsJr4c9dKOfhbZanai74AVvP1pUGuYZSfEH9Omq0yDv57AAuJP3etlIO/VaaqvegLYDVf0we5hhFOIv58NFtzgd17cxp6Zg/S5kTR566VcvC3yla1F30BrObqT4NdwABbAfOJPyfNlIN/MeXgb5WxQq0XHUCl8ePoAP18Gdg0OkQT5gEvBG6JDtKCPYDLSB+dKYsLSItTV0QHadMM0t4aZW5gpLZEd2BWc7XLYBewYPtTjkVp3vkXU975W2Wu2ou+ANbwddugV694s4g/H8NVWRf8OfgXy8Hfqr3oC2ANX58b9OoV66XEn4vhyjv/YsrB36pC1V70BbCGrxcOevWKdR3x52Ko8s6/mHLwt6pStRd9Aayh6ylg/KBXrzgHEH8uhirv/IspB3+rShXKtwA0nN8DS6JDACdHBxiCq/2L4Wp/qWKiOzBr6PrI4JeuMJNJTUj0uRiovPMvprzzt6pYoZwB0HCujg4AvB4YFx1iAN75F8M7f6miojswa/BaBWw0+KUrzFXEn4u1yzv/Yso7f6vKVXvRF8AavP48xHUryuakRiT6XPQvB/9iysHfqnqF8hGAhpLD1PZx5PVzOg84kjzOTbOc9i+e0/7KXk5/sSo/OewAeFx0gH4c/Ivh4C8VwAZAQ7k1+PgjgEOCM/Qp6+B/KQ7+RXLwV2mMig6grP0t+Pg7kMdX/8o6+HvnXywHf5WKMwAayuzg4+8XfPw+b8LBv9cc/KWC2QBoMPOBx4Mz7BN8fIBzgYuiQ7TAwb94Dv4qJRsADea+6ADArsHHXwKcEpyhFT7zL56Dv0rLNQAazMPRAYBtg49/HvBQcIZmeedfPAd/lZozABrM/OgAwNbBxz89+PjNcvAvnoO/Ss8GQIN5LPj4E4BNAo8/G7gy8PjNctq/eA7+qgQbAA1mQfDxtww+fg4fQRpO3+C/WXSQFjj4S5lwDYAGszT4+GODj39N8PGH47R/8Rz8VSnOAGgwy4KPH/2zeWfw8Yd5M6h2AAAQ2UlEQVTitH/xHPxVOc4AaDDLg48f/bP5ZPDxB+Odf/Ec/FVJ0XdZytfK4ONH/2wuCT7+QLzzL56Dvyor+i5L+Yr+Cy96AN4w+Phr886/eA7+qrTouyzlK3oR3qPBx98p+Pj9OfgXz8FflWcDoMGMCT7+AmB14PF3Djx2f077F8/BX7VgA6DBTAg+/ipiNyM6IvDYfXzPv3gO/qoNGwANZlJ0AGL34d+NNABHcfAvnoO/asUGQIPZNDoAcFvw8d8TdFwH/+I5+Kt2bAA0mBxmAG4NPv7rgH0KPubuOPgXzcFftWQDoMFE78UPcEvw8dcDvgesX9Dxdiet9nfwL46Dv2rLBkCDmRodgPgGAGAX0iDX69ciHfyL5+AvBVtjZVs5vHp2P/HnYQ3we3p3PvYA5mbwZ2ylzqfcA+cM0nbX0efRqneFcgZAQ5kaHQC4JDpAwyHAFcD2Xf59DwN+i3f+RfLOX8IGQEN7TnQA4OLoAP3sDFwHHNOF32sE8C5Sg7NJF36/ojj4S+qa6CkYa/D61BDXrSibkTYFij4X/Ws1aXHgNm3+mfYiPVKI/nO0Wk77W1Z3q/aiL4A1eF00xHUr0m+JPxcD1TLgDNI0/nCzaeOA44FfkBqI6OytloO/ZXW/Qo2IDkAGJ0GDuo881gG8AfhudIhhPAZcCfyFtKBvMWlqf2vSroIHAOPD0nXGaX+pN0LHYBsADWcrYrfkBZgIPExx7+PraQ7+Uu+EjsEuAtRwDowOADxJmoJWsRz8pQqzAdBwcmgAAL4RHaBmHPylirMB0HAOiQ7Q8AfSHvnqPQd/qQZcA6DhrAKmAAuigwCHA7OiQ1Scg79UHNcAKGsjgSOiQzT8lvT+vHrDwV+qERsANeNF0QH6+RDOGvWCg79UMzYAasZLyOdn5XfA96NDVIyDv1RDrgFQsw4hbXSTg82BvwIbRwepAAd/KY5rAFQKJ0QH6OcR4MPRISrAwV+qMWcA1Kw5pG2BV0cHaRhJei3w8OAcZeXgL8VzBkClsA35vA0A6fXE15C2CFZrHPwl2QCoJW+MDrCWR4DXkpoBNcfBXxJgA6DWzCB94S4ns4BPRYcoCQd/SX9nA6BWjAP+KTrEAD4KnB0dInMO/pKewUWAatU9wLPJb9p9NPBT4JjoIBly8Jfy5CJAlco04LjoEANYAbwSuCo6SGYc/CUNyAZA7Xh3dIBBPAW8DLg2OkgmHPwlDcoGQO04DDgoOsQg5gNHAr+JDhLsfBz8JQ3BBkDtmhkdYAhPAMcCZ0QHCfIV4NU4+EvK3BqrtHXIANczJyOAj5MWLEafqyJqKfD6rpy5ODOA5cSfS8sqokL5FoA6MQt4QXSIJhwFfI/0EaGqepg0eF4dHaQD3vmrbnwLQKV1BHm+EbC2S4A9gIujg/TIj0l/Pgd/SaUSPQVjdVa3U56/tEcCbwMeI/68daMeJS30Kzun/a26Vu1FXwCr8zplnauat82BM0lfNow+d+3UauCHwBbdPjEBHPytOlftRV8Aq/N6DNhy7QtbAocClxN//lqpS4B9enEyAjj4W3Wv2ou+AFZ36ry1L2yJHEraNyD6HA5VV5EWM1aFg79lKfwCWN2rl1Fu+5H2DlhM/LlcQ9rZ8DtU546/j4O/ZaUK5WuA6qb7SavRF0YH6dBE0iD1BuD5pMWDRVkFXAlcCJwFLCjw2EVwtb/0tNAx2AZA3XY2cGJ0iC7ahLS18NGNmtqDYzwMXAFcBPyCtJ1xFTn4S89kAxAdQF13IqkRqKKpwO7Abo1fdyWtxp/M8DMFDwMPAnOA24DrgOtJMydV5+AvrcsGIDqAum4hsCcwOzpIwSY3amLj3x9r/LoCeIT03LuOHPylgdkARAdQT9xE+mLgkuggCuXgLw3OrYBVSXsCX44OoVAO/lLGbADUS28B3hQdQiEc/KXM+QhAvbYceDHpy4GqBwd/qTmuAYgOoJ6bT1oP8LfoIOo5B3+pea4BUOVNAn4FTIkOop5y8JdKxAZARdkB+CmwQXQQ9YSDv1QyNgAq0gGkmYCJw/2HKhUHf6mEbABUtIOBC4Cx0UHUFQ7+UknZACjC0cCPsAkou1fh4C+Vlm8BKNIs0ieEn4gOopb9E/BdYFR0EKnEfAtAtXUE8Etgw+ggasnJwJk4+EulZgOgaIeSZgK2jA6iYY0APg58Hf/ukErPRwDKxYPAscCN0UE0oDHAd0hT/5K6w50AowMoG4uBE4CLo4PoGSaR3tw4LDqIVDGuAZAaNiStCZiJP5u52BO4Fgd/qXKcAVCuLgJOAhZGB6mx1wHfBCZEB5EqyhkAaQDHAdcAe0cHqaGJwLeBs3DwlyrLBkA52xn4A+mRwMjYKLWxH3AD8KboIJJ6y0cAKovLgTcA98bGqKxRwAeBj+DOflJRfAsgOoBK4ynSe+ifB1YFZ6mSvYDTgX2jg0g1YwMQHUClcz3wL7hnQKc2AP4DeDs+YpEiuAhQatG+pCbgLGCL4CxltB7pDYvbgXfh4C/VkjMAKrvFwKeALwFLg7OUwRHAF0jT/pJi+QggOoAqYS5wGvAVYElwlhwdBJxK2m5ZUh5sAKIDqFIeAD5N+lTtk8FZcvB84N+Bo6KDSFqHDUB0AFXSYuB/SG8M3B8bpXCjgZcD7wEOCM4iaXA2ANEBVGkrgAuBM4BLgNWxcXpqB+CfG7V1cBZJw7MBiA6g2riP9GjgHOCvwVm6ZSPgZaRNko4gj/9PS2qODUB0ANXSrcCPSZ+5vSU4S6smkRbzvZL0bH9sbBxJbbIBiA6g2psDXAz8BpgFzIuNs44xwP7A0cCLgH3w3X2pCmwAogNIa/kbcHWj/gj8mbQNcRHWIz3L3wM4sFH7AOMKOr6k4tgARAeQhrEauIf0qOBuYHbj3+8DHgXm0/wmROsBm5Km8bcGpjZqB2AX4Ln4CV6pLmwAogNIXfAUqRFYQWoYFjX+93HA+MY/b0wa/CUJbABsACRJteTHgCRJUrFsACRJqiEbAEmSasgGQJKkGrIBkCSphmwAJEmqIRsASZJqyAZAkqQasgGQJKmGbAAkSaohGwBJkmoohwZgVXQASZIKFj725dAALI8OIElSwZZFB7ABkCSpeDYA2ABIkurHBoAMToIkSQULv/nNoQFYHB1AkqSCLYoOkEMD8Gh0AEmSChY+9tkASJJUvPCxzwZAkqTihY99OTQA86MDSJJUsAXRAXJoAOZEB5AkqWD3RQfIoQG4JzqAJEkFCx/7bAAkSSrevdEBRkQHAMYBT5FHFkmSem01MIHgjfBymAFYCjwUHUKSpII8QAa74ObQAADcGh1AkqSC3BIdAPJpAG6ODiBJUkGyGPNyaQCy6IYkSSpAFmNeLg1AFt2QJEkFyGLMy2Xl/RjSl5HGRQeRJKmHlgAbASuig+QyA7AcuD46hCRJPfYHMhj8IZ8GAODK6ACSJPXYFdEB+tgASJJUnGzGulzWAABMAuaRVyZJkrplNWmsWxgdBPKaAZgP/Ck6hCRJPXI9mQz+kFcDAPDL6ACSJPXIr6ID9JdbA5DVyZEkqYuyGuNye94+EpgLbBodRJKkLnoU2AJYFR2kT24zAKuAi6NDSJLUZb8mo8Ef8msAAM6LDiBJUpedGx1gbbk9AoC0HfDDpK0SJUkqu4Wk6f9l0UH6y3EGYClwUXQISZK65EIyG/whzwYA4EfRASRJ6pLspv8hz0cAAKOA+4Ato4NIktSBh4DtgJXRQdaW6wzASuDM6BCSJHXoO2Q4+EO+MwAAOwB3kG+TIknSUNYAzwbuig4ykJwH17uBWdEhJElq0yVkOvhD3g0AwNejA0iS1KZvRAcYSs6PACA1KLcDz4oOIklSC/4G7EL6BHCWcp8BWA18KTqEJEktOo2MB3/IfwYAYAIwG5gcHUSSpCbMBbYHlgTnGFLuMwAAT+FaAElSeXyNzAd/KMcMAKTvAtyNnwmWJOVtPuk19sXRQYZThhkAgEXAF6NDSJI0jM9RgsEfyjMDALA+6X3KKdFBJEkawDxgR+Dx6CDNGBkdoAXLG78eHZpCkqSBfQj4XXSIZpVpBgBgDHAraWtFSZJycSewGxl+9ncwZVkD0Gc58P7oEJIkreUUSjT4Q/lmAPr8Bh8FSJLycClwVHSIVpW1AdgduAEYFR1EklRry4E9gb9EB2lVmRYB9jcXmAgcEh1EklRr/wmcFx2iHWWdAQAYC9xI+tiCJElFu5109780Okg7yrYIsL9lwMnAmuggkqTaWQ28mZIO/lDeRwB9ZgNbAvtGB5Ek1crXgW9Gh+hEmR8B9JkI/BHYOTqIJKkW/kK68XwqOkgnyvwIoM+TwGt5eqdASZJ6ZRlwIiUf/KH8jwD6PASsAo6MDiJJqrQPABdGh+iGKjwC6LMeaYOgF0YHkSRV0q+Al1KRxedVagAANgWuB6ZFB5EkVcpsYB9gfnSQbqnCGoD+FgAzgCXRQSRJlbGUNLZUZvCH6qwB6O9h4EHgH6KDSJIq4Y2kR8yVUsUGAOAmYEPgwOggkqRS+wxwWnSIXqjaGoD+1iPtzzwjOogkqZTOA15D2vWvcqrcAACMBy7DmQBJUmuuBY6gAu/7D6bqDQDAFOAK4NnRQSRJpfBX4FDg0eggvVS1twAGMhd4AXBPdBBJUvbuA15MxQd/qMcMQJ8dgd8BW0UHkSRl6QHgMODu6CBFqMMMQJ+7gKOBedFBJEnZmQscRU0Gf6hXAwBwG6m7eyA6iCQpGw+TviXzl+ggRarTI4D+tie9HbBDcA5JUqzZpG/I3BkdpGh1mwHocy/p9Y47gnNIkuLcDhxCDQd/qG8DAGml54GkVwQlSfVyDemR8JzoIFHq3ABA+rDDC4FzooNIkgpzPun18LnRQSJV9VsArVgFXND458MDc0iSeu8rwJuBFdFBotkAPO23pFcFXwyMjo0iSeqypcBbgU8Ba4KzZKGubwEMZU/SjMC06CCSpK64D3glcF10kJzUfQ3AQG4C9gMujg4iSerYr4C9cPBfh48ABrYE+AHwGGmhiOdJksplBfAJ0rR/Zb/o1wkfAQxvN+BsYPfoIJKkpvwVeC1wY3SQnHlnO7y5wFnAJsC+2DRJUq5WA18HTgDuD86SPQez1hwMfAvYJTqIJOkZ7gT+BZgVHaQsnAFozf3Ad0h7BxyE50+Soq0EPge8mppu6dsuZwDatyvwRdLnIyVJxfsN8G5q9hW/bvE1wPbdBhxNagD+HJxFkurkDuBVpI3bHPzb5BR25+4mPRZ4DNgbmBgbR5Iqay7wIeCfgVuCs5SejwC6ayLwduD9wKbBWSSpKhYAXwVOAxYHZ6kMG4De2Ag4hdQMTA7OIkllNY808H8ZB/6uswHorbGklamnAs8JziJJZXE36at938Jd/HrGBqAY6wEvB/4VOBIXX0rS2lYDlwLfAH7W+Hf1kA1A8bYBTgTeBmwXnEWSoj1E2m31dNKdvwpiAxBnFOk1wlcD/0BaNyBJdbAQ+AlwLnAJaTMfFcwGIA9jSe+zvgp4ETApNo4kdd2jwK+B80gb+CyLjSMbgPyMBPYHjmnU3rhmQFL5rAauJw36v2z886rQRHoGG4D8bQA8DziE9DGig4HxoYkkaV0rgJuBK4ErgMtI7+8rUzYA5TOa9DXC3YE9gOnAc0mLC72eknptNTCHtAX6n0g78t1C2pJ3RWAutcgBozrGAlOBacD2pIZgMrBZ49dJwARgQ9JjhtHA+hFBJWXlCdLAvYq02c5TwHzSM/t5jV/nAPcA9wKz8fl9JfwfsLR2WdFm1XYAAAAASUVORK5CYII=\" />\n      </defs>\n    </svg>\n    @if(copyOfInputAllFiles && copyOfInputAllFiles.length > 0){\n    <span (click)=\"openPopup()\" style=\"text-decoration: underline; cursor: pointer;\">\n      {{ '+' + copyOfInputAllFiles.length + (' FILES_ATTACHED' | nxtCustomTranslate : copyOfInputAllFiles.length === 1 ?\n      'File Attached' : 'Files Attached') }}\n    </span>\n    } @else if(mode === 'edit') {\n    <div> {{ 'ADD_FILES' | nxtCustomTranslate : 'Add files' }} </div>\n    } @else {\n    <div *ngIf=\"from !== 'nxtTable'\">{{ 'NO_FILES_ATTACHED' | nxtCustomTranslate : 'No files attached' }}</div>\n    }\n    <button *ngIf=\"mode === 'edit' && !readOnly\" (click)=\"fileInput.click()\" class=\"add-btn-icon\" type=\"button\">\n      <span class=\"plus-icon\">+</span>\n    </button>\n    <input #fileInput type=\"file\" name=\"fileUpload\" multiple=\"multiple\" [accept]=\"allowedFileTypes.join(',')\"\n      style=\"display:none;\" (change)=\"uploadMultipleFiles($event)\" />\n  </div>\n  <!-- SKS13JUN25 edit icon -->\n  <svg *ngIf=\"mode !== 'edit' && !viewEdit && !readOnly && from !== 'nxtTable' && !onlyView \" class=\"edit-icon\"\n    (click)=\"viewEditClick(config)\" width=\"13\" height=\"14\" viewBox=\"0 0 13 14\" fill=\"none\"\n    xmlns=\"http://www.w3.org/2000/svg\">\n    <path fill-rule=\"evenodd\" clip-rule=\"evenodd\"\n      d=\"M1.99987 9.0017L4.39602 11.3979C4.50371 11.5055 4.66525 11.5055 4.77294 11.3979L10.7499 5.39401C10.8576 5.28631 10.8576 5.12477 10.7499 5.01708L8.38064 2.64785C8.27294 2.54016 8.11141 2.54016 8.00371 2.64785L1.99987 8.6517C1.89217 8.75939 1.89217 8.92093 1.99987 9.0017ZM9.1614 1.54401C9.05371 1.6517 9.05371 1.81324 9.1614 1.92093L11.5306 4.29016C11.6383 4.39785 11.7999 4.39785 11.9076 4.29016L12.5806 3.61708C13.0114 3.21324 13.0114 2.56708 12.5806 2.13631L11.3153 0.870928C10.8845 0.440159 10.2114 0.440159 9.78063 0.870928L9.1614 1.54401ZM0.00755862 12.9863C-0.0462875 13.2555 0.19602 13.4979 0.465251 13.444L3.39987 12.744C3.50756 12.7171 3.58833 12.6632 3.64217 12.6094L3.69602 12.5555C3.74987 12.5017 3.77679 12.3132 3.6691 12.2055L1.24602 9.78247C1.13833 9.67478 0.949866 9.7017 0.89602 9.75554L0.842174 9.80939C0.761405 9.89016 0.734482 9.97093 0.707559 10.0517L0.00755862 12.9863Z\"\n      fill=\"#B0ADAB\" />\n  </svg>\n  <!-- SKS13JUN25 save and cancel icons -->\n  <div *ngIf=\"config?.subText?.singleFieldDisable !== undefined && viewEdit ? !config?.subText?.singleFieldDisable : viewEdit\"\n    style=\"padding-right: 5px;\">\n    <svg (click)=\"saveChanges()\" width=\"16\" height=\"16\" viewBox=\"0 0 12 12\" fill=\"none\"\n      xmlns=\"http://www.w3.org/2000/svg\">\n      <path\n        d=\"M5.9502 0.5C8.96006 0.500106 11.4004 2.94031 11.4004 5.9502C11.4003 8.95999 8.95999 11.4003 5.9502 11.4004C2.94031 11.4004 0.500106 8.96006 0.5 5.9502C0.5 2.94024 2.94024 0.5 5.9502 0.5Z\"\n        stroke=\"#B0ADAB\" />\n      <path\n        d=\"M8.88111 3.84583C8.83269 3.7972 8.77513 3.7586 8.71176 3.73227C8.64838 3.70594 8.58043 3.69238 8.5118 3.69238C8.44317 3.69238 8.37521 3.70594 8.31184 3.73227C8.24846 3.7586 8.19091 3.7972 8.14249 3.84583L4.8269 7.16347L3.35253 5.6891C3.30403 5.6406 3.24646 5.60213 3.18309 5.57588C3.11972 5.54964 3.05181 5.53613 2.98322 5.53613C2.91463 5.53613 2.84672 5.54964 2.78335 5.57588C2.71999 5.60213 2.66241 5.6406 2.61391 5.6891C2.56541 5.7376 2.52694 5.79518 2.50069 5.85854C2.47445 5.92191 2.46094 5.98982 2.46094 6.05841C2.46094 6.127 2.47445 6.19491 2.50069 6.25828C2.52694 6.32165 2.56541 6.37922 2.61391 6.42772L4.45677 8.27058C4.50519 8.31922 4.56274 8.35781 4.62612 8.38414C4.6895 8.41047 4.75745 8.42403 4.82608 8.42403C4.89471 8.42403 4.96266 8.41047 5.02604 8.38414C5.08942 8.35781 5.14697 8.31922 5.19539 8.27058L8.88111 4.58445C8.92974 4.53603 8.96834 4.47848 8.99467 4.4151C9.021 4.35173 9.03456 4.28377 9.03456 4.21514C9.03456 4.14651 9.021 4.07856 8.99467 4.01518C8.96834 3.9518 8.92974 3.89425 8.88111 3.84583Z\"\n        fill=\"#B0ADAB\" />\n    </svg>\n  </div>\n  <div *ngIf=\"viewEdit\">\n    <svg (click)=\"discardChanges()\" width=\"16\" height=\"16\" viewBox=\"0 0 12 12\" fill=\"none\"\n      xmlns=\"http://www.w3.org/2000/svg\">\n      <path\n        d=\"M7.05555 4.00883L5.94 5.12438L4.82445 4.00883C4.57861 3.76299 4.18191 3.76299 3.93607 4.00883C3.69023 4.25467 3.69023 4.65137 3.93607 4.89721L5.05162 6.01276L3.93607 7.12831C3.69023 7.37415 3.69023 7.77085 3.93607 8.01669C4.18191 8.26253 4.57861 8.26253 4.82445 8.01669L5.94 6.90114L7.05555 8.01669C7.30139 8.26253 7.69809 8.26253 7.94393 8.01669C8.18977 7.77085 8.18977 7.37415 7.94393 7.12831L6.82838 6.01276L7.94393 4.89721C8.18977 4.65137 8.18977 4.25467 7.94393 4.00883C7.69809 3.77285 7.30021 3.77285 7.05555 4.00883ZM5.94 0.0820312C2.70017 0.0820312 0.0808594 2.70134 0.0808594 5.94118C0.0808594 9.18101 2.70017 11.8003 5.94 11.8003C9.17983 11.8003 11.7991 9.18101 11.7991 5.94118C11.7991 2.70134 9.17983 0.0820312 5.94 0.0820312ZM5.94 10.6367C3.35426 10.6367 1.24422 8.52667 1.24422 5.94118C1.24422 3.35553 3.35426 1.24549 5.94 1.24549C8.52558 1.24549 10.6356 3.35553 10.6356 5.94118C10.6356 8.52667 8.52558 10.6367 5.94 10.6367Z\"\n        fill=\"#B0ADAB\" />\n    </svg>\n  </div>\n</div>\n<div *ngIf=\"from !== 'nxtTable'\" class=\"col-lg-6\" style=\"padding:0;\">\n  <!-- Error messages section -->\n  <div class=\"file-constraints\" *ngIf=\"validationErrors.length > 0\">\n    <small class=\"text-danger\">\n      <div *ngFor=\"let error of validationErrors\">{{ error }}</div>\n    </small>\n  </div>\n</div>\n<!-- SKS11JUN25 File Selection Popup Modal -->\n<div class=\"file-popup-overlay\" *ngIf=\"showPopup\" (click)=\"closePopup();close()\">\n  <div class=\"file-popup-modal\" (click)=\"$event.stopPropagation()\">\n    <!-- Header -->\n    <div class=\"file-popup-header\">\n      <div class=\"popup-title\">{{ label ? ((config?.id+'.questionText') | nxtCustomTranslate : label): ''}}</div>\n      <button class=\"close-btn\" (click)=\"closePopup();close()\">\n        <span class=\"close-icon\">×</span>\n      </button>\n    </div>\n    <!-- SKS11JUN25 Content -->\n    <div class=\"file-popup-content\">\n      <!-- SKS11JUN25 Left Panel - File List -->\n      <div class=\"file-list-panel\">\n        <div class=\"file-item\" *ngFor=\"let file of copyOfInputAllFiles; let i = index\"\n          [class.selected]=\"currentFile === file\" (click)=\"close();viewFile(file)\">\n          <div class=\"file-icon\">\n            <img style=\"width: 28px;height: 28px;\" [src]=\"getDocIcon(file?.name)\">\n          </div>\n          <div class=\"file-details\">\n            <div class=\"file-name\">{{ file.name }}</div>\n          </div>\n          <div class=\"file-actions\">\n            <!-- DOWNLOAD -->\n            <button class=\"action-btn-down\" title=\"Download\" (click)=\"$event.stopPropagation(); downloadFile(file)\">\n              <svg width=\"16\" height=\"16\" viewBox=\"0 0 0.48 0.48\" fill=\"none\" xmlns=\"http://www.w3.org/2000/svg\">\n                <path\n                  d=\"M.24.04a.02.02 0 0 1 .02.02v.212L.306.226a.02.02 0 0 1 .028.028l-.08.08a.02.02 0 0 1-.028 0l-.08-.08A.02.02 0 1 1 .174.226L.22.272V.06A.02.02 0 0 1 .24.04M.1.34a.02.02 0 0 1 .02.02V.4h.24V.36a.02.02 0 1 1 .04 0V.4a.04.04 0 0 1-.04.04H.12A.04.04 0 0 1 .08.4V.36A.02.02 0 0 1 .1.34\"\n                  fill=\"#6b7280\" />\n              </svg>\n            </button>\n            <button *ngIf=\"!readOnly\" class=\"action-btn\" (click)=\"$event.stopPropagation(); deleteFile(i)\"\n              title=\"{{ 'DELETE' | nxtCustomTranslate : 'Delete' }}\">\n              <svg width=\"16\" height=\"16\" viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"2\">\n                <polyline points=\"3,6 5,6 21,6\"></polyline>\n                <path d=\"m19,6v14a2,2 0 0,1 -2,2H7a2,2 0 0,1 -2,-2V6m3,0V4a2,2 0 0,1 2,-2h4a2,2 0 0,1 2,2v2\"></path>\n              </svg>\n            </button>\n          </div>\n        </div>\n        <!-- Empty state -->\n        <div class=\"empty-state\" *ngIf=\"!copyOfInputAllFiles || copyOfInputAllFiles.length === 0\">\n          <div class=\"empty-icon\">📄</div>\n          <div>{{ 'NO_FILES_SELECTED' | nxtCustomTranslate : 'No files selected' }}</div>\n        </div>\n        <!-- Add Button -->\n        <input #fileInput type=\"file\" name=\"fileUpload\" multiple=\"multiple\" [accept]=\"allowedFileTypes.join(',')\"\n          style=\"display:none;\" (change)=\"uploadMultipleFiles($event)\" />\n        <button *ngIf=\"from !== 'nxtTable' && !readOnly\" class=\"add-btn\" (click)=\"fileInput.click()\"\n          title=\"{{ 'ADD_FILE' | nxtCustomTranslate : 'Add file' }}\">\n          {{ 'ADD_MORE_FILES' | nxtCustomTranslate : '+ Add More Files' }}\n        </button>\n        <div class=\"file-constraints\" *ngIf=\"validationErrors.length > 0\">\n          <small class=\"text-danger\">\n            <div *ngFor=\"let error of validationErrors\">{{ error }}</div>\n          </small>\n        </div>\n      </div>\n      <!-- SKS11JUN25 Right Panel - Preview -->\n      <div class=\"file-preview-panel\">\n        @if(currentFile){\n        <div class=\"preview-content\">\n          @if(isImage && fileUrl){\n          <img [src]=\"fileUrl\" class=\"preview-image\" alt=\"File Preview\" />\n          }\n          @else if(fileUrl && isPreviewable(currentFile.type, currentFile.name)){\n          <iframe [src]=\"fileUrl\" width=\"100%\" height=\"500px\"></iframe>\n          }\n          @else if(fileUrl && !isPreviewable(currentFile.type, currentFile.name)){\n          <div class=\"not-previewable\">\n            ⚠️ This file type cannot be previewed.\n          </div>\n          }\n          @else if(isLoading){\n          <div class=\"loading-indicator\">\n            <div>Loading preview...</div>\n            <div class=\"spinner\"></div>\n          </div>\n          }\n          @else {\n          <div>Unable to load preview</div>\n          }\n        </div>\n        }\n        @else{\n        <div class=\"no-preview\">\n          Select a file to preview\n        </div>\n        }\n      </div>\n    </div>\n  </div>\n</div>","import { Pipe, PipeTransform } from '@angular/core';\n\n@Pipe({\n  name: 'questionByRow',\n  pure: true ,\n  standalone: true\n})\nexport class QuestionByRowPipe implements PipeTransform {\n  private cache = new Map<string, any>();\n\n  transform(column: any, element: any, rowIndex: number): any {\n    const rowId = element?._id || element?.id || rowIndex;\n    const key = `${rowId}-${column?.fieldName ?? 'unknown'}`;\n\n    if (this.cache.has(key)) {\n      return this.cache.get(key);\n    }\n    if(column.config){\n      if(!column['question'])  column['question'] = {subText:{}}\n      if(!column['question']['subText']) column['question']['subText'] = {}\n      column['question']['subText'] = column.config\n    }\n    const question = {\n      ...column?.question,\n      input: this.getObjValue(element, column),\n      id: column?.uniqueIdentifier,\n      nxtTableId: column?.uniqueIdentifier+rowId\n    };\n    this.cache.set(key, question);\n    return question;\n  }\n\n  // You can move your original getObjValue logic here,\n  // or inject a shared service if it already exists\n  private getObjValue(element: any, column: any): any {\n    const path = column?.fieldName;\n    if (!path || !element) return null;\n    const keys = path.split('.');\n    let result = element;\n    for (let key of keys) {\n      if (!result) return null;\n      const [prop, indexStr] = key.split('[');\n      if (indexStr !== undefined) {\n        const index = +indexStr.replace(']', '');\n        result = Array.isArray(result[prop]) ? result[prop][index] : null;\n      } else {\n        result = result[prop];\n      }\n    }\n    return result;\n  }\n}\n","import { Component, ViewChild, Input, Output, EventEmitter, ElementRef, HostListener, Renderer2, SimpleChanges, ChangeDetectorRef, ChangeDetectionStrategy } from '@angular/core';\nimport { MatSort } from '@angular/material/sort';\nimport { CommonModule } from '@angular/common';\nimport { SelectionModel } from '@angular/cdk/collections';\nimport { FormsModule, ReactiveFormsModule } from '@angular/forms';\nimport { NxtButtonComponent } from '../button/nxt-button.component';\nimport { NxtPagination } from '../pagination/pagination.component';\nimport { NxtSearchFilterPipe } from '../../pipe/search-filter/search-filter.pipe';\nimport { MatTooltipModule } from '@angular/material/tooltip';\nimport { Subscription } from 'rxjs';\nimport { NxtGetValuePipe } from '../../pipe/get-value.pipe';\nimport { ListViewFilterComponent } from '../list-view-filter/list-view-filter.component';\nimport { NxtCustomTranslatePipe } from '../../pipe/custom-translate.pipe';\nimport { IconSelectorComponent } from '../icon-selector/icon-selector.component';\nimport { NxtSearchBox } from '../search-box/search-box.component';\nimport { nxtDropdown } from '../nxt-dropdown/nxt-dropdown.component';\nimport { NxtMultiSelect } from '../nxt-multi-select/nxt-multi-select.component';\nimport { NxtRadio } from '../custom-radio/custom-radio.component';\nimport { NxtFileUpload } from '../file-upload/file-upload.component';\nimport { NxtInput } from '../nxt-input/nxt-input.component';\nimport { QuestionByRowPipe } from '../../pipe/question-by-row.pipe';\nimport { TranslationService } from '../../services/translation/translation.service';\nimport { DataService } from '../../services/data/data.service';\nimport { ChangeService } from '../../services/change/change.service';\nimport { StorageService } from '../../services/storage/storage.service';\nimport { NxtDatePipe } from '../../pipe/NxtDate.pipe';\nimport { CountryService } from '../../services/country/country.service';\nimport { Subject } from 'rxjs';\nimport { takeUntil } from 'rxjs/operators';\n\n@Component({\n  selector: 'nxt-datatable',\n  standalone: true,\n  imports: [\n    CommonModule,\n    ReactiveFormsModule,\n    FormsModule,\n    NxtButtonComponent,\n    NxtPagination,\n    NxtSearchFilterPipe,\n    MatTooltipModule,\n    NxtGetValuePipe,\n    NxtDatatable,\n    IconSelectorComponent,\n    NxtSearchBox,\n    nxtDropdown,\n    NxtMultiSelect,\n    NxtRadio,\n    NxtFileUpload,\n    NxtInput,\n    ListViewFilterComponent,\n    NxtCustomTranslatePipe,\n    QuestionByRowPipe,\n    NxtDatePipe\n    // RowResizerDirective\n  ],\n  templateUrl: './datatable.component.html',\n  styleUrl: './datatable.component.css',\n  changeDetection: ChangeDetectionStrategy.OnPush\n})\nexport class NxtDatatable {\n  @Input() data: any[] = [];  //  get data that to be displayed in a array\n  @Input() summaryValues: { [label: string]: any } = {}; // SKS20MAR25 Object to store summary row values\n  @Input() tableFilterData: any[] = [];\n  @Input() columns: Array<any> = []; // Columns have a label, a column type, and filter details.\n  @Input() withCheckBox: boolean;  // get if with or without checkbox in table\n  @Input() searchBar: boolean; // if it is true, the search bar will be displayed on table\n  @Input() tableSaveButton = false; // save button for editing LOP in payroll table,  changed name from 'saveLOP'\n  @Input() hideSaveButton = false;\n  @Input() stickyColumn = false; // if the last column should be sticky, it should be sent as boolean value\n  @Input() tableWidth = '100%'; // width of table can be adjusted from parent, by default it is 100%\n  @Input() actionColumHeader = 'ACTION';  // to change the header for action column\n  @Input() actionButton: boolean;  //to show button colum as action\n  @Input() title: any;// the title for the table\n  @Input() isButtons: boolean;// is button present in table;\n  @Input() buttonArray: any;// buttons to be displayed;\n  @Input() tableId: any = 'id'; // id of table\n  @Input() isEditRow: boolean; // if it is true, the row can be edited\n  @Input() isDeleteRow: boolean; // if it is true, the row can be deleted\n  @Input() addInlineRecord: boolean; // if it is true, the row can be added inline\n  @Input() searchConfigs: any; // search configurations\n  @Input() direction: 'rtl' | 'ltr' = 'ltr'; // direction of table\n  @Input() pagination: boolean = false; // pagination configurations\n  @Input() actionButtonArray: any; // action button configurations\n  @Input() multipleFilter: any; // if pagination true then this will be used\n  @Input() isPagination: any; // if true then pagination will be enabled\n  @Input() isListViews: any; // for list view filter hide flag\n  @Input() id: any; // used to track multiple component calls in a loop and apply ID-specific list view filtering\n  @Input() isNosIndicator: any; // if true then no data indicator will be shown\n  @Input() isEditable: any; // if true then table will be editable\n  @Input() from: any; // from date paltform based initialize inputs ex:- 'formBuilder'\n  @Input() question: any; // question is used for nxt form builder table preview\n  @Input() rowTextSize: any; // size of row text\n  @Input() rowTextColor: any; // color of row text\n  @Input() apiMeta: any; // api meta is used for nxt form builder table preview\n  @Input() summaryRows: any; // Input for configurable summary rows\n  @Input() summaryColumns: any; // Input for summary columns config\n  @Input() isLoading: any; //SKS28MAR25 Input for loading indicator\n  @Input() tableConfig: any; // table config for nxt form builder table\n  @Input() tableParams: any; //SKS17APR25 Receives tableParams information from parent component\n  @Input() listViews: any[] = []; //SKS26APR25 Predefined list views\n  @Input() mode: 'view' | 'edit' | 'print' = 'edit'; // SKS11JUN25 New mode input\n  @Input() languageCode: string; //SKS28JUN25 for translation\n  @Input() selectedColumn: string | null = null; // SKS22JUL25 to get the selected column\n  @Input() allIcons: any[] = []; // SKS22JUL25 icon selector component input\n  @Input() isButtonLoading: boolean = false\n  @Input() isPreview: boolean = false\n  @Input() groupFilter: boolean = false //SKS15OCT25 groupfilter flag\n  @Input() groupFilterConfig: any; //SKS15OCT25 group filter config\n  @Input() groupFilterColumn: any; //SKS15OCT25 current active group filter column\n  @Input() onlyView: boolean = false;\n  @Input() tableHeight:any; // SKS17DEC25 table height\n  @Input() serialNumberColumn: boolean = true\n\n  @Output() tableRowClick = new EventEmitter<any>; // datas to be passed when table row is clicked\n  @Output() onEditData = new EventEmitter<any>; // if edit button is clicked, the data of that row will be passed\n  @Output() onSaveData = new EventEmitter<any>; // if save button is clicked, the data of that row will be passed\n  @Output() saveButtonData = new EventEmitter<any>; // edited rows data will be passed\n  @Output() onDeleteData = new EventEmitter<any>;  // when delete button clicked pass the data\n  @Output() buttonEmit = new EventEmitter<any>; // this will emit a table top button click event\n  @Output() hyperLinkEmit = new EventEmitter<any>; // hyper link click event\n  @Output() sideNavEmit = new EventEmitter<{ data: any, col: any, config: any }>; // rightnav column emit\n  @Output() actionButtonEmit = new EventEmitter<any>; // datas to be passed when table row active button is clicked\n  @Output() columnSelected = new EventEmitter<{ uniqueIdentifier: string, data: any[] }>();\n  @Output() removeColumn = new EventEmitter<{ uniqueIdentifier: string, data: any[] }>();\n  @Output() valueChange: EventEmitter<any> = new EventEmitter<any>();\n  @Output() selectedValues = new EventEmitter<any[]>(); // to pass the selected checkbox values\n  @Output() fileEmit = new EventEmitter<any>(); // to pass the file\n  @Output() NxtTableFilterEmit = new EventEmitter<any>; //SKS3MAY25 filter column val get emit \n  @Output() hadleDropDownDependent: EventEmitter<any> = new EventEmitter();\n  @Output() NxtTableParamsEmit = new EventEmitter<any>; //SKS17APR25 to pass the tableParams information\n  // {\n  //   \"pagination\": {       // 4\n  //       \"pageSize\": 10,\n  //       \"pageIndex\": 10\n  //   },\n  //   \"tableSearch\": {      // 1\n  //       \"fields\" : [\n  //           \"lightType\",\n  //           \"system\",\n  //           \"status\"\n  //       ] ,\n  //       \"value\": 'r-001' \n  //   },  \n  //   \"searchFilterData\": {  // 2\n  //       \"lightType\": [\n  //           \"AA\",\n  //           \"BB\" \n  //       ]\n  //   },\n  //   \"sort\": {              // 3\n  //       \"column\": \"assetCode\",\n  //       \"direction\": \"asc\"\n  //   }\n  // }\n\n  @ViewChild(MatSort) sort!: MatSort;\n  @ViewChild('tableContainer') tableContainer!: ElementRef<HTMLElement>;\n\n  selection: any; // to get the selected row\n  stickyCondition!: number; // to get the sticky column index\n  searchFilter = false; // to get the search filter\n  filterArray: Array<any> = []; // to get the filter array\n  selectedFilter: any; // to get the selected filter\n  pageSizeOptions: Array<any>  // for pagination get the page size options\n  dataSource: any;  // for table data source\n  totalCount!: number // count of total records\n  searchBoxValue: any; // to get the search box value\n  prevSearch: any; // to get the previous search value\n  activeColumn: string | null = null; // Track the active column\n  isScrolled = false; // Boolean flag to track scroll state\n  isShadowHidden = false; // Boolean flag to track shadow state\n  currentSortColumn: string = ''; // to get the current sort column\n  currentSortDirection: 'asc' | 'desc' | 'none' = 'none'; // to get the current sort direction\n  originalData: any; // Store original data for sorting\n  hoveredColumn: string | null = null; // Track the hovered column\n  searchText: any; // to get the search text\n  multipleFilterArray: any; // to get the multiple filter array\n  tableFilterArray: any; // to get the table filter array\n  filterDataArray: any = {} // to get the filter data array\n  isResized: boolean = false; // for table column resize\n  sFilterData: any; // to get the search filter data\n  currentColumns: Array<any> = [];\n  inlineElement: any // for add a new row on table\n  pageSize: any  // for pagination get the page size\n  pageIndex: any // for pagination get the page index\n  totalRecords: number; // for pagination get the total records\n  deleteData: any; // to get the delete row\n  deleteModal = false; // for conformation popup\n  dropdownActionButton: any; // for action column dropdown button\n  currentOpenIndex: number | null = null; // track the current open action dropdown icon index\n  clickListener: any; // action column dropdown button click listener for close a dropdown button\n  deleteIndex: number; // to get the delete index\n  showPopover = true;\n  isSummaryColumn: boolean = false; // SKS20MAR25 Flag to check if the column is in the displycolumns array\n  isSummaryStartColumn: any[];\n  isSummaryEndColumn: any[];\n  filterBoxData: any;\n  filterTableNos: any;\n  selectedView: any = '';         // Selected list view name\n  isDropdownOpen: boolean = false; // Tracks dropdown visibility\n  currentViewFilter: any\n  isFullTableSummaryRow: boolean = false; // SKS13JUN25 Flag to check if the table has full summary row\n  isImageHover = false;\n  isImageEdit: boolean = false;\n  selectedImageElement: any;\n  private questionsCache: Map<string, any> = new Map();\n  isResizing = false;\n  private currentColumn: any = null;\n  private startX = 0;\n  private startWidth = 0;\n  private resizeFrameId: number | null = null;\n  columnWidthTrack :any ={}\n  currentTableData: any //SKS10AUG25for single field data changes track\n  oldTableData: any // SKS10AUG25 for single field data changes track\n  viewEdit: boolean = false;\n  currencyOption: any;\n  columnSourceId: any = [];\n  summaryRowsOrginal: any;\n  displaySummaryRows: any;\n  Array = Array; // SKS29OCT25 expose global Array to the template\n  tableEditTrack: boolean = false;\n  alignRight = false;\n  selectedIsEmpty = true\n  private destroy$ = new Subject<void>();\n  private timers: number[] = [];\n\n  constructor(private countryService: CountryService, private storageService: StorageService,private cdRef: ChangeDetectorRef, private translationService: TranslationService,private renderer: Renderer2, private dataService: DataService, private changeService: ChangeService) { }\n\n  ngOnChanges(changes: SimpleChanges) {\n    this.currencyOption = this.countryService.getCurrentCurrency()\n    if((!changes['tableParams'] || Object.keys(changes).length > 1) || this.pagination){\n      if(changes['isButtonLoading']){\n        this.deleteModal = this.isButtonLoading;\n      }\n      if (changes['data'] || changes['columns']) {\n        this.questionsCache.clear();\n      }\n      this.dataSource = { data: [] }; // or use a proper data structure\n      const savedColumnMap = new Map(this.tableParams?.currentColumns?.map(col => [col.fieldName, col]) || []);\n      this.currentColumns = this.columns.map((column, index) => {\n        const uniqueIdentifier = column.uniqueIdentifier || `${column.fieldName || 'column'}-${index}`;\n        const savedColumn: any = savedColumnMap.get(column.fieldName);\n        return {\n          ...column,\n          width: savedColumn?.width || this.columnWidthTrack[uniqueIdentifier] ||  column.width || '50',\n          uniqueIdentifier: column.uniqueIdentifier || `${column.fieldName || 'column'}-${index}` // Generate uniqueIdentifier if not present\n        }\n      });\n      this.currentColumns.forEach((element: any) => {\n        this.columnWidthTrack[element?.uniqueIdentifier] = element.width\n      });\n      if (this.from === 'formBuilder' || this.from === 'questionBook') {\n        this.data = this.question?.input ? this.question?.input : this.data ? this.data : []\n        let parsedMeta = typeof this.question?.['fieldsMeta'] === 'object' ? this.question?.['fieldsMeta'] : this.question?.['fieldsMeta']  ? JSON.parse(this.question?.['fieldsMeta']) : [];\n        if ( parsedMeta === null ||  parsedMeta === undefined || !Array.isArray(parsedMeta) || parsedMeta?.length === 0) {\n          // console.warn('No valid metadata provided'); \n          return;\n        }\n        // SKS22JUL25 Transform the parsedMeta\n        const updatedMeta = parsedMeta.map((item, index) => {\n          const newItem = { ...item };\n          if (newItem.apiName !== undefined) {\n            newItem.fieldName = newItem.apiName;\n            newItem['style']= newItem?.question?.style || newItem['style'] || {} // SKS16OCT25 reassigned style and subtext to parent object since table columns only support that format\n            newItem['subText']= newItem?.question?.subText || newItem['subText'] || {}\n            delete newItem.apiName;\n          }\n          if (newItem.fldType !== undefined) {\n            newItem.type = newItem?.fldType?.toLowerCase();\n            delete newItem.fldType;\n          }\n          if (newItem?.question?.isHidden !== undefined && newItem?.question?.isHidden !== null ) {\n            newItem.isHide = newItem?.question?.isHidden\n          }\n          if(this.question?.columnWidth){\n            newItem['width'] = this.columnWidthTrack[newItem.uniqueIdentifier || `${newItem.fieldName || 'column'}-${index}`] || newItem.width || 'auto' // Set default width\n          }\n          newItem['defaultValue'] = newItem?.question?.defaultValue || ''\n          newItem.uniqueIdentifier = newItem.uniqueIdentifier || `${newItem.fieldName || 'column'}-${index}`; // SKS10AUG25 uniqueIdentifier\n          return newItem;\n        });\n        parsedMeta = updatedMeta;\n        this.columns = updatedMeta\n        this.currentColumns = updatedMeta.filter(\n          (ele: any) => ele?.subText?.isDependentField !== true\n        );      \n        if (this.tableConfig) {\n          const config = this.tableConfig;\n          this.isNosIndicator = config?.isNosIndicator !== false;\n          this.serialNumberColumn = config?.serialNumberColumn !== false\n          this.addInlineRecord = config.addInlineRecord !== false;\n          this.isPagination = config.isPagination !== false;\n          this.actionButton = config.actionButton !== false;\n          this.isDeleteRow = config.isDeleteRow !== false;\n          this.isEditRow = config.isEditRow !== false;\n          this.searchBar = config.searchBar !== false;\n          this.isButtons = config.isButtons !== false; //summaryColumn\n          this.pageSize = config.itemsPerPage || 10;\n        }\n\n        this.summaryColumns = parsedMeta\n          .filter(column => column.summaryColumn === true)\n          .map(({ apiName, fldType, ...rest }) => ({\n            fieldName: apiName,\n            type: fldType,\n            ...rest\n          }));\n        this.summaryRows = parsedMeta\n          .filter(column => column.summaryRow === true)\n          .map(({ apiName, fldType, ...rest }) => ({\n            fieldName: apiName,\n            type: fldType,\n            ...rest\n          }));\n          this.summaryRowsOrginal = this.summaryRows.filter(sumcol =>  sumcol?.subText?.isDependentField !== true)\n      }\n      // Ensure `this.data` is an array\n      if (!this.data || !Array.isArray(this.data)) {\n        this.data = [];  // Initialize as an empty array if it's not valid\n      }\n      // Ensure `this.dataSource.data` is initialized\n      //SKS15FEB25 Initialize this in your data fetch method\n      if (changes['data']) {\n        this.originalData = [...this.data]; // New reference\n        this.dataSource.data = this.prepareActionVisibility(this.originalData);\n        this.computeSummaryValues('onChange');\n        this.cdRef.markForCheck(); //SKS10AUG25 Trigger change detection\n      }\n      this.originalData = [...this.data];\n      this.sFilterData = [...this.data];\n      this.dataSource.data = this.prepareActionVisibility(this.originalData);\n      this.pageSize = this.tableParams?.pagination?.pageSize ? this.tableParams?.pagination['pageSize'] : this.pageSize || 10;\n      this.pageIndex = this.tableParams?.pagination?.pageIndex ? this.tableParams?.pagination['pageIndex'] : this.pageIndex || 1;\n      this.totalRecords = this.tableParams?.pagination?.['totalRecords'] ?  this.tableParams?.pagination['totalRecords'] : undefined;\n      this.pageSizeOptions = this.tableParams?.pagination?.pageSizeOptions ? this.tableParams?.pagination['pageSizeOptions'] : ['5', '10', '25', '50', '100', '200'];\n      this.isPagination === undefined || this.isPagination === true ? this.isPagination = true : this.isPagination = false;\n      this.isNosIndicator === undefined || this.isNosIndicator === true ? this.isNosIndicator = true : this.isNosIndicator = false;\n      this.serialNumberColumn ===  undefined || this.serialNumberColumn === true ? this.serialNumberColumn = true : this.serialNumberColumn = false;\n      this.isEditable === undefined || this.isEditable === false ? this.isEditable = false : this.isEditable = true\n\n      // SKS20MAR25 Check if the displycolumn's have a summary column\n      if (this.summaryRows && this.summaryRows?.length > 0 && this.currentColumns.length > 0) {\n        this.isFullTableSummaryRow = this.summaryRows[0].type === 'fullRow' ||  this.summaryRows[0].type === 'fullrow' ? true : false;\n        this.isSummaryColumn = this.currentColumns.some(element => element.fieldName === this.summaryRows[0].column);\n        if (this.isSummaryColumn && !this.isFullTableSummaryRow) {\n          const index = this.currentColumns.findIndex(\n            col => col.fieldName === this.summaryRows[0].column\n          );        \n          if (index !== -1) {\n            this.isSummaryStartColumn = this.currentColumns.slice(0, index - 1);\n            this.isSummaryStartColumn = this.isSummaryStartColumn.filter(col => !col.summaryRow);\n            this.isSummaryEndColumn = this.currentColumns.slice(index + 1);\n            this.isSummaryEndColumn = this.isSummaryEndColumn.filter(col => !col.summaryRow);\n          }\n        }\n      }\n      \n      this.inlineElement = Object.fromEntries(this.currentColumns.map(element => [element.fieldName, element?.type === 'boolean' ? ((element?.defaultValue && element?.defaultValue == 'true') ? true : false) : ( element?.defaultValue || \"\")]));\n      this.dropdownActionButton = (this.actionButtonArray?.buttonArray && this.actionButtonArray?.buttonArray?.length > 0) ? this.actionButtonArray?.buttonArray?.slice(this.actionButtonArray?.size) : [];\n      \n      setTimeout(() => {\n        this.dataSource.sort = this.sort;\n      }, 100)\n      this.totalCount = this.totalRecords || this.data?.length\n      this.filterTableNos = this.totalRecords || this.data?.length\n      if (this.stickyColumn === true && this.currentColumns) {\n        this.stickyCondition = this.currentColumns?.length;\n      } else {\n        this.stickyCondition = this.currentColumns?.length + 1;\n      }\n      if (this.searchConfigs?.searchFilterVal) {\n        this.searchBoxValue = this.searchConfigs?.searchFilterVal; // Show value in the search box\n        this.prevSearch = this.searchConfigs?.searchFilterVal;\n      }\n      if(this.currentViewFilter !== undefined && this.currentViewFilter !== null){\n        this.selectedView = this.currentViewFilter.filterName;\n        if(this.currentViewFilter.system || this.currentViewFilter === \"All Data\"){\n          const savedColumnMap = new Map(this.tableParams?.currentColumns?.map(col => [col.fieldName, col]) || []);\n          this.currentColumns = this.columns.map((column, index) => {\n            const uniqueIdentifier = column.uniqueIdentifier || `${column.fieldName || 'column'}-${index}`;\n            const savedColumn: any = savedColumnMap.get(column.fieldName);\n            return {\n              ...column,\n              width: savedColumn?.width || this.columnWidthTrack[uniqueIdentifier] ||  column.width || '50',\n              uniqueIdentifier: column.uniqueIdentifier || `${column.fieldName || 'column'}-${index}` // Generate uniqueIdentifier if not present\n            }\n          });\n          this.currentColumns.forEach((element: any) => {\n            this.columnWidthTrack[element?.uniqueIdentifier] = element.width\n          });\n        } else {\n          const columns = this.currentViewFilter?.columns || [];\n          const savedColumnMap = new Map(this.tableParams?.currentColumns?.map(col => [col.fieldName, col]) || []);\n          const updateColumn = this.columns.map((column, index) => {\n            const match = columns.find((col) => col.name === column.fieldName);\n            const savedColumn: any = savedColumnMap.get(column.fieldName);\n            const uniqueIdentifier = column.uniqueIdentifier || `${column.fieldName || 'column'}-${index}`;\n            return {\n              ...column,\n              isHide: !match,\n              filter: !!match?.filterable,\n              sort: !!match?.sortable,\n              width: savedColumn?.width|| this.columnWidthTrack[uniqueIdentifier] || column.width || '50', //SKS10AUG25 Set default width\n              uniqueIdentifier: column.uniqueIdentifier || `${column.fieldName || 'column'}-${index}` //SKS10AUG25 Generate uniqueIdentifier if not present\n            };\n          });\n          this.currentColumns.forEach((element: any) => {\n            this.columnWidthTrack[element?.uniqueIdentifier] = element.width\n          });\n          this.currentColumns = [...updateColumn]\n        }\n      }\n      const currentFilterColumns = this.currentColumns?.filter(column => column.filter === true).map(column => column.fieldName)\n      if(this.groupFilterConfig?.column) currentFilterColumns.push(this.groupFilterConfig?.column)\n      if (currentFilterColumns?.length > 0 && !this.pagination) {\n        this.multipleFilterArray = {};\n        const filtObjs: any = {};\n        currentFilterColumns.forEach((element: any) => {\n          this.multipleFilterArray[element] = null;\n          filtObjs[element] = [];\n        });\n        this.data.forEach(element => {\n          currentFilterColumns.forEach((key: any) => {\n            const rawValue = this.getObjValue(element, key);\n            if (rawValue !== undefined) {\n              const col = this.currentColumns.find(c => c.fieldName === key);\n              const formatted = col?.type === 'date' ? this.formatDateForSearch(rawValue, col) : rawValue;\n              filtObjs[key].push(formatted);\n              this.multipleFilterArray[key] = new Set(filtObjs[key]);\n            }\n          });\n        });\n        this.multipleFilterArray = this.multipleFilterArray;\n      } else {\n        this.multipleFilterArray = this.multipleFilter;\n      }\n      // SKS15OCT25 group filter button config\n      if (this.groupFilter) {\n        this.groupFilterConfig['buttonConfig'] = {};\n        let buttons: any[] = [];\n        buttons.push({\n          isLabel: true,\n          isActive: this.groupFilterColumn === 'All' || !this.groupFilterColumn,\n          label: 'All',\n          name: 'null'\n        })\n        for (const value of this.multipleFilterArray?.[this.groupFilterConfig?.column] || []) {\n          buttons.push({\n            isLabel: true,\n            isActive: (value || 'null') === this.groupFilterColumn,\n            label: value || 'null',\n            name: value || 'null'\n          });\n        }\n        this.groupFilterConfig['buttonConfig']['buttons'] = buttons;\n      }\n      // Create a temporary filtered array that excludes any column with '['\n      const tempFilterColumns = this.currentColumns?.filter(col => !col?.fieldName?.includes('['));\n      \n      if (tempFilterColumns?.length > 0) {\n        const filtObjs: any = {};\n      \n        // SKS26MAY25 Initialize sets to collect unique values for each column\n        tempFilterColumns.forEach((col: any) => {\n          filtObjs[col.fieldName] = new Set();\n        });\n      \n        // SKS26MAY25 Collect unique values from tableFilterData\n        this.tableFilterData?.forEach((element: any) => {\n          tempFilterColumns.forEach((col: any) => {\n            const value = this.getObjValue(element, col.fieldName);\n            if (value !== undefined) {\n              filtObjs[col.fieldName].add(value);\n            }\n          });\n        });\n      \n        // SKS26MAY25 Append \"value\" property to each column object with the array of unique values\n        this.tableFilterArray = [...tempFilterColumns.map((col: any) => ({\n          ...col,\n          value: Array.from(filtObjs[col.fieldName])\n        }))];\n      }    \n      setTimeout(() => {\n        if (this.tableContainer?.nativeElement) {\n          const tableBody = this.tableContainer.nativeElement.querySelector('.table-body');\n          if (tableBody && this.isPagination) {\n            this.isShadowHidden = !(tableBody.scrollHeight < 453)\n          }\n        }\n      }, 1500); // Waits 100ms for rendering\n      // SKS20MAR25 Initialize summaryValues for input rows and compute values\n      if (changes['summaryRows'] || changes['summaryColumns'] || changes['data']) {\n        this.computeSummaryColumns(); // Compute per-row summary columns first\n        this.summaryRows?.forEach(row => {\n          if (row.type === 'input' && this.summaryValues?.[row.fieldName] === undefined) {\n            if( !this.summaryValues || Object.keys(this.summaryValues)?.length === 0) this.summaryValues = {}\n            this.summaryValues[row.fieldName] = 0; // Default to 0 for inputs\n          }\n        });\n        this.computeSummaryValues('onChange');\n      }\n      this.filterDataArray = this.tableParams?.searchFilterData || this.filterDataArray\n      let paramsUpdate = false\n      if(this.searchConfigs && this.searchBoxValue){ // SKS17APR25 update search box value\n        this.emptySearch(this.searchBoxValue) \n        paramsUpdate = true\n      } else if(this.tableParams?.tableSearch?.value && this.tableParams?.tableSearch?.value !== '') {\n        this.applyFilter(this.tableParams?.tableSearch?.value,'onChange') \n        paramsUpdate = true\n      } else if(this.tableParams?.searchFilterData || this.filterDataArray) {\n        this.filterRetain( this.tableParams?.searchFilterData || this.filterDataArray,'onChange' )\n        paramsUpdate = true\n      }\n      if (changes['languageCode']) {\n        if (this.languageCode) {\n          this.translationService.setLanguage(this.languageCode);\n        }\n      }\n      this.selection = new SelectionModel<any>(true, []);\n      if (this.data && this.isPagination && !this.pagination && !paramsUpdate) {\n        const pageIndex = Number(this.pageIndex) || 0;\n        const pageSize = Number(this.pageSize) || 10;\n        const start = (pageIndex - 1) * pageSize;\n        const end = start + pageSize;\n        this.dataSource.data = this.prepareActionVisibility(this.data?.slice(start, end) || []) ;\n        this.cdRef.markForCheck();\n      } else if (!this.isPagination && !this.pagination) {\n        this.dataSource.data = this.prepareActionVisibility(this.data)\n      }\n    }\n    // SKS16OCT25 for SummaryColumns value calculation\n    this.computeSummaryColumns()\n    this.computeSummaryValues('onChange')\n    this.cdRef.markForCheck();\n  }\n\n  ngOnInit(): void {\n    // SKS12SEP25 current currency code get from service\n    this.countryService.currentCurrencyOption$\n    .pipe(takeUntil(this.destroy$))\n    .subscribe(option => {\n      if (option) {\n        this.currencyOption = this.countryService.getCurrentCurrency()\n        this.cdRef.detectChanges();\n      }\n    });\n    this.dataSource = { data: [] }; // or use a proper data structure\n    const savedColumnMap = new Map(this.tableParams?.currentColumns?.map(col => [col.fieldName, col]) || []);\n    this.currentColumns = this.columns.map((column, index) => {\n      const uniqueIdentifier = column.uniqueIdentifier || `${column.fieldName || 'column'}-${index}`;\n      const savedColumn: any = savedColumnMap.get(column.fieldName);\n      return {\n        ...column,\n        width: savedColumn?.width || this.columnWidthTrack[uniqueIdentifier] ||  column.width || '50',\n        uniqueIdentifier: column.uniqueIdentifier || `${column.fieldName || 'column'}-${index}` // Generate uniqueIdentifier if not present\n      }\n    });\n    this.currentColumns.forEach((element: any) => {\n      this.columnWidthTrack[element?.uniqueIdentifier] = element.width\n    });\n    // SKS13MAR25 get data from question if from formBuilder\n    if (this.from === 'formBuilder' || this.from === 'questionBook') {\n      this.changeService.customChange$\n        .pipe(takeUntil(this.destroy$))\n        .subscribe(changeValue => {\n          if (changeValue == 'dataBind') {\n            this.ngOnChanges({});\n          }\n        }\n      );\n      this.data = this.question?.input ? this.question?.input : this.data ? this.data : []\n      let parsedMeta = typeof this.question?.['fieldsMeta'] === 'object' ? this.question?.['fieldsMeta'] : this.question?.['fieldsMeta'] ? JSON.parse(this.question?.['fieldsMeta']) : [];\n      if ( parsedMeta === null ||  parsedMeta === undefined || !Array.isArray(parsedMeta) || parsedMeta?.length === 0) {\n        // console.warn('No valid metadata provided');\n        return;\n      }\n      //SKS10AUG25 Transform parsedMeta and ensure uniqueIdentifier\n      const updatedMeta = parsedMeta.map((item, index) => {\n        const newItem = { ...item };\n        if (newItem.apiName !== undefined) {\n          newItem.fieldName = newItem.apiName;\n          newItem['style']= newItem?.question?.style || newItem['style'] || {} //SKS16OCT25 reassigned style and subtext to parent object since table columns only support that format\n          newItem['subText']= newItem?.question?.subText || newItem['subText'] || {}\n          delete newItem.apiName;\n        }\n        if (newItem.fldType !== undefined) {\n          newItem.type = newItem?.fldType?.toLowerCase();\n          delete newItem.fldType;\n        }\n        if (newItem?.question?.isHidden !== undefined && newItem?.question?.isHidden !== null ) {\n          newItem.isHide = newItem?.question?.isHidden\n        }\n        if(this.question?.columnWidth){\n          newItem['width'] = this.columnWidthTrack[newItem.uniqueIdentifier || `${newItem.fieldName || 'column'}-${index}`] || newItem.width || 'auto' // Set default width\n        }\n        newItem['defaultValue'] = newItem?.question?.defaultValue || ''\n        newItem.uniqueIdentifier = newItem.uniqueIdentifier || `${newItem.fieldName || 'column'}-${index}`; // Ensure uniqueIdentifier\n        return newItem;\n      });\n      parsedMeta = updatedMeta;\n      this.columns = updatedMeta\n      this.currentColumns = updatedMeta.filter(\n        (ele: any) => ele?.subText?.isDependentField !== true\n      );  \n      if (this.tableConfig) {\n        const config = this.tableConfig;\n        this.isNosIndicator = config?.isNosIndicator !== false;\n        this.serialNumberColumn = config?.serialNumberColumn !== false\n        this.addInlineRecord = config.addInlineRecord !== false;\n        this.isPagination = config.isPagination !== false;\n        this.actionButton = config.actionButton !== false;\n        this.isDeleteRow = config.isDeleteRow !== false;\n        this.isEditRow = config.isEditRow !== false;\n        this.searchBar = config.searchBar !== false;\n        this.isButtons = config.isButtons !== false;\n        this.pageSize = config.itemsPerPage || 10;\n      }\n\n      this.summaryColumns = parsedMeta\n        .filter(column => column.summaryColumn === true)\n        .map(({ apiName, fldType, ...rest }) => ({\n          fieldName: apiName,\n          type: fldType,\n          ...rest\n        }));\n      this.summaryRows = parsedMeta\n        .filter(column => column.summaryRow === true)\n        .map(({ apiName, fldType, ...rest }) => ({\n          fieldName: apiName,\n          type: fldType,\n          ...rest\n        }));\n      this.summaryRowsOrginal = this.summaryRows.filter(sumcol =>  sumcol?.subText?.isDependentField !== true)\n        if(parsedMeta && parsedMeta.length > 0){\n          parsedMeta.forEach((col) => {\n            if(col.subText?.sourceQuestionId){\n              if(Array.isArray(col?.subText?.sourceQuestionId) && col?.subText?.sourceQuestionId.length > 0){\n                col?.subText?.sourceQuestionId?.forEach(id => {\n                  this.columnSourceId.push(id)\n                });\n              } else {\n                this.columnSourceId.push(col?.subText?.sourceQuestionId)\n              }\n            }\n          })\n        }\n        if (this.apiMeta !== undefined || this.columnSourceId?.length > 0) {\n          let options = [];\n          // AP-26MAR25 Ensure that this.apiMeta is always an object.  \n         //AP-26MAR25 If it's already an object, keep it as is; otherwise, parse it from a JSON string.\n          this.apiMeta =typeof this.apiMeta === 'object' ? this.apiMeta : this.apiMeta ? JSON.parse(this.apiMeta) : null;\n          let apiObj: any = this.apiMeta;\n          if (apiObj && apiObj.endpoint) {\n            this.dataService.apiResponse(apiObj.endpoint)\n            ?.pipe(takeUntil(this.destroy$))\n            .subscribe(apiResponse => {\n              let responses;\n              if (apiObj.variable) {\n                // VD 22May24 - handling multiple child objects\n                responses = this.dataService.getValue(apiResponse, apiObj.variable);\n                let results = [];\n                // HA 19JAN24 To avoid undefined error in console\n                for (let i = 0; i < responses?.length; i++) {\n                  var resp = responses[i];\n                  results.push(resp);\n                }\n                options = results;\n              } else {  // VD 19JAN24 - if response has value(which is array) only\n                responses = apiResponse;\n                options = responses;\n              }\n              options = options.map((obj: any) => ({ ...obj, edit: false }));\n              this.data = options;\n\n            });\n          }\n\n          // VD NOV23 - handle the dependent update for dropdown\n          let field = apiObj?.field;        // VD 13MAY24 - dynamic field changes\n          if (apiObj?.sourceQuestionId || this.columnSourceId?.length > 0 ) {\n            // // VD 10May24 Subscribe for the changes\n            this.changeService.changeAnnounced$\n              .pipe(takeUntil(this.destroy$))\n              .subscribe(changeValue => {\n                if (!changeValue) return;\n                if (changeValue != undefined) {\n                  if ( !apiObj?.isDependentField && changeValue.fromQuestionId && changeValue.valueObj !== undefined && ( Array.isArray(apiObj?.sourceQuestionId)? apiObj?.sourceQuestionId.includes(changeValue.fromQuestionId) : changeValue.fromQuestionId === apiObj?.sourceQuestionId)) {\n                    options = options.map((obj: any) => ({ ...obj, edit: false }));\n                    let validItem = true;\n                    let apiResponseVal = this.storageService.getApiResponseValue(changeValue.fromQuestionId)\n                    let dataFromSourseQues = apiResponseVal || changeValue.valueObj\n                    if( dataFromSourseQues && apiObj.valueField){\n                      dataFromSourseQues =this.dataService.getValue(dataFromSourseQues, apiObj.valueField)\n                    } \n                    if(Array.isArray(dataFromSourseQues)){\n                      this.data = [...dataFromSourseQues]\n                      this.question.input = dataFromSourseQues\n                    } else if (this.data.length > 0) {  // VD 13MAY24 - bind dynamic field\n                      this.data.forEach(element => {\n                        // VD 26Jun24 - to handle multiple objects\n                        const objElementValue = this.dataService.getValue(element, field);\n                        const objItemValue = this.dataService.getValue(dataFromSourseQues, field)\n                        if (objElementValue == objItemValue) {\n                          validItem = false;\n                        }\n                      });\n                      if (validItem && dataFromSourseQues) { //Update Pagination before emit\n                        if (this.data.length > 0) {\n                          this.data = [...this.data, dataFromSourseQues];\n                        } else {\n                          this.data.push(dataFromSourseQues);\n                        }\n                      }\n                    } else if(dataFromSourseQues) {\n                      this.data.push(dataFromSourseQues);\n                    }\n                    this.data = [...this.data];\n                    this.originalData = [...this.data];\n                    this.sFilterData = [...this.data];\n                    this.dataSource.data = this.prepareActionVisibility(this.originalData)\n                    this.question.input = this.originalData;\n                    // SKS20MAR25 Manually trigger ngOnChanges\n                    this.ngOnChanges({});\n                    this.changeService.confirmChange(changeValue.fromQuestionId);\n                  } else if(changeValue.fromQuestionId && changeValue.valueObj !== undefined && ( Array.isArray( this.columnSourceId)?  this.columnSourceId?.includes(changeValue.fromQuestionId) : changeValue.fromQuestionId ===  this.columnSourceId)){ //SKS12SEP25 dependent field change\n                    if (this.columns.some(col => !col.summaryRow && Array.isArray(col?.subText?.sourceQuestionId) ?  col?.subText?.sourceQuestionId?.includes(changeValue.fromQuestionId) : changeValue.fromQuestionId ===  col?.subText?.sourceQuestionId)) {\n                      this.currentColumns = this.columns.filter((ele: any) => {\n                        if(!ele?.subText?.isDependentField){\n                          return true\n                        }\n                        if ( Array.isArray(ele?.subText?.sourceQuestionId) ? !ele?.subText?.sourceQuestionId?.includes(changeValue.fromQuestionId) : ele?.subText?.sourceQuestionId !== changeValue.fromQuestionId) {\n                          return this.currentColumns.some((currCol => currCol.uniqueIdentifier === ele.uniqueIdentifier))\n                        }\n                        if (typeof changeValue.valueObj === 'boolean') {\n                          return changeValue.valueObj\n                            ? ele?.subText?.dependentValue === 'true'\n                            : ele?.subText?.dependentValue === 'false';\n                        }\n                        return ele?.subText?.dependentValue === changeValue.valueObj;\n                      });\n                      this.currentColumns.forEach((col) =>{\n                        col.width = this.columnWidthTrack[col.uniqueIdentifier] || '100' \n                      })\n                      this.autoDistributeExtraTableWidth('columnChange');\n                      this.cdRef.markForCheck();\n                    }\n                    if (this.summaryRows.some(col => Array.isArray(col?.subText?.sourceQuestionId) ? col?.subText?.sourceQuestionId?.includes(changeValue.fromQuestionId) : col?.subText?.sourceQuestionId === changeValue.fromQuestionId)) {\n                      this.summaryRowsOrginal = this.summaryRows.filter((ele: any) => {\n                        if ( Array.isArray(ele?.subText?.sourceQuestionId) ? !ele?.subText?.sourceQuestionId?.includes(changeValue.fromQuestionId) : ele?.subText?.sourceQuestionId !== changeValue.fromQuestionId) {\n                          return this.summaryRowsOrginal.some((sumRow => sumRow.uniqueIdentifier === ele.uniqueIdentifier))\n                        }\n                        if (typeof changeValue.valueObj === 'boolean') {\n                          return changeValue.valueObj\n                            ? ele?.subText?.dependentValue === 'true'\n                            : ele?.subText?.dependentValue === 'false';\n                        }\n                        return ele?.subText?.dependentValue === changeValue.valueObj;\n                      });\n                    }\n                    if (this.summaryRows && this.summaryRows?.length > 0 && this.currentColumns.length > 0) {\n                      this.isFullTableSummaryRow = this.summaryRows[0].type === 'fullRow' ||  this.summaryRows[0].type === 'fullrow' ? true : false;\n                      this.isSummaryColumn = this.currentColumns.some(element => element.fieldName === this.summaryRows[0].column);\n                      if (this.isSummaryColumn && !this.isFullTableSummaryRow) {\n                        const index = this.currentColumns.findIndex(\n                          col => col.fieldName === this.summaryRows[0].column\n                        );        \n                        if (index !== -1) {\n                          this.isSummaryStartColumn = this.currentColumns.slice(0, index - 1);\n                          this.isSummaryStartColumn = this.isSummaryStartColumn.filter(col => !col.summaryRow);\n                          this.isSummaryEndColumn = this.currentColumns.slice(index + 1);\n                          this.isSummaryEndColumn = this.isSummaryEndColumn.filter(col => !col.summaryRow);\n                        }\n                      }\n                    }\n                    this.computeSummaryColumns()\n                    this.computeSummaryValues('onInit')\n                    this.cdRef.markForCheck();\n                  }\n                }\n              }\n            );\n          }\n        }\n    }\n    this.searchBar === undefined || this.searchBar === true ? this.searchBar = true : this.searchBar = false;\n    this.withCheckBox === undefined || this.withCheckBox === false ? this.withCheckBox = false : this.withCheckBox = true;\n    this.isEditRow === undefined || this.isEditRow === false ? this.isEditRow = false : this.isEditRow = true;\n    this.isDeleteRow === undefined || this.isDeleteRow === false ? this.isDeleteRow = false : this.isDeleteRow = true;\n    this.actionButton === undefined || this.actionButton === false ? this.actionButton = false : this.actionButton = true;\n    this.isButtons === undefined || this.isButtons === false ? this.isButtons = false : this.isButtons = true;\n    this.addInlineRecord === undefined || this.addInlineRecord === false ? this.addInlineRecord = false : this.addInlineRecord = true;\n    this.isPagination === undefined || this.isPagination === true ? this.isPagination = true : this.isPagination = false;\n    this.isNosIndicator === undefined || this.isNosIndicator === true ? this.isNosIndicator = true : this.isNosIndicator = false;\n    this.serialNumberColumn ===  undefined || this.serialNumberColumn === true ? this.serialNumberColumn = true : this.serialNumberColumn = false;\n    this.isEditable === undefined || this.isEditable === false ? this.isEditable = false : this.isEditable = true\n\n    this.inlineElement = Object.fromEntries(this.currentColumns.map(element => [element.fieldName, element?.type === 'boolean' ? ((element?.defaultValue && element?.defaultValue == 'true') ? true : false) : ( element?.defaultValue || \"\")]));\n    this.pageSize = this.tableParams?.pagination?.pageSize ||10;\n    this.pageIndex = this.tableParams?.pagination?.pageIndex ||1;\n    this.totalRecords = this.tableParams?.pagination?.['totalRecords'] ?  this.tableParams?.pagination['totalRecords'] : undefined;\n    this.pageSizeOptions = this.tableParams?.pagination?.pageSizeOptions ? this.tableParams?.pagination['pageSizeOptions'] : ['5', '10', '25', '50', '100', '200'];\n\n    this.dropdownActionButton = this.actionButtonArray?.buttonArray?.slice(this.actionButtonArray?.size);\n\n    this.originalData = [...this.data];\n    this.sFilterData = [...this.data];\n    this.dataSource.data = this.prepareActionVisibility(this.originalData)\n    // SKS20MAR25 Check if the displycolumn's have a summary column\n    if (this.summaryRows && this.summaryRows?.length > 0 && this.currentColumns.length > 0) {\n      this.isFullTableSummaryRow = this.summaryRows[0].type === 'fullRow' ||  this.summaryRows[0].type === 'fullrow' ? true : false;\n      this.isSummaryColumn = this.currentColumns.some(element => element.fieldName === this.summaryRows[0].column);\n      if (this.isSummaryColumn && !this.isFullTableSummaryRow) {\n        const index = this.currentColumns.findIndex(\n          col => col.fieldName === this.summaryRows[0].column\n        );        \n        if (index !== -1) {\n          this.isSummaryStartColumn = this.currentColumns.slice(0, index - 1);\n          this.isSummaryStartColumn = this.isSummaryStartColumn.filter(col => !col.summaryRow);\n          this.isSummaryEndColumn = this.currentColumns.slice(index + 1);\n          this.isSummaryEndColumn = this.isSummaryEndColumn.filter(col => !col.summaryRow);\n        }\n      }\n    }\n\n    if(this.currentViewFilter !== undefined && this.currentViewFilter !== null){\n      this.selectedView = this.currentViewFilter.filterName;\n      if(this.currentViewFilter.system || this.currentViewFilter === \"All Data\"){\n        const savedColumnMap = new Map(this.tableParams?.currentColumns?.map(col => [col.fieldName, col]) || []);\n        this.currentColumns = this.columns.map((column, index) => {\n          const uniqueIdentifier = column.uniqueIdentifier || `${column.fieldName || 'column'}-${index}`;\n          const savedColumn: any = savedColumnMap.get(column.fieldName);\n          return {\n            ...column,\n            width: savedColumn?.width || this.columnWidthTrack[uniqueIdentifier] ||  column.width || '50',\n            uniqueIdentifier: column.uniqueIdentifier || `${column.fieldName || 'column'}-${index}` // Generate uniqueIdentifier if not present\n          }\n        });\n        this.currentColumns.forEach((element: any) => {\n          this.columnWidthTrack[element?.uniqueIdentifier] = element.width\n        });\n      } else {\n        const columns = this.currentViewFilter?.columns || [];\n        const savedColumnMap = new Map(this.tableParams?.currentColumns?.map(col => [col.fieldName, col]) || []);\n        const updateColumn = this.columns.map((column, index) => {\n          const match = columns.find((col) => col.name === column.fieldName);\n          const uniqueIdentifier = column.uniqueIdentifier || `${column.fieldName || 'column'}-${index}`;\n          const savedColumn: any = savedColumnMap.get(column.fieldName);\n          return {\n            ...column,\n            isHide: !match,\n            filter: !!match?.filterable,\n            sort: !!match?.sortable,\n            width: savedColumn?.width || this.columnWidthTrack[uniqueIdentifier] || column.width || '50', // Set default width\n            uniqueIdentifier: column.uniqueIdentifier || `${column.fieldName || 'column'}-${index}` // Generate uniqueIdentifier if not present\n          };\n        });\n        this.currentColumns.forEach((element: any) => {\n          this.columnWidthTrack[element?.uniqueIdentifier] = element.width\n        });\n        this.currentColumns = [...updateColumn]\n      }\n    }\n    const currentFilterColumns = this.currentColumns?.filter(column => column.filter === true).map(column => column.fieldName)\n    if(this.groupFilterConfig?.column) currentFilterColumns.push(this.groupFilterConfig?.column)\n    if (currentFilterColumns?.length > 0 && !this.pagination) {\n      this.multipleFilterArray = {};\n      const filtObjs: any = {};\n      currentFilterColumns.forEach((element: any) => {\n        this.multipleFilterArray[element] = null;\n        filtObjs[element] = [];\n      });\n      this.data.forEach(element => {\n        currentFilterColumns.forEach((key: any) => {\n          const rawValue = this.getObjValue(element, key);\n          if (rawValue !== undefined) {\n            const col = this.currentColumns.find(c => c.fieldName === key);\n            const formatted = col?.type === 'date' ? this.formatDateForSearch(rawValue, col) : rawValue;\n            filtObjs[key].push(formatted);\n            this.multipleFilterArray[key] = new Set(filtObjs[key]);\n          }\n        });\n      });\n      this.multipleFilterArray = this.multipleFilterArray;\n    } else {\n      this.multipleFilterArray = this.multipleFilter;\n    }\n    // SKS15OCT25 group filter button config\n    if (this.groupFilter) {\n      this.groupFilterConfig['buttonConfig'] = {};\n      let buttons: any[] = [];\n      buttons.push({\n        isLabel: true,\n        isActive: this.groupFilterColumn === 'All' || !this.groupFilterColumn,\n        label: 'All',\n        name: 'null'\n      })\n      for (const value of this.multipleFilterArray?.[this.groupFilterConfig?.column] || []) {\n        buttons.push({\n          isLabel: true,\n          isActive: (value || 'null') === this.groupFilterColumn,\n          label: value || 'null',\n          name: value || 'null'\n        });\n      }\n      this.groupFilterConfig['buttonConfig']['buttons'] = buttons;\n    }\n    // Create a temporary filtered array that excludes any column with '['\n    const tempFilterColumns = this.columns?.filter(col => !col?.fieldName?.includes('['));\n    \n    if (tempFilterColumns?.length > 0) {\n      const filtObjs: any = {};\n    \n      // SKS26MAY25 Initialize sets to collect unique values for each column\n      tempFilterColumns.forEach((col: any) => {\n        filtObjs[col.fieldName] = new Set();\n      });\n    \n      // SKS26MAY25 Collect unique values from tableFilterData\n      this.tableFilterData?.forEach((element: any) => {\n        tempFilterColumns.forEach((col: any) => {\n          const value = this.getObjValue(element, col.fieldName);\n          if (value !== undefined) {\n            filtObjs[col.fieldName].add(value);\n          }\n        });\n      });\n    \n      // SKS26MAY25 Append \"value\" property to each column object with the array of unique values\n      this.tableFilterArray = [...tempFilterColumns.map((col: any) => ({\n        ...col,\n        value: Array.from(filtObjs[col.fieldName])\n      }))]\n    }          \n    this.selection = new SelectionModel<any>(true, []);\n    const t = window.setTimeout(() => {\n      this.dataSource.sort = this.sort;\n    });\n    this.timers.push(t);    \n    this.totalCount = this.totalRecords || this.data?.length\n    this.filterTableNos = this.totalRecords || this.data?.length\n    const NxtDataTable = JSON.parse(localStorage.getItem('NxtDataTable'));\n    this.currentSortColumn = NxtDataTable?.currentSortColumn;\n    this.currentSortDirection = NxtDataTable?.currentSortDirection;\n    if (NxtDataTable?.addRecord === true) {\n      this.pageSize = NxtDataTable?.pageSize\n      this.pageIndex = NxtDataTable?.pageIndex\n      var obj: any = {};\n      const keys = Object.keys(this.inlineElement);\n      keys.forEach((elementKey: any) => {\n        obj[elementKey] = typeof this.inlineElement[elementKey] === 'boolean' ? (this.inlineElement[elementKey] ? true : false) :  (this.inlineElement[elementKey] || '');\n      });\n      this.data.push(obj);\n      const data: any = this.data;\n      this.dataSource.data = this.prepareActionVisibility(data) ;\n      this.selection?.select(this.data[this.data.length - 1]);\n      if (this.data.length > 0) {\n        this.data[this.data.length - 1].editRow = true;\n      }      \n      localStorage.setItem('NxtDataTable', JSON.stringify({ addRecord: false, pageSize: 10, pageIndex: this.pageIndex, currentSortColumn: this.currentSortColumn, currentSortDirection: this.currentSortDirection }));\n    }\n    if (this.stickyColumn === true && this.currentColumns) {\n      this.stickyCondition = this.currentColumns?.length;\n    } else {\n      this.stickyCondition = this.currentColumns?.length + 1;\n    }\n\n    // SKS19MAR25 add first line for formbuilder table\n    if (this.isEditable && this.data.length === 0) { this.addTableRecord( this.inlineElement, \"onInit\") }\n\n    setTimeout(() => {\n      if (this.tableContainer?.nativeElement) {\n        const tableBody = this.tableContainer.nativeElement.querySelector('.table-body');\n        if (tableBody && this.isPagination) {\n          this.isShadowHidden = !(tableBody.scrollHeight < 453)\n        }\n      }\n    }, 1500); // Waits 100ms for rendering\n    // SKS17APR25 table parems data update\n    if (this.searchConfigs?.searchFilterVal) {\n      this.searchBoxValue = this.searchConfigs?.searchFilterVal; // Show value in the search box\n      this.prevSearch = this.searchConfigs?.searchFilterVal;\n      this.emptySearch(this.searchBoxValue)\n    } else if(this.tableParams?.tableSearch?.value){\n      this.searchBoxValue = this.tableParams?.tableSearch?.value;\n      this.applyFilter(this.searchBoxValue, 'onChange')\n    } else if( this.tableParams?.searchFilterData || this.filterDataArray) {\n       this.filterRetain( this.tableParams?.searchFilterData || this.filterDataArray,'onChange' )\n    }\n    if(Object.keys(this.filterDataArray).length > 0){\n      this.filterRetain(this.filterDataArray, 'onChange')\n    }\n    this.filterDataArray = this.tableParams?.searchFilterData ? this.tableParams?.searchFilterData : {};\n    this.sortData(this.tableParams?.sort?.column, this.tableParams?.sort?.direction,true,'onChange' )\n    let lang = localStorage.getItem('language')\n    if (this.languageCode) {\n      this.translationService.setLanguage(this.languageCode);\n    } else if(lang && lang !== '') {\n      this.languageCode = lang\n    }\n    this.translationService.translationsLoaded$\n    .pipe(takeUntil(this.destroy$))\n    .subscribe(() => {\n      this.cdRef.markForCheck();\n    });\n    if (!this.isPagination) {\n      this.dataSource.data = this.prepareActionVisibility(this.data)\n    }\n    this.summaryRows?.length > 0 ? this.computeSummaryValues('onChange') :''; // Compute per-row summary columns first\n  }\n  ngAfterViewInit() {\n    const t = window.setTimeout(() => {\n      this.autoDistributeExtraTableWidth();\n      this.cdRef.markForCheck();\n    });\n    this.timers.push(t);    \n  }\n  autoDistributeExtraTableWidth(from?: any) {\n    const tableWrapper = document.querySelector('.table-container') as HTMLElement;\n    if (!tableWrapper) return;\n  \n    const totalTableWidth = tableWrapper.clientWidth;\n  \n    //SKS10AUG25 Only include visible, non-summary, non-hidden columns\n    const visibleColumns = this.currentColumns.filter(col =>\n      col.summaryRow !== true &&\n      col.isHide !== true\n    );\n  \n    //SKS10AUG25 Sum up current widths (if any), treating undefined as default 50px\n    let totalColumnsWidth = 0;\n    visibleColumns.forEach(col => {\n      const colWidth = parseInt(col.width || '50', 10); //SKS10AUG25 default to 50 if not set\n      totalColumnsWidth += colWidth;\n    });\n  \n    const extraSpace = from === 'columnChange' ? totalTableWidth : totalTableWidth - totalColumnsWidth;\n    if (extraSpace <= 0) return; // No need to adjust\n  \n    const extraPerColumn = Math.floor(extraSpace / visibleColumns.length);\n  \n    visibleColumns.forEach(col => {\n      const current = parseInt( from === 'columnChange' ? '50' : col.width || '50', 10);\n      const newWidth = current + extraPerColumn;\n      col.width = newWidth;\n      this.columnWidthTrack[col.uniqueIdentifier] = newWidth;\n    });\n  }\n  onResizeStart(event: MouseEvent) {\n    event.preventDefault();\n    event.stopPropagation();\n  \n    this.isResizing = true;\n    this.startX = event.clientX;\n  \n    const handleEl = event.target as HTMLElement;\n    const columnId = handleEl.getAttribute('resize-data-column-id');\n    const column = this.currentColumns.find(c => c.uniqueIdentifier === columnId);\n  \n    if (!column) return;\n  \n    this.currentColumn = column;\n    this.startWidth = parseInt(column.width || '50', 10);\n  \n    document.body.style.cursor = 'col-resize';\n    document.body.style.userSelect = 'none';\n\n    document.addEventListener('mousemove', this.onResizeMove);\n    document.addEventListener('mouseup', this.onResizeEnd);\n  }\n    \n  private onResizeMove = (event: MouseEvent) => {\n    if (!this.isResizing || !this.currentColumn) return;\n    const deltaX = this.direction === 'rtl'\n      ? this.startX - event.clientX   //SKS10AUG25 In RTL, invert direction\n      : event.clientX - this.startX;\n  \n    const newWidth = Math.max(50, this.startWidth + deltaX);\n  \n    this.currentColumn.width = newWidth;\n    this.columnWidthTrack[this.currentColumn.uniqueIdentifier] = newWidth;\n  \n    this.applyWidthToColumn(this.currentColumn.uniqueIdentifier, newWidth);\n  };\n  \n  private applyWidthToColumn(columnId: string, newWidth: number) {\n    const widthStr = `${newWidth}px`;\n  \n    const allCells = document.querySelectorAll(`[data-column-id=\"${columnId}\"]`);\n    this.columnWidthTrack[columnId] = newWidth\n    allCells.forEach(cell => {\n      this.renderer.setStyle(cell, 'width', widthStr);\n      this.renderer.setStyle(cell, 'minWidth', widthStr);\n      this.renderer.setStyle(cell, 'maxWidth', widthStr);\n    });\n  }\n  private onResizeEnd = (_event: MouseEvent) => {\n    this.isResizing = false;\n    this.currentColumn = null;\n    \n    // SKS22JUL25 Remove cursor style from body\n    document.body.style.cursor = '';\n    document.body.style.userSelect = '';\n  \n    document.removeEventListener('mousemove', this.onResizeMove);\n    document.removeEventListener('mouseup', this.onResizeEnd);\n    this.NxtTableParamsEmit.emit({nonReload: true, pagination: { pageSize: this.pageSize, pageIndex: this.pageIndex },tableSearch: { fields: this.currentColumns.map(f => f.fieldName), value: this.searchBoxValue }, searchFilterData: this.filterDataArray, sort: { column: this.currentSortColumn, direction: this.currentSortDirection ,listView: this.selectedView},currentColumns: this.currentColumns})\n  };\n\n  ngOnDestroy(): void {\n    this.destroy$.next();\n    this.destroy$.complete();\n    this.timers.forEach(t => clearTimeout(t));\n    document.removeEventListener('mousemove', this.onResizeMove);\n    document.removeEventListener('mouseup', this.onResizeEnd);\n  }  \n  // SKS20MAR25 summary columns calc\n  computeSummaryColumns() {\n    if (this.summaryColumns && this.summaryColumns.length > 0) {\n      this.data = this.data.map(row => {\n        const newRow = { ...row };\n        this.summaryColumns.forEach(summaryCol => {\n          //SKS29OCT25 ---- FORMULA ----\n          if (summaryCol.formula) {\n            let expression = summaryCol.formula.replace(/\\[([^\\]]+)\\]/g, (_, fieldName) => {\n              try {\n                const value = fieldName.split('.').reduce((acc, key) => acc?.[key], newRow);\n                return Number(value) || 0;\n              } catch {\n                return 0;\n              }\n            });\n      \n            try {\n              const result = Function(`\"use strict\"; return (${expression})`)();\n              const finalValue = isNaN(result) ? 0 : Number(result.toFixed(2));\n              if (summaryCol?.subText?.isGroup && summaryCol?.subText?.groupField) {\n                const groupKey = summaryCol?.subText?.groupField.split('.').reduce((acc, key) => acc?.[key], newRow);\n                if (groupKey) {\n                  if (!Array.isArray(newRow[summaryCol.fieldName])) {\n                    newRow[summaryCol.fieldName] = [];\n                  }\n                  const existingGroup = newRow[summaryCol.fieldName].find(obj => obj[groupKey] !== undefined);\n                  if (existingGroup) {\n                    existingGroup[groupKey] += finalValue;\n                  } else {\n                    newRow[summaryCol.fieldName].push({ [groupKey]: finalValue });\n                  }\n                }\n              } else {\n                newRow[summaryCol.fieldName] = finalValue;\n              }\n            } catch (e) {\n              console.error('Error evaluating formula:', summaryCol.formula, e);\n              newRow[summaryCol.fieldName] = 0;\n            }\n      \n          //SKS29OCT25 ---- SUM ----\n          } else if (summaryCol.operation === 'sum' && summaryCol.operands) {\n            const sum = summaryCol.operands.reduce((acc, operand) => acc + (Number(newRow[operand]) || 0), 0);\n            const sumValue = Number(sum.toFixed(2));\n            if (summaryCol?.subText?.isGroup && summaryCol?.subText?.groupField) {\n              const groupKey = summaryCol?.subText?.groupField.split('.').reduce((acc, key) => acc?.[key], newRow);\n              if (groupKey) {\n                if (!Array.isArray(newRow[summaryCol.fieldName])) {\n                  newRow[summaryCol.fieldName] = [];\n                }\n                const existingGroup = newRow[summaryCol.fieldName].find(obj => obj[groupKey] !== undefined);\n                if (existingGroup) {\n                  existingGroup[groupKey] += sumValue;\n                } else {\n                  newRow[summaryCol.fieldName].push({ [groupKey]: sumValue });\n                }\n              }\n            } else {\n              newRow[summaryCol.fieldName] = sumValue;\n            }\n          //SKS29OCT25 ---- SUBTRACT ----\n          } else if (summaryCol.operation === 'subtract' && summaryCol.operands) {\n            const [firstOperand, ...restOperands] = summaryCol.operands;\n            let sum = Number(newRow[firstOperand]) || 0;\n            sum = restOperands.reduce((acc, operand) => acc - (Number(newRow[operand]) || 0), sum);\n            newRow[summaryCol.fieldName] = Number(sum.toFixed(2));\n          //SKS29OCT25 ---- MULTIPLY ----\n          } else if (summaryCol.operation === 'multiply' && summaryCol.operands) {\n            const product = summaryCol.operands.reduce((acc, operand) => acc * (Number(newRow[operand]) || 0), 1);\n            newRow[summaryCol.fieldName] = Number(product.toFixed(2));\n          }\n        });\n        return newRow;\n      });\n      this.dataSource.data = this.prepareActionVisibility(this.data);\n      if (this.data && this.isPagination) {\n        const pageIndex = Number(this.pageIndex) || 0;\n        const pageSize = Number(this.pageSize) || 10;\n        const start = (pageIndex - 1) * pageSize;\n        const end = start + pageSize;\n        this.dataSource.data = this.prepareActionVisibility(this.data?.slice(start, end) || []);\n        this.cdRef.markForCheck();\n      } else if (!this.isPagination) {\n        this.dataSource.data = this.prepareActionVisibility(this.data);\n      }\n    }\n  }\n  // SKS20MAR25 Compute values for summary rows\n  computeSummaryValues(from?) {\n    let tempSummaryRow = []\n    if( !this.summaryValues || Object.keys(this.summaryValues)?.length === 0) this.summaryValues = {}\n    if (Array.isArray(this.summaryRows)) {\n      for (const row of this.summaryRows) {\n        if (row.formula) {\n          // Replace [fieldName] with actual summary values or column sums\n          let expression = row.formula.replace(/\\[([^\\]]+)\\]/g, (_, fieldName) => {\n            if (this.currentColumns.some(col => col.fieldName === fieldName && !col.summaryRow)) {\n              // Sum values from the current dataSource for this column\n              const sum = this.dataSource.data.reduce(\n                (acc, dataRow) => acc + (Number(dataRow[fieldName]) || 0),\n                0\n              );\n              return sum;\n            }\n            // Otherwise, take already computed summary value\n            return Number(this.summaryValues?.[fieldName]) || 0;\n          });\n          try {\n            const result = Function(`\"use strict\"; return (${expression || 0})`)();\n            const finalValue = isNaN(result) ? 0 : Number(Number(result).toFixed(2));\n            if (row?.subText?.isGroup && row?.subText?.groupField) {\n              const groupFieldPath = row.subText.groupField.split('.');\n              const groupedSums: Record<string, number> = {};\n              this.dataSource.data.forEach(dataRow => {\n                const groupKey = groupFieldPath.reduce((acc, key) => acc?.[key], dataRow);\n                if (!groupKey) return;\n                groupedSums[groupKey] = (groupedSums[groupKey] || 0) + finalValue;\n              });\n              this.summaryValues[row.fieldName] = Object.entries(groupedSums).map(\n                ([key, val]) => ({ [key]: Number(val.toFixed(2)) })\n              );\n            } else {\n              this.summaryValues[row.fieldName] = finalValue;\n            }\n          } catch (e) {\n            console.error('Error evaluating summary formula:', row.formula, e);\n            this.summaryValues[row.fieldName] = 0;\n          }\n        } else if (row.operation === 'sum' && row.column) {\n          if (row?.subText?.isGroup && row?.subText?.groupField) {\n            const groupFieldPath = row.subText.groupField.split('.');\n            const groupedSums: Record<string, number> = {};\n            this.dataSource.data.forEach(dataRow => {\n              const groupKey = groupFieldPath.reduce((acc, key) => acc?.[key], dataRow);\n              const value = Number(dataRow[row.column]) || 0;\n              if(row?.subText?.childGroupField && row?.subText?.childGroupField !== ''){\n                const childGroupFieldPath = row.subText.childGroupField.split('.');\n                const childGroupArray = childGroupFieldPath.reduce((acc, key) => acc?.[key], dataRow);\n                if(childGroupArray && Array.isArray(childGroupArray) && childGroupArray.length > 0){\n                  let childArrayCopy = JSON.parse(JSON.stringify(childGroupArray))\n                  const total = childArrayCopy.reduce((sum, t) => sum + Number(t[row?.subText?.childGroupPercentageField]), 0);\n                  childArrayCopy = childArrayCopy.map(tax => ({\n                    ...tax,\n                    [row.subText.childGroupPercentageField]: parseFloat(\n                      ((((Number(tax[row?.subText?.childGroupPercentageField]) / total) * 100) / 100) * value).toFixed(2)\n                    )\n                  }));                  \n                  childArrayCopy.forEach((child: any) =>{\n                    const lastKey = groupFieldPath[groupFieldPath.length - 1];\n                    const childGroupKey = child[lastKey];\n                    if (childGroupKey) groupedSums[childGroupKey] = (groupedSums[childGroupKey] || 0) + child[row?.subText?.childGroupPercentageField];\n                  })\n                } else {\n                  if (groupKey) groupedSums[groupKey] = (groupedSums[groupKey] || 0) + value;\n                }\n              } else {\n                if (groupKey) groupedSums[groupKey] = (groupedSums[groupKey] || 0) + value;\n              }\n            });\n            \n            this.summaryValues[row.fieldName] = {group: Object.entries(groupedSums).map(\n              ([key, sumValue]) => ({ [key]: Number(sumValue.toFixed(2)) })\n            )};\n            const sumValue = this.dataSource.data.reduce(\n              (acc, dataRow) => acc + (Number(dataRow[row.column]) || 0),\n              0\n            );\n            this.summaryValues[row.fieldName]['value'] = Number(sumValue.toFixed(2));\n          } else {\n            const sumValue = this.dataSource.data.reduce(\n              (acc, dataRow) => acc + (Number(dataRow[row.column]) || 0),\n              0\n            );\n            this.summaryValues[row.fieldName] = Number(sumValue.toFixed(2));\n          }\n        } else if (row.operation === 'subtract' && row.column) {\n          this.summaryValues[row.fieldName] = this.dataSource.data.reduce(\n            (acc, dataRow, index) =>\n              index === 0 ? Number(dataRow[row.column]) || 0 : acc - (Number(dataRow[row.column]) || 0),\n            0\n          );\n        } else if (row.operation === 'multiply' && row.column) {\n          this.summaryValues[row.fieldName] = this.dataSource.data.reduce(\n            (acc, dataRow) => acc * (Number(dataRow[row.column]) || 1),\n            1\n          );\n        } else if (row.operands?.length === 2) {\n          const [op1, op2] = row.operands;\n          switch (row.operation) {\n            case 'sum':\n              this.summaryValues[row.fieldName] = (this.summaryValues?.[op1] || 0) + (this.summaryValues?.[op2] || 0);\n              break;\n            case 'subtract':\n              this.summaryValues[row.fieldName] = (this.summaryValues?.[op1] || 0) - (this.summaryValues?.[op2] || 0);\n              break;\n            case 'multiply':\n              this.summaryValues[row.fieldName] = (this.summaryValues?.[op1] || 0) * (this.summaryValues?.[op2] || 0);\n              break;\n          }\n        }\n        // SKS13JUN25 Sum the values by default.\n        if (row.type?.toLowerCase() === 'fullrow') {\n          row?.columns?.forEach(element => {\n            this.summaryValues[element] = this.dataSource.data.reduce(\n              (acc, dataRow) => acc + (Number(dataRow[element]) || 0),\n              0\n            );\n          });\n        }\n        // SKS29OCT25 Build final summary row display\n        if (this.summaryRowsOrginal.some(ele => ele.fieldName === row.fieldName)) {\n          if (row?.subText?.isGroup && Array.isArray(this.summaryValues?.[row.fieldName]?.group)) {\n            const tempRow = JSON.parse(JSON.stringify(row));\n            for (const sCol of this.summaryValues?.[row.fieldName].group) {\n              for (const [key, value] of Object.entries(sCol)) {\n                this.summaryValues[key] = value;\n                const clonedRow = JSON.parse(JSON.stringify(tempRow));\n                clonedRow.fieldName = key;\n                clonedRow.label = key;\n                tempSummaryRow.push(clonedRow);\n              }\n            }\n            this.summaryValues[row.fieldName] = this.summaryValues?.[row.fieldName]?.value\n          } else {\n            tempSummaryRow.push(row);\n          }\n        }\n      }\n      //SKS29OCT25 Remove duplicates\n      tempSummaryRow = tempSummaryRow.filter(\n        (row, index, self) => index === self.findIndex(r => r.fieldName === row.fieldName)\n      );\n      this.displaySummaryRows = [...tempSummaryRow];\n    }\n    //SKS29OCT25 Emit values only when needed\n    if (['formBuilder', 'questionBook'].includes(this.from)) {\n      const isEqual = this.data.length === this.originalData.length && JSON.stringify(this.data) === JSON.stringify(this.originalData);\n      if (this.data.length >= this.originalData.length || !isEqual) {\n        this.originalData = this.data;\n      }\n      this.emitTableDataValue({ data: this.originalData, summaryValues: this.summaryValues });\n    }\n    this.cdRef.markForCheck();\n  }\n\n  // SKS15FEB25 Custom sort function\n  sortData(column: string, sortingState?: any | undefined, currentState?:any |undefined, from?:any) {\n    // Define sorting states\n    const sortingStates = ['asc', 'desc', 'none'];\n    if (!this.pagination) {\n      // Determine the current sorting state\n      if (this.currentSortColumn === column && !sortingState) {\n        // Move to the next sorting state\n        const currentIndex = sortingStates.indexOf(this.currentSortDirection);\n        this.currentSortDirection = sortingStates[(currentIndex + 1) % sortingStates.length] as \"asc\" | \"desc\" | \"none\";\n      } else {\n        // If a new column is selected, start with ascending sort\n        this.currentSortColumn = column;\n        this.currentSortDirection = sortingState || 'asc';\n      }\n      const data = this.filterBoxData && this.filterBoxData.length > 0 ? this.filterBoxData : this.dataSource.data;\n      // Only sort if the direction is 'asc' or 'desc'\n      if (this.currentSortDirection === 'asc' || this.currentSortDirection === 'desc') {\n        data.sort((a, b) => {\n          let valueA = this.getObjValue(a, column);\n          let valueB = this.getObjValue(b, column);\n          // Handle undefined or null values\n          if (valueA == null && valueB == null) return 0; // Both are null/undefined\n          if (valueA == null) return this.currentSortDirection === 'asc' ? 1 : -1; // valueA is null\n          if (valueB == null) return this.currentSortDirection === 'asc' ? -1 : 1; // valueB is null\n          // Handle date sorting\n          if (this.columns?.some(col => col.fieldName === column && col?.type === 'date')) {\n            const dateA = new Date(valueA);\n            const dateB = new Date(valueB);\n            valueA = dateA.getTime();\n            valueB = dateB.getTime();\n          } else if (typeof valueA === 'number' && typeof valueB === 'number') {\n            // Handle number sorting\n            valueA = Number(valueA);\n            valueB = Number(valueB);\n          } else if (typeof valueA === 'string' && typeof valueB === 'string') {\n            // Handle string comparison\n            valueA = valueA?.toLowerCase();\n            valueB = valueB?.toLowerCase();\n          }\n          // Compare values\n          if (valueA < valueB) {\n            return this.currentSortDirection === 'asc' ? -1 : 1;\n          } else if (valueA > valueB) {\n            return this.currentSortDirection === 'asc' ? 1 : -1;\n          } else {\n            // If values are the same, return 0 to maintain original order\n            return 0;\n          }\n        });\n        const pageIndex = Number(this.pageIndex) || 0;\n        const pageSize = Number(this.pageSize) || 10;\n        const start = (pageIndex - 1) * pageSize;\n        const end = start + pageSize;\n        this.dataSource.data = this.prepareActionVisibility([...data?.slice(start, end)]);\n        this.cdRef.markForCheck();\n      } else {\n        const pageIndex = Number(this.pageIndex) || 0;\n        const pageSize = Number(this.pageSize) || 10;\n        const start = (pageIndex - 1) * pageSize;\n        const end = start + pageSize;\n        this.dataSource.data = this.prepareActionVisibility(this.filterBoxData ? this.filterBoxData?.slice(start, end) || [] : this.data?.slice(start, end) || []);\n        this.cdRef.markForCheck();\n      }\n    } else {\n      // Determine the current sorting state\n      if (this.currentSortColumn === column) {\n        // Move to the next sorting state\n        const currentIndex = sortingStates.indexOf(this.currentSortDirection);\n        this.currentSortDirection = sortingStates[(currentIndex + 1) % sortingStates.length] as \"asc\" | \"desc\" | \"none\";\n      } else {\n        // If a new column is selected, start with ascending sort\n        this.currentSortColumn = column;\n        this.currentSortDirection = 'asc';\n      }\n      localStorage.setItem('NxtDataTable', JSON.stringify({ addRecord: false, pageSize: this.pageSize, pageIndex: this.pageIndex, currentSortColumn: this.currentSortColumn, currentSortDirection: this.currentSortDirection }));\n    }\n    if(from !== 'onChange')this.NxtTableParamsEmit.emit({ pagination: { pageSize: this.pageSize, pageIndex: this.pageIndex },tableSearch: { fields: this.currentColumns.map(f => f.fieldName), value: this.searchBoxValue }, searchFilterData: this.filterDataArray, sort: { column: this.currentSortColumn, direction: this.currentSortDirection ,listView: this.selectedView},currentColumns: this.currentColumns})\n    if(from === 'onChange') this.pageParams(this.tableParams?.pagination,'onChange')\n    this.computeSummaryValues(from)\n  }\n\n  onScroll(tableContainer: HTMLElement) {\n    this.isScrolled = tableContainer.scrollTop > 0;\n    const tableBodyHeight = tableContainer.scrollHeight;\n    const isAtBottom = tableBodyHeight - tableContainer.scrollTop <= tableContainer.clientHeight + 1;\n    //SKS15FEB25 Ensure shadow is hidden only if table body height is greater than 400px\n    if (this.isPagination) {\n      this.isShadowHidden = !(isAtBottom || tableBodyHeight < 453);\n    }\n  }\n\n  //SKS15FEB25 losing the filter component when the mouse is clicked outside table\n  @HostListener('document:click', ['$event']) onDocumentClick(event: any) {\n    this.searchFilter = false;\n    event.stopPropagation(); // prevents any other default action\n  }\n\n  //SKS15FEB25 filter data that to be displayed in header filter icon is passed in 'filterArray' array\n  filter(datas: any, event: MouseEvent) {\n    const spaceRight = window.innerWidth - event.clientX;\n    this.alignRight = spaceRight < 300; // popup width\n    this.filterArray = [];\n    this.selectedFilter = datas;\n    this.filterArray = this.multipleFilterArray?.[datas] ? [...this.multipleFilterArray?.[datas]] : [];\n    this.searchFilter = !this.searchFilter;\n    this.isResized = this.filterDataArray[this.selectedFilter]?.length > 0\n  }\n\n  // SKS15FEB25  emitting pagr size and index to parent on paginating\n  pageParams(event: any, from?:any) {\n    this.pageIndex = event?.pageIndex || this.pageIndex\n    this.pageSize = event?.pageSize || this.pageSize\n    this.filterTableNos = this.filterBoxData?.length\n    if(this.from === 'formBuilder' || this.from === 'questionBook') this.prepareActionVisibility(this.dataSource.data = this.filterBoxData = this.data)\n    if (!this.pagination) {\n      if(from !== 'onChange')this.applyFilter(this.searchBoxValue , 'pageParams')\n      const start = (Number(this.pageIndex) - 1) * Number(this.pageSize);\n      const end = start + Number(this.pageSize);\n      this.dataSource.data = this.prepareActionVisibility(this.filterBoxData?.slice(start, end));\n      this.computeSummaryValues(from)\n    }\n    if(from !== 'onChange')this.NxtTableParamsEmit.emit({ pagination: { pageSize: this.pageSize, pageIndex: this.pageIndex },tableSearch: { fields: this.currentColumns.map(f => f.fieldName), value: this.searchBoxValue }, searchFilterData: this.filterDataArray, sort: { column: this.currentSortColumn, direction: this.currentSortDirection ,listView: this.selectedView},currentColumns: this.currentColumns})\n  }\n  /** SKS29OCT25 Formats a cell value exactly the way it appears in the UI */\n  private formatDateForSearch(value: any, col: any): string {\n    if (!value) return '';\n    if (col?.type === 'date') {\n      const pipe = new NxtDatePipe();\n      return pipe.transform(value, 'mediumDate', this.languageCode, col.calendarType || 'gregorian')?.toLowerCase() ?? '';\n    }\n    return String(value)?.toLowerCase();\n  }\n  // SKS15FEB25 apply search bar filter using mat\n  applyFilter(event: any, from?: any) {\n    let filterValue = event ? event?.trim()?.toLowerCase() : '';\n    this.searchBoxValue = event ? event.trim() : '';\n\n    if (!filterValue) {\n      this.dataSource.data = this.prepareActionVisibility(this.originalData);\n    } else if (!this.pagination) {\n      this.dataSource.data = this.prepareActionVisibility(this.originalData.filter(item =>\n        this.currentColumns.some(column => {\n          const cellValue = this.getObjValue(item, column.fieldName);\n          const searchable = column?.type === 'date' ? this.formatDateForSearch(cellValue, column) : typeof cellValue === 'string' ? cellValue?.toLowerCase() : cellValue;\n          return typeof searchable === 'string' && searchable?.includes(filterValue);\n        })\n      ));\n    }\n    if(!this.pagination){\n      if(from !== 'pageParams' && from !== 'onChange') this.pageIndex = 1\n      this.sFilterData = this.dataSource.data\n      this.filterTableNos = this.sFilterData?.length\n      this.totalCount = this.data.length\n      const start = (Number(this.pageIndex) - 1) * Number(this.pageSize);\n      const end = start + Number(this.pageSize);\n      this.dataSource.data = this.prepareActionVisibility(this.dataSource.data?.slice(start, end));\n      this.filterRetain(from === 'onChange' ? (this.tableParams?.searchFilterData || this.filterDataArray) : this.filterDataArray,from )\n    } else {\n      if(from !== 'onChange')this.NxtTableParamsEmit.emit({ pagination: { pageSize: this.pageSize, pageIndex: this.pageIndex },tableSearch: { fields: this.currentColumns.map(f => f.fieldName), value: this.searchBoxValue }, searchFilterData: this.filterDataArray, sort: { column: this.currentSortColumn, direction: this.currentSortDirection ,listView: this.selectedView},currentColumns: this.currentColumns})\n    }\n  }\n\n  /** SKS15FEB25 Whether the number of selected elements matches the total number of rows. */\n  isAllSelected() {\n    // check if all rows are selected\n    const numSelected = this.selection?.selected.length;\n    const numRows = this.originalData.length;\n    return numSelected === numRows;\n  }\n\n  /** SKS15FEB25 Selects all rows if they are not all selected; otherwise clear selection. */\n  masterToggle() {\n    // if there is a selection then clear that selection\n    // emit the selected value only to parent\n    if (this.isSomeSelected()) {\n      //   to remove the editRow, if the checkbox is unchecked\n      this.selection?.selected.forEach((element: any) => {\n        if (element?.editRow) element['editRow'] = false;\n      });\n      this.selection?.clear();\n      this.selectedValues.emit(this.selection?.selected);\n    } else {\n      // If no items are selected, either select all items or clear the selection\n      // emit the selected values to parent\n      if(this.isAllSelected()) {\n        this.selection?.clear()\n      } else {\n         this.dataSource.data.forEach((row: any) => this.selection?.select(row));\n         const obj: any = {};\n         Object.keys(this.inlineElement).forEach(key => {\n           obj[key] =  typeof this.inlineElement[key] === 'boolean' ? (this.inlineElement[key] ? true : false) :  (this.inlineElement[key] || '');\n         });\n         const isTrue = !!this.selection?.selected?.length && this.selection.selected.every(row => this.isSameRow(row, obj));\n         this.selectedIsEmpty = isTrue;\n      }\n      this.selectedValues.emit(this.selection?.selected);\n    }\n  }\n\n  // SKS15FEB25 Checks whether any items are currently selected in the table.\n  isSomeSelected() {\n    return this.selection?.selected.length > 0;\n  }\n\n  // SKS15FEB25 emit the check box values, that selected separately\n  separateRowSelect(data: any, element: any) {\n    //   to remove the editRow id check box is unchecked on separate row\n    if (data && element?.editRow) {\n      element['editRow'] = false;\n    }\n    const obj: any = {};\n    Object.keys(this.inlineElement).forEach(key => {\n      obj[key] =  typeof this.inlineElement[key] === 'boolean' ? (this.inlineElement[key] ? true : false) :  (this.inlineElement[key] || '');\n    });\n    const isTrue = !!this.selection?.selected?.length && this.selection.selected.every(row => this.isSameRow(row, obj));\n    this.selectedIsEmpty = isTrue;\n    if (data) {\n      this.selectedValues.emit(this.selection?.selected)\n    }\n  }\n\n  //SKS15FEB25 data that to be passed, when table row is clicked\n  tableClick(data: any) {\n    this.tableRowClick.emit(data);\n  }\n  getNestedValue(obj: any, path: string): any {\n    if (!obj || !path) return undefined;\n  \n    return path\n      .replace(/\\[(\\d+)\\]/g, '.$1') // turns \"members[0]\" into \"members.0\"\n      .split('.')\n      .reduce((acc, part) => (acc && acc[part] !== undefined) ? acc[part] : undefined, obj);\n  }\n  \n  //SKS15FEB25 Retain the filterdata\n  filterRetain(filterkeyMap: any, from?:any) {\n    let filterkey = JSON.parse(JSON.stringify(filterkeyMap))\n    if (filterkey && Object.keys(filterkey).length == 0) {\n      this.data = this.sFilterData;\n    } else {\n      this.data = [];\n      let isDataChecked = false;\n      for (let key of Object.keys(filterkey)) {\n        if (filterkey[key] && filterkey[key].length > 0) {\n          isDataChecked = true;\n        }\n      }\n      if (!isDataChecked) {\n        this.data = this.sFilterData;\n      } else {\n        const filterKeys = Object.keys(filterkey);\n        const data = this.sFilterData.filter((item: any) => {\n          return filterKeys.every(key => {\n            if (!filterkey[key] || filterkey[key].length === 0) {\n              return true; // skip empty filters\n            }\n            const column = this.currentColumns.find(c => c.fieldName === key);\n            const value = this.getNestedValue(item, key);\n            const comparable = column?.type === 'date' ? this.formatDateForSearch(value, column) : value;\n            const normalize = (v: any) => v ?? \"\";\n            return filterkey[key].includes(normalize(comparable));\n          });\n        });\n        const data1 = [...this.data, ...data];\n        this.data = this.removeDuplicates(data1);\n      }\n    }\n    if(from !== 'pageParams' && from !== 'onChange') this.pageIndex = 1\n    const start = (Number(this.pageIndex) - 1) * Number(this.pageSize);\n    const end = start + Number(this.pageSize);\n    this.filterBoxData = this.data\n    this.filterTableNos = this.filterBoxData?.length\n    if(!this.pagination){\n      this.dataSource.data = this.prepareActionVisibility(this.data?.slice(start, end));\n    }\n    this.data = this.originalData\n    this.sortData(this.currentSortColumn ,this.currentSortDirection,undefined,from)\n  }\n// SKS15FEB25 to remove duplicate object from two arrays (safe stringify)\nremoveDuplicates(objects: any) {\n  const seen = new Set<string>();\n  const uniqueObjects: any[] = [];\n\n  const safeStringify = (obj: any) => {\n    const seenObjs = new WeakSet();\n    return JSON.stringify(obj, (key, value) => {\n      if (value === undefined) return null; // replace undefined to avoid issues\n      if (typeof value === \"object\" && value !== null) {\n        if (seenObjs.has(value)) return; // skip circular\n        seenObjs.add(value);\n      }\n      return value;\n    });\n  };\n\n  objects.forEach((obj: any) => {\n    const key = safeStringify(obj);\n    if (!seen.has(key)) {\n      seen.add(key);\n      uniqueObjects.push(obj);\n    }\n  });\n\n  return uniqueObjects;\n}\n\n  // SKS15FEB25  on delete click save the data in variables\n  deleteRecord(data: any, index: number) {\n    if (this.from === 'formBuilder' || this.from === 'questionBook') {\n      // SKS18SEP25 Get the object at the given index from the current dataSource (10 records)\n      const target = this.dataSource.data[index];\n      // SKS18SEP25 Remove it from originalData (full dataset)\n      this.originalData = this.originalData.filter(item => item !== target);\n      // Also update the paginated dataSource\n      this.dataSource.data = this.prepareActionVisibility(this.dataSource.data.filter((_, i) => i !== index));\n      // SKS18SEP25 Keep synced data copy if needed\n      this.data = this.originalData\n      this.computeSummaryValues('deleteRecord');\n      if(this.from === 'formBuilder' || this.from === 'questionBook')this.pageParams(null, this.from)\n      this.cdRef.markForCheck(); // Trigger change detection\n      this.cdRef.detectChanges(); // Force pipe re-evaluation\n    } else {\n      this.deleteData = data;\n      this.deleteIndex = index;\n      this.deleteModal = true;\n    }\n  }\n\n  // SKS15FEB25  after clicking yes in delete alert modal, emit to parent\n  deleteRecordData() {\n    this.onDeleteData.emit({ data: this.deleteData, allData: this.data, index: this.deleteIndex });\n  }\n\n  //SKS15FEB25 to save the edited data in table;\n  saveButton(element: any) {\n    const obj: any = {};\n    Object.keys(element).forEach(key => {\n      obj[key] = element[key] ?? '';\n    });\n    if (this.data?.length) {\n      this.data = this.data.filter(row => !this.isSameRow(row, obj));\n    }\n    this.tableEditTrack = false\n    // emitting all data with selected data\n    this.saveButtonData.emit({ selectedData: this.selection?.selected, allData: this.data });\n  }\n  private isSameRow(a: any, b: any): boolean {\n    const rowA = this.normalizeRow(a);\n    const rowB = this.normalizeRow(b);\n    return Object.keys(rowA).every(\n      key => rowA[key] === rowB[key]\n    );\n  }\n  private normalizeRow(row: any) {\n    const clone = { ...row };\n    delete clone.editRow; // ignore UI-only flags\n    return clone;\n  }    \n  //SKS15FEB25 pass the rejected reason\n  onEdit(data: any) {\n    if (typeof data === 'object') data['editRow'] = true; // made editing row as true //  solve undefined error on string\n    this.selection?.select(data);\n    this.onEditData.emit({ data: data, allData: this.data });\n  }\n  onSave(data: any) {\n    if (typeof data === 'object') data['editRow'] = false; // made editing row as true //  solve undefined error on string\n    this.selection.deselect(data);\n    this.onSaveData.emit({ data: data, allData: this.data });\n  }\n  // SKS15FEB25 table top buttons emit\n  commonButtonClick(button: any) {\n    this.buttonEmit.emit(button);\n  }\n\n  // SKS15FEB25 This function is used to retrieve data from objects. \n  // In 'element' we will pass object and in 'column' we will pass path as string eg.employee.financeInfo[0].uan to retieve uan value \n  getObjValue(element: any, column: string) {\n    if (!element || !column) {\n      return ''; // Return empty string or null if element or column is invalid\n    }\n    let flds = column?.split('.');\n    let current = element;\n    for (let i = 0; i < flds.length; i++) {\n      let splitFlds = flds[i].split('[');\n      if (splitFlds.length === 1) {\n        current = current[flds[i]] ?? ''; // Use nullish coalescing to handle undefined/null\n      } else {\n        let index = Number(splitFlds[1].split(']')[0]);\n        current = current[splitFlds[0]]?.[index] ?? ''; // Safely access array index\n      }\n    }\n    return current;\n  }\n  //SKS15FEB25 hyperlinl columns only emitted\n  onClickHyperlink(column: any, element: any, isHyperLink: any) {\n    if (isHyperLink) this.hyperLinkEmit.emit({ column: column, element: element });\n  }\n\n  // SKS15FEB25 on add record in table, the 'inlineElement' values will be assigned to the table data \n  addTableRecord(element: any,from?:any) {\n    if (!this.pagination) {\n      var obj: any = {};\n      const keys = Object.keys(element);\n      keys.forEach((elementKey: any) => {\n        obj[elementKey] =  typeof element[elementKey] === 'boolean' ? (element[elementKey] ? true : false) :  (element[elementKey] || '');\n      });\n      // SKS20MAR25 Compute summary columns for the new row\n      if (this.summaryColumns && this.summaryColumns.length > 0) {\n        this.summaryColumns.forEach(summaryCol => {\n          if (summaryCol.operation === 'sum' && summaryCol.operands) {\n            const sum = summaryCol.operands.reduce((acc, operand) => acc + (Number(obj[operand]) || 0), 0);\n            obj[summaryCol.fieldName] = sum;\n          } else if (summaryCol.operation === 'subtract' && summaryCol.operands) {\n            const sum = summaryCol.operands.reduce((acc, operand) => acc - (Number(obj[operand]) || 0), 0);\n            obj[summaryCol.fieldName] = sum;\n          } else if (summaryCol.operation === 'multiply' && summaryCol.operands) {\n            const sum = summaryCol.operands.reduce((acc, operand) => acc * (Number(obj[operand]) || 0), 0);\n            obj[summaryCol.fieldName] = sum;\n          }\n          else if (summaryCol.operation === 'subtract' && summaryCol.operands) {\n            const sum = summaryCol.operands.slice(1).reduce(\n              (acc, operand) => acc - (Number(obj[operand]) || 0),\n              Number(obj[summaryCol.operands[0]]) || 0\n            );\n            obj[summaryCol.fieldName] = sum;\n          }\n          else if (summaryCol.operation === 'multiply' && summaryCol.operands) {\n            const product = summaryCol.operands.reduce(\n              (acc, operand) => acc * (Number(obj[operand]) || 0),\n              1\n            );\n            obj[summaryCol.fieldName] = product;\n          }\n        });\n      }\n      const newData = [...this.data, obj]; // New reference\n      this.data = newData;\n      this.dataSource.data = this.prepareActionVisibility(newData);\n      this.originalData = newData;\n      if (this.stickyColumn === true && this.currentColumns) {\n        this.stickyCondition = this.currentColumns?.length;\n      } else {\n        this.stickyCondition = this.currentColumns?.length + 1;\n      }\n      this.pageSize = 10\n      this.totalCount = this.data.length\n      this.filterTableNos += 1 \n      this.pageIndex = Math.ceil(this.totalCount / this.pageSize);\n      const start = (Number(this.pageIndex) - 1) * Number(this.pageSize);\n      const end = start + Number(this.pageSize);\n      if (!this.isPagination) {\n        this.dataSource.data = this.prepareActionVisibility(this.data)\n      } else {\n        this.dataSource.data = this.prepareActionVisibility(this.data?.slice(start, end));\n      }\n      this.selection?.select(this.data[this.data.length - 1]);\n      if (this.data.length > 0) {\n        this.data[this.data.length - 1].editRow = true;\n      }      \n    } else {\n      const pageIndex = Math.ceil(this.totalRecords || this.totalCount / 10);\n      localStorage.setItem('NxtDataTable', JSON.stringify({ addRecord: true, pageSize: 10, pageIndex: pageIndex, currentSortColumn: this.currentSortColumn, currentSortDirection: this.currentSortDirection }));\n    }\n    this.computeSummaryValues(from);\n    if(from !== 'onChange')this.NxtTableParamsEmit.emit({ pagination: { pageSize: this.pageSize, pageIndex: this.pageIndex },tableSearch: { fields: this.currentColumns.map(f => f.fieldName), value: this.searchBoxValue }, searchFilterData: this.filterDataArray, sort: { column: this.currentSortColumn, direction: this.currentSortDirection ,listView: this.selectedView},currentColumns: this.currentColumns})\n  }\n\n  // SKS15FEB25 Action button conditionally displayed function\n  prepareActionVisibility(rows: any[]) {\n    if(!this.actionButtonArray?.buttonArray || this.actionButtonArray?.buttonArray?.length === 0){\n      return rows\n    } else {\n      if(!this.actionButtonArray?.buttonArray?.some(element => element.condition )){\n        return rows\n      }\n    }\n    return rows.map(row => ({\n      ...row,\n      _actions: this.actionButtonArray?.buttonArray?.reduce((acc, btn) => {\n        acc[btn.name] = btn.condition\n          ? this.evaluateConditionString(row, btn.condition)\n          : true;\n        return acc;\n      }, {} as Record<string, boolean>)\n    }))\n  }\n  evaluateConditionString(row: any, condition: string): boolean {\n    if (!condition) return true;\n    const variableRegex = /\\b[a-zA-Z_]\\w*(?:\\.[a-zA-Z_]\\w*)*\\b/g;\n    // Split condition into quoted & non-quoted parts\n    const parts = condition.split(/('(?:\\\\'|[^'])*')/g);\n    const expr = parts\n      .map(part => {\n        // If it's a quoted string → DO NOT TOUCH\n        if (part.startsWith(\"'\") && part.endsWith(\"'\")) {\n          return part;\n        }\n        // Replace variables only outside strings\n        return part.replace(variableRegex, (match) => {\n          if (['true', 'false', 'null', 'undefined'].includes(match)) {\n            return match;\n          }\n          const value = this.dataService.getValue(row, match);\n          if (typeof value === 'string') {\n            return `'${value.replace(/'/g, \"\\\\'\")}'`;\n          }\n          if (value === undefined || value === null) {\n            return 'undefined';\n          }\n          return String(value);\n        });\n      })\n      .join('');\n    // Security check\n    if (!/^[\\w\\s'\"!=&|().<>-]+$/.test(expr)) {\n      console.warn('Blocked unsafe expression:', expr);\n      return false;\n    }\n    try {\n      // eslint-disable-next-line no-new-func\n      return Function(`\"use strict\"; return (${expr});`)();\n    } catch (e) {\n      console.error('Condition evaluation failed:', expr, e);\n      return false;\n    }\n  }  \n  // SKS15FEB25 config search filter box function\n  onSearch(event: any,from?:any) {\n    this.searchBoxValue = event; // Update the displayed value in the search box\n    if (this.searchConfigs) {\n      this.pageIndex = 1\n      this.pageSize = 10\n    }\n    if(from !== 'onChange')this.NxtTableParamsEmit.emit({ pagination: { pageSize: this.pageSize, pageIndex: this.pageIndex },tableSearch: { fields: this.currentColumns.map(f => f.fieldName), value: this.searchBoxValue }, searchFilterData: this.filterDataArray, sort: { column: this.currentSortColumn, direction: this.currentSortDirection ,listView: this.selectedView},currentColumns: this.currentColumns})\n  }\n\n  // SKS15FEB25 If the value in the search box is empty, call the onSearch function automatically\n  emptySearch(event: any) {\n    if (!event.trim() && (this.prevSearch != event.trim())) {\n      this.onSearch(event)\n    }\n    this.prevSearch = event.trim()\n  }\n\n  // SKS15FEB25 infoSidescreen emit \n  onSideNavInfoClick(data: any, col: any) {\n    this.sideNavEmit.emit({\n      data, col,\n      config: undefined\n    })\n  }\n\n  // SKS15FEB25 for active column select\n  onColumnClick(uniqueIdentifier: string) {\n    this.activeColumn = uniqueIdentifier;\n    if (!this.isEditable) {\n      // Existing sort/filter logic\n      return;\n    }\n\n    if (this.selectedColumn === uniqueIdentifier) {\n      this.selectedColumn = null;\n      this.columnSelected.emit(null);\n    } else {\n      this.selectedColumn = uniqueIdentifier;\n      const columnData = this.dataSource.data.map(row => ({\n        value: row[uniqueIdentifier],\n        id: row.id // or unique identifier\n      }));\n      this.columnSelected.emit({ uniqueIdentifier, data: columnData });\n    }\n  }\n\n  // SKS15FEB25 for close search filter box\n  closefilter(from?:any) {\n    this.pageSize = this.pageSize || 10\n    this.pageIndex = 1\n    this.filterDataArray[this.selectedFilter] = []\n    this.isResized = false\n    if (!this.pagination) {\n      this.filterRetain(this.filterDataArray)\n    }\n    if(from !== 'onChange')this.NxtTableParamsEmit.emit({ pagination: { pageSize: this.pageSize, pageIndex: this.pageIndex },tableSearch: { fields: this.currentColumns.map(f => f.fieldName), value: this.searchBoxValue }, searchFilterData: this.filterDataArray, sort: { column: this.currentSortColumn, direction: this.currentSortDirection ,listView: this.selectedView},currentColumns: this.currentColumns})\n  }\n\n  // SKS15FEB25 search filter box checkbox retain\n  isSelected(event: any) {\n    if (this.filterDataArray[this.selectedFilter] && this.filterDataArray[this.selectedFilter].includes(event)) {\n      return true\n    } else {\n      return false\n    }\n  }\n\n  // SKS15FEB25 search filter box checkbox select\n  checkedData(event: any,from?:any) {\n    let selectedArray = []\n    selectedArray = this.filterDataArray[this.selectedFilter] ? this.filterDataArray[this.selectedFilter] : []\n    if (selectedArray && selectedArray.includes(event)) {\n      selectedArray = selectedArray.filter((item: any) => item !== event);\n    } else {\n      selectedArray.push(event);\n    }\n    this.filterDataArray[this.selectedFilter] = selectedArray\n    this.isResized = selectedArray?.length > 0\n    if (this.pagination) {\n      this.pageIndex = 1\n      this.pageSize = 10\n    } else {\n      this.filterRetain(this.filterDataArray)\n    }\n    if(from !== 'onChange')this.NxtTableParamsEmit.emit({ pagination: { pageSize: this.pageSize, pageIndex: this.pageIndex },tableSearch: { fields: this.currentColumns.map(f => f.fieldName), value: this.searchBoxValue }, searchFilterData: this.filterDataArray, sort: { column: this.currentSortColumn, direction: this.currentSortDirection ,listView: this.selectedView},currentColumns: this.currentColumns})\n  }\n\n  // SKS15FEB25  action column dropdown buttons close\n  private addClickOutsideListener() {\n    if (!this.clickListener) {\n      this.clickListener = this.renderer.listen('document', 'click', (event) => {\n        if (!event.target.closest('.dropdown')) {\n          this.currentOpenIndex = null;\n          this.removeClickListener();\n        }\n      });\n    }\n  }\n\n  //SKS15FEB25 if close the dropdown menu stop the click listener\n  private removeClickListener() {\n    if (this.clickListener) {\n      this.clickListener();\n      this.clickListener = null;\n    }\n  }\n\n  // SKS15FEB25  action column dropdown buttons open / close\n  toggleDropdown(index: number) {\n    this.currentOpenIndex = this.currentOpenIndex === index ? null : index;\n    this.addClickOutsideListener();\n  }\n\n  //SKS15FEB25 action button evnt emit\n  actionButtonClicked(event: any, data: any) {\n    this.actionButtonEmit.emit({ event, data })\n  }\n\n  removeCol(uniqueIdentifier: string) {\n    this.selectedColumn = null;\n    // Emit deselection\n    if (!this.isEditable) {\n      // Existing sort/filter logic\n      return;\n    }\n\n    const columnData = this.dataSource.data.map(row => ({\n      value: row[uniqueIdentifier],\n      id: row.id // or unique identifier\n    }));\n    this.removeColumn.emit({ uniqueIdentifier, data: columnData });\n\n  }\n  emitTableDataValue(updatedTableData: any): void {\n    this.currentTableData = updatedTableData\n    let change: any ={};\n    change['fromQuestionId'] = this.question.id;\n    change['valueObj'] = updatedTableData;\n    change['field'] = this.apiMeta?.defaultField || (Array.isArray(this.apiMeta?.field) ? this.apiMeta?.field?.[0] : this.apiMeta?.field);\n    change['referenceField'] = this.question.referenceField;\n    this.valueChange.emit(change);\n  }\n\n  updateEdit(index: number, value: any, element: any, column: any,type?:any): void { \n    if(type === 'list'){\n      value = (value.valueObj && typeof value.valueObj === 'object' && !Array.isArray(value.valueObj)) ? value.isObject ? value?.valueObj : this.dataService.getValue(value?.valueObj, value?.field) : value?.valueObj;\n    } else{\n      value = value?.valueObj ? value.valueObj : value;\n    }\n    const updatedElement = this.updateValue(element, column, value);\n    const obj: any = {};\n    Object.keys(this.inlineElement).forEach(key => {\n      obj[key] =  typeof this.inlineElement[key] === 'boolean' ? (this.inlineElement[key] ? true : false) :  (this.inlineElement[key] || '');\n    });\n    if(!this.isSameRow(updatedElement, obj)){\n      this.tableEditTrack = true\n    } else {\n      this.tableEditTrack = false\n    }\n    // SKS22JUL25 Invalidate cache for this row and column\n    const rowId = index;\n    const key = `${rowId}-${column ?? 'unknown'}`;\n    this.questionsCache.delete(key);\n    // Recompute summary columns for the updated row\n    if (this.summaryColumns && this.summaryColumns.length > 0) {\n      this.summaryColumns.forEach(summaryCol => {\n        if (summaryCol.operands && summaryCol.operands.length) {\n          if (summaryCol.operation === 'sum') {\n            updatedElement[summaryCol.fieldName] = summaryCol.operands.reduce(\n              (acc, operand) => acc + (Number(updatedElement[operand]) || 0),\n              0\n            );\n          } else if (summaryCol.operation === 'multiply') {\n            updatedElement[summaryCol.fieldName] = summaryCol.operands.reduce(\n              (acc, operand) => acc * (Number(updatedElement[operand]) || 0),  // Start with 1 instead of 0\n              1\n            );\n          } else if (summaryCol.operation === 'subtract') {\n            updatedElement[summaryCol.fieldName] = summaryCol.operands.slice(1).reduce(\n              (acc, operand) => acc - (Number(updatedElement[operand]) || 0),\n              Number(updatedElement[summaryCol.operands[0]]) || 0\n            );\n          }\n        }\n      });\n    }\n    const newData = [...this.dataSource.data]; // Create new array\n    newData[index] = updatedElement;\n    this.dataSource.data = this.prepareActionVisibility(newData); // Assign new reference\n    // SKS28NOV25 Update full data\n    const absoluteIndex =((this.pageIndex -1) * this.pageSize) + index;\n    const fullData = [...this.data];\n    fullData[absoluteIndex] = updatedElement;\n    this.data = fullData; //SKS10AUG25 Sync this.data\n    this.computeSummaryColumns();\n    this.computeSummaryValues('updateEdit');\n    this.cdRef.markForCheck(); // Trigger change detection\n  }\n  // SKS18MAR25 update element\n  updateValue(element: any, column: string, value: any) {\n    let flds = column?.split('.') || [];\n    let obj = element; // Keep reference to the original object\n\n    for (let i = 0; i < flds.length - 1; i++) {\n      let splitFlds = flds[i].split('[');\n      if (splitFlds.length === 1) {\n        obj = obj[flds[i]] || (obj[flds[i]] = {});\n      } else {\n        let index = Number(splitFlds[1].split(']')[0]);\n        obj = obj[splitFlds[0]] || (obj[splitFlds[0]] = []);\n        obj = obj[index] || (obj[index] = {});\n      }\n    }\n\n    // Update the final property\n    let lastKey = flds[flds.length - 1];\n    let splitLastKey = lastKey.split('[');\n    if (splitLastKey.length === 1) {\n      obj[lastKey] = value;\n    } else {\n      let index = Number(splitLastKey[1].split(']')[0]);\n      obj[splitLastKey[0]][index] = value;\n    }\n\n    return element;\n  }\n\n  expenseAttachment(event: any) {\n    this.fileEmit.emit(event)\n  }\n  listViewEmit(event){\n    if(event.action === 'filterGet'){\n      event['data']= this.columns?.filter(column => column.filter === true).map(column => column.fieldName)\n      if(!this.tableFilterData || this.tableFilterData.length === 0){\n        this.NxtTableFilterEmit.emit({...event, id: this.id})\n      }\n    } else{ \n      if (event.action === 'select' || event.action === 'save') {\n        this.selectedView = event.data.filterName;\n        this.currentViewFilter = event.data;\n        this.ngOnChanges({})\n      }\n      this.NxtTableFilterEmit.emit({...event, id: this.id})\n    }\n  }\n  async onImageEdit(ques: any) {\n    this.isImageEdit = true;\n    this.selectedImageElement = ques;\n  }\n  async onImageDelete(ques: any) {\n    try {\n      ques.imageData = '';\n      ques.orgImageData = '';\n      // SKS22JUL25 Initialize logo size if not already set\n      if (!ques.imageSize) {\n        ques.imageSize = { width: 150, height: 150 };\n      }\n      // await this.childEventCapture(ques.imageData, ques);\n    } catch (error) {\n      console.error(\"Error reading file:\", error);\n    }\n  }\n   // SKS25MAR25 image add\n   async fileChangeEvent(ques: any, event: any): Promise<void> {\n    const file = event.target.files[0];\n    if (file) {\n      try {\n        const imageData = await this.readFileAsDataURL(file);\n        ques.imageData = imageData;\n        ques.orgImageData = imageData;\n        // Initialize logo size if not already set\n        if (!ques.imageSize) {\n          ques.imageSize = { width: 150, height: 150 };\n        }\n\n        // await this.childEventCapture(imageData, ques);\n      } catch (error) {\n        console.error(\"Error reading file:\", error);\n      }\n    }\n  }\n\n  private readFileAsDataURL(file: File): Promise<string> {\n    return new Promise((resolve, reject) => {\n      const reader = new FileReader();\n      reader.onload = () => resolve(reader.result as string);\n      reader.onerror = (error) => reject(error);\n      reader.readAsDataURL(file);\n    });\n  }\n\n  getDropDown(event: any) {\n    this.hadleDropDownDependent.emit(event);\n  }\n  trackByRow(index: number, row: any): any {\n    return index; // unique row id\n  }\n  \n  trackByColumn(index: number, column: any): any {\n    return column?.uniqueIdentifier ?? index; // unique column id\n  }\n  \n  trackBySummary(index: number, summary: any): any {\n    return index;\n  }\n  \n  trackByIndex(index: number): number {\n    return index; //SKS10AUG25 for static arrays like skeleton rows\n  }\n  editModeChange(){\n    this.mode ='edit'\n    this.viewEdit = true\n    this.oldTableData =this.question.input\n  }\n  // SKS10AUG25 for single field change\n  saveTable(){\n    let ques = this.question\n    ques['singleFieldChange'] = true\n    let change: any= {};\n    change['isObject'] = this.apiMeta?.isObject\n    change['fromQuestionId'] = this.question?.id;\n    change['valueObj'] = this.currentTableData;\n    change['field'] = this.apiMeta?.defaultField || (Array.isArray(this.apiMeta?.field) ? this.apiMeta?.field?.[0] : this.apiMeta?.field);\n    change['referenceField'] = this.question?.referenceField;\n    this.valueChange.emit(change);\n    this.viewEdit = false\n    this.mode = 'view'; // Switch back to view mode\n  }\n  // SKS10AUG25 discard function if single field is enable\n  discardChanges(){\n    this.dataSource.data =  this.prepareActionVisibility(this.originalData = this.data = this.question.input = this.oldTableData)\n    this.mode = 'view'; // Switch back to view mode\n    this.viewEdit = false\n    this.cdRef.markForCheck();\n  }\n  // SKS15OCT25 group filter emit\n  groupFilterEmit(event, from?:any){\n    if(event.label === 'All'){\n      this.groupFilterColumn = 'All'\n      this.groupFilterRetain({})\n    } else {\n      this.groupFilterColumn = event.name\n      this.groupFilterRetain({[this.groupFilterConfig.column]:event.name})\n    }\n    if(from !== 'onChange')this.NxtTableParamsEmit.emit({ pagination: { pageSize: this.pageSize, pageIndex: this.pageIndex },tableSearch: { fields: this.currentColumns.map(f => f.fieldName), value: this.searchBoxValue }, searchFilterData: this.filterDataArray,groupFilter: {[this.groupFilterConfig.column]:event.name}, sort: { column: this.currentSortColumn, direction: this.currentSortDirection ,listView: this.selectedView},currentColumns: this.currentColumns})\n  }\n  // SKS15OCT25 group filter data filter \n  groupFilterRetain(filterkey: any, from?:any) {\n    if(!this.dataSource['groupFilterData'] || this.dataSource['groupFilterData']?.length === 0){\n      this.dataSource['groupFilterData'] = this.originalData\n    }\n    if (filterkey && Object.keys(filterkey).length == 0) {\n      this.data = this.dataSource['groupFilterData']\n    } else {\n      this.data = [];\n      let isDataChecked = false;\n      for (let key of Object.keys(filterkey)) {\n        if (filterkey[key] && filterkey[key].length > 0) {\n          isDataChecked = true;\n        }\n      }\n      if (!isDataChecked) {\n        this.data = this.dataSource['groupFilterData']\n      } else {\n        for (let key of Object.keys(filterkey)) {\n          if (filterkey[key]) {\n            const data = this.dataSource['groupFilterData'].filter((item: any) => {\n              const value = this.getNestedValue(item, key);\n              return filterkey[key].includes(value);\n            });\n    \n            const data1 = [...this.data, ...data];\n            this.data = this.removeDuplicates(data1);\n          }\n        }\n      }\n    }\n    if(from !== 'pageParams' && from !== 'onChange') this.pageIndex = 1\n    const start = (Number(this.pageIndex) - 1) * Number(this.pageSize);\n    const end = start + Number(this.pageSize);\n    this.filterBoxData = this.data\n    this.filterTableNos = this.filterBoxData?.length\n    this.dataSource.data = this.prepareActionVisibility(this.data?.slice(start, end));\n    this.originalData = this.data\n    this.sortData(this.currentSortColumn ,this.currentSortDirection,undefined,from)\n  }\n  changeAnnounce(event: any){\n    this.changeService.announceChange(event);\n  }\n}\n","<div class=\"table-layout\" [id]=\"tableId\" [ngStyle]=\"{'padding-top': '1px', 'width': tableWidth}\" [attr.dir]=\"direction\" [dir]=\"direction\">\n    <div>\n        <div *ngIf=\"title && !(id && isListViews !== false && isListViews !== 'false' && from != 'formBuilder' && !groupFilter)\" class=\"d-flex justify-content-center table-title align-text-center\">\n            {{title}}\n        </div>\n        <div *ngIf=\"isNosIndicator || searchBar || isButtons\" class=\"flex justify-content-between\" style=\"align-items: center; padding-bottom: 3px;\">\n            <div class=\"flex\">\n                <!-- SKS26APR25 List View Filter -->\n                <app-list-view-filter *ngIf=\"id && isListViews !== false && isListViews !== 'false' && from != 'formBuilder' && !groupFilter\" [listViews]=\"listViews\"\n                    [selectedView]=\"selectedView\" [displayedColumns]='columns' [tableFilterArray]=\"tableFilterArray\" [tableData]=\"tableFilterData\"\n                    (listViewEmit)=\"listViewEmit($event)\" [title]=\"title\">\n                </app-list-view-filter>\n                <!-- SKS15OCT25 group filter -->\n                <div *ngIf=\"groupFilter\">\n                    <nxt-button class=\"data-table-fsbtn\"\n                        [type]=\"'group'\" [selector]=\"true\"\n                        (buttonClickEmit)=\"groupFilterEmit($event)\"\n                        [buttonConfig]=\"groupFilterConfig.buttonConfig\">\n                    </nxt-button>\n                </div>\n                <div *ngIf=\"(!id || isListViews === false || isListViews === 'false' || from === 'formBuilder' || from === 'questionBook') && isNosIndicator\" class=\"noOfRec\"\n                    style=\"display: flex; align-items: flex-end;\">\n                    <p style=\"font-weight: 500; margin-right: 5px; margin-bottom: 0px;\">\n                        {{ 'NOS' | nxtCustomTranslate : 'Nos'}} </p>\n                    <div style=\"color: rgb(43, 87, 249);\">{{totalRecords || totalCount}}</div>\n                </div>\n            </div>\n\n            <div class=\"flex\" style=\"align-items: center;\">\n                <div *ngIf=\"searchBar\" class=\"search\">\n                    <div class=\"flex search-bar\">\n                        <svg width=\"16\" height=\"16\" viewBox=\"0 0 24 22\" fill=\"none\" xmlns=\"http://www.w3.org/2000/svg\">\n                            <path\n                                d=\"M11.6413 19.25C16.6322 19.25 20.6781 15.3511 20.6781 10.5417C20.6781 5.73218 16.6322 1.83333 11.6413 1.83333C6.6504 1.83333 2.60449 5.73218 2.60449 10.5417C2.60449 15.3511 6.6504 19.25 11.6413 19.25Z\"\n                                stroke=\"#787486\" stroke-width=\"1.5\" stroke-linecap=\"round\" stroke-linejoin=\"round\" />\n                            <path d=\"M21.6295 20.1667L19.7271 18.3333\" stroke=\"#787486\" stroke-width=\"1.5\"\n                                stroke-linecap=\"round\" stroke-linejoin=\"round\" />\n                        </svg>\n                        <input type=\"text\" placeholder=\"{{ 'SEARCH' | nxtCustomTranslate : 'Search'  }}\" style=\"font-size: 13px;\"\n                            (keyup)=\"searchConfigs ? emptySearch($event.target.value) : applyFilter($event.target.value)\"\n                            [value]=\"searchBoxValue || ''\" #input>\n                        <svg *ngIf=\"searchConfigs && searchBar\" class=\"configSearch\" (click)=\"onSearch(input.value)\"\n                            width=\"24\" height=\"24\" viewBox=\"0 0 24 24\" fill=\"none\" xmlns=\"http://www.w3.org/2000/svg\">\n                            <path d=\"M14 5H20\" stroke=\"#ffffff\" stroke-width=\"1.5\" stroke-linecap=\"round\"\n                                stroke-linejoin=\"round\" />\n                            <path d=\"M14 8H17\" stroke=\"#ffffff\" stroke-width=\"1.5\" stroke-linecap=\"round\"\n                                stroke-linejoin=\"round\" />\n                            <path d=\"M21 11.5C21 16.75 16.75 21 11.5 21C6.25 21 2 16.75 2 11.5C2 6.25 6.25 2 11.5 2\"\n                                stroke=\"#ffffff\" stroke-width=\"1.5\" stroke-linecap=\"round\" stroke-linejoin=\"round\" />\n                            <path d=\"M22 22L20 20\" stroke=\"#ffffff\" stroke-width=\"1.5\" stroke-linecap=\"round\"\n                                stroke-linejoin=\"round\" />\n                        </svg>\n                    </div>\n                </div> \n                <div class=\"flex\" *ngIf=\"isButtons\" style=\"padding-left: 7px; align-items: center; gap: 7px;\">\n                    <div class=\"flex\" *ngFor=\"let button of buttonArray\">\n                        <nxt-button class=\"data-table-fsbtn\" style=\"align-items: center;\"\n                            (buttonClickEmit)=\"(button.type === 'group' || button.type === 'dropdown') ? commonButtonClick($event) : commonButtonClick(button)\"\n                            [buttonType]=\"button.class\" [btnBgColor]=\"button.btnBgColor\" [btnBorder]=\"button.btnBorder\" [btnBorderColor]=\"button.btnBorderColor\" [btnTextColor]=\"button.btnTextColor\"\n                            [btnHeight]=\"button.btnHeight\" [btnWidth]=\"button.btnWidth\" [btnHoverBgColor]=\"button.btnHoverBgColor\" [btnHoverTextColor]=\"button.btnHoverTextColor\" [btnIconRightSrc]=\"button.btnIconRightSrc\"\n                            [buttonValue]=\"button.labelPath || button.label || button.name | nxtCustomTranslate : button.label || button.name \"\n                            [buttonConfig]=\"button.buttonConfig\" [type]=\"button.type\" [padding]=\"button.padding\"\n                            [btnIconLeftSrc]=\"button.btnIconLeftSrc\" [isImageSvg]=\"button.isImageSvg\">\n                        </nxt-button>\n                    </div>\n                </div>\n                <!--SKS15FEB25 Edit Button -->\n                <div *ngIf=\"question && from === 'questionBook' && mode === 'view' && !onlyView\" (click)=\"editModeChange()\" class=\"eicon-container edit-icon-hide\"\n                    matTooltip=\"{{ 'EDIT_TABLE' | nxtCustomTranslate : 'Edit Table'  }}\"\n                    style=\"padding: 2px; border: 1px solid #dcdcdc; border-radius: 5px; margin-left: 3px; margin-right: 3px;\">\n                    <div class=\"edit-icon\"\n                        style=\"padding: 2px 2px; border-radius: 5px; background-color: #f5f5f5;\">\n                        <i class=\"fusion-icon nav-icon fusion-icon-edit_pencil\" style=\"margin: 0px !important; font-size: 16px !important; color: #787486;\"></i>\n                    </div>\n                </div>\n                <div *ngIf=\"question && from !== 'formBuilder' && mode === 'edit' && viewEdit\" class=\"eicon-container\" (click)=\"discardChanges()\"\n                    matTooltip=\"{{ 'DISCARD' | nxtCustomTranslate : 'Discard'  }}\"\n                    style=\"padding: 2px; border: 1px solid #dcdcdc; border-radius: 5px; margin-left: 3px; margin-right: 3px;\">\n                    <div class=\"edit-icon\"\n                        style=\"padding: 2px 2px; border-radius: 5px; background-color: #f5f5f5;\">\n                        <svg width=\"16\" height=\"16\" viewBox=\"0 0 12 12\" fill=\"none\"\n                            xmlns=\"http://www.w3.org/2000/svg\">\n                            <path\n                            d=\"M7.05555 4.00883L5.94 5.12438L4.82445 4.00883C4.57861 3.76299 4.18191 3.76299 3.93607 4.00883C3.69023 4.25467 3.69023 4.65137 3.93607 4.89721L5.05162 6.01276L3.93607 7.12831C3.69023 7.37415 3.69023 7.77085 3.93607 8.01669C4.18191 8.26253 4.57861 8.26253 4.82445 8.01669L5.94 6.90114L7.05555 8.01669C7.30139 8.26253 7.69809 8.26253 7.94393 8.01669C8.18977 7.77085 8.18977 7.37415 7.94393 7.12831L6.82838 6.01276L7.94393 4.89721C8.18977 4.65137 8.18977 4.25467 7.94393 4.00883C7.69809 3.77285 7.30021 3.77285 7.05555 4.00883ZM5.94 0.0820312C2.70017 0.0820312 0.0808594 2.70134 0.0808594 5.94118C0.0808594 9.18101 2.70017 11.8003 5.94 11.8003C9.17983 11.8003 11.7991 9.18101 11.7991 5.94118C11.7991 2.70134 9.17983 0.0820312 5.94 0.0820312ZM5.94 10.6367C3.35426 10.6367 1.24422 8.52667 1.24422 5.94118C1.24422 3.35553 3.35426 1.24549 5.94 1.24549C8.52558 1.24549 10.6356 3.35553 10.6356 5.94118C10.6356 8.52667 8.52558 10.6367 5.94 10.6367Z\"\n                            fill=\"#B0ADAB\" />\n                        </svg>\n                    </div>\n                </div>\n                <div *ngIf=\"question && from !== 'formBuilder' && mode === 'edit' && viewEdit\" class=\"eicon-container\" (click)=\"saveTable()\"\n                    matTooltip=\"{{ 'SAVE' | nxtCustomTranslate : 'Save'  }}\"\n                    style=\"padding: 2px; border: 1px solid #dcdcdc; border-radius: 5px; margin-left: 3px; margin-right: 3px;\">\n                    <div style=\"padding: 2px 2px; border-radius: 5px; background-color: #f5f5f5;\">\n                        <svg width=\"16\" height=\"16\" viewBox=\"0 0 12 12\" fill=\"none\"\n                            xmlns=\"http://www.w3.org/2000/svg\">\n                            <path\n                            d=\"M5.9502 0.5C8.96006 0.500106 11.4004 2.94031 11.4004 5.9502C11.4003 8.95999 8.95999 11.4003 5.9502 11.4004C2.94031 11.4004 0.500106 8.96006 0.5 5.9502C0.5 2.94024 2.94024 0.5 5.9502 0.5Z\"\n                            stroke=\"#B0ADAB\" />\n                            <path\n                            d=\"M8.88111 3.84583C8.83269 3.7972 8.77513 3.7586 8.71176 3.73227C8.64838 3.70594 8.58043 3.69238 8.5118 3.69238C8.44317 3.69238 8.37521 3.70594 8.31184 3.73227C8.24846 3.7586 8.19091 3.7972 8.14249 3.84583L4.8269 7.16347L3.35253 5.6891C3.30403 5.6406 3.24646 5.60213 3.18309 5.57588C3.11972 5.54964 3.05181 5.53613 2.98322 5.53613C2.91463 5.53613 2.84672 5.54964 2.78335 5.57588C2.71999 5.60213 2.66241 5.6406 2.61391 5.6891C2.56541 5.7376 2.52694 5.79518 2.50069 5.85854C2.47445 5.92191 2.46094 5.98982 2.46094 6.05841C2.46094 6.127 2.47445 6.19491 2.50069 6.25828C2.52694 6.32165 2.56541 6.37922 2.61391 6.42772L4.45677 8.27058C4.50519 8.31922 4.56274 8.35781 4.62612 8.38414C4.6895 8.41047 4.75745 8.42403 4.82608 8.42403C4.89471 8.42403 4.96266 8.41047 5.02604 8.38414C5.08942 8.35781 5.14697 8.31922 5.19539 8.27058L8.88111 4.58445C8.92974 4.53603 8.96834 4.47848 8.99467 4.4151C9.021 4.35173 9.03456 4.28377 9.03456 4.21514C9.03456 4.14651 9.021 4.07856 8.99467 4.01518C8.96834 3.9518 8.92974 3.89425 8.88111 3.84583Z\"\n                            fill=\"#B0ADAB\" />\n                        </svg>\n                    </div>\n                </div>\n            </div>\n        </div>\n\n        <div class=\"table-margin\">\n            <div class=\"table-container\"\n                [ngClass]=\"{ 'resizing': isResizing }\"\n                [ngStyle]=\"{ \n                    maxHeight: isPagination ? (tableHeight || '452px') : 'auto', \n                    minHeight: (dataSource?.data?.length === 0 && !isLoading ) ? ((from !== 'formBuilder' && from !== 'questionBook') ? (searchFilter ? '247px' : '0px')  : '0px' ) : (searchFilter ? '247px' : '100px') \n                }\"\n                #tableContainer (scroll)=\"onScroll(tableContainer)\">\n                <ng-container>\n                    <div class=\"custom-table\">\n                        <!--SKS15FEB25 Table Header -->\n                        <div class=\"table-header\" [ngClass]=\"{ 'shadow': isScrolled }\">\n                            <div class=\"table-row\">\n                                <!--SKS15FEB25 Checkbox Column -->\n                                <div *ngIf=\"withCheckBox && mode === 'edit'\" class=\"table-cell sticky-column nxt-head-color\" [style.width]=\"'50px'\">\n                                    <div class=\"right nxt-resize-handle\"></div>\n                                    <input type=\"checkbox\" (click)=\"$event.stopPropagation()\" (change)=\"masterToggle()\"\n                                           [checked]=\"selection?.hasValue()\"\n                                           [indeterminate]=\"selection?.hasValue() && !isAllSelected()\"\n                                           class=\"custom-checkbox\">\n                                    <div class=\"nxt-resize-handle\"></div>\n                                </div>\n                                <!-- SKS17DEC25 Serial Number Column Header -->\n                                <div *ngIf=\"serialNumberColumn\" class=\"table-cell sticky-column nxt-head-color\" [style.width]=\"'60px'\" style=\"text-align: center;\">\n                                    <div *ngIf=\"!withCheckBox && mode !== 'edit'\" class=\"nxt-resize-handle\"></div>\n                                    <div class=\"column-header\">\n                                        <div class=\"ellipsis\">No</div>\n                                    </div>\n                                    <!-- SKS17DEC25 resize  -->\n                                    <div class=\"nxt-resize-handle\"></div>\n                                </div>\n                                <!--SKS15FEB25 Data Columns -->\n                                <ng-container *ngFor=\"let column of currentColumns; let i = index; trackBy: trackByColumn\">\n                                    <div *ngIf=\"column.summaryRow !== true && column.isHide !== true\"\n                                        class=\"table-cell nxtTableHeader nxt-head-color\" [style.width]=\"column.width ?  column.width + 'px' : (column.width || 'auto')\"\n                                        [class.sticky-column]=\"i === (stickyCondition - 1)\"\n                                        [class.active-column]=\"activeColumn === column.uniqueIdentifier\"\n                                        [class.selected-column]=\"mode === 'edit' && isEditable && selectedColumn === column.uniqueIdentifier\"\n                                        (click)=\"$event.stopPropagation(); onColumnClick(column.uniqueIdentifier); column.sort ? sortData(column.fieldName) : ''\"\n                                        (mouseenter)=\"hoveredColumn = column.fieldName\" (mouseleave)=\"hoveredColumn = null\"\n                                        [style.backgroundColor]=\"column?.style?.fillColor || '#ffffff'\"\n                                        [style.color]=\"column?.style?.color\"\n                                        [attr.data-column-id]=\"column.uniqueIdentifier\">\n                                        <div class=\"columnDiv\">\n                                            <div class=\"column-header\">\n                                                <!-- Add close button for selected column -->\n                                                <div *ngIf=\"mode === 'edit' && isEditable && selectedColumn === column.uniqueIdentifier && !isPreview\"\n                                                    class=\"close-column-btn\"\n                                                    (click)=\"$event.stopPropagation(); removeCol(column.uniqueIdentifier)\">\n                                                    ✕\n                                                </div>\n                                                <div class=\"ellipsis\" style=\"flex: 1;\" [title]=\"column.label\">\n                                                    @if(column.labelPath){\n                                                        {{ column.labelPath | nxtCustomTranslate : column.label }}\n                                                    }\n                                                    @else if(from !== 'formBuilder' || from !== 'questionBook') {\n                                                        {{ (column.uniqueIdentifier+'.label') | nxtCustomTranslate : column.label }}\n                                                    } \n                                                    @else if(column.uniqueIdentifier) {\n                                                        @if( ((column.uniqueIdentifier+'.label') | nxtCustomTranslate : column.label) !== column.uniqueIdentifier+'.label'){\n                                                            {{ (column.uniqueIdentifier+'.label') | nxtCustomTranslate : column.label }}\n                                                        }\n                                                    }\n                                                    @else {\n                                                        {{ column.label }}\n                                                    }\n                                                </div>\n                                                <div>\n                                                    <svg *ngIf=\"column.filter\"\n                                                        (click)=\"$event.stopPropagation(); filter(column.fieldName, $event)\"\n                                                        style=\"padding-right: 2px;\" width=\"12\" height=\"11\"\n                                                        viewBox=\"0 0 12 11\" fill=\"none\" xmlns=\"http://www.w3.org/2000/svg\">\n                                                        <path\n                                                            d=\"M10.75 1.25H0.75L4.75 5.71722V8.80556L6.75 9.75V5.71722L10.75 1.25Z\"\n                                                            stroke=\"#242533\" stroke-width=\"1.2\" stroke-linecap=\"round\"\n                                                            stroke-linejoin=\"round\" />\n                                                        <!--SKS15FEB25 Red dot for active filter -->\n                                                        <circle\n                                                            *ngIf=\"filterDataArray && filterDataArray[column.fieldName]?.length > 0\"\n                                                            cx=\"9\" cy=\"2\" r=\"2.5\" fill=\"red\"></circle>\n                                                    </svg>\n                                                    <div *ngIf=\"column.sort\"\n                                                        class=\"sort-indicators\">\n                                                        <span *ngIf=\"currentSortColumn === column.fieldName\" class=\"sort-direction\">\n                                                            {{ currentSortDirection === 'asc' ? '↑' : currentSortDirection\n                                                            === 'desc' ? '↓' : '' }}\n                                                        </span>\n                                                        <span\n                                                            *ngIf=\"hoveredColumn === column.fieldName && currentSortColumn !== column.fieldName\"\n                                                            class=\"sort-direction\">\n                                                            ↑\n                                                        </span>\n                                                    </div>\n                                                    <div *ngIf=\"searchFilter && column.fieldName === selectedFilter\"\n                                                        class=\"search-component position-absolute\" [class.align-right]=\"alignRight\"\n                                                        (click)=\"$event.stopPropagation();\">\n                                                        <div class=\"card\">\n                                                            <div class=\"content\">\n                                                                <div class=\"flex\" style=\"align-items: center;\">\n                                                                    <div class=\"fsearch\" [class.resized]=\"isResized\">\n                                                                        <div class=\"fsearch-bar\">\n                                                                            <svg class=\"searchSvg\" width=\"18\" height=\"20\"\n                                                                                viewBox=\"0 0 24 22\" fill=\"none\"\n                                                                                xmlns=\"http://www.w3.org/2000/svg\">\n                                                                                <path\n                                                                                    d=\"M11.6413 19.25C16.6322 19.25 20.6781 15.3511 20.6781 10.5417C20.6781 5.73218 16.6322 1.83333 11.6413 1.83333C6.6504 1.83333 2.60449 5.73218 2.60449 10.5417C2.60449 15.3511 6.6504 19.25 11.6413 19.25Z\"\n                                                                                    stroke=\"#787486\" stroke-width=\"1.5\"\n                                                                                    stroke-linecap=\"round\"\n                                                                                    stroke-linejoin=\"round\" />\n                                                                                <path d=\"M21.6295 20.1667L19.7271 18.3333\"\n                                                                                    stroke=\"#787486\" stroke-width=\"1.5\"\n                                                                                    stroke-linecap=\"round\"\n                                                                                    stroke-linejoin=\"round\" />\n                                                                            </svg>\n                                                                            <input class=\"width-100\" type=\"text\"\n                                                                                placeholder=\"{{ 'SEARCH' | nxtCustomTranslate : 'Search'  }}\"\n                                                                                [(ngModel)]=\"searchText\"\n                                                                                class=\"searchinput\">\n                                                                        </div>\n                                                                    </div>\n                                                                    <div *ngIf=\"isResized\" class=\"close-icon\">\n                                                                        <svg (click)=\"closefilter()\" width=\"16\" height=\"16\" viewBox=\"0 0 16 16\" fill=\"none\" xmlns=\"http://www.w3.org/2000/svg\"><path d=\"m6.113 9.887 3.773-3.773m0 3.773L6.113 6.113M6 14.667h4c3.333 0 4.667-1.333 4.667-4.667V6c0-3.333-1.333-4.667-4.667-4.667H6C2.667 1.333 1.333 2.667 1.333 6v4c0 3.333 1.333 4.667 4.667 4.667\" stroke=\"currentColor\" stroke-linecap=\"round\" stroke-linejoin=\"round\"/></svg>\n                                                                    </div>\n                                                                </div>\n                                                                <div class=\"filter-content\" [style]=\"'overflow-y: auto'\">\n                                                                    <div *ngFor=\"let data of filterArray | searchFilter : searchText\">\n                                                                        <div class=\"mt-3 mb-3 checkboxdiv\"\n                                                                            style=\"gap: 5px;\">\n                                                                            <input type=\"checkbox\"\n                                                                                [checked]=\"isSelected(data)\" [value]=\"data\"\n                                                                                [id]=\"data\" (change)=\"checkedData(data)\">\n                                                                            <div class=\"ms-2 label-data\">{{data || 'Blank'}}</div>\n                                                                        </div>\n                                                                    </div>\n                                                                </div>\n                                                            </div>\n                                                        </div>\n                                                    </div>\n                                                </div>\n                                            </div>\n                                        </div>\n                                        <!-- Enhanced resize handle -->\n                                        <div class=\"nxt-resize-handle\" \n                                            [attr.resize-data-column-id]=\"column.uniqueIdentifier\"\n                                            (mousedown)=\"onResizeStart($event)\"\n                                            title=\"Drag to resize column\">\n                                        </div>\n                                    </div>\n                                </ng-container>\n\n                                <!--SKS15FEB25 Action Column -->\n                                <div *ngIf=\"(actionButton || isDeleteRow || isEditRow) && mode === 'edit' && !onlyView\"\n                                    class=\"table-cell nxt-head-color actionCol sticky-column\"\n                                    [style.width]=\"'150px'\"\n                                    [style.backgroundColor]=\"currentColumns?.[0]?.style?.fillColor || '#ffffff'\"\n                                    [style.color]=\"currentColumns?.[0]?.style?.color\"\n                                    style=\"padding: 12px !important;\">\n                                    <div style=\"display: flex; align-items: center; justify-content: center; font-size: 13px; font-weight: 600;\">\n                                        {{ actionColumHeader | nxtCustomTranslate : 'Action'}}\n                                    </div>\n                                    <div class=\"nxt-resize-handle\"></div>\n                                </div>\n                            </div>\n                        </div>\n\n                        <!--SKS15FEB25 Table Body -->\n                        <div class=\"table-body\" *ngIf=\"!isLoading\">\n                            <div *ngFor=\"let element of dataSource.data; let i = index; trackBy: trackByRow\" class=\"table-row\"\n                                (click)=\"tableClick(element)\">\n                                <!--SKS15FEB25 Checkbox Cell -->\n                                <div *ngIf=\"withCheckBox && mode === 'edit'\" class=\"table-col-cell sticky-column body-color\">\n                                    <input type=\"checkbox\" class=\"custom-checkbox\" (click)=\"$event.stopPropagation()\"\n                                        (change)=\"separateRowSelect(selection?.toggle(element), element)\"\n                                        [checked]=\"selection?.isSelected(element)\"\n                                        [disabled]=\"(element.isPayProcessed === true)\">\n                                </div>\n                                <!-- SKS17DEC25 Serial Number Cell -->\n                                <div *ngIf=\"serialNumberColumn\" class=\"table-col-cell sticky-column body-color view-mode-text\" style=\"text-align: center; font-weight: 500;\">\n                                    {{ ((pageIndex - 1) * pageSize) + i + 1 }}\n                                </div>\n                                <!--SKS15FEB25 Data Cells -->\n                                <ng-container *ngFor=\"let column of currentColumns; let last = last; let c = index; trackBy: trackByColumn\">\n                                    <div *ngIf=\"column.summaryRow !== true && column.isHide !== true\"\n                                        class=\"table-col-cell body-color ellipsis\"\n                                        [class.selected-cell]=\"mode === 'edit' && isEditable && selectedColumn === column.uniqueIdentifier\"\n                                        [style.width]=\"(column.width ? column.width + 'px' :(column.width || 'auto'))\"\n                                        [style.overflow]=\"element?.editRow ? 'unset' : ''\"\n                                        [attr.data-column-id]=\"column.uniqueIdentifier\">\n                                        <ng-container *ngIf=\"element?.editRow && mode === 'edit'; else viewMode\">\n                                            <!-- edit mode content -->\n                                            <div [ngSwitch]=\"column.type\">\n                                                <!-- SKS22JUL25 calendar  -->\n                                                <div *ngSwitchCase=\"'calendar'\">\n                                                    <!-- <app-custom-calendar [question]=\"column | questionByRow:element:i\" (eventSelected)=\"getCalendarEvent($event)\"\n                                                        (dateSelected)=\"getCurrentCalendar($event)\" (openModal)=\"openCalendarModal($event)\"\n                                                        (closeModal)=\"closeCalendarModal($event)\"></app-custom-calendar>\n                                                    <app-custom-model *ngIf=\"isCalendarModalOpen\" [modalTitle]=\"calendarModalTitle\"\n                                                        [isModalOpen]=\"isCalendarModalOpen\" [modalSize]=\"calendarModalSize\"\n                                                        [saveButtonValue]=\"calendarSaveButtonValue\" [modalFooter]=\"modalCalendarModalFooter\"\n                                                        (saveButtonEmit)=\"onCalendarModalSave()\" (cancelButtonEmit)=\"closeCalendarModal($event)\">\n                                                        <lib-questionbook [qbItem]=\"qbRefrenceBook\" [questions]=\"referenceQuestions\"\n                                                            (handleQuestion)=\"handleQuestionEvent($event)\"></lib-questionbook>\n                                                    </app-custom-model> -->\n                                                </div>\n                                                <!-- SKS22JUL25 Image -->\n                                                <div *ngSwitchCase=\"'image'\" (mouseenter)=\"isImageHover = true;\"\n                                                    (mouseleave)=\"isImageHover = false;\">\n                                                    <!-- <div *ngIf=\"isImageHover\" style=\"display: flex; justify-content: end;\">\n                                                        <i *ngIf=\"!column.readOnly\" (click)=\"onImageEdit(column.question)\" class=\"fusion-icon nav-icon fusion-icon-edit_pencil\" style=\"margin: 0px !important; font-size: 16px !important; color: #787486;\"></i>\n                                                        <svg *ngIf=\"!column.readOnly\" (click)=\"onImageDelete(column.question)\" width=\"16\" height=\"16\"\n                                                            viewBox=\"0 0 16 16\" fill=\"none\" xmlns=\"http://www.w3.org/2000/svg\">\n                                                            <path\n                                                                d=\"M14 3.98726C11.78 3.76726 9.54667 3.65393 7.32 3.65393C6 3.65393 4.68 3.7206 3.36 3.85393L2 3.98726\"\n                                                                stroke=\"#FF2C10\" stroke-width=\"1.5\" stroke-linecap=\"round\" stroke-linejoin=\"round\" />\n                                                            <path\n                                                                d=\"M5.6665 3.31362L5.81317 2.44028C5.91984 1.80695 5.99984 1.33362 7.1265 1.33362H8.87317C9.99984 1.33362 10.0865 1.83362 10.1865 2.44695L10.3332 3.31362\"\n                                                                stroke=\"#FF2C10\" stroke-width=\"1.5\" stroke-linecap=\"round\" stroke-linejoin=\"round\" />\n                                                            <path\n                                                                d=\"M12.5667 6.09375L12.1334 12.8071C12.06 13.8537 12 14.6671 10.14 14.6671H5.86002C4.00002 14.6671 3.94002 13.8537 3.86668 12.8071L3.43335 6.09375\"\n                                                                stroke=\"#FF2C10\" stroke-width=\"1.5\" stroke-linecap=\"round\" stroke-linejoin=\"round\" />\n                                                            <path d=\"M6.88647 11.0004H9.10647\" stroke=\"#FF2C10\" stroke-width=\"1.5\"\n                                                                stroke-linecap=\"round\" stroke-linejoin=\"round\" />\n                                                            <path d=\"M6.3335 8.33325H9.66683\" stroke=\"#FF2C10\" stroke-width=\"1.5\" stroke-linecap=\"round\"\n                                                                stroke-linejoin=\"round\" />\n                                                        </svg>\n                                                    </div> -->\n                                                    <img *ngIf=\"column.readOnly\" [src]=\"column.question?.imageData\" />\n                                                    <!-- <div *ngIf=\"!column.readOnly\" class=\"logo-container\">\n                                                        Logo preview area\n                                                        <div class=\"logo-preview\" *ngIf=\"column.question?.input\">\n                                                            <img [src]=\"column.question?.imageData\" />\n                                                        </div>\n\n                                                        Upload button\n                                                        <div *ngIf=\"!column.question?.imageData\" class=\"logo-upload-placeholder\">\n                                                            <label for=\"logo-upload-{{i}}\" class=\"logo-upload-label\">\n                                                                <img src=\"../assets/icons/Image.svg\" alt=\"Upload\" />\n                                                                <span>Upload Image</span>\n                                                            </label>\n                                                            <input type=\"file\" id=\"logo-upload-{{i}}\" accept=\"image/*\"\n                                                                (change)=\"fileChangeEvent(column.question, $event)\" style=\"display: none;\" />\n                                                        </div>\n                                                    </div> -->\n                                                </div>\n                                                <!-- SKS22JUL25 icon-selector -->\n                                                <nxt-icon-selector *ngSwitchCase=\"'icon'\"  [allIcons]=\"allIcons\" [required]=\"column.question?.isOptional\" [mode]=\"mode\" [question]=\"column | questionByRow:element:i\" [labelFont]=\"column.question?.font\"\n                                                    [label]=\"column.question?.questionText ? ((column?.question?.id+'.questionText') | nxtCustomTranslate : column?.question?.questionText) : ''\"\n                                                    [labelColor]=\"column.question?.color\"\n                                                    [labelSize]=\"column.question?.fontSize\" [labelWeight]=\"column.question?.fontWeight\" [showLabel]=\"column.question?.style?.showLabel\" (iconSelected)=\"updateEdit(i,$event,element,column.fieldName)\">\n                                                </nxt-icon-selector>\n                                                <!-- SKS22JUL25 line -->\n                                                <hr *ngSwitchCase=\"'line'\" class=\"custom-line\" style=\"display: inline-flex\" />\n                                                <!-- SKS22JUL25 data table -->\n                                                <nxt-datatable *ngSwitchCase=\"'table'\" isEditRow isDeleteRow actionButton isButtons [question]=\"column | questionByRow:element:i\" from=\"formBuilder\"\n                                                    (valueChange)=\"updateEdit(i,$event.data,element,column.fieldName)\" [apiMeta]=\"column.question?.subText\"\n                                                    [mode]=\"(from === 'formBuilder' || from === 'questionBook') ? element?.editRow && !column.readOnly ? 'edit' : 'view' : element?.editRow && (isEditRow || addInlineRecord) ? 'edit' : 'view'\"\n                                                    [tableConfig]=\"column.question?.tableConfig\" tableId=\"\" direction=\"ltr\" tableWidth=\"auto\">\n                                                </nxt-datatable>\n                                                <!-- SKS22JUL25 list -->\n                                                <nxt-search-box  *ngSwitchCase=\"'list'\" [question]=\"column | questionByRow:element:i\" [readOnly]=\"column.readOnly\" [apiMeta]=\"column.question?.subText\" [rowData]=\"element\"\n                                                    [id]=\"column.question?.id\" [placeHolderText]=\"column.question?.question || ''\"  [value]=\"(element | getValue: column.fieldName : undefined : undefined : 'table') || ''\"\n                                                    [mode]=\"(from === 'formBuilder' || from === 'questionBook') ? element?.editRow && !column.readOnly ? 'edit' : 'view': element?.editRow && (isEditRow || addInlineRecord) ? 'edit' : 'view'\" [from]=\"'nxtTable'\"\n                                                    (searchValueChange)=\"updateEdit(i,$event.value,element,column.fieldName,column.type); changeAnnounce($event.value)\">\n                                                </nxt-search-box>\n                                                <!-- SKS22JUL25 Dropdown -->\n                                                <nxt-dropdown *ngSwitchCase=\"'dropdown'\" \n                                                    [options]=\"column?.question?.options?.length ? column.question.options : (element | getValue : column?.question?.subText?.variable : undefined : undefined : 'table')\" \n                                                    [apiMeta]=\"column.question?.subText\"\n                                                    [id]=\"column.question?.id\" \n                                                    [selectedValue]=\"element | getValue: column.fieldName : undefined : undefined : 'table'\"\n                                                    placeholder=\"\" \n                                                    [padding]=\"column.question?.padding\"\n                                                    [readOnly]=\"column.readOnly\" \n                                                    [question]=\"column | questionByRow:element:i\"\n                                                    [labelFont]=\"column?.question?.font\"\n                                                    [label]=\"column?.question?.questionText\"\n                                                    [labelColor]=\"column?.question?.color\"\n                                                    [inputTextColor]=\"column?.question?.color\"\n                                                    [labelSize]=\"column?.question?.fontSize\"\n                                                    [inputValueSize]=\"column?.question?.fontSize\"\n                                                    [labelWeight]=\"column?.question?.fontWeight\"\n                                                    [inputWeight]=\"column?.question?.fontWeight\"\n                                                    [showLabel]=\"column?.question?.style?.showLabel ?? true\"\n                                                    [inputBgColor]=\"column?.question?.inputBgColor\"\n                                                    [inputIconLeftSrc]=\"column?.question?.iconLeftSrc\"\n                                                    [mode]=\"(from === 'formBuilder' || from === 'questionBook') ? element?.editRow && !column.readOnly ? 'edit' : 'view' : element?.editRow && (isEditRow || addInlineRecord) ? 'edit' : 'view'\" \n                                                    [from]=\"'nxtTable'\"\n                                                    (valueChange)=\"updateEdit(i,$event.value.valueObj,element,column.fieldName)\">\n                                                </nxt-dropdown>\n                                                <!-- SKS29APR26 Multi Select -->\n                                                <nxt-multi-select *ngSwitchCase=\"'multiselect'\"\n                                                    [options]=\"column?.question?.options?.length ? column.question.options : (element | getValue : column?.question?.subText?.variable : undefined : undefined : 'table')\"\n                                                    [apiMeta]=\"column.question?.subText\"\n                                                    [id]=\"column.question?.id\"\n                                                    [selectedValue]=\"element | getValue: column.fieldName : undefined : undefined : 'table'\"\n                                                    placeholder=\"\"\n                                                    [padding]=\"column.question?.padding\"\n                                                    [readOnly]=\"column.readOnly\"\n                                                    [question]=\"column | questionByRow:element:i\"\n                                                    [labelFont]=\"column?.question?.font\"\n                                                    [label]=\"column?.question?.questionText\"\n                                                    [labelColor]=\"column?.question?.color\"\n                                                    [inputTextColor]=\"column?.question?.color\"\n                                                    [labelSize]=\"column?.question?.fontSize\"\n                                                    [inputValueSize]=\"column?.question?.fontSize\"\n                                                    [labelWeight]=\"column?.question?.fontWeight\"\n                                                    [inputWeight]=\"column?.question?.fontWeight\"\n                                                    [showLabel]=\"column?.question?.style?.showLabel ?? true\"\n                                                    [inputBgColor]=\"column?.question?.inputBgColor\"\n                                                    [inputIconLeftSrc]=\"column?.question?.iconLeftSrc\"\n                                                    [mode]=\"(from === 'formBuilder' || from === 'questionBook') ? element?.editRow && !column.readOnly ? 'edit' : 'view' : element?.editRow && (isEditRow || addInlineRecord) ? 'edit' : 'view'\"\n                                                    [from]=\"'nxtTable'\"\n                                                    (valueChange)=\"updateEdit(i,$event.value.valueObj,element,column.fieldName)\">\n                                                </nxt-multi-select>\n                                                <!-- SKS22JUL25 custom-radio component -->\n                                                <nxt-radio *ngSwitchCase=\"'radio'\" [options]=\"column.question?.options\" [question]=\"column | questionByRow:element:i\" [apiMeta]=\"column.question?.subText\" [id]=\"column.question?.id\"\n                                                    [selectedValue]=\"element | getValue: column.fieldName : undefined : undefined : 'table'\" [errorMessage]=\"column.question?.errorMessage\"\n                                                    [referenceField]=\"column.question?.referenceField\" [readOnly]=\"column.readOnly\"\n                                                    [mode]=\"(from === 'formBuilder' || from === 'questionBook') ? element?.editRow && !column.readOnly ? 'edit' : 'view' : element?.editRow && (isEditRow || addInlineRecord) ? 'edit' : 'view'\"\n                                                    (valueChange)=\"updateEdit(i,$event.value.valueObj,element,column.fieldName)\">\n                                                </nxt-radio>\n                                                <!-- SKS22JUL25 Attachment / Files -->\n                                                <nxt-file-upload *ngSwitchCase=\"'file'\" [config]=\"column | questionByRow:element:i\"\n                                                    [readOnly]=\"column?.readOnly\"\n                                                    [mode]=\"(from === 'formBuilder' || from === 'questionBook') ? element?.editRow && !column.readOnly ? 'edit' : 'view' : element?.editRow && (isEditRow || addInlineRecord) ? 'edit' : 'view'\" [from]=\"'nxtTable'\"\n                                                    [allFiles]=\"column.question?.input\" (selectedFileData)=\"updateEdit(i,$event.value.valueObj,element,column.fieldName)\"\n                                                    >\n                                                </nxt-file-upload>\n                                                <!-- SKS22JUL25 Button -->\n                                                <nxt-button *ngSwitchCase=\"'button'\"\n                                                    [mode]=\"(from === 'formBuilder' || from === 'questionBook') ? element?.editRow && !column.readOnly ? 'edit' : 'view' : element?.editRow && (isEditRow || addInlineRecord) ? 'edit' : 'view'\"\n                                                    [btnHeight]=\"'50px'\" [btnWidth]=\"'150px'\" [buttonValue]=\"column.question?.question\"\n                                                    (buttonClickEmit)=\"updateEdit(i,$event,element,column.fieldName)\"\n                                                    >\n                                                </nxt-button>\n                                                <!-- SKS22JUL25 book type -->\n                                                <div *ngSwitchCase=\"'book'\">\n                                                <!-- <lib-questionbook *ngIf=\"column.type === 'book'\" [qbItem]=\"column.question?.qbItem\"\n                                                    [questions]=\"readQuestions(column.question?.qbReference, column.question?.qbReferenceQuestions)\"\n                                                    (handleDropDown)=\"getDropDown($event)\">\n                                                </lib-questionbook> -->\n                                                </div>\n                                                <!-- SKS10AUG25 object type element -->\n                                                <div *ngSwitchCase=\"'object'\">\n                                                    <svg class=\"ms-2\" (click)=\"onSideNavInfoClick(element, column)\"\n                                                        width=\"12\" height=\"12\" viewBox=\"0 0 12 12\" fill=\"none\"\n                                                        xmlns=\"http://www.w3.org/2000/svg\">\n                                                        <path\n                                                            d=\"M6.00033 11.8334C2.77866 11.8334 0.166992 9.22171 0.166992 6.00008C0.166992 2.77842 2.77866 0.166748 6.00033 0.166748C9.22196 0.166748 11.8337 2.77842 11.8337 6.00008C11.8337 9.22171 9.22196 11.8334 6.00033 11.8334ZM5.41699 5.41675V8.91675H6.58366V5.41675H5.41699ZM5.41699 3.08341V4.25008H6.58366V3.08341H5.41699Z\"\n                                                            fill=\"#434555\" fill-opacity=\"0.5\" />\n                                                    </svg>\n                                                </div>\n                                                <!-- SKS22JUL25 Text, Email, label, number, Boolean, rich text editor, DateTime, Date, Time-->\n                                                <nxt-input *ngSwitchDefault \n                                                    [type]=\"column.type === 'boolean' ? 'checkbox' : column.type === 'richtextarea' ? 'richtext' : column.type === undefined ? 'text' : column.type \"\n                                                    [mode]=\"(from === 'formBuilder' || from === 'questionBook') ? element?.editRow && !column.readOnly ? 'edit' : 'view' : element?.editRow && (isEditRow || addInlineRecord) ? 'edit' : 'view'\" [from]=\"'nxtTable'\"\n                                                    [value]=\"element | getValue: column.fieldName : undefined : undefined : 'table'\"\n                                                    [question]=\"column | questionByRow:element:i\"\n                                                    [labelFont]=\"column.question?.font\"\n                                                    [label]=\"column.question?.questionText ? ((column.question?.id+'.questionText') | nxtCustomTranslate : column.question?.questionText): ''\"\n                                                    [labelColor]=\"column.question?.color\"\n                                                    [labelSize]=\"column.question?.fontSize\"\n                                                    [inputValueSize]=\"column.question?.fontSize\"\n                                                    [labelWeight]=\"column.question?.fontWeight\"\n                                                    [inputWeight]=\"column.question?.fontWeight\"\n                                                    [showLabel]=\"column.question?.style?.showLabel\"\n                                                    inputBorder=\"none\" svgHeight=\"20px\" svgWidth=\"20px\"\n                                                    [placeholder]=\"column.question?.question\"\n                                                    [readOnly]=\"column?.readOnly\" [textAlign]=\"column.type === 'currency' ? 'end' : ''\"\n                                                    [required]=\"column.question?.isOptional\" inputBgColor=\"#ffffff\"\n                                                    [inputId]=\"column.question?.trackingId\"\n                                                    [errorMessages]=\"{ required: 'This field is required' }\"\n                                                    [inputIconLeftSrc]=\"column.question?.iconLeftSrc\" \n                                                    [minDate]=\"column.question?.minDate\"\n                                                    [rows]=\"3\" [currency]=\"currencyOption?.code\"\n                                                    (inputValue)=\"updateEdit(i,$event.value.valueObj,element,column.fieldName)\"\n                                                    >\n                                                </nxt-input>\n                                            </div>\n                                        </ng-container>\n                                        \n                                        <ng-template #viewMode>\n                                            <!-- SKS10AUG25 view mode content -->\n                                            <ng-container [ngSwitch]=\"column.type\">\n                                                <ng-container *ngSwitchCase=\"'file'\">\n                                                    @defer (on viewport) {\n                                                        <nxt-file-upload [config]=\"column | questionByRow:element:i\"\n                                                            [readOnly]=\"column?.readOnly\"\n                                                            [mode]=\"(from === 'formBuilder' || from === 'questionBook') ? element?.editRow && !column.readOnly ? 'edit' : 'view' : element?.editRow && (isEditRow || addInlineRecord) ? 'edit' : 'view'\" [from]=\"'nxtTable'\"\n                                                            [allFiles]=\"(column | questionByRow:element:i)?.input\" (selectedFileData)=\"updateEdit(i,$event.value.valueObj,element,column.fieldName)\"\n                                                            >\n                                                        </nxt-file-upload>\n                                                    } @placeholder {\n                                                        <span class=\"skeleton-cell file-cell\"></span>\n                                                    }\n                                                </ng-container>\n                                                <ng-container *ngSwitchCase=\"'object'\">\n                                                    <svg class=\"ms-2\" style=\"cursor: pointer;\" (click)=\"onSideNavInfoClick(element, column)\"\n                                                        width=\"12\" height=\"12\" viewBox=\"0 0 12 12\" fill=\"none\"\n                                                        xmlns=\"http://www.w3.org/2000/svg\">\n                                                        <path\n                                                            d=\"M6.00033 11.8334C2.77866 11.8334 0.166992 9.22171 0.166992 6.00008C0.166992 2.77842 2.77866 0.166748 6.00033 0.166748C9.22196 0.166748 11.8337 2.77842 11.8337 6.00008C11.8337 9.22171 9.22196 11.8334 6.00033 11.8334ZM5.41699 5.41675V8.91675H6.58366V5.41675H5.41699ZM5.41699 3.08341V4.25008H6.58366V3.08341H5.41699Z\"\n                                                            fill=\"#434555\" fill-opacity=\"0.5\" />\n                                                    </svg>\n                                                </ng-container>\n                                                <ng-container *ngSwitchCase=\"'boolean'\">\n                                                    <div class=\"ellipsis view-mode-text\">\n                                                        <!-- SKS7MAR26 Hyperlink Mode -->\n                                                        <a *ngIf=\"column.hyperLink\"\n                                                            class=\"hyperlink-input\"\n                                                            (click)=\"onClickHyperlink(column.fieldName, element, column.hyperLink)\">\n                                                            {{ (element | getValue: column.fieldName) === true || \n                                                            (element | getValue: column.fieldName) === 'true' ? 'True' : 'False' }}\n                                                        </a>\n                                                        <!-- SKS7MAR26 Normal Text Mode -->\n                                                        <span *ngIf=\"!column.hyperLink\">\n                                                            {{ (element | getValue: column.fieldName) === true || \n                                                            (element | getValue: column.fieldName) === 'true' ? 'True' : 'False' }}\n                                                        </span>\n                                                    </div>                                                                                             \n                                                </ng-container>\n                                                <ng-container *ngSwitchCase=\"'list'\">\n                                                    <div class=\"ellipsis view-mode-text\">\n                                                        <a \n                                                          [ngClass]=\"{'hyperlink-input': column.hyperLink}\"  [attr.href]=\"column.hyperLink ? column.hyperlinkurl + '/' + (element | getValue: column.fieldName) : null\"\n                                                          (click)=\"column.hyperLink && $event.preventDefault(); column.hyperLink && onClickHyperlink(column.fieldName, element, column.hyperLink)\"\n                                                          [innerHTML]=\"element | getValue: column.fieldName: 'list': column : undefined : 'view'\">\n                                                        </a>\n                                                    </div>\n                                                </ng-container>\n                                                <ng-container *ngSwitchCase=\"'date'\">\n                                                    <div class=\"ellipsis view-mode-text\"> <a [ngClass]=\"{'hyperlink-input': column.hyperLink}\"  [attr.href]=\"column.hyperLink ? column.hyperlinkurl + '/' + (element | getValue: column.fieldName) : null\" (click)=\"column.hyperLink && $event.preventDefault(); column.hyperLink && onClickHyperlink(column.fieldName, element, column.hyperLink)\">{{(element | getValue: column.fieldName) | NxtDate : 'mediumDate' : languageCode : column.calendarType}}</a></div>\n                                                </ng-container>\n                                                <ng-container *ngSwitchCase=\"'datetime'\">\n                                                    <div class=\"ellipsis view-mode-text\"> <a [ngClass]=\"{'hyperlink-input': column.hyperLink}\"  [attr.href]=\"column.hyperLink ? column.hyperlinkurl + '/' + (element | getValue: column.fieldName) : null\" (click)=\"column.hyperLink && $event.preventDefault(); column.hyperLink && onClickHyperlink(column.fieldName, element, column.hyperLink)\">{{(element | getValue: column.fieldName) | NxtDate : \"DD MMM YYYY, hh:mm A\" : languageCode : column.calendarType}}</a></div>\n                                                </ng-container>\n                                                <ng-container *ngSwitchCase=\"'currency'\">\n                                                    <div class=\"ellipsis view-mode-text\" style=\"text-align: end;\"> <a [ngClass]=\"{'hyperlink-input': column.hyperLink}\"  [attr.href]=\"column.hyperLink ? column.hyperlinkurl + '/' + (element | getValue: column.fieldName) : null\" (click)=\"column.hyperLink && $event.preventDefault(); column.hyperLink && onClickHyperlink(column.fieldName, element, column.hyperLink)\">{{ (+(element | getValue: column.fieldName) || 0) | currency : (currencyOption?.code || 'INR') : 'symbol-narrow' }} </a></div>\n                                                </ng-container>\n                                                <ng-container *ngSwitchDefault>\n                                                    <div class=\"ellipsis view-mode-text\"> \n                                                        <a [ngClass]=\"{'hyperlink-input': column.hyperLink}\"  [attr.href]=\"column.hyperLink ? column.hyperlinkurl + '/' + (element | getValue: column.fieldName) : null\" (click)=\"column.hyperLink && $event.preventDefault(); column.hyperLink && onClickHyperlink(column.fieldName, element, column.hyperLink)\">\n                                                            {{column.valueMap ? column.valueMap[(element | getValue: column.fieldName)] || (element | getValue: column.fieldName) : element | getValue: column.fieldName}} <!-- SKS23FEB25 valueMap used for map display value-->\n                                                        </a>\n                                                    </div>\n                                                </ng-container>\n                                        </ng-container>\n                                        </ng-template>\n                                    </div>\n                                </ng-container>\n\n                                <!--SKS15FEB25 Action Buttons -->\n                                <div *ngIf=\"(actionButton || isDeleteRow || isEditRow) && mode === 'edit'\" class=\"table-col-cell actionCol\">\n                                    <div class=\"actionButton\" style=\"display: flex; align-items: center; justify-content: center;\">\n                                        <!--SKS15FEB25 Edit Button -->\n                                        <div *ngIf=\"isEditRow\" class=\"eicon-container\" (click)=\"element?.editRow ? onSave(element) : onEdit(element)\"\n                                            matTooltip=\"{{(element?.editRow ? 'SAVE' : 'EDIT_RECORD') | nxtCustomTranslate : (element?.editRow ? 'Save' : 'Edit Record')  }}\"\n                                            style=\"padding: 2px; border: 1px solid #dcdcdc; border-radius: 5px; margin-left: 3px; margin-right: 3px;\">\n                                            <div class=\" edit-icon\"\n                                                style=\"padding: 2px 2px; border-radius: 5px; background-color: #f5f5f5;\">\n                                                <i *ngIf=\"!element?.editRow\" class=\"fusion-icon nav-icon fusion-icon-edit_pencil\" style=\"margin: 0px !important; font-size: 16px !important; color: #787486;\"></i>\n                                                <svg *ngIf=\"element?.editRow\" width=\"16\" height=\"16\" viewBox=\"0.09 0.12 0.3 0.25\" fill=\"none\" xmlns=\"http://www.w3.org/2000/svg\"><path fill-rule=\"evenodd\" clip-rule=\"evenodd\" d=\"M.35.149A.015.015 0 0 1 .351.17L.208.33a.015.015 0 0 1-.022 0L.129.266a.015.015 0 1 1 .022-.02l.046.051L.329.15A.015.015 0 0 1 .35.149\" fill=\"#6C757D\"/></svg>\n                                            </div>\n                                        </div>\n                                        <!--SKS15FEB25 Delete Button -->\n                                        <div *ngIf=\"isDeleteRow\" class=\"dicon-container\"\n                                            [matTooltip]=\"'DELETE_RECORD' | nxtCustomTranslate : 'Delete Record'\" (click)=\"deleteRecord(element,i)\"\n                                            style=\"padding: 2px; border: 1px solid #ffb5b5; border-radius: 5px; margin-left: 3px; margin-right: 3px;\">\n                                            <div class=\"delete-icon\"\n                                                style=\"padding: 2px 2px; border-radius: 5px; background-color: #feeeed;\">\n                                                <svg width=\"16\" height=\"16\"\n                                                    viewBox=\"0 0 16 16\" fill=\"none\" xmlns=\"http://www.w3.org/2000/svg\">\n                                                    <path\n                                                        d=\"M14 3.98726C11.78 3.76726 9.54667 3.65393 7.32 3.65393C6 3.65393 4.68 3.7206 3.36 3.85393L2 3.98726\"\n                                                        stroke=\"#FF2C10\" stroke-width=\"1.5\" stroke-linecap=\"round\"\n                                                        stroke-linejoin=\"round\" />\n                                                    <path\n                                                        d=\"M5.6665 3.31362L5.81317 2.44028C5.91984 1.80695 5.99984 1.33362 7.1265 1.33362H8.87317C9.99984 1.33362 10.0865 1.83362 10.1865 2.44695L10.3332 3.31362\"\n                                                        stroke=\"#FF2C10\" stroke-width=\"1.5\" stroke-linecap=\"round\"\n                                                        stroke-linejoin=\"round\" />\n                                                    <path\n                                                        d=\"M12.5667 6.09375L12.1334 12.8071C12.06 13.8537 12 14.6671 10.14 14.6671H5.86002C4.00002 14.6671 3.94002 13.8537 3.86668 12.8071L3.43335 6.09375\"\n                                                        stroke=\"#FF2C10\" stroke-width=\"1.5\" stroke-linecap=\"round\"\n                                                        stroke-linejoin=\"round\" />\n                                                    <path d=\"M6.88647 11.0004H9.10647\" stroke=\"#FF2C10\"\n                                                        stroke-width=\"1.5\" stroke-linecap=\"round\"\n                                                        stroke-linejoin=\"round\" />\n                                                    <path d=\"M6.3335 8.33325H9.66683\" stroke=\"#FF2C10\"\n                                                        stroke-width=\"1.5\" stroke-linecap=\"round\"\n                                                        stroke-linejoin=\"round\" />\n                                                </svg>\n                                            </div>\n                                        </div>\n\n                                        <!--SKS15FEB25 Render inline buttons up to Size -->\n                                        <div *ngFor=\"let button of actionButtonArray?.buttonArray; let i = index\">\n                                            <div *ngIf=\"i < actionButtonArray?.size\"\n                                                style=\" margin-left: 3px; margin-right: 3px;\">\n                                                <div *ngIf=\"!button.condition || element?._actions?.[button?.name]\"\n                                                    [matTooltip]=\"button.tooltipPath || button.tooltip | nxtCustomTranslate : button.tooltip \"\n                                                    (click)=\"actionButtonClicked(button,element)\"\n                                                    (mouseenter)=\"$event.target.style.border = '1px solid ' + button.hoverBorderColor\"\n                                                    (mouseleave)=\"$event.target.style.border = '1px solid ' + button.borderColor\"\n                                                    [style.border-radius]=\"button?.borderRadius ? button.borderRadius + 'px' : '5px'\";\n                                                    style=\"padding: 2px; border-radius: {{button.borderRadius}}px;  border: 1px solid {{button.borderColor || '#787486'}}; cursor: pointer; line-height: 0px;\">\n                                                    <div (mouseenter)=\"$event.currentTarget.style.backgroundColor = button.hoverBackgroundColor\"\n                                                        (mouseleave)=\"$event.currentTarget.style.backgroundColor = button.backgroundColor\"\n                                                        [style.padding]=\"button?.padding ? button.padding + 'px' : '2px 2px'\";\n                                                        [style.border-radius]=\"button?.borderRadius ? button.borderRadius + 'px' : '5px'\";\n                                                        style=\"\n                                                            display: inline-flex;\n                                                            align-items: center;\n                                                            justify-content: center;\n                                                            cursor: pointer;\n                                                            background-color: {{ button.backgroundColor }};\">\n                                                        <!-- IMAGE ICON (data URL or http/https) -->\n                                                        <img *ngIf=\"button.iconSrc?.startsWith('data:') || button.iconSrc?.startsWith('http')\"\n                                                            #imgElement\n                                                            [src]=\"button.iconSrc\"\n                                                            style=\"cursor: pointer;\"\n                                                            (mouseenter)=\"imgElement.src = button.hoverIconSrc || button.iconSrc\"\n                                                            (mouseleave)=\"imgElement.src = button.iconSrc\"/>\n                                                        <!-- CSS ICON (fusion-icon-edit etc.) -->\n                                                        <i *ngIf=\"!(button.iconSrc?.startsWith('data:') || button.iconSrc?.startsWith('http'))\"\n                                                            class=\"fusion-icon nav-icon\"\n                                                            [ngClass]=\"button.iconSrc\"\n                                                            style=\"margin: 0px !important; font-size: 16px !important; color: #787486;\">\n                                                        </i>\n                                                    </div>\n                                                </div>\n                                            </div>\n                                        </div>\n                                        <div *ngIf=\"dropdownActionButton && dropdownActionButton.length > 0\"\n                                            class=\"dropdown\">\n                                            <div class=\"clickable-img\" (click)=\"toggleDropdown(i)\"\n                                                style=\" margin-left: 3px; margin-right: 3px;\">\n                                                <div style=\"background-color: #f5f5f5; padding: 2px 2px; border-radius: 5px;\">\n                                                    <svg style=\"background-color: #f5f5f5; border-radius: 5px; border: 1px solid #6c757d;\"\n                                                        width=\"16\" height=\"16\" viewBox=\"0 0 40 40\" fill=\"none\"\n                                                        xmlns=\"http://www.w3.org/2000/svg\">\n                                                        <path\n                                                            d=\"M19.9999 25.6667C23.6818 25.6667 26.6666 22.6819 26.6666 19C26.6666 15.3181 23.6818 12.3334 19.9999 12.3334C16.318 12.3334 13.3333 15.3181 13.3333 19C13.3333 22.6819 16.318 25.6667 19.9999 25.6667Z\"\n                                                            fill=\"#292D32\" stroke=\"#292D32\" stroke-width=\"1.5\"\n                                                            stroke-miterlimit=\"10\" stroke-linecap=\"round\"\n                                                            stroke-linejoin=\"round\" />\n                                                        <path d=\"M17.6467 18.16L20.0001 20.5067L22.3534 18.16\"\n                                                            stroke=\"white\" stroke-width=\"1.5\" stroke-linecap=\"round\"\n                                                            stroke-linejoin=\"round\" />\n                                                    </svg>\n                                                </div>\n                                            </div>\n\n                                            <div class=\"dropdown-menu\"\n                                                [style.right]=\"((actionButtonArray?.size ?? 0) - (actionButtonArray?.buttonArray?.size ?? 0) + (isEditRow ? 1 : 0) + (isDeleteRow ? 1 : 0) + (dropdownActionButton?.length > 0 ? 1 : 0)) * 100 + '%'\"\n                                                *ngIf=\"currentOpenIndex === i\">\n                                                <div *ngFor=\"let btn of dropdownActionButton\">\n                                                    <button *ngIf=\"!btn.condition || element?._actions?.[btn?.name]\"\n                                                        [attr.data-id]=\"element.id\" style=\"display: flex;\" type=\"button\"\n                                                        class=\"btn btn-icon {{btn.buttonType}} tooltip-container\"\n                                                        [matTooltip]=\"btn.tooltipPath || btn.tooltip | nxtCustomTranslate : btn.tooltip\"\n                                                        [disabled]=\"btn.buttonDisable\"\n                                                        (click)=\"actionButtonClicked(btn,element)\">\n                                                        <img *ngIf=\"btn.iconSrc\" [src]=\"btn.iconSrc\">\n                                                        <div class=\"fc-btn-text\" style=\"padding-left: 10px;\">\n                                                            {{btn.name}}</div>\n                                                    </button>\n                                                </div>\n                                            </div>\n                                        </div>\n                                    </div>\n                                </div>\n                            </div>\n                        </div>\n\n                        <!-- SKS20MAR25 Summary Rows -->\n                        <ng-container *ngIf=\"displaySummaryRows && displaySummaryRows.length > 0 && dataSource.data && dataSource?.data?.length > 0 && !isLoading\">\n                            <ng-container *ngIf=\"!isFullTableSummaryRow && isSummaryColumn\">\n                                <div *ngFor=\"let row of displaySummaryRows; let k = index;\" class=\"table-row summary-row\">\n                                    <!-- Label in the first column -->\n                                    <div *ngIf=\"serialNumberColumn\" class=\"non-summary-table-cell\"></div>\n                                    <div *ngIf=\"withCheckBox\" class=\"non-summary-table-cell\"></div>\n                                    <!-- Empty cells to align with data columns -->\n                                    <div *ngFor=\"let col of isSummaryStartColumn; let last = last\"\n                                        class=\"non-summary-table-cell\" [class.last-cell]=\"last\">\n                                    </div> <!-- Value or input in the last column -->\n                                    <div class=\"summary-table-cell\"\n                                        [class.selected-cell]=\"mode === 'edit' && isEditable && selectedColumn === row.uniqueIdentifier\"\n                                        (click)=\"$event.stopPropagation(); onColumnClick(row.uniqueIdentifier)\">{{ (row.id+'.label') | nxtCustomTranslate : row?.label }}\n                                    </div>\n                                    <!-- SKS12SEP25 summary column input box -->\n                                    <div class=\"summary-table-cell\"\n                                        [class.selected-cell]=\"mode === 'edit' && isEditable && selectedColumn === row.uniqueIdentifier\">\n                                        <ng-container>\n                                            <nxt-input *ngIf=\"!Array.isArray(summaryValues?.[row.fieldName])\"\n                                                [type]=\"row.type === 'boolean' ? 'checkbox' : row.type === 'richtextarea' ? 'richtext' : row.type === undefined ? 'text' : row.type \"\n                                                [mode]=\"(from === 'formBuilder' || from === 'questionBook') ? !row.readOnly ? 'edit' : 'view' : (isEditRow || addInlineRecord) ? 'edit' : 'view'\" [from]=\"'nxtTable'\"\n                                                [value]=\"summaryValues[row.fieldName]\"\n                                                [question]=\"row\" [readOnly]=\"row?.readOnly\"\n                                                [labelFont]=\"row.question?.font\"\n                                                [label]=\"row.question?.questionText ? ((row.question?.id+'.questionText') | nxtCustomTranslate : row.question?.questionText): ''\"\n                                                [labelColor]=\"row.question?.color\"\n                                                [labelSize]=\"row.question?.fontSize\"\n                                                [inputValueSize]=\"row.question?.fontSize\"\n                                                [labelWeight]=\"row.question?.fontWeight\"\n                                                [inputWeight]=\"row.question?.fontWeight\"\n                                                [showLabel]=\"row.question?.style?.showLabel\"\n                                                inputBorder=\"none\" svgHeight=\"20px\" svgWidth=\"20px\"\n                                                [placeholder]=\"row.question?.question\"\n                                                [textAlign]=\"row.type === 'currency' ? 'end' : '' \"\n                                                [required]=\"row.question?.isOptional\" inputBgColor=\"#ffffff\"\n                                                [inputId]=\"row.question?.trackingId\"\n                                                [errorMessages]=\"{ required: 'This field is required' }\"\n                                                [inputIconLeftSrc]=\"row.question?.iconLeftSrc\" \n                                                [minDate]=\"row.question?.minDate\"\n                                                [rows]=\"3\" [currency]=\"currencyOption?.code\"\n                                                [onlyView]=\"onlyView\"\n                                                [mode]=\"onlyView ? 'view': 'edit'\"\n                                                (inputValue)=\"$event.tsChange ? '' : summaryValues[row.fieldName] = $event.value.valueObj;$event.tsChange ? '' : computeSummaryValues('html')\"\n                                                >\n                                            </nxt-input>\n                                            <div *ngIf=\"Array.isArray(summaryValues?.[row.fieldName])\">\n                                                {{summaryValues?.[row.fieldName] | json}}\n                                            </div>\n                                        </ng-container>\n                                    </div>\n                                    <!-- SKS20MAR25 Empty cells to align with data columns -->\n                                    <div *ngFor=\"let col of isSummaryEndColumn; let last = last\"\n                                        class=\"non-summary-table-cell\">\n                                    </div>\n                                    <div *ngIf=\"mode === 'edit' && (actionButton || isDeleteRow || isEditRow) && !onlyView\"\n                                        [ngClass]=\"addInlineRecord && k === 0 ? 'table-col-cell' : 'non-summary-table-cell'\"\n                                        [style.border-bottom]=\"(addInlineRecord && k === 0) ? '0px' : null\"\n                                        class=\"actionCol sticky-column\">\n                                        <!-- SKS16OCT25 if summaryRows are present in the table, show the inline button next to the summary row action button column -->\n                                        <div *ngIf=\"addInlineRecord && k === 0\" style=\"display: flex; justify-content: center;\">\n                                            <div class=\"flex addIconBor cursor-pointer\" (click)=\"addTableRecord(inlineElement)\"\n                                                matTooltip=\"{{ 'ADD_RECORD'| nxtCustomTranslate : 'Add Record'}}\">\n                                                <div class=\"addIcon\">\n                                                    <svg class=\"nav-icon\" xmlns=\"http://www.w3.org/2000/svg\" height=\"20\" viewBox=\"66.666 -733.334 666.667 666.668\" width=\"20\"><path d=\"M366.666 -233.334h66.666v-133.334h133.334v-66.666H433.334v-133.334h-66.666v133.334H233.334v66.666h133.334zM400 -66.668q-69.166 0 -130 -26.25t-105.834 -71.249 -71.25 -105.834 -26.25 -130 26.25 -130 71.25 -105.834 105.834 -71.25 130 -26.25 130 26.25 105.834 71.25 71.25 105.834 26.25 130 -26.25 130 -71.25 105.834 -105.834 71.25 -130 26.25m0 -66.666q111.666 0 189.166 -77.5t77.5 -189.166 -77.5 -189.166 -189.166 -77.5 -189.166 77.5 -77.5 189.166 77.5 189.166 189.166 77.5m0 -266.666\" fill=\"#6d747d\"/></svg>\n                                                </div>\n                                            </div>\n                                        </div>\n                                    </div>\n                                </div>\n                            </ng-container>\n                            <!-- SKS13JUN25 full table summary row -->\n                            <ng-container *ngIf=\"isFullTableSummaryRow\">\n                                <div *ngFor=\"let row of displaySummaryRows; let i = index; trackBy: trackBySummary\" class=\"table-row summary-row\">\n                                    <!-- SKS13JUN25 Checkbox column (if enabled) -->\n                                    <div *ngIf=\"withCheckBox\" class=\"horizontal-summary-table-cell\">\n                                        {{ row.labelPath || row.label | nxtCustomTranslate : row.label }}\n                                    </div>\n\n                                    <!-- SKS13JUN25 summary cell -->\n                                    <div *ngFor=\"let col of currentColumns; let last = last; let i = index; trackBy: trackByColumn \"\n                                        class=\"horizontal-summary-table-cell\" style=\"text-align: left;\">\n                                        @if (row?.columns?.includes(col.fieldName)) {\n                                        {{ summaryValues[col.fieldName] | number }}\n                                        }\n                                    </div>\n                                    <div *ngIf=\"actionButton || isDeleteRow || isEditRow\"\n                                        class=\"horizontal-summary-table-cell actionCol sticky-column\">\n                                    </div>\n                                </div>\n                            </ng-container>\n                        </ng-container>\n                        <!--SKS28MAR25 In the Loading section -->\n                        <div class=\"table-body\" *ngIf=\"isLoading\">\n                            <!-- Repeat for 5 skeleton rows -->\n                            <div *ngFor=\"let _ of [1,2,3,4,5]; trackBy: trackByIndex\" class=\"table-row\">\n                                <!-- Checkbox Column -->\n                                <!-- Data Columns -->\n                                <div *ngFor=\"let col of [].constructor(withCheckBox ? currentColumns.length + 2 : currentColumns.length + 1); let i = index; trackBy: trackByColumn\" class=\"skeleton-cell\"></div>\n                                <!-- Action Column -->\n                                <div *ngIf=\"actionButton || isDeleteRow || isEditRow\" class=\"skeleton-cell actionCol\">\n                                </div>\n                            </div>\n                        </div>\n                        <!-- <div *ngIf=\"dataSource.data && dataSource?.data?.length === 0 && !isLoading && from === 'formBuilder'\" class=\"form-builder-table-box\">\n                            Add  / drags fields from elements sections\n                        </div> -->\n                    </div>\n                </ng-container>\n            </div>\n            <!--SKS15FEB25 No Data Row -->\n            <div *ngIf=\"dataSource.data && dataSource?.data?.length === 0 && !isLoading && from !== 'formBuilder' && from !== 'questionBook'\"\n                class=\"no-data\">\n                {{'NO_RECORDS_OR_DATA_FOUND' | nxtCustomTranslate : 'No records/data found.'}}\n            </div>\n            <!--SKS15FEB25 Pagination -->\n            <div [class.shadow-hidden]=\"isShadowHidden\">\n                <!-- table input save button changes -->\n                <div *ngIf=\"mode === 'edit'\" class=\"d-flex inlineAdd justify-content-end\">\n                    <!-- SKS16OCT25 added condition to hide inline button when summary row is enabled in the table -->\n                    <div class=\"flex addIconBor cursor-pointer\" *ngIf=\"((!displaySummaryRows || displaySummaryRows?.length === 0 || (dataSource.data && dataSource?.data?.length === 0) ) ? true : (!actionButton && !isDeleteRow && !isEditRow)) && addInlineRecord && !onlyView\"\n                        (click)=\"addTableRecord(inlineElement)\"\n                        matTooltip=\"{{ 'ADD_RECORD'| nxtCustomTranslate : 'Add Record'}}\">\n                        <div class=\"addIcon\">\n                            <svg class=\"nav-icon\" xmlns=\"http://www.w3.org/2000/svg\" height=\"20\" viewBox=\"66.666 -733.334 666.667 666.668\" width=\"20\"><path d=\"M366.666 -233.334h66.666v-133.334h133.334v-66.666H433.334v-133.334h-66.666v133.334H233.334v66.666h133.334zM400 -66.668q-69.166 0 -130 -26.25t-105.834 -71.249 -71.25 -105.834 -26.25 -130 26.25 -130 71.25 -105.834 105.834 -71.25 130 -26.25 130 26.25 105.834 71.25 71.25 105.834 26.25 130 -26.25 130 -71.25 105.834 -105.834 71.25 -130 26.25m0 -66.666q111.666 0 189.166 -77.5t77.5 -189.166 -77.5 -189.166 -189.166 -77.5 -189.166 77.5 -77.5 189.166 77.5 189.166 189.166 77.5m0 -266.666\" fill=\"#6d747d\"/></svg>\n                        </div>\n                    </div>\n                    <!--SKS15FEB25 removed button disable logic, added another condition for button showing-->\n                    <!--SKS15FEB25 SR06JAN2025 button disable logic for not select any employee-->\n                    <nxt-button *ngIf=\"(tableSaveButton || isEditRow || addInlineRecord) && !hideSaveButton && from != 'formBuilder' && from != 'questionBook'\"\n                        buttonType=\"btn btn-primary\" [buttonDisable]=\"(!tableEditTrack && (selection?.selected.length === 0 || selectedIsEmpty))\"\n                        (buttonClickEmit)=\"saveButton(inlineElement)\"\n                        buttonValue=\"{{ 'SAVE' | nxtCustomTranslate : 'Save'  }}\"></nxt-button>\n                </div>\n                <nxt-pagination *ngIf=\"isPagination\" [pageSizeOptions]=\"pageSizeOptions\"\n                    [collectionSize]=\"pagination ? (totalRecords || totalCount) : filterTableNos\"\n                    [pageSize]=\"pageSize\" [currentPage]=\"pageIndex\" [firstLastButtons]=\"true\"\n                    (event)=\"pageParams($event)\">\n                </nxt-pagination>\n            </div>\n        </div>\n    </div>\n</div>\n<!--SKS15FEB25 alert on deleting record -->\n<div *ngIf=\"deleteModal\" class=\"modal modal-backdrop show  d-block\" id=\"deleteRecord\" tabindex=\"-1\"\n    aria-labelledby=\"deleteRecordLabel\" [attr.aria-hidden]=\"!deleteModal\">\n    <div class=\"modal-dialog\">\n        <div class=\"modal-content\">\n            <div class=\"modal-header\">\n                <b class=\"modal-title fs-5\" id=\"deleteRecordLabel\">{{ 'DELETE_RECORD'| nxtCustomTranslate : 'Delete Record'}}</b>\n                <button type=\"button\" class=\"btn-close\" data-bs-dismiss=\"modal\" aria-label=\"Close\"\n                    (click)=\"deleteModal = false\"></button>\n            </div>\n            <div class=\"modal-body\">\n                {{ 'ARE_YOU_SURE_YOU_WANT_TO_DELETE_THE_REC'| nxtCustomTranslate : 'Are you sure you want to delete the record'}} ?\n            </div>\n            <div class=\"modal-footer\">\n                <nxt-button\n                    (buttonClickEmit)=\"deleteRecordData()\" \n                    [isLoading]=\"isButtonLoading\"\n                    [buttonValue]=\"'YES'| nxtCustomTranslate : 'Yes'\"\n                    [btnBorderRadius]=\"4\"\n                    [btnWidth]=\"70\"\n                    [buttonType]=\"'custom-btn'\"\n                    >\n                </nxt-button>\n                <nxt-button\n                    (buttonClickEmit)=\"deleteModal = false\" \n                    [buttonValue]=\"'NO'| nxtCustomTranslate : 'No'\"\n                    [btnBgColor]=\"'#ffffff'\"\n                    [btnTextColor]=\"'#007bff'\"\n                    [btnBorder]=\"'1'\"\n                    [btnBorderColor]=\"'#dee2e6'\"\n                    [btnBorderRadius]=\"4\"\n                    [btnWidth]=\"70\"\n                    [buttonType]=\"'custom-btn'\"\n                    >\n                </nxt-button>\n            </div>\n        </div>\n    </div>\n</div>\n","import { Injectable } from '@angular/core';\nimport {Router} from '@angular/router';\n\ndeclare class Visualforce {\n    static remoting: { Manager: { invokeAction: any } };\n}\n\n@Injectable({\n    providedIn: 'root'\n})\n\nexport class SalesforceService {\n    public getSFResource = (path: string) => `${window['_VfResources']}${path}`;\n    public getRNXTMethodName = () => `${window['_rnxtMethodName']}`;\n\n    public remoteAction(methodName: string,\n                        params: string[],\n                        resolve,\n                        reject,\n                        config?: any) {\n      const self = this;\n      var nsMethodName = this.getRNXTMethodName();\n\n      Visualforce.remoting.Manager.invokeAction(\n        nsMethodName,\n        //'NxtController.process',\n        //`{!$RemoteAction.NxtController.process}`,\n        ...params,\n        function (result, event) {\n          try {\n            result = JSON.parse(result);\n          } catch (error) {\n            reject(error);\n          }\n          if (result.status) {\n              resolve(result);\n          } else {\n              resolve(result);\n          }\n        },\n        config || { buffer: false, escape: false }\n      );\n    }\n\n    constructor(private _router: Router) {\n\n    }\n}\n","import {\n  Component,\n  OnInit,\n  OnChanges,\n  Inject,\n  Input,\n  Output,\n  EventEmitter,\n  ViewEncapsulation,\n  ElementRef,\n  SimpleChanges,\n} from \"@angular/core\";\nimport { ActivatedRoute, Params } from \"@angular/router\";\nimport { DomSanitizer, SafeHtml } from \"@angular/platform-browser\";\nimport { FormsModule, UntypedFormBuilder } from \"@angular/forms\";\n//import { NgxIndexedDBService, IndexDetails} from 'ngx-indexed-db';\nimport { DeviceDetectorService } from 'ngx-device-detector';\nimport { ErrorWrapper } from \"../../model/errorWrapper\";\n// HA 19DEC23 imported translation service\nimport { CommonModule } from \"@angular/common\";\nimport { nxtDropdown } from \"../../components/nxt-dropdown/nxt-dropdown.component\";\nimport { NxtMultiSelect } from \"../../components/nxt-multi-select/nxt-multi-select.component\";\nimport { NxtDatatable } from \"../../components/datatable/datatable.component\";\nimport { NxtInput } from \"../../components/nxt-input/nxt-input.component\";\nimport { SalesforceService } from \"../../services/salesforce/salesforce.service\";\nimport { DataService } from \"../../services/data/data.service\";\nimport { ChangeService } from \"../../services/change/change.service\";\nimport { SharedService } from \"../../services/shared/shared.service\";\nimport { NxtCustomTranslatePipe } from \"../../pipe/custom-translate.pipe\";\n@Component({\n  selector: \"lib-questionnaire\",\n  templateUrl: \"./questionnaire.component.html\",\n  standalone: true,\n  imports: [\n    CommonModule,NxtInput, FormsModule, nxtDropdown, NxtMultiSelect, NxtDatatable, NxtCustomTranslatePipe\n  ],\n  encapsulation: ViewEncapsulation.None,\n  styleUrls: [\"./questionnaire.component.css\"],\n})\nexport class QuestionnaireComponent implements OnInit {\n  @Input() qbId: string;\n  @Input() insuranceStartDate: string;\n  @Input() serv: string;\n  @Input() tkn: string;\n  @Input() api: string; // VD getting the api as input\n  @Input() isEdit: boolean;\n  @Input() direction = 'ltr'; \n  @Output() handleEvent = new EventEmitter();\n  @Output() handlePage: EventEmitter<any> = new EventEmitter();\n  @Output() handleQuestion: EventEmitter<any> = new EventEmitter();\n  @Output() handleBook: EventEmitter<any> = new EventEmitter();\n  @Output() handleSubmit: EventEmitter<any> = new EventEmitter();\n\n  params: Params;\n  public deviceInfo = null;\n  public abItem: any;\n  public qbItem: any;\n  public questionItem: any;\n  public answerWrap: any;\n \n  // CONDITIONAL TYPES\n  public radioFlag: boolean = false;\n  public dataFlag: boolean = false;\n \n  // OPTIONONLY TYPES\n  public dropdownFlag: boolean = false;\n  public multiSelectFlag: boolean = false;\n  public checkboxFlag: boolean = false;\n \n  // UNCONDITIONAL TYPES\n  public textFlag: boolean = false;\n  public taFlag: boolean = false;\n  public rtaFlag: boolean = false;\n  public dtFlag: boolean = false;\n  public timeFlag: boolean = false;\n  public dateFlag: boolean = false;\n  public fileFlag: boolean = false;\n  public emailFlag: boolean = false;\n  public numberFlag: boolean = false;\n  public alphanumericFlag: boolean = false;\n  public bookFlag: boolean = false;\n  public listFlag: boolean= false;\n  //Back button\n  public backButtonFlag: boolean = false;\n  // VD disabled\n  public isButtonDisabled: boolean = false;\n  public optionValues: any[] = [];\n  public subQuestions: any[] = [];\n  public inpValue: any;\n  public answerMap = new Map();\n  public dateMap = new Map();\n  public selectedhourMap = new Map();\n  public selectedminuteMap = new Map();\n  public attachmentsMap = new Map();\n  public subAnsMap = new Map();\n  public localSubQuestions: any[] = [];\n  public questionStack = [];\n  public questionName = [];\n  public attachments: any[] = [];\n  public attachmentIdList: any[] = [];\n  public attachmentId: string = \"\";\n  public attachment: any;\n  public allowedFileExtension: string[];\n  public fileExceededLimit: boolean = false;\n  public fileTypeIncorrect: boolean = false;\n  public back: boolean = false;\n  public backicon: boolean = true;\n  public check: boolean;\n  public pop: boolean;\n  public localDate: string;\n  public currentName: string;\n  public pathquestion: number;\n  public percent: number;\n  public count: number;\n  public taFocusOut: boolean = false;\n  public notValidAccNum: boolean = false;\n  public splCCBackClick: boolean = false;\n  public summary = [];\n  public localSubQMap = new Map();\n  public keyIndex: number = 0;\n  //public sques: string;\n  public selDate: any = {};\n  public selectDate: string;\n  private today: Date = new Date();\n  private el: HTMLElement;\n  public innerhtml: any;\n  public possibilities: any;\n  public innerhtml1: any;\n  public summaryData =[];\n \n  public hours: any[] = [\n    \"01\",\n    \"02\",\n    \"03\",\n    \"04\",\n    \"05\",\n    \"06\",\n    \"07\",\n    \"08\",\n    \"09\",\n    \"10\",\n    \"11\",\n    \"12\",\n  ];\n \n  public minutes: string[] = [\n    \"00\",\n    \"01\",\n    \"02\",\n    \"03\",\n    \"04\",\n    \"05\",\n    \"06\",\n    \"07\",\n    \"08\",\n    \"09\",\n    \"10\",\n    \"11\",\n    \"12\",\n    \"13\",\n    \"14\",\n    \"15\",\n    \"16\",\n    \"17\",\n    \"18\",\n    \"19\",\n    \"20\",\n    \"21\",\n    \"22\",\n    \"23\",\n    \"24\",\n    \"25\",\n    \"26\",\n    \"27\",\n    \"28\",\n    \"29\",\n    \"30\",\n    \"31\",\n    \"32\",\n    \"33\",\n    \"34\",\n    \"35\",\n    \"36\",\n    \"37\",\n    \"38\",\n    \"39\",\n    \"40\",\n    \"41\",\n    \"42\",\n    \"43\",\n    \"44\",\n    \"45\",\n    \"46\",\n    \"47\",\n    \"48\",\n    \"49\",\n    \"50\",\n    \"51\",\n    \"52\",\n    \"53\",\n    \"54\",\n    \"55\",\n    \"56\",\n    \"57\",\n    \"58\",\n    \"59\",\n  ];\n \n  public selectedHour: string = \"\";\n  public selectedMinute: string = \"\";\n  public selectedMeridiem: string = \"\";\n  public valueName: string = \"\";\n  public valueName1: string = \"\";\n  public bookFlagAccept: string[];\n  public recordId: string;\n  public currentQuestionId: string;\n  public spinnerType: string;\n \n  start_date?: any;\n \n  //search component\n  public tempoAddress: any[] = [];\n  public selectedValue: string;\n  public selectedPostalcode: string;\n  public selectedProvince: string;\n  public selectedCity: string;\n  public selectedArea: string;\n  public localaddress: any[] = [];\n  public allAddress :any [] = [];\n  public PostalCode:string;\n  public places: any[] = [];\n  public province:any[]=[];\n \n  // REQ-01 PROGRESS BAR\n  public progressStyle: string = \"0%\";\n  public answerCount: number = 0;\n  public indexCount: number = 0;\n  public addFlag: boolean = true;\n  public myDatePickerOptions: any = {};\n  individualBookButton: boolean;\n \n  public allInputValues = []; // HA 02FEB24 To store all the input values\n  constructor(\n    private sfService: SalesforceService,\n    private dataService: DataService,\n    private changeService: ChangeService,\n    private sharedService: SharedService,\n    private route: ActivatedRoute,\n    private sanitizer: DomSanitizer,\n    private _formBuilder: UntypedFormBuilder,\n    //private dbService: NgxIndexedDBService,\n    private deviceService: DeviceDetectorService,\n    el: ElementRef\n  ) {\n    // VD 10Aug24-spinner changes\n    this.spinnerType = \"ball-spin-clockwise-fade\";\n  }\n \n  // HA 02FEB24 On date change need to store the changed value so passing the question\n  // RS 09DEC24 Changed keys\n  onDateChanged(event: any, ques: any) {\n    //to change the border color\n    if (this.qbItem.progressBar) {\n      this.inpValue =\n        event.date.day + \"/\" + event.date.month + \"/\" + event.date.year;\n      if(this.questionItem.type ==\"Book\"){\n        this.selectDate =  event.date.day + \"/\" + event.date.month + \"/\" + event.date.year;\n      }\n    } else {\n      if(this.questionItem.type ==\"Book\"){\n        this.selectDate =  event.date.day + \"-\" + event.date.month + \"-\" + event.date.year;\n      }\n      this.inpValue =\n        event.date.year + \"-\" + event.date.month + \"-\" + event.date.day;\n    }\n    const htmlElement = window.document.getElementsByClassName(\"mydp\");\n    htmlElement\n      .item(0)\n      .setAttribute(\"style\", \"border-color:#87be1c;width:100%\");\n    this.dateMap.set(this.questionItem.id, event);\n    if (\n      event.date.day === 0 &&\n      event.date.month === 0 &&\n      event.date.year === 0\n    ) {\n      this.dateMap.delete(this.questionItem.id);\n      this.answerMap.delete(this.questionItem.id);\n    }\n    // HA 02FEB24 Assigning input value to ques input\n    ques.input = this.inpValue;\n  }\n\n  ngOnInit() {\n    this.deviceInfo = this.deviceService.getDeviceInfo();\n    this.route.queryParams.subscribe((params: Params) => {\n      if (params['id']) {\n        this.individualBookButton = true;\n      }else if(params['bookletId']){\n        this.individualBookButton = false;\n      }\n    });\n    this.inpValue = \"\";\n    this.selectedMeridiem = \"AM\";\n    this.processQB();\n    if(localStorage.getItem(\"address\")){\n      this.localaddress = JSON.parse(localStorage.getItem(\"address\"));\n      this.allAddress=this.localaddress.filter((item, index) => {\n        if (this.localaddress.indexOf(item) == index){\n          return item;\n        }\n      });\n      this.allAddress.sort(function(a, b){\n        return a.zipCode - b.zipCode\n      });\n    } else if(this.deviceInfo.os === 'iOS'){\n        let openRequest = indexedDB.open(\"addressDB\");\n        openRequest.onsuccess = (event) => {\n          const targetNew = event.target as IDBRequest;\n          let dbNew = targetNew.result;\n          const requestNew = dbNew.transaction('addressTable')\n                .objectStore('addressTable')\n                .get(1);\n          requestNew.onsuccess = ()=> {\n              const tempVar = requestNew.result;\n              this.localaddress = JSON.parse(tempVar.wholeAddressString);\n              this.allAddress=this.localaddress.filter((item, index) => {\n                if (this.localaddress.indexOf(item) == index){\n                  return item;\n                }\n              });\n              this.allAddress.sort(function(a, b){\n                return a.zipCode - b.zipCode\n              });\n        }\n      };\n    }\n  }\n\n ngAfterViewInit() {\n    // SKS20MAR25 Ensure the child component is available before calling the method\n     // AP-25MAR25 Empty string replace null\n    setTimeout(() => {\n      this.subQuestions.forEach(ques => {\n        let input: any;\n        input = {}\n        ques['subText'] = typeof ques?.subText === 'object' ? ques?.subText : JSON.parse(ques['subText']);\n        let apiObj: any = ques.subText;\n        input['valueObj'] = ques.input || null\n        input['field'] = apiObj?.defaultField || apiObj?.field?.[0] || apiObj?.field || null\n        input['referenceField'] = ques.referenceField || null\n        input['fromQuestionId'] = ques.id || null\n        this.childEventCapture(input, ques);\n      });\n    });\n  }\n// call when bookId changes\n  ngOnChanges(simplechanges: SimpleChanges) {\n    if(simplechanges['qbId']){\n      this.processQB();\n    }\n  }\n   // RS 09DEC24 Changed keys\n  date_TimeMap() {\n    this.selectedhourMap.set(this.questionItem.id, this.selectedHour);\n    this.selectedminuteMap.set(this.questionItem.id, this.selectedMinute);\n  }\n \n  day() {\n    this.myDatePickerOptions = {\n      dateFormat: \"dd.mm.yyyy\",\n      sunHighlight: false,\n      disableDateRanges: [],\n      showClearDateBtn: false,\n      disableSince: {\n        year: 0,\n        month: 0,\n        day: 0,\n      },\n      disableUntil: {\n        year: 0,\n        month: 0,\n        day: 0,\n      },\n      showTodayBtn: false,\n      dayLabels: {\n        su: \"Dom\",\n        mo: \"Lun\",\n        tu: \"Mar\",\n        we: \"Mié\",\n        th: \"Jue\",\n        fr: \"Vie\",\n        sa: \"Sáb\",\n      },\n      monthLabels: {\n        1: \"Ene\",\n        2: \"Feb\",\n        3: \"Mar\",\n        4: \"Abr\",\n        5: \"Mayo\",\n        6: \"Jun\",\n        7: \"Jul\",\n        8: \"Ago\",\n        9: \"Sep\",\n        10: \"Oct\",\n        11: \"Nov\",\n        12: \"Dic\",\n      },\n    };\n  }\n \n  change() {\n    const htmlElement = window.document.getElementsByClassName(\"mydp\");\n    if (this.selDate === null || this.inpValue.length === 0) {\n      htmlElement\n        .item(0)\n        .setAttribute(\"style\", \"width:100%;border: 1px solid red\");\n    } else {\n      htmlElement\n        .item(0)\n        .setAttribute(\"style\", \"border: 1px solid #87be1c ;width:100%\");\n    }\n  }\n \n  processQB() {\n    //this.qbItem\n    if (this.qbId) {\n      if (this.qbId.length == 18) {\n        this.readQuestionBook(this.qbId);\n      } else {\n        this.questionItem = {};\n        this.qbItem = {};\n        this.processQuestion();\n      }\n    }\n  }\n \n  trimLastDummy(input: string) {\n    return (input = input.substring(0, input.length - 6));\n  }\n \n  getProperTime(def: string, input: string) {\n    return input === \"\" ? def : input;\n  }\n   // RS 09DEC24 Changed keys\n  //Summary Question Clickable Logic\n  handleEditClick(value: string) {\n    this.backicon = false;\n    if (this.abItem?.status == \"Pending\") {\n      if (value == null) {\n        return;\n      }\n      this.readQuestion(value);\n \n      //Assign question stack length from summary part\n      var arrayLength = this.questionStack.length;\n      var lengthValue = this.questionStack.indexOf(value);\n \n      for (let i = arrayLength; i > lengthValue; i--) {\n           this.questionStack.pop();\n      }\n      if (this.qbItem.progressBar === true) {\n        var arrayLength1 = this.questionName.length;\n        for (let j = arrayLength1; j > lengthValue; j--) {\n          this.questionName.pop();\n        }\n      }\n      this.summary = [];\n      this.summaryData = [];\n    }\n  }\n \n  handleNextClick() {\n   // this.sharedService.showLoader();\n    this.isButtonDisabled = true;\n    this.backButtonFlag = false;\n    this.AnswerSave();\n  }\n \n  AnswerSave(){\n    //this.updateProgress();\n    if (this.currentQuestionId === null) {\n      return;\n    }\n    var questionTxt='';\n    this.clearError();\n    this.handleEvent.emit(this.qbItem.nextTrackingId);\n    this.recordId = null;\n    var cQuestion: any = {}\n    cQuestion = this.questionItem;\n    // MR 30JAN24 - Added Condition for this.questionItem.Questions__r (Book Question and Non-Book)\n    if(this.questionItem.subQuestions) {\n        // Create an array of objects to store the values\n        for (var i=0; i<this.questionItem.subQuestions.length;i++) {\n          if(this.questionItem.subQuestions[i].questionText){\n            var questionText = this.questionItem.subQuestions[i].questionText.replace(/<[^>]+>/g, ''); // Remove HTML tags from the questionText value\n          }else{\n            questionText = 'undefined';\n          }\n          const input = this.questionItem.subQuestions[i].input;\n          const obj = { [questionText]: input }; // Create an object with the questionText as the key and the input as the value\n          this.summaryData.push(obj); // Add the object to the data array\n        }\n    } else {\n      var questionText = this.questionItem.questionText.replace(/<[^>]+>/g, '');\n      const input = this.questionItem.input;\n      const obj = { [questionText]: input }; // Create an object with the questionText as the key and the input as the value\n      this.summaryData.push(obj); // Add the object to the data array\n    }\n \n         var typ = cQuestion.type;\n    // this.sques += cQuestion.question + '@@##$$';\n    var quesValue = cQuestion.questionText;\n    var mailformat =\n      \"^[^.][a-zA-Z0-9!#$%&'*+-/=?^_`{|}~]+[^.]@[^-][a-zA-Z0-9.-]+[^-].[a-zA-Z]{2,}$\";\n \n    // Process Inputs\n    if (this.checkboxFlag) {\n      this.inpValue = \"\";\n      // Save all the selected options in the inpValue\n      for (var ov of this.optionValues.filter((item) => item.checked)) {\n        this.inpValue += ov.value + \"@@##$$\";\n        this.recordId = ov.nextQuestion;\n      }\n      this.inpValue = this.trimLastDummy(this.inpValue);\n    } else if (this.emailFlag) {\n      if (this.inpValue && this.inpValue.match(mailformat)) {\n        this.recordId = this.questionItem.nextQuestion;\n      } else {\n        this.questionItem.error = new ErrorWrapper();\n        return;\n      }\n    } else if (this.alphanumericFlag) {\n      var isNotValidAccNum = this.isNotValidAccNumber(this.inpValue);\n      if (isNotValidAccNum) {\n        this.notValidAccNum = true;\n        this.recordId = this.questionItem.nextQuestion;\n        return;\n      }\n      this.notValidAccNum = false;\n    } else if (this.numberFlag) {\n      if (this.inpValue) {\n        this.recordId = this.questionItem.nextQuestion;\n      } else {\n        this.questionItem.error = new ErrorWrapper();\n        return;\n      }\n    } else if (this.bookFlag) {\n      this.inpValue = \"\";\n      var hasMissingInput = false;\n      for (var item of this.questionItem.subQuestions) {\n        var count = 0;\n \n        if(item.type == \"Date\" || item.type == \"Time\") {\n          //this one\n          this.change();\n            if(item.type == \"Date\"){\n              this.inpValue = this.selectDate;\n \n            }\n           if(item.type == \"Time\"){\n \n            if (this.questionItem.x24Hours === false) {\n                this.questionItem.input =\n                  (this.selectedMeridiem === \"PM\" && this.selectedHour != \"12\"\n                    ? Number(this.selectedHour) + 12\n                    : this.selectedHour) +\n                  \":\" +\n                  this.selectedMinute + \" PM\";\n                if (this.selectedMeridiem === \"AM\" && this.selectedHour === \"12\") {\n                  this.questionItem.input = \"00\" + \":\" + this.selectedMinute + \" AM\";\n                }\n                if (this.qbItem.progressBar) {\n                  if(this.selectDate){\n                    this.inpValue = this.selectDate+\" \"+this.questionItem.input;\n                  }else{\n                    this.inpValue = \" \"+this.questionItem.input;\n                  }\n                } else {\n                  if(this.selectDate){\n                    this.inpValue = this.selectDate+\" \"+this.questionItem.input;\n                  }else{\n                    this.inpValue = \" \"+this.questionItem.input;\n                  }\n  \n                }\n              }\n              if (this.questionItem.x24Hours === true) {\n                this.questionItem.input =\n                  this.selectedHour + \":\" + this.selectedMinute;\n                if (this.qbItem.progressBar) {\n                  this.inpValue = this.questionItem.input;\n                } else {\n                  this.inpValue = this.questionItem.input;\n                }\n              }\n          }\n          // HA 31-JAN-24 Removed the selectHour and selectMinute condition\n          if (this.selDate === null || this.selDate === undefined || !this.inpValue || !this.selectDate) {\n            this.questionItem.error = new ErrorWrapper();\n            const htmlElement = window.document.getElementsByClassName(\"mydp\");\n            htmlElement\n              .item(0)\n              .setAttribute(\"style\", \"width:100%;border-bottom: 1px solid red !important;\");\n            return;\n          }\n          this.date_TimeMap();\n      }\n      // HA 31-JAN-24 Added text error condition\n      if(item.type== \"Text\"){\n        if (!item.input) {\n          item.input = \"\";\n          item.error = new ErrorWrapper();\n          hasMissingInput = true;\n        }\n        // this.inpValue = item.input; 634\n      }\n \n        if (\n          !item.isOptional &&\n        //  ((item.type != \"File\" && !item.input && item.type != 'Date' && item.type != 'Time') ||\n         //   (item.type == \"File\" && this.attachments.length == 0))\n         (item.type == \"File\" && this.attachments.length == 0)\n        ) {\n          item.error = new ErrorWrapper();\n          hasMissingInput = true;\n        }\n        if (item.type == \"Radio\") {\n          if (!item.input) {\n            item.error = new ErrorWrapper();\n            hasMissingInput = true;\n          }\n        }\n        if (item.type == \"Dropdown\" || item.type == \"MultiSelect\") {\n          if (!item.input || (Array.isArray(item.input) && item.input.length === 0)) {\n            item.input = \"\";\n            item.error = new ErrorWrapper();\n            hasMissingInput = true;\n          }\n        }\n        if (item.type == \"Email\") {\n          if (item.input && item.input.match(mailformat)) {\n            this.recordId = cQuestion.nextQuestion;\n          } else {\n            item.error = new ErrorWrapper();\n            hasMissingInput = true;\n          }\n        }\n        if (item.type == \"File\" && this.attachments.length > 0) {\n          for (var attachmentItem of this.attachments) {\n            this.inpValue +=\n              attachmentItem.attachmentId +\n              \"@#$\" +\n              attachmentItem.attachmentName +\n              \",\";\n            if (item.input == this.inpValue) {\n              this.recordId = cQuestion.nextQuestion;\n            }\n          }\n          // this.attachments = [];\n        } //item.input == this.inpValue;\n \n        this.inpValue += (item.input != undefined ? item.input : \"\") + \"@@##$$\";\n        questionTxt += item.question + \"@@##$$\";\n      }\n      if (hasMissingInput) {\n        return;\n      }\n      this.inpValue = this.trimLastDummy(this.inpValue);\n      questionTxt = questionTxt ? this.trimLastDummy(questionTxt) : questionTxt;\n    }\n    else if (this.listFlag) {\n      this.inpValue = '';\n      var hasMissingInput = false;\n      if(this.localSubQMap.has(this.questionItem.id)){\n        this.subAnsMap = new Map();\n        for (var localQues of this.localSubQMap.get(this.questionItem.id)) {\n            if(!localQues.input) {\n              localQues.error = new ErrorWrapper();\n              hasMissingInput = true;\n            }\n          if(!this.subAnsMap.has(localQues.id)){\n            this.subAnsMap.set(localQues.id,localQues.input);\n          } else {\n            this.subAnsMap.set(localQues.id,this.subAnsMap.get(localQues.id) + '$$@@##'+localQues.input);\n          }\n        }\n \n        if (hasMissingInput) {\n          return;\n        }\n        this.subAnsMap.forEach((value, key) => {\n          this.inpValue += (value != undefined ? value : '') + '@@##$$';\n        });\n        this.inpValue = this.trimLastDummy(this.inpValue);\n      }\n    }\n    else if (this.dropdownFlag) {\n      if (this.inpValue.length <= 1) {\n        this.inpValue = \".\";\n        this.questionItem.error = new ErrorWrapper();\n      }\n    } else if (this.multiSelectFlag) {\n      if (!Array.isArray(this.inpValue) || this.inpValue.length === 0) {\n        this.inpValue = [];\n        this.questionItem.error = new ErrorWrapper();\n      }\n    } else if (this.dtFlag && this.dateFlag && this.timeFlag) {\n      //this one\n      this.change();\n      if (this.inpValue) {\n        this.selectedHour = this.getProperTime(\"12\", this.selectedHour);\n        this.selectedMinute = this.getProperTime(\"00\", this.selectedMinute);\n        this.selectedMeridiem = this.getProperTime(\"AM\", this.selectedMeridiem);\n \n        if (this.questionItem.x24Hours === false) {\n          this.questionItem.input =\n            (this.selectedMeridiem === \"PM\" && this.selectedHour != \"12\"\n              ? Number(this.selectedHour) + 12\n              : this.selectedHour) +\n            \":\" +\n            this.selectedMinute + \" PM\";\n          if (this.selectedMeridiem === \"AM\" && this.selectedHour === \"12\") {\n            this.questionItem.input = \"00\" + \":\" + this.selectedMinute + \" AM\";\n          }\n          if (this.qbItem.progressBar) {\n            this.inpValue = this.inpValue + \" \" + this.questionItem.input;\n          } else {\n            this.inpValue = this.inpValue + \"T\" + this.questionItem.input;\n          }\n        }\n        if (this.questionItem.x24Hours === true) {\n          this.questionItem.input =\n            this.selectedHour + \":\" + this.selectedMinute;\n          if (this.qbItem.progressBar) {\n            this.inpValue = this.inpValue + \" \" + this.questionItem.input;\n          } else {\n            this.inpValue = this.inpValue + \"T\" + this.questionItem.input;\n          }\n        }\n        if (this.qbItem.progressBar) {\n          var date1: any = this.inpValue.split(\" \");\n          date1 = date1[0].split(\"/\");\n          date1 = [date1[2], date1[1], date1[0]].join(\"-\");\n          date1 = new Date(date1);\n          var date2: any = this.insuranceStartDate.split(\" \");\n          date2 = new Date(date2[0]);\n          if (date1 < date2) {\n            this.questionItem.error = new ErrorWrapper();\n            this.questionItem.error.errorMsg =\n              \"No es posible dar de alta la reclamación debido a que la fecha del incidente es anterior a la fecha de contratación de la póliza\";\n            return;\n          }\n        }\n        if (this.selDate === null || !this.inpValue) {\n          this.questionItem.error = new ErrorWrapper();\n          return;\n        }\n        this.date_TimeMap();\n      }\n    } else if (this.timeFlag && this.dtFlag && !this.dateFlag) {\n      this.date_TimeMap();\n      if (this.questionItem.x24Hours === false) {\n        this.inpValue =\n          (this.selectedMeridiem === \"PM\" && this.selectedHour != \"12\"\n            ? Number(this.selectedHour) + 12\n            : this.selectedHour) +\n          \":\" +\n          this.selectedMinute;\n      } else {\n        this.inpValue = this.selectedHour + \":\" + this.selectedMinute;\n      }\n      if (this.inpValue.length < 5) {\n        this.questionItem.error = new ErrorWrapper();\n        return;\n      }\n    } else if (this.dateFlag && this.dtFlag && !this.timeFlag) {\n      this.change();\n      if (this.inpValue.length < 7 || this.selDate === null) {\n        this.questionItem.error = new ErrorWrapper();\n        return;\n      }\n    } else if (this.fileFlag) {\n      this.inpValue = \"\";\n      if (this.attachments.length > 0) {\n        for (var attachmentItem of this.attachments) {\n          this.inpValue +=\n            attachmentItem.attachmentId +\n            \"@#$\" +\n            attachmentItem.attachmentName +\n            \",\";\n        }\n        this.inpValue = this.inpValue.substr(0, this.inpValue.length - 1);\n      } else {\n        this.questionItem.error = new ErrorWrapper();\n        return;\n      }\n    }\n \n    // Check for the answer before saving to the DB\n    if (!this.questionItem.isOptional && !this.inpValue) {\n      // Show error that the question must be answered\n      this.questionItem.error = new ErrorWrapper();\n      // VD disabled\n      //this.sharedService.hideLoader();\n      this.isButtonDisabled = false\n      return;\n    }\n    // Save the Answer in the DB\n    this.answerWrap = {}\n    this.answerWrap['abId'] = this.abItem.id;\n    this.answerWrap['quesId'] = cQuestion.id;\n    this.answerWrap['quesValue'] = quesValue;\n    this.answerWrap['qTyp'] = typ;\n    // HA 02FEB24 To display the values in summary using this\n    this.allInputValues = [];\n    this.subQuestions.forEach(element => {\n      var inputValue = {};\n      inputValue['Id'] = element?.id;\n      inputValue['type'] = element?.type;\n      inputValue['referenceField'] = element?.referenceField;\n      inputValue['questionText'] = element?.questionText;\n      inputValue['input'] = element?.input;\n      inputValue ? this.allInputValues.push(inputValue) : this.allInputValues;\n    });\n    this.answerWrap.myVal = this.allInputValues;\n    this.answerWrap.ansValue = this.inpValue;\n    this.answerWrap.groupText = cQuestion.groupName;\n   if(this.answerWrap.qTyp == \"Alphanumeric\"){\n      this.answerWrap.ansValue = 'ES'+ this.inpValue;\n    }\n    /*if (cQuestion.type == 'Book'){\n    for (var qb of cQuestion.Questions__r.records){\n    }\n  }*/\n    //this.answerWrap.squesValue = cQuestion.question;\n    this.questionItem.input = this.inpValue;\n    // emit the current question with input to parent\n    let questionAns = {}\n    questionAns['questionDetail'] = this.questionItem;\n    questionAns['answerBookDetail'] = this.abItem;\n    this.handleQuestion.emit(questionAns);\n    this.answerWrap.squesValue = questionTxt ? questionTxt : cQuestion.question;\n    this.saveAnswer();\n  }\n   // RS 09DEC24 Changed keys\n  next() {\n    var cQuestion: any = {}\n    cQuestion = this.questionItem;\n    var typ = cQuestion.type;\n    // If no error then move to next steps\n    if (this.questionItem.error) {\n      return;\n    }\n \n    this.questionStack.push(cQuestion.id);\n    //  this.questionName.push(cQuestion.Name);\n \n    // CONDITIONAL vs OPTIONONLY & UNCONDITIONAL\n    // HA 31-JAN-24 Added ternary even in else conditions below\n    if (cQuestion?.RecordType?.Name == \"CONDITIONAL\") {\n      for (var cOpt of cQuestion.options) {\n        // Radio / Data\n        if (cOpt.value == this.inpValue) {\n          if(cOpt.nextQuestion){\n            this.recordId = cOpt.nextQuestion;\n          }else {\n            this.recordId = cQuestion.nextQuestion;\n          }\n        }\n      }\n      // Could be of type Data and existing value\n      if (this.recordId && typ == \"Data\") {\n        this.recordId = cQuestion.nextQuestion;\n      }\n    } else if (cQuestion?.RecordType?.Name == \"OPTIONONLY\") {\n      //  OPTIONONLY logic\n      this.recordId = cQuestion.nextQuestion;\n    } else if (cQuestion?.RecordType?.Name == \"UNCONDITIONAL\") {\n      //Unconditional  logic\n      //inside Book Type\n      if (cQuestion.type == \"Book\" && cQuestion.questionNumber !='6') {\n        for (let opt of cQuestion.subQuestions) {\n          if (opt.type == \"Dropdown\" || opt.type == \"MultiSelect\" || opt.type == \"Radio\") {\n            for (var opt1 of opt.options) {\n            if (this.valueName == opt1.value) {\n                this.recordId =opt1.nextQuestion || cQuestion.nextQuestion;\n              } else {\n                this.recordId = cQuestion.nextQuestion;\n \n              }\n            }\n          } else {\n            this.recordId = cQuestion.nextQuestion;\n          }\n        }\n      }\n      else if(cQuestion.type == \"Book\" && cQuestion.questionNumber =='6' ) {\n        for (let opt of cQuestion.subQuestions) {\n          if (opt.type == \"Dropdown\" || opt.type == \"MultiSelect\" || opt.type == \"Radio\"){\n          for (var opt1 of opt.options) {\n            if (this.valueName == opt1.value) {\n            this.recordId = opt1.nextQuestion;\n            }\n          }\n        }\n        }\n      }\n \n      else {\n        this.recordId = cQuestion.nextQuestion;\n      }\n    }\n    // HA 31-JAN-24 Added else to keep the assignment default\n    else{\n      this.recordId = cQuestion.nextQuestion;\n    }\n \n    // CATEGORIZATION\n    //this.stepperCateg();\n \n    // Calling the progres bar update function\n    this.answerCount++;\n    this.updateProgress();\n \n \n    // CATEGORIZATION\n    //this.stepperCateg();\n \n    if (this.recordId) {\n      this.readQuestion(this.recordId);\n      this.pop = true;\n    } else {\n      this.pop = false;\n      // VD disabled\n     // this.sharedService.hideLoader();\n      this.isButtonDisabled = false;\n      // Reset the Variables\n      this.inpValue = \"\";\n      this.answerWrap = {}\n      this.optionValues = [];\n      this.subQuestions = [];\n \n      this.resetFlag(typ);\n      this.questionItem = null;\n \n      // Show Summary\n      for (var q of this.questionStack) {\n        var ansWrap = this.answerMap.get(q);\n        if (ansWrap) {\n          if(ansWrap.qTyp == 'File' || ansWrap.qTyp == 'Book'||ansWrap.qTyp == 'List' || ansWrap.qTyp == 'Checkbox'){\n            var newStr = '';\n            for (var ansStr of ansWrap.ansValue.split('@@##$$')) {\n              for (var ansStr1 of ansStr.split('$$@@##')) {\n              //  if(ansStr1.includes('answerString')){ //remove the answer string\n               //   const withoutAnswerString = ansStr1.replace(\"answerString: \", \"\");\n                //  ansStr1 = withoutAnswerString;\n              //  }\n                if (ansStr1.length > 0) {\n                  if (newStr.length == 0) {\n                    newStr = ansStr1;\n                  } else {\n                    newStr += '; ' + ansStr1;  //comma(,) changed as semi colon(;) because of address contains comma(,)\n                    if(this.attachmentsMap.has(ansWrap.quesId)){\n                      for(var att of this.attachmentsMap.get(ansWrap.quesId)){\n                        newStr = newStr.replace(att.attachmentId,'');\n                      }\n                    }\n                    newStr = (newStr.replace(',,',', ')).replace(', ,',', ');\n                    newStr = newStr.startsWith(',') ? newStr.substring(1, newStr.length) : (newStr.endsWith(',') ? newStr.substring(0, newStr.length - 1) : newStr);\n                  }\n                }\n              }\n            }\n            ansWrap.ansValue = newStr;\n            ansWrap.myVal = this.allInputValues;\n        }\n          // VD Check if the summary already contains an entry for the same quesId\n          const existingAnsWrap = this.summary.find(item => item.quesId === ansWrap.quesId);\n          if (existingAnsWrap) {\n            // If it exists, update the ansValue and myVal\n            existingAnsWrap.ansValue = ansWrap.ansValue;\n            existingAnsWrap.myVal = ansWrap.myVal;\n          } else {\n            // If it doesn't exist, push the ansWrap to the summary array\n            this.summary.push(ansWrap);\n          }\n          this.backicon = true;\n        }\n      }\n    }\n  }\n \n  getText(value) {\n    var doc = new DOMParser().parseFromString(value, \"text/html\");\n    return this.sanitizer.bypassSecurityTrustHtml(\n      doc.documentElement.textContent\n    );\n  }\n \n  handleBackClick() {\n    this.back = true;\n    if (this.pop === true) {\n      this.questionName.pop();\n    }\n    this.handleEvent.emit(this.qbItem.backTrackingId);\n    var cQuestion: any = {}\n    cQuestion = this.questionItem;\n    if(cQuestion.questionNumber =='1'){\n      this.handleEvent.emit(this.qbItem.back);\n    }\n \n \n    this.answerCount--;\n    this.updateProgress();\n    // CATEGORIZATION\n    //this.stepperCateg();\n \n    if (this.summary) {\n      this.summary = [];\n    }\n    if(this.summaryData){\n      this.summaryData =[];\n    }\n \n    // Read the previous question from DB\n    // VD disabled\n   // this.sharedService.showLoader();\n    this.isButtonDisabled = true;\n    this.readQuestion(this.questionStack.pop());\n  }\n \n  handleBackClickNew() {\n    this.handleEvent.emit(this.qbItem.edit);\n  }\n \n  //updating status once Q&A completed.\n \n  private updateAnswerBook = (uuid: string) => {\n    if(this.serv == \"api\") {\n      // this.dataService.getAPIData(\n      //   this.tkn,\n      //   [\"AnswerBook\", \"Update\", uuid],\n      //   this.successupdateAB,\n      //   this.failureupdateAB\n      // );\n      let paramMap = { createAnswerBookFlag: false };\n      // HA 09FEB24 to clear the error: createAnswerBook is false\n      paramMap['c__qb_id'] = uuid;\n      paramMap[\"c__record_id\"] = '';\n      this.dataService.getAPIFromNode('AnswerBook','Update',uuid,JSON.stringify(paramMap),this.api).subscribe(\n      (data)=>{\n        this.successupdateAB(JSON.parse(data))\n      },(error) => {\n        console.error('Failed to fetch question books', error);\n      }\n      )\n    } else {\n      // VD 15FEB24 - used processNew method\n       // VD 31NOV24 param changes with new method\n      let paramMap = { createAnswerBookFlag: false };\n      paramMap['c__qb_id'] = uuid;\n      paramMap[\"c__record_id\"] = '';\n      let para = {\n        dataType: \"AnswerBook\",\n        operation: \"Update\",\n        param1: uuid,\n        paramJSON: JSON.stringify(paramMap),\n        languageCode : ''\n      }\n // VD 12Jun24 - translation changes\n      this.sfService.remoteAction(\n        \"NxtController.processData\",\n        [JSON.stringify(para)],\n        this.successupdateAB,\n        this.failureupdateAB\n      );\n    }\n  }\n \n  private successupdateAB = (response) => {\n    let data = response;\n    if(data){\n      this.handleSubmit.emit(data);\n      this.abItem.status = \"Completed\";\n      this.deleteAnswers(data.AnswerBook)\n    }\n  };\n \n  // VD for delete answers\n  deleteAnswers(answerbook){\n    if(this.serv == \"api\"){\n      if(answerbook && answerbook.status == 'Completed'){\n        const ansBookId = answerbook.id;\n        let paramMap = { createAnswerBookFlag: false };\n        // HA 09FEB24 to clear the error: createAnswerBook is false\n        paramMap['c__qb_id'] = '';\n        paramMap[\"c__record_id\"] = '';\n        this.dataService.getAPIFromNode('AnswerBook','delete',ansBookId,JSON.stringify(paramMap),this.api).subscribe(\n        (data)=>{\n          this.successDeleteAB(JSON.parse(data))\n        },(error) => {\n          console.error('Failed to fetch question books', error);\n        }\n        )\n      }\n    }\n  }\n  // VD for delete answers\n  private successDeleteAB = (response) => {\n    if(response.status == 'success'){\n    }else {\n     console.error('error', response.message);\n    }\n }\n\n private failureupdateAB = (response) => {\n };\n\n private readQuestionBook = (uuid: string) => {\n   if(this.serv == \"api\") {\n     // this.dataService.getAPIData(\n     //   this.tkn,\n     //   [\"QuestionBook\", \"read\", uuid],\n     //   this.successReadBook,\n     //   this.failureReadBook\n     // );\n     //this.sharedService.showLoader();\n     let paramMap = { createAnswerBookFlag: true };\n     // HA 09FEB24 to clear the error: createAnswerBook is false\n     paramMap['c__qb_id'] = uuid;\n     paramMap[\"c__record_id\"] = '';\n     this.dataService.getAPIFromNode('QuestionBook','read',uuid,JSON.stringify(paramMap),this.api).subscribe(\n     (data)=>{\n      // this.sharedService.hideLoader();\n       // VD disabled\n       this.isButtonDisabled = false;\n      // this.sharedService.hide();\n       this.successReadBook(JSON.parse(data))\n     },(error) => {\n       console.error('Failed to fetch question books', error);\n     }\n     )\n   } else {\n     // MR 30JAN24 - Passing flag from NGNXT\n     let paramMap = { createAnswerBookFlag: true };\n     // HA 09FEB24 to clear the error: createAnswerBook is false\n     // VD 31NOV24 param changes with new method\n     paramMap['c__qb_id'] = uuid;\n     paramMap[\"c__record_id\"] = '';\n     let para1 = {\n      dataType: \"QuestionBook\",\n      operation: \"read\",\n      param1: uuid,\n      paramJSON: JSON.stringify(paramMap),\n      languageCode : ''\n    }\n     // , JSON.stringify(paramMap)\n// VD 12Jun24 - translation changes\n     this.sfService.remoteAction(\n     // HA 09FEB24 to clear the error: createAnswerBook is false\n       \"NxtController.processData\",\n       [JSON.stringify(para1)],\n       this.successReadBook,\n       this.failureReadBook\n     );\n   }\n }\n private successReadBook = (response) => {\n   if(response != null || response != undefined){\n     this.qbItem = response.questionbook;\n     this.abItem = response.answerbook;\n     this.handleBook.emit(response);\n\n   }\n   if (this.abItem?.status == \"Pending\") {\n     if (\n       this.abItem.answers == null ||\n       this.abItem.answers.length == 0\n     ) {\n       this.readQuestion(this.qbItem.firstQuestion);\n     } else {\n       // Populate the existing answers\n       var lastQuestionId = \"\";\n\n       for (var ansObject of this.abItem.answers) {\n         lastQuestionId = ansObject.quesId;\n\n         this.questionStack.push(ansObject.quesId);\n\n         this.answerMap.set(ansObject.quesId, {\n           quesValue: ansObject.quesValue,\n           ansValue: ansObject.ansValue,\n           quesId: ansObject.quesId,\n           qTyp: ansObject.qTyp,\n           groupText:ansObject.groupText,\n         });\n\n         if (ansObject.qTyp == \"Book\") {\n           var av1 = ansObject.ansValue.split(\"@@##$$\");\n           this.attachmentsMap.set(ansObject.quesId, [\n             { attachmentName: av1[1], attachmentId: av1[0] },\n           ]);\n         } else if (ansObject.qTyp == \"File\") {\n           var attList;\n           var att;\n           for (var attVar of ansObject.ansValue.split(\",\")) {\n             var attIdName = attVar.split(\"@@##$$\");\n             att.attachmentName = attIdName[1];\n             att.attachmentId = attIdName[0];\n             attList.push(att);\n           }\n           this.attachmentsMap.set(ansObject.quesId, attList);\n         }\n       }\n\n       this.questionStack.pop();\n       // Read the last answered question\n       this.readQuestion(lastQuestionId);\n     }\n   } else if (this.abItem?.status == \"Completed\") {\n     this.handleEvent.emit(\"Summaryupdated\");\n     // Temporary Fix for duplicate answers on the summary.\n     this.summary = [];\n     this.percent = 100;\n     this.progressStyle = \"100%\";\n     if(this.serv != 'api'){\n      // VD 31NOV24 wrapper changes\n       for (var answer of this.abItem.answers) {\n         var answers = {};\n         if (answer.qTyp == \"File\") {\n           var files = \"\";\n           var fIndex = 0;\n           var fileList = answer.ansValue.split(\",\");\n           for (var fileIdName of fileList) {\n             var fileName = fileIdName.split(\"@#$\");\n             if (fIndex == 0) {\n               files = fileName[1];\n             } else {\n               files = files + \" ,\" + fileName[1];\n             }\n             fIndex++;\n           }\n\n           answers = {\n             groupText:answer.groupText,\n             quesValue: answer.quesValue,\n             ansValue: files,\n           };\n         //  this.summary.push(answers);\n         } else if (answer.qTyp == \"Book\") {\n           /*  var quesNo=0;\n          if(answer.ansValue.includes(\"@@##$$\")){\n             for (var bqAnswerValue of answer.ansValue.split(\"@@##$$\")) {\n               var quesValue=answer.questionText.split(\"@@##$$\");\n               answers = {};\n               answers = {\n                // groupText:answer.questionText,\n                 quesValue:  \"&lt;p&gt;\"+ quesValue[quesNo]+\"&lt;p&gt;\",\n                 ansValue: bqAnswerValue,\n               };\n               quesNo++;\n               this.summary.push(answers);\n             }\n            }*/\n           if(answer.ansValue.includes(\"@@##$$\")){\n             var answervalues = answer.ansValue.split(\"@@##$$\");\n             answers = {\n              //groupText:answer.groupText,\n              quesValue: answer.quesValue,\n              ansValue: answervalues,\n            };\n           // this.summary.push(answers);\n            }\n           else{\n             answers = {\n               //groupText:answer.groupText,\n               quesValue: answer.quesValue,\n               ansValue: answer.ansValue,\n             };\n            // this.summary.push(answers);\n           }\n         } else {\n          // var ans1 = answer.ansValue.split(\"@@##$$\");\n           answers = {\n             //groupText:answer.groupText,\n             quesValue: answer.quesValue,\n             ansValue: answer.ansValue,\n           };\n          // this.summary.push(answers);\n         }\n       }\n     }\n\n   }\n };\n\n private failureReadBook = (response) => {\n };\n\n private readAnswerbook = (uuid: string) => {\n   if(this.serv = \"api\") {\n     this.dataService.getAPIData(\n       this.tkn,\n       [\"AnswerBook\", \"read\", uuid],\n       this.successAnswerBookRead,\n       this.failureAnswerBookRead\n     );\n   } else {\n     // VD 15FEB24 - used processNew method\n     let paramMap = { createAnswerBookFlag: false };\n     paramMap['c__qb_id'] = uuid;\n     paramMap[\"c__record_id\"] = '';\n     // VD 31NOV24 param changes with new method\n     let para2 = {\n      dataType: \"AnswerBook\",\n      operation: \"read\",\n      param1: uuid,\n      paramJSON: JSON.stringify(paramMap),\n      languageCode : ''\n    }\n// VD 12Jun24 - translation changes\n     this.sfService.remoteAction(\n       \"NxtController.processData\",\n       [JSON.stringify(para2)],\n       this.successAnswerBookRead,\n       this.failureAnswerBookRead\n     );\n   }\n }\n\n\n private successAnswerBookRead = (response) => {\n   if (this.abItem?.status == \"Completed\") {\n     for (var answer of this.abItem.answers) {\n       var av = answer.ansValue.split(\"@@##$$\");\n       var answers = { quesValue: answer.quesValue, ansValue: av, groupText:answer.groupText };\n       this.summary.push(answers);\n     }\n     this.handleEvent.emit(\"Summaryupdated\");\n   }\n };\n\n private failureAnswerBookRead = (response) => {\n };\n\n private readQuestion = (uuid: string) => {\n   if(this.serv == \"api\") {\n     // this.dataService.getAPIData(\n     //   this.tkn,\n     //   [\"Question\", \"read\", uuid],\n     //   this.successRead,\n     //   this.failureRead\n     // );\n     //this.sharedService.showLoader();\n     let paramMap = { createAnswerBookFlag: true };\n     // HA 09FEB24 to clear the error: createAnswerBook is false\n     paramMap['c__qb_id'] = uuid;\n     paramMap[\"c__record_id\"] = '';\n     this.dataService.getAPIFromNode('Question','read',uuid,JSON.stringify(paramMap),this.api).subscribe(\n       (data)=>{\n        // this.sharedService.hideLoader();\n         // VD disabled\n         this.isButtonDisabled = false;\n         this.successRead(JSON.parse(data))\n       },(error) => {\n         //this.sharedService.hideLoader();\n         console.error('Failed to fetch question books', error);\n       }\n       )\n   } else {\n     // HA 09FEB24 to clear the error: createAnswerBook is false\n     // // VD 15FEB24 - make createAnswerBookFlag false only\n     let paramMap = { createAnswerBookFlag: false };\n     paramMap['c__qb_id'] = uuid;\n     paramMap[\"c__record_id\"] = '';\n     // VD 31NOV24 param changes with new method\n     let para2 = {\n      dataType: \"Question\",\n      operation: \"read\",\n      param1: uuid,\n      paramJSON: JSON.stringify(paramMap),\n      languageCode : ''\n    }\n     this.sfService.remoteAction(\n     // HA 09FEB24 to clear the error: createAnswerBook is false\n       \"NxtController.processData\",\n       [JSON.stringify(para2)],\n       this.successRead,\n       this.failureRead\n     );\n   }\n }\n\n private successRead = (response) => {\n  // VD disabled\n  this.isButtonDisabled = false;\n   // HA 02FEB24 For testing for used this and in future it can be used to test with static data\n   // var ab = ['first','last','123','12-12-2000','22','Male','12 cross 1','EmContact','98765','A','Single'];\n   // for(const [index,item] of response.question.subQuestions.entries()){\n   //   item.input = ab[index];\n   // }\n   // Reset the Variables\n\n   if (this.questionItem) {\n     this.inpValue = \"\";\n     this.answerWrap = {}\n     this.optionValues = [];\n     this.subQuestions = [];\n     this.resetFlag(this.questionItem.type);\n   }\n   this.questionItem = response.question;\n\n   if(this.questionItem.type === 'Alphanumeric'){\n     this.splCCBackClick = true;\n   }\n\n   this.currentQuestionId = this.questionItem.id;\n   this.handlePage.emit(this.questionItem.trackingId);\n   this.processQuestion();\n   this.innerhtml = this.sanitizer.bypassSecurityTrustHtml(\n     this.questionItem.additionalRichContent\n   );\n   this.trackId();\n };\n\n trackId() {\n   var qtrackId = this.questionItem.trackingId;\n }\n\n private failureRead = (response) => {\n };\n\n private saveAnswer = () => {\n   // Set the Answer Number based on the Question Stack Length\n   if (this.inpValue != \".\") {\n     this.currentQuestionId = null;\n   }\n   this.answerWrap.ansNumber = this.questionStack.length + 1;\n\n   if(this.serv == \"api\") {\n     // this.dataService.getAPIData(\n     //   this.tkn,\n     //   [\"Answer\", \"create\", JSON.stringify(this.answerWrap)],\n     //   this.successSave,\n     //   this.failureSave\n     // );\n     let paramMap = { createAnswerBookFlag: false };\n     // HA 09FEB24 to clear the error: createAnswerBook is false\n     paramMap['c__qb_id'] = '';\n     paramMap[\"c__record_id\"] = '';\n     this.dataService.getAPIFromNode('Answer','create',JSON.stringify(this.answerWrap),JSON.stringify(paramMap),this.api).subscribe(\n     (data)=>{\n       this.successSave(JSON.parse(data))\n     },(error) => {\n       console.error('Failed to fetch question books', error);\n     }\n     )\n   } else {\n     // VD 15FEB24 - used processNew method\n     let paramMap = { createAnswerBookFlag: false };\n     paramMap['c__qb_id'] = '';\n     paramMap[\"c__record_id\"] = '';\n     // VD 31NOV24 param changes with new method\n     let para3 = {\n      dataType: \"Answer\",\n      operation: \"create\",\n      param1: JSON.stringify(this.answerWrap),\n      paramJSON: JSON.stringify(paramMap),\n      languageCode : ''\n    }\n// VD 12Jun24 - translation changes\n     this.sfService.remoteAction(\n       \"NxtController.processData\",\n       [JSON.stringify(para3)],\n       this.successSave,\n       this.failureSave\n     );\n   }\n };\n\n htmlDecode(input) {\n   var doc = new DOMParser().parseFromString(input, \"text/html\");\n   return doc.documentElement.textContent;\n }\n\n private successSave = (response) => {\n   if (response.status == \"success\") {\n     //this.abItem = response.answerbook;\n     this.answerMap.set(response.answer.quesId, response.answer);\n   } else {\n     this.questionItem.error = new ErrorWrapper();\n     this.questionItem.error.errorMsg = response.error.errorMsg;\n   }\n   if(!this.backButtonFlag){\n     this.next();\n   }\n };\n\n private failureSave = (response) => {\n };\n\n private processQuestion = () => {\n   this.pop = true;\n\n   // if(!this.back){\n   //   this.questionName.push(this.questionItem.Name)\n   // }\n\n   if (this.qbItem.progressBar === true) {\n     if (!this.back) {\n       this.questionName.push(this.questionItem.Name);\n     }\n     this.back = false;\n     if (this.questionName[0] === this.questionName[1]) {\n       this.questionName.pop();\n     }\n\n     this.currentName = this.questionItem.Name;\n     this.pathquestion = this.questionName.indexOf(this.currentName);\n     this.possibilities = this.qbItem.possibilities;\n   }\n\n   this.myDatePickerOptions;\n   this.day();\n\n   // Set the Flags to show right fields\n   this.setFlag(this.questionItem.type);\n\n   // Check the existing answer from answerMap\n   if (this.answerMap.has(this.questionItem.id)) {\n     var eAnswer = this.answerMap.get(this.questionItem.id);\n     // Get the existing answer from the Map\n     this.inpValue = eAnswer.ansValue;\n     if (this.attachmentsMap.has(this.questionItem.id)) {\n       this.attachments = this.attachmentsMap.get(this.questionItem.id);\n     }\n   } else {\n     this.attachments = [];\n   }\n   if(this.splCCBackClick && this.inpValue && this.inpValue.includes('ES')){\n     this.splCCBackClick = false;\n     this.inpValue = this.inpValue.replace('ES','');\n   }\n\n   if (this.checkboxFlag) {\n     // Set the Options for Checkbox\n     this.setOptions(this.questionItem.options);\n   } else if (this.bookFlag) {\n//  HA 20FEB24 Label Fix\n     this.questionItem.subQuestions.forEach(element => {\n       element.questionText = element.questionText.replace(/<[^>]+>/g, '');\n     });\n     this.setSubQuestions(this.questionItem.subQuestions);\n   } else if (this.listFlag) {\n     // Set the LocalSubQuestions\n     if(!this.localSubQMap.has(this.questionItem.id)){\n       this.setSubQuestions(this.questionItem.subQuestions);\n     }\n   } else if (this.dtFlag) {\n     this.selectedHour = \"\";\n     this.selectedMinute = \"\";\n     this.selDate = \"\";\n     // 2021-5-16T00:00\n     if (this.dateMap.has(this.questionItem.id)) {\n       this.selDate = this.dateMap.get(this.questionItem.id);\n     }\n     if (this.selectedhourMap.has(this.questionItem.id)) {\n       this.selectedHour = this.selectedhourMap.get(this.questionItem.id);\n     }\n     if (this.selectedminuteMap.has(this.questionItem.id)) {\n       this.selectedMinute = this.selectedminuteMap.get(this.questionItem.id);\n     }\n     if (this.questionItem.x24Hours === true) {\n       this.hours.push(\n         \"13\",\n         \"14\",\n         \"15\",\n         \"16\",\n         \"17\",\n         \"18\",\n         \"19\",\n         \"20\",\n         \"21\",\n         \"22\",\n         \"23\",\n         \"00\"\n       );\n     }\n     if (this.questionItem.x24Hours === false) {\n       this.hours = this.hours.slice(0, 12);\n     }\n     if (this.dtFlag && this.inpValue) {\n       var dtVal = this.inpValue.split(\"T\");\n       var dtval0 = this.inpValue.split(\" \");\n       this.inpValue = dtVal[0];\n       this.inpValue = dtval0[0];\n\n       this.questionItem.input = dtVal[1];\n       this.questionItem.input = dtval0[1];\n     }\n     if (\n       this.questionItem.isDateBackward ||\n       this.questionItem.isDateForward\n     ) {\n       if (this.questionItem.isDateBackward === true) {\n         this.myDatePickerOptions.disableSince = {\n           year: this.today.getFullYear(),\n           month: this.today.getMonth() + 1,\n           day: this.today.getDate() + 1,\n         };\n       }\n       if (this.questionItem.isDateForward === true) {\n         this.myDatePickerOptions.disableUntil = {\n           year: this.today.getFullYear(),\n           month: this.today.getMonth() + 1,\n           day: this.today.getDate(),\n         };\n       }\n     }\n   } else if (this.fileFlag) {\n     this.fileUI();\n     // logic\n     this.allowedFileExtension =\n     this.questionItem.allowedFileExtensions?.split(\";\");\n   }\n\n   if (this.qbItem.progressBar === true) {\n     this.updateProgress();\n   }\n };\n\n setFlag(typ) {\n   if (typ) {\n     // Set the Flags\n     if (typ == \"Text\") {\n       this.textFlag = true;\n\n       //this.numberFlag = true;\n     } else if (typ == \"Number\") {\n       this.numberFlag = true;\n     } else if (typ == \"AlphaNumeric\") {\n       this.alphanumericFlag = true;\n       /*if(this.inpValue.length === 0){\n         this.inpValue='ES'\n       }*/\n     } else if (typ == \"Email\") {\n       this.emailFlag = true;\n     } else if (typ == \"File\") {\n       this.fileFlag = true;\n     } else if (typ == \"DateTime\") {\n       this.dtFlag = true;\n       this.timeFlag = true;\n       this.dateFlag = true;\n     } else if (typ == \"TextArea\") {\n       this.taFlag = true;\n     } else if (typ == \"Radio\") {\n       this.radioFlag = true;\n      } \n    //   else if (typ == \"RichTextArea\") {\n    //     this.rtaFlag = true;\n    //  } \n     else if (typ == \"Dropdown\") {\n       this.dropdownFlag = true;\n     } else if (typ == \"MultiSelect\") {\n       this.multiSelectFlag = true;\n     } else if (typ == \"Checkbox\") {\n       this.checkboxFlag = true;\n     } else if (typ == \"Book\") {\n       this.bookFlag = true;\n     }else if (typ == 'List'){\n       this.listFlag = true;\n     } else if (typ == \"Time\") {\n       this.dtFlag = true;\n       this.timeFlag = true;\n     } else if (typ == \"Date\") {\n       this.dtFlag = true;\n       this.dateFlag = true;\n     }\n   }\n }\n\n resetFlag(typ) {\n   if (typ) {\n     // Set the Flags\n     if (typ == \"Text\") {\n       this.textFlag = false;\n       //this.numberFlag = false;\n     } else if (typ == \"Number\") {\n       this.numberFlag = false;\n     } else if (typ == \"Alphanumeric\") {\n       this.alphanumericFlag = false;\n     } else if (typ == \"Email\") {\n       this.emailFlag = false;\n     } else if (typ == \"File\") {\n       this.fileFlag = false;\n      } \n    //   else if (typ == \"RichTextArea\") {\n    //     this.rtaFlag = false;\n    //  } \n     else if (typ == \"DateTime\") {\n       this.dtFlag = false;\n       this.dateFlag = false;\n       this.timeFlag = false;\n     } else if (typ == \"TextArea\") {\n       this.taFlag = false;\n     } else if (typ == \"Radio\") {\n       this.radioFlag = false;\n     } else if (typ == \"Dropdown\") {\n       this.dropdownFlag = false;\n     } else if (typ == \"MultiSelect\") {\n       this.multiSelectFlag = false;\n     } else if (typ == \"Checkbox\") {\n       this.checkboxFlag = false;\n     } else if (typ == \"Book\") {\n       this.bookFlag = false;\n     } else if (typ == 'List'){\n       this.listFlag = false;\n     } else if (typ == \"Time\") {\n       this.dtFlag = false;\n       this.timeFlag = false;\n     } else if (typ == \"Date\") {\n       this.dtFlag = false;\n       this.dateFlag = false;\n     }\n   }\n }\n\n setOptions(records) {\n   for (var opt of records) {\n     var ov = {}\n     ov['id'] = opt.id;\n     ov['Name'] = opt.Name;\n     ov['value'] = opt.value;\n     ov['nextQuestion'] = opt.nextQuestion;\n     ov['checked'] = false;\n\n     if (\n       this.inpValue &&\n       this.inpValue.split(\"@@##$$\").includes(opt.value)\n     ) {\n       ov['checked'] = true;\n     }\n\n     this.optionValues.push(ov);\n   }\n }\n\n // Capture and Process Child Event\n childEventCapture(event, ques?:any) {\n   this.changeService.announceChange(event);\n   // HA 31-JAN-24 Assign values to dropdown question\n   ques.input = event?.valueObj;\n   //ques.input = event; // here when using the ng-select got event as value\n }\n\n//  RS 06JAN25\n// for richtext\n handleRichTextChange(value: string) {\n  // this.inpValue = value;\n  // this.clearError(); \n}\n\n setSubQuestions(records) {\n   var qaMap = new Map();\n   if (this.inpValue) {\n     var aIndex = 0;\n     // search changed as semi colon because of address contains comma\n     if ((this.inpValue.search(\"; \") == -1)) {\n      // const withoutAnswerString = this.inpValue.replace(\"answerString: \", \"\"); //remove the answer string\n      // this.inpValue = withoutAnswerString;\n       this.inpValue = this.inpValue + '@@##$$' ;\n       for (var ansStr of this.inpValue.split(\"@@##$$\")) {\n         aIndex++;\n         qaMap.set(aIndex, ansStr);\n       }\n     } else {\n       for (var ansStr of this.inpValue.split(\"; \")) {\n         aIndex++;\n         qaMap.set(aIndex, ansStr);\n       }\n     }\n   }\n\n   for (var ques of records) {\n     if (ques.type == \"File\") {\n       this.valueName1 = ques.allowedFileExtensions;\n     }\n\n     var ans = '';\n     if (qaMap.has(ques.questionNumber)) {\n         ques.input = qaMap.get(ques.questionNumber);\n         if(ques.input.indexOf('$$@@##') > 0){\n           ans = ques.input.substring(ques.input.indexOf('$$@@##')+6,ques.input.length);\n           ques.input = ques.input.substring(0,ques.input.indexOf('$$@@##'));\n         }\n       }\n\n     if ((ques.type === \"Date\") && (ques.isDateBackward || ques.isDateForward)) {\n       if (ques.isDateBackward === true) {\n         this.myDatePickerOptions.disableSince = {\n           year: this.today.getFullYear(),\n           month: this.today.getMonth() + 1,\n           day: this.today.getDate() + 1,\n         };\n       }\n       if (ques.isDateForward === true) {\n         this.myDatePickerOptions.disableUntil = {\n           year: this.today.getFullYear(),\n           month: this.today.getMonth() + 1,\n           day: this.today.getDate(),\n         };\n       }\n     }\n\n     this.subQuestions.push(ques);\n     for(var i=0; i<this.subQuestions.length;i++){\n       // to show/hide the dependent dropdown only field using the dropDownOnly boolean\n       if(this.subQuestions[i].size == 4){\n         this.subQuestions[i].dropDownOnly = true;\n       }else{\n         this.subQuestions[i].dropDownOnly = false;\n       }\n     }\n     if(ans != ''){\n       for(var an of (ans.split('$$@@##'))){\n         var sQ = {}\n         Object.assign(sQ,ques);\n         sQ['input'] = an;\n         this.subQuestions.push(sQ);\n       }\n     }\n   }\n   if (this.valueName1 != null && this.valueName1.length > 0) {\n     this.bookFlagAccept = this.valueName1.split(\";\");\n   }\n   this.structLocalSubQuestion(null);\n   // HA 02FEB24 On Edit to display the value usiing this\n   if(this.allInputValues.length > 0){\n     this.subQuestions.forEach(element => {\n       for(let singleInput of this.allInputValues){\n         if(element.id == singleInput.id){\n           element.input = singleInput.input;\n         }\n       }\n     });\n   }\n }\n\n optionChange(selValue) {\n   let radioTrackingId: string = \"\";\n   for (var opt of this.questionItem.options) {\n     if (opt.value == selValue) {\n       radioTrackingId = opt.trackingId;\n     }\n   }\n\n   this.handleEvent.emit(radioTrackingId);\n   this.clearError();\n   this.inpValue = selValue;\n }\n\n clearError() {\n   if (this.questionItem.error) {\n     this.questionItem.error = null;\n   }\n }\n\n clearLocalSubQuesError(quesId) {\n   quesId.error = null;\n }\n\n inputValidate(e) {\n   var keyCode = e.keyCode || e.which;\n   // Only ASCII character in that range allowed\n   var ASCIICode = (e.which) ? e.which : e.keyCode;\n   if (ASCIICode > 31 && (ASCIICode < 48 || ASCIICode > 57)){\n     return false;\n   }else{\n     return true;\n   }\n }\n\n CCOnChange(inpValue: string) {\n\n     if (inpValue.length == 2) {\n       this.inpValue += \" \";\n     }\n     else if (inpValue.length == 7) {\n       this.inpValue += \" \";\n     }\n     else if (inpValue.length == 12) {\n       this.inpValue += \" \";\n     }\n     else if (inpValue.length == 17) {\n       this.inpValue += \" \";\n     }\n     else if (inpValue.length == 22) {\n       this.inpValue += \" \";\n     }\n\n }\n\n isNotValidAccNumber(s: string) {\n   s = s.replace(/\\s+/g, \"\");\n   s = 'ES' + s;\n   var isNotValidStr = false;\n   if (s.length == 24) {\n     for (var i = 0; i < s.length; i++) {\n       if (i <= 1 && /[a-zA-Z]/.test(s.charAt(i))) {\n       } else if (i > 1 && /[0-9]/.test(s.charAt(i))) {\n       } else {\n         isNotValidStr = true;\n       }\n     }\n   } else {\n     isNotValidStr = true;\n   }\n   return isNotValidStr;\n }\n\n clearSQError(quesId) {\n   var sqList = this.subQuestions.filter((item) => item.id == quesId);\n   for (var sq of sqList) {\n     sq.error = null;\n   }\n }\n\n uploadFile(event,ques?:any) {\n   this.clearError();\n   this.fileTypeIncorrect = false;\n   var local = this;\n   local.attachment = event.target.files[0];\n   // Validate the file extension\n   let fileNameWithType: string =\n     local.attachment && local.attachment.name.toLowerCase();\n   if (\n     !fileNameWithType.endsWith(\".jpg\") &&\n     !fileNameWithType.endsWith(\".png\") &&\n     !fileNameWithType.endsWith(\".pdf\") &&\n     !fileNameWithType.endsWith(\".jpeg\") &&\n     !fileNameWithType.endsWith(\".heic\") &&\n     !fileNameWithType.endsWith(\".heif\") &&\n     !fileNameWithType.endsWith(\".JPG\") &&\n     !fileNameWithType.endsWith(\".PNG\") &&\n     !fileNameWithType.endsWith(\".PDF\") &&\n     !fileNameWithType.endsWith(\".JPEG\") &&\n     !fileNameWithType.endsWith(\".HEIC\") &&\n     !fileNameWithType.endsWith(\".HEIF\")\n   ) {\n     local.fileTypeIncorrect = true;\n   }\n   // Return when the file type is incorrect\n   if (local.fileTypeIncorrect) {\n     return;\n   }\n   let fileContent: any;\n   var reader = new FileReader();\n\n   reader.onload = function () {\n     fileContent = reader.result;\n     local.fileExceededLimit = local.attachment.size > 3242880; //Validating file size\n     // Upload the file to Salesforce when the limit is within range\n     if (!local.fileExceededLimit) {\n       let fileWrapper = {}\n       fileWrapper['parentId'] = local.abItem.id;\n       fileWrapper['fileName'] = local.attachment.name;\n       fileWrapper['fileContent'] = fileContent;\n       local.createAttachment(fileWrapper);\n       ques.input = fileWrapper['fileName'];\n     }\n   };\n   reader.readAsDataURL(event.target.files[0]);\n }\n\n private successAttachmentCreate = (response) => {\n   let createdAttachment: any = {\n    attachmentId: response.attachmentId,\n    attachmentName: response.attachmentName,\n    lastModifiedDate: this.attachment.lastModifiedDate\n   };\n   this.attachments.push(createdAttachment);\n   this.attachmentsMap.set(this.questionItem.id, this.attachments);\n };\n\n private successAttachmentDelete = (response) => {\n   for (let i = 0; i < this.attachments.length; i++) {\n     if (this.attachments[i].attachmentId === this.attachmentId) {\n       this.attachments.splice(i, 1);\n     }\n   }\n };\n\n private failureAttachmentCreate = (response) => {\n };\n\n private failureAttachmentDelete = (response) => {\n };\n\n handleSubmitClick() {\n   this.handleEvent.emit(this.qbItem.submitTrackingId);\n   this.updateAnswerBook(this.abItem.id);\n }\n\n handleCancelClick() {\n   this.handleEvent.emit(this.qbItem.cancelTrackingId);\n }\n\n private createAttachment = (fileWrapper: any) => {\n   if(this.serv == \"api\") {\n     // this.dataService.getAPIData(\n     //   this.tkn,\n     //   [\"Attachment\", \"create\", JSON.stringify(fileWrapper)],\n     //   this.successAttachmentCreate,\n     //   this.failureAttachmentCreate\n     // );\n     let paramMap = { createAnswerBookFlag: false };\n     paramMap['c__qb_id'] = '';\n     paramMap[\"c__record_id\"] = '';\n     this.dataService.getAPIFromNode('Attachment','create', JSON.stringify(fileWrapper),JSON.stringify(paramMap),this.api).subscribe(\n     (data)=>{\n       this.successAttachmentCreate(JSON.parse(data))\n     },(error) => {\n       this.failureAttachmentCreate(error);\n       console.error('Failed to fetch question books', error);\n     }\n     )\n   } else {\n     // VD 15FEB24 - used processNew method\n     let paramMap = { createAnswerBookFlag: false };\n     paramMap['c__qb_id'] = '';\n     paramMap[\"c__record_id\"] = '';\n   // VD 12Jun24 - translation changes\n   // VD 31NOV24 param changes with new method\n    let para3 = {\n      dataType: \"Attachment\",\n      operation: \"create\",\n      param1: JSON.stringify(fileWrapper),\n      paramJSON: JSON.stringify(paramMap),\n      languageCode : ''\n    }\n     this.sfService.remoteAction(\n       \"NxtController.processData\",\n       [JSON.stringify(para3)],\n       this.successAttachmentCreate,\n       this.failureAttachmentCreate\n     );\n   }\n }\n\n deleteAttachment(attachmentId: string) {\n   this.attachmentId = attachmentId;\n   this.handleEvent.emit(\"deleteAttachment\");\n   this.deleteSFAttachment(attachmentId);\n }\n\n private deleteSFAttachment = (fileId: string) => {\n   if(this.serv == \"api\") {\n     // this.dataService.getAPIData(\n     //   this.tkn,\n     //   [\"Attachment\", \"delete\", fileId],\n     //   this.successAttachmentDelete,\n     //   this.failureAttachmentDelete\n     // );\n     let paramMap = { createAnswerBookFlag: false };\n     paramMap['c__qb_id'] = '';\n     paramMap[\"c__record_id\"] = '';\n     this.dataService.getAPIFromNode('Attachment','delete',fileId ,JSON.stringify(paramMap),this.api).subscribe(\n     (data)=>{\n       this.successAttachmentDelete(JSON.parse(data))\n     },(error) => {\n       this.failureAttachmentDelete(error);\n       console.error('Failed to fetch question books', error);\n     }\n     )\n   } else {\n     // VD 15FEB24 - used processNew method\n     let paramMap = { createAnswerBookFlag: false };\n     paramMap['c__qb_id'] = '';\n     paramMap[\"c__record_id\"] = '';\n     // VD 31NOV24 param changes with new method\n     let para4 = {\n      dataType: \"Attachment\",\n      operation: \"delete\",\n      param1: fileId,\n      paramJSON: JSON.stringify(paramMap),\n      languageCode : ''\n    }\n     this.sfService.remoteAction(\n       \"NxtController.processData\",\n       [fileId,JSON.stringify(para4)],\n       this.successAttachmentDelete,\n       this.failureAttachmentDelete\n     );\n   }\n }\n\n getFileName(fileNamewithIdandType) {\n   //truncate file path\n   var fileNameWithType = fileNamewithIdandType.substr(\n     fileNamewithIdandType.indexOf(\"::::\") + 4\n   );\n   return fileNameWithType; //fileNameWithType.replace(/^(.*(\\/|\\\\))(.+)$/, '$3');\n }\n fileUI() {\n   if (this.attachments.length === 0) {\n   }\n }\n\n //Update function for categorization\n // stepperCateg() {\n //   this.firstFormGroup = this._formBuilder.group({\n //     firstCtrl: ['', Validators.required]\n //   });\n //   this.secondFormGroup = this._formBuilder.group({\n //     secondCtrl: ['', Validators.required]\n //   });\n\n // }\n\n // Update Function for the Progress Bar\n updateProgress() {\n   if (this.qbItem.progressBar === true) {\n     let j = [];\n     for (let i = 0; i < this.possibilities.total; i++) {\n       var pathposs = Object.values(this.possibilities.paths[i].questions);\n       if (pathposs[this.pathquestion] === this.currentName) {\n         j.push(i);\n         this.check = true;\n       } else {\n         this.check = false;\n       }\n     }\n     if (j.length === 1) {\n       this.count = j[0];\n     }\n     if (j.length > 1) {\n       var width =\n         90 * (this.questionStack.length / this.possibilities.maxQuestions);\n       this.progressStyle = Math.round(width) + \"%\";\n     } else if (j.length === 1) {\n       var width =\n         90 *\n         (this.questionStack.length /\n           this.possibilities.paths[this.count].count);\n       this.progressStyle = Math.round(width) + \"%\";\n     }\n     this.percent = +Math.round(width);\n   }\n }\n\n townName(area) {\n   this.selectedValue = area.town;\n   this.tempoAddress = [];\n }\n\n getTownLocal() {\n   this.tempoAddress = [];\n   if (this.selectedValue.length > 0) {\n     for (var val of this.localaddress) {\n       if (\n         val.town.substring(0, this.selectedValue.length) == this.selectedValue\n       ) {\n         this.tempoAddress.push(val);\n         if (this.tempoAddress.length == 6) {\n           break;\n         }\n       }\n     }\n   }\n   document.getElementById(\"selectList\").style.display = \"block\";\n   this.setSearchListWidth();\n }\n\n clearList() {\n   setTimeout(() => {\n     this.tempoAddress = [];\n   }, 500);\n }\n\n setSearchListWidth() {\n   //to resize search list based on the screen size\n   const searchBoxWidth = window.document.getElementById(\"autocomplete-input\").offsetWidth;\n   document.getElementById(\"selectList\").style.width = searchBoxWidth + \"px\";\n }\n\n   getCode(){\n     this.tempoAddress = [];\n     if (this.selectedPostalcode.length > 0) {\n       for (var val of this.allAddress) {\n         if (val.zipCode.substring(0, this.selectedPostalcode.length) == this.selectedPostalcode) {\n           this.tempoAddress.push(val);\n           if (this.tempoAddress.length == 6) {\n             break;\n           }\n         }\n       }\n     }\n     document.getElementById(\"selectList\").style.display = \"block\";\n     this.setSearchListWidth();\n   }\n   getPostalcode(value){\n    this.places=[];\n    this.province=[];\n     var province;\n     var town;\n     this.selectedPostalcode = value.zipCode;\n     this.selectedValue = value.country;\n     this.tempoAddress=[];\n\n\n     for(var val of this.localaddress){\n       if(this.selectedPostalcode == val.zipCode ){\n         this.places.push(val);\n         this.province.push(val);\n         this.selectedValue = val.country;\n         province = val.province\n         town = val.town;\n       }\n     }\n     if(this.places.length == 1){\n\n       this.selectedProvince =province;\n       this.selectedCity = town;\n     }else if(this.places.length >1 || this.places.length ==0){\n\n         this.selectedCity ='';\n         this.selectedProvince='';\n     }\n   }\n   closeDropdown() {\n     if(this.selectedPostalcode.length == 5){\n       this.getPostalcode({zipCode:this.selectedPostalcode});\n     }\n\n  setTimeout(()=> {\n     document.getElementById('selectList').style.display = \"none\";\n   }, 500);\n  }\n\n\n  //Plus button implementation.\n  structLocalSubQuestion(ques: any){\n     for(var i = 0; i < this.subQuestions.length; i++){\n       var localSubQuestion = {}\n         localSubQuestion['id'] = this.subQuestions[i].id;\n         localSubQuestion['Name'] = this.subQuestions[i].Name;\n         localSubQuestion['question'] = this.subQuestions[i].question;\n         localSubQuestion['questionText'] = this.subQuestions[i].questionText;\n         localSubQuestion['type'] = this.subQuestions[i].type;\n         localSubQuestion['title'] = this.subQuestions[i].title;\n         localSubQuestion['subTitle'] = this.subQuestions[i].subTitle;\n         localSubQuestion['isOptional'] = this.subQuestions[i].isOptional;\n         localSubQuestion['errorMessage'] = this.subQuestions[i].errorMessage;\n         localSubQuestion['nextQuestion'] = this.subQuestions[i].nextQuestion;\n         localSubQuestion['groupName'] = this.subQuestions[i].groupName;\n         localSubQuestion['questionNumber'] = this.subQuestions[i].questionNumber;\n         localSubQuestion['allowedFileExtensions'] = this.subQuestions[i].allowedFileExtensions;\n         localSubQuestion['uniqueSubQId'] = ''+this.subQuestions[i].id + i;\n         localSubQuestion['input'] = this.subQuestions[i].input;\n         this.localSubQuestions.push(localSubQuestion);\n     }\n this.localSubQMap.set(this.questionItem.id,this.localSubQuestions);\n this.localSubQuestions = [];\n }\n\n addInputBox(question: any, index: number){\n   var arra = this.localSubQMap.get(this.questionItem.id);\n   var qIndex = arra.indexOf(question);\n   var ques: any = {}\n   Object.assign(ques, question);\n   if(this.keyIndex == index){\n     ques.uniqueSubQId = ques.id + (String(index+1));\n     this.keyIndex++;\n   }else{\n     this.keyIndex++;\n     ques.uniqueSubQId = ques.id + (String(this.keyIndex));\n   }\n   ques.input = '';\n   arra.splice(qIndex+1, 0, ques);\n\n   this.localSubQMap.set(this.questionItem.id,arra);\n }\n\n removeAddress(quesUniqueId: string, qName: string) {\n   var val = this.localSubQMap.get(this.questionItem.id);\n   var keyindex = 0;\n\n   for(let i=0; i<val.length; i++){\n     if(val[i].Name == qName){\n       keyindex++;\n     }\n   }\n\n   if(this.localSubQMap.has(this.questionItem.id) && keyindex >1){\n     var reorder = val.filter((item) => item.uniqueSubQId !== quesUniqueId)\n     this.localSubQMap.set(this.questionItem.id,reorder);\n     keyindex--;\n   }\n }\n\n getLocalSubQuestions(id: String){\n   return this.localSubQMap.get(id);\n }\n\n //Single Add button functionality for List type\nAdd(question: any){\n   this.addFlag =  false;\n   var arra = this.localSubQMap.get(this.questionItem.id);\n   var index  = arra.length;\n   var a = arra.slice(-1).pop();\n   this.indexCount  = a.questionNumber;\n\n   for (var i = 0; i < this.indexCount ; i++) {\n     var ques: any = {}\n     Object.assign(ques, question[i]);\n     this.keyIndex++;\n     ques.uniqueSubQId = ques.id + (String(this.keyIndex));\n     ques.input = '';\n     arra.splice(index+(this.indexCount-1), 0, ques);\n   this.localSubQMap.set(this.questionItem.id,arra);\n   }\n   this.addFlag = true;\n }\n\n handleLocationSelected(location: any,ques:any) {\n   ques.input = location;\n }\n\n selectedInput(input:any ,ques:any){\n   ques.input = input;\n }\n\n handleTextareaValueChange(value :string){\n }\n getData(data:any){\n }\n\n displayDate(dateSelected: any,ques:any){\n   // SKS14JUN25 Parse the date string using native JavaScrip and assign it to this.selectedDate\n   const date = new Date(dateSelected.value);\n   const pad = (n: number) => n.toString().padStart(2, '0');\n   const formattedDate = `${date.getFullYear()}-${pad(date.getMonth() + 1)}-${pad(date.getDate())} ` +\n                         `${pad(date.getHours())}:${pad(date.getMinutes())}:${pad(date.getSeconds())}`;\n   ques.input = formattedDate;\n    }\n\n getKey(item: any): any {\n   return Object.keys(item)[0];\n }\n\n getValue(item: any): any {\n   return Object.values(item)[0];\n }\n}","<!-- custom loader -->\n<!-- Back Processing -->\n<!-- <div *ngIf=\"backicon == false\" >\n  <div class=\"backicon\" >\n    <button (click)=\"handleBackClick()\" [class]=\" abItem?.status == 'Completed' ? 'summary-volver':'app-back1'\">\n    <img class=\"icon-arrow-back\" src=\"https://rnxt.s3.amazonaws.com/MytIcon/icon-arrow-back.png\" alt=\"Scroll down\"> {{ qbItem?.back }}\n    </button>\n  </div>\n</div> -->\n\n<!-- Question Hanlding -->\n<!-- VD removed unwanted condition -->\n<!-- RS 09DEC24 Changed keys-->\n<div *ngIf=\"questionItem\" class=\"questiondiv1 padd-bottom\" [dir]=\"direction\">\n  <!-- Progress Bar & Title -->\n  <div *ngIf=\"questionItem.title\">\n    <h1>{{ questionItem?.title }}</h1>\n    <div>{{ questionItem?.subTitle }}</div>\n  </div>\n\n  <!-- Progress & Grouping -->\n  <div>\n    <!-- RS 09DEC24 Changed keys-->\n    <!-- Show the Group/Module related to the Progress -->\n    <div *ngIf=\"questionItem.groupName && qbItem.progressBar\"\n        [ngClass]=\"{ questionalign: !qbItem?.progressBar }\">\n      <div class=\"nxt-largeTitle\">\n        <h3 class=\"myt-font6 myt-text3\">\n          {{ questionItem?.groupName }}\n        </h3>\n        <div *ngIf=\"questionItem.subText != '¿En qué país ocurrió?'\" class=\"myt-font5 myt-text1\">{{questionItem?.subText}}</div>\n        <div *ngIf=\"questionItem.subText === '¿En qué país ocurrió?'\" class=\"myt-font10 myt-text2\">{{questionItem?.subText}}</div>\n      </div>\n    </div>\n  </div>\n  <!-- RS 09DEC24 Changed keys-->\n  <!-- Question Handling -->\n    <!-- VD 10Aug24- question no -->\n  <div>\n    <div *ngIf=\"questionItem.questionText && questionItem.style?.showLabel !== false\" style=\"display: flex;\">\n      <span>{{questionItem?.questionNumber}}.</span>\n      <p class=\"nxt-label\" [innerHTML]=\"getText(questionItem?.questionText)\">\n       {{(questionItem.id+'.questionText') | nxtCustomTranslate : questionItem?.questionText}}\n      </p>\n    </div>\n    <!-- Title -->\n    <!-- <div *ngIf=\"questionItem.isTitle\">\n      <div *ngIf=\"questionItem.type != 'Book' && questionItem.questionNumber!='6' && questionItem.questionNumber!='9'\"> \n        <h3 class=\"questionalign  myt-font3 myt-align myt-text4\" [innerHTML]=\"getText(questionItem?.questionText)\">\n          {{questionItem?.questionText}}\n        </h3>\n      </div>\n    </div> -->\n    <!-- HA 31-JAN-24 Removed the unwanted styling class -->\n    <!-- <div *ngIf=\"!questionItem.isTitle\" [class]=\"qbItem.isShengel ? 'header-style' : 'question-f-size'\">\n      <div [innerHTML]=\"getText(questionItem?.questionText)\" >\n        {{ questionItem?.questionText }}\n      </div>\n    </div> -->\n\n    <!-- This should be removed with Custom Styling - MR - 11AUG23 -->\n    <!-- <div *ngIf=\"questionItem.type == 'Book'\">\n      <div *ngIf=\"questionItem.questionNumber=='6'\">\n        <h3 class=\"myt-321\" [innerHTML]=\"getText(questionItem?.questionText)\">\n          {{ questionItem?.questionText }}\n        </h3>\n      </div>\n    </div> -->\n    \n    <!-- This should be removed with Custom Styling - MR - 11AUG23 -->\n    <!-- <div *ngIf=\"questionItem.type == 'File' \">\n      <div *ngIf=\"questionItem.questionNumber=='9'\">\n        <h3 class=\"myt-345\" [innerHTML]=\"getText(questionItem?.questionText)\">\n          {{questionItem?.questionText}}\n        </h3>\n      </div>\n    </div> -->\n  </div>\n\n  <!-- Additional Info -->\n  <!-- The below code can be written effectively nested ngIf for Rich Text & Other onw for Progress Bar -->\n  <div *ngIf=\"questionItem.additionalRichContent && qbItem.progressBar\" >\n    <div\n      class=\"nxt-additional \" [innerHTML]=\"innerhtml\">\n    </div>\n  </div>\n  <div *ngIf=\"questionItem.additionalRichContent && !qbItem.progressBar\">\n    <div class=\"info-alert ques-alert1\">\n      <div class=\"infodiv\" [innerHTML]=\"innerhtml\"></div>\n    </div>\n  </div>\n\n  <!-- Dropdown-->\n  <div *ngIf=\"dropdownFlag\" >\n    <div class=\"nxt-dis-flex\">\n      <select class=\"nxtdropdown\"\n        [ngClass]=\"{\n          'dt-line nxt-myt-align3 nxt-myt-align2 dpDown nxt-dropbox down1 myt-dropbox myt-border-r myt-font1': qbItem?.progressBar,\n          'custom-select': !qbItem?.progressBar\n        }\" class=\"mr-sm-2 dd-height nxt-dropbox \"  id=\"dropdown\" [(ngModel)]=\"inpValue\" (change)=\"clearError()\" style.border-color=\"{{\n          this.questionItem?.error ? 'red' : inpValue?.length > 0 ? '#fff' : ''\n        }}\" style.color=\"{{ questionItem?.error ? 'red' : '' }}\">\n        <option *ngFor=\"let opt of questionItem.options\" class=\"option\" value=\"{{ opt.value }}\">\n          {{ opt.value }}\n        </option>\n        <!-- HA 20DEC23 For Translation -->\n        <option value=\".\" disabled hidden>{{'pleaseMakeChoice' | nxtCustomTranslate: 'pleaseMakeChoice'}}</option>\n      </select>\n    </div>\n  </div>\n\n  <!-- SKS29APR26 Multi Select-->\n  <div *ngIf=\"multiSelectFlag\">\n    <nxt-multi-select\n      [options]=\"questionItem.options\"\n      [apiMeta]=\"questionItem.subText\"\n      [selectedValue]=\"inpValue\"\n      [placeholder]=\"questionItem?.question ? ((questionItem.id+'.question') | nxtCustomTranslate : questionItem?.question) : ''\"\n      [question]=\"questionItem\"\n      [inputBgColor]=\"'#ffffff'\"\n      (valueChange)=\"inpValue = $event.value.valueObj; questionItem.input = $event.value.valueObj; clearError()\">\n    </nxt-multi-select>\n  </div>\n\n  <!--VD Radio update -->\n  <div *ngIf=\"radioFlag || dataFlag\" class=\"\">\n    <span *ngIf=\"this.questionItem.error\" class=\"nxt-error-msg\"> {{ questionItem?.errorMessage }}</span>\n    <div class=\"nxt-custom-radio-container\">\n      <div *ngFor=\"let opt of questionItem.options\" \n      [class]=\" this.questionItem.error ? 'nxt-custom-radio-option invalid' : 'nxt-custom-radio-option'\">\n        <input\n          type=\"radio\"\n          [id]=\"opt.value\"\n          [(ngModel)]=\"inpValue\"\n          name=\"inpValue\"\n          [value]=\"opt.value\"\n          (change)=\"optionChange(opt.value)\"\n        />\n        <label class=\"nxt-radio-label\" [for]=\"opt.value\"> {{ opt.value }}</label>\n      </div>\n    </div>\n\n    <!-- <div class=\"nxt-dis-flex\">\n      <div *ngFor=\"let opt of questionItem.options.records\" class=\"radio nxt-radioOption\">\n        <label class=\"nxt-radiocontainer container myt-font4\">\n          <input type=\"radio\" [id]=\"opt.id\" [(ngModel)]=\"inpValue\" name=\"inpValue\" [value]=\"opt.value\"\n            (change)=\"optionChange(opt.value)\" />\n          {{ opt.value }}\n        </label>\n      </div>\n    </div> -->\n  </div>  \n  <!-- Checkbox -->\n  <div *ngIf=\"checkboxFlag\" class=\"\">\n    <div *ngIf=\"questionItem?.error\" class=\"cond-div2\">\n      {{ questionItem?.errorMessage }}\n    </div>\n    <div class=\"nxt-checkbox-container\">\n      <div *ngFor=\"let item of optionValues\" class=\"nxt-checkbox-wrapper\">\n        <label class=\"nxt-container1\">\n          <input type=\"nxt-checkbox\" [id]=\"item.id\" [(ngModel)]=\"item.checked\" (click)=\"clearError()\" />\n          <span class=\"nxt-checkbox-label\">{{ item.value }}</span>\n        </label>\n      </div>\n    </div>\n  </div>\n\n  <!-- Text -->\n  <div *ngIf=\"textFlag\">\n    <!-- HA 31-JAN-24 To reduce the margin -->\n    <div [class]=\"'col-md-' + questionItem?.size + ' paddingnone'\">\n      <input class=\"nxt-input\" type=\"text\" [(ngModel)]=\"inpValue\" \n       id=\"text-input-id\" required=\"\" (focus)=\"clearError()\" style.border-color=\"{{\n          this.questionItem?.error\n            ? 'red'\n            : ''\n        }}\" oninput=\"this.value=this.value.replace(/[^a-zA-Z0-9\\s.:;,?]/g,'');\" />\n      <!-- <i class=\"fa fa-check nxt-check-icon\" aria-hidden=\"true\" *ngIf=\"inpValue?.length > 0\"></i> -->\n    </div>\n  </div>\n\n  <!-- Text Area -->\n  <div *ngIf=\"taFlag\" >\n    <div>\n      <textarea class=\"nxt-input nxt-text-area\" id=\"ta-input-id\" [(ngModel)]=\"inpValue\" (click)=\"clearError()\" style.border-color=\"{{\n          this.questionItem?.error\n            ? 'red'\n            : inpValue?.length > 0 && taFocusOut\n            ? '#87be1c'\n            : ''\n        }}\" (focusout)=\"taFocusOut = true\"\n        oninput=\"this.value=this.value.replace(/[^a-zA-Z0-9\\s.:;,?]/g,'');\"></textarea>\n      <!-- <i class=\"fa fa-check nxt-check-icon\" aria-hidden=\"true\" *ngIf=\"inpValue?.length > 0 && taFocusOut\" style=\"display: flex; justify-content: flex-end;\"></i> -->\n    </div>\n  </div>\n\n  <!-- CC Number Format -->\n  <!-- RS 09DEC24 Changed keys-->\n  <div *ngIf=\"numberFlag\" class=\"col-md-12\">\n    <div class=\"nxt-dis-flex\">\n      <input type=\"Text\" placeholder=\"0000 0000 0000 0000 0000 0000\" [ngClass]=\"{ boxoutline: qbItem?.progressBar }\"\n        [(ngModel)]=\"inpValue\" id=\"number-input-id\" (ngModelChange)=\"CCOnChange($event)\" required=\"\" maxlength=\"29\"\n        (focus)=\"clearError()\" oninput=\"this.value=this.value.replace(/[^0-9 ]/g,'');\"\n        style=\"width:-webkit-fill-available;\" style.border-color=\"{{\n          this.questionItem.error\n            ? 'red'\n            : inpValue?.length > 0\n            ? '#87be1c'\n            : ''\n        }}\" />\n    </div>\n  </div>\n  <!-- END-->\n\n  <!-- AlphaNumeric -->\n  <div *ngIf=\"alphanumericFlag\" class=\"col-md-12\"> <!--UI not completed-->\n    <div style=\"position:relative;\">\n      <!-- HA 20DEC23 For Translation -->\n      <input type=text placeholder=\"{{'zeroOfZero' | nxtCustomTranslate: 'zeroOfZero'}}\" style=\"padding:5px 5px 5px 150px;\" id=\"youridhere\"/>\n    </div>\n  </div>\n\n  <!-- Email -->\n  <!-- RS 09DEC24 Changed keys-->\n  <div *ngIf=\"emailFlag\" class=\"col-md-12\">\n    <div class=\"nxt-dis-flex\">\n      <input type=\"email\" [ngClass]=\"{ boxoutline: qbItem?.progressBar }\" [(ngModel)]=\"inpValue\" id=\"email-input-id\"\n        required=\"\" (focus)=\"clearError()\" style.border-color=\"{{\n          this.questionItem.error\n            ? 'red'\n            : inpValue?.length > 0\n            ? '#87be1c'\n            : ''\n        }}\" />\n    </div>\n  </div>\n\n  <!-- DateTime -->\n  <div *ngIf=\"dtFlag\" class=\"col-md-12 paddingZero nxtmyt-time1\" >\n    <!-- Error Handling -->\n    <div class=\"col-md-12\" *ngIf=\"questionItem.error\" style=\"font-size: 18px;\n    color: red;\">{{questionItem?.error?.errorMsg}}</div>\n\n    <!-- Date -->\n    <div *ngIf=\"dateFlag\">\n      <div class=\"col-md-12 paddingBottom\">\n        <!-- HA 31-JAN-24 These labels were occuping the empty space when date question comes-->\n        <!-- <label class=\"date-time colorf\">{{ questionItem?.dateText }}</label> -->\n        <div class=\"nxt-dis-flex\">\n          <!-- HA 20DEC23 For Translation -->\n          <!-- HA 02FEB24 Additional param to update the question -->\n        </div>\n      </div>\n    </div>\n\n    <!-- Time -->\n    <div *ngIf=\"timeFlag\">\n      <div class=\"col-md-12 paddingBottom\">\n        <!-- <label class=\"date-time colorf\">{{ questionItem?.timeText }}</label> -->\n        <div class=\"nxt-dis-flex\">\n         <div [ngClass]=\"{'dt-line date-line nxt-dt-time': qbItem?.progressBar,\n                           dateandTime: !qbItem?.progressBar}\" \n              id=\"dateandTime\" [style.border-color]=\"questionItem?.error ? 'red': questionItem?.input?.length > 0 ? '' : ''\"\n              (focus)=\"(clearSQError) \">\n          <select name=\"hours\" class=\"datetime showHour nxtmyt-time myt-hour\" [(ngModel)]=\"selectedHour\" id=\"hour\"\n            (focus)=\"clearError()\">\n            <option value=\"\">HH</option>\n            <option [value]=\"hour\" *ngFor=\"let hour of hours\">\n              {{ hour }}\n            </option>\n          </select>\n          <span class=\"colon\"> : </span>\n          <select name=\"minutes\" class=\"datetime nxtshowminute nxtmyt-time\" [(ngModel)]=\"selectedMinute\" id=\"minute\"\n            (focus)=\"clearError()\">\n            <option value=\"\">MM</option>\n            <option [value]=\"minute\" *ngFor=\"let minute of minutes\">\n              {{ minute }}\n            </option>\n          </select>\n          <div [ngClass]=\"{ colon1: qbItem?.progressBar }\" *ngIf=\"questionItem?.x24Hours == false\">\n            <span class=\"colon\"> : </span>\n            <select name=\"AM/PM\" class=\"nxtmyt-time\" [(ngModel)]=\"selectedMeridiem\" id=\"meridiem\">\n              <option value=\"AM\">AM</option>\n              <option value=\"PM\">PM</option>\n            </select>\n            <!-- <div [ngClass]=\"{'': qbItem.progressBar, 'dateandTime': !qbItem.progressBar}\"></div> -->\n          </div>\n        </div>\n      </div>\n      </div>\n    </div>\n  </div>\n\n  <!-- Attachment / File -->\n  <div *ngIf=\"fileFlag\">\n    <div *ngIf=\"!qbItem.progressBar\">\n      <div class=\"info-alert\" style.border-color=\"{{ this.questionItem?.error ? 'red' : '' }}\">\n        <label class=\"picture-upload\" for=\"file-upload\">\n          <span class=\"picture-upload-child\">\n          </span>\n        </label>\n      </div>\n      <input id=\"file-upload\" type=\"file\" accept=\"{{ allowedFileExtension }}\" (change)=\"uploadFile($event,this.questionItem)\" />\n    </div>\n    <ul *ngIf=\"\n        attachments?.length > 0 &&\n        questionItem?.type === 'File' &&\n        !qbItem?.progressBar\n      \" class=\"attach-ulist col-md-12\">\n      <li *ngFor=\"let attachment of attachments\" class=\"align-l\">\n        {{ attachment.attachmentName}}<span class=\"attach-list\" (click)=\"deleteAttachment(attachment.attachmentId)\">X</span>\n      </li>\n    </ul>\n\n    <!-- Attachment Progress -->\n    <div *ngIf=\"qbItem.progressBar\">\n      <div *ngFor=\"let attachment of attachments\" class=\"nxtfile-uploading-box\">\n        <!--<img src=\"https://rnxt.s3.amazonaws.com/MytIcon/icon-doc-img%402x.png\" class=\"icon-edit1\" />-->\n        <span class=\"uploading-file-name \">{{ attachment.attachmentName }}</span>\n        <img src=\"https://rnxt.s3.amazonaws.com/MytIcon/icon-delete%402x.png\" class=\"deleteIcon\"\n          (click)=\"deleteAttachment(attachment.attachmentId)\" />\n      </div>\n      <div class=\"nxtfile-upload-box\" style.border-color=\"{{ this.questionItem.error ? 'red' : '' }}\">\n      \n        <!--<img src=\"https://rnxt.s3.amazonaws.com/MytIcon/icon-doc-img%402x.png\" class=\"icon-edit1\" />-->\n        <span class=\"f-Name\" *ngIf=\" questionItem?.style?.showLabel !== false\" [innerHTML]=\"getText(questionItem?.questionText)\"> {{ questionItem?.questionText}}</span>\n        <label class=\"file-label \">\n          <img src=\"https://rnxt.s3.amazonaws.com/MytIcon/file-upload.png\" class=\"file-icon\"/>\n          <!-- HA 20DEC23 For Translation -->\n          <input name=\"attachment\" type=\"file\" placeholder=\"{{'toBuyTicket' | nxtCustomTranslate : 'toBuyTicket'}}\" multiple\n            accept=\".pdf, .png, .jpg, .jpeg, .heic, .application/pdf\" (change)=\"uploadFile($event)\"\n            class=\"file-upload-btn\">\n        </label>\n      </div>\n    </div>\n  </div>\n  <!-- RS 09DEC24 Changed keys-->\n  <!-- Book -->\n  <div *ngIf=\"bookFlag\">\n    <div [class]=\"qbItem.isShengel ? 'form-group content-box' : 'form-group'\">\n      <div class=\"form-row\">\n        <div class=\"col-md-12\" *ngIf=\"questionItem.error\" style=\"font-size: 18px;\n            color: red;\">{{questionItem?.error?.errorMsg}}</div>\n        <div [class]=\"qbItem.isShengel ? '' : 'nxt-myt-align3'\" [class]=\"qbItem.isShengel ? 'col-lg-' + ques.size + ' paddingnone' : 'col-md-' + ques.size + ' paddingnone'\"\n          *ngFor=\"let ques of subQuestions;let i = index\" [id]=\"ques.id\">\n          <div [ngClass]=\"{ down2: qbItem?.progressBar }\">\n            <span *ngIf=\"ques?.style?.showLabel !== false\">{{ (ques.id+'.questionText') | nxtCustomTranslate : ques?.questionText }}</span>\n          </div>\n          <div class=\"col-md-12 paddingZero nxtmyt-dateTimeNew\" *ngIf=\"ques.type === 'Time' || ques.type === 'Date'\">\n            <div *ngIf=\"ques.type === 'Date'\">\n              <div class=\"col-md-12 paddingBottom\">\n                <!-- <label class=\"date-time colorf\">{{ questionItem?.dateText }}</label> -->\n                <div class=\"dateandtime\">\n                  <!-- HA 20DEC23 For Translation -->\n                  <!-- HA 02FEB24 Additional param to update the question -->\n                </div>\n              </div>\n            </div>\n            <div *ngIf=\"ques.type === 'Time'\">\n              <div class=\"col-md-12 paddingBottom\">\n                <!-- <label class=\"date-time colorf\">{{ questionItem?.timeText }}</label> -->\n                <div class=\"dateandtime\">\n                <div [ngClass]=\"{'dt-line date-line nxt-dt-time': qbItem?.progressBar,\n                                  dateandTime: !qbItem?.progressBar}\" \n                      id=\"dateandTime\" [style.border-color]=\"questionItem?.error ? 'red': questionItem?.input?.length > 0 ? '' : ''\"\n                      (focus)=\"(clearSQError) \">\n                  <select name=\"hours\" class=\"datetime showHour nxtmyt-time myt-hour\" [(ngModel)]=\"selectedHour\" id=\"hour\"\n                    (focus)=\"clearError()\">\n                    <option value=\"\">HH</option>\n                    <option [value]=\"hour\" *ngFor=\"let hour of hours\">\n                      {{ hour }}\n                    </option>\n                  </select>\n                  <span class=\"colon\"> : </span>\n                  <select name=\"minutes\" class=\"datetime nxtshowminute nxtmyt-time\" [(ngModel)]=\"selectedMinute\" id=\"minute\"\n                    (focus)=\"clearError()\">\n                    <option value=\"\">MM</option>\n                    <option [value]=\"minute\" *ngFor=\"let minute of minutes\">\n                      {{ minute }}\n                    </option>\n                  </select>\n                  <div [ngClass]=\"{ colon1: qbItem?.progressBar }\" *ngIf=\"questionItem.x24Hours == false\">\n                    <span class=\"colon\"> : </span>\n                    <select name=\"AM/PM\" class=\"nxtmyt-time\" [(ngModel)]=\"selectedMeridiem\" id=\"meridiem\">\n                      <option value=\"AM\">AM</option>\n                      <option value=\"PM\">PM</option>\n                    </select>\n                  </div>\n                </div>\n              </div>\n              </div>\n            </div>\n          </div>\n         \n            <!-- SKS11JUN25 Text, Email, label, number, DateTime-->\n            <nxt-input  *ngIf=\"ques.type === 'Location' || ques.type === 'Text' || ques.type === 'Email' || ques.type === 'Number' || ques.type === 'Label' || ques.type === 'Boolean' || ques.type === 'RichTextArea' || ques.type === 'DateTime' || ques.type === 'TextArea'\"\n              [type]=\"ques.type === 'Text' ? 'text' : ques.type === 'Email' ? 'email' : ques.type === 'Number' ? 'number' : ques.type === 'Label' ? 'label' : ques.type === 'Boolean' ? 'checkbox' : ques.type === 'RichTextArea' ? 'richtext' : ques.type === 'DateTime' ? 'datetime' : ques.type === 'TextArea' ? 'textarea' : ques.type === 'Location' ? 'location' : 'text'\"\n              [mode]=\"isEdit !== true ? 'view' : 'edit'\"\n              [value]=\"ques.input\"\n              [apiKey]=\"qbItem['apiKey']\"\n              [question]=\"ques\" [readOnly]=\"ques.isReadOnly\"\n              [labelFont]=\"ques.font\"\n              [label]=\"(ques.id+'.questionText') | nxtCustomTranslate : ques?.questionText\"\n              [labelColor]=\"ques.color\"\n              [labelSize]=\"ques.fontSize\"\n              [inputValueSize]=\"ques.fontSize\"\n              [labelWeight]=\"ques.fontWeight\"\n              [inputWeight]=\"ques.fontWeight\"\n              [showLabel]=\"ques.style?.showLabel\"\n              inputBorder=\"#ccc\" svgHeight=\"20px\" svgWidth=\"20px\"\n              [placeholder]=\"(ques.id+'.question') | nxtCustomTranslate : ques?.question\"\n              [required]=\"ques.isOptional\" inputBgColor=\"#ffffff\"\n              [inputId]=\"ques.trackingId\"\n              [errorMessages]=\"{ required: 'This field is required' }\"\n              [inputIconLeftSrc]=\"ques.iconLeftSrc\" \n              (inputValue)=\"childEventCapture($event,ques)\"\n              >\n          </nxt-input>\n          <!-- Email -->\n          <div *ngIf=\"ques.type === 'Email'\">\n            <input type=\"email\" [(ngModel)]=\"ques.input\" [id]=\"ques.id\" required=\"\" (focus)=\"clearSQError(ques.id)\"\n              style.border-color=\"{{ ques.error ? 'red' : '' }}\" placeholder=\"{{ ques.question }}\" />\n          </div>\n\n          <div *ngIf=\"ques.type === 'File'\">\n            <div *ngIf=\"!qbItem.progressBar\">\n              <label class=\"picture-upload custom-file-upload bgcolor-w\" for=\"file-upload\">\n                <span class=\"picture-upload-child\">\n                </span>\n              </label>\n              <input id=\"file-upload\" type=\"file\" accept=\"{{ bookFlagAccept }}\" (change)=\"uploadFile($event,ques)\" />\n            </div>\n\n            <ul *ngIf=\"\n                attachments?.length > 0 &&\n                ques.type === 'File' &&\n                !qbItem.progressBar\n              \" class=\"attach-ulist col-md-12\">\n              <li *ngFor=\"let attachment of attachments\" class=\"align-l\">\n                {{ attachment.attachmentName\n                }}<span class=\"attach-list\" (click)=\"deleteAttachment(attachment.attachmentId)\">X</span>\n              </li>\n            </ul>\n            <div class=\"myt-box\" *ngIf=\"qbItem.progressBar\">\n\n              <div *ngFor=\"let attachment of attachments\" class=\"nxtfile-uploading-box\">\n                <img src=\"https://rnxt.s3.amazonaws.com/MytIcon/icon-doc-img%402x.png\" class=\"nxt-icon-edit1\" />\n                <span class=\"uploading-file-name myt-font1 font-weight: normal;\"> {{ attachment.attachmentName }}</span>\n                <img src=\"https://rnxt.s3.amazonaws.com/MytIcon/icon-delete%402x.png\" class=\"deleteIcon\"\n                  (click)=\"deleteAttachment(attachment.attachmentId)\" />\n              </div>\n              <div class=\"nxtfile-upload-box\" style.border-color=\"{{ this.questionItem.error ? 'red' : '' }}\">\n                <img src=\"https://rnxt.s3.amazonaws.com/MytIcon/icon-doc-img%402x.png\" class=\"nxt-icon-edit1\" />\n                <span class=\"f-Name\">{{ ques?.question }}</span>\n                <label class=\"file-label \">\n                  <span style=\"color: #c5281c;text-decoration:underline\">\n                    {{'attach' | nxtCustomTranslate : 'attach'}}\n                  </span>\n                  <!-- HA 20DEC23 For Translation -->\n                  <input name=\"attachment\" type=\"file\" placeholder=\"{{'toBuyTicket' | nxtCustomTranslate : 'toBuyTicket'}}\" multiple\n                    accept=\".pdf, .png, .jpg, .jpeg, .heic, .application/pdf\" (change)=\"uploadFile($event,ques)\"\n                    class=\"file-upload-btn\">\n                </label>\n              </div>\n            </div>\n          </div>\n\n          <!-- Table -->\n          <div *ngIf=\"ques.type === 'Table'\" class=\"\">\n            <!-- SKS13MAR25 nxt table change -->\n            <nxt-datatable isEditRow isDeleteRow actionButton isButtons\n                [question]=\"ques\"\n                from = \"formBuilder\"\n                (valueChange)=\"childEventCapture($event.data, ques); clearSQError(ques.id)\"\n                [tableConfig]=\"ques.tableConfig\"\n                tableId = \"\"\n                direction = \"ltr\"\n                tableWidth = \"auto\"\n                >\n            </nxt-datatable>\n          </div>\n\n          <!-- SKS25MAR25 Image -->\n          <div *ngIf=\"ques.type === 'Image'\" class=\"\">\n            <img [src]=\"ques.imageData\" [style.border]=\"ques.imageData ? '1px solid black' : 'none'\" />\n          </div>\n\n          <!-- Dropdown -->\n          <div *ngIf=\"ques.type === 'Dropdown'\" class=\"nxtdropdown\">\n            <!-- for common dropdown -->\n            <!-- HA 20DEC23 For Translation -->\n            <nxt-dropdown [fromShengel]=\"qbItem.isShengel\"\n                    [options]=\"ques.options\"\n                    [apiMeta]=\"ques.subText\"\n                    [id]=\"ques.Name\" [padding]=\"ques?.padding\"\n                    [selectedValue]=\"ques.input\"\n                    [from]=\"'nxtForm'\"\n                    [placeholder]=\"ques?.question ? ((ques.id+'.question') | nxtCustomTranslate : ques?.question ): ''\"\n                    [error]=\"ques?.error\"\n                    [labelFont]=\"ques?.font\"\n                    [label]=\"ques?.questionText\"\n                    [labelColor]=\"ques?.color\"\n                    [inputTextColor]=\"ques?.color\"\n                    [labelSize]=\"ques?.fontSize\"\n                    [inputValueSize]=\"ques?.fontSize\"\n                    [labelWeight]=\"ques?.fontWeight\"\n                    [inputWeight]=\"ques?.fontWeight\"\n                    [showLabel]=\"ques?.style?.showLabel ?? true\"\n                    [inputBgColor]=\"ques?.inputBgColor\"\n                    [inputIconLeftSrc]=\"ques?.iconLeftSrc\"\n                    (valueChange)=\"childEventCapture($event, ques); clearSQError(ques.id)\">\n            </nxt-dropdown>\n          </div>\n\n          <!-- SKS29APR26 Multi Select -->\n          <div *ngIf=\"ques.type === 'MultiSelect'\" class=\"nxtdropdown\">\n            <nxt-multi-select [fromShengel]=\"qbItem.isShengel\"\n                    [options]=\"ques.options\"\n                    [apiMeta]=\"ques.subText\"\n                    [id]=\"ques.Name\" [padding]=\"ques?.padding\"\n                    [selectedValue]=\"ques.input\"\n                    [from]=\"'nxtForm'\"\n                    [placeholder]=\"ques?.question ? ((ques.id+'.question') | nxtCustomTranslate : ques?.question ): ''\"\n                    [error]=\"ques?.error\"\n                    [labelFont]=\"ques?.font\"\n                    [label]=\"ques?.questionText\"\n                    [labelColor]=\"ques?.color\"\n                    [inputTextColor]=\"ques?.color\"\n                    [labelSize]=\"ques?.fontSize\"\n                    [inputValueSize]=\"ques?.fontSize\"\n                    [labelWeight]=\"ques?.fontWeight\"\n                    [inputWeight]=\"ques?.fontWeight\"\n                    [showLabel]=\"ques?.style?.showLabel ?? true\"\n                    [inputBgColor]=\"ques?.inputBgColor\"\n                    [inputIconLeftSrc]=\"ques?.iconLeftSrc\"\n                    (valueChange)=\"childEventCapture($event.value, ques); clearSQError(ques.id)\">\n            </nxt-multi-select>\n          </div>          \n        </div>\n      </div>\n    </div>\n  </div>\n\n  <!--List start-->\n  <div *ngIf=\"listFlag\">\n    <div class=\"form-group\">\n      <div class=\"form-row\">\n        <div class=\"col-md-12\" *ngIf=\"questionItem.error\" style=\"font-size: 18px;\n            color: red;\">{{questionItem?.error?.errorMsg}}</div>\n        <div class=\"nxt-myt-align3\" [class]=\"'col-md-' + ques.size + ' paddingnone'\"\n          *ngFor=\"let ques of getLocalSubQuestions(questionItem.id);let i = index\">\n          <div>\n            <div class=\"nxt-dis-flex myt-font3 myt-font7\">{{ ques?.question }}</div>\n          </div>\n          <div *ngIf=\"ques.type === 'Text'\">\n            <input type=\"text\" [(ngModel)]=\"ques.input\" [ngClass]=\"{\n             'nxt-dis-flex dt-line date-line nxtbookText boxoutline myt-font1': qbItem.progressBar,\n             textBox: !qbItem.progressBar\n            }\" id=\"text\" [id]=\"ques.uniqueSubQId\" required=\"\" (focus)=\"clearLocalSubQuesError(ques)\"\n            style.border-color=\"{{ ques.error ? 'red' : '' }}\" placeholder=\"{{ ques.question }}\"\n            oninput=\"this.value=this.value.replace(/[^a-zA-Z0-9\\s.:;,?]/g,'');\" />\n          </div>\n        </div>\n        <div class=\"\" *ngIf=\"addFlag\">\n          <!-- HA 20DEC23 For Translation -->\n          <button (click)=\"Add(getLocalSubQuestions(questionItem.id))\" class=\"btn\">{{'add' | nxtCustomTranslate : 'add'}}</button>\n         </div>\n      </div>\n    </div>\n  </div>\n  <!--List End-->\n\n  <!-- Actions -->\n  <!-- VD button condition removed-->\n  <div class=\"flexer\">\n    <!-- Backward / Back -->\n    <!-- HA 02FEB24 Hiding the button when there is no value from the backend -->\n     <!--VD disabled -->\n    <div class=\"backbutton\" \n      [style.visibility]=\"questionStack.length > 0 ? 'visible' : 'hidden'\" *ngIf=\"qbItem.back\">\n        <button [disabled]=\"isButtonDisabled\" [ngClass]=\"{\n            'nxt-left-bt': qbItem.progressBar,\n            'nxt-btn btn-primary':\n              !qbItem.progressBar\n          }\" (click)=\"handleBackClick()\">\n          {{ qbItem?.back }}\n        </button>\n    </div>\n\n    <!-- Forward / Next -->\n    <!-- HA 02FEB24 Hiding the button when there is no value from the backend -->\n    <div  *ngIf=\"qbItem.next\" >\n      <div class=\"nxtbutton\">\n         <!--VD disabled -->\n        <button [disabled]=\"isButtonDisabled\" [ngClass]=\"{\n            'nxt-rusty': qbItem.progressBar,\n            'nxt-btn btn-primary':\n              !qbItem.progressBar\n          }\" (click)=\"handleNextClick()\">\n          {{ qbItem.next }}\n        </button>\n      </div>\n    </div>\n  </div>\n</div>\n\n<!-- Summary -->\n<div *ngIf=\"this.abItem?.status === 'Completed'\" class=\"col-lg-12\" style=\"text-align: center;\">\n  <h2>{{this.qbItem.summaryText}}</h2>\n  <p>{{this.qbItem.summarySubText}}</p>\n</div>\n\n<div *ngIf=\"summary && summary.length > 0\" height=\"100% !important\" class=\"col-md-12\" [ngClass]=\"{\n              'col-md-12':!qbItem.progressBar\n               }\">\n    <h1 class=\"nxt-header1 nxt-summarypadd\" >{{ qbItem.subTitle }}</h1>         \n  <div id=\"nxt-progress2\" *ngIf=\"!qbItem.progressBar && this.abItem.status != 'Completed' \">\n  <div [ngClass]=\"{ 'full-summary': qbItem.progressBar }\">\n    <div *ngFor=\"let qa of summary\">\n        <div [ngClass]=\"{ non:  qbItem.progressBar }\">\n          <div [ngClass]=\"{ summary:  !qbItem.progressBar }\">\n           <div *ngIf=\"!qbItem.edit\"\n              [ngClass]=\"{ 'question': this.abItem.status != 'Completed' }\">\n              <p [ngClass]=\"{ asum: this.abItem.status === 'Completed' }\" (click)=\"handleEditClick(qa.quesId)\"\n                [innerHTML]=\"getText(qa.quesValue)\">{{ qa.quesValue }}</p>\n            </div>\n            <!-- VD Question No added -->\n            <div *ngIf=\"qbItem.edit\"\n              [ngClass]=\"{ 'question': this.abItem.status != 'Completed' }\">\n              <div [ngClass]=\"{ 'question': this.abItem.status === 'Completed' }\"\n                [innerHTML]=\"getText(qa.quesValue)\"><span>{{ qa.questionNumber }}</span>\n                {{ qa.quesValue }}\n              </div>\n            </div>\n            <div class=\"nxt-answer\" >\n                <div *ngIf=\"qa.qTyp === 'File'\">\n                  <img src=\"https://rnxt.s3.amazonaws.com/MytIcon/icon-doc-img%401.png\" class=\"nxt-icon-edit-summary\" />\n                  {{ qa.ansValue }}\n                </div>\n                <!-- HA 02FEB24 Displaying the in summary for book type -->\n                <div *ngIf=\"qa.qTyp == 'Book'\">\n                  <div *ngFor=\"let val of qa.myVal\">\n                    <p *ngIf=\"val.style?.showLabel !== false\">{{ val.questionText }}:<span>{{ val.input }}</span></p>\n                  </div>\n                </div>\n                <!-- HA 02FEB24 Displaying the value for direct question -->\n                <div *ngIf=\"qa.qTyp != 'File' && qa.qTyp != 'Book'  && qa.style?.showLabel !== false\">{{ (qa.id+'.questionText') | nxtCustomTranslate : qa?.questionText}} <span></span>{{ qa.ansValue }}</div>\n                <div *ngIf=\"qbItem.edit && this.abItem.status != 'Completed'\" style=\"background: #dedddd;\">\n                  <button class=\"nxt-edit\" (click)=\"handleEditClick(qa.quesId)\">\n                    <img *ngIf=\"deviceInfo.os === 'iOS'\" src=\"https://rnxt.s3.amazonaws.com/MytIcon/icon-edit%402x.png\" style=\"width:50%!important;\" class=\"nxt-icon-editios\"/>\n                    <img *ngIf=\"deviceInfo.os !== 'iOS'\" src=\"https://rnxt.s3.amazonaws.com/MytIcon/icon-edit%402x.png\" class=\"nxt-icon-edit\" />\n                  </button>\n                </div>\n          </div>\n        </div>\n        </div>\n    </div>\n    </div>\n  </div>\n\n\n\n  <div id=\"nxt-progress2\" *ngIf=\"qbItem.progressBar \">\n    <div [ngClass]=\"{'bgColor nxtsummary-top' : qbItem.progressBar }\" >\n      <div id=\"nxt-progress-summary\" *ngIf=\"qbItem.progressBar\">\n      <div *ngIf=\"qbItem.summaryText && qbItem.progressBar\" \n      [ngClass]=\"{ summaryTitle: qbItem.progressBar }\">\n        <h3 class=\"nxt-subTitle\" >{{ qbItem.summaryText }}</h3>\n        <div *ngIf=\"abItem.status != 'Completed'\" class=\"nxt-subTitle1\" >{{ qbItem.summarySubText}}</div>\n      </div>\n    </div>\n    <div *ngIf=\"!qbItem.progressBar\">\n      <h3 class=\"summary-h\">\n        {{ qbItem.summaryText }}\n      </h3>\n    </div>\n  </div>\n  <div [ngClass]=\"{ 'full-summary': qbItem.progressBar }\">\n    <div class=\"summary-groupText myt-font2\">\n      <!-- <p>Informe de daño</p> -->\n    </div>\n    <div *ngFor=\"let qa of summary\" >\n        <div [ngClass]=\"{ non:  qbItem.progressBar }\">\n          <div class=\"summary\">\n            <!-- <div *ngIf=\"!qbItem.edit\"\n              [ngClass]=\"{ 'question sum-ques myt-font3 myt-font8': this.abItem.status != 'Completed' }\">\n              <a [ngClass]=\"{ asum: this.abItem.status === 'Completed' }\" (click)=\"handleEditClick(qa.quesId)\"\n                [innerHTML]=\"getText(qa.quesValue)\">{{ qa.quesValue }}</a>\n            </div>\n            <div *ngIf=\"qbItem.edit\"\n              [ngClass]=\"{ 'sum-ques question myt-font3 myt-font8': this.abItem.status != 'Completed' }\">\n              <div [ngClass]=\"{ 'sum-ques1 question1 summary-completed myt-font3 myt-font8': this.abItem.status === 'Completed' }\"\n                [innerHTML]=\"getText(qa.quesValue)\">\n                {{ qa.quesValue }}\n              </div>\n            </div> -->\n            <div *ngIf=\"qbItem.edit && this.abItem.status != 'Completed'\" style=\"background: #dedddd;\">\n              <button class=\"nxt-edit\" (click)=\"handleEditClick(qa.quesId)\">\n                <img *ngIf=\"deviceInfo.os === 'iOS'\" src=\"https://rnxt.s3.amazonaws.com/MytIcon/icon-edit%402x.png\" style=\"width:50%!important;\" class=\"nxt-icon-editios\"/>\n                <img *ngIf=\"deviceInfo.os !== 'iOS'\" src=\"https://rnxt.s3.amazonaws.com/MytIcon/icon-edit%402x.png\" class=\"nxt-icon-edit\" />\n              </button>\n            </div>\n           \n            <div class=\"nxt-answer\">\n              <div *ngIf=\"qa.qTyp === 'File'\">\n                <img src=\"https://rnxt.s3.amazonaws.com/MytIcon/icon-doc-img%401.png\" class=\"nxt-icon-edit-summary\" />\n                {{ qa.ansValue }}\n              </div>\n              <div *ngIf=\"qa.qTyp != 'File'\">\n                {{ qa.ansValue }}\n              </div>\n            </div>\n          </div>\n        </div>\n      </div>\n    </div>\n  </div>\n\n  <!-- <div class=\"flexer1\" *ngIf=\"abItem\">\n    <div class=\"\" *ngIf=\"abItem.status == 'Completed' && qbItem.cancel\">\n      <div class=\"col-md-12\">\n        <button [ngClass]=\"{'btn-text': qbItem.progressBar,\n                            'nxt-btn btn-primary btn-lg btn-block btn-back-color': !qbItem.progressBar}\"\n          (click)=\"handleCancelClick()\">\n          {{ qbItem.cancel }}\n        </button>\n      </div>\n    </div>\n  </div> -->\n\n  <!-- Group Actions -->\n  <div class=\"align-edit-submit\" *ngIf=\"abItem.status != 'Completed'\">\n    <!-- HA 02FEB24 Hiding the button when there is no value from the backend -->\n    <div class=\"col-md-6\" *ngIf=\"qbItem.submit\">\n      <button [ngClass]=\"{ 'btn-text2': qbItem.progressBar,\n                            'nxt-btn btn-primary btn-lg btn-block btn-back-color': !qbItem.progressBar }\" \n        (click)=\"handleSubmitClick()\">\n        {{ qbItem.submit }}\n      </button>\n    </div>\n    <!-- HA 02FEB24 Hiding the button when there is no value from the backend -->\n    <!-- <div class=\"col-md-6\" *ngIf=\"qbItem.edit\">\n      <button [ngClass]=\"{'grey': qbItem.progressBar,\n                            'nxt-btn btn-primary btn-lg btn-block btn-back-color': !qbItem.progressBar}\" \n              (click)=\"handleBackClickNew()\">\n        {{ qbItem.edit }}\n      </button>\n    </div> -->\n  </div>\n\n</div>","import { CropperPosition, MoveStart } from '../interfaces';\nimport { CropperState } from '../component/cropper.state';\nimport { BasicEvent } from '../interfaces/basic-event.interface';\n\nexport function checkCropperPosition(cropperPosition: CropperPosition, cropperState: CropperState, maintainSize: boolean): CropperPosition {\n  cropperPosition = checkCropperSizeRestriction(cropperPosition, cropperState);\n  return checkCropperWithinMaxSizeBounds(cropperPosition, cropperState, maintainSize);\n}\n\nexport function checkCropperSizeRestriction(cropperPosition: CropperPosition, cropperState: CropperState): CropperPosition {\n  let cropperWidth = cropperPosition.x2 - cropperPosition.x1;\n  let cropperHeight = cropperPosition.y2 - cropperPosition.y1;\n  const centerX = cropperPosition.x1 + cropperWidth / 2;\n  const centerY = cropperPosition.y1 + cropperHeight / 2;\n\n  if (cropperState.options.cropperStaticHeight && cropperState.options.cropperStaticWidth) {\n    cropperWidth = cropperState.maxSize!.width > cropperState.options.cropperStaticWidth\n      ? cropperState.options.cropperStaticWidth\n      : cropperState.maxSize!.width;\n    cropperHeight = cropperState.maxSize!.height > cropperState.options.cropperStaticHeight\n      ? cropperState.options.cropperStaticHeight\n      : cropperState.maxSize!.height;\n  } else {\n    cropperWidth = Math.max(cropperState.cropperScaledMinWidth, Math.min(cropperWidth, cropperState.cropperScaledMaxWidth, cropperState.maxSize!.width));\n    cropperHeight = Math.max(cropperState.cropperScaledMinHeight, Math.min(cropperHeight, cropperState.cropperScaledMaxHeight, cropperState.maxSize!.height));\n    if (cropperState.options.maintainAspectRatio) {\n      if (cropperState.maxSize!.width / cropperState.options.aspectRatio < cropperState.maxSize!.height) {\n        cropperHeight = cropperWidth / cropperState.options.aspectRatio;\n      } else {\n        cropperWidth = cropperHeight * cropperState.options.aspectRatio;\n      }\n    }\n  }\n\n  const x1 = centerX - cropperWidth / 2;\n  const x2 = x1 + cropperWidth;\n  const y1 = centerY - cropperHeight / 2;\n  const y2 = y1 + cropperHeight;\n  return {x1, x2, y1, y2};\n}\n\nexport function checkCropperWithinMaxSizeBounds(position: CropperPosition, cropperState: CropperState, maintainSize = false): CropperPosition {\n  if (position.x1 < 0) {\n    position = {\n      ...position,\n      x1: 0,\n      x2: position.x2 - (maintainSize ? position.x1 : 0)\n    };\n  }\n  if (position.y1 < 0) {\n    position = {\n      ...position,\n      y2: position.y2 - (maintainSize ? position.y1 : 0),\n      y1: 0\n    };\n  }\n  if (position.x2 > cropperState.maxSize!.width) {\n    position = {\n      ...position,\n      x1: position.x1 - (maintainSize ? (position.x2 - cropperState.maxSize!.width) : 0),\n      x2: cropperState.maxSize!.width\n    };\n  }\n  if (position.y2 > cropperState.maxSize!.height) {\n    position = {\n      ...position,\n      y1: position.y1 - (maintainSize ? (position.y2 - cropperState.maxSize!.height) : 0),\n      y2: cropperState.maxSize!.height\n    };\n  }\n  return position;\n}\n\nexport function moveCropper(event: Event | BasicEvent, moveStart: MoveStart): CropperPosition {\n  const diffX = getClientX(event) - moveStart.clientX;\n  const diffY = getClientY(event) - moveStart.clientY;\n\n  return {\n    x1: moveStart.cropper.x1 + diffX,\n    y1: moveStart.cropper.y1 + diffY,\n    x2: moveStart.cropper.x2 + diffX,\n    y2: moveStart.cropper.y2 + diffY\n  };\n}\n\nexport function resizeCropper(event: Event | BasicEvent, moveStart: MoveStart, cropperState: CropperState): CropperPosition {\n  const cropperPosition = {...cropperState.cropper};\n  const moveX = getClientX(event) - moveStart.clientX;\n  const moveY = getClientY(event) - moveStart.clientY;\n  switch (moveStart.position) {\n    case 'left':\n      cropperPosition.x1 = Math.min(Math.max(moveStart.cropper.x1 + moveX, cropperPosition.x2 - cropperState.cropperScaledMaxWidth),\n        cropperPosition.x2 - cropperState.cropperScaledMinWidth);\n      break;\n    case 'topleft':\n      cropperPosition.x1 = Math.min(Math.max(moveStart.cropper.x1 + moveX, cropperPosition.x2 - cropperState.cropperScaledMaxWidth),\n        cropperPosition.x2 - cropperState.cropperScaledMinWidth);\n      cropperPosition.y1 = Math.min(Math.max(moveStart.cropper.y1 + moveY, cropperPosition.y2 - cropperState.cropperScaledMaxHeight),\n        cropperPosition.y2 - cropperState.cropperScaledMinHeight);\n      break;\n    case 'top':\n      cropperPosition.y1 = Math.min(Math.max(moveStart.cropper.y1 + moveY, cropperPosition.y2 - cropperState.cropperScaledMaxHeight),\n        cropperPosition.y2 - cropperState.cropperScaledMinHeight);\n      break;\n    case 'topright':\n      cropperPosition.x2 = Math.max(Math.min(moveStart.cropper.x2 + moveX, cropperPosition.x1 + cropperState.cropperScaledMaxWidth),\n        cropperPosition.x1 + cropperState.cropperScaledMinWidth);\n      cropperPosition.y1 = Math.min(Math.max(moveStart.cropper.y1 + moveY, cropperPosition.y2 - cropperState.cropperScaledMaxHeight),\n        cropperPosition.y2 - cropperState.cropperScaledMinHeight);\n      break;\n    case 'right':\n      cropperPosition.x2 = Math.max(Math.min(moveStart.cropper.x2 + moveX, cropperPosition.x1 + cropperState.cropperScaledMaxWidth),\n        cropperPosition.x1 + cropperState.cropperScaledMinWidth);\n      break;\n    case 'bottomright':\n      cropperPosition.x2 = Math.max(Math.min(moveStart.cropper.x2 + moveX, cropperPosition.x1 + cropperState.cropperScaledMaxWidth),\n        cropperPosition.x1 + cropperState.cropperScaledMinWidth);\n      cropperPosition.y2 = Math.max(Math.min(moveStart.cropper.y2 + moveY, cropperPosition.y1 + cropperState.cropperScaledMaxHeight),\n        cropperPosition.y1 + cropperState.cropperScaledMinHeight);\n      break;\n    case 'bottom':\n      cropperPosition.y2 = Math.max(Math.min(moveStart.cropper.y2 + moveY, cropperPosition.y1 + cropperState.cropperScaledMaxHeight),\n        cropperPosition.y1 + cropperState.cropperScaledMinHeight);\n      break;\n    case 'bottomleft':\n      cropperPosition.x1 = Math.min(Math.max(moveStart.cropper.x1 + moveX, cropperPosition.x2 - cropperState.cropperScaledMaxWidth),\n        cropperPosition.x2 - cropperState.cropperScaledMinWidth);\n      cropperPosition.y2 = Math.max(Math.min(moveStart.cropper.y2 + moveY, cropperPosition.y1 + cropperState.cropperScaledMaxHeight),\n        cropperPosition.y1 + cropperState.cropperScaledMinHeight);\n      break;\n    case 'center':\n      const scale = 'scale' in event ? event.scale as number : 1;\n      const newWidth = Math.min(\n        Math.max(cropperState.cropperScaledMinWidth, (Math.abs(moveStart.cropper.x2 - moveStart.cropper.x1)) * scale),\n        cropperState.cropperScaledMaxWidth);\n      const newHeight = Math.min(\n        Math.max(cropperState.cropperScaledMinHeight, (Math.abs(moveStart.cropper.y2 - moveStart.cropper.y1)) * scale),\n        cropperState.cropperScaledMaxHeight);\n      cropperPosition.x1 = moveStart.clientX - newWidth / 2;\n      cropperPosition.x2 = moveStart.clientX + newWidth / 2;\n      cropperPosition.y1 = moveStart.clientY - newHeight / 2;\n      cropperPosition.y2 = moveStart.clientY + newHeight / 2;\n      if (cropperPosition.x1 < 0) {\n        cropperPosition.x2 -= cropperPosition.x1;\n        cropperPosition.x1 = 0;\n      } else if (cropperPosition.x2 > cropperState.maxSize!.width) {\n        cropperPosition.x1 -= (cropperPosition.x2 - cropperState.maxSize!.width);\n        cropperPosition.x2 = cropperState.maxSize!.width;\n      }\n      if (cropperPosition.y1 < 0) {\n        cropperPosition.y2 -= cropperPosition.y1;\n        cropperPosition.y1 = 0;\n      } else if (cropperPosition.y2 > cropperState.maxSize!.height) {\n        cropperPosition.y1 -= (cropperPosition.y2 - cropperState.maxSize!.height);\n        cropperPosition.y2 = cropperState.maxSize!.height;\n      }\n      break;\n  }\n\n  if (cropperState.options.maintainAspectRatio) {\n    return checkAspectRatio(moveStart.position!, cropperPosition, cropperState);\n  } else {\n    return cropperPosition;\n  }\n}\n\nexport function checkAspectRatio(position: string, cropperPosition: CropperPosition, cropperState: CropperState): CropperPosition {\n  cropperPosition = {...cropperPosition};\n  let overflowX = 0;\n  let overflowY = 0;\n  switch (position) {\n    case 'top':\n      cropperPosition.x2 = cropperPosition.x1 + (cropperPosition.y2 - cropperPosition.y1) * cropperState.options.aspectRatio;\n      overflowX = Math.max(cropperPosition.x2 - cropperState.maxSize!.width, 0);\n      overflowY = Math.max(0 - cropperPosition.y1, 0);\n      if (overflowX > 0 || overflowY > 0) {\n        cropperPosition.x2 -= (overflowY * cropperState.options.aspectRatio) > overflowX ? (overflowY * cropperState.options.aspectRatio) : overflowX;\n        cropperPosition.y1 += (overflowY * cropperState.options.aspectRatio) > overflowX ? overflowY : overflowX / cropperState.options.aspectRatio;\n      }\n      break;\n    case 'bottom':\n      cropperPosition.x2 = cropperPosition.x1 + (cropperPosition.y2 - cropperPosition.y1) * cropperState.options.aspectRatio;\n      overflowX = Math.max(cropperPosition.x2 - cropperState.maxSize!.width, 0);\n      overflowY = Math.max(cropperPosition.y2 - cropperState.maxSize!.height, 0);\n      if (overflowX > 0 || overflowY > 0) {\n        cropperPosition.x2 -= (overflowY * cropperState.options.aspectRatio) > overflowX ? (overflowY * cropperState.options.aspectRatio) : overflowX;\n        cropperPosition.y2 -= (overflowY * cropperState.options.aspectRatio) > overflowX ? overflowY : (overflowX / cropperState.options.aspectRatio);\n      }\n      break;\n    case 'topleft':\n      cropperPosition.y1 = cropperPosition.y2 - (cropperPosition.x2 - cropperPosition.x1) / cropperState.options.aspectRatio;\n      overflowX = Math.max(0 - cropperPosition.x1, 0);\n      overflowY = Math.max(0 - cropperPosition.y1, 0);\n      if (overflowX > 0 || overflowY > 0) {\n        cropperPosition.x1 += (overflowY * cropperState.options.aspectRatio) > overflowX ? (overflowY * cropperState.options.aspectRatio) : overflowX;\n        cropperPosition.y1 += (overflowY * cropperState.options.aspectRatio) > overflowX ? overflowY : overflowX / cropperState.options.aspectRatio;\n      }\n      break;\n    case 'topright':\n      cropperPosition.y1 = cropperPosition.y2 - (cropperPosition.x2 - cropperPosition.x1) / cropperState.options.aspectRatio;\n      overflowX = Math.max(cropperPosition.x2 - cropperState.maxSize!.width, 0);\n      overflowY = Math.max(0 - cropperPosition.y1, 0);\n      if (overflowX > 0 || overflowY > 0) {\n        cropperPosition.x2 -= (overflowY * cropperState.options.aspectRatio) > overflowX ? (overflowY * cropperState.options.aspectRatio) : overflowX;\n        cropperPosition.y1 += (overflowY * cropperState.options.aspectRatio) > overflowX ? overflowY : overflowX / cropperState.options.aspectRatio;\n      }\n      break;\n    case 'right':\n    case 'bottomright':\n      cropperPosition.y2 = cropperPosition.y1 + (cropperPosition.x2 - cropperPosition.x1) / cropperState.options.aspectRatio;\n      overflowX = Math.max(cropperPosition.x2 - cropperState.maxSize!.width, 0);\n      overflowY = Math.max(cropperPosition.y2 - cropperState.maxSize!.height, 0);\n      if (overflowX > 0 || overflowY > 0) {\n        cropperPosition.x2 -= (overflowY * cropperState.options.aspectRatio) > overflowX ? (overflowY * cropperState.options.aspectRatio) : overflowX;\n        cropperPosition.y2 -= (overflowY * cropperState.options.aspectRatio) > overflowX ? overflowY : overflowX / cropperState.options.aspectRatio;\n      }\n      break;\n    case 'left':\n    case 'bottomleft':\n      cropperPosition.y2 = cropperPosition.y1 + (cropperPosition.x2 - cropperPosition.x1) / cropperState.options.aspectRatio;\n      overflowX = Math.max(0 - cropperPosition.x1, 0);\n      overflowY = Math.max(cropperPosition.y2 - cropperState.maxSize!.height, 0);\n      if (overflowX > 0 || overflowY > 0) {\n        cropperPosition.x1 += (overflowY * cropperState.options.aspectRatio) > overflowX ? (overflowY * cropperState.options.aspectRatio) : overflowX;\n        cropperPosition.y2 -= (overflowY * cropperState.options.aspectRatio) > overflowX ? overflowY : overflowX / cropperState.options.aspectRatio;\n      }\n      break;\n    case 'center':\n      cropperPosition.x2 = cropperPosition.x1 + (cropperPosition.y2 - cropperPosition.y1) * cropperState.options.aspectRatio;\n      cropperPosition.y2 = cropperPosition.y1 + (cropperPosition.x2 - cropperPosition.x1) / cropperState.options.aspectRatio;\n      const overflowX1 = Math.max(0 - cropperPosition.x1, 0);\n      const overflowX2 = Math.max(cropperPosition.x2 - cropperState.maxSize!.width, 0);\n      const overflowY1 = Math.max(cropperPosition.y2 - cropperState.maxSize!.height, 0);\n      const overflowY2 = Math.max(0 - cropperPosition.y1, 0);\n      if (overflowX1 > 0 || overflowX2 > 0 || overflowY1 > 0 || overflowY2 > 0) {\n        cropperPosition.x1 += (overflowY1 * cropperState.options.aspectRatio) > overflowX1 ? (overflowY1 * cropperState.options.aspectRatio) : overflowX1;\n        cropperPosition.x2 -= (overflowY2 * cropperState.options.aspectRatio) > overflowX2 ? (overflowY2 * cropperState.options.aspectRatio) : overflowX2;\n        cropperPosition.y1 += (overflowY2 * cropperState.options.aspectRatio) > overflowX2 ? overflowY2 : overflowX2 / cropperState.options.aspectRatio;\n        cropperPosition.y2 -= (overflowY1 * cropperState.options.aspectRatio) > overflowX1 ? overflowY1 : overflowX1 / cropperState.options.aspectRatio;\n      }\n      break;\n  }\n  return cropperPosition;\n}\n\nexport function getClientX(event: Event | BasicEvent | TouchEvent): number {\n  if ('touches' in event && event.touches[0]) {\n    return event.touches[0].clientX;\n  } else if ('clientX' in event) {\n    return event.clientX;\n  }\n\n  return 0;\n}\n\nexport function getClientY(event: Event | BasicEvent | TouchEvent): number {\n  if ('touches' in event && event.touches[0]) {\n    return event.touches[0].clientY;\n  } else if ('clientX' in event) {\n    return event.clientY;\n  }\n\n  return 0;\n}\n","import { CropperOptions } from '../interfaces/cropper-options.interface';\nimport {\n  CropperPosition,\n  Dimensions,\n  ImageTransform,\n  LoadedImage,\n} from '../interfaces';\nimport { SimpleChanges } from '@angular/core';\nimport { checkCropperPosition } from '../utils/cropper-position.utils';\n\nexport class CropperState {\n  options: CropperOptions = {\n    format: 'png',\n    output: 'blob',\n    autoCrop: true,\n    maintainAspectRatio: true,\n    aspectRatio: 1,\n    resetCropOnAspectRatioChange: true,\n    resizeToWidth: 0,\n    resizeToHeight: 0,\n    cropperMinWidth: 0,\n    cropperMinHeight: 0,\n    cropperMaxHeight: 0,\n    cropperMaxWidth: 0,\n    cropperStaticWidth: 0,\n    cropperStaticHeight: 0,\n    canvasRotation: 0,\n    roundCropper: false,\n    onlyScaleDown: false,\n    imageQuality: 92,\n    backgroundColor: null,\n    containWithinAspectRatio: false,\n    hideResizeSquares: false,\n    alignImage: 'center',\n    cropperFrameAriaLabel: undefined,\n    checkImageType: true,\n  };\n\n  loadedImage?: LoadedImage;\n  maxSize?: Dimensions;\n  cropper: CropperPosition = { x1: 0, x2: 0, y1: 0, y2: 0 };\n  transform: ImageTransform = {};\n\n  // Internal\n  cropperScaledMinWidth = 20;\n  cropperScaledMinHeight = 20;\n  cropperScaledMaxWidth = 20;\n  cropperScaledMaxHeight = 20;\n  stepSize = 3;\n\n  setOptionsFromChanges(changes: SimpleChanges): void {\n    if (changes['options']?.currentValue) {\n      this.setOptions(changes['options'].currentValue);\n    }\n    const options = Object.entries(changes)\n      .filter(([key]) => key in this.options)\n      .reduce(\n        (acc, [key, change]) => ({\n          ...acc,\n          [key]: change.currentValue,\n        }),\n        {} as Partial<CropperOptions>\n      );\n    if (Object.keys(options).length > 0) {\n      this.setOptions(options);\n    }\n  }\n\n  setOptions(options: Partial<CropperOptions>): void {\n    this.options = {\n      ...this.options,\n      ...(options || {}),\n    };\n    this.validateOptions();\n\n    if (!this.loadedImage?.transformed.image.complete || !this.maxSize) {\n      return;\n    }\n\n    let positionPossiblyChanged = false;\n    if (\n      (this.options.maintainAspectRatio && options['aspectRatio']) ||\n      options['maintainAspectRatio']\n    ) {\n      this.setCropperScaledMinSize();\n      this.setCropperScaledMaxSize();\n      if (\n        this.options.maintainAspectRatio &&\n        (this.options.resetCropOnAspectRatioChange ||\n          !this.aspectRatioIsCorrect())\n      ) {\n        this.cropper = this.maxSizeCropperPosition();\n        positionPossiblyChanged = true;\n      }\n    } else {\n      if (options['cropperMinWidth'] || options['cropperMinHeight']) {\n        this.setCropperScaledMinSize();\n        positionPossiblyChanged = true;\n      }\n      if (options['cropperMaxWidth'] || options['cropperMaxHeight']) {\n        this.setCropperScaledMaxSize();\n        positionPossiblyChanged = true;\n      }\n      if (options['cropperStaticWidth'] || options['cropperStaticHeight']) {\n        positionPossiblyChanged = true;\n      }\n    }\n\n    if (positionPossiblyChanged) {\n      this.cropper = checkCropperPosition(this.cropper, this, false);\n    }\n  }\n\n  private validateOptions(): void {\n    if (this.options.maintainAspectRatio && !this.options.aspectRatio) {\n      throw new Error(\n        '`aspectRatio` should > 0 when `maintainAspectRatio` is enabled'\n      );\n    }\n  }\n\n  setMaxSize(width: number, height: number): void {\n    this.maxSize = { width, height };\n    this.setCropperScaledMinSize();\n    this.setCropperScaledMaxSize();\n  }\n\n  setCropperScaledMinSize(): void {\n    if (this.loadedImage?.transformed.size) {\n      this.setCropperScaledMinWidth();\n      this.setCropperScaledMinHeight();\n    } else {\n      this.cropperScaledMinWidth = 20;\n      this.cropperScaledMinHeight = 20;\n    }\n  }\n\n  setCropperScaledMinWidth(): void {\n    this.cropperScaledMinWidth =\n      this.options.cropperMinWidth > 0\n        ? Math.max(\n            20,\n            (this.options.cropperMinWidth /\n              this.loadedImage!.transformed.size.width) *\n              this.maxSize!.width\n          )\n        : 20;\n  }\n\n  setCropperScaledMinHeight(): void {\n    if (this.options.maintainAspectRatio) {\n      this.cropperScaledMinHeight = Math.max(\n        20,\n        this.cropperScaledMinWidth / this.options.aspectRatio\n      );\n    } else if (this.options.cropperMinHeight > 0) {\n      this.cropperScaledMinHeight = Math.max(\n        20,\n        (this.options.cropperMinHeight /\n          this.loadedImage!.transformed.size.height) *\n          this.maxSize!.height\n      );\n    } else {\n      this.cropperScaledMinHeight = 20;\n    }\n  }\n\n  setCropperScaledMaxSize(): void {\n    if (this.loadedImage?.transformed.size) {\n      const ratio =\n        this.loadedImage.transformed.size.width / this.maxSize!.width;\n      this.cropperScaledMaxWidth =\n        this.options.cropperMaxWidth > 20\n          ? this.options.cropperMaxWidth / ratio\n          : this.maxSize!.width;\n      this.cropperScaledMaxHeight =\n        this.options.cropperMaxHeight > 20\n          ? this.options.cropperMaxHeight / ratio\n          : this.maxSize!.height;\n      if (this.options.maintainAspectRatio) {\n        if (\n          this.cropperScaledMaxWidth >\n          this.cropperScaledMaxHeight * this.options.aspectRatio\n        ) {\n          this.cropperScaledMaxWidth =\n            this.cropperScaledMaxHeight * this.options.aspectRatio;\n        } else if (\n          this.cropperScaledMaxWidth <\n          this.cropperScaledMaxHeight * this.options.aspectRatio\n        ) {\n          this.cropperScaledMaxHeight =\n            this.cropperScaledMaxWidth / this.options.aspectRatio;\n        }\n      }\n    } else {\n      this.cropperScaledMaxWidth = this.maxSize!.width;\n      this.cropperScaledMaxHeight = this.maxSize!.height;\n    }\n  }\n\n  equalsCropperPosition(cropper?: CropperPosition): boolean {\n    return (\n      (this.cropper == null && cropper == null) ||\n      (this.cropper != null &&\n        cropper != null &&\n        this.cropper.x1.toFixed(3) === cropper.x1.toFixed(3) &&\n        this.cropper.y1.toFixed(3) === cropper.y1.toFixed(3) &&\n        this.cropper.x2.toFixed(3) === cropper.x2.toFixed(3) &&\n        this.cropper.y2.toFixed(3) === cropper.y2.toFixed(3))\n    );\n  }\n\n  equalsTransformTranslate(transform: ImageTransform): boolean {\n    return (\n      (this.transform.translateH ?? 0) === (transform.translateH ?? 0) &&\n      (this.transform.translateV ?? 0) === (transform.translateV ?? 0)\n    );\n  }\n\n  equalsTransform(transform: ImageTransform): boolean {\n    return (\n      this.equalsTransformTranslate(transform) &&\n      (this.transform.scale ?? 1) === (transform.scale ?? 1) &&\n      (this.transform.rotate ?? 0) === (transform.rotate ?? 0) &&\n      (this.transform.flipH ?? false) === (transform.flipH ?? false) &&\n      (this.transform.flipV ?? false) === (transform.flipV ?? false)\n    );\n  }\n\n  aspectRatioIsCorrect(): boolean {\n    const currentCropAspectRatio =\n      (this.cropper.x2 - this.cropper.x1) / (this.cropper.y2 - this.cropper.y1);\n    return currentCropAspectRatio === this.options.aspectRatio;\n  }\n\n  resizeCropperPosition(oldMaxSize: Dimensions): void {\n    if (!this.cropper) {\n      return;\n    }\n    if (\n      oldMaxSize.width !== this.maxSize!.width ||\n      oldMaxSize.height !== this.maxSize!.height\n    ) {\n      this.cropper = {\n        x1: (this.cropper.x1 * this.maxSize!.width) / oldMaxSize.width,\n        x2: (this.cropper.x2 * this.maxSize!.width) / oldMaxSize.width,\n        y1: (this.cropper.y1 * this.maxSize!.height) / oldMaxSize.height,\n        y2: (this.cropper.y2 * this.maxSize!.height) / oldMaxSize.height,\n      };\n    }\n  }\n\n  maxSizeCropperPosition(): CropperPosition {\n    return {\n      x1: 0,\n      y1: 0,\n      x2: this.maxSize!.width,\n      y2: this.maxSize!.height,\n    };\n  }\n}\n","import { CropperPosition, ImageTransform } from './';\n\nexport type Position = 'left' | 'topleft' | 'top' | 'topright' | 'right' | 'bottomright' | 'bottom' | 'bottomleft' | 'center';\n\nexport interface MoveStart {\n  active: boolean;\n  type: MoveTypes | null;\n  position: Position | null;\n  transform?: ImageTransform;\n  cropper: CropperPosition;\n  clientX: number;\n  clientY: number;\n}\n\nexport enum MoveTypes {\n  Drag = 'drag',\n  Move = 'move',\n  Resize = 'resize',\n  Pinch = 'pinch'\n}\n","/*\n * Hermite resize - fast image resize/resample using Hermite filter.\n * https://github.com/viliusle/Hermite-resize\n */\n\nexport function resizeCanvas(canvas: HTMLCanvasElement, width: number, height: number) {\n  const width_source = canvas.width;\n  const height_source = canvas.height;\n  width = Math.round(width);\n  height = Math.round(height);\n\n  const ratio_w = width_source / width;\n  const ratio_h = height_source / height;\n  const ratio_w_half = Math.ceil(ratio_w / 2);\n  const ratio_h_half = Math.ceil(ratio_h / 2);\n\n  const ctx = canvas.getContext('2d');\n  if (ctx) {\n    const img = ctx.getImageData(0, 0, width_source, height_source);\n    const img2 = ctx.createImageData(width, height);\n    const data = img.data;\n    const data2 = img2.data;\n\n    for (let j = 0; j < height; j++) {\n      for (let i = 0; i < width; i++) {\n        const x2 = (i + j * width) * 4;\n        const center_y = j * ratio_h;\n        let weight = 0;\n        let weights = 0;\n        let weights_alpha = 0;\n        let gx_r = 0;\n        let gx_g = 0;\n        let gx_b = 0;\n        let gx_a = 0;\n\n        const xx_start = Math.floor(i * ratio_w);\n        const yy_start = Math.floor(j * ratio_h);\n        let xx_stop = Math.ceil((i + 1) * ratio_w);\n        let yy_stop = Math.ceil((j + 1) * ratio_h);\n        xx_stop = Math.min(xx_stop, width_source);\n        yy_stop = Math.min(yy_stop, height_source);\n\n        for (let yy = yy_start; yy < yy_stop; yy++) {\n          const dy = Math.abs(center_y - yy) / ratio_h_half;\n          const center_x = i * ratio_w;\n          const w0 = dy * dy; //pre-calc part of w\n          for (let xx = xx_start; xx < xx_stop; xx++) {\n            const dx = Math.abs(center_x - xx) / ratio_w_half;\n            const w = Math.sqrt(w0 + dx * dx);\n            if (w >= 1) {\n              //pixel too far\n              continue;\n            }\n            //hermite filter\n            weight = 2 * w * w * w - 3 * w * w + 1;\n            const pos_x = 4 * (xx + yy * width_source);\n            //alpha\n            gx_a += weight * data[pos_x + 3];\n            weights_alpha += weight;\n            //colors\n            if (data[pos_x + 3] < 255)\n              weight = weight * data[pos_x + 3] / 250;\n            gx_r += weight * data[pos_x];\n            gx_g += weight * data[pos_x + 1];\n            gx_b += weight * data[pos_x + 2];\n            weights += weight;\n          }\n        }\n        data2[x2] = gx_r / weights;\n        data2[x2 + 1] = gx_g / weights;\n        data2[x2 + 2] = gx_b / weights;\n        data2[x2 + 3] = gx_a / weights_alpha;\n      }\n    }\n\n\n    canvas.width = width;\n    canvas.height = height;\n\n    //draw\n    ctx.putImageData(img2, 0, 0);\n  }\n}\n","export function percentage(percent: number, totalValue: number) {\n  return (percent / 100) * totalValue;\n} ","import { CropperOptions, CropperPosition, ImageCroppedEvent } from '../interfaces';\nimport { CropperState } from '../component/cropper.state';\nimport { resizeCanvas } from '../utils/resize.utils';\nimport { percentage } from '../utils/percentage.utils';\nimport { OutputType } from '../interfaces/cropper-options.interface';\n\nexport class CropService {\n\n  crop(cropperState: CropperState, output: 'blob'): Promise<ImageCroppedEvent> | null;\n  crop(cropperState: CropperState, output: 'base64'): ImageCroppedEvent | null;\n  crop(cropperState: CropperState, output: OutputType): Promise<ImageCroppedEvent> | ImageCroppedEvent | null {\n    const imagePosition = this.getImagePosition(cropperState);\n    const width = imagePosition.x2 - imagePosition.x1;\n    const height = imagePosition.y2 - imagePosition.y1;\n    const cropCanvas = document.createElement('canvas') as HTMLCanvasElement;\n    cropCanvas.width = width;\n    cropCanvas.height = height;\n\n    const ctx = cropCanvas.getContext('2d');\n    if (!ctx) {\n      return null;\n    }\n    if (cropperState.options.backgroundColor != null) {\n      ctx.fillStyle = cropperState.options.backgroundColor;\n      ctx.fillRect(0, 0, width, height);\n    }\n\n    const scaleX = (cropperState.transform.scale || 1) * (cropperState.transform.flipH ? -1 : 1);\n    const scaleY = (cropperState.transform.scale || 1) * (cropperState.transform.flipV ? -1 : 1);\n    const {translateH, translateV} = this.getCanvasTranslate(cropperState);\n\n    const transformedImage = cropperState.loadedImage!.transformed;\n    ctx.setTransform(scaleX, 0, 0, scaleY, transformedImage.size.width / 2 + translateH, transformedImage.size.height / 2 + translateV);\n    ctx.translate(-imagePosition.x1 / scaleX, -imagePosition.y1 / scaleY);\n    ctx.rotate((cropperState.transform.rotate || 0) * Math.PI / 180);\n\n    ctx.drawImage(\n      transformedImage.image,\n      -transformedImage.size.width / 2,\n      -transformedImage.size.height / 2\n    );\n\n    const result: ImageCroppedEvent = {\n      width, height,\n      imagePosition,\n      cropperPosition: {...cropperState.cropper}\n    };\n    if (cropperState.options.containWithinAspectRatio) {\n      result.offsetImagePosition = this.getOffsetImagePosition(cropperState);\n    }\n    const resizeRatio = this.getResizeRatio(width, height, cropperState.options);\n    if (resizeRatio !== 1) {\n      result.width = Math.round(width * resizeRatio);\n      result.height = cropperState.options.maintainAspectRatio\n        ? Math.round(result.width / cropperState.options.aspectRatio)\n        : Math.round(height * resizeRatio);\n      resizeCanvas(cropCanvas, result.width, result.height);\n    }\n    if (output === 'blob') {\n      return this.cropToBlob(result, cropCanvas, cropperState);\n    } else {\n      result.base64 = cropCanvas.toDataURL('image/' + cropperState.options.format, this.getQuality(cropperState.options));\n      return result;\n    }\n  }\n\n  private async cropToBlob(output: ImageCroppedEvent, cropCanvas: HTMLCanvasElement, cropperState: CropperState): Promise<ImageCroppedEvent> {\n    output.blob = await new Promise<Blob | null>(resolve => cropCanvas.toBlob(resolve, 'image/' + cropperState.options.format, this.getQuality(cropperState.options)));\n    if (output.blob) {\n      output.objectUrl = URL.createObjectURL(output.blob);\n    }\n    return output;\n  }\n\n  private getCanvasTranslate(cropperState: CropperState): { translateH: number, translateV: number } {\n    if (cropperState.transform.translateUnit === 'px') {\n      const ratio = this.getRatio(cropperState);\n      return {\n        translateH: (cropperState.transform.translateH || 0) * ratio,\n        translateV: (cropperState.transform.translateV || 0) * ratio\n      };\n    } else {\n      return {\n        translateH: cropperState.transform.translateH ? percentage(cropperState.transform.translateH, cropperState.loadedImage!.transformed.size.width) : 0,\n        translateV: cropperState.transform.translateV ? percentage(cropperState.transform.translateV, cropperState.loadedImage!.transformed.size.height) : 0\n      };\n    }\n  }\n\n  private getRatio(cropperState: CropperState): number {\n    return cropperState.loadedImage!.transformed.size.width / cropperState.maxSize!.width;\n  }\n\n  private getImagePosition(cropperState: CropperState): CropperPosition {\n    const ratio = this.getRatio(cropperState);\n    const out: CropperPosition = {\n      x1: Math.round(cropperState.cropper.x1 * ratio),\n      y1: Math.round(cropperState.cropper.y1 * ratio),\n      x2: Math.round(cropperState.cropper.x2 * ratio),\n      y2: Math.round(cropperState.cropper.y2 * ratio)\n    };\n\n    if (!cropperState.options.containWithinAspectRatio) {\n      out.x1 = Math.max(out.x1, 0);\n      out.y1 = Math.max(out.y1, 0);\n      out.x2 = Math.min(out.x2, cropperState.loadedImage!.transformed.size.width);\n      out.y2 = Math.min(out.y2, cropperState.loadedImage!.transformed.size.height);\n    }\n\n    return out;\n  }\n\n  private getOffsetImagePosition(cropperState: CropperState): CropperPosition {\n    const canvasRotation = cropperState.options.canvasRotation + cropperState.loadedImage!.exifTransform.rotate;\n    const ratio = this.getRatio(cropperState);\n    let offsetX: number;\n    let offsetY: number;\n\n    if (canvasRotation % 2) {\n      offsetX = (cropperState.loadedImage!.transformed.size.width - cropperState.loadedImage!.original.size.height) / 2;\n      offsetY = (cropperState.loadedImage!.transformed.size.height - cropperState.loadedImage!.original.size.width) / 2;\n    } else {\n      offsetX = (cropperState.loadedImage!.transformed.size.width - cropperState.loadedImage!.original.size.width) / 2;\n      offsetY = (cropperState.loadedImage!.transformed.size.height - cropperState.loadedImage!.original.size.height) / 2;\n    }\n\n    const out: CropperPosition = {\n      x1: Math.round(cropperState.cropper.x1 * ratio) - offsetX,\n      y1: Math.round(cropperState.cropper.y1 * ratio) - offsetY,\n      x2: Math.round(cropperState.cropper.x2 * ratio) - offsetX,\n      y2: Math.round(cropperState.cropper.y2 * ratio) - offsetY\n    };\n\n    if (!cropperState.options.containWithinAspectRatio) {\n      out.x1 = Math.max(out.x1, 0);\n      out.y1 = Math.max(out.y1, 0);\n      out.x2 = Math.min(out.x2, cropperState.loadedImage!.transformed.size.width);\n      out.y2 = Math.min(out.y2, cropperState.loadedImage!.transformed.size.height);\n    }\n\n    return out;\n  }\n\n  getResizeRatio(width: number, height: number, options: CropperOptions): number {\n    const ratioWidth = options.resizeToWidth / width;\n    const ratioHeight = options.resizeToHeight / height;\n    const ratios = new Array<number>();\n\n    if (options.resizeToWidth > 0) {\n      ratios.push(ratioWidth);\n    }\n    if (options.resizeToHeight > 0) {\n      ratios.push(ratioHeight);\n    }\n\n    const result = ratios.length === 0 ? 1 : Math.min(...ratios);\n\n    if (result > 1 && !options.onlyScaleDown) {\n      return result;\n    }\n    return Math.min(result, 1);\n  }\n\n  getQuality(options: CropperOptions): number {\n    return Math.min(1, Math.max(0, options.imageQuality / 100));\n  }\n}\n","import { ExifTransform } from '../interfaces/exif-transform.interface';\n\n// Black 2x1 JPEG, with the following meta information set:\n// - EXIF Orientation: 6 (Rotated 90° CCW)\n// Source: https://github.com/blueimp/JavaScript-Load-Image\nconst testAutoOrientationImageURL =\n  'data:image/jpeg;base64,/9j/4QAiRXhpZgAATU0AKgAAAAgAAQESAAMAAAABAAYAAAA' +\n  'AAAD/2wCEAAEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBA' +\n  'QEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQE' +\n  'BAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAf/AABEIAAEAAgMBEQACEQEDEQH/x' +\n  'ABKAAEAAAAAAAAAAAAAAAAAAAALEAEAAAAAAAAAAAAAAAAAAAAAAQEAAAAAAAAAAAAAAAA' +\n  'AAAAAEQEAAAAAAAAAAAAAAAAAAAAA/9oADAMBAAIRAxEAPwA/8H//2Q==';\n\nexport function supportsAutomaticRotation(): Promise<boolean> {\n  return new Promise((resolve) => {\n    const img = new Image();\n    img.onload = () => {\n      // Check if browser supports automatic image orientation:\n      const supported = img.width === 1 && img.height === 2;\n      resolve(supported);\n    };\n    img.src = testAutoOrientationImageURL;\n  });\n}\n\nexport function getTransformationsFromExifData(exifRotationOrArrayBuffer: number | ArrayBufferLike): ExifTransform {\n  if (typeof exifRotationOrArrayBuffer === 'object') {\n    exifRotationOrArrayBuffer = getExifRotation(exifRotationOrArrayBuffer);\n  }\n  switch (exifRotationOrArrayBuffer) {\n    case 2:\n      return { rotate: 0, flip: true };\n    case 3:\n      return { rotate: 2, flip: false };\n    case 4:\n      return { rotate: 2, flip: true };\n    case 5:\n      return { rotate: 1, flip: true };\n    case 6:\n      return { rotate: 1, flip: false };\n    case 7:\n      return { rotate: 3, flip: true };\n    case 8:\n      return { rotate: 3, flip: false };\n    default:\n      return { rotate: 0, flip: false };\n  }\n}\n\nfunction getExifRotation(arrayBuffer: ArrayBufferLike): number {\n  const view = new DataView(arrayBuffer);\n  if (view.getUint16(0, false) !== 0xFFD8) {\n    return -2;\n  }\n  const length = view.byteLength;\n  let offset = 2;\n  while (offset < length) {\n    if (view.getUint16(offset + 2, false) <= 8) return -1;\n    const marker = view.getUint16(offset, false);\n    offset += 2;\n    if (marker == 0xFFE1) {\n      if (view.getUint32(offset += 2, false) !== 0x45786966) {\n        return -1;\n      }\n\n      const little = view.getUint16(offset += 6, false) == 0x4949;\n      offset += view.getUint32(offset + 4, little);\n      const tags = view.getUint16(offset, little);\n      offset += 2;\n      for (let i = 0; i < tags; i++) {\n        if (view.getUint16(offset + (i * 12), little) == 0x0112) {\n          return view.getUint16(offset + (i * 12) + 8, little);\n        }\n      }\n    } else if ((marker & 0xFF00) !== 0xFF00) {\n      break;\n    } else {\n      offset += view.getUint16(offset, false);\n    }\n  }\n  return -1;\n}\n","import { Dimensions, LoadedImage } from '../interfaces';\nimport { CropperState } from '../component/cropper.state';\nimport { ExifTransform } from '../interfaces/exif-transform.interface';\nimport { getTransformationsFromExifData, supportsAutomaticRotation } from '../utils/exif.utils';\n\ninterface LoadImageArrayBuffer {\n  originalImage: HTMLImageElement;\n  originalArrayBuffer: ArrayBufferLike;\n  originalObjectUrl: string;\n  originalImageSize?: { width: number; height: number; } | null;\n}\n\nexport class LoadImageService {\n\n  private autoRotateSupported: Promise<boolean> = supportsAutomaticRotation();\n\n  async loadImageFile(file: File, cropperSettings: CropperState): Promise<LoadedImage> {\n    const arrayBuffer = await file.arrayBuffer();\n    if (cropperSettings.options.checkImageType) {\n      return await this.checkImageTypeAndLoadImageFromArrayBuffer(arrayBuffer, file.type, cropperSettings);\n    }\n    return await this.loadImageFromArrayBuffer(arrayBuffer, cropperSettings);\n  }\n\n  private checkImageTypeAndLoadImageFromArrayBuffer(arrayBuffer: ArrayBufferLike, imageType: string, cropperSettings: CropperState): Promise<LoadedImage> {\n    if (!this.isValidImageType(imageType)) {\n      return Promise.reject(new Error('Invalid image type'));\n    }\n    return this.loadImageFromArrayBuffer(arrayBuffer, cropperSettings, imageType);\n  }\n\n  private isValidImageType(type: string): boolean {\n    return /image\\/(png|jpg|jpeg|heic|bmp|gif|tiff|svg|webp|x-icon|vnd.microsoft.icon)/.test(type);\n  }\n\n  async loadImageFromURL(url: string, cropperSettings: CropperState): Promise<LoadedImage> {\n    const res = await fetch(url);\n    const blob = await res.blob();\n    const buffer = await blob.arrayBuffer();\n    return await this.loadImageFromArrayBuffer(buffer, cropperSettings, blob.type);\n  }\n\n  loadBase64Image(imageBase64: string, cropperSettings: CropperState): Promise<LoadedImage> {\n    const arrayBuffer = this.base64ToArrayBuffer(imageBase64);\n    return this.loadImageFromArrayBuffer(arrayBuffer, cropperSettings);\n  }\n\n  private base64ToArrayBuffer(imageBase64: string): ArrayBufferLike {\n    imageBase64 = imageBase64.replace(/^data:([^;]+);base64,/gmi, '');\n    const binaryString = atob(imageBase64);\n    const len = binaryString.length;\n    const bytes = new Uint8Array(len);\n    for (let i = 0; i < len; i++) {\n      bytes[i] = binaryString.charCodeAt(i);\n    }\n    return bytes.buffer;\n  }\n\n  private async loadImageFromArrayBuffer(arrayBuffer: ArrayBufferLike, cropperState: CropperState, imageType?: string): Promise<LoadedImage> {\n    const res = await new Promise<LoadImageArrayBuffer>(async (resolve, reject) => {\n      try {\n        const blob = new Blob([arrayBuffer], imageType ? {type: imageType} : undefined);\n        const objectUrl = URL.createObjectURL(blob);\n        const originalImage = new Image();\n        const isSvg = imageType === 'image/svg+xml';\n        const originalImageSize = isSvg ? await this.getSvgImageSize(blob) : undefined;\n        originalImage.onload = () => resolve({\n          originalImage,\n          originalImageSize,\n          originalObjectUrl: objectUrl,\n          originalArrayBuffer: arrayBuffer\n        });\n        originalImage.onerror = reject;\n        originalImage.src = objectUrl;\n      } catch (e) {\n        reject(e);\n      }\n    });\n    return await this.transformImageFromArrayBuffer(res, cropperState, res.originalImageSize != null);\n  }\n\n  private async getSvgImageSize(blob: Blob): Promise<{ width: number; height: number; } | null> {\n    const parser = new DOMParser();\n    const doc = parser.parseFromString(await blob.text(), 'image/svg+xml');\n    const svgElement = doc.querySelector('svg');\n    if (!svgElement) {\n      throw Error('Failed to parse SVG image');\n    }\n    const widthAttr = svgElement.getAttribute('width');\n    const heightAttr = svgElement.getAttribute('height');\n    if (widthAttr && heightAttr) {\n      return null;\n    }\n    const viewBoxAttr = svgElement.getAttribute('viewBox')\n      || svgElement.getAttribute('viewbox');\n    if (viewBoxAttr) {\n      const viewBox = viewBoxAttr.split(' ');\n      return {\n        width: +viewBox[2],\n        height: +viewBox[3]\n      };\n    }\n    throw Error('Failed to load SVG image. SVG must have width + height or viewBox definition.');\n  }\n\n  private async transformImageFromArrayBuffer(res: LoadImageArrayBuffer, cropperSettings: CropperState, forceTransform = false): Promise<LoadedImage> {\n    const autoRotate = await this.autoRotateSupported;\n    const exifTransform = getTransformationsFromExifData(autoRotate ? -1 : res.originalArrayBuffer);\n    if (!res.originalImage || !res.originalImage.complete) {\n      return Promise.reject(new Error('No image loaded'));\n    }\n    const loadedImage = {\n      original: {\n        objectUrl: res.originalObjectUrl,\n        image: res.originalImage,\n        size: res.originalImageSize ?? {\n          width: res.originalImage.naturalWidth,\n          height: res.originalImage.naturalHeight\n        }\n      },\n      exifTransform\n    };\n    return this.transformLoadedImage(loadedImage, cropperSettings, forceTransform);\n  }\n\n  async transformLoadedImage(loadedImage: Partial<LoadedImage>, cropperState: CropperState, forceTransform = false): Promise<LoadedImage> {\n    const canvasRotation = cropperState.options.canvasRotation + loadedImage.exifTransform!.rotate;\n    const originalSize = loadedImage.original!.size;\n    if (!forceTransform && canvasRotation === 0 && !loadedImage.exifTransform!.flip && !cropperState.options.containWithinAspectRatio) {\n      return {\n        original: {\n          objectUrl: loadedImage.original!.objectUrl,\n          image: loadedImage.original!.image,\n          size: {...originalSize}\n        },\n        transformed: {\n          objectUrl: loadedImage.original!.objectUrl,\n          image: loadedImage.original!.image,\n          size: {...originalSize}\n        },\n        exifTransform: loadedImage.exifTransform!\n      };\n    }\n\n    const transformedSize = this.getTransformedSize(originalSize, loadedImage.exifTransform!, cropperState);\n    const canvas = document.createElement('canvas');\n    canvas.width = transformedSize.width;\n    canvas.height = transformedSize.height;\n    const ctx = canvas.getContext('2d');\n    ctx?.setTransform(\n      loadedImage.exifTransform!.flip ? -1 : 1,\n      0,\n      0,\n      1,\n      canvas.width / 2,\n      canvas.height / 2\n    );\n    ctx?.rotate(Math.PI * (canvasRotation / 2));\n    ctx?.drawImage(\n      loadedImage.original!.image,\n      -originalSize.width / 2,\n      -originalSize.height / 2\n    );\n    const blob = await new Promise<Blob | null>(resolve => canvas.toBlob(resolve, cropperState.options.format));\n    if (!blob) {\n      throw new Error('Failed to get Blob for transformed image.');\n    }\n    const objectUrl = URL.createObjectURL(blob);\n    const transformedImage = await this.loadImageFromObjectUrl(objectUrl);\n    return {\n      original: {\n        objectUrl: loadedImage.original!.objectUrl,\n        image: loadedImage.original!.image,\n        size: {...originalSize}\n      },\n      transformed: {\n        objectUrl: objectUrl,\n        image: transformedImage,\n        size: {\n          width: transformedImage.width,\n          height: transformedImage.height\n        }\n      },\n      exifTransform: loadedImage.exifTransform!\n    };\n  }\n\n  private loadImageFromObjectUrl(objectUrl: string): Promise<HTMLImageElement> {\n    return new Promise<HTMLImageElement>(((resolve, reject) => {\n      const image = new Image();\n      image.onload = () => resolve(image);\n      image.onerror = reject;\n      image.src = objectUrl;\n    }));\n  }\n\n  private getTransformedSize(\n    originalSize: { width: number, height: number },\n    exifTransform: ExifTransform,\n    cropperState: CropperState\n  ): Dimensions {\n    const canvasRotation = cropperState.options.canvasRotation + exifTransform.rotate;\n    if (cropperState.options.containWithinAspectRatio) {\n      if (canvasRotation % 2) {\n        const minWidthToContain = originalSize.width * cropperState.options.aspectRatio;\n        const minHeightToContain = originalSize.height / cropperState.options.aspectRatio;\n        return {\n          width: Math.max(originalSize.height, minWidthToContain),\n          height: Math.max(originalSize.width, minHeightToContain)\n        };\n      } else {\n        const minWidthToContain = originalSize.height * cropperState.options.aspectRatio;\n        const minHeightToContain = originalSize.width / cropperState.options.aspectRatio;\n        return {\n          width: Math.max(originalSize.width, minWidthToContain),\n          height: Math.max(originalSize.height, minHeightToContain)\n        };\n      }\n    }\n\n    if (canvasRotation % 2) {\n      return {\n        height: originalSize.width,\n        width: originalSize.height\n      };\n    }\n    return {\n      width: originalSize.width,\n      height: originalSize.height\n    };\n  }\n}\n","import {BasicEvent} from \"../interfaces/basic-event.interface\";\nimport {Position} from \"../interfaces/move-start.interface\";\n\nexport function getPositionForKey(key: string): Position {\n  switch (key) {\n    case 'ArrowUp':\n      return 'top';\n    case 'ArrowRight':\n      return 'right';\n    case 'ArrowDown':\n      return 'bottom';\n    case 'ArrowLeft':\n    default:\n      return 'left';\n  }\n}\n\nexport function getInvertedPositionForKey(key: string): Position {\n  switch (key) {\n    case 'ArrowUp':\n      return 'bottom';\n    case 'ArrowRight':\n      return 'left';\n    case 'ArrowDown':\n      return 'top';\n    case 'ArrowLeft':\n    default:\n      return 'right';\n  }\n}\n\nexport function getEventForKey(key: string, stepSize: number): BasicEvent {\n  switch (key) {\n    case 'ArrowUp':\n      return {clientX: 0, clientY: stepSize * -1};\n    case 'ArrowRight':\n      return {clientX: stepSize, clientY: 0};\n    case 'ArrowDown':\n      return {clientX: 0, clientY: stepSize};\n    case 'ArrowLeft':\n    default:\n      return {clientX: stepSize * -1, clientY: 0};\n  }\n}\n","import {\n  ChangeDetectionStrategy,\n  ChangeDetectorRef,\n  Component,\n  ElementRef,\n  EventEmitter,\n  HostBinding,\n  HostListener,\n  Input,\n  NgZone,\n  OnChanges,\n  OnDestroy,\n  OnInit,\n  Output, signal,\n  SimpleChanges,\n  ViewChild\n} from '@angular/core';\nimport { DomSanitizer, SafeStyle, SafeUrl } from '@angular/platform-browser';\nimport {\n  CropperOptions,\n  CropperPosition,\n  Dimensions,\n  ImageCroppedEvent,\n  ImageTransform,\n  LoadedImage,\n  MoveStart\n} from '../interfaces';\nimport { OutputFormat, OutputType } from '../interfaces/cropper-options.interface';\nimport { CropperState } from './cropper.state';\nimport { MoveTypes, Position } from '../interfaces/move-start.interface';\nimport { CropService } from '../services/crop.service';\nimport { LoadImageService } from '../services/load-image.service';\nimport { getEventForKey, getInvertedPositionForKey, getPositionForKey } from '../utils/keyboard.utils';\nimport { first, takeUntil } from 'rxjs/operators';\nimport { fromEvent, merge, Subject } from 'rxjs';\nimport { NgIf } from '@angular/common';\nimport { BasicEvent } from '../interfaces/basic-event.interface';\nimport {\n  checkCropperPosition,\n  checkCropperWithinMaxSizeBounds,\n  getClientX,\n  getClientY,\n  moveCropper,\n  resizeCropper\n} from '../utils/cropper-position.utils';\n\n@Component({\n  selector: 'image-cropper',\n  templateUrl: './image-cropper.component.html',\n  styleUrls: ['./image-cropper.component.scss'],\n  changeDetection: ChangeDetectionStrategy.OnPush,\n  standalone: true,\n  imports: [NgIf],\n})\nexport class ImageCropperComponent implements OnChanges, OnInit, OnDestroy {\n\n  private readonly pinchStart$ = new Subject<void>();\n  private readonly cropService = new CropService();\n  private readonly loadImageService = new LoadImageService();\n\n  private setImageMaxSizeRetries = 0;\n  private moveStart?: MoveStart;\n  private resizedWhileHidden = false;\n\n  protected readonly moveTypes = MoveTypes;\n  protected readonly state = new CropperState();\n\n  readonly safeImgDataUrl = signal<SafeUrl | string | undefined>(undefined);\n  safeTransformStyle?: SafeStyle | string;\n  marginLeft: SafeStyle | string = '0px';\n  imageVisible = false;\n\n  @ViewChild('wrapper', {static: true}) wrapper!: ElementRef<HTMLDivElement>;\n  @ViewChild('sourceImage', {static: false}) sourceImage!: ElementRef<HTMLDivElement>;\n\n  @Input() imageChangedEvent?: Event | null;\n  @Input() imageURL?: string;\n  @Input() imageBase64?: string;\n  @Input() imageFile?: File;\n  @Input() imageAltText?: string;\n\n  @Input() options?: Partial<CropperOptions>;\n  @Input() cropperFrameAriaLabel?: string;\n  @Input() output?: 'blob' | 'base64';\n  @Input() format?: OutputFormat;\n  @Input() autoCrop?: boolean;\n  @Input() cropper?: CropperPosition;\n  @Input() transform?: ImageTransform;\n  @Input() maintainAspectRatio?: boolean;\n  @Input() aspectRatio?: number;\n  @Input() resetCropOnAspectRatioChange?: boolean;\n  @Input() resizeToWidth?: number;\n  @Input() resizeToHeight?: number;\n  @Input() cropperMinWidth?: number;\n  @Input() cropperMinHeight?: number;\n  @Input() cropperMaxHeight?: number;\n  @Input() cropperMaxWidth?: number;\n  @Input() cropperStaticWidth?: number;\n  @Input() cropperStaticHeight?: number;\n  @Input() canvasRotation?: number;\n  @Input() initialStepSize?: number;\n  @Input() roundCropper?: boolean;\n  @Input() onlyScaleDown?: boolean;\n  @Input() imageQuality?: number;\n  @Input() backgroundColor?: string;\n  @Input() containWithinAspectRatio?: boolean;\n  @Input() hideResizeSquares?: boolean;\n  @Input() allowMoveImage = false;\n  @Input() checkImageType = true;\n  @Input() alignImage?: 'left' | 'center';\n\n  @HostBinding('class.disabled')\n  @Input() disabled = false;\n  @HostBinding('class.ngx-ic-hidden')\n  @Input() hidden = false;\n\n  @Output() imageCropped = new EventEmitter<ImageCroppedEvent>();\n  @Output() startCropImage = new EventEmitter<void>();\n  @Output() imageLoaded = new EventEmitter<LoadedImage>();\n  @Output() cropperReady = new EventEmitter<Dimensions>();\n  @Output() loadImageFailed = new EventEmitter<void>();\n  @Output() transformChange = new EventEmitter<ImageTransform>();\n  @Output() cropperChange = new EventEmitter<CropperPosition>();\n\n  @HostBinding('style.text-align')\n  get alignImageStyle() {\n    return this.state.options.alignImage;\n  }\n\n  constructor(\n    private sanitizer: DomSanitizer,\n    private cd: ChangeDetectorRef,\n    private zone: NgZone\n  ) {\n    this.reset();\n  }\n\n  ngOnInit(): void {\n    this.state.stepSize = this.initialStepSize || this.state.stepSize;\n  }\n\n  ngOnChanges(changes: SimpleChanges): void {\n    const previousCropperPosition = this.state.cropper;\n    const previousTransform = this.state.transform;\n    const previousBackgroundColor = this.state.options.backgroundColor;\n\n    this.state.setOptionsFromChanges(changes);\n    this.onChangesInputImage(changes);\n\n    if (changes['transform'] && this.transform) {\n      this.state.transform = this.transform;\n      this.setCssTransform();\n    }\n\n    if (!this.state.loadedImage?.transformed.image.complete || !this.state.maxSize) {\n      return;\n    }\n\n    if ((this.containWithinAspectRatio && changes['aspectRatio']) || changes['containWithinAspectRatio'] || changes['canvasRotation']) {\n      this.loadImageService\n        .transformLoadedImage(this.state.loadedImage, this.state)\n        .then((res) => this.setLoadedImage(res))\n        .catch((err) => this.loadImageError(err));\n      return;\n    }\n\n    if (changes['cropper'] && this.cropper) {\n      this.state.cropper = checkCropperPosition(this.cropper, this.state, true);\n    }\n    const cropperChanged = !this.state.equalsCropperPosition(previousCropperPosition);\n    if (cropperChanged && (!this.cropper || !this.state.equalsCropperPosition(this.cropper))) {\n      this.cropperChange.emit(this.state.cropper);\n    }\n    if (cropperChanged\n      || !this.state.equalsTransform(previousTransform)\n      || this.state.options.backgroundColor !== previousBackgroundColor) {\n      this.doAutoCrop();\n    }\n\n    if (changes['hidden'] && this.resizedWhileHidden && !this.hidden) {\n      setTimeout(() => {\n        this.onResize();\n        this.resizedWhileHidden = false;\n      });\n    }\n  }\n\n  private onChangesInputImage(changes: SimpleChanges): void {\n    if (changes['imageChangedEvent'] || changes['imageURL'] || changes['imageBase64'] || changes['imageFile']) {\n      this.reset();\n    }\n    if (changes['imageChangedEvent'] && this.isValidImageChangedEvent()) {\n      this.loadImageFile(this.imageChangedEvent.target.files[0]);\n    }\n    if (changes['imageURL'] && this.imageURL) {\n      this.loadImageFromURL(this.imageURL);\n    }\n    if (changes['imageBase64'] && this.imageBase64) {\n      this.loadBase64Image(this.imageBase64);\n    }\n    if (changes['imageFile'] && this.imageFile) {\n      this.loadImageFile(this.imageFile);\n    }\n  }\n\n  private isValidImageChangedEvent(): this is {\n    imageChangedEvent: Event & {\n      target: { files: FileList };\n    }\n  } {\n    const files = (this.imageChangedEvent as any)?.target?.files;\n    return files instanceof FileList && files.length > 0;\n  }\n\n  private reset(): void {\n    this.safeImgDataUrl.set('data:image/png;base64,iVBORw0KGg'\n      + 'oAAAANSUhEUgAAAAEAAAABCAYAAAAfFcSJAAAAC0lEQVQYV2NgAAIAAAU'\n      + 'AAarVyFEAAAAASUVORK5CYII=');\n    this.state.loadedImage = undefined;\n    this.state.maxSize = undefined;\n    this.imageVisible = false;\n  }\n\n  private loadImageFile(file: File): void {\n    this.loadImageService\n      .loadImageFile(file, this.state)\n      .then((res) => this.setLoadedImage(res))\n      .catch((err) => this.loadImageError(err));\n  }\n\n  private loadBase64Image(imageBase64: string): void {\n    this.loadImageService\n      .loadBase64Image(imageBase64, this.state)\n      .then((res) => this.setLoadedImage(res))\n      .catch((err) => this.loadImageError(err));\n  }\n\n  private loadImageFromURL(url: string): void {\n    this.loadImageService\n      .loadImageFromURL(url, this.state)\n      .then((res) => this.setLoadedImage(res))\n      .catch((err) => this.loadImageError(err));\n  }\n\n  private setLoadedImage(loadedImage: LoadedImage): void {\n    this.state.loadedImage = loadedImage;\n    this.safeImgDataUrl.set(this.sanitizer.bypassSecurityTrustResourceUrl(loadedImage.transformed.objectUrl));\n  }\n\n  loadImageError(error: unknown): void {\n    console.error(error);\n    this.loadImageFailed.emit();\n  }\n\n  private setCssTransform(): void {\n    const translateUnit = this.state.transform?.translateUnit || '%';\n    this.safeTransformStyle = this.sanitizer.bypassSecurityTrustStyle(\n      `translate(${this.state.transform.translateH || 0}${translateUnit}, ${this.state.transform.translateV || 0}${translateUnit})` +\n      ' scaleX(' + (this.state.transform.scale || 1) * (this.state.transform.flipH ? -1 : 1) + ')' +\n      ' scaleY(' + (this.state.transform.scale || 1) * (this.state.transform.flipV ? -1 : 1) + ')' +\n      ' rotate(' + (this.state.transform.rotate || 0) + 'deg)'\n    );\n  }\n\n  imageLoadedInView(): void {\n    if (this.state.loadedImage != null) {\n      this.imageLoaded.emit(this.state.loadedImage);\n      this.setImageMaxSizeRetries = 0;\n      setTimeout(() => this.checkImageMaxSizeRecursively());\n    }\n  }\n\n  private checkImageMaxSizeRecursively(): void {\n    if (this.setImageMaxSizeRetries > 40) {\n      this.loadImageFailed.emit();\n    } else if (this.sourceImageLoaded()) {\n      this.setMaxSize();\n      if (this.cropper && (!this.maintainAspectRatio || this.state.aspectRatioIsCorrect())) {\n        this.state.cropper = checkCropperPosition(this.cropper, this.state, true);\n        this.emitCropperPositionChange(this.cropper);\n      } else {\n        this.state.cropper = checkCropperPosition(this.state.maxSizeCropperPosition(), this.state, true);\n        this.cropperChange.emit(this.state.cropper);\n      }\n      this.imageVisible = true;\n      this.cropperReady.emit({...this.state.maxSize!});\n      this.doAutoCrop();\n      this.cd.markForCheck();\n    } else {\n      this.setImageMaxSizeRetries++;\n      setTimeout(() => this.checkImageMaxSizeRecursively(), 50);\n    }\n  }\n\n  private sourceImageLoaded(): boolean {\n    return this.sourceImage?.nativeElement?.offsetWidth > 1;\n  }\n\n  @HostListener('window:resize')\n  onResize(): void {\n    if (!this.state.loadedImage) {\n      return;\n    }\n    if (this.hidden) {\n      this.resizedWhileHidden = true;\n    } else {\n      const oldMaxSize = {...this.state.maxSize!};\n      this.setMaxSize();\n      this.state.resizeCropperPosition(oldMaxSize);\n      this.cd.markForCheck();\n    }\n  }\n\n  keyboardAccess(event: KeyboardEvent) {\n    this.changeKeyboardStepSize(event);\n    this.keyboardMoveCropper(event);\n  }\n\n  private changeKeyboardStepSize(event: KeyboardEvent): void {\n    const key = +event.key;\n    if (key >= 1 && key <= 9) {\n      this.state.stepSize = key;\n    }\n  }\n\n  private keyboardMoveCropper(event: KeyboardEvent) {\n    const keyboardWhiteList: string[] = ['ArrowUp', 'ArrowDown', 'ArrowRight', 'ArrowLeft'];\n    if (!(keyboardWhiteList.includes(event.key))) {\n      return;\n    }\n    const moveType = event.shiftKey ? MoveTypes.Resize : MoveTypes.Move;\n    const position = event.altKey ? getInvertedPositionForKey(event.key) : getPositionForKey(event.key);\n    const moveEvent = getEventForKey(event.key, this.state.stepSize);\n    event.preventDefault();\n    event.stopPropagation();\n    this.moveStart = {\n      active: true,\n      type: moveType,\n      position,\n      clientX: 0,\n      clientY: 0,\n      transform: this.state.transform,\n      cropper: this.state.cropper\n    };\n    this.handleMouseMove(moveEvent);\n    this.handleMouseUp();\n  }\n\n  startMove(event: Event | BasicEvent, moveType: MoveTypes, position: Position | null = null): void {\n    if (this.disabled\n      || this.moveStart?.active && this.moveStart?.type === MoveTypes.Pinch\n      || moveType === MoveTypes.Drag && !this.allowMoveImage) {\n      return;\n    }\n    if ('preventDefault' in event) {\n      event.preventDefault();\n    }\n    this.moveStart = {\n      active: true,\n      type: moveType,\n      position,\n      clientX: getClientX(event),\n      clientY: getClientY(event),\n      transform: this.state.transform,\n      cropper: this.state.cropper\n    };\n    this.initMouseMove();\n  }\n\n  private initMouseMove(): void {\n    merge(\n      fromEvent(document, 'mousemove'),\n      fromEvent(document, 'touchmove')\n    ).pipe(\n      takeUntil(merge(\n        fromEvent(document, 'mouseup'),\n        fromEvent(document, 'touchend'),\n        this.pinchStart$\n      ).pipe(first()))\n    ).subscribe({\n      next: (event) => this.zone.run(() => {\n        this.handleMouseMove(event);\n        this.cd.markForCheck();\n      }),\n      complete: () => this.zone.run(() => {\n        this.handleMouseUp();\n        this.cd.markForCheck();\n      })\n    });\n  }\n\n  private handleMouseMove(event: Event | BasicEvent): void {\n    if (!this.moveStart?.active) {\n      return;\n    }\n    if ('stopPropagation' in event) {\n      event.stopPropagation();\n    }\n    if ('preventDefault' in event) {\n      event.preventDefault();\n    }\n    if (this.moveStart.type === MoveTypes.Move) {\n      this.state.cropper = checkCropperWithinMaxSizeBounds(\n        moveCropper(event, this.moveStart),\n        this.state,\n        true\n      );\n    } else if (this.moveStart.type === MoveTypes.Resize) {\n      if (!this.cropperStaticWidth && !this.cropperStaticHeight) {\n        this.state.cropper = checkCropperWithinMaxSizeBounds(\n          resizeCropper(event, this.moveStart, this.state),\n          this.state,\n          false\n        );\n      }\n    } else if (this.moveStart.type === MoveTypes.Drag) {\n      const diffX = getClientX(event) - this.moveStart.clientX;\n      const diffY = getClientY(event) - this.moveStart.clientY;\n      this.state.transform = {\n        ...this.state.transform,\n        translateH: (this.moveStart.transform?.translateH || 0) + diffX,\n        translateV: (this.moveStart.transform?.translateV || 0) + diffY\n      };\n      this.setCssTransform();\n    }\n  }\n\n  private handleMouseUp(): void {\n    if (!this.moveStart?.active || this.moveStart?.type === MoveTypes.Pinch) {\n      return;\n    }\n    if (!this.state.equalsCropperPosition(this.moveStart.cropper) || this.moveStart.transform && !this.state.equalsTransform(this.moveStart.transform)) {\n      if (this.moveStart.type === MoveTypes.Drag) {\n        this.transformChange.emit(this.state.transform);\n      } else {\n        this.cropperChange.emit(this.state.cropper);\n      }\n      this.doAutoCrop();\n    }\n    this.moveStart = undefined;\n  }\n\n  startPinch(event: TouchEvent) {\n    if (this.disabled || !this.sourceImageLoaded() || event.touches.length < 2) {\n      return;\n    }\n    if ('preventDefault' in event) {\n      event.preventDefault();\n    }\n    this.moveStart = {\n      active: true,\n      type: MoveTypes.Pinch,\n      position: 'center',\n      clientX: this.state.cropper.x1 + (this.state.cropper.x2 - this.state.cropper.x1) / 2,\n      clientY: this.state.cropper.y1 + (this.state.cropper.y2 - this.state.cropper.y1) / 2,\n      cropper: this.state.cropper\n    };\n    this.initPinch();\n  }\n\n  private initPinch(): void {\n    this.pinchStart$.next();\n    fromEvent(document, 'touchmove')\n      .pipe(takeUntil(fromEvent(document, 'touchend')))\n      .subscribe({\n        next: (event) => this.zone.run(() => {\n          this.handlePinchMove(event as TouchEvent);\n          this.cd.markForCheck();\n        }),\n        complete: () => this.zone.run(() => {\n          this.handlePinchStop();\n          this.cd.markForCheck();\n        })\n      });\n  }\n\n  handlePinchMove(event: TouchEvent) {\n    if (!this.moveStart?.active) {\n      return;\n    }\n    if (event.preventDefault) {\n      event.preventDefault();\n    }\n    if (this.moveStart.type === MoveTypes.Pinch) {\n      if (!this.cropperStaticWidth && !this.cropperStaticHeight) {\n        this.state.cropper = checkCropperWithinMaxSizeBounds(\n          resizeCropper(event, this.moveStart, this.state),\n          this.state,\n          false\n        );\n      }\n    }\n    this.cd.markForCheck();\n  }\n\n  handlePinchStop(): void {\n    if (!this.moveStart?.active) {\n      return;\n    }\n    if (!this.state.equalsCropperPosition(this.moveStart.cropper)) {\n      this.emitCropperPositionChange(this.moveStart.cropper);\n      this.doAutoCrop();\n    }\n    this.moveStart = undefined;\n  }\n\n  private setMaxSize(): void {\n    if (this.sourceImage) {\n      const sourceImageStyle = getComputedStyle(this.sourceImage.nativeElement);\n      this.state.setMaxSize(parseFloat(sourceImageStyle.width), parseFloat(sourceImageStyle.height));\n      this.marginLeft = this.sanitizer.bypassSecurityTrustStyle('calc(50% - ' + this.state.maxSize!.width / 2 + 'px)');\n    }\n  }\n\n  private emitCropperPositionChange(previousPosition: CropperPosition): void {\n    if (!this.state.equalsCropperPosition(previousPosition)) {\n      this.cropperChange.emit(this.state.cropper);\n    }\n  }\n\n  private doAutoCrop(): void {\n    if (this.state.options.autoCrop) {\n      void this.crop();\n    }\n  }\n\n  crop(): ImageCroppedEvent | null;\n  crop(output: 'base64'): ImageCroppedEvent | null;\n  crop(output: 'blob'): Promise<ImageCroppedEvent> | null;\n  crop(output: OutputType = this.state.options.output): Promise<ImageCroppedEvent> | ImageCroppedEvent | null {\n    if (this.state.loadedImage?.transformed?.image != null) {\n      this.startCropImage.emit();\n      if (output === 'blob') {\n        return this.cropToBlob();\n      } else if (output === 'base64') {\n        return this.cropToBase64();\n      }\n    }\n    return null;\n  }\n\n  private cropToBlob(): Promise<ImageCroppedEvent> | null {\n    return new Promise((resolve, reject) => this.zone.run(async () => {\n      const result = await this.cropService.crop(this.state, 'blob');\n      if (result) {\n        this.imageCropped.emit(result);\n        resolve(result);\n      } else {\n        reject('Crop image failed');\n      }\n    }));\n  }\n\n  private cropToBase64(): ImageCroppedEvent | null {\n    const result = this.cropService.crop(this.state, 'base64');\n    if (result) {\n      this.imageCropped.emit(result);\n      return result;\n    }\n    return null;\n  }\n\n  ngOnDestroy(): void {\n    this.pinchStart$.complete();\n  }\n}\n","<div\n  [style.background]=\"imageVisible && state.options.backgroundColor\"\n  (touchstart)=\"startPinch($event)\"\n>\n  <img\n    #sourceImage\n    class=\"ngx-ic-source-image\"\n    role=\"presentation\"\n    *ngIf=\"safeImgDataUrl() as src\"\n    [src]=\"src\"\n    [style.visibility]=\"imageVisible ? 'visible' : 'hidden'\"\n    [style.transform]=\"safeTransformStyle\"\n    [class.ngx-ic-draggable]=\"!disabled && allowMoveImage\"\n    [attr.alt]=\"imageAltText\"\n    (load)=\"imageLoadedInView()\"\n    (mousedown)=\"startMove($event, moveTypes.Drag)\"\n    (touchstart)=\"startMove($event, moveTypes.Drag)\"\n    (error)=\"loadImageError($event)\"\n  >\n  <div\n    class=\"ngx-ic-overlay\"\n    [style.width.px]=\"state.maxSize?.width || 0\"\n    [style.height.px]=\"state.maxSize?.height || 0\"\n    [style.margin-left]=\"alignImage === 'center' ? marginLeft : null\"\n  ></div>\n  <div\n    class=\"ngx-ic-cropper\"\n    *ngIf=\"imageVisible\"\n    [class.ngx-ic-round]=\"state.options.roundCropper\"\n    [attr.aria-label]=\"state.options.cropperFrameAriaLabel\"\n    [style.top.px]=\"state.cropper.y1\"\n    [style.left.px]=\"state.cropper.x1\"\n    [style.width.px]=\"state.cropper.x2 - state.cropper.x1\"\n    [style.height.px]=\"state.cropper.y2 - state.cropper.y1\"\n    [style.margin-left]=\"state.options.alignImage === 'center' ? marginLeft : null\"\n    [style.visibility]=\"imageVisible ? 'visible' : 'hidden'\"\n    (keydown)=\"keyboardAccess($event)\"\n    tabindex=\"0\"\n  >\n    <div\n      (mousedown)=\"startMove($event, moveTypes.Move)\"\n      (touchstart)=\"startMove($event, moveTypes.Move)\"\n      class=\"ngx-ic-move\"\n      role=\"presentation\">\n    </div>\n    <ng-container\n      *ngIf=\"!state.options.hideResizeSquares && !(state.options.cropperStaticWidth && state.options.cropperStaticHeight)\">\n      <span\n        class=\"ngx-ic-resize ngx-ic-topleft\"\n        role=\"presentation\"\n        (mousedown)=\"startMove($event, moveTypes.Resize, 'topleft')\"\n        (touchstart)=\"startMove($event, moveTypes.Resize, 'topleft')\"\n      >\n        <span class=\"ngx-ic-square\"></span>\n      </span>\n      <span class=\"ngx-ic-resize ngx-ic-top\">\n        <span class=\"ngx-ic-square\"></span>\n      </span>\n      <span\n        class=\"ngx-ic-resize ngx-ic-topright\"\n        role=\"presentation\"\n        (mousedown)=\"startMove($event, moveTypes.Resize, 'topright')\"\n        (touchstart)=\"startMove($event, moveTypes.Resize, 'topright')\"\n      >\n        <span class=\"ngx-ic-square\"></span>\n      </span>\n      <span class=\"ngx-ic-resize ngx-ic-right\">\n        <span class=\"ngx-ic-square\"></span>\n      </span>\n      <span\n        class=\"ngx-ic-resize ngx-ic-bottomright\"\n        role=\"presentation\"\n        (mousedown)=\"startMove($event, moveTypes.Resize, 'bottomright')\"\n        (touchstart)=\"startMove($event, moveTypes.Resize, 'bottomright')\"\n      >\n        <span class=\"ngx-ic-square\"></span>\n      </span>\n      <span class=\"ngx-ic-resize ngx-ic-bottom\">\n        <span class=\"ngx-ic-square\"></span>\n      </span>\n      <span\n        class=\"ngx-ic-resize ngx-ic-bottomleft\"\n        role=\"presentation\"\n        (mousedown)=\"startMove($event, moveTypes.Resize, 'bottomleft')\"\n        (touchstart)=\"startMove($event, moveTypes.Resize, 'bottomleft')\"\n      >\n        <span class=\"ngx-ic-square\"></span>\n      </span>\n      <span class=\"ngx-ic-resize ngx-ic-left\">\n        <span class=\"ngx-ic-square\"></span>\n      </span>\n      <span\n        class=\"ngx-ic-resize-bar ngx-ic-top\"\n        role=\"presentation\"\n        (mousedown)=\"startMove($event, moveTypes.Resize, 'top')\"\n        (touchstart)=\"startMove($event, moveTypes.Resize, 'top')\"\n      ></span>\n      <span\n        class=\"ngx-ic-resize-bar ngx-ic-right\"\n        role=\"presentation\"\n        (mousedown)=\"startMove($event, moveTypes.Resize, 'right')\"\n        (touchstart)=\"startMove($event, moveTypes.Resize, 'right')\"\n      ></span>\n      <span\n        class=\"ngx-ic-resize-bar ngx-ic-bottom\"\n        role=\"presentation\"\n        (mousedown)=\"startMove($event, moveTypes.Resize, 'bottom')\"\n        (touchstart)=\"startMove($event, moveTypes.Resize, 'bottom')\"\n      ></span>\n      <span\n        class=\"ngx-ic-resize-bar ngx-ic-left\"\n        role=\"presentation\"\n        (mousedown)=\"startMove($event, moveTypes.Resize, 'left')\"\n        (touchstart)=\"startMove($event, moveTypes.Resize, 'left')\"\n      ></span>\n    </ng-container>\n  </div>\n</div>\n","import { CommonModule } from '@angular/common';\nimport { Component, ElementRef, EventEmitter, Input, OnInit, Output, ViewChild } from '@angular/core';\nimport { NxtCustomTranslatePipe } from \"../../pipe/custom-translate.pipe\";\n\n@Component({\n  selector: 'app-custom-model',\n  standalone: true,\n  imports: [\n    CommonModule,\n    NxtCustomTranslatePipe\n],\n  templateUrl: './custom-model.component.html',\n  styleUrls: ['./custom-model.component.css']\n})\nexport class CustomModelComponent implements OnInit {\n\n  constructor() { }\n  @Input() modalTitle: any;\n  @Input() isModalOpen = false;\n  @Input() modalSize = '';\n  @Input() saveButtonValue = 'Save';\n  @Input() modalFooter = true;\n  @Output() saveButtonEmit = new EventEmitter<any>();\n  @Output() cancelButtonEmit = new EventEmitter<any>();\n\n  onSave() {\n    this.saveButtonEmit.emit();\n  }\n\n  onCancel() {\n    this.cancelButtonEmit.emit();\n  }\n\n\n  ngOnInit(): void {\n  }\n\n  closeModal() {\n    this.cancelButtonEmit.emit(false);\n  }\n\n  saveModal() {\n    this.saveButtonEmit.emit();\n  }\n\n}\n","<div *ngIf=\"isModalOpen\" class=\"modal\" [ngClass]=\"modalSize\">\n    <div class=\"modal-content\">\n      <div class=\"modal-header\">\n        <span class=\"close\" (click)=\"onCancel()\">&times;</span>\n        <h2>{{ modalTitle }}</h2>\n      </div>\n      <div class=\"modal-body\">\n        <ng-content></ng-content>\n      </div>\n      <!-- /* VD 06Sep24 styling changes */-->\n      <div class=\"modal-footer\" *ngIf=\"modalFooter\">\n        <button (click)=\"onSave()\">{{ saveButtonValue }}</button>\n        <button (click)=\"onCancel()\">{{\"CANCEL\" | nxtCustomTranslate : 'Cancel'}}</button>\n      </div>\n    </div>\n</div>\n  ","import { Component, ElementRef, EventEmitter, Input, OnInit, Output, SimpleChanges, ViewChild } from '@angular/core';\n//import { QuestionbookComponent } from '../../pages/questionbook/questionbook.component';\n//import { ComponenthostDirective } from '../../directives/componenthost/componenthost.directive';\nimport { CommonModule } from '@angular/common';\nimport { ChangeService } from '../../services/change/change.service';\nimport { NxtCustomTranslatePipe } from '../../pipe/custom-translate.pipe';\ninterface CalendarDay {\n  date: Date;\n  events: any[];\n  isCurrentMonth: boolean;\n  isPast: boolean;\n  isToday: boolean;\n  isFuture: boolean;\n  isSelected?: boolean;\n}\n@Component({\n  selector: 'app-custom-calendar',\n  standalone: true,\n  imports: [\n    CommonModule, NxtCustomTranslatePipe\n  ],\n  templateUrl: './custom-calendar.component.html',\n  styleUrls: ['./custom-calendar.component.css'],\n})\nexport class CustomCalendarComponent implements OnInit {\n  @Output() eventSelected = new EventEmitter<any>();\n  // VD 06Sep24 calendar changes\n  @Output() dateSelected = new EventEmitter<any>();\n  @Output() openModal = new EventEmitter<any>();\n  @Output() closeModal = new EventEmitter<any>();\n  @Input() allEvents: any[] = []; \n  @Input() question: any\n  @Input() nxtId: string;\n  //@ViewChild(ComponenthostDirective, { static: true }) dynamicHost: ComponenthostDirective;\n  entries = [];\n  referenceQuestions = [];\n  qbRefrenceBook:any;\n  calendarQuestion = [];\n  calendar = {};\n  currentDate: Date = new Date();\n  calendarDays: CalendarDay[] = [];\n  daysOfWeek: string[] = ['Sunday', 'Monday', 'Tuesday', 'Wednesday', 'Thursday', 'Friday', 'Saturday'];\n  newEventTitle: string = '';\n  newEventTime: string = '';\n  newDescription: string = '';\n  newLink: string = '';\n  selectedDay: CalendarDay | null = null;\n  isModalOpen = false;\n  modalTitle = 'Custom Modal';\n  modalSize = 'large';\n  saveButtonValue = 'Save';\n  modalFooter = true;\n  editingEventId: number;\n  editingEntryGroup: any;\n  showAppoinmentSection: boolean = true;\n  subscription: any;\n  constructor( private changeService: ChangeService) { }\n  ngOnInit() {\n     if(this.question?.input){\n      this.allEvents = this.question.input;\n     }\n    this.processQuestion();\n    this.generateCalendar();\n    this.subscription = this.changeService.customChange$.subscribe(\n      (changeValue) => {\n          if(changeValue == 'calendar-modal-save') {\n            this.onSave();\n          }\n          if(changeValue == 'dataBind') {\n            if(this.question?.input){\n              this.allEvents = this.question.input;\n             }\n            this.processQuestion();\n            this.generateCalendar();\n          }\n      }\n    );\n   // this.dateSelected.emit(this.calendar);\n    //this.eventSelected.emit(this.allEvents);\n  }\n  // RS 09DEC24 Changed keys\n  processQuestion(){\n    // SKS20MAR25 check if question fieldsmeta is string\n    this.entries =  typeof this.question['fieldsMeta'] === 'object'  ?  this.question['fieldsMeta'] || [] : JSON.parse( this.question['fieldsMeta']) ;\n    this.qbRefrenceBook = typeof this.question['qbReferenceQuestions'] === 'object'  ?  this.question['qbReferenceQuestions'] : JSON.parse( this.question['qbReferenceQuestions']) ;\n    let title = this.qbRefrenceBook?.questionbook?.title;\n    this.modalTitle = title;\n    this.referenceQuestions = [];\n    if(this.entries.length > 0){\n       this.entries.forEach(element => {\n           if(element.questionReference){\n             let qReference = JSON.parse(element.questionReference);\n             this.referenceQuestions.push(qReference?.question);\n           }\n       });\n    }\n  }\n   // sunday comment\n  // openQuestionBookModal() {\n  //   const viewContainerRef = this.dynamicHost.viewContainerRef;\n  //   viewContainerRef.clear();\n  //   const componentRef = viewContainerRef.createComponent(QuestionbookComponent);\n  //   componentRef.instance.qbItem = this.qbRefrenceBook;\n  //   componentRef.instance.questions = this.referenceQuestions;\n  //   componentRef.instance.handleQuestion.subscribe((event: any) => this.handleQuestionEvent(event));\n  // }\n\n  generateCalendar() {\n    const year = this.currentDate.getFullYear();\n    const month = this.currentDate.getMonth();\n\n    const startOfMonth = new Date(year, month, 1);\n    const endOfMonth = new Date(year, month + 1, 0);\n\n    const startDayOfWeek = startOfMonth.getDay();\n    const endDayOfWeek = endOfMonth.getDay();\n\n    const startDate = new Date(startOfMonth);\n    startDate.setDate(startDate.getDate() - startDayOfWeek);\n\n    const endDate = new Date(endOfMonth);\n    endDate.setDate(endDate.getDate() + (6 - endDayOfWeek));\n\n    const today = new Date(new Date().setHours(0, 0, 0, 0));\n    \n     this.calendarDays = [];\n      for (let d = new Date(startDate); d <= endDate; d.setDate(d.getDate() + 1)) {\n        const date = new Date(d);\n        this.calendarDays.push({\n          date: date,\n          events: [],\n          isCurrentMonth: d.getMonth() === month,\n          isPast: date < today,\n          isToday: date.getTime() === today.getTime(),\n          isFuture: date > today,\n        });\n      }\n\n    // Populate calendar with events from allEvents array\n    this.calendarDays.forEach(day => {\n      day.events = this.allEvents?.filter(event => event?.date?.toDateString() === day.date.toDateString());\n    });\n     // VD 06Sep24 calendar changes\n    let cal = {}\n    cal['year'] = year;\n    cal['month'] = month + 1;\n    this.calendar = cal;\n  }\n\n  selectDay(day: CalendarDay) {\n     // VD 06Sep24 calendar changes\n    this.showAppoinmentSection = true;\n    this.selectedDay = day;\n   // this.eventSelected.emit(day?.events);\n    const previouslySelectedDay = this.calendarDays.find(d => d.isSelected);\n    if (previouslySelectedDay) {\n      previouslySelectedDay.isSelected = false;\n    }\n    // Select the clicked day\n    day.isSelected = true;\n   // VD 09Sep24- setup the query param data for api call\n    let referenceData = [];\n    this.referenceQuestions.forEach(ques => {\n      // VD 09-09-24 get the selected date\n      // need to add in the document\n      // RS 09DEC24 Changed keys\n       if(ques.referenceField == 'selectedDate'){\n          ques.input = day.date.toISOString();\n       }\n       // VD 09-09-24 get the query refrence  field data to pass the queryParam  for api\n      ques['subText'] = typeof ques?.subText === 'object' ? ques?.subText : JSON.parse(ques['subText'] || {});\n       if(ques.subText){\n        let subText = ques.subText;\n        if (subText.queryField && subText.queryValueReference) {\n            let currentQues = ques;\n            let queryReferences = subText.queryValueReference.split(',');   \n            queryReferences.forEach(refField => {\n                let refQues = this.referenceQuestions.find(q => q.referenceField === refField);\n                if (refQues) {\n                    referenceData.push(refQues);\n                }\n            });\n            // Add the referenceData array to the current question\n            currentQues.referenceQueryData = referenceData;\n        }\n       }\n    })\n  }\n\n  previousMonth() {\n    this.showAppoinmentSection = false;\n    this.currentDate.setMonth(this.currentDate.getMonth() - 1);\n    this.currentDate = new Date(this.currentDate); // Ensure the date object is updated\n    this.generateCalendar();\n    this.dateSelected.emit(this.calendar);\n    this.eventSelected.emit(this.allEvents);\n  }\n\n  nextMonth() {\n     // VD 06Sep24 calendar changes\n    this.showAppoinmentSection = false;\n    this.currentDate.setMonth(this.currentDate.getMonth() + 1);\n    this.currentDate = new Date(this.currentDate); // Ensure the date object is updated\n    this.generateCalendar();\n    this.dateSelected.emit(this.calendar);\n    this.eventSelected.emit(this.allEvents);\n  }\n\n  addAppointment() {\n    this.isModalOpen = true;\n     this.calendarQuestion = this.referenceQuestions.map(q => ({ ...q, input: '' }));\n    this.referenceQuestions.forEach(ques => {\n      // clear the input\n      if(ques.referenceField != 'selectedDate'){\n        if(ques.type == 'Dropdown' || ques.type == 'MultiSelect'){\n          delete ques.input;\n          delete ques.selectedValue;\n           // VD 06Sep24 calendar changes\n        }else {\n          delete ques.input;\n        }\n      }\n    });\n    this.editingEventId = null;\n    this.calendarQuestion = this.referenceQuestions;\n    this.openBookModel();\n    // sunday comment\n    //this.openQuestionBookModal();\n  }\n\n  openBookModel(){\n    this.openModal.emit({\n      qbRefrenceBook: this.qbRefrenceBook,\n      referenceQuestions: this.referenceQuestions,\n      modalTitle : this.modalTitle,\n      modalSize : this.modalSize,\n      saveButtonValue : this.saveButtonValue,\n      modalFooter : this.modalFooter,\n\n    });\n  }\n\n  closeCalendarModal() {\n    this.isModalOpen = false;\n    this.closeModal.emit(true);\n  }\n // VD 06Sep24 calendar changes\n\neditEvent(event: any, entryGroup: any) {\n  this.isModalOpen = true;\n  this.referenceQuestions = Object.values(entryGroup);\n  this.calendarQuestion = [...this.referenceQuestions]; // Make a copy of the current entries to edit\n  this.editingEventId = event.id;\n  this.editingEntryGroup = entryGroup; // Store the entry group being edited\n  this.generateCalendar(); // Regenerate the calendar to reflect changes\n  this.openBookModel();\n  // suday comment\n // this.openQuestionBookModal();\n\n}\n\ndeleteEvent( eventId: number, entryGroup: any) {\n  let event = this.allEvents?.find(e => e?.id === eventId);\n  if (event) {\n      // Find the index of the entryGroup to delete\n      const entryIndex = event.entries.indexOf(entryGroup);\n      if (entryIndex > -1) {\n          event.entries.splice(entryIndex, 1); // Remove the specific entry\n      }\n\n      // If the event has no more entries, remove the event entirely\n      if (event.entries.length === 0) {\n          const eventIndex = this.allEvents?.indexOf(event);\n          if (eventIndex > -1) {\n              this.allEvents?.splice(eventIndex, 1); // Remove the entire event\n          }\n      }\n  }\n  let eventData = {};\n   eventData['action'] = \"delete\";\n   eventData['data'] = event;\n  this.eventSelected.emit(eventData);\n  this.generateCalendar(); // Regenerate the calendar to reflect the changes\n}\n\n // VD 06Sep24 calendar changes\n  addEvent(day: CalendarDay, entryQues) {\n    // Transform new entries into the desired format\n    const newEntries = entryQues.reduce((acc, q) => {\n        acc[q.id] = { ...q };\n        return acc;\n    }, {});\n\n    // Find an existing event for the given date\n    const existingEvent = day.events?.find(event => event.date === day.date);\n\n    if (existingEvent) {\n        // Merge new entries into the existing event's entries array\n        // Check if the entries array already contains an object with the same id\n        const existingEntries = existingEvent.entries.map(entry => ({ ...entry }));\n        // Append new entries to the existing entries\n        existingEntries.push(newEntries);\n        existingEvent.entries = existingEntries;\n    } else {\n        // Create a new event if it doesn't exist for the given date\n        const newEvent = {\n            id: this.generateId(),\n            date: day.date,\n            entries: [newEntries] // Wrap the new entries in an array\n        };\n        day.events = day?.events || []\n        day.events.push(newEvent);\n        this.allEvents?.push(newEvent);\n        //this.eventSelected.emit(this.allEvents);\n        let eventData = {};\n        eventData['action'] = \"add\";\n        eventData['data'] = newEvent;\n        this.eventSelected.emit(eventData);\n    }\n    this.generateCalendar();\n}\n // VD 06Sep24 calendar changes\n onSave() {\n    if (this.editingEventId !== null) {\n        const event = this.allEvents?.find(e => e?.id === this.editingEventId);\n        if (event && this.editingEntryGroup) {\n            // Update the specific entry group within the event\n            const entryIndex = event.entries.findIndex(entryGroup => entryGroup === this.editingEntryGroup);\n            if (entryIndex > -1) {\n                event.entries[entryIndex] = this.calendarQuestion.reduce((acc, q) => {\n                    acc[q.id] = { ...q };\n                    return acc;\n                }, {});\n            }\n        }\n     // this.eventSelected.emit(this.allEvents);\n      let eventData = {};\n      eventData['action'] = \"edit\";\n      eventData['data'] = event;\n      this.eventSelected.emit(eventData);\n    } else {\n        if (this.selectedDay) {\n            this.addEvent(this.selectedDay, this.calendarQuestion);\n        }\n    }\n    this.closeCalendarModal();\n    this.generateCalendar();\n}\n\n  // onCancel() {\n  //   this.closeCalendarModal();\n  // }\n  //this funtion need to be used\n  // handleQuestionEvent(ques){\n  //     // Update the questions array with the new question\n  //     const index = this.calendarQuestion.findIndex(q => q.id === ques.id);\n  //     if (index > -1) {\n  //       // If question already exists, update it\n  //       this.calendarQuestion[index] = ques;\n  //     } else {\n  //       // If question doesn't exist, add it to the array\n  //       this.calendarQuestion.push(ques);\n  //     }\n  //   }\n\n // VD 06Sep24 calendar changes\n  generateId() {\n    return '_' + Math.random().toString(36).substr(2, 9);\n  }\n\n  getEntryKeys(entryGroup: any): string[] {\n    return Object.keys(entryGroup);\n}\n}\n","<div class=\"align-calendar\">\n    <div class=\"calendar-container\">\n      <div class=\"calendar-header\">\n          <button (click)=\"previousMonth()\"><< {{ 'PREVIOUS' | nxtCustomTranslate : 'Previous' }} >></button>\n          <h3>{{ currentDate | date: 'MMMM yyyy' }}</h3>\n          <button (click)=\"nextMonth()\"><< {{ 'NEXT' | nxtCustomTranslate : 'Next' }} >></button>\n      </div>\n      <div class=\"calendar-grid\">\n          <div class=\"day-of-week\" *ngFor=\"let day of daysOfWeek\">{{ day }}</div>\n          <div\n              class=\"calendar-day\"\n              *ngFor=\"let day of calendarDays\"\n              [class.not-current-month]=\"!day.isCurrentMonth\"\n              [class.past]=\"day.isPast\"\n              [class.today]=\"day.isToday\"\n              [class.future]=\"day.isFuture\"\n              [class.selected]=\"day.isSelected\"\n              (click)=\"selectDay(day)\"\n        >\n              <div class=\"day-number\">{{ day.date.getDate() }}\n                <span *ngIf=\"day?.events?.length > 0\" class=\"entry-indicator\" [class.select]=\"day?.isSelected\"></span>\n              </div>\n              <!-- <div *ngFor=\"let event of day.events\" >\n                  <div *ngFor=\"let entryGroup of event.entries\" class=\"event\">\n                      <div *ngFor=\"let key of getEntryKeys(entryGroup)\">\n                          <div *ngIf=\"entryGroup[key].type == 'Time'\">\n                              {{ entryGroup[key].input?.value | date: 'shortTime' }}\n                          </div>\n                          <div *ngIf=\"entryGroup[key].type != 'Time'\">\n                              {{ entryGroup[key].input }}\n                          </div>\n                      </div>\n                  </div>\n              </div> -->\n          </div>\n      </div>\n  </div>\n    <div class=\"appoinappointment\">\n      <div class=\"appointments-container\">\n          <h4>{{ 'ADD_APPOINTMENT' | nxtCustomTranslate : 'Add Appointment' }}</h4>\n          <button *ngIf=\"selectedDay\" (click)=\"addAppointment()\">{{ 'ADD' | nxtCustomTranslate : 'Add' }}</button>\n      </div>\n      <!--VD 06Sep24 calendar updates--> \n      <!-- RS 09DEC24 Changed keys--> \n      <div *ngIf=\"showAppoinmentSection && selectedDay?.events?.length > 0\" class=\"appointments-container\">\n          <h4>{{ 'APPOINTMENTS' | nxtCustomTranslate : 'Appointments' }}</h4>\n          <div  *ngFor=\"let event of selectedDay?.events\">\n              <div class=\"event\" *ngFor=\"let entryGroup of event.entries\">\n                    <div class=\"event-info\">\n                      <div *ngFor=\"let key of getEntryKeys(entryGroup)\" class=\"entry-row\">\n                        <div *ngIf=\"entryGroup[key].questionText\" class=\"entry-text\">\n                            {{entryGroup[key].questionText}}:\n                        </div>\n                        <div class=\"entry-value\">\n                            <!-- VD 09Sep24- date type and link type updates    -->\n                            <span *ngIf=\"entryGroup[key].type != 'Time' && entryGroup[key].type != 'Link'&& entryGroup[key].type != 'Date'\">{{ entryGroup[key].input }}</span>\n                            <span *ngIf=\"entryGroup[key].type == 'Time'\">{{ entryGroup[key].input | date: 'shortTime' }}</span>\n                            <span *ngIf=\"entryGroup[key].type == 'Date'\">{{ entryGroup[key].input | date: 'mediumDate' }}</span>\n                            <span *ngIf=\"entryGroup[key].type == 'Link'\">\n                                <a [href]=\"'//'+ entryGroup[key].input\" target=\"_blank\">{{entryGroup[key].questionText}}</a>\n                            </span>\n                        </div>\n                    </div>\n                      <div class=\"event-actions\">\n                        <button (click)=\"editEvent(event,entryGroup)\">{{ 'EDIT' | nxtCustomTranslate : 'Edit' }}</button>\n                        <button (click)=\"deleteEvent(event.id,entryGroup)\">{{ 'DELETE' | nxtCustomTranslate : 'Delete' }}</button>\n                     </div>\n                  </div>\n              </div>\n          </div>\n      </div>\n  </div>\n</div>\n\n<!-- <app-custom-model\n  [modalTitle]=\"modalTitle\"\n  [isModalOpen]=\"isModalOpen\"\n  [modalSize]=\"modalSize\"\n  [saveButtonValue]=\"saveButtonValue\"\n  [modalFooter]=\"modalFooter\"\n  (saveButtonEmit)=\"onSave()\"\n  (cancelButtonEmit)=\"onCancel()\"\n>\n<lib-questionbook [qbItem]=\"qbRefrenceBook\" [questions]=\"referenceQuestions\" (handleQuestion)=\"handleQuestionEvent($event)\"></lib-questionbook>\n<ng-template dynamicComponentHost ></ng-template>\n</app-custom-model> -->","import { Component, OnInit, Input, Output, EventEmitter, Inject, ViewChild, ChangeDetectorRef, SimpleChanges, ComponentRef, AfterViewInit, ChangeDetectionStrategy } from '@angular/core';\nimport { ErrorWrapper } from '../../model/errorWrapper';\n// HA 19DEC23 imported translation service\nimport { CommonModule, DOCUMENT } from '@angular/common';\nimport { BehaviorSubject, Subscription } from 'rxjs';\nimport { DependencyMeta } from '../../interfaces/dependencyMeta';\nimport { CropperPosition, Dimensions, ImageTransform } from '../../components/image-cropper/interfaces';\nimport { FormsModule } from '@angular/forms';\nimport { ImageCropperComponent } from '../../components/image-cropper/component/image-cropper.component';\nimport { NxtRadio } from '../../components/custom-radio/custom-radio.component';\nimport { NxtFileUpload } from '../../components/file-upload/file-upload.component';\nimport { nxtDropdown } from '../../components/nxt-dropdown/nxt-dropdown.component';\nimport { NxtMultiSelect } from '../../components/nxt-multi-select/nxt-multi-select.component';\nimport { NxtSearchBox } from '../../components/search-box/search-box.component';\nimport { NxtDatatable } from '../../components/datatable/datatable.component';\nimport { CustomModelComponent } from '../../components/custom-model/custom-model.component';\nimport { CustomCalendarComponent } from '../../components/custom-calendar/custom-calendar.component';\nimport { MatTooltipModule } from '@angular/material/tooltip';\nimport { NxtInput } from '../../components/nxt-input/nxt-input.component';\nimport { NxtButtonComponent } from '../../components/button/nxt-button.component';\nimport { IconSelectorComponent } from '../../components/icon-selector/icon-selector.component'; //MSM10JUL25 icon selector component\nimport { SalesforceService } from '../../services/salesforce/salesforce.service';\nimport { DataService } from '../../services/data/data.service';\nimport { ChangeService } from '../../services/change/change.service';\nimport { NxtCustomTranslatePipe } from '../../pipe/custom-translate.pipe';\nimport { CountryService } from '../../services/country/country.service';\nimport { Subject } from 'rxjs';\nimport { takeUntil } from 'rxjs/operators';\n\n@Component({\n  selector: 'lib-questionbook',\n  standalone: true,\n  imports: [\n    CommonModule,\n    FormsModule, ImageCropperComponent, NxtFileUpload, NxtRadio, nxtDropdown, NxtMultiSelect, NxtButtonComponent, NxtSearchBox, NxtDatatable, CustomModelComponent, CustomCalendarComponent, MatTooltipModule, NxtInput, IconSelectorComponent, NxtCustomTranslatePipe\n  ],\n  templateUrl: './questionbook.component.html',\n  styleUrls: ['./questionbook.component.css'],\n  changeDetection: ChangeDetectionStrategy.OnPush\n})\nexport class QuestionbookComponent implements OnInit, AfterViewInit {\n  @Input() qbItem: any;\n  @Input() questionItem: any;\n  @Input() questions: any[];\n  @Input() errorFieldId: any;\n  @Input() labelValue: string;\n  @Input() token: string; // VD 19JAN24 - getting token as input\n  @Input() isEdit: boolean;\n  @Input() dropDownData: any;\n  @Input() dataBind: any;\n  @Input() allIcons: any[] = []; //MSM10JUL25 icon selector component input\n  @Input() themeColor: string; //MSM10JUL25 icon selector component input\n  @Input() cdnIconURL: string = ''; //MSM10JUL25 icon selector component input\n  @Input() direction: any = 'ltr'; \n  @Input() languageCode: any = 'en'; \n  @Input() from: any; // SKS16OCT25 flag to identify nested question book\n  @Input() bgColor: any; // SKS16OCT25 sets the background color for the question book\n  @Input() margin: any; // SKS16OCT25 sets the margin for the question book\n  @Input() onlyView: boolean = false;\n  @Input() bookStyle: any = {}\n\n  @Output() handleDropDown: EventEmitter<any> = new EventEmitter<any>();\n  @Output() handleQuestion: EventEmitter<any> = new EventEmitter<any>(); // VD 19Jul01 - get updated question\n  @Output() singleFieldChangeEmit: EventEmitter<any> = new EventEmitter<any>();\n  //@ViewChild(ComponenthostDirective, { static: true }) dynamicHost: ComponenthostDirective;\n  subQuestions: any[];\n  selectedFileData: any[] = [];\n  loadComponent$ = new BehaviorSubject<boolean>(false);\n  private destroy$ = new Subject<void>();\n  // HA 28DEC23 Added styling and logics to load the book type questions \n  qbRef: any;\n  //  HA 19DEC23 Declaration for Salesforce Styling\n  style: any;\n  subscription: Subscription;\n  isImageEdit: boolean = false;\n  selectedImageElement: any;\n  transform: ImageTransform = {\n    translateUnit: 'px',\n    scale: 1,\n    rotate: 0,\n    flipH: false,\n    flipV: false,\n    translateH: 0,\n    translateV: 0\n  };\n  canvasRotation = 0;\n  cropper?: CropperPosition;\n  loading = false;\n  cropperMaxHeight = 0;\n  cropperMaxWidth = 0;\n  cropperMinHeight = 0;\n  cropperMinWidth = 0;\n  cropperStaticWidth = 0;\n  cropperStaticHeight = 0;\n  aspectRatio = 4 / 3;\n  roundCropper = false;\n  imageChangedEvent: Event | null = null;\n  alignImage = 'center' as const;\n  isImageHover = false;\n  currencyOption: any;\n  private processed = false;\n\n  @Output() hadleDropDownDependent: EventEmitter<any> = new EventEmitter();\n  // VD 06Sep24 calendar changes\n  @Output() handleCalendarDate: EventEmitter<any> = new EventEmitter();\n  @Output() handleCalendarEvent: EventEmitter<any> = new EventEmitter();\n  public bookQuestionsMap: any = new Map();\n  constructor(\n    private dataService: DataService,\n    private changeService: ChangeService, private cdr: ChangeDetectorRef\n  ) {\n  }\n\n  ngOnInit(): void {\n    // VD 13Sep24 changes\n    this.processData();\n    // VD sep1324 changes - process data when databind value change\n    this.changeService.customChange$\n    .pipe(takeUntil(this.destroy$))\n    .subscribe(changeValue => {\n      if (changeValue === 'dataBind') {\n        this.processed = false;\n        this.processData();\n        void this.syncQuestions();\n      }\n    });\n  }\n\n  ngAfterViewInit() {\n    void this.syncQuestions();\n  }\n\n  private async syncQuestions(): Promise<void> {\n    // SKS10APR26 Ensure the child component is available before calling the method\n    // AP-26MAR25 Ensure ques.subText is always an object by parsing it if it's a string\n    //  AP-28MAR25 Add Boolean\n    await Promise.resolve();\n    if (!this.questions) return;\n    for(const ques of this.questions) {\n      ques['subText'] = typeof ques?.subText === 'object' ? ques?.subText : ques?.subText ? JSON.parse(ques['subText']) : {};\n      let apiObj: any = ques.subText\n      await this.handleQues(ques);\n      let input: any;\n      input = {}\n      input['isObject'] =  apiObj?.isObject\n      input['field'] = apiObj?.defaultField || apiObj?.field?.[0] || apiObj?.field || null\n      if (ques.type === 'Image') {\n        input['valueObj'] = ques.input || ques.orgImageData;\n        ques.imageData = ques.input || ques.orgImageData;\n        ques.orgImageData = ques.imageData\n      } else if (ques.type === 'Boolean') {\n        if (ques.input !== undefined) {\n          input['valueObj'] = ques.input !== false;\n          input['valueObj'] = typeof ques.input === 'string' ? ques.input === 'true' : ques.input === true  ;\n        } else if (ques.defaultValue !== undefined) {\n          input['valueObj'] = typeof ques.defaultValue === 'string' ? ques.defaultValue === 'true' : ques.defaultValue === true  ;\n        } else {\n          input['valueObj'] = false;\n        }\n      } else if (ques.type === 'Table') {\n        input['valueObj'] = { data: ques.input };\n      } else if (ques.type === 'Number' || ques.type === 'currency'){\n        input['valueObj'] = (ques.input || ques.input === 0) ? ques.input : (ques.defaultValue || ques.defaultValue === 0) ? ques.defaultValue : null;\n      } else {\n        input['valueObj'] = ques.input ?? ques.defaultValue ?? null;\n      } \n      input['referenceField'] = ques.referenceField || null\n      input['fromQuestionId'] = ques.id || null\n      if(!ques.isHidden && !ques?.subText?.isDependentField){\n        this.childEventCapture(input, ques,'ngAfterViewInit');\n      }\n    }\n    this.cdr.detectChanges()\n  }\n  async handleQues(ques: any) {\n    // HA 19-JAN-24 If condition is for bind-in, correction\n    // HA 09FEB24 Adding condition to avoid undefined error\n    if (this.dataBind && Object.keys(this.dataBind).length > 0) {\n      let value: any = this.dataService.getValue(this.dataBind,ques.referenceField )\n      if (value) {\n        if (ques.type === 'Dropdown' || ques.type === 'MultiSelect' || ques.type === 'Radio') {\n          ques.input = value || ques.defaultValue;\n          ques.selectedValue = value || ques.defaultValue;\n        } else if (ques.type === 'Date' || ques.type == 'DateTime') { // HA 24JAN24 To bind-in Date and DateTime\n          ques.input = new Date(value?.toString())  || ques.defaultValue;\n        } else if (ques.type === 'Location') { // HA 12FEB24 To bind-in Location Type\n          ques.input = value['address'] ? value['address'] : value || ques.defaultValue;\n        } else if (ques.type === 'Calendar') { // VD 06Sep24 calendar changes for data bindIn\n          let entries = typeof ques['fieldsMeta'] === 'object' ? ques['fieldsMeta'] : JSON.parse(ques['fieldsMeta']);\n          if (entries) {\n            let referenceQuestions = [];\n            if (entries.length > 0) {\n              entries.forEach(element => {\n                if (element.questionReference) {\n                  let qReference = JSON.parse(element.questionReference);\n                  referenceQuestions.push(qReference?.question);\n                }\n              });\n            }\n            if (referenceQuestions.length > 0) {\n              value?.forEach(calendarArray => {\n                let date = new Date(calendarArray.date);\n                calendarArray.entries.forEach(inputEntry => {\n                  for (let [k, v] of Object.entries(inputEntry)) {\n                    referenceQuestions.forEach(field => {\n                      if (field.referenceField == k) {\n                        if (field.type === 'Date' || field.type == 'DateTime') {\n                          field.input = new Date(v?.toString()) || field.defaultValue;\n                        } if (field.type === 'Dropdown' || field.type === 'MultiSelect' || field.type === 'Radio') {\n                          field.selectedValue = v;\n                          field.input = v  || field.defaultValue;\n                        } else {\n                          field.input = v || field.defaultValue;\n                        }\n                      }\n                    });\n                  }\n                  // this.addEvent(date, referenceQuestions);//SKS 27SEP24 each event added to allEvents array\n                })\n                // this.addEvent(date,referenceQuestions); //this is only last event added to allEvents array\n              });\n            }\n          }\n        } else if (ques.type === 'File') { // VD 23 Oct24 - file type changes\n          ques.input = [];\n          ques.input = value ?? (Array.isArray(ques.defaultValue) ? ques.defaultValue : []);\n        } else if(ques.type === \"Boolean\") { // SKS23JUN25 defaultly set value false\n          ques.input = typeof value !== 'undefined' ? value === true || value === 'true' : typeof ques.defaultValue !== 'undefined' ? ques.defaultValue === true || ques.defaultValue === 'true' : false;\n        } else if (ques.type === 'RichTextArea') {\n          const nextValue = value || ques.defaultValue;\n          const hasProcessedImages = typeof ques.input === 'string' && ques.input.includes('src=\"data:');\n          const hasPendingFileImages = typeof nextValue === 'string' && nextValue.includes('src=\"file:');\n          ques.input = hasProcessedImages && hasPendingFileImages ? ques.input : nextValue;\n        } else if (ques.type === 'Number' || ques.type === 'currency'){\n          ques.input = (value || value === 0) ? value : (ques.defaultValue || ques.defaultValue === 0) ? ques.defaultValue : null;\n        }  else {\n          ques.input = value || ques.defaultValue;\n        }\n      } else{\n        ques.type === 'Boolean' ? ques.input = typeof ques.defaultValue !== 'undefined' ? ques.defaultValue === true || ques.defaultValue === 'true' : false : ques.input = null  // SKS23JUN25 defaultly set value false\n      }\n    } else {\n      const question = {};\n      question['id'] = ques.id;\n      // HA 12FEB24 To bind-out Location Type\n      if (ques.type === 'Location') {\n        question['input'] = ques.input ? ques.input : ques.selectedValue;\n      } else if (ques.type == 'File') {\n        // VD 23 Oct24 - file type changes\n        question['input'] = ques.input ?? (Array.isArray(ques.defaultValue) ? ques.defaultValue : []);\n      }  else if(ques.type === \"Boolean\") { // SKS23JUN25 defaultly set value false\n        question['input'] = typeof ques.input !== 'undefined' ? ques.input === true || ques.input === 'true' : typeof ques.defaultValue !== 'undefined' ?( (ques.defaultValue === true && ques.defaultValue !== \"\" && ques.defaultValue !== \"false\") || ques.defaultValue === 'true') : false;\n      } else if (ques.type === 'Number' || ques.type === 'currency'){\n        question['input'] = (ques.input || ques.input === 0) ? ques.input : (ques.defaultValue || ques.defaultValue === 0) ? ques.defaultValue : null;\n      }  else {\n        question['input'] = ques.input || ques.defaultValue;\n      }\n      question['type'] = ques.type;\n      question['questionNumber'] = ques.questionNumber;\n      question['referenceField'] = ques?.referenceField;\n      question['selectedValue'] = ques?.selectedValue;  // MR 31JAN24 Need to pass the selected value too\n    }\n  }\n  // VD 13Sep24 changes\n  // RS 09DEC24 Changed keys\n  processData() {\n    if (this.processed) return;\n    this.processed = true;\n    //  HA 19DEC23 Logic for Question Book Styling(Slaesforce)\n    // HA 09FEB24 Added ternary\n    if (this.qbItem?.style) {\n      // HA 28DEC23 Added styling and logics to load the book type questions \n      this.qbItem.style = typeof this.qbItem.style === 'string' ? JSON.parse('' + this.qbItem?.style) : this.qbItem.style;\n      this.qbItem.style.labelClass = this.qbItem.style?.labelClass ? this.qbItem.style?.labelClass : \"\";\n      this.qbItem.style.labelStyle = this.qbItem.style?.labelStyle ? this.qbItem.style?.labelStyle : \"\";\n      this.qbItem.style.labelValueStyle = this.qbItem.style?.labelValueStyle ? this.qbItem.style?.labelValueStyle : \"\";\n      this.qbItem.style.inputClass = this.qbItem.style?.inputClass ? this.qbItem.style?.inputClass : \"\";\n      this.qbItem.style.inputStyle = this.qbItem.style.inputStyle ? this.qbItem.style?.inputStyle : \"\";\n      this.qbItem.style.bookStyle = this.qbItem.style?.bookStyle ? this.qbItem.style?.bookStyle : \"\";\n    } else {\n      if (this.qbItem) {\n        this.qbItem.style = {\n          \"labelClass\": \"\",\n          \"labelStyle\": \"\",\n          \"labelValueStyle\": \"\",\n          \"inputClass\": \"\",\n          \"inputStyle\": \"\",\n          \"bookStyle\": \"\",\n          \"showLabel\": true,\n          \"direction\": \"ltr\",\n          \"questionStyle\": \"\"\n        };\n      }\n    }\n    this.qbItem.style.questionStyle = this.qbItem?.style?.questionStyle ? this.qbItem?.style.questionStyle : \"\";\n    this.questions.forEach(element => {\n      var htmlElement = element?.questionText;\n      var textOnly = htmlElement?.replace(/<[^>]*>/g, '')\n      element.questionText = textOnly;\n      //  HA 19DEC23 Logic for Question Styling(Slaesforce)\n      // HA 28DEC23 Added styling and logics to load the book type questions \n      if (element.type === 'Book') {\n        if (element['qbReferenceQuestions']) {\n          var qb = typeof element['qbReferenceQuestions'] === 'object'  ?  element['qbReferenceQuestions'] : JSON.parse( element['qbReferenceQuestions']) ;\n          if (qb['questionbook'].style) {\n            qb['questionbook'].style = typeof qb['questionbook'].style === 'string' ? JSON.parse('' + qb['questionbook'].style) : qb['questionbook'].style;\n          }\n          else {\n            qb['questionbook'].style = this.qbItem.style;\n          }\n\n          // Book type question styling\n          qb['questionbook'].style.labelClass = qb['questionbook'].style?.labelClass ? qb['questionbook'].style?.labelClass : \"\";\n          qb['questionbook'].style.labelStyle = qb['questionbook'].style?.labelStyle ? qb['questionbook'].style?.labelStyle : \"\";\n          qb['questionbook'].style.labelValueStyle = qb['questionbook'].style?.labelValueStyle ? qb['questionbook'].style.labelValueStyle : \"\";\n          qb['questionbook'].style.inputClass = qb['questionbook'].style?.inputClass ? qb['questionbook'].style?.inputClass : \"\";\n          qb['questionbook'].style.inputStyle = qb['questionbook'].style?.inputStyle ? qb['questionbook'].style?.inputStyle : \"\";\n          qb['questionbook'].style.bookStyle = qb['questionbook'].style?.bookStyle ? qb['questionbook'].style?.bookStyle : \"\";\n          qb['questionbook'].style.questionStyle = qb['questionbook'].style?.questionStyle ? qb['questionbook'].style?.questionStyle : \"\";\n\n          // Loop for each question in the book\n          qb['questionbook']?.subQuestions?.forEach(questionFromBook => {\n            questionFromBook.style = questionFromBook.style ? questionFromBook.style : qb['questionbook'].style;\n            questionFromBook.style.labelClass = questionFromBook.style?.labelClass ? questionFromBook.style?.labelClass : \"\";\n            questionFromBook.style.labelStyle = questionFromBook.style?.labelStyle ? questionFromBook.style?.labelStyle : \"\";\n            questionFromBook.style.labelValueStyle = questionFromBook.style?.labelValueStyle ? questionFromBook.style?.labelValueStyle : \"\";\n            questionFromBook.style.inputClass = questionFromBook.style?.inputClass ? questionFromBook.style?.inputClass : \"\";\n            questionFromBook.style.inputStyle = questionFromBook.style?.inputStyle ? questionFromBook.style?.inputStyle : \"\";\n            questionFromBook.style.bookStyle = questionFromBook.style?.bookStyle ? questionFromBook.style?.bookStyle : \"\";\n            questionFromBook.style.questionStyle = questionFromBook.style?.questionStyle ? questionFromBook.style?.questionStyle : \"\";\n          });\n          element['qbItem'] = qb['questionbook'];\n        }\n      }\n      element.style = element.style ? typeof element.style === 'string' ? JSON.parse('' + element?.style) : element?.style : this.qbItem?.style;\n\n      element.style.labelClass = element.style?.labelClass ? element.style?.labelClass : \"\";\n      element.style.labelStyle = element.style?.labelStyle ? element.style?.labelStyle : \"\";\n      element.style.labelValueStyle = element.style?.labelValueStyle ? element.style.labelValueStyle : \"\";\n      element.style.inputClass = element.style?.inputClass ? element.style?.inputClass : \"\";\n      element.style.inputStyle = element.style.inputStyle ? element.style?.inputStyle : \"\";\n      element.style.bookStyle = element.style?.bookStyle ? element.style?.bookStyle : \"\";\n      element.style.questionStyle = element.style?.questionStyle ? element.style?.questionStyle : \"\";\n\n      //VD 02Aug24 dependent field show/hide changes\n      // RS 09DEC24 Changed keys\n       // AP-26MAR25 Ensure ques.subText is always an object by parsing it if it's a string\n      if (element.referenceField) {\n        element.dependentRef = element.referenceField;\n      }\n      if (element.subText) {\n        element['subText'] = typeof element?.subText === 'object' ? element?.subText : JSON.parse(element['subText']);\n        let dependencyObj: DependencyMeta = element.subText;\n        if (dependencyObj.isDependentField) {\n          element.isHidden = true;\n        }\n        // VD 07Aug24 - isDependentField change\n        this.changeService.changeAnnounced$\n          .pipe(takeUntil(this.destroy$))\n          .subscribe((changeValue: any) => {\n            // VD 20Aug24 - isDependentField change\n            if (changeValue != undefined && dependencyObj.isDependentField) {\n              if (changeValue.fromQuestionId && changeValue.valueObj !== undefined && ( Array.isArray(dependencyObj.sourceQuestionId)? dependencyObj.sourceQuestionId.includes(changeValue.fromQuestionId) : changeValue.fromQuestionId === dependencyObj.sourceQuestionId)) {\n                // element.isHiddenField = true;\n                if ( typeof changeValue.valueObj === 'boolean' ? dependencyObj.dependentValue == String(changeValue.valueObj) : dependencyObj.dependentValue == changeValue.valueObj) {\n                  element.isHidden = false;\n                  if(element.defaultValue && element.defaultValue != ''){\n                    element.input = element.defaultValue\n                    element.selectedValue = element.defaultValue\n                  } else { \n                    element.input = '';\n                    element.selectedValue = undefined;\n                  }\n                  if (element.dependentRef == changeValue.referenceField) {\n                    element.referenceField = changeValue.referenceField;\n                  }\n                } else {\n                  element.isHidden = true;\n                  element.input = '';\n                  element.selectedValue = undefined;\n                  // this.hideDependentElements(element.id);\n                  // if there is no dependent selection remove the reference\n                  if (element.dependentRef == changeValue.referenceField) {\n                    element.referenceField = '';\n                  }\n                }\n              }\n            }\n          }\n        );\n      }\n      // sunday comment\n      // if (element.type === 'Calendar') {\n      //   this.openCalendarComponent(element);\n      // }\n    });\n    this.subQuestions = [];\n    this.setSubQuestions(this.questions);\n  }\n  // VD 07Aug24 - isDependentField change\n  // AP-26MAR25 Ensure ques.subText is always an object by parsing it if it's a string\n  hideDependentElements(elementId) {\n    let elementsToHide = this.questions.filter(el => {\n      if (el.subText) {\n        el['subText'] = typeof el?.subText === 'object' ? el?.subText : JSON.parse(el['subText']);\n        let depObj = el.subText;\n        return Array.isArray(depObj.sourceQuestionId)? depObj.sourceQuestionId.includes(elementId) : depObj.sourceQuestionId == elementId;\n      }\n      return false;\n    });\n\n    elementsToHide.forEach(el => {\n      el.isHidden = true;\n      el.input = '';\n      el.selectedValue = undefined;\n      // Recursively hide elements dependent on this one\n      this.hideDependentElements(el.id);\n    });\n  }\n\n  setSubQuestions(records) {\n    this.subQuestions.push(records);\n  }\n\n  // Capture and Process Child Event\n  childEventCapture(event, ques: any, input?:any) {\n    let dropdownData = {};\n    if(ques.type !== 'Table' && (input === 'ngAfterViewInit' ? (typeof event.valueObj === 'boolean' ? true : event.valueObj) : true)){\n      this.changeService.announceChange(event);\n    }\n    if (ques) {\n      if (ques.type == 'Dropdown' || ques.type == 'MultiSelect'){\n        const valueObj = event?.valueObj;\n        if (valueObj && !Array.isArray(valueObj)) {\n          if (event?.isObject) {\n            ques.input = valueObj;\n          } else if (event?.field && this.dataService.getValue(valueObj, event.field)) {\n            ques.input = this.dataService.getValue(valueObj, event.field);\n          } else {\n            ques.input = valueObj;\n          }\n        } else {\n          ques.input = valueObj;\n        }\n        ques.selectedValue = event?.valueObj ? event?.valueObj : null;\n        // emit the dropdown data to parent\n        dropdownData['event'] = event?.valueObj;\n        dropdownData['ques'] = ques;\n        if (dropdownData['event']) {\n          this.handleDropDown.emit(dropdownData);\n        }  // VD 21DEC23 - dependent field change\n      } else if( ques.type == 'Radio') {\n        // HA 19JAN24 Correction of dropdown values\n        ques.input = event?.valueObj ? event?.valueObj : null;\n        ques.selectedValue = event?.valueObj ? event?.valueObj : null;\n        // emit the dropdown data to parent\n        dropdownData['event'] = event?.valueObj;\n        dropdownData['ques'] = ques;\n        if (dropdownData['event']) {\n          this.handleDropDown.emit(dropdownData);\n        }  // VD 21DEC23 - dependent field change\n      } else if (ques.type == 'Location') {\n        ques.input =  event?.valueObj? event?.valueObj.address : null;\n      } else if (ques.type == 'File') {\n        ques.input = this.selectedFileData = event?.valueObj ? event?.valueObj : null;\n      } else if (ques.type == 'Date' || ques.type == 'DateTime') { // HA 24JAN24 Converting Date and DateTime to UTC\n        ques.input = event?.valueObj || null\n      } else if (ques.type == 'List') {\n        // VD 20Aug24 handling the list type  handle multiple object values\n        ques.input = (event?.valueObj && typeof event?.valueObj === 'object' && !Array.isArray(event?.valueObj)) ?  event.isObject ?  event?.valueObj : this.dataService.getValue(event?.valueObj, event?.field) : event?.valueObj;\n      } else if (ques.type === 'RichTextArea') {\n        ques.input = event?.valueObj || null;\n      } else if(ques.type === 'Boolean'){\n        ques.input = event?.valueObj;\n        ques.boolean = event?.valueObj;\n      } else if (ques.type === 'Table') {\n        ques.input = event?.valueObj.data; \n        if(event?.valueObj?.summaryValues){\n          ques['summaryValues'] = event?.valueObj?.summaryValues\n        }\n      } else if(ques.type ==='Icon') {\n        ques.input = event?.metadata?.name || event?.valueObj;\n      } else {\n        ques.input = event?.valueObj;\n      }\n      // VD 19Jul01 - get updated question\n      this.handleQuestion.emit(ques);\n    }\n    if(ques?.singleFieldChange){\n      this.singleFieldChangeEmit.emit(ques);\n      ques.singleFieldChange = false;\n    }\n  }\n  deleteFile(fileData: any) {\n  }\n  getDropDown(event: any) {\n    this.hadleDropDownDependent.emit(event);\n  }\n  // VD 06Sep24 calendar changes\n  getCurrentCalendar(event: any) {\n    this.handleCalendarDate.emit(event);\n  }\n\n  getCalendarEvent(event: any) {\n    if (event) {\n      this.handleCalendarEvent.emit(event);\n    }\n  }\n  // sunday comment\n  // openCalendarComponent(ques) {\n  //   const viewContainerRef = this.dynamicHost.viewContainerRef;\n  //   if(viewContainerRef){\n  //     viewContainerRef.clear();\n  //     const componentRef = viewContainerRef.createComponent(CustomCalendarComponent);\n  //     componentRef.instance.question = ques;\n  //     componentRef.instance.dateSelected.subscribe((event: any) => this.getCurrentCalendar(event));\n  //     componentRef.instance.eventSelected.subscribe((event:any) => this.getCalendarEvent(event))\n  //   }\n  // }\n\n  isCalendarModalOpen = false;\n  calendarModalTitle: any;\n  calendarModalSize: any;\n  calendarSaveButtonValue: any;\n  referenceQuestions = [];\n  qbRefrenceBook: any;\n  modalCalendarModalFooter: any;\n\n  openCalendarModal(event) {\n    this.isCalendarModalOpen = true;\n    this.qbRefrenceBook = event.qbRefrenceBook;\n    this.referenceQuestions = event.referenceQuestions;\n    this.calendarModalTitle = event.modalTitle;\n    this.calendarModalSize = event.modalSize;\n    this.calendarSaveButtonValue = event.saveButtonValue;\n    this.modalCalendarModalFooter = event.modalFooter;\n  }\n\n\n  onCalendarModalSave() {\n    this.changeService.dataChanges('calendar-modal-save');\n  }\n\n\n  handleQuestionEvent(event) {\n  }\n\n  closeCalendarModal(event) {\n    this.isCalendarModalOpen = false;\n  }\n\n  // SKS25MAR25 image add\n  async fileChangeEvent(ques: any, event: any): Promise<void> {\n    const file = event.target.files[0];\n    if (file) {\n      try {\n        const imageData = await this.readFileAsDataURL(file);\n        ques.imageData = imageData;\n        ques.orgImageData = imageData;\n        // Initialize logo size if not already set\n        if (!ques.imageSize) {\n          ques.imageSize = { width: 150, height: 150 };\n        }\n        await this.childEventCapture({valueObj: imageData}, ques, 'fileChangeEvent');\n      } catch (error) {\n        console.error(\"Error reading file:\", error);\n      }\n    }\n  }\n\n  private readFileAsDataURL(file: File): Promise<string> {\n    return new Promise((resolve, reject) => {\n      const reader = new FileReader();\n      reader.onload = () => resolve(reader.result as string);\n      reader.onerror = (error) => reject(error);\n      reader.readAsDataURL(file);\n    });\n  }\n  async onImageEdit(ques: any) {\n    this.isImageEdit = true;\n    this.selectedImageElement = ques;\n  }\n  async onImageDelete(ques: any) {\n    try {\n      ques.imageData = '';\n      ques.orgImageData = '';\n      // Initialize logo size if not already set\n      if (!ques.imageSize) {\n        ques.imageSize = { width: 150, height: 150 };\n      }\n      await this.childEventCapture({ valueObj: ques.imageData}, ques, 'onImageDelete');\n    } catch (error) {\n      console.error(\"Error reading file:\", error);\n    }\n  }\n\n  // SKS25MAR25 image edit functions\n  flipHorizontal() {\n    this.transform = {\n      ...this.transform,\n      flipH: !this.transform.flipH\n    };\n  }\n\n  flipVertical() {\n    this.transform = {\n      ...this.transform,\n      flipV: !this.transform.flipV\n    };\n  }\n\n  resetImage() {\n    this.canvasRotation = 0;\n    this.cropper = undefined;\n    this.transform = {\n      translateUnit: 'px',\n      scale: 1,\n      rotate: 0,\n      flipH: false,\n      flipV: false,\n      translateH: 0,\n      translateV: 0\n    };\n  }\n\n  zoomOut() {\n    this.transform = {\n      ...this.transform,\n      scale: this.transform.scale! - .1\n    };\n  }\n\n  zoomIn() {\n    this.transform = {\n      ...this.transform,\n      scale: this.transform.scale! + .1\n    };\n  }\n  rotateLeft() {\n    this.loading = true;\n    setTimeout(() => { // Use timeout because rotating image is a heavy operation and will block the ui thread\n      this.canvasRotation--;\n      this.flipAfterRotate();\n    });\n  }\n\n  rotateRight() {\n    this.loading = true;\n    setTimeout(() => {\n      this.canvasRotation++;\n      this.flipAfterRotate();\n    });\n  }\n\n  moveLeft() {\n    this.transform = {\n      ...this.transform,\n      translateH: this.transform.translateH! - 1\n    };\n  }\n\n  moveRight() {\n    this.transform = {\n      ...this.transform,\n      translateH: this.transform.translateH! + 1\n    };\n  }\n\n  moveDown() {\n    this.transform = {\n      ...this.transform,\n      translateV: this.transform.translateV! + 1\n    };\n  }\n\n  moveUp() {\n    this.transform = {\n      ...this.transform,\n      translateV: this.transform.translateV! - 1\n    };\n  }\n  private flipAfterRotate() {\n    const flippedH = this.transform.flipH;\n    const flippedV = this.transform.flipV;\n    this.transform = {\n      ...this.transform,\n      flipH: flippedV,\n      flipV: flippedH,\n      translateH: 0,\n      translateV: 0\n    };\n  }\n  async imageCropped(event: any) {\n    try {\n      const base64 = await this.convertBlobToBase64(event.objectUrl);\n      this.selectedImageElement.imageData = base64;\n      await this.childEventCapture({valueObj: base64}, this.selectedImageElement, 'imageCropped');\n    } catch (error) {\n      console.error(\"Error in imageCropped:\", error);\n    }\n  }\n\n\n  cropperReady(sourceImageDimensions: Dimensions) {\n    this.loading = false;\n  }\n  // SKS25MAR25 blob to base 64 converter\n  convertBlobToBase64(objectUrl: string): Promise<string> {\n    return fetch(objectUrl)\n      .then(response => response.blob())\n      .then(blob => {\n        return new Promise((resolve, reject) => {\n          const reader = new FileReader();\n          reader.readAsDataURL(blob);\n          reader.onloadend = () => resolve(reader.result as string);\n          reader.onerror = error => reject(error);\n        });\n      });\n  }\n  closeModal() {\n    this.canvasRotation = 0;\n    this.cropper = undefined;\n    this.transform = {\n      translateUnit: 'px',\n      scale: 1,\n      rotate: 0,\n      flipH: false,\n      flipV: false,\n      translateH: 0,\n      translateV: 0\n    };\n    this.isImageEdit = false;\n  }\n  ngOnDestroy(): void {\n    this.destroy$.next();\n    this.destroy$.complete();\n    this.loadComponent$.complete();\n  }\n}\n","<!-- HA 18JAN24  Added class for styling -->\n<div [ngStyle]=\"bookStyle\" class=\"content-box form-group\" [ngClass]=\"{ 'form-group': from !== 'questionbook' }\" [style.background-color]=\"from === 'questionbook' ? bgColor || '' : ''\" [style.margin]=\"from === 'questionbook' ? (margin || '0px') : '0px'\" >\n    <div class=\"form-row\">\n        <!-- HA 20DEC23 Directive and Question Style from salesforce -->\n        <!-- RA09DEC24 Changed keys-->\n         <ng-container *ngFor=\"let ques of questions;let i = index\">\n            <div [style.display]=\"ques.isHidden ? 'none' : 'block'\" [class]=\"'col-lg-' + ques.size + ' paddingnone'\" \n                [id]=\"ques.id\" [style]=\"ques?.style?.questionStyle\" [ngStyle]=\"ques?.style?.parrentMargin ? {'margin': ques?.style?.parrentMargin } : {'margin-top': '5px', 'margin-bottom': '5px'}\" >\n                <!-- VD 09May24 is hide field change-->\n                <div class=\"nxtInputContainer\">\n                    <!-- AP-28MAR25 Show label if enabled and not a Boolean type -->\n                    <div [ngClass]=\"{ down2: qbItem?.progressBar }\"\n                        *ngIf=\"(ques.style?.showLabel ?? true) && ![ 'Radio','Boolean','Text','List','Dropdown','MultiSelect','RichTextArea','DateTime','month','Location','Number','Email','Date','Time','TextArea','Label','currency','File' ].includes(ques.type)\"\n                        [style]=\"ques.style?.labelStyle\">\n                        <div style=\"gap: 5px; display: flex; align-items: center;\" [style]=\"ques.style?.labelValueStyle\"\n                            [ngStyle]=\"{\n                                'font-family': ques.font,\n                                'color': ques.color || '#212529',\n                                'font-size': ques.fontSize || '14px',\n                                'font-weight': ques.fontWeight || 'normal'\n                            }\">{{ ques?.questionText ? ((ques.id+'.questionText') | nxtCustomTranslate : ques?.questionText):''}}\n                            <div *ngIf=\"ques.isOptional && !ques.isReadOnly \" style=\"color: red;\">*</div>\n                        </div>\n                    </div>\n                    <!-- calendar  -->\n                    <div *ngIf=\"ques.type === 'Calendar'\" [class]=\"ques?.style?.inputClass\">\n                        <app-custom-calendar [question]=\"ques\" (eventSelected)=\"getCalendarEvent($event)\"\n                            (dateSelected)=\"getCurrentCalendar($event)\" (openModal)=\"openCalendarModal($event)\"\n                            (closeModal)=\"closeCalendarModal($event)\"></app-custom-calendar>\n                        <!-- model used in calendar component -->\n                        <app-custom-model *ngIf=\"isCalendarModalOpen\" [modalTitle]=\"calendarModalTitle\"\n                            [isModalOpen]=\"isCalendarModalOpen\" [modalSize]=\"calendarModalSize\"\n                            [saveButtonValue]=\"calendarSaveButtonValue\" [modalFooter]=\"modalCalendarModalFooter\"\n                            (saveButtonEmit)=\"onCalendarModalSave()\" (cancelButtonEmit)=\"closeCalendarModal($event)\">\n                            <lib-questionbook [qbItem]=\"qbRefrenceBook\" [questions]=\"referenceQuestions\"\n                                [isEdit]=\"isEdit\" \n                                (handleQuestion)=\"handleQuestionEvent($event)\">\n                            </lib-questionbook>\n                        </app-custom-model>\n                    </div>\n                    <!-- SKS27MAR26 Image element - improved -->\n                    <div *ngIf=\"ques.type === 'Image'\" [class]=\"ques?.style?.inputClass\">\n                        <!-- SKS27MAR26 Read-only mode -->\n                        <ng-container *ngIf=\"ques.isReadOnly\">\n                        <img *ngIf=\"ques.imageData\"\n                            [style.width.px]=\"ques.imageSize?.width || 150\"\n                            [style.height.px]=\"ques.imageSize?.height || 150\"\n                            [src]=\"ques.imageData\"\n                            style=\"object-fit: cover; border-radius: 8px; display: block;\" />\n                        <span *ngIf=\"!ques.imageData\" class=\"img-empty-readonly\">No image</span>\n                        </ng-container>\n                        <!-- SKS27MAR26 Editable mode -->\n                        <ng-container *ngIf=\"!ques.isReadOnly\">\n                        <!-- SKS27MAR26 Upload placeholder (no image yet) -->\n                        <label *ngIf=\"!ques.imageData\"\n                            class=\"img-upload-zone\"\n                            [for]=\"'img-upload-' + i\">\n                            <div class=\"img-upload-icon\">\n                            <svg width=\"18\" height=\"18\" viewBox=\"0 0 24 24\" fill=\"none\"\n                                stroke=\"currentColor\" stroke-width=\"1.5\">\n                                <polyline points=\"16 16 12 12 8 16\"/>\n                                <line x1=\"12\" y1=\"12\" x2=\"12\" y2=\"21\"/>\n                                <path d=\"M20.39 18.39A5 5 0 0 0 18 9h-1.26A8 8 0 1 0 3 16.3\"/>\n                            </svg>\n                            </div>\n                            <span class=\"img-upload-text\">Click to upload image</span>\n                            <span class=\"img-upload-hint\">PNG, JPG, WEBP</span>\n                            <input type=\"file\" [id]=\"'img-upload-' + i\"\n                            accept=\"image/*\"\n                            (change)=\"fileChangeEvent(ques, $event)\"\n                            style=\"display: none;\" />\n                        </label>\n                    \n                        <!-- SKS27MAR26 Filled state with hover overlay -->\n                        <div *ngIf=\"ques.imageData\" class=\"img-filled-wrap\">\n                            <img [src]=\"ques.imageData\" class=\"img-preview\" alt=\"preview\" />\n                            <div class=\"img-hover-overlay\">\n                            <button class=\"img-action-btn img-edit-btn\"\n                                (click)=\"onImageEdit(ques)\"\n                                title=\"Edit / crop\">\n                                <svg width=\"14\" height=\"14\" viewBox=\"0 0 24 24\" fill=\"none\"\n                                stroke=\"currentColor\" stroke-width=\"1.8\">\n                                <path d=\"M11 4H4a2 2 0 0 0-2 2v14a2 2 0 0 0 2 2h14a2 2 0 0 0 2-2v-7\"/>\n                                <path d=\"M18.5 2.5a2.121 2.121 0 0 1 3 3L12 15l-4 1 1-4 9.5-9.5z\"/>\n                                </svg>\n                            </button>\n                            <button class=\"img-action-btn img-delete-btn\"\n                                (click)=\"onImageDelete(ques)\"\n                                title=\"Remove image\">\n                                <svg width=\"14\" height=\"14\" viewBox=\"0 0 24 24\" fill=\"none\"\n                                stroke=\"#E24B4A\" stroke-width=\"1.8\">\n                                <polyline points=\"3 6 5 6 21 6\"/>\n                                <path d=\"M19 6l-1 14a2 2 0 0 1-2 2H8a2 2 0 0 1-2-2L5 6\"/>\n                                <path d=\"M10 11v6\"/><path d=\"M14 11v6\"/>\n                                <path d=\"M9 6V4a1 1 0 0 1 1-1h4a1 1 0 0 1 1 1v2\"/>\n                                </svg>\n                            </button>\n                            </div>\n                        </div>\n                        </ng-container>\n                    </div>\n                    <!-- MSM10JUL25 icon-selector -->\n                    <nxt-icon-selector [class]=\"ques?.style?.inputClass\" [allIcons]=\"allIcons\" *ngIf=\"ques.type === 'Icon'\" [required]=\"ques.isOptional\" [mode]=\"isEdit !== true ? 'view' : 'edit'\" [question]=\"ques\" [labelFont]=\"ques.font\"\n                        [label]=\" ques?.questionText ? ((ques.id+'.questionText') | nxtCustomTranslate : ques?.questionText): ''\"\n                        [labelColor]=\"ques.color\" [selectedIcon]=\"{ metadata: { name: ques.input }}\"\n                        [labelSize]=\"ques.fontSize\" [labelWeight]=\"ques.fontWeight\" [showLabel]=\"ques.style?.showLabel\" (iconSelected)=\"childEventCapture($event, ques);\"></nxt-icon-selector>\n\n                    <!-- SKS21MAR25 line -->\n                    <hr [class]=\"ques?.style?.inputClass\" *ngIf=\"ques.type === 'Line'\" class=\"custom-line\" style=\"display: inline-flex\" />\n                    <!-- SKS13MAR25 data table -->\n                    <nxt-datatable *ngIf=\"ques.type === 'Table'\" [onlyView]=\"onlyView\" [class]=\"ques?.style?.inputClass\" isEditRow isDeleteRow actionButton isButtons [question]=\"ques\" from=\"questionBook\"\n                        (valueChange)=\"childEventCapture($event, ques)\" [apiMeta]=\"ques.subText\"\n                        [mode]=\"isEdit !== true ? 'view' : 'edit'\" [languageCode]=\"languageCode\"\n                        [tableConfig]=\"ques.tableConfig\" tableId=\"\" [direction]=\"direction\" tableWidth=\"auto\">\n                    </nxt-datatable>\n                    <!-- list -->\n                    <nxt-search-box  *ngIf=\"ques.type === 'List'\" [onlyView]=\"onlyView\" [class]=\"ques?.style?.inputClass\" [question]=\"ques\" [readOnly]=\"ques.isReadOnly\" [apiMeta]=\"ques.subText\"\n                        [id]=\"ques.id\" [placeHolderText]=\"ques.question || ''\" [value]=\"ques.input\"\n                        [mode]=\"isEdit !== true ? 'view' : 'edit'\"\n                        (searchValueChange)=\"childEventCapture($event.value,$event.question)\">\n                    </nxt-search-box>\n\n                    <!-- Dropdown -->\n                    <!-- HA 09FEB24 Added condition of sqOption to the dropdown -->\n                    <nxt-dropdown *ngIf=\"ques?.type === 'Dropdown' && ques?.options\" \n                        [onlyView]=\"onlyView\" \n                        [class]=\"ques?.style?.inputClass\" \n                        [options]=\"ques.options\" \n                        [apiMeta]=\"ques.subText\"\n                        [id]=\"ques.id\" \n                        [from]=\"'nxtForm'\"\n                        [selectedValue]=\"qbItem.isShengel ? ques.input : ques.selectedValue\"\n                        [placeholder]=\"ques?.question ? ((ques.id+'.question') | nxtCustomTranslate : ques?.question ): ''\"\n                        [readOnly]=\"ques.isReadOnly\" \n                        [question]=\"ques\"\n                        [mode]=\"isEdit !== true ? 'view' : 'edit'\" \n                        [padding]=\"ques?.padding\"\n                        [labelFont]=\"ques?.font\"\n                        [label]=\"ques?.questionText\"\n                        [labelColor]=\"ques?.color\"\n                        [inputTextColor]=\"ques?.color\"\n                        [labelSize]=\"ques?.fontSize\"\n                        [inputValueSize]=\"ques?.fontSize\"\n                        [labelWeight]=\"ques?.fontWeight\"\n                        [inputWeight]=\"ques?.fontWeight\"\n                        [showLabel]=\"ques?.style?.showLabel ?? true\"\n                        [inputBgColor]=\"ques?.inputBgColor\"\n                        [inputIconLeftSrc]=\"ques?.iconLeftSrc\"\n                        (valueChange)=\"childEventCapture($event.value,$event.question)\">\n                    </nxt-dropdown>\n                    <!-- SKS29APR26 Multi Select -->\n                    <nxt-multi-select *ngIf=\"ques?.type === 'MultiSelect' && ques?.options\"\n                        [onlyView]=\"onlyView\"\n                        [class]=\"ques?.style?.inputClass\"\n                        [options]=\"ques.options\"\n                        [apiMeta]=\"ques.subText\"\n                        [id]=\"ques.id\"\n                        [from]=\"'nxtForm'\"\n                        [selectedValue]=\"qbItem.isShengel ? ques.input : ques.selectedValue\"\n                        [placeholder]=\"ques?.question ? ((ques.id+'.question') | nxtCustomTranslate : ques?.question ): ''\"\n                        [readOnly]=\"ques.isReadOnly\"\n                        [question]=\"ques\"\n                        [mode]=\"isEdit !== true ? 'view' : 'edit'\"\n                        [padding]=\"ques?.padding\"\n                        [labelFont]=\"ques?.font\"\n                        [label]=\"ques?.questionText\"\n                        [labelColor]=\"ques?.color\"\n                        [inputTextColor]=\"ques?.color\"\n                        [labelSize]=\"ques?.fontSize\"\n                        [inputValueSize]=\"ques?.fontSize\"\n                        [labelWeight]=\"ques?.fontWeight\"\n                        [inputWeight]=\"ques?.fontWeight\"\n                        [showLabel]=\"ques?.style?.showLabel ?? true\"\n                        [inputBgColor]=\"ques?.inputBgColor\"\n                        [inputIconLeftSrc]=\"ques?.iconLeftSrc\"\n                        (valueChange)=\"childEventCapture($event.value,$event.question)\">\n                    </nxt-multi-select>\n                    <!-- // VD 02Aug24 custom-radio component -->\n                    <div *ngIf=\"ques.type === 'Radio' && ques?.options\" [class]=\"ques?.style?.inputClass\" class=\"\">\n                        <nxt-radio [options]=\"ques.options\" [question]=\"ques\" [apiMeta]=\"ques.subText\" [id]=\"ques.id\"\n                            [selectedValue]=\"ques.selectedValue\" [errorMessage]=\"ques.errorMessage\"\n                            [referenceField]=\"ques.referenceField\" [readOnly]=\"ques.isReadOnly\"\n                            [label]=\"ques?.questionText ? ((ques.id+'.questionText') | nxtCustomTranslate : ques?.questionText): ''\"\n                            [mode]=\"isEdit !== true ? 'view' : 'edit'\" [onlyView]=\"onlyView\"\n                            (valueChange)=\"childEventCapture($event.value,$event.question)\">\n                        </nxt-radio>\n                    </div>\n                    <!-- Attachment / Files -->\n                    <nxt-file-upload *ngIf=\"ques.type === 'File'\" \n                        [class]=\"ques?.style?.inputClass\" \n                        [config]=\"ques\"\n                        [mode]=\"isEdit !== true ? 'view' : 'edit'\" \n                        [readOnly]=\"ques.isReadOnly\"\n                        [allFiles]=\"ques.input\" \n                        [onlyView]=\"onlyView\"\n                        [label]=\"ques.questionText\"\n                        [required]=\"ques.isOptional\"\n                        [fileConfig]=\"ques.subText\"\n                        (selectedFileData)=\"childEventCapture($event.value,$event.config)\"\n                        (deletedFileData)=\"deleteFile($event)\">\n                    </nxt-file-upload>\n                    <!-- SKS11JUN25 Button -->\n                    <nxt-button\n                        *ngIf=\"ques.type === 'Button'\" [class]=\"ques?.style?.inputClass\"\n                        [mode]=\"isEdit !== true ? 'view' : 'edit'\"\n                        [btnHeight]=\"'50px'\" [btnWidth]=\"'150px'\" [buttonValue]=\"ques?.question\"\n                        (buttonClickEmit)=\"childEventCapture($event, ques)\"\n                        >\n                    </nxt-button>\n                    <!-- SKS11JUN25 book type -->\n                    <lib-questionbook *ngIf=\"ques.type === 'Book'\" [class]=\"ques?.style?.inputClass\"\n                        [bgColor]=\"ques?.style?.bgColor\" [margin]=\"ques?.style?.margin || '0px'\"\n                        [qbItem]=\"ques.qbItem\" [labelValue]=\"labelValue\" [onlyView]=\"onlyView\"\n                        [questions]=\"ques?.qbReferenceQuestions?.bookQuestionsMap?.[ques?.qbReference]?.subQuestions\"\n                        [isEdit]=\"isEdit\" [from]=\"'questionbook'\"\n                        (handleDropDown)=\"getDropDown($event)\"\n                        [bookStyle]=\"ques?.style?.bookStyle\">\n                    </lib-questionbook>\n                    <!-- SKS11JUN25 Text, Email, label, number, Boolean, rich text editor, DateTime, Date, Time-->\n                    <!-- SKS16OCT25 added custom style fields for input -->\n                    <nxt-input  *ngIf=\"['Space','Text','Email','Number','Label','Boolean','RichTextArea','DateTime','month','Date','Time','TextArea','Location','currency'].includes(ques.type)\"\n                        [type]=\"ques.type === 'Text' ? 'text' : ques.type === 'Email' ? 'email' : ques.type === 'Number' ? 'number' : ques.type === 'Label' ? 'label' : ques.type === 'Boolean' ? 'checkbox' : ques.type === 'RichTextArea' ? 'richtext' : ques.type === 'DateTime' ? 'datetime' : ques.type === 'Date' ? 'date' :  ques.type === 'Time' ? 'time' : ques.type === 'TextArea' ? 'textarea' : ques.type === 'month' ? 'month' : ques.type === 'Location' ? 'location' : ques.type === 'Space' ? 'space' : ques.type === 'currency' ? 'currency': 'text'\"\n                        [mode]=\"isEdit !== true ? 'view' : 'edit'\"\n                        [value]=\"ques.input\" [class]=\"ques?.style?.inputClass\"\n                        [question]=\"ques\" [readOnly]=\"ques.isReadOnly\"\n                        [apiKey]=\"qbItem['apiKey']\"\n                        [labelFont]=\"ques.font\"\n                        [label]=\"ques?.questionText ? ((ques.id+'.questionText') | nxtCustomTranslate : ques?.questionText): ''\"\n                        [showLabel]=\"ques.style?.showLabel\"\n                        svgHeight=\"20px\" svgWidth=\"20px\"\n                        [placeholder]=\"ques?.question ? ((ques.id+'.question') | nxtCustomTranslate : ques?.question ): ''\"\n                        [required]=\"ques.isOptional\"\n                        [inputId]=\"ques.trackingId\"\n                        [errorMessages]=\"{ required: 'This field is required' }\"\n                        [inputIconLeftSrc]=\"ques.iconLeftSrc\" \n                        [minDate]=\"ques.minDate\"\n                        [maxDate]=\"ques.maxDate\"\n                        [rows]=\"2\"\n                        [apiMeta]=\"ques.subText\"\n                        [direction]=\"direction\"\n                        [onlyView]=\"onlyView\"\n                        [from]=\"'nxtForm'\"\n\n                        [padding]=\"ques?.style?.padding\" [margin]=\"ques?.style?.margin\" [inputValueSize]=\"ques?.style?.inputFontSize\"\n                        [inputBorder]=\"ques?.style?.border || '#ccc'\" [inputBgColor]=\"ques?.style?.bgColor || '#ffffff'\"\n                        [labelSize]=\"ques?.style?.labelFontSize\" [labelWeight]=\"ques?.style?.labelFontWeight\"\n                        [inputWeight]=\"ques?.style?.inputFontWeight\" [labelColor]=\"ques?.style?.labelColor\"\n                        [textAlign]=\"ques?.style?.textAlign\" [rows]=\"ques?.style?.rows\"\n\n                        [style.padding]=\"ques.type === 'Space' ? ques?.style?.padding : null\"\n                        [style.margin]=\"ques.type === 'Space' ? ques?.style?.margin : null\"\n\n                        (inputValue)=\"childEventCapture($event.value,$event.question, 'nxt-input')\"\n                        >\n                    </nxt-input>\n                </div>\n            </div>\n        </ng-container>\n    </div>\n</div>\n  <!-- SKS27MAR26 Edit / crop modal -->\n  <div class=\"img-modal-backdrop\" *ngIf=\"isImageEdit\">\n    <div class=\"img-modal\">\n      <div class=\"img-modal-header\">\n        <span>Edit image</span>\n        <button class=\"img-modal-close\" (click)=\"closeModal()\">\n          <svg width=\"14\" height=\"14\" viewBox=\"0 0 24 24\" fill=\"none\"\n            stroke=\"currentColor\" stroke-width=\"2\">\n            <line x1=\"18\" y1=\"6\" x2=\"6\" y2=\"18\"/>\n            <line x1=\"6\" y1=\"6\" x2=\"18\" y2=\"18\"/>\n          </svg>\n        </button>\n      </div>\n      <div class=\"img-modal-canvas\">\n        <image-cropper\n          *ngIf=\"selectedImageElement?.imageData\"\n          [imageBase64]=\"selectedImageElement.orgImageData\"\n          [alignImage]=\"alignImage\"\n          [roundCropper]=\"roundCropper\"\n          [backgroundColor]=\"'#111111'\"\n          [allowMoveImage]=\"false\"\n          [hideResizeSquares]=\"false\"\n          [canvasRotation]=\"canvasRotation\"\n          [aspectRatio]=\"aspectRatio\"\n          [containWithinAspectRatio]=\"false\"\n          [maintainAspectRatio]=\"false\"\n          [cropperStaticWidth]=\"cropperStaticWidth\"\n          [cropperStaticHeight]=\"cropperStaticHeight\"\n          [cropperMinWidth]=\"cropperMinWidth\"\n          [cropperMinHeight]=\"cropperMinHeight\"\n          [cropperMaxWidth]=\"cropperMaxWidth\"\n          [cropperMaxHeight]=\"cropperMaxHeight\"\n          [resetCropOnAspectRatioChange]=\"true\"\n          [(cropper)]=\"cropper\"\n          [(transform)]=\"transform\"\n          [onlyScaleDown]=\"true\"\n          output=\"blob\"\n          format=\"png\"\n          (imageCropped)=\"imageCropped($event)\"\n          (cropperReady)=\"cropperReady($event)\">\n        </image-cropper>\n      </div>\n\n      <div class=\"img-modal-controls\">\n        <div class=\"img-ctrl-row\">\n          <span class=\"img-ctrl-label\">Rotate</span>\n          <div class=\"img-ctrl-btns\">\n            <button class=\"img-ctrl-btn\" (click)=\"rotateLeft()\" title=\"Rotate left\">⟲</button>\n            <button class=\"img-ctrl-btn\" (click)=\"rotateRight()\" title=\"Rotate right\">⟳</button>\n          </div>\n          <div class=\"img-ctrl-divider\"></div>\n          <span class=\"img-ctrl-label\">Zoom</span>\n          <div class=\"img-ctrl-btns\">\n            <button class=\"img-ctrl-btn\" (click)=\"zoomOut()\">−</button>\n            <button class=\"img-ctrl-btn\" (click)=\"zoomIn()\">+</button>\n          </div>\n          <div class=\"img-ctrl-divider\"></div>\n          <span class=\"img-ctrl-label\">Flip</span>\n          <div class=\"img-ctrl-btns\">\n            <button class=\"img-ctrl-btn\" [class.img-ctrl-active]=\"transform.flipH\"\n              (click)=\"flipHorizontal()\">↔ H</button>\n            <button class=\"img-ctrl-btn\" [class.img-ctrl-active]=\"transform.flipV\"\n              (click)=\"flipVertical()\">↕ V</button>\n          </div>\n          <div class=\"img-ctrl-divider\"></div>\n          <div class=\"img-ctrl-btns\">\n            <button class=\"img-ctrl-btn\" (click)=\"resetImage()\">Reset</button>\n          </div>\n        </div>\n        <div class=\"img-ctrl-row\">\n          <span class=\"img-ctrl-label\">Move</span>\n          <div class=\"img-ctrl-btns\">\n            <button class=\"img-ctrl-btn\" (click)=\"moveLeft()\">←</button>\n            <button class=\"img-ctrl-btn\" (click)=\"moveRight()\">→</button>\n            <button class=\"img-ctrl-btn\" (click)=\"moveUp()\">↑</button>\n            <button class=\"img-ctrl-btn\" (click)=\"moveDown()\">↓</button>\n          </div>\n        </div>\n      </div>\n      <div class=\"img-modal-footer\">\n        <button class=\"img-btn-secondary\" (click)=\"closeModal()\">Cancel</button>\n        <button class=\"img-btn-primary\" (click)=\"isImageEdit = false\">Apply</button>\n      </div>\n    </div>\n  </div>","import {\n  Component,\n  OnInit,\n  Input,\n  Output,\n  EventEmitter,\n  SimpleChanges,\n  ViewChild,\n  AfterViewInit,\n  ElementRef,\n  NgZone,\n  ChangeDetectorRef,\n  ChangeDetectionStrategy,\n} from \"@angular/core\";\nimport { DomSanitizer } from \"@angular/platform-browser\";\nimport { ActionMeta } from '../../interfaces/actionMeta';\nimport { BookletWrapper } from \"../../model/bookletWrapper\";\nimport { auditTime, catchError, firstValueFrom, forkJoin, fromEvent, Observable, of, Subject, Subscription, takeUntil } from \"rxjs\";\nimport { HttpClient } from \"@angular/common/http\";\nimport { QuestionbookComponent } from \"../questionbook/questionbook.component\";\nimport { CommonModule } from \"@angular/common\";\nimport { FormsModule } from \"@angular/forms\";\nimport { SalesforceService } from \"../../services/salesforce/salesforce.service\";\nimport { DataService } from \"../../services/data/data.service\";\nimport { ChangeService } from \"../../services/change/change.service\";\nimport { TranslationService } from \"../../services/translation/translation.service\";\nimport { NxtCustomTranslatePipe } from \"../../pipe/custom-translate.pipe\";\nimport { NxtButtonComponent } from \"../../components/button/nxt-button.component\";\n\n@Component({\n  selector: 'lib-booklet',\n  standalone: true,\n  imports: [\n    CommonModule,\n    FormsModule,\n    QuestionbookComponent,\n    NxtCustomTranslatePipe,\n    NxtButtonComponent\n  ],\n  templateUrl: './booklet.component.html',\n  styleUrls: ['./booklet.component.css'],\n  changeDetection: ChangeDetectionStrategy.OnPush\n})\nexport class BookletComponent implements OnInit , AfterViewInit {\n  @Input() bookletId: string;\n  @Input() serv: string;\n  @Input() tkn: string;\n  @Input() bookletJSON: any;\n  @Input() allIcons: any; //MSM10JUL25 icon selector component input\n  @Input() themeColor: string; //MSM10JUL25 icon selector component input\n  @Input() cdnIconURL: string; //MSM10JUL25 icon selector component input\n  @Input() dropdownDependentData: any;\n  @Input() labelValue: string;\n  @Input() token: string;\n  @Input() languageCode: string = 'en';  // VD 11Jun24 - translation changes\n  @Input() fieldRestrictions: any; // VD 12Jun24 - field permission change\n  @Input() from: any; // Form Builder dependent change\n  @Input() apiUrl: any; // AP-16APR25 Input property to receive the API URL from the parent component\n  @Input() isEdit: boolean ; // AP-19MAY25 - Added isEdit input\n  @Input() direction = 'ltr'; \n  @Input() isLoading: any; //SKS4SEP25 Set to true to show a loading animation\n  @Input() onlyView: boolean = false;\n  @Input() dataBind: any;// HA 18-JAN-24 To insert the endpoint value to the question\n\n  @Output() handleBookletActionEvent: EventEmitter<any> = new EventEmitter();\n  @Output() handlePage: EventEmitter<any> = new EventEmitter();\n  @Output() hadleDropDownDependent: EventEmitter<any> = new EventEmitter();\n  // VD 06Sep24 calendar changes\n  @Output() handleCalendarDate: EventEmitter<any> = new EventEmitter();\n  @Output() handleCalendarEvent: EventEmitter<any> = new EventEmitter();\n  @Output() formEditEvent: EventEmitter<any> = new EventEmitter();\n  subscription: Subscription;\n\n  public nxtBooklet: BookletWrapper;\n  public booklet: any[] = [];\n  public abItem: any = {};\n  public actions: ActionMeta[] = [];\n  public bookQuestionsMap: any = new Map();\n  public isAnswerFlag: boolean = false;\n  public spinnerName: string;\n  public spinnerType: string;\n  answerList = []; // HA 11-JAN-24 Answerlist to store the minimal value\n  allEvents: any[] = [];  // VD 06Sep24 calendar changes\n  isEditVal: boolean = true\n  safeValue: any;\n  showStickyShadow = false;\n  isSaveDisabled: boolean = true;\n  orginalDataBind: any\n\n  //AP-19MAY25 - Accessing the QuestionbookComponent instance using ViewChild reference\n  @ViewChild('questionbook') questionbookComponent!: QuestionbookComponent;\n  @ViewChild('stickyBar')\n  stickyBar?: ElementRef<HTMLElement>;  \n  private destroy$ = new Subject<void>();\n  private processBookletRunId = 0;\n  \n  private scrollHandler = (event: Event) => {};\n\n  constructor(\n    private dataService: DataService,\n    private changeService: ChangeService,\n    private http: HttpClient,\n    private translationService: TranslationService,\n    private ngZone: NgZone,\n    private cdr: ChangeDetectorRef\n  ) {\n    this.spinnerName = \"sp1\";\n    this.spinnerType = \"ball-spin-clockwise\";\n  }\n\n  ngOnInit(): void {\n    this.isEditVal = this.isEdit\n    //AP-16APR25 // Get the dynamic API URL and pass it to the service method\n    let apidata =  this.apiUrl;\n    this.dataService.apikey(apidata);\n    this.translationService.setLanguage(this.languageCode)\n    if(this.bookletJSON?.translationMap) this.translationService.updateTranslations(this.bookletJSON.translationMap)\n    this.subscription = this.changeService.changeAnnounced$\n    .pipe(auditTime(100))\n    .subscribe(() => {\n      this.updateSaveButtonState();\n    });\n    this.triggerProcessBooklet();\n  }\n  // VD NOV23 - update the json data when bookletId and bookletJSON changes\n  ngOnChanges(simplechanges: SimpleChanges) {\n    //AP-19MAY25 - If bookletJSON input changes, trigger processData on QuestionbookComponent\n    if (simplechanges['bookletJSON']) {\n      this.isEditVal = this.isEdit\n      const currentValue = simplechanges['bookletJSON'].currentValue;\n      //AP-28MAY25 - If the action is a string, upgrade it to the new action model (array of objects)\n      if (currentValue?.questionbook?.action && typeof currentValue.questionbook.action === 'string') {\n        currentValue.questionbook.action = this.upgradeActions(currentValue.questionbook.action);\n      }  \n      if (this.questionbookComponent){\n        this.questionbookComponent.processData()\n      }\n      if(this.bookletJSON?.translationMap) this.translationService.updateTranslations(this.bookletJSON.translationMap)\n    }\n    if (simplechanges['isEdit']) {\n      if(this.isEditVal !== this.isEdit){\n        this.isEditVal = this.isEdit\n        if (this.questionbookComponent){\n          this.questionbookComponent.processData()\n        }\n      }\n    }\n    if(this.languageCode){\n      this.translationService.setLanguage(this.languageCode)\n    }\n    // HA 23JAN24 To avoid undefined error\n    if(simplechanges['bookletJSON'] && simplechanges['bookletJSON'].currentValue != null){\n      this.triggerProcessBooklet('bookletJSON');\n    }\n    if ((simplechanges['dataBind'] && simplechanges['dataBind'].currentValue != null)) {\n      this.allEvents = [];\n      this.orginalDataBind = this.dataBind\n      this.triggerProcessBooklet('dataBind');\n    }\n  }\n  // AP-28MAY25 - Converts old action string (JSON) into a new model (array of action objects)\n  upgradeActions(actionString: string): any[] {\n    try {\n      // Try to parse the action string to JSON\n      const parsed = JSON.parse(actionString);\n      // AP-28MAY25 If parsed result is an array, apply default styles and adjust position\n      if (Array.isArray(parsed)) {\n        return parsed.map((item, index) => ({\n          ...item,\n          positionPercent: item.name === 'Cancel' ? 3 : 14, // Set position based on action name\n          width: 100,\n          textColor: '#ffffff',\n          borderRadius: 6,\n          id: index\n        }));\n      }\n    } catch (e) {\n      console.error(\"Invalid JSON action format\", e);\n    }\n    return [];\n  }\n\n  private triggerProcessBooklet(from?: any): void {\n    this.processBooklet(from).catch(error => {\n      console.error('Error while processing booklet', error);\n    });\n  }\n// SKS12APR26 optimize processBooklet fun\n  async processBooklet(from?: any) {\n    const runId = ++this.processBookletRunId;\n    if (!this.bookletJSON) return;\n    const json = this.bookletJSON;\n    this.applyTranslations(json);\n    this.isAnswerFlag = true;\n    this.loadReferenceBooks(json);\n    this.loadActions(json);\n    await this.prepareBooklet(json, from);\n    if (runId !== this.processBookletRunId) return;\n    this.buildQuestionMap(json); \n    this.assignBookletData(json);\n    this.handleDataBind(from, runId);\n    this.cdr.markForCheck();\n  }\n\n  //SKS28MAR25 Function to fetch refqb data\n  getRefQbData(refqbid: string): Observable<any> {\n    return this.http.get<any>(`${this.apiUrl}/nxt?name=${refqbid}`);\n  }\n  singleFieldChange(event: any){\n    let actionButton\n    this.actions.forEach(action => {\n      if (action.eventtoemit === 'submit'){\n        actionButton = action\n      }\n    });\n    void this.handleBookletActionClick(actionButton,event)\n  }\n  async handleBookletActionClick(action: ActionMeta,ques?:any) {\n    // HA 19JAN24 Action changes\n    // RS 09DEC24 Changed keys\n    this.answerList = [];\n    this.dataBind = []; // HA 12FEB24 Clearing dataBind upon button action so that dataBind value will not override the changed value\n    let dataToParent:any = {};\n    let validForm = true; // VD 01Aug24 - validation change\n    let isPrimaryKey = false;\n    let primaryKeyElement: any;\n    let dependentElementArray : any[] = [];\n    // HA 22JAN24 this change to make close event work\n    dataToParent['action'] = action?.eventtoemit;\n    dataToParent['actionData'] = action?.['actionData'];\n    if (!(action?.eventtoemit === 'close' || action?.eventtoemit === 'print')) {\n      // HA 18-JAN-24 Sending the complete json data also \n      dataToParent['jsonBook'] = JSON.parse(JSON.stringify(this.bookletJSON));\n      // HA 17JAN24 nxtId to dataParent object\n      if (this.bookletJSON) {\n        dataToParent['nxtId'] = Object.keys(this.bookletJSON?.bookQuestionsMap)[0];\n      }\n      // HA 11-JAN-24 Minimizing the value which has to be passed to the server\n      await this.handleCompleteBooklet(dataToParent['jsonBook']);\n      dataToParent['data'] = this.answerList ? this.answerList : dataToParent['data'];\n      // when clicking the submit button validating the required fields\n      for (let key in dataToParent['jsonBook'].bookQuestionsMap) {\n        const currentBook = dataToParent['jsonBook'].bookQuestionsMap[key];\n        currentBook.subQuestions.forEach(element => {\n          if (!isPrimaryKey) {\n            if (element?.primaryKey === true && element?.input !== undefined && element?.input !== '' && element?.input !== null) {\n              isPrimaryKey = true;\n              primaryKeyElement = element;\n            }\n          }\n          // VD 01Aug24 - validation change\n          if (element.isOptional && dataToParent['action'] == 'submit' && (!element.input || (Array.isArray(element.input) && element.input.length === 0)) && !element.isHidden && element.type != 'Label' && element.type != 'Image') { //SKS5NOV25 \n            element.error = true;\n            validForm = false;\n            this.changeService.submitChange(element.id);\n          }\n          // VD 02Aug24 - clear action changes\n          if (dataToParent['action'] == 'clear') {\n            if (element.type == 'Dropdown' || element.type == 'Location' || element.type == 'Radio') {\n              element.selectedValue = undefined;\n            } else if (element.type == 'MultiSelect') {\n              element.selectedValue = undefined;\n              element.input = [];\n            } else if (element.type == 'File') {\n              element.input = [];\n            } else if(element.type === \"Boolean\") { // SKS23JUN25 defaultly set value false\n             element.input = false;\n            } else if (element.type === 'Number') {\n              element.input = 0; \n            } else {\n              element.input = '';\n            }\n          }\n        });\n        if(ques?.subText?.sourceQuestionId !== undefined && ques?.subText?.sourceQuestionId !== null && ques?.subText?.sourceQuestionId !== '' && !ques?.subText?.isDependentField) {\n\n        } else if(ques?.subText?.sourceQuestionId !== undefined && ques?.subText?.sourceQuestionId !== null && ques?.subText?.sourceQuestionId !== '' &&  ques?.subText?.isDependentField){\n\n        } else {\n          currentBook.subQuestions.forEach(ele => {\n            if(Array.isArray(ele?.subText?.sourceQuestionId)? ele?.subText?.sourceQuestionId.includes(ques?.id) : ques?.id === ele?.subText?.sourceQuestionId ){\n              dependentElementArray.push(ele.id)\n            }\n          })\n        }\n      }\n    } else if (action?.eventtoemit === 'close') { // MSM 17JUN25 - Close button event changes\n      this.isEditVal = false;\n      this.dataBind = this.orginalDataBind\n      this.triggerProcessBooklet();\n    }\n    // HA 23JAN24 To call the action on any event\n    //  VD 01Aug24 - validation change\n    if (validForm) {\n      // SKS13JUN25 single field change emit\n      if (ques && ques.singleFieldChange) {\n        dataToParent.data = dataToParent.data.filter((inputData: any) => inputData.id === ques.id || inputData.id === primaryKeyElement?.id || dependentElementArray.includes(inputData.id) );\n      }\n      if(isPrimaryKey) {\n        dataToParent.action =  dataToParent.action === 'submit' ? 'save' :  dataToParent.action;\n      }\n      let dataToParentTemp = JSON.parse(JSON.stringify(dataToParent))\n      this.handleBookletActionEvent.emit(dataToParentTemp);\n    } else {\n      dataToParent['action'] = 'error';\n      let dataToParentTemp = JSON.parse(JSON.stringify(dataToParent))\n      this.handleBookletActionEvent.emit(dataToParentTemp);\n    }\n  }\n\n  // HA 18-JAN-24 handleCompleteBooklet is to simplify the logic\n  async handleCompleteBooklet(completeBooklet, from?:any) {\n    if (Object.keys(completeBooklet?.bookQuestionsMap ?? {}).length === 0) { // HA 11-JAN-24 If condition to load booklet\n      await this.handleBook(completeBooklet?.questionbook?.subQuestions,from);\n    } else { // HA 11-JAN-24 To load book questions\n      for (const key in completeBooklet.bookQuestionsMap) {\n        const val = completeBooklet.bookQuestionsMap[key];\n        if (val.type === 'Book') {\n          await this.handleBook(val.subQuestions, from);\n        } else {\n          await this.handleQues(val);\n        }\n      }\n    }\n  }\n\n  // HA 11-JAN-24 handleBook loads the Book\n  // RS 09DEC24 Changed keys\n  async handleBook(quesList: any, from?:any) {\n    for (const element of quesList || []) {\n      if (element.type === 'Book' && element.qbReferenceQuestions) {\n        // HA 24JAN24 Fetching from QB reference\n        var book = typeof element.qbReferenceQuestions === 'object' ? element.qbReferenceQuestions : JSON.parse(element.qbReferenceQuestions)\n        const firstKey = Object.keys(book?.bookQuestionsMap || {})[0];\n        if(book?.bookQuestionsMap[firstKey]?.subQuestions){\n          for (const ques of book?.bookQuestionsMap[firstKey]?.subQuestions ){\n            await this.handleQues(ques);\n          }\n        }\n      } else {\n        await this.handleQues(element);\n      }\n    }\n  }\n  \n  // SKS20MAR25 referenceField set like this\n  // name  --> normal\n  // items[0].name  --> value in a array set like this\n  // addresses.line2  ---> if value in a json set like this\n  // addresses.line4.dd ---> if value in a nested json set like this\n\n  // HA 11-JAN-24 handleQues to load question\n  // VD 06Sep24 calendar changes\n  async handleQues(ques: any) {\n    // HA 19-JAN-24 If condition is for bind-in, correction\n    // HA 09FEB24 Adding condition to avoid undefined error\n    if (this.dataBind && Object.keys(this.dataBind).length > 0) {\n      let value: any = this.dataService.getValue(this.dataBind,ques.referenceField )\n      if (value) {\n        if (ques.type === 'Dropdown' || ques.type === 'MultiSelect' || ques.type === 'Radio') {\n          ques.input = value || ques.defaultValue;\n          ques.selectedValue = value || ques.defaultValue;\n        } else if (ques.type === 'Date' || ques.type == 'DateTime') { // HA 24JAN24 To bind-in Date and DateTime\n          ques.input = new Date(value?.toString())  || ques.defaultValue;\n        } else if (ques.type === 'Location') { // HA 12FEB24 To bind-in Location Type\n          ques.input = value || ques.defaultValue;\n          ques.selectedValue = value['address'] ? value['address'] : value || ques.defaultValue;\n        } else if (ques.type === 'Calendar') { // VD 06Sep24 calendar changes for data bindIn\n          let entries = typeof ques['fieldsMeta'] === 'object' ? ques['fieldsMeta'] : JSON.parse(ques['fieldsMeta']);\n          if (entries) {\n            let referenceQuestions = [];\n            if (entries.length > 0) {\n              entries.forEach(element => {\n                if (element.questionReference) {\n                  let qReference = JSON.parse(element.questionReference);\n                  referenceQuestions.push(qReference?.question);\n                }\n              });\n            }\n            if (referenceQuestions.length > 0) {\n              value?.forEach(calendarArray => {\n                let date = new Date(calendarArray.date);\n                calendarArray.entries.forEach(inputEntry => {\n                  for (let [k, v] of Object.entries(inputEntry)) {\n                    referenceQuestions.forEach(field => {\n                      if (field.referenceField == k) {\n                        if (field.type === 'Date' || field.type == 'DateTime') {\n                          field.input = new Date(v?.toString()) || ques.defaultValue;\n                        } if (field.type === 'Dropdown' || field.type === 'MultiSelect' || field.type === 'Radio') {\n                          field.selectedValue = v;\n                          field.input = v  || field.defaultValue;\n                        } else {\n                          field.input = v || field.defaultValue;\n                        }\n                      }\n                    });\n                  }\n                  this.addEvent(date, referenceQuestions);//SKS 27SEP24 each event added to allEvents array\n                })\n              });\n            }\n          }\n          ques.input = this.allEvents.length > 0 ? this.allEvents : '';\n        } else if (ques.type === 'File') { // VD 23 Oct24 - file type changes\n          ques.input = [];\n          ques.input = value;\n        } else if(ques.type === \"Boolean\") { // SKS23JUN25 defaultly set value false\n          ques.input = typeof value !== 'undefined' ? value === true || value === 'true' : typeof ques.defaultValue !== 'undefined' ? ques.defaultValue === true || ques.defaultValue === 'true' : false;\n        } else if(ques.type === \"RichTextArea\"){\n          ques.input = await this.processRichTextArea(value || ques.defaultValue)\n        } else if (ques.type === 'Number' || ques.type === 'currency'){\n          ques.input = (value || value === 0) ? Number(value): (ques.defaultValue || ques.defaultValue === 0) ? Number(ques.defaultValue) : null;\n        }  else {\n          ques.input = value || ques.defaultValue;\n        }\n        let tempQues = {...ques}\n        tempQues['referenceField'] = tempQues.subText?.postReferenceField ?  tempQues.subText?.postReferenceField : tempQues.referenceField\n        if(tempQues?.subText?.isObject){\n          tempQues.input = typeof tempQues.input === 'object' ? this.dataService.getValue(tempQues.input, tempQues?.subText?.defaultField || (Array.isArray(tempQues?.subText?.field) ? tempQues?.subText?.field[0] : tempQues?.subText?.field) ) : tempQues.input\n        }\n        this.answerList.push(tempQues); // HA 12FEB24 To give the value for data\n      } else{\n        if(ques.type === 'Boolean'){\n          ques.input = typeof ques.defaultValue !== 'undefined' ? (ques.defaultValue === true || ques.defaultValue === 'true') : false\n        } else if(ques.type === 'Number' || ques.type === 'currency'){\n          ques.input = typeof ques.defaultValue !== 'undefined' ? ques.defaultValue : false\n        } else {\n          ques.input = null  // SKS23JUN25 defaultly set value false\n        }\n      }\n    } else {\n      let tempQues = {...ques}\n      tempQues['referenceField'] = tempQues.subText?.postReferenceField ?  tempQues.subText?.postReferenceField : tempQues.referenceField\n      if(tempQues?.subText?.isObject){\n        tempQues.input = typeof tempQues.input === 'object' ? this.dataService.getValue(tempQues.input, tempQues?.subText?.defaultField || (Array.isArray(tempQues?.subText?.field) ? tempQues?.subText?.field[0] : tempQues?.subText?.field) ) : tempQues.input\n      }\n      const question = {};\n      question['id'] = tempQues.id;\n      // HA 12FEB24 To bind-out Location Type\n      if (tempQues.type === 'Location') {\n        question['input'] = tempQues.input ? tempQues.input : tempQues.selectedValue || null;\n      } else if (tempQues.type == 'File') {\n        // VD 23 Oct24 - file type changes\n        question['input'] = tempQues.input ? tempQues.input : tempQues.defaultValue || [];\n      }  else if(tempQues.type === \"Boolean\") { // SKS23JUN25 defaultly set value false\n        question['input'] = typeof tempQues.input !== 'undefined' ? tempQues.input === true || tempQues.input === 'true' : typeof tempQues.defaultValue !== 'undefined' ?( (tempQues.defaultValue === true && tempQues.defaultValue !== \"\" && tempQues.defaultValue !== \"false\") || tempQues.defaultValue === 'true') : false;\n      }  else if(tempQues.type === 'Table') {\n        question['input'] = tempQues.input || tempQues.defaultValue  || null;\n        if(tempQues.summaryValues){\n          question['summaryValues'] = tempQues.summaryValues\n        }\n      }  else if (tempQues.type === 'Number' || tempQues.type === 'currency'){\n        question['input'] = (tempQues.input || tempQues.input === 0) ? Number(tempQues.input) : (tempQues.defaultValue || tempQues.defaultValue === 0) ? Number(tempQues.defaultValue) : null;\n      }  else {\n        question['input'] = tempQues.input || tempQues.defaultValue  || null;\n      }\n      question['type'] = tempQues.type;\n      question['questionNumber'] = tempQues.questionNumber;\n      question['referenceField'] = tempQues?.referenceField;\n      question['selectedValue'] = tempQues?.selectedValue;  // MR 31JAN24 Need to pass the selected value too\n      this.answerList.push(question);\n    }\n  }\n  async processRichTextArea(html: string): Promise<any> {\n    const regex = /<img[^>]+src=\"file:([^\"]+)\"/g;\n    const matches = [...html.matchAll(regex)];\n    if (matches.length === 0) {\n      return html;\n    }\n    // Build API calls for each fileId\n    const requests = matches.map(match => {\n      const fileId = match[1];\n      const apiUrl = `/file?id=${fileId}`;\n      return apiUrl ? this.dataService.apiResponse(apiUrl).pipe(\n        catchError(() => of(null)) // fallback if API fails\n      ) : null;\n    });\n    // Wait until ALL requests complete\n    const results = await firstValueFrom(\n      forkJoin(requests).pipe(takeUntil(this.destroy$))\n    );    \n    let updatedHtml = html;\n    matches.forEach((match, index) => {\n      const fileId = match[1];\n      const res = results[index];\n      if (res && res.content?.data) {\n        // Convert buffer array to base64\n        const byteArray = new Uint8Array(res.content.data);\n        let binary = '';\n        for (let i = 0; i < byteArray.length; i++) {\n          binary += String.fromCharCode(byteArray[i]);\n        }\n        const base64String = btoa(binary);\n        const dataUrl = `data:${res.type};base64,${base64String}`;\n        // Replace file:<id> with Base64 data URL\n        updatedHtml = updatedHtml.replace(`file:${fileId}`, dataUrl);\n      }\n    });\n    return updatedHtml;\n  }   \n  // VD 06Sep24 calendar changes for data bindIn\n  addEvent(day: any, entryQues) {\n    // Transform new entries into the desired format\n    const newEntries = entryQues.reduce((acc, q) => {\n      acc[q.id] = { ...q };\n      return acc;\n    }, {});\n\n    // Find if an event already exists for the given date\n    const existingEvent = this.allEvents.find(event => event.date.toDateString() === day.toDateString());\n\n    if (existingEvent) {\n      // If the event exists, push the new entries to the existing entries\n      const existingEntries = existingEvent.entries.map(entry => ({ ...entry }));\n      existingEntries.push(newEntries);\n      existingEvent.entries = existingEntries;\n    } else {\n      // Create a new event if it doesn't exist for the given date\n      const newEvent = {\n        id: '_' + Math.random().toString(36).substr(2, 9),\n        date: day,\n        entries: [newEntries] // Wrap the new entries in an array\n      };\n      this.allEvents.push(newEvent);\n    }\n  }\n  getDropDown(event: any) {\n    this.hadleDropDownDependent.emit(event);\n  }\n  // VD 06Sep24 calendar changes\n  getCalendarDate(event: any) {\n    this.handleCalendarDate.emit(event);\n  }\n  getCalendarEvent(event: any) {\n    event[\"nxtId\"] = Object.keys(this.bookletJSON?.bookQuestionsMap)[0];\n    this.handleCalendarEvent.emit(event);\n  }\n  editChangeClick(action: any){\n    this.isEditVal = true\n    this.isEdit = true\n    this.formEditEvent.emit();\n  }\n  ngAfterViewInit(): void {\n    this.ngZone.runOutsideAngular(() => {\n      setTimeout(() => {\n        this.ngZone.run(() => {\n          this.updateShadow(); // initial\n        });\n      }, 1000);\n    });\n    this.scrollHandler = () => {\n      this.ngZone.run(() => this.updateShadow());\n    };\n    // SKS17DEC25 CAPTURE PHASE — catches child div scrolls\n    window.addEventListener('scroll', this.scrollHandler, true);\n  }\n  updateShadow(): void {\n    const el = this.stickyBar?.nativeElement;\n    if (!el) return;\n    // SKS17DEC25 Find nearest scrollable ancestor at runtime\n    let parent: HTMLElement | null = el.parentElement;\n    while (parent) {\n      if (parent.scrollHeight > parent.clientHeight) {\n        const shouldShow =\n          parent.scrollTop + parent.clientHeight < parent.scrollHeight - 1;\n        if (this.showStickyShadow !== shouldShow) {\n          this.showStickyShadow = shouldShow;\n          this.cdr.markForCheck();\n        }\n        return;\n      }\n      parent = parent.parentElement;\n    }\n  } \n\n  private hasValue(q: any): boolean {\n    if (q.isHidden || q.type === 'Label' || q.type === 'Image') return false;\n    const val = q.input ?? q.selectedValue;\n    if (Array.isArray(val)) return val.length > 0;\n    if (typeof val === 'boolean') return val === true;\n    if (typeof val === 'object') return Object.keys(val || {}).length > 0;\n    if (typeof val === 'number') return val !== 0;\n    return val !== null && val !== undefined && val !== '';\n  }\n  private updateSaveButtonState(): void {\n    let hasValue = false;\n    if (this.bookletJSON?.bookQuestionsMap) {\n      outerLoop:\n      for (const key of Object.keys(this.bookletJSON.bookQuestionsMap)) {\n        const book = this.bookletJSON.bookQuestionsMap[key];\n        for (const q of book.subQuestions || []) {\n          if (this.hasValue(q)) {\n            hasValue = true;\n            break outerLoop;\n          }\n        }\n      }\n    }\n    this.isSaveDisabled = !hasValue;\n  }\n  ngOnDestroy(): void {\n    this.destroy$.next();\n    this.destroy$.complete();\n    window.removeEventListener('scroll', this.scrollHandler, true);\n    if (this.subscription) {\n      this.subscription.unsubscribe();\n    }\n  }\n  private applyTranslations(json: any) {\n    if (json?.translationMap) {\n      this.translationService.updateTranslations(json.translationMap);\n    }\n  }\n  private loadReferenceBooks(json: any) {\n    const map = json?.bookQuestionsMap;\n    if (!map) return;\n    const keys = Object.keys(map || {});\n    if (!keys.length) return;\n    const firstKey = keys[0];\n    const questions = map[firstKey]?.subQuestions || [];\n    questions.forEach(q => {\n      if (q.type === 'Book' && q.qbReference && !q.qbReferenceQuestions) {\n        this.getRefQbData(q.qbReference)\n          .pipe(takeUntil(this.destroy$))\n          .subscribe(res => q.qbReferenceQuestions = res);\n      }\n    });\n  }\n  private loadActions(json: any) {\n    const actions = json?.questionbook?.action;\n    if (!actions) return;\n    this.actions = typeof actions === 'string'\n      ? JSON.parse(actions)\n      : actions;\n    this.actions = [\n      ...this.actions.filter(a => a.eventtoemit !== 'close'),\n      ...this.actions.filter(a => a.eventtoemit === 'close')\n    ];\n  }\n  private async prepareBooklet(json: any, from?: any) {\n    await this.handleCompleteBooklet(json, from);\n  }\n  private assignBookletData(json: any) {\n    this.booklet = json?.records || [];\n    this.abItem = json?.answerbook || {};\n    // attach questions once (performance optimization)\n    this.booklet.forEach(qb => {\n      qb.questions = this.bookQuestionsMap?.get(qb.id)?.subQuestions || [];\n    });\n  \n  }\n  private buildQuestionMap(json: any) {\n    this.bookQuestionsMap = new Map();\n    if (json?.bookQuestionsMap) {\n      Object.entries(json.bookQuestionsMap)\n        .forEach(([k, v]) => this.bookQuestionsMap.set(k, v));\n    } else if (json?.records?.length) {\n      this.bookQuestionsMap.set(\n        json.records[0].id,\n        json.questionbook\n      );\n    }\n  }\n  private handleDataBind(from: any, runId: number) {\n    if (from === 'dataBind' && this.dataBind) {\n      this.bookQuestionsMap = new Map(this.bookQuestionsMap);\n      Promise.resolve().then(() => {\n        if (runId === this.processBookletRunId) {\n          this.changeService.dataChanges('dataBind');\n        }\n      });\n    }\n  }\n  trackBooklet(index: number, item: any) {\n    return item.id || index;\n  }\n  \n  trackQuestion(index: number, item: any) {\n    return item.id || index;\n  }\n  \n  trackAction(index: number, item: any) {\n    return item.id || index;\n  }\n}\n","<!-- Booklet Handling-->\n<!-- HA 19DEC23 For Direction -->\n<div *ngFor=\"let qb of booklet; trackBy: trackBooklet\" [dir]=\"direction\">\n    <!-- MR Commented below code to ensure single JSON for UNCONDITIONAL Booklets -->\n    <!-- HA 28DEC23 Below If logic is to load from booklet  -->\n    <div *ngIf=\"qb.subQuestions; else elseBlock\">\n        <ng-container *ngFor=\"let ques of qb.subQuestions; trackBy: trackQuestion\">\n            <div class=\"questiondiv1\">\n                <!-- HA 17JAN24 - Is title is enabled so that based on the boolean div will be visible -->\n                <div *ngIf=\"ques.isTitle\" [class]=\"qb.isShengel ? 'header-style' : 'question-f-size additional'\">\n                    <!-- VD 08NOV23 - showing label when its available-->\n                    <div *ngIf=\"ques?.questionText && ques?.style?.showLabel !== false\" >\n                        {{ (ques.id+'.questionText') | nxtCustomTranslate : ques?.questionText  }}\n                    </div>\n                </div>\n                <!--VD 06Sep24 calendar changes-->\n                <!-- AP-14MAY25 - Added [dataBind] input binding -->\n                <!-- AP-19MAY25 - Added [isEditVal] binding --> \n                <!-- //MSM10JUL25  allIcons, themeColor, cdnIconURL added for icon-selector-->\n                <lib-questionbook [qbItem]=\"qb\" [token]=\"token\"\n                    [direction] = \"direction\"\n                    [labelValue]=\"labelValue\"\n                    [questionItem]=\"ques\"\n                    [questions]=\"qb.questions\"\n                    (handleDropDown)=\"getDropDown($event)\"\n                    (handleCalendarDate)=\"getCalendarDate($event)\"\n                    (handleCalendarEvent)=\"getCalendarEvent($event)\"\n                    (singleFieldChangeEmit) ='singleFieldChange($event)'\n                    [dataBind]=\"dataBind\"\n                    [isEdit]=\"isEditVal\" \n                    [allIcons]=\"allIcons\"\n                    [themeColor]=\"themeColor\"\n                    [cdnIconURL]=\"cdnIconURL\"\n                    [languageCode]=\"languageCode\"\n                    [onlyView]=\"onlyView\"\n                    >\n                </lib-questionbook>\n            </div>\n        </ng-container>\n    </div>\n    <!-- HA 28DEC23 Below else logic is to load from books or questions -->\n    <ng-template #elseBlock>\n        <div class=\"questiondiv1\">\n            <div>\n                <div *ngIf=\"!qb.isTitle\" [class]=\"qb.isShengel ? 'header-style' : 'question-f-size additional'\">\n                    <!-- VD 08NOV23 - showing label when its available-->\n                    <div *ngIf=\"qb?.questionText && qb?.style?.showLabel !== false\" >\n                        {{ (qb.id+'.questionText') | nxtCustomTranslate : qb?.questionText}}\n                        {{ qb?.title }}\n                    </div>\n                </div> <!-- VD 19JAN24 - getting token as input --> <!--  // VD 11Jun24 - translation changes-->\n                <lib-questionbook [onlyView]=\"onlyView\" [qbItem]=\"qb\" [token]=\"token\" [labelValue]=\"labelValue\" [questionItem]=\"qb\" [questions]=\"qb.questions\"  (handleDropDown)=\"getDropDown($event)\" [languageCode]=\"languageCode\"></lib-questionbook>\n            </div>\n        </div>\n    </ng-template>\n    <!-- Group Actions -->\n    <!-- HA 19DEC23 For Direction -->\n    <!-- AP 23MAY25 - Action Buttons: Dynamically positioned buttons with JSON-configured styles -->\n    <div #stickyBar class=\"align-submit-row\" [ngStyle]=\"{\n        display: 'flex',\n        position: 'sticky',\n        bottom: '0px',\n        zIndex: '1000',\n        width: '100%',\n        justifyContent: 'flex-end',\n        background: '#ffffff',\n        padding: '10px',\n        gap: '10px',\n        boxShadow: showStickyShadow ? 'rgba(0, 0, 0, 0.12) 0px -10px 8px -10px' : 'none'\n      }\" *ngIf=\"abItem?.status != 'Completed' && from !== 'formBuilder' && !onlyView\" [dir]=\"direction\"> <!-- position-relative removed in this tag-->\n        <ng-container  *ngFor=\"let action of actions; let i = index; trackBy: trackAction\">\n            <div class=\"action-wrapper\">  <!-- style=\"position: absolute; [style.left.%]=\"action.positionPercent || 0\"  removed in this tag -->\n                @if(!isEditVal && action.name === 'Save'){\n                    <nxt-button\n                        (buttonClickEmit)=\"editChangeClick(action)\"\n                        [buttonValue]=\"'EDIT' | nxtCustomTranslate : 'Edit'\"\n                        [btnBorder]=\"action.borderSize\"\n                        [btnBorderColor]=\"action.borderColor\"\n                        [btnBorderRadius]=\"action.borderRadius || 4\"\n                        [btnWidth]=\"action.width || 100\"\n                        [buttonType]=\"'custom-btn'\"\n                        [buttonConfig]=\"action?.buttonConfig\" [type]=\"action?.type\"\n                        [btnIconLeftSrc]=\"action?.btnIconLeftSrc\" [isImageSvg]=\"action?.isImageSvg\"\n                        >\n                    </nxt-button>\n                } @else if(action.name === 'Cancel' ? isEditVal : true ) {\n                    <nxt-button\n                        (buttonClickEmit)=\"handleBookletActionClick(action)\" \n                        [isLoading]=\"isLoading?.includes(action.id)\"\n                        [buttonValue]=\"(action.id+'.name') | nxtCustomTranslate : action?.name\"\n                        [btnBorder]=\"action.borderSize\"\n                        [btnBorderRadius]=\"action.borderRadius || 4\"\n                        [btnWidth]=\"action.width || 100\"\n                        [buttonType]=\"action.name === 'Cancel' ? 'border-btn' : 'custom-btn'\"\n                        [buttonConfig]=\"action?.buttonConfig\" [type]=\"action?.type\"\n                        [btnIconLeftSrc]=\"action?.btnIconLeftSrc\" [isImageSvg]=\"action?.isImageSvg\"\n                        [buttonDisable]=\"action.name === 'Save' && isSaveDisabled\"\n                        >\n                    </nxt-button>\n                }\n            </div>\n        </ng-container>\n    </div>\n</div>","// IMPORTANT: THIS FILE IS AUTO GENERATED! DO NOT MANUALLY EDIT OR CHECKIN!\n/* tslint:disable */\nexport const VERSION = {\n    \"dirty\": true,\n    \"raw\": \"ed0865a9-dirty\",\n    \"hash\": \"ed0865a9\",\n    \"distance\": null,\n    \"tag\": null,\n    \"semver\": null,\n    \"suffix\": \"ed0865a9-dirty\",\n    \"semverString\": null,\n    \"version\": \"2.1.349\"\n};\n/* tslint:enable */\n","import { CommonModule } from '@angular/common';\nimport { Component, Input, Output, EventEmitter, OnInit, ViewChild, ElementRef } from '@angular/core';\nimport { FormsModule } from '@angular/forms';\n\n@Component({\n  selector: 'app-formula-input',\n  imports:[CommonModule, FormsModule ],\n  templateUrl: './formula-input.component.html',\n  styleUrls: ['./formula-input.component.css']\n})\nexport class FormulaInputComponent implements OnInit {\n\n  @Input() attributes: any[] = [];\n  @Input() initialFormula: string = '';\n  @Output() formulaChange = new EventEmitter<string>();\n  @Output() formulaValidation = new EventEmitter<{isValid: boolean, formula: string, tokens: any[]}>();\n\n  @ViewChild('formulaInput', { static: true }) formulaInputRef!: ElementRef<HTMLInputElement>;\n\n  formulaTokens: any[] = [];\n  currentInput: string = '';\n  validationMessage: string = '';\n  isValidationError: boolean = false;\n\n  operations = [\n    { symbol: '+', title: 'Addition', value: '+' },\n    { symbol: '−', title: 'Subtraction', value: '-' },\n    { symbol: '(', title: 'Open Parenthesis', value: '(' },\n    { symbol: '×', title: 'Multiplication', value: '*' },\n    { symbol: '%', title: 'Mod', value: '%' },\n    { symbol: '/', title: 'Division', value: '/' },\n    { symbol: ')', title: 'Close Parenthesis', value: ')' }\n  ];\n\n  ngOnInit() {\n    if (this.initialFormula) {\n      this.parseInitialFormula();\n    }\n  }\n\n  focusInput() {\n    this.formulaInputRef.nativeElement.focus();\n  }\n\n  addAttribute(attribute: any) {\n    // if (this.isAttributeUsed(attribute)) {\n    //   return;\n    // }\n\n    const token: any = {\n      type: 'attribute',\n      value: attribute.apiName,\n      label: attribute.label\n    };\n\n    this.formulaTokens.push(token);\n    this.updateFormula();\n  }\n\n  addOperation(operation: any) {\n    const token: any = {\n      type: 'operation',\n      value: operation.value,\n      label: operation.symbol\n    };\n\n    this.formulaTokens.push(token);\n    this.updateFormula();\n  }\n\n  removeToken(index: number) {\n    this.formulaTokens.splice(index, 1);\n    this.updateFormula();\n  }\n\n  isAttributeUsed(attribute: any): boolean {\n    return this.formulaTokens.some(token => \n      token.type === 'attribute' && token.value === attribute.apiName\n    );\n  }\n\n  onKeyDown(event: KeyboardEvent) {\n    if (event.key === 'Backspace' && this.currentInput === '' && this.formulaTokens.length > 0) {\n      this.formulaTokens.pop();\n      this.updateFormula();\n    } else if (event.key === 'Enter') {\n      event.preventDefault();\n      this.commitNumber();\n    }\n  }\n  commitNumber() {\n    if (this.currentInput.trim() !== '') {\n      const numericValue = parseFloat(this.currentInput.trim());\n      if (!isNaN(numericValue)) {\n        const token: any = {\n          type: 'text',\n          value: this.currentInput.trim(),\n          label: this.currentInput.trim()\n        };\n        this.formulaTokens.push(token);\n        this.updateFormula();\n      }\n    }\n    this.currentInput = ''; // clear after commit\n  }\n\n  onInput(event: any) {\n    const value = event.target.value;\n    \n    // SKS16SEP25 Handle numbers and spaces\n    if (value.trim()) {\n      // Check if it's a number\n      const numericValue = parseFloat(value.trim());\n      if (!isNaN(numericValue)) {\n        const token: any = {\n          type: 'text',\n          value: value.trim(),\n          label: value.trim()\n        };\n        this.formulaTokens.push(token);\n        this.currentInput = '';\n        this.updateFormula();\n      }\n    }\n  }\n\n  resetFormula() {\n    this.formulaTokens = [];\n    this.currentInput = '';\n    this.validationMessage = '';\n    this.isValidationError = false;\n    this.updateFormula();\n  }\n\n  validateFormula() {\n    if (this.formulaTokens.length === 0) {\n      this.validationMessage = 'Please add some attributes and operations to create a formula.';\n      this.isValidationError = true;\n      this.emitValidation(false);\n      return;\n    }\n\n    // SKS16SEP25 Basic validation logic\n    const errors = this.getValidationErrors();\n    \n    if (errors.length > 0) {\n      this.validationMessage = errors[0];\n      this.isValidationError = true;\n      this.emitValidation(false);\n    } else {\n      this.validationMessage = '✓ Formula is valid and ready to use!';\n      this.isValidationError = false;\n      this.emitValidation(true);\n    }\n  }\n\n  private getValidationErrors(): string[] {\n    const errors: string[] = [];\n    \n    // Check if formula starts or ends with an operation\n    if (this.formulaTokens.length > 0) {\n      const firstToken = this.formulaTokens[0];\n      const lastToken = this.formulaTokens[this.formulaTokens.length - 1];\n      \n      if (firstToken.type === 'operation' && !['+', '-', '('].includes(firstToken.value)) {\n        errors.push('Formula cannot start with this operation.');\n      }\n      \n      if (lastToken.type === 'operation' && lastToken.value !== ')') {\n        errors.push('Formula cannot end with an operation.');\n      }\n    }\n\n    // SKS16SEP25 Check for consecutive operations (except parentheses)\n    for (let i = 0; i < this.formulaTokens.length - 1; i++) {\n      const current = this.formulaTokens[i];\n      const next = this.formulaTokens[i + 1];\n      \n      if (current.type === 'operation' && next.type === 'operation') {\n        if (!(current.value === ')' && next.value === '(') && \n            !(current.value === '(' || next.value === ')')) {\n          errors.push('Invalid operation sequence detected.');\n          break;\n        }\n      }\n    }\n\n    // SKS16SEP25 Check for balanced parentheses\n    let openParens = 0;\n    for (const token of this.formulaTokens) {\n      if (token.value === '(') openParens++;\n      if (token.value === ')') openParens--;\n      if (openParens < 0) {\n        errors.push('Mismatched parentheses.');\n        break;\n      }\n    }\n    if (openParens > 0) {\n      errors.push('Unclosed parentheses.');\n    }\n\n    return errors;\n  }\n\n  private updateFormula() {\n    const formula = this.formulaTokens.map(token => {\n      if (token.type === 'attribute') {\n        return `[${token.value}]`;\n      }\n      return token.value;\n    }).join(' ');\n    \n    this.formulaChange.emit(formula);\n  }\n\n  private emitValidation(isValid: boolean) {\n    this.formulaValidation.emit({\n      isValid,\n      formula: this.formulaTokens.map(token => {\n        if (token.type === 'attribute') {\n          return `[${token.value}]`;\n        }\n        return token.value;\n      }).join(' '),\n      tokens: [...this.formulaTokens]\n    });\n  }\n\n  private parseInitialFormula() {\n    // SKS16SEP25 Simple parser for initial formula - can be enhanced\n    if (!this.initialFormula) return;\n    \n    // SKS16SEP25 This is a basic implementation - you might want to enhance this\n    const parts = this.initialFormula.split(/(\\s+|\\+|\\-|\\*|\\/|\\(|\\))/).filter(part => part.trim());\n    \n    for (const part of parts) {\n      const trimmed = part.trim();\n      if (!trimmed) continue;\n      \n      if (trimmed.startsWith('[') && trimmed.endsWith(']')) {\n        // It's an attribute\n        const attrapiName = trimmed.slice(1, -1);\n        const attribute = this.attributes.find(attr => attr.apiName === attrapiName);\n        if (attribute) {\n          this.formulaTokens.push({\n            type: 'attribute',\n            value: attribute.apiName,\n            label: attribute.label\n          });\n        }\n      } else if (['+', '-', '*', '/', '(', ')'].includes(trimmed)) {\n        // It's an operation\n        const operation = this.operations.find(op => op.value === trimmed);\n        this.formulaTokens.push({\n          type: 'operation',\n          value: trimmed,\n          label: operation?.symbol || trimmed\n        });\n      } else if (!isNaN(parseFloat(trimmed))) {\n        // It's a number\n        this.formulaTokens.push({\n          type: 'text',\n          value: trimmed,\n          label: trimmed\n        });\n      }\n    }\n  }\n}","<div class=\"risk-formula-builder\">\n    <!--SKS16SEP25 Formula Input Area -->\n    <div class=\"formula-container\">\n      <div class=\"formula-input-area\" [class.has-content]=\"formulaTokens.length > 0\">\n        <div class=\"formula-tokens\" #formulaDisplay (click)=\"focusInput()\">\n          <div class=\"token\" \n               *ngFor=\"let token of formulaTokens; let i = index\"\n               [class.attribute]=\"token.type === 'attribute'\"\n               [class.operation]=\"token.type === 'operation'\"\n               [class.text]=\"token.type === 'text'\">\n            <span class=\"token-content\">{{ token.label || token.value }}</span>\n            <button class=\"token-remove\" \n                    (click)=\"removeToken(i)\" \n                    *ngIf=\"token.type === 'attribute'\">\n              <span class=\"remove-icon\">×</span>\n            </button>\n          </div>\n           <!--SKS16SEP25  Hidden input to capture numbers -->\n          <input #formulaInput \n            class=\"hidden-input\"\n            [(ngModel)]=\"currentInput\"\n            (keydown)=\"onKeyDown($event)\"\n            (blur)=\"commitNumber()\"\n            placeholder=\"Start typing or click attributes below...\">\n          </div>\n      </div>\n\n      <!-- SKS16SEP25 Action Buttons -->\n      <div class=\"action-buttons\">\n        <button class=\"btn btn-secondary\" (click)=\"resetFormula()\">Reset</button>\n        <!-- <button class=\"btn btn-primary\" (click)=\"validateFormula()\" [disabled]=\"formulaTokens.length === 0\">\n          VALIDATE\n        </button> -->\n      </div>\n    </div>\n    <!-- SKS16SEP25 Content Area -->\n    <div class=\"content-area\">\n      <!-- Attributes Section -->\n      <div class=\"attributes-section\">\n        <h4>Attributes <span class=\"required\">*</span></h4>\n        <div class=\"attributes-list\">\n          <div class=\"attribute-item\" \n               *ngFor=\"let attribute of attributes\"\n               (click)=\"addAttribute(attribute)\">\n            <span class=\"attribute-apiName\">{{ attribute.label }}</span>\n            <span class=\"attribute-type\" *ngIf=\"attribute.type\">({{ attribute.type }})</span>\n          </div>\n        </div>\n      </div>\n\n      <!-- SKS16SEP25 Operations Section -->\n      <div class=\"operations-section\">\n        <h4>Operation</h4>\n        <div class=\"operations-grid\">\n          <button class=\"operation-btn\" \n                  *ngFor=\"let operation of operations\"\n                  (click)=\"addOperation(operation)\"\n                  [title]=\"operation.title\">\n            {{ operation.symbol }}\n          </button>\n        </div>\n      </div>\n    </div>\n\n    <!-- Validation Message -->\n    <div class=\"validation-message\" *ngIf=\"validationMessage\" [class.error]=\"isValidationError\">\n      {{ validationMessage }}\n    </div>\n  </div>","import { Injectable } from '@angular/core';\nimport { BehaviorSubject, Observable } from 'rxjs';\nimport { ElementComponent } from '../../pages/builder/element/element.component';\nimport { HttpClient } from '@angular/common/http';\nimport { CountryService } from '../country/country.service';\nimport moment from 'moment-hijri';\nimport 'moment/locale/ar-sa';\nimport 'moment/locale/en-gb';\nimport { DataService } from '../data/data.service';\n@Injectable({\n  providedIn: 'root'\n})\nexport class PdfDesignerService {\n  private pdfElements: any[] = [];\n  private pdfElementsSubject = new BehaviorSubject<any[]>([]);\n  private selectedElementSubject = new BehaviorSubject<{ index: number; pdfIndex?: number }>({\n    index: -1,\n    pdfIndex: -1\n  });\n  private selectHeaderSubject = new BehaviorSubject<any>(null);\n  private elementComponent: ElementComponent | null = null;\n  pdf: any;\n  unique_id: any;\n  tempElem: any[];\n\n  pdfElements$ = this.pdfElementsSubject.asObservable();\n  selectedElement$ = this.selectedElementSubject.asObservable();\n  selectHeaderSubject$ = this.selectHeaderSubject.asObservable();\n  currentElement: any;\n  selectTableColumn: any;\n  currencyOption: any;\n\n  constructor(private countryService: CountryService, private http: HttpClient, private dataService: DataService) {\n    // Load saved elements from localStorage\n    this.pdfElements = [];\n    const savedPdfElements = localStorage.getItem('pdfElements');\n    if (savedPdfElements) {\n      this.pdfElements = JSON.parse(savedPdfElements);\n      this.pdfElementsSubject.next([...this.pdfElements]);\n    }\n  }\n  intializeBook(pdf: any) {\n    //  - Get the unique id in the pdf \n    this.unique_id = Object.keys(pdf)[0];\n    let tempbook = pdf[this.unique_id];\n// SKS28MAR25 update nested pdf QuestionsMap\n    tempbook.forEach((element) => {\n      if (element.type === \"pdf\" && element.pdfReference) {\n        this.getRefQbData(element.pdfReference).subscribe(\n          (response) => {\n            element['pdfReferenceQuestions'] = response; // Assign response to pdfReferenceQuestions\n          },\n          (error) => {\n            console.error(\"API Error:\", error);\n          }\n        );\n      }\n    });\n    pdf[this.unique_id] = tempbook\n    this.pdf = pdf\n\n    this.pdf[this.unique_id]?.forEach(element => {\n      this.addElement(element);\n    });\n  }\n\n  //SKS28MAR25 Function to fetch refqb data\n  getRefQbData(refqbid: string): Observable<any> {\n    return this.http.get<any>(`https://dev-api.valarhr.com/nxt?name=${refqbid}`);\n  }\n\n   //AP-17APR25 Function to generate unique id\n   addElementWithId(): string {\n    const prefix = 'ngnxt'; \n    const chars = 'ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789-_';\n    let id = '';\n    for (let i = 0; i < 11; i++) {\n      id += chars.charAt(Math.floor(Math.random() * chars.length));\n    }\n    return prefix+id;\n  }\n\n  newBook() {\n    this.unique_id = this.addElementWithId();\n    this.pdf = {\n        [this.unique_id]: [],\n        'title': 'Untitled',\n    }\n  }\n  // AP 26FEB25 - clear the form elements \n  clearElements() {\n    this.pdfElements = [];\n    this.pdfElementsSubject.next([...this.pdfElements]);\n  }\n  // Get the element component reference\n  getElementComponent(): ElementComponent | null {\n    return this.elementComponent;\n  }\n\n  setElementComponent(component: ElementComponent) {\n    this.elementComponent = component;\n  }\n\n  // Add a new element to the form\n  addElement(element: any): void {\n    \n    this.pdfElements.push(element);\n    this.pdfElementsSubject.next([...this.pdfElements]);\n  }\n  // SKS13MAR25 add table element\n  addTableElement(element: any, index :number) {\n    //SKS13MAR25 Ensure currentElement exists\n    if (!this.currentElement) return;\n    // Clone elements array\n    const elements = [...this.getElements()];\n\n    // SKS13MAR25 Find the element and update its columns\n    const cIndex = elements.findIndex(el => el.id === this.currentElement.id);\n\n    // Clone columns array to trigger change detection\n    const updatedColumns = [...(this.pdfElements[cIndex].columns || []), element];\n    let tempFieldsMeta = {\n      'label': element.label,\n      'apiName': element.fieldName,\n      \"isdeleted\": false,\n      \"orderbyflag\": false,\n      \"filterflag\": false,\n      \"outputFlag\": true,\n      \"ischild\": false,\n      \"resultantflag\": false,\n      \"searchflag\": false,\n      \"fldType\": element.type,\n      \"readOnly\": false,\n      \"uniqueIdentifier\": element.id\n    }\n    let fieldsMeta = [...this.pdfElements[cIndex].fieldsMeta, tempFieldsMeta];\n\n    if (cIndex !== -1) {\n      elements[cIndex] = { ...elements[cIndex], columns: updatedColumns, fieldsMeta: fieldsMeta };\n    }\n\n    // Emit the updated form elements\n    // this.pdfElementsSubject.next(elements);\n    this.pdfElements = elements;\n    this.pdfElementsSubject.next([...elements]);\n    this.selectedElementSubject.next({index});\n    // Log for debugging\n  }\n\n  updateElement(index: number, updates: Partial<any>) {\n    const elements = [...this.getElements()];\n    if (elements[index]) {\n      elements[index] = {\n        ...elements[index],\n        ...updates,\n      };\n      this.pdfElementsSubject.next(elements);\n    }\n\n    if (index >= 0 && index < this.pdfElements.length) {\n      const updatedElement = {\n        ...this.pdfElements[index],\n        ...updates\n      };\n        if (elements[index]) {\n          elements[index] = { ...elements[index], ...updates };\n          this.pdfElements = elements;\n          this.pdfElementsSubject.next([...this.pdfElements]);\n      }\n\n      this.pdfElements[index] = updatedElement;\n      this.pdfElementsSubject.next([...this.pdfElements]);\n    }\n  }\n  updateTitle(event: any) {\n    //AP-10MAR25 Updates the title of the first record in the pdf  \n    this.pdf.title = event;\n  }\n  setSelectedElement(index: number,pdfIndex?: number) {\n    this.selectedElementSubject.next({index,pdfIndex});\n    if(pdfIndex){\n      this.pdfElements[index].pdfReferenceQuestions[this.pdfElements[index]?.pdfReference].forEach((pdfEle) => {\n        this.currentElement = pdfEle[pdfIndex]\n      })\n    } else {\n      this.currentElement = this.pdfElements[index]\n    }\n    this.selectTableColumn = null\n  }\n  // SKS19MAR25 set the selected table column\n  setSelectedTableElement(index: any, event: any) {\n    this.currentElement = this.pdfElements[index]\n    if (this.currentElement?.type === 'Table') {\n    }\n    const foundItem = this.currentElement?.type === 'Table' ? this.currentElement['fieldsMeta'].find(item => item['uniqueIdentifier'] === event?.uniqueIdentifier) : undefined;\n    this.selectTableColumn = foundItem?.uniqueIdentifier\n    this.selectedElementSubject.next({index});\n  }\n  removeSelectedTableElement(index: number, event: any) {\n    this.currentElement = this.pdfElements[index];\n\n    if (this.currentElement?.type === 'Table') {\n      // Find the index of the item\n      const itemIndex = this.currentElement['fieldsMeta'].findIndex(item => item['uniqueIdentifier'] === event?.uniqueIdentifier);\n      // Remove the item if found\n      if (itemIndex !== -1) {\n        this.currentElement['fieldsMeta'].splice(itemIndex, 1);\n      }\n    }\n    this.selectTableColumn = null\n    this.elementUpdate( this.currentElement)\n  }\n  // SKS19MAR25 get the selected table column\n  getSelectTableColumn() {\n    return this.selectTableColumn;\n  }\n  selectHeading(event: any) {\n    //AP-10MAR25 Emits the selected heading event  \n    this.selectHeaderSubject.next(event);\n  }\n\n  getElements(): any[] {\n    return this.pdfElements.map(element => ({\n      ...element\n    }));\n  }\n  sortElementsByOrder(): void {\n    //AP-10MAR25 Sort elements by current order\n    this.pdfElements.sort((a, b) => a.questionNumber - b.questionNumber);\n    this.pdfElements.forEach((element, index) => {\n      element.questionNumber = index + 1;\n    });\n    this.pdfElementsSubject.next([...this.pdfElements]);\n  }\n  //AP-10MAR25 Returns the current pdf data  \n  getBook() {\n    return this.pdf;\n  }\n\ndownloadElement() {\n  const backgroundCanvas: any[] = [];\n  this.pdfElements.forEach(element => {\n    if (element.subText && typeof element.subText === 'object') {\n      element.subText = element.subText;\n    }\n  });\n\n  this.pdf[this.unique_id] = this.pdfElements;\n  this.pdf['pdfJson'] = this.convertToPdfLayout(this.pdf);\n\n  // Scale widths for columns\n  this.pdf?.pdfJson?.content?.forEach((row: any) => {\n    let canvasX = 0\n    let canvasY = 0\n    if(row?.table?.body && Array.isArray(row.table.body)){\n      row.table[\"widths\"] = []\n      row.table.body?.forEach((tableBody: any) => {\n        let tableWidths = 0\n        tableBody?.forEach((bodyRow: any) => {\n          if(Array.isArray(bodyRow)){\n            bodyRow.forEach((rowCol: any) => {\n              rowCol?.columns?.forEach((col: any) => {\n                if(Array.isArray(col)){\n                  col.forEach((c) =>{\n                    if (typeof c.width === 'number' && c.width < 520) {\n                      tableWidths = c.width * 5.2;\n                      delete c.width;\n                    }\n                  })\n                } else {\n                  if (typeof col.width === 'number' && col.width < 520) {\n                    tableWidths = col.width * 5.2;\n                    delete col.width;\n                  }\n                }\n              })\n            });\n            row.table[\"widths\"].push(tableWidths || '*')\n          }\n        })\n      });\n      if(row?.table?.body?.length !== row?.table?.widths?.length){\n        delete row.table[\"widths\"]\n      } else {\n        if(row?.table?.body?.length > 0){\n          row?.table?.body?.forEach(bod =>{\n            row.table[\"widths\"].push('*')\n          })\n        }\n      }\n    } else {\n      row.columns?.forEach((col: any) => {\n        if (typeof col.width === 'number' && col.width < 520) {\n          col.width = col.width * 5.2;\n          canvasY = col.image ? col.fit[1] : 0\n          backgroundCanvas.push({\n              type: \"rect\",\n              x: canvasX,\n              y: col.image ? col.fit[1] : 0,\n              w: col.width,\n              h: col.image ? col.fit[1] : 140,\n              color: \"#ffffff\",\n              id: col.style\n          })\n          canvasX = col.width\n        }\n      });\n    }\n  });\n  this.pdf.pdfJson['background'] = () => ({ canvas: backgroundCanvas }); \n  return this.pdf;\n}\n\nconvertToPdfLayout(input: any): any {\n  this.currencyOption = this.countryService.getCurrentCurrency()\n  const result = { content: [] };\n  const items = JSON.parse(JSON.stringify(input[this.unique_id]));\n  const processItems = (items: any[], from?:any,fromWidth?:any): any[] => {\n    const rows = [];\n    let currentRow = { columns: [] };\n    let currentWidth = 0;\n    for (const item of items) {\n      const width = item.width || 100;\n      let element: any = { width : fromWidth || width, \"margin\": [0, 10, 0, 10],};\n      if (currentWidth + width > 100) {\n        const arrayCheck = currentRow.columns.some(\n          col => Array.isArray(col) && col.some(col2 => Array.isArray(col2.columns))\n        );\n        ;\n        if(arrayCheck){\n          rows.push({'table': {'body': [currentRow.columns]},layout: 'noBorders'})\n        } else {\n          rows.push(currentRow);\n        }\n        currentRow = { columns: [] };\n        currentWidth = 0;\n      }\n      if(item?.subText?.isDependentField === true){\n        for (const inItem of items) {\n          if(Array.isArray(item?.subText?.sourceQuestionId) ? item?.subText?.sourceQuestionId.includes(inItem.id) : inItem.id === item?.subText?.sourceQuestionId){\n            if(inItem.type === \"boolean\"){\n              if(!inItem.value && item?.subText?.dependentValue !== 'true'){\n                item['hideInPdf'] = true\n              }\n            } else {\n              if(inItem.value !== item?.subText?.dependentValue){\n                item['hideInPdf'] = true\n              }\n            }\n          }\n        }\n      }\n      if (item.type === 'Table') {\n        item.fieldsMeta.forEach((tableField) => {\n          if (!tableField?.subText?.isDependentField) return;\n          tableField['hideInPdf'] = false; // reset\n          for (const inItem of items) {\n            const sourceId = tableField?.subText?.sourceQuestionId;\n            const isMatched = Array.isArray(sourceId)\n              ? sourceId.includes(inItem.id)\n              : inItem.id === sourceId;\n            if (!isMatched) continue;\n            const dependentValue = tableField?.subText?.dependentValue;\n            if (inItem.type === 'boolean') {\n              // Normalize both values to string boolean\n              const currentValue = String(inItem.value);\n              const expectedValue = String(dependentValue);\n              if (currentValue !== expectedValue) {\n                tableField['hideInPdf'] = true;\n              }\n            } else {\n              // Non-boolean match\n              if (inItem.value !== dependentValue) {\n                tableField['hideInPdf'] = true;\n              }\n            }\n            break; // stop checking after match\n          }\n        });\n      }\n      if(item.type === 'date'){\n        item.value = this.dateTransform( item.value, 'date','en', 'gregorian' );\n      }\n      if (item.type === \"Space\" || item.hideInPdf === true) {\n        currentRow.columns.push({ width: fromWidth || width, text: ''});\n      } else if (item.type === 'Line') {\n        element.canvas = [\n          {\n            type: 'line',\n            x1: item.x1 ?? 0,\n            y1: item.y1 ?? 0,\n            x2: item.x2 ?? 520,\n            y2: item.y2 ?? 0,\n            lineWidth: item.lineWidth ?? 1,\n            lineColor: item.lineColor ?? '#000000',  \n          }\n        ];\n        currentRow.columns.push(element,);\n\n      } else if (item.type === \"Pdf\" && item.pdfReferenceQuestions) {\n        const nestedQuestions = item.pdfReferenceQuestions[item.pdfReference];\n        const nestedContent = processItems(nestedQuestions,'pdf',item.width); // recursive processing\n        currentRow.columns.push( nestedContent);\n      } else if (item.type === 'Table') {\n        let summaryRowPosition = 0;\n        const tableColumns = item.fieldsMeta.filter(column => column.hideInPdf !== true && column.isHidden !== true) || [];\n        const mainColumns = tableColumns.filter(column => column.summaryRow !== true );\n        const summaryRow = tableColumns.filter(column => column.summaryRow === true );\n        tableColumns.forEach(element => {\n          if (element.column) {\n            mainColumns.forEach((mCol, index) => {\n              if (element.column === mCol.apiName) {\n                summaryRowPosition = index;\n              }\n            });\n          }\n        });        \n        const body: any[][] = [];\n        // Table headers\n        body.push(mainColumns.map(col => ({\n          text: col.label,style: col.uniqueIdentifier\n        })));\n        // Table data\n        item?.value?.data?.forEach?.(tableData => {\n          body?.push(\n            mainColumns?.map((col: any) => {\n              if (col.fldType === 'currency') {\n                return {\n                      text: this.dataService.getValue(tableData,col.apiName) ? this.currencyOption.symbol + \" \" + this.dataService.getValue(tableData,col.apiName) : '',\n                      fontSize: 12,\n                      nowrap: false,\n                      alignment: 'right',\n                      style: col.uniqueIdentifier + 'column'\n                   };\n              } else {\n                return {\n                  text: this.dataService.getValue(tableData, col.apiName) || '',\n                  fontSize: 12,\n                  nowrap: false,\n                  style: col.uniqueIdentifier + 'column'\n                };\n              }\n            })\n          );\n        });        \n        // Summary rows\n        summaryRow.forEach((col) => {\n           //AP-14JUN25 - Create an empty row with same number of columns as main table, filled with blank cells (no borders)\n          const row = new Array(mainColumns.length).fill({ text: '',\"border\": [false, false, false, false]});\n          //AP-14JUN25 - Set the label text at the left summary position with bottom-side border\n          row[summaryRowPosition - 1] = { text: col.label,\"border\": [false, false, false, false], style: col.uniqueIdentifier };\n          row[summaryRowPosition] = { text: col.fldType === 'currency' && this.dataService.getValue(item?.value?.summaryValues,col.apiName) ? this.currencyOption.symbol + \" \" + this.dataService.getValue(item?.value?.summaryValues,col.apiName) : this.dataService.getValue(item?.value?.summaryValues,col.apiName) || '',\"border\": [false, false, false, false], style: col.uniqueIdentifier};\n          body.push(row);\n        });\n        // table column widths\n        let tableColumnWidths = []\n        mainColumns.forEach((mCol) => {\n          tableColumnWidths.push(typeof mCol.style?.width === 'number' && mCol.style?.width < 520 ? mCol.style?.width * 5.2 : '*')\n        });\n        element = {\n          width: item.width || 520,\n          table: {\n            body,\n            widths: tableColumnWidths\n          },\n        };        \n        currentRow.columns.push(element);\n      // AP-24JUNE 25 - Adjust image width to compensate for external *5.2 scaling\n      } else if (item.type === 'image' || item.type === 'signaturePad') {\n        const originalWidth = item?.imageSize?.width || (item.type === 'signaturePad' ? 250 : 100);\n        const originalHeight = item?.imageSize?.height || (item.type === 'signaturePad' ? 250 : 100);\n        if(item.showLabelInPdf === true){\n          currentRow.columns.push(\n            { width: '*',\n              stack: [\n                {\n                  width: '*',\n                  fontSize: 12,\n                  bold: true,\n                  text: item.questionText || '',\n                  style: item.styleClass + 'label'\n                },\n                {\n                  width: '*',\n                  [(item.imageData || item.type === 'signaturePad') ? 'image' : 'text']: (item.type === 'signaturePad' ? item.value : item.imageData) || '',\n                  fit: [originalWidth, originalHeight],\n                  style: item.styleClass\n                }\n              ]\n            }\n          );\n        } else {\n          currentRow.columns.push({\n            width: '*',\n            [(item.imageData || item.type === 'signaturePad') ? 'image' : 'text']:  (item.type === 'signaturePad' ? item.value : item.imageData) || '',\n            fit: [originalWidth, originalHeight],\n            style: item.styleClass\n          });\n        }\n      } else if(item.type === 'currency'){\n        const val = item.value || '';\n        if(item.showLabelInPdf === true){\n          currentRow.columns.push(\n            {\n              width:  fromWidth || width,\n              stack: [\n                {\n                  width: fromWidth || width,\n                  fontSize: 12,\n                  bold: true,\n                  text: item.questionText || '',\n                  style: item.styleClass + 'label'\n                },\n                {\n                  width: fromWidth || width,\n                  text: val ? this.currencyOption.symbol + \" \" + val : '',\n                  style:item.styleClass\n                }\n              ]\n            }\n          );\n        } else {\n          currentRow.columns.push({\n            width: fromWidth || width,\n            text: val,style:item.styleClass,\n          });\n        }\n      } else {\n        const val = item.value || '';\n        if(item.showLabelInPdf === true){\n          currentRow.columns.push(\n            {\n              width: fromWidth || width,\n              stack: [\n                {\n                  width: fromWidth || width,\n                  fontSize: 12,\n                  bold: true,\n                  text: item.questionText || '',\n                  style: item.styleClass + 'label'\n                },\n                {\n                  width: fromWidth || width,\n                  text: val,style:item.styleClass,\n                }\n              ]\n            }\n          );\n        } else {\n          currentRow.columns.push({\n            width: fromWidth || width,\n            text: val,style:item.styleClass,\n          });\n        }\n      }\n      currentWidth += width;\n      if (currentWidth === 100) {\n        const arrayCheck = currentRow.columns.some(\n          col => Array.isArray(col) && col.some(col2 => Array.isArray(col2.columns))\n        );        \n        if(arrayCheck){\n          rows.push({'table': {'body': [currentRow.columns]},layout: 'noBorders'})\n        } else {\n          rows.push(currentRow);\n        }\n        currentRow = { columns: [] };\n        currentWidth = 0;\n      }\n    }\n    if (currentRow.columns.length > 0) {\n      rows.push(currentRow);\n    }\n    return rows;\n  };\n  result.content = processItems(items);\n  const processItemsStyle =(items: any[], styleJson: any): any => {\n    for (const item of items) {\n      if (item.type === \"Table\") {\n        if (Array.isArray(item.fieldsMeta)) {\n          for (let field of item.fieldsMeta) {\n            if (field?.style?.margin) {\n              field.style.margin = field.style.margin.map(Number);\n            }\n            styleJson[field.uniqueIdentifier] = field.style;\n            let tempStyle = field.style ? JSON.parse(JSON.stringify(field.style)) : {};\n            delete tempStyle.fillColor\n            delete tempStyle.color\n            styleJson[field.uniqueIdentifier + 'column'] = tempStyle\n          }\n        }\n      }\n  \n      if (item?.style?.margin) {\n        item.style.margin = item.style.margin.map(Number);\n      }\n  \n      if (item.showLabelInPdf === true) {\n        // Deep copy so original item.style is safe\n        let tempStyle1 = item.style ? JSON.parse(JSON.stringify(item.style)) : {};\n        tempStyle1.margin[3] = 2;\n        styleJson[item.styleClass + \"label\"] = tempStyle1;\n        let tempStyle2 = item.style ? JSON.parse(JSON.stringify(item.style)) : {};\n        tempStyle2.margin[1] = 0;\n        styleJson[item.styleClass] = tempStyle2;\n      } else {\n        styleJson[item.styleClass] = item.style;\n      }\n      // Recursive step for Pdf\n      if (item.type === \"Pdf\" && item.pdfReferenceQuestions) {\n        const nestedItems = item.pdfReferenceQuestions[item.pdfReference];\n        if (Array.isArray(nestedItems)) {\n          processItemsStyle(nestedItems, styleJson); // recursion\n        } else if (nestedItems) {\n          processItemsStyle([nestedItems], styleJson); // handle single object\n        }\n      }\n    }\n  }\n  // Usage\n  let styleJson: any = {};\n  processItemsStyle(items, styleJson);\n  result['styles'] = styleJson; \n  return result;\n}\n  // AP-06MAR25 - Element new order update\n  updateElementsOrder(updatedElements: any[]): void {\n    this.pdfElements = [...updatedElements];\n    this.pdfElementsSubject.next(this.pdfElements);\n  }\n  // Remove an element by ID\n  // Save elements to localStorage and update the subject\n  removeElementComponent(id: any) {\n    this.tempElem = [];\n    this.selectedElementSubject.next(null);\n    this.currentElement = {}\n    this.pdfElements.forEach((element: any) => {\n      if (element.id !== id) {\n        this.tempElem.push(element);\n      }\n    });\n    this.pdfElements = this.tempElem;\n    this.pdfElementsSubject.next([...this.pdfElements]);\n  }\n  // SKS19MAR25 update the element\n  elementUpdate( element: any, from?:any) {\n    let eleIndex\n    const elements = this.pdfElements;\n    elements.forEach((ele: any, index: number) => {\n      if (ele.id === element.id) {\n        elements[index] = element; \n        eleIndex = index;\n      }\n    });    \n    this.pdfElements = elements;\n    if(from !== 'valueChange'){\n      this.sortElementsByOrder();\n      this.pdfElementsSubject.next([...elements]);\n      this.selectedElementSubject.next({index: eleIndex});\n    }\n  }\n  // SKS12SEP25 date translate function \n  dateTransform(\n    value: any,\n    type: 'date' | 'datetime' | 'month' | 'time',\n    languageCode: string,\n    dateFormatType: 'hijri' | 'gregorianAr' | 'gregorian'\n  ): string {\n    if (!value) return '';\n    // SKS14AUG25 Case 1: Time only → just convert numbers if Arabic\n    if (type === 'time') {\n      return languageCode === 'ar' ? this.toArabicNumbers(value) : value;\n    }\n    // SKS14AUG25 Case 2: Other date types → parse and format\n    let date: moment.Moment;\n    if (dateFormatType === 'hijri') {\n      date = moment(value, 'YYYY-MM-DDTHH:mm').locale(languageCode === 'ar' ? 'ar-SA' : 'en');\n    } else {\n      date = moment(value).locale(languageCode === 'ar' ? 'ar-SA' : 'en');\n    }\n    let format = '';\n    switch (type) {\n      case 'date':\n        format = dateFormatType === 'hijri' ? 'iDD/iMM/iYYYY' : 'DD/MM/YYYY';\n        break;\n      case 'datetime':\n        format = dateFormatType === 'hijri' ? 'iDD/iMM/iYYYY HH:mm' : 'DD/MM/YYYY HH:mm';\n        break;\n      case 'month':\n        format = dateFormatType === 'hijri' ? 'iMM/iYYYY' : 'MM/YYYY';\n        break;\n    }\n    let output = date.format(format);\n    // SKS14AUG25 Convert to Arabic numerals if needed\n    if (languageCode === 'ar') {\n      output = this.toArabicNumbers(output);\n    }\n    return output;\n  }\n\n  private toArabicNumbers(input: string): string {\n    const easternArabicNumerals = ['٠', '١', '٢', '٣', '٤', '٥', '٦', '٧', '٨', '٩'];\n    return input.replace(/\\d/g, d => easternArabicNumerals[+d]);\n  }\n}\n","// AP-11APR25\nimport { Injectable } from '@angular/core';\nimport { DataService } from '../data/data.service';\n\n@Injectable({\n  providedIn: 'root'\n})\nexport class TemplateService {\n  // templates = [\n  //   {\n  //     templateId: 1,\n  //     templateName: 'Invoice',\n  //     content: 'Invoice template with customer details',\n  //     elements: [\n  //       { \n  //         type: 'Text', \n  //         questionText: 'Customer Name',\n  //         style: { showLabel: true },\n  //         size: 12\n  //       },\n  //       { \n  //         type: 'Date', \n  //         questionText: 'Invoice Date',\n  //         style: { showLabel: true }\n  //       },\n  //       {\n  //         type: 'Table',\n  //         questionText: 'Items',\n  //         fieldsMeta: JSON.stringify([\n  //           { \n  //             label: 'Item', \n  //             fieldName: 'item', \n  //             type: 'Text',\n  //             uniqueIdentifier: 'temp1' \n  //           },\n  //           {\n  //             label: 'Quantity',\n  //             fieldName: 'qty',\n  //             type: 'Number',\n  //             uniqueIdentifier: 'temp2'\n  //           }\n  //         ]),\n  //         tableConfig: {\n  //           isNosIndicator: true,\n  //           addInlineRecord: true,\n  //           isPagination: true\n  //         }\n  //       }\n  //     ]\n  //   },\n  //   {\n  //     templateId: 2,\n  //     templateName: 'Registration',\n  //     content: 'User registration form template',\n  //     elements: [\n  //       {\n  //         type: 'Text',\n  //         questionText: 'Full Name',\n  //         style: { showLabel: true },\n  //         size: 12\n  //       },\n  //       {\n  //         type: 'Text',\n  //         questionText: 'Email Address',\n  //         style: { showLabel: true },\n  //         size: 12\n  //       },\n  //       {\n  //         type: 'Date',\n  //         questionText: 'Date of Birth',\n  //         style: { showLabel: true }\n  //       }\n  //     ]\n  //   },\n  //   {\n  //     templateId: 3,\n  //     templateName: 'Employee Detail',\n  //     content: 'Template to capture employee details',\n  //     elements: [\n  //       {\n  //         type: 'Text',\n  //         questionText: 'Employee ID',\n  //         style: { showLabel: true },\n  //         size: 6\n  //       },\n  //       {\n  //         type: 'Text',\n  //         questionText: 'Employee Name',\n  //         style: { showLabel: true },\n  //         size: 6\n  //       },\n  //       {\n  //         type: 'Table',\n  //         questionText: 'Previous Work Experience',\n  //         fieldsMeta: JSON.stringify([\n  //           {\n  //             label: 'Company Name',\n  //             fieldName: 'company',\n  //             type: 'Text',\n  //             uniqueIdentifier: 'emp1'\n  //           },\n  //           {\n  //             label: 'Years Worked',\n  //             fieldName: 'years',\n  //             type: 'Number',\n  //             uniqueIdentifier: 'emp2'\n  //           }\n  //         ]),\n  //         tableConfig: {\n  //           isNosIndicator: false,\n  //           addInlineRecord: true,\n  //           isPagination: true\n  //         }\n  //       }\n  //     ]\n  //   },\n  //   {\n  //     templateId: 4,\n  //     templateName: 'Feedback',\n  //     content: 'Feedback form for services or products',\n  //     elements: [\n  //       {\n  //         type: 'Text',\n  //         questionText: 'Your Name',\n  //         style: { showLabel: true },\n  //         size: 12\n  //       },\n  //       {\n  //         type: 'Text',\n  //         questionText: 'Feedback',\n  //         style: { showLabel: true },\n  //         size: 12\n  //       },\n  //       {\n  //         type: 'Table',\n  //         questionText: 'Service Ratings',\n  //         fieldsMeta: JSON.stringify([\n  //           {\n  //             label: 'Service',\n  //             fieldName: 'service',\n  //             type: 'Text',\n  //             uniqueIdentifier: 'fb1'\n  //           },\n  //           {\n  //             label: 'Rating (1-5)',\n  //             fieldName: 'rating',\n  //             type: 'Number',\n  //             uniqueIdentifier: 'fb2'\n  //           }\n  //         ]),\n  //         tableConfig: {\n  //           isNosIndicator: false,\n  //           addInlineRecord: true,\n  //           isPagination: false\n  //         }\n  //       }\n  //     ]\n  //   }\n  // ];\n  \n  templates = [];\n  \n  unique_id: any;\n  book: any;\n  formElements: any[] = [];\n  constructor( private dataService: DataService) {\n    this.newBook(); \n  }\n  getTemplates() {\n    return this.templates;\n  }\n  initializeElementFromTemplate(templateElement: any, index: number): any {\n    const unique_id = this.dataService.nxtId();\n    const baseElement = {\n      id: unique_id,\n      uid: unique_id,\n      type: templateElement.type,\n      name: null,\n      questionText: templateElement.questionText || null,\n      question: templateElement.question || null,\n      helpText: null,\n      errorMessage: null,\n      isReadOnly: false,\n      isHidden: false,\n      required: false,\n      referenceField: null,\n      additionalRichContent: null,\n      groupName: null,\n      isDateBackward: false,\n      title: null,\n      subTitle: null,\n      size: templateElement.size || 12,\n      isDateForward: false,\n      isOptional: false,\n      isTitle: false,\n      nextQuestion: null,\n      allowedFileExtensions: null,\n      questionNumber: index + 1,\n      order: index + 1,\n      style: {\n        labelClass: null,\n        labelStyle: null,\n        labelValueStyle: null,\n        inputClass: null,\n        inputStyle: null,\n        showLabel: templateElement?.style?.showLabel ?? true,\n        bookStyle: null,\n        direction: 'ltr',\n        questionStyle: null,\n      },\n      subText: {\n        endpoint: null,\n        variable: null,\n        field: null,\n        defaultField: null,\n        sourceQuestionId: null,\n        valueField: null,\n        labelField: null,\n        isDependentField: false,\n        dependentValue: null,\n        queryField: null,\n        queryValue: null,\n        queryValueReference: null,\n        uniqueKey: null,\n      },\n      imageData: null,\n      boolean: false,\n      options: templateElement.options\n        ? this.initializeOptions(templateElement.options)\n        : null,\n      imageSize:\n        templateElement.type === 'Image' ? { width: 150, height: 150 } : null,\n      tableConfig: templateElement.type === 'Table' ? {\n        isNosIndicator: true,\n        addInlineRecord: true,\n        isPagination: true,\n        actionButton: true,\n        isDeleteRow: true,\n        isEditRow: true,\n        searchBar: true,\n        isButtons: true,\n        itemsPerPage: 10,\n      } : null,\n      fieldsMeta: templateElement.fieldsMeta\n        ? this.initializeFieldsMeta(templateElement.fieldsMeta)\n        : null,\n    };\n\n    return { ...baseElement, ...templateElement };\n  }\n\n  private initializeOptions(options: any[]): any[] {\n    return options.map(option => ({\n      ...option,\n      id: this.dataService.nxtId()\n    }));\n  }\n\n  private initializeFieldsMeta(fieldsMeta: string): any {\n    try {\n      const parsed = JSON.parse(fieldsMeta);\n      return parsed.map((field: any) => ({\n        ...field,\n        uniqueIdentifier: this.dataService.nxtId()\n      }));\n    } catch (e) {\n      console.error('Error parsing fieldsMeta:', e);\n      return [];\n    }\n  }\n// In TemplateService\ndownload() {\n  if (!this.formElements || !Array.isArray(this.formElements)) {\n    console.error('Invalid formElements');\n    return null;\n  }\n\n  // Clean elements for export (same as FormBuilderService)\n  this.formElements.forEach(element => {\n    // Remove qbReferenceQuestions for 'book' type\n    if (element.type === 'book') {\n      delete element.qbReferenceQuestions;\n    }\n\n    // Process subText to match FormBuilderService's format\n    if (element.subText) {\n      try {\n        // Convert subText to object if string\n        element.subText = typeof element.subText === 'string' \n          ? JSON.parse(element.subText) \n          : {...element.subText};\n\n        // Convert field to array if string\n        if (typeof element.subText.field === 'string') {\n          element.subText.field = element.subText.field.split(',').map(i => i.trim());\n        }\n\n        // Stringify subText for storage\n        element.subText = JSON.stringify(element.subText);\n      } catch (e) {\n        console.error('Error processing subText:', e);\n        element.subText = '{}';\n      }\n    }\n  });\n\n  // Update book structure (same as FormBuilderService)\n  if (!this.book) this.newBook(); // Ensure book exists\n  \n  if (this.book.bookQuestionsMap && this.unique_id) {\n    this.book.bookQuestionsMap[this.unique_id].subQuestions = this.formElements;\n  }\n\n  return JSON.parse(JSON.stringify(this.book)); // Return clean copy\n}\n\n// Add the newBook() method if missing\nprivate newBook() {\n  this.unique_id = this.dataService.nxtId();\n  this.book = {\n    bookQuestionsMap: {\n      [this.unique_id]: {\n        subQuestions: [],\n        type: 'Book'\n      }\n    },\n    questionbook: {\n      action: JSON.stringify([\n        { name: \"Cancel\", eventtoemit: \"close\" },\n        { name: \"Save\", eventtoemit: \"submit\", method: \"POST\" }\n      ])\n    },\n    records: [{\n      id: this.unique_id,\n      title: 'Untitled Template',\n      subQuestions: []\n    }]\n  };\n}\n  \n  \n}\n","import { HttpClient } from '@angular/common/http';\nimport { Component, ElementRef, EventEmitter, HostListener, Input, OnInit, Output, SimpleChanges, ViewChild } from '@angular/core';\nimport { CropperPosition, Dimensions, ImageTransform } from '../../../components/image-cropper/interfaces';\nimport { CommonModule } from '@angular/common';\nimport { FormsModule } from '@angular/forms';\nimport { NxtSearchBox } from '../../../components/search-box/search-box.component';\nimport { ImageCropperComponent } from '../../../components/image-cropper/component/image-cropper.component';\nimport { PdfDesignerService } from '../../../services/pdf-designer/pdf-designer.service';\nimport { TemplateService } from '../../../services/template/template.service';\nimport { NxtCustomTranslatePipe } from '../../../pipe/custom-translate.pipe';\nimport { DataService } from '../../../services/data/data.service';\nimport { FormulaInputComponent } from '../../../components/formula-input/formula-input.component';\n\n@Component({\n  selector: 'app-pdf-properties',\n  standalone: true,\n  imports: [CommonModule, FormsModule, NxtSearchBox, ImageCropperComponent, NxtCustomTranslatePipe, FormulaInputComponent],\n  templateUrl: './pdf-properties.component.html',\n  styleUrl: './pdf-properties.component.css'\n})\nexport class PdfPropertiesComponent {\n\n  @Output() formButtonHandler = new EventEmitter<any>();\n  @Output() templateSaveHandler = new EventEmitter<any>();\n  selectedOption: string = '';\n  selectedElementIndex: number = -1;\n  @Input() selectedElementType: string = '';\n  selectedAlign: string = 'align-left';  // Add this property\n  selectedStyles: string[] = [];  // Using array since multiple styles can be selected\n  selectedElement: any = null;  // Receive the selected element\n  headerSelect: boolean = false;\n  bookId: any;\n  pdf: any;\n  activeTab: string = 'attributes';\n  selectColumn: any\n  transform: ImageTransform = {\n    translateUnit: 'px',\n    scale: 1,\n    rotate: 0,\n    flipH: false,\n    flipV: false,\n    translateH: 0,\n    translateV: 0\n  };\n  canvasRotation = 0;\n  cropper?: CropperPosition;\n  loading = false;\n  cropperMaxHeight = 0;\n  cropperMaxWidth = 0;\n  cropperMinHeight = 0;\n  cropperMinWidth = 0;\n  cropperStaticWidth = 0;\n  cropperStaticHeight = 0;\n  aspectRatio = 4 / 3;\n  roundCropper = false;\n  imageChangedEvent: Event | null = null;\n  alignImage = 'center' as const;\n  //  \"endpoint\": \"https://dev-api.valarhr.com/nxt\",\n  // SKS28MAR25 default pdf search endpoint\n  bookSubtext = {\n    \"endpoint\": \"https://dev-api.valarhr.com/pdf\",\n    \"variable\": null,\n    \"field\": ['name', 'label'],\n    \"defaultField\": \"name\",\n    \"isObject\": true\n  }\n  isLinkDropdownOpen = false;\n  fieldAsString: string = '';\n  filteredColumns: any[] = [];\n\n  @Input() templateSelected: boolean = false;\n\n  @ViewChild('dropdown', { static: false }) dropdown!: ElementRef;\n\n\n  draggedId: string | null = null;\n  pdfElements: any[] = [];\n  unique_id: string = 'pdf-1234'; // should be consistent\n  selectedTemplate: any;\n  subtext = {\n    label: 'Sub Text', type: 'subQuestion', key: 'isExpanded', labelPath: 'SUB_TEXT',\n    subQuestion: [\n      { label: 'End Point', placeholder: 'endpoint', type: 'text', key: 'subText.endpoint', labelPath: 'END_POINT' },\n      { label: 'Variable', placeholder: 'variable', type: 'text', key: 'subText.variable', labelPath: 'VARIABLE' },\n      { label: 'Field', placeholder: 'field', type: 'text', key: 'subText.field', labelPath: 'FIELD' },\n      { label: 'Default Field', placeholder: 'defaultField', type: 'text', key: 'subText.defaultField', labelPath: 'DEFAULT_FIELD' },\n      { label: 'Is Object', placeholder: 'Is Object', type: 'boolean', key: 'subText.isObject', labelPath: 'IS_OBJECT' },\n      { label: 'Post Reference Field', placeholder: 'Post Reference Field', type: 'text', key: 'subText.postReferenceField', labelPath: 'POST_REFERENCE_FIELD' },\n      { label: 'Label Field', placeholder: 'labelField', type: 'text', key: 'subText.labelField', labelPath: 'LABEL_FIELD' },\n      { label: 'Value Field', placeholder: 'valueField', type: 'text', key: 'subText.valueField', labelPath: 'VALUE_FIELD' },\n      { label: 'Source Question Id', placeholder: 'sourceQuestionId', type: 'text', key: 'subText.sourceQuestionId', labelPath: 'SOURCE_QUESTION_ID' },\n      { label: 'Condition Question Id', placeholder: 'conditionQuestionId', type: 'text', key: 'subText.conditionQuestionId', labelPath: 'CONDITION_QUESTION_ID' },\n      { label: 'Condition Question Value', placeholder: 'conditionQuestionValue', type: 'text', key: 'subText.conditionQuestionValue', labelPath: 'CONDITION_QUESTION_VALUE' },\n      { label: 'Dependent Value', placeholder: 'dependentValue', type: 'text', key: 'subText.dependentValue', labelPath: 'DEPENDENT_VALUE' },\n      { label: 'Dependent Field', placeholder: 'isDependentField', type: 'boolean', key: 'subText.isDependentField', labelPath: 'DEPENDENT_FIELD' },\n      { label: 'Query Parameter', placeholder: 'field', type: 'text', key: 'subText.queryParameter', labelPath: 'QUERY_PARAMETER' },\n      { label: 'Query Field', placeholder: 'queryField', type: 'text', key: 'subText.queryField', labelPath: 'QUERY_FIELD' },\n      { label: 'Query Value', placeholder: 'queryValue', type: 'text', key: 'subText.queryValue', labelPath: 'QUERY_VALUE' },\n      { label: 'Query Value Ref', placeholder: 'queryValueRef', type: 'text', key: 'subText.queryValueReference', labelPath: 'QUERY_VALUE_REF' },\n      { label: 'Unique Key', placeholder: 'uniqueKey', type: 'text', key: 'subText.uniqueKey', labelPath: 'UNIQUE_KEY' }\n    ]\n  }\n  elementProperties = {\n    // AP-10MAR25 - Defines the Header element with a text input field   \n    // AP-25MAR25 Add subtext all variables\n    'Header': {\n      elementProps: [\n        { label: 'Label', labelPath: 'LABEL', placeholder: 'Enter Text', type: 'text', key: 'title' }\n      ],\n    },\n    'text': {\n      elementProps: [\n        { label: 'Place Holder', labelPath: 'PLACEHOLDER', placeholder: 'Enter Text', type: 'text', key: 'question' },\n        { label: 'Help Text', placeholder: 'Enter Text', type: 'text', key: 'helpText', isTranslate: true, labelPath: 'HELP_TEXT' },\n        { label: 'Element', labelPath: 'ELEMENT', type: 'number', key: 'questionNumber' },\n        { label: 'width', labelPath: 'WIDTH', type: 'fieldSize', key: 'width' },\n        { label: 'Hide In Pdf', labelPath: 'HIDEINPDF', type: 'checkbox', key: 'hideInPdf' },\n        { label: 'Label', placeholder: 'Field label', type: 'text', key: 'questionText', isTranslate: true, labelPath: 'LABEL' },\n        { label: 'Show Label In Pdf', labelPath: 'SHOW_LABEL_IN_PDF', type: 'checkbox', key: 'showLabelInPdf' },\n      ],\n      fieldProps: [\n        { label: '', labelPath: 'TOGGLEOPTIONS', type: 'toggleGroup', key: 'toggleOptions' },\n        { label: 'Value', labelPath: 'VALUE', placeholder: 'Enter Text', type: 'text', key: 'value' },\n        { label: 'Reference Field', labelPath: 'REFERENCEFIELD', placeholder: 'Reference Field', type: 'text', key: 'referenceField' },\n        this.subtext\n      ],\n      appearance: [\n        {\n          label: 'Select Font', labelPath: 'SELECTFONT', type: 'select', key: 'style.font', placeholder: 'Left',\n          options: [{ value: 'Helvetica Neue', label: 'Helvetica Neue', labelPath: 'FONT_FAMILY_HELVETICA_NEUE' },\n          { value: 'Arial', label: 'Arial', labelPath: 'FONT_FAMILY_ARIAL' },\n          { value: 'Times New Roman', label: 'Times New Roman', labelPath: 'FONT_FAMILY_TIMES_NEW_ROMAN' },\n          { value: 'Roboto', label: 'Roboto', labelPath: 'FONT_FAMILY_ROBOTO' }]\n        },\n        { label: 'Font Color', labelPath: 'color', type: 'color', key: 'style.color', value: '' },\n        {\n          label: 'Font Size', labelPath: 'FONTSIZE', type: 'number', key: 'style.fontSize', value: 12\n        },\n        {\n          label: 'Font Weight', labelPath: 'FONTWEIGHT', type: 'select', key: 'style.fontWeight', value: '',\n          options: [\n            { value: '400', label: '400-Normal', labelPath: 'FONTWEIGHT_NORMAL' },\n            { value: '500', label: '500-Medium', labelPath: 'FONTWEIGHT_MEDIUM' },\n            { value: '600', label: '600-Semi Bold', labelPath: 'FONTWEIGHT_SEMIBOLD' },\n            { value: '700', label: '700-Bold', labelPath: 'FONTWEIGHT_BOLD' }\n          ]\n        },\n        {\n          label: 'Font Style', labelPath: 'FONTSTYLE', type: 'select', key: 'style.fontStyle', value: '',\n          options: [\n            { label: 'Normal', labelPath: 'FONTSTYLE_NORMAL', value: 'normal' },\n            { label: 'Bold', labelPath: 'FONTSTYLE_BOLD', value: 'bold' },\n            { label: 'Italic', labelPath: 'FONTSTYLE_ITALIC', value: 'italic' }\n          ]\n        },\n        {\n          label: 'Margin', labelPath: 'MARGIN', type: 'marginPicker', key: 'style.margin',\n          placeholder: 'Left, Top, Right, Bottom', value: [0, 0, 0, 0]\n        },\n        {\n          label: 'Align Item', labelPath: 'ALIGNITEM', type: 'select', key: 'style.alignment', value: '',\n          options: [\n            { label: 'Left', labelPath: 'ALIGNITEM_LEFT', value: 'left' },\n            { label: 'Center', labelPath: 'ALIGNITEM_CENTER', value: 'center' },\n            { label: 'Right', labelPath: 'ALIGNITEM_RIGHT', value: 'right' }\n          ]\n        }\n      ]\n    },\n    'currency': {\n      elementProps: [\n        { label: 'Place Holder', labelPath: 'PLACEHOLDER', placeholder: 'Enter Text', type: 'text', key: 'question' },\n        { label: 'Help Text', placeholder: 'Enter Text', type: 'text', key: 'helpText', isTranslate: true, labelPath: 'HELP_TEXT' },\n        { label: 'Element', labelPath: 'ELEMENT', type: 'number', key: 'questionNumber' },\n        { label: 'width', labelPath: 'WIDTH', type: 'fieldSize', key: 'width' },\n        { label: 'Hide In Pdf', labelPath: 'HIDEINPDF', type: 'checkbox', key: 'hideInPdf' },\n        { label: 'Label', placeholder: 'Field label', type: 'text', key: 'questionText', isTranslate: true, labelPath: 'LABEL' },\n        { label: 'Show Label In Pdf', labelPath: 'SHOW_LABEL_IN_PDF', type: 'checkbox', key: 'showLabelInPdf' },\n      ],\n      fieldProps: [\n        { label: '', labelPath: 'TOGGLEOPTIONS', type: 'toggleGroup', key: 'toggleOptions' },\n        { label: 'Value', labelPath: 'VALUE', placeholder: 'Enter Text', type: 'text', key: 'value' },\n        { label: 'Reference Field', labelPath: 'REFERENCEFIELD', placeholder: 'Reference Field', type: 'text', key: 'referenceField' },\n        this.subtext\n      ],\n      appearance: [\n        {\n          label: 'Select Font', labelPath: 'SELECTFONT', type: 'select', key: 'style.font', placeholder: 'Left',\n          options: [{ value: 'Helvetica Neue', label: 'Helvetica Neue', labelPath: 'FONT_FAMILY_HELVETICA_NEUE' },\n          { value: 'Arial', label: 'Arial', labelPath: 'FONT_FAMILY_ARIAL' },\n          { value: 'Times New Roman', label: 'Times New Roman', labelPath: 'FONT_FAMILY_TIMES_NEW_ROMAN' },\n          { value: 'Roboto', label: 'Roboto', labelPath: 'FONT_FAMILY_ROBOTO' }]\n        },\n        { label: 'Font Color', labelPath: 'color', type: 'color', key: 'style.color', value: '' },\n        {\n          label: 'Font Size', labelPath: 'FONTSIZE', type: 'number', key: 'style.fontSize', value: 12\n        },\n        {\n          label: 'Font Weight', labelPath: 'FONTWEIGHT', type: 'select', key: 'style.fontWeight', value: '',\n          options: [\n            { value: '400', label: '400-Normal', labelPath: 'FONTWEIGHT_NORMAL' },\n            { value: '500', label: '500-Medium', labelPath: 'FONTWEIGHT_MEDIUM' },\n            { value: '600', label: '600-Semi Bold', labelPath: 'FONTWEIGHT_SEMIBOLD' },\n            { value: '700', label: '700-Bold', labelPath: 'FONTWEIGHT_BOLD' }\n          ]\n        },\n        {\n          label: 'Font Style', labelPath: 'FONTSTYLE', type: 'select', key: 'style.fontStyle', value: '',\n          options: [\n            { label: 'Normal', labelPath: 'FONTSTYLE_NORMAL', value: 'normal' },\n            { label: 'Bold', labelPath: 'FONTSTYLE_BOLD', value: 'bold' },\n            { label: 'Italic', labelPath: 'FONTSTYLE_ITALIC', value: 'italic' }\n          ]\n        },\n        {\n          label: 'Margin', labelPath: 'MARGIN', type: 'marginPicker', key: 'style.margin',\n          placeholder: 'Left, Top, Right, Bottom', value: [0, 0, 0, 0]\n        },\n        {\n          label: 'Align Item', labelPath: 'ALIGNITEM', type: 'select', key: 'style.alignment', value: '',\n          options: [\n            { label: 'Left', labelPath: 'ALIGNITEM_LEFT', value: 'left' },\n            { label: 'Center', labelPath: 'ALIGNITEM_CENTER', value: 'center' },\n            { label: 'Right', labelPath: 'ALIGNITEM_RIGHT', value: 'right' }\n          ]\n        }\n      ]\n    },\n    'date': {\n      elementProps: [\n        { label: 'Place Holder', placeholder: 'Enter Text', type: 'text', key: 'question' },\n        { label: 'Help Text', placeholder: 'Enter Text', type: 'text', key: 'helpText', isTranslate: true, labelPath: 'HELP_TEXT' },\n        { label: 'Element', type: 'number', key: 'questionNumber' },\n        { label: 'width', type: 'fieldSize', key: 'width' },\n        { label: 'Hide In Pdf', labelPath: 'HIDEINPDF', type: 'checkbox', key: 'hideInPdf' },\n        { label: 'Label', placeholder: 'Field label', type: 'text', key: 'questionText', isTranslate: true, labelPath: 'LABEL' },\n        { label: 'Show Label In Pdf', labelPath: 'SHOW_LABEL_IN_PDF', type: 'checkbox', key: 'showLabelInPdf' },\n      ],\n      fieldProps: [\n        { label: '', type: 'toggleGroup', key: 'toggleOptions' },\n        { label: 'Value', placeholder: 'Enter Text ', type: 'text', key: 'value' },\n        { label: 'Reference Field', placeholder: 'Reference Field', type: 'text', key: 'referenceField' },\n        this.subtext\n      ],\n      appearance: [\n        {\n          label: 'Select Font', type: 'select', key: 'style.font', placeholder: 'Left',\n          options: [\n            { value: 'Helvetica Neue', label: 'Helvetica Neue', labelPath: 'FONT_FAMILY_HELVETICA_NEUE' },\n            { value: 'Arial', label: 'Arial', labelPath: 'FONT_FAMILY_ARIAL' },\n            { value: 'Times New Roman', label: 'Times New Roman', labelPath: 'FONT_FAMILY_TIMES_NEW_ROMAN' },\n            { value: 'Roboto', label: 'Roboto', labelPath: 'FONT_FAMILY_ROBOTO' }\n          ]\n        },\n        { label: 'Font Color', type: 'color', key: 'style.color', value: '' },\n        {\n          label: 'Font Size',\n          type: 'number',\n          key: 'style.fontSize',\n          value: 12\n        },\n        {\n          label: 'Font Weight', type: 'select', key: 'style.fontWeight', value: '',\n          options: [\n            { value: '400', label: '400-Normal' },\n            { value: '500', label: '500-Medium' },\n            { value: '600', label: '600-Semi Bold' },\n            { value: '700', label: '700-Bold' }\n          ]\n        },\n        {\n          label: 'Font Style', type: 'select', key: 'style.fontStyle', value: '',\n          options: [\n            { label: 'Normal', value: 'normal' },\n            { label: 'Bold', value: 'bold' },\n            { label: 'Italic', value: 'italic' }\n          ]\n        },\n        {\n          label: 'Margin', type: 'marginPicker', key: 'style.margin',\n          placeholder: 'Left, Top, Right, Bottom',\n          value: [0, 0, 0, 0]\n        },\n        {\n          label: 'Align Item', type: 'select', key: 'style.alignment', value: '',\n          options: [\n            { label: 'Left', value: 'left' },\n            { label: 'Center', value: 'center' },\n            { label: 'Right', value: 'right' }\n          ]\n        }\n      ]\n      \n    },\n    'Pdf': {\n      elementProps: [\n        { label: 'Element', labelPath: 'ELEMENT', type: 'number', key: 'questionNumber' },\n        { label: 'Help Text', placeholder: 'Enter Text', type: 'text', key: 'helpText', isTranslate: true, labelPath: 'HELP_TEXT' },\n        { label: 'width', labelPath: 'WIDTH', type: 'fieldSize', key: 'width' },\n        { label: 'Hide In Pdf', labelPath: 'HIDEINPDF', type: 'checkbox', key: 'hideInPdf' },\n        { label: 'Label', placeholder: 'Field label', type: 'text', key: 'questionText', isTranslate: true, labelPath: 'LABEL' },\n        { label: 'Show Label In Pdf', labelPath: 'SHOW_LABEL_IN_PDF', type: 'checkbox', key: 'showLabelInPdf' },\n      ],\n      fieldProps: [\n        { label: 'Value', labelPath: 'VALUE', placeholder: 'Enter Text', type: 'text', key: 'value' },\n        { label: 'Reference Field', labelPath: 'REFERENCEFIELD', placeholder: 'Reference Field', type: 'text', key: 'referenceField' },\n        this.subtext\n      ],\n      appearance: []\n    },\n    'Line': {\n      elementProps: [\n        { label: 'Line Width', type: 'fieldSize', key: 'width' },\n        { label: 'Padding Top', type: 'number', key: 'paddingTop', placeholder: 'Enter padding top' },\n        { label: 'Padding Bottom', type: 'number', key: 'paddingBottom', placeholder: 'Enter padding bottom' },\n        {\n          label: 'Line Style', type: 'select', key: 'lineStyle',\n          options: [\n            { value: 'Solid', label: 'Solid', labelPath: 'BORDER_STYLE_SOLID' },\n            { value: 'Dashed', label: 'Dashed', labelPath: 'BORDER_STYLE_DASHED' },\n            { value: 'Dotted', label: 'Dotted', labelPath: 'BORDER_STYLE_DOTTED' }\n          ]\n        },\n        { label: 'Hide In Pdf', labelPath: 'HIDEINPDF', type: 'checkbox', key: 'hideInPdf' }\n      ],\n      fieldProps: [],\n      appearance: [\n        {\n          label: 'Select Font', type: 'select', key: 'style.font', placeholder: 'Left',\n          options: [\n            { value: 'Helvetica Neue', label: 'Helvetica Neue', labelPath: 'FONT_FAMILY_HELVETICA_NEUE' },\n            { value: 'Arial', label: 'Arial', labelPath: 'FONT_FAMILY_ARIAL' },\n            { value: 'Times New Roman', label: 'Times New Roman', labelPath: 'FONT_FAMILY_TIMES_NEW_ROMAN' },\n            { value: 'Roboto', label: 'Roboto', labelPath: 'FONT_FAMILY_ROBOTO' }\n          ]\n        },\n        { label: 'Font Color', type: 'color', key: 'style.color', value: '' },\n        {\n          label: 'Font Size',\n          type: 'number',\n          key: 'style.fontSize',\n          value: 12\n        },\n        {\n          label: 'Font Weight', type: 'select', key: 'style.fontWeight', value: '',\n          options: [\n            { value: '400', label: '400-Normal' },\n            { value: '500', label: '500-Medium' },\n            { value: '600', label: '600-Semi Bold' },\n            { value: '700', label: '700-Bold' }\n          ]\n        },\n        {\n          label: 'Font Style', type: 'select', key: 'style.fontStyle', value: '',\n          options: [\n            { label: 'Normal', value: 'normal' },\n            { label: 'Bold', value: 'bold' },\n            { label: 'Italic', value: 'italic' }\n          ]\n        },\n        {\n          label: 'Margin', type: 'marginPicker', key: 'style.margin',\n          placeholder: 'Left, Top, Right, Bottom',\n          value: [0, 0, 0, 0]\n        },\n        {\n          label: 'Align Item', type: 'select', key: 'style.alignment', value: '',\n          options: [\n            { label: 'Left', value: 'left' },\n            { label: 'Center', value: 'center' },\n            { label: 'Right', value: 'right' }\n          ]\n        }\n      ]\n      \n    },\n    'Space': {\n      elementProps: [\n        { label: 'Element', type: 'number', key: 'questionNumber' },\n        { label: 'Field Size', type: 'fieldSize', key: 'width' },\n        { label: 'Hide In Pdf', labelPath: 'HIDEINPDF', type: 'checkbox', key: 'hideInPdf' }\n      ],\n      fieldProps: [],\n      appearance: [\n        {\n          label: 'Select Font', type: 'select', key: 'style.font', placeholder: 'Left',\n          options: [\n            { value: 'Helvetica Neue', label: 'Helvetica Neue', labelPath: 'FONT_FAMILY_HELVETICA_NEUE' },\n            { value: 'Arial', label: 'Arial', labelPath: 'FONT_FAMILY_ARIAL' },\n            { value: 'Times New Roman', label: 'Times New Roman', labelPath: 'FONT_FAMILY_TIMES_NEW_ROMAN' },\n            { value: 'Roboto', label: 'Roboto', labelPath: 'FONT_FAMILY_ROBOTO' }\n          ]\n        },\n        { label: 'Font Color', type: 'color', key: 'style.color', value: '' },\n        {\n          label: 'Font Size',\n          type: 'number',\n          key: 'style.fontSize',\n          value: 12\n        },\n        {\n          label: 'Font Weight', type: 'select', key: 'style.fontWeight', value: '',\n          options: [\n            { value: '400', label: '400-Normal' },\n            { value: '500', label: '500-Medium' },\n            { value: '600', label: '600-Semi Bold' },\n            { value: '700', label: '700-Bold' }\n          ]\n        },\n        {\n          label: 'Font Style', type: 'select', key: 'style.fontStyle', value: '',\n          options: [\n            { label: 'Normal', value: 'normal' },\n            { label: 'Bold', value: 'bold' },\n            { label: 'Italic', value: 'italic' }\n          ]\n        },\n        {\n          label: 'Margin', type: 'marginPicker', key: 'style.margin',\n          placeholder: 'Left, Top, Right, Bottom',\n          value: [0, 0, 0, 0]\n        },\n        // {\n        //   label: 'Align Item', type: 'select', key: 'style.alignment', value: '',\n        //   options: [\n        //     { label: 'Left', value: 'left' },\n        //     { label: 'Center', value: 'center' },\n        //     { label: 'Right', value: 'right' }\n        //   ]\n        // }\n      ]\n      \n    },\n    \"Table\": {\n      \"elementProps\": [\n        { \"label\": \"rowChoice\", \"placeholder\": \"\", \"type\": \"text\", \"key\": \"rowChoice\" },\n        { label: 'Help Text', placeholder: 'Enter Text', type: 'text', key: 'helpText', isTranslate: true, labelPath: 'HELP_TEXT' },\n        { label: 'questionNumber', type: 'number', key: 'questionNumber' },\n        { label: 'Table Size', type: 'fieldSize', key: 'width' },\n        { label: 'Hide In Pdf', labelPath: 'HIDEINPDF', type: 'checkbox', key: 'hideInPdf' },\n      ],\n      \"fieldProps\": [\n        { \"label\": \"tableId\", \"placeholder\": \"Emp_Table_01\", \"type\": \"text\", \"key\": \"tableId\" },\n        { \"label\": \"value\", \"placeholder\": \"Value\", \"type\": \"text\", \"key\": \"value\" },\n        { label: 'Reference', placeholder: 'Reference Field', type: 'text', key: 'referenceField' },\n        {\n          \"label\": \"\", \"placeholder\": \"Enter Text\", \"type\": \"subQuestion\", \"key\": \"isExpanded\",\n          \"subQuestion\": [\n          ]\n        },\n      ],\n      appearance: [\n        {\n          label: 'Select Font', type: 'select', key: 'style.font', placeholder: 'Left',\n          options: [\n            { value: 'Helvetica Neue', label: 'Helvetica Neue', labelPath: 'FONT_FAMILY_HELVETICA_NEUE' },\n            { value: 'Arial', label: 'Arial', labelPath: 'FONT_FAMILY_ARIAL' },\n            { value: 'Times New Roman', label: 'Times New Roman', labelPath: 'FONT_FAMILY_TIMES_NEW_ROMAN' },\n            { value: 'Roboto', label: 'Roboto', labelPath: 'FONT_FAMILY_ROBOTO' }\n          ]\n        },\n        { label: 'Font Color', type: 'color', key: 'style.color', value: '' },\n        {\n          label: 'Font Size',\n          type: 'number',\n          key: 'style.fontSize',\n          value: 12\n        },\n        {\n          label: 'Font Weight', type: 'select', key: 'style.fontWeight', value: '',\n          options: [\n            { value: '400', label: '400-Normal' },\n            { value: '500', label: '500-Medium' },\n            { value: '600', label: '600-Semi Bold' },\n            { value: '700', label: '700-Bold' }\n          ]\n        },\n        {\n          label: 'Font Style', type: 'select', key: 'style.fontStyle', value: '',\n          options: [\n            { label: 'Normal', value: 'normal' },\n            { label: 'Bold', value: 'bold' },\n            { label: 'Italic', value: 'italic' }\n          ]\n        },\n        {\n          label: 'Margin', type: 'marginPicker', key: 'style.margin',\n          placeholder: 'Left, Top, Right, Bottom',\n          value: [0, 0, 0, 0]\n        },\n        {\n          label: 'Align Item', type: 'select', key: 'style.alignment', value: '',\n          options: [\n            { label: 'Left', value: 'left' },\n            { label: 'Center', value: 'center' },\n            { label: 'Right', value: 'right' }\n          ]\n        }\n      ]\n    },\n    \"TableColumn\": {\n      \"elementProps\": [\n        { \"label\": \"headerLabels\", \"placeholder\": \"Enter here\", \"type\": \"text\", \"targetArray\": \"fieldsMeta\", \"targetArrayKey\": \"uniqueIdentifier\", \"key\": \"label\" },\n        { \"label\": \"apiName\", \"placeholder\": \"Enter here\", \"type\": \"text\", \"targetArray\": \"fieldsMeta\", \"targetArrayKey\": \"uniqueIdentifier\", \"key\": \"apiName\" },\n        { \"label\": \"Formula\", \"placeholder\": \"Enter here\", \"type\": \"formula\", \"targetArray\": \"fieldsMeta\", \"targetArrayKey\": \"uniqueIdentifier\", \"key\": \"formula\" },\n        { label: 'Table Size', type: 'fieldSize', \"targetArray\": \"fieldsMeta\", \"targetArrayKey\": \"uniqueIdentifier\", key: 'style.width', value: '' },\n        {\n          \"label\": \"Summary Column\", \"placeholder\": \"Summary Column\", \"type\": \"subQuestion\", \"targetArray\": \"fieldsMeta\", \"targetArrayKey\": \"uniqueIdentifier\", \"key\": \"summaryColumn\",\n          \"subQuestion\": [\n            { \"label\": \"Type\", \"placeholder\": \"Enter here\", \"type\": \"text\", \"targetArray\": \"fieldsMeta\", \"targetArrayKey\": \"uniqueIdentifier\", \"key\": \"fldType\" },\n            { \"label\": \"Operation\", \"placeholder\": \"Enter here\", \"type\": \"text\", \"targetArray\": \"fieldsMeta\", \"targetArrayKey\": \"uniqueIdentifier\", \"key\": \"operation\" },\n            { \"label\": \"Operands\", \"placeholder\": \"Enter here\", \"type\": \"array\", \"targetArray\": \"fieldsMeta\", \"targetArrayKey\": \"uniqueIdentifier\", \"key\": \"operands\" },\n          ]\n        },\n        {\n          \"label\": \"Summary Row\", \"placeholder\": \"Summary Row\", \"type\": \"subQuestion\", \"targetArray\": \"fieldsMeta\", \"targetArrayKey\": \"uniqueIdentifier\", \"key\": \"summaryRow\", \"subQuestion\": [\n            { \"label\": \"Type\", \"placeholder\": \"Enter here\", \"type\": \"text\", \"targetArray\": \"fieldsMeta\", \"targetArrayKey\": \"uniqueIdentifier\", \"key\": \"fldType\" },\n            { \"label\": \"operation\", \"placeholder\": \"operation\", \"type\": \"text\", \"targetArray\": \"fieldsMeta\", \"targetArrayKey\": \"uniqueIdentifier\", \"key\": \"operation\" },\n            { \"label\": \"column\", \"placeholder\": \"Enter here\", \"type\": \"radio\", \"targetArray\": \"fieldsMeta\", \"targetArrayKey\": \"uniqueIdentifier\", \"key\": \"column\" },\n            { \"label\": \"operands\", \"placeholder\": \"Enter here\", \"type\": \"array\", \"targetArray\": \"fieldsMeta\", \"targetArrayKey\": \"uniqueIdentifier\", \"key\": \"operands\" },\n          ]\n        },\n        { label: 'Hide In Pdf', labelPath: 'HIDEINPDF', type: 'checkbox', key: 'hideInPdf' }\n      ],\n      \"fieldProps\": [\n        { label: 'Value', placeholder: 'Enter Text ', type: 'text', \"targetArray\": \"fieldsMeta\", \"targetArrayKey\": \"uniqueIdentifier\", key: 'value' },\n        { label: 'Reference Field', placeholder: 'Reference Field', \"targetArray\": \"fieldsMeta\", \"targetArrayKey\": \"uniqueIdentifier\", type: 'text', key: 'referenceField' },\n        {\n          label: 'Sub Text', type: 'subQuestion', \"targetArray\": \"fieldsMeta\", \"targetArrayKey\": \"uniqueIdentifier\", key: 'isExpanded', labelPath: 'SUB_TEXT',\n          subQuestion: [\n            { label: 'End Point', placeholder: 'endpoint', type: 'text', \"targetArray\": \"fieldsMeta\", \"targetArrayKey\": \"uniqueIdentifier\", key: 'subText.endpoint', labelPath: 'END_POINT' },\n            { label: 'Variable', placeholder: 'variable', type: 'text', \"targetArray\": \"fieldsMeta\", \"targetArrayKey\": \"uniqueIdentifier\", key: 'subText.variable', labelPath: 'VARIABLE' },\n            { label: 'Field', placeholder: 'field', type: 'text', \"targetArray\": \"fieldsMeta\", \"targetArrayKey\": \"uniqueIdentifier\", key: 'subText.field', labelPath: 'FIELD' },\n            { label: 'Default Field', placeholder: 'defaultField', type: 'text', \"targetArray\": \"fieldsMeta\", \"targetArrayKey\": \"uniqueIdentifier\", key: 'subText.defaultField', labelPath: 'DEFAULT_FIELD' },\n            { label: 'Is Object', placeholder: 'Is Object', type: 'boolean', \"targetArray\": \"fieldsMeta\", \"targetArrayKey\": \"uniqueIdentifier\", key: 'subText.isObject', labelPath: 'IS_OBJECT' },\n            { label: 'Post Reference Field', placeholder: 'Post Reference Field', \"targetArray\": \"fieldsMeta\", \"targetArrayKey\": \"uniqueIdentifier\", type: 'text', key: 'subText.postReferenceField', labelPath: 'POST_REFERENCE_FIELD' },\n            { label: 'Label Field', placeholder: 'labelField', type: 'text', \"targetArray\": \"fieldsMeta\", \"targetArrayKey\": \"uniqueIdentifier\", key: 'subText.labelField', labelPath: 'LABEL_FIELD' },\n            { label: 'Value Field', placeholder: 'valueField', type: 'text', \"targetArray\": \"fieldsMeta\", \"targetArrayKey\": \"uniqueIdentifier\", key: 'subText.valueField', labelPath: 'VALUE_FIELD' },\n            { label: 'Source Question Id', placeholder: 'sourceQuestionId', type: 'text', \"targetArray\": \"fieldsMeta\", \"targetArrayKey\": \"uniqueIdentifier\", key: 'subText.sourceQuestionId', labelPath: 'SOURCE_QUESTION_ID' },\n            { label: 'Condition Question Id', placeholder: 'conditionQuestionId', type: 'text', \"targetArray\": \"fieldsMeta\", \"targetArrayKey\": \"uniqueIdentifier\", key: 'subText.conditionQuestionId', labelPath: 'CONDITION_QUESTION_ID' },\n            { label: 'Condition Question Value', placeholder: 'conditionQuestionValue', type: 'text', \"targetArray\": \"fieldsMeta\", \"targetArrayKey\": \"uniqueIdentifier\", key: 'subText.conditionQuestionValue', labelPath: 'CONDITION_QUESTION_VALUE' },\n            { label: 'Dependent Value', placeholder: 'dependentValue', type: 'text', \"targetArray\": \"fieldsMeta\", \"targetArrayKey\": \"uniqueIdentifier\", key: 'subText.dependentValue', labelPath: 'DEPENDENT_VALUE' },\n            { label: 'Dependent Field', placeholder: 'isDependentField', type: 'boolean', \"targetArray\": \"fieldsMeta\", \"targetArrayKey\": \"uniqueIdentifier\", key: 'subText.isDependentField', labelPath: 'DEPENDENT_FIELD' },\n            { label: 'Query Parameter', placeholder: 'field', type: 'text', \"targetArray\": \"fieldsMeta\", \"targetArrayKey\": \"uniqueIdentifier\", key: 'subText.queryParameter', labelPath: 'QUERY_PARAMETER' },\n            { label: 'Query Field', placeholder: 'queryField', type: 'text', \"targetArray\": \"fieldsMeta\", \"targetArrayKey\": \"uniqueIdentifier\", key: 'subText.queryField', labelPath: 'QUERY_FIELD' },\n            { label: 'Query Value', placeholder: 'queryValue', type: 'text', \"targetArray\": \"fieldsMeta\", \"targetArrayKey\": \"uniqueIdentifier\", key: 'subText.queryValue', labelPath: 'QUERY_VALUE' },\n            { label: 'Query Value Ref', placeholder: 'queryValueRef', type: 'text', \"targetArray\": \"fieldsMeta\", \"targetArrayKey\": \"uniqueIdentifier\", key: 'subText.queryValueReference', labelPath: 'QUERY_VALUE_REF' },\n            { label: 'Unique Key', placeholder: 'uniqueKey', type: 'text', \"targetArray\": \"fieldsMeta\", \"targetArrayKey\": \"uniqueIdentifier\", key: 'subText.uniqueKey', labelPath: 'UNIQUE_KEY' }\n          ]\n        }\n      ],\n      \"appearance\": [\n        {\n          label: 'Select Font', type: 'select', \"targetArray\": \"fieldsMeta\", \"targetArrayKey\": \"uniqueIdentifier\", key: 'style.font', placeholder: 'Left',\n          options: [\n            { value: 'Helvetica Neue', label: 'Helvetica Neue', labelPath: 'FONT_FAMILY_HELVETICA_NEUE' },\n            { value: 'Arial', label: 'Arial', labelPath: 'FONT_FAMILY_ARIAL' },\n            { value: 'Times New Roman', label: 'Times New Roman', labelPath: 'FONT_FAMILY_TIMES_NEW_ROMAN' },\n            { value: 'Roboto', label: 'Roboto', labelPath: 'FONT_FAMILY_ROBOTO' }\n          ]\n        },\n        { label: 'Font Color', type: 'color', \"targetArray\": \"fieldsMeta\", \"targetArrayKey\": \"uniqueIdentifier\", key: 'style.color', value: '' },\n        { label: 'Background Color', type: 'color', \"targetArray\": \"fieldsMeta\", \"targetArrayKey\": \"uniqueIdentifier\", key: 'style.fillColor', value: '' },\n        {\n          label: 'Font Size', type: 'select', \"targetArray\": \"fieldsMeta\", \"targetArrayKey\": \"uniqueIdentifier\", key: 'style.fontSize', value: '',\n          options: [\n            { label: 'Small', value: '12px' },\n            { label: 'Medium', value: '14px' },\n            { label: 'Large', value: '16px' }\n          ]\n        },\n        {\n          label: 'Font Width', type: 'select', \"targetArray\": \"fieldsMeta\", \"targetArrayKey\": \"uniqueIdentifier\", key: 'style.fontWeight', value: '',\n          options: [\n            { value: '400', label: '400-Normal' },\n            { value: '500', label: '500-Medium' },\n            { value: '600', label: '600-Semi Bold' },\n            { value: '700', label: '700-Bold' }\n          ]\n        },\n        {\n          label: 'Font Style', type: 'select', \"targetArray\": \"fieldsMeta\", \"targetArrayKey\": \"uniqueIdentifier\", key: 'style.fontStyle', value: '',\n          options: [\n            { label: 'Normal', value: 'normal' },\n            { label: 'Bold', value: 'bold' },\n            { label: 'Italic', value: 'italic' }\n          ]\n        },\n        {\n          label: 'Margin', type: 'marginPicker', \"targetArray\": \"fieldsMeta\", \"targetArrayKey\": \"uniqueIdentifier\", key: 'style.margin',\n          placeholder: 'Left, Top, Right, Bottom',\n          value: [0, 0, 0, 0]\n        },\n        {\n          label: 'Align Item', type: 'select', \"targetArray\": \"fieldsMeta\", \"targetArrayKey\": \"uniqueIdentifier\", key: 'style.alignment', value: '',\n          options: [\n            { label: 'Left', value: 'left' },\n            { label: 'Center', value: 'center' },\n            { label: 'Right', value: 'right' }\n          ]\n        }\n      ]\n    },\n    'TextArea': {\n      elementProps: [\n        { label: 'Element', type: 'number', key: 'questionNumber' },\n        { label: 'Help Text', placeholder: 'Enter Text', type: 'text', key: 'helpText', isTranslate: true, labelPath: 'HELP_TEXT' },\n        { label: 'width', type: 'fieldSize', key: 'width' },\n        { label: 'Hide In Pdf', labelPath: 'HIDEINPDF', type: 'checkbox', key: 'hideInPdf' },\n        { label: 'Label', placeholder: 'Field label', type: 'text', key: 'questionText', isTranslate: true, labelPath: 'LABEL' },\n        { label: 'Show Label In Pdf', labelPath: 'SHOW_LABEL_IN_PDF', type: 'checkbox', key: 'showLabelInPdf' },\n      ],\n      fieldProps: [\n        { label: '', type: 'toggleGroup', key: 'toggleOptions' },\n        \n        { label: 'Value', placeholder: 'Enter Text ', type: 'text', key: 'value' },\n        { label: 'Reference Field', placeholder: 'Reference Field', type: 'text', key: 'referenceField' },\n        this.subtext\n      ],\n      appearance: [\n        {\n          label: 'Select Font', type: 'select', key: 'style.font', placeholder: 'Left',\n          options: [\n            { value: 'Helvetica Neue', label: 'Helvetica Neue', labelPath: 'FONT_FAMILY_HELVETICA_NEUE' },\n            { value: 'Arial', label: 'Arial', labelPath: 'FONT_FAMILY_ARIAL' },\n            { value: 'Times New Roman', label: 'Times New Roman', labelPath: 'FONT_FAMILY_TIMES_NEW_ROMAN' },\n            { value: 'Roboto', label: 'Roboto', labelPath: 'FONT_FAMILY_ROBOTO' }\n          ]\n        },\n        { label: 'Font Color', type: 'color', key: 'style.color', value: '' },\n        {\n          label: 'Font Size', type: 'select', key: 'style.fontSize', value: '',\n          options: [\n            { label: 'Small', value: '12px' },\n            { label: 'Medium', value: '14px' },\n            { label: 'Large', value: '16px' }\n          ]\n        },\n        {\n          label: 'Font Width', type: 'select', key: 'style.fontWeight', value: '',\n          options: [\n            { value: '400', label: '400-Normal' },\n            { value: '500', label: '500-Medium' },\n            { value: '600', label: '600-Semi Bold' },\n            { value: '700', label: '700-Bold' }\n          ]\n        }\n      ]\n    },\n    'image': {\n      elementProps: [\n        { label: 'Element', type: 'number', key: 'questionNumber' },\n        { label: 'Help Text', placeholder: 'Enter Text', type: 'text', key: 'helpText', isTranslate: true, labelPath: 'HELP_TEXT' },\n        { label: 'width', type: 'fieldSize', key: 'width' },\n        { label: 'Hide In Pdf', labelPath: 'HIDEINPDF', type: 'checkbox', key: 'hideInPdf' },\n        { label: 'Label', placeholder: 'Field label', type: 'text', key: 'questionText', isTranslate: true, labelPath: 'LABEL' },\n        { label: 'Show Label In Pdf', labelPath: 'SHOW_LABEL_IN_PDF', type: 'checkbox', key: 'showLabelInPdf' },\n      ],\n      fieldProps: [\n        { label: '', type: 'toggleGroup', key: 'toggleOptions' },\n        { label: 'Value', placeholder: 'Enter Text ', type: 'text', key: 'value' },\n        { label: 'Reference Field', placeholder: 'Reference Field', type: 'text', key: 'referenceField' },\n        {\n          \"label\": \"\", \"placeholder\": \"Enter Text\", \"type\": \"subQuestion\", \"key\": \"isExpanded\",\n          \"subQuestion\": [\n          ]\n        }\n      ],\n      appearance: [\n        {\n          label: 'Select Font', type: 'select', key: 'style.font', placeholder: 'Left',\n          options: [\n            { value: 'Helvetica Neue', label: 'Helvetica Neue', labelPath: 'FONT_FAMILY_HELVETICA_NEUE' },\n            { value: 'Arial', label: 'Arial', labelPath: 'FONT_FAMILY_ARIAL' },\n            { value: 'Times New Roman', label: 'Times New Roman', labelPath: 'FONT_FAMILY_TIMES_NEW_ROMAN' },\n            { value: 'Roboto', label: 'Roboto', labelPath: 'FONT_FAMILY_ROBOTO' }\n          ]\n        },\n        { label: 'Font Color', type: 'color', key: 'style.color', value: '' },\n        {\n          label: 'Font Size',\n          type: 'number',\n          key: 'style.fontSize',\n          value: 12\n        },\n        {\n          label: 'Font Weight', type: 'select', key: 'style.fontWeight', value: '',\n          options: [\n            { value: '400', label: '400-Normal' },\n            { value: '500', label: '500-Medium' },\n            { value: '600', label: '600-Semi Bold' },\n            { value: '700', label: '700-Bold' }\n          ]\n        },\n        {\n          label: 'Font Style', type: 'select', key: 'style.fontStyle', value: '',\n          options: [\n            { label: 'Normal', value: 'normal' },\n            { label: 'Bold', value: 'bold' },\n            { label: 'Italic', value: 'italic' }\n          ]\n        },\n        {\n          label: 'Margin', type: 'marginPicker', key: 'style.margin',\n          placeholder: 'Left, Top, Right, Bottom',\n          value: [0, 0, 0, 0]\n        },\n        {\n          label: 'Align Item', type: 'select', key: 'style.alignment', value: '',\n          options: [\n            { label: 'Left', value: 'left' },\n            { label: 'Center', value: 'center' },\n            { label: 'Right', value: 'right' }\n          ]\n        }\n      ]\n    },\n    'boolean': {\n      elementProps: [\n        { label: 'Place Holder', labelPath: 'PLACEHOLDER', placeholder: 'Enter Text', type: 'text', key: 'question' },\n        { label: 'Help Text', placeholder: 'Enter Text', type: 'text', key: 'helpText', isTranslate: true, labelPath: 'HELP_TEXT' },\n        { label: 'Element', labelPath: 'ELEMENT', type: 'number', key: 'questionNumber' },\n        { label: 'width', labelPath: 'WIDTH', type: 'fieldSize', key: 'width' },\n        { label: 'Hide In Pdf', labelPath: 'HIDEINPDF', type: 'checkbox', key: 'hideInPdf' },\n        { label: 'Label', placeholder: 'Field label', type: 'text', key: 'questionText', isTranslate: true, labelPath: 'LABEL' },\n        { label: 'Show Label In Pdf', labelPath: 'SHOW_LABEL_IN_PDF', type: 'checkbox', key: 'showLabelInPdf' },\n      ],\n      fieldProps: [\n        { label: '', labelPath: 'TOGGLEOPTIONS', type: 'toggleGroup', key: 'toggleOptions' },\n        { label: 'Value', labelPath: 'VALUE', placeholder: 'Enter Text', type: 'text', key: 'value' },\n        { label: 'Reference Field', labelPath: 'REFERENCEFIELD', placeholder: 'Reference Field', type: 'text', key: 'referenceField' },\n        this.subtext\n      ],\n      appearance: [\n        {\n          label: 'Select Font', labelPath: 'SELECTFONT', type: 'select', key: 'style.font', placeholder: 'Left',\n          options: [{ value: 'Helvetica Neue', label: 'Helvetica Neue', labelPath: 'FONT_FAMILY_HELVETICA_NEUE' },\n          { value: 'Arial', label: 'Arial', labelPath: 'FONT_FAMILY_ARIAL' },\n          { value: 'Times New Roman', label: 'Times New Roman', labelPath: 'FONT_FAMILY_TIMES_NEW_ROMAN' },\n          { value: 'Roboto', label: 'Roboto', labelPath: 'FONT_FAMILY_ROBOTO' }]\n        },\n        { label: 'Font Color', labelPath: 'color', type: 'color', key: 'style.color', value: '' },\n        {\n          label: 'Font Size', labelPath: 'FONTSIZE', type: 'number', key: 'style.fontSize', value: 12\n        },\n        {\n          label: 'Font Weight', labelPath: 'FONTWEIGHT', type: 'select', key: 'style.fontWeight', value: '',\n          options: [\n            { value: '400', label: '400-Normal', labelPath: 'FONTWEIGHT_NORMAL' },\n            { value: '500', label: '500-Medium', labelPath: 'FONTWEIGHT_MEDIUM' },\n            { value: '600', label: '600-Semi Bold', labelPath: 'FONTWEIGHT_SEMIBOLD' },\n            { value: '700', label: '700-Bold', labelPath: 'FONTWEIGHT_BOLD' }\n          ]\n        },\n        {\n          label: 'Font Style', labelPath: 'FONTSTYLE', type: 'select', key: 'style.fontStyle', value: '',\n          options: [\n            { label: 'Normal', labelPath: 'FONTSTYLE_NORMAL', value: 'normal' },\n            { label: 'Bold', labelPath: 'FONTSTYLE_BOLD', value: 'bold' },\n            { label: 'Italic', labelPath: 'FONTSTYLE_ITALIC', value: 'italic' }\n          ]\n        },\n        {\n          label: 'Margin', labelPath: 'MARGIN', type: 'marginPicker', key: 'style.margin',\n          placeholder: 'Left, Top, Right, Bottom', value: [0, 0, 0, 0]\n        },\n        {\n          label: 'Align Item', labelPath: 'ALIGNITEM', type: 'select', key: 'style.alignment', value: '',\n          options: [\n            { label: 'Left', labelPath: 'ALIGNITEM_LEFT', value: 'left' },\n            { label: 'Center', labelPath: 'ALIGNITEM_CENTER', value: 'center' },\n            { label: 'Right', labelPath: 'ALIGNITEM_RIGHT', value: 'right' }\n          ]\n        }\n      ]\n    },\n    'signaturePad': {\n      elementProps: [\n        { label: 'Place Holder', labelPath: 'PLACEHOLDER', placeholder: 'Enter Text', type: 'text', key: 'question' },\n        { label: 'Help Text', placeholder: 'Enter Text', type: 'text', key: 'helpText', isTranslate: true, labelPath: 'HELP_TEXT' },\n        { label: 'Element', labelPath: 'ELEMENT', type: 'number', key: 'questionNumber' },\n        { label: 'width', labelPath: 'WIDTH', type: 'fieldSize', key: 'width' },\n        { label: 'Hide In Pdf', labelPath: 'HIDEINPDF', type: 'checkbox', key: 'hideInPdf' },\n        { label: 'Label', placeholder: 'Field label', type: 'text', key: 'questionText', isTranslate: true, labelPath: 'LABEL' },\n        { label: 'Show Label In Pdf', labelPath: 'SHOW_LABEL_IN_PDF', type: 'checkbox', key: 'showLabelInPdf' },\n      ],\n      fieldProps: [\n        { label: '', labelPath: 'TOGGLEOPTIONS', type: 'toggleGroup', key: 'toggleOptions' },\n        { label: 'Value', labelPath: 'VALUE', placeholder: 'Enter Text', type: 'text', key: 'value' },\n        { label: 'Reference Field', labelPath: 'REFERENCEFIELD', placeholder: 'Reference Field', type: 'text', key: 'referenceField' },\n        this.subtext\n      ],\n      appearance: [\n        {\n          label: 'Select Font', labelPath: 'SELECTFONT', type: 'select', key: 'style.font', placeholder: 'Left',\n          options: [{ value: 'Helvetica Neue', label: 'Helvetica Neue', labelPath: 'FONT_FAMILY_HELVETICA_NEUE' },\n          { value: 'Arial', label: 'Arial', labelPath: 'FONT_FAMILY_ARIAL' },\n          { value: 'Times New Roman', label: 'Times New Roman', labelPath: 'FONT_FAMILY_TIMES_NEW_ROMAN' },\n          { value: 'Roboto', label: 'Roboto', labelPath: 'FONT_FAMILY_ROBOTO' }]\n        },\n        { label: 'Font Color', labelPath: 'color', type: 'color', key: 'style.color', value: '' },\n        {\n          label: 'Font Size', labelPath: 'FONTSIZE', type: 'number', key: 'style.fontSize', value: 12\n        },\n        {\n          label: 'Font Weight', labelPath: 'FONTWEIGHT', type: 'select', key: 'style.fontWeight', value: '',\n          options: [\n            { value: '400', label: '400-Normal', labelPath: 'FONTWEIGHT_NORMAL' },\n            { value: '500', label: '500-Medium', labelPath: 'FONTWEIGHT_MEDIUM' },\n            { value: '600', label: '600-Semi Bold', labelPath: 'FONTWEIGHT_SEMIBOLD' },\n            { value: '700', label: '700-Bold', labelPath: 'FONTWEIGHT_BOLD' }\n          ]\n        },\n        {\n          label: 'Font Style', labelPath: 'FONTSTYLE', type: 'select', key: 'style.fontStyle', value: '',\n          options: [\n            { label: 'Normal', labelPath: 'FONTSTYLE_NORMAL', value: 'normal' },\n            { label: 'Bold', labelPath: 'FONTSTYLE_BOLD', value: 'bold' },\n            { label: 'Italic', labelPath: 'FONTSTYLE_ITALIC', value: 'italic' }\n          ]\n        },\n        {\n          label: 'Margin', labelPath: 'MARGIN', type: 'marginPicker', key: 'style.margin',\n          placeholder: 'Left, Top, Right, Bottom', value: [0, 0, 0, 0]\n        },\n        {\n          label: 'Align Item', labelPath: 'ALIGNITEM', type: 'select', key: 'style.alignment', value: '',\n          options: [\n            { label: 'Left', labelPath: 'ALIGNITEM_LEFT', value: 'left' },\n            { label: 'Center', labelPath: 'ALIGNITEM_CENTER', value: 'center' },\n            { label: 'Right', labelPath: 'ALIGNITEM_RIGHT', value: 'right' }\n          ]\n        }\n      ]\n    },\n  };\n  errorMessage: string;\n\n  constructor(private dataService: DataService, private http: HttpClient, private pdfDesignerService: PdfDesignerService, private templateService: TemplateService) { }\n\n  handleTemplateSelection(event: any) {\n    this.pdfElements = event.elements;\n    this.selectedTemplate = event.selectedTemplate;\n  }\n\n  \n\n  ngOnInit() {\n    //AP-10MAR25 Subscribes to header selection changes and updates the selected element  \n    this.pdfDesignerService.selectHeaderSubject$.subscribe(header => {\n      if (header) {\n        if (!this.selectedElement) {\n          this.selectedElement = {};\n        }\n        this.selectedElement['type'] = header;\n        this.headerSelect = true;\n        this.pdf = this.pdfDesignerService.getBook();\n        this.bookId = Object.keys(this.pdf)[0]\n      }\n\n    });\n    this.pdfDesignerService.selectedElement$.subscribe(event => {\n      this.selectedElementIndex = event?.index;\n      this.headerSelect = false;\n      if (event?.index >= 0) {\n        const elements = this.pdfDesignerService.getElements();\n        this.selectedElement = elements[event.index];\n        if (this.selectedElement?.type === 'Table') {\n          this.selectColumn = this.pdfDesignerService.getSelectTableColumn() === undefined ? null : this.pdfDesignerService.getSelectTableColumn();\n        } else {\n          this.selectColumn = null\n        }\n        if (this.selectedElement && !this.selectedElement?.margin) {\n          this.selectedElement['margin'] = [0, 0, 0, 0];\n        }\n        if (event.pdfIndex >= 0) {\n          this.selectedElement = this.selectedElement.pdfReferenceQuestions[this.selectedElement?.pdfReference]?.[event.pdfIndex]\n        }\n      }\n      this.getProperties()\n      this.updatePdfpData()\n    });\n    this.updatePdfpData()\n  }\n  //AP-10MAR25 Updates the title using the form builder service  \n  updateTitle(event: any) {\n    this.pdfDesignerService.updateTitle(event);\n  }\n\n  updatePdfpData(): void {\n    // SKS28MAR25 Convert array to comma-separated string\n    this.fieldAsString = this.bookSubtext?.field?.join(', ') || '';\n  \n    // SKS20MAR25 Filter columns\n    const targetArray = this.getDataByPath('fieldsMeta') || [];\n    this.filteredColumns = targetArray.filter(\n      column => column.uniqueIdentifier !== this.selectColumn\n    );\n  }\n  updateField(value: string) {\n    this.bookSubtext.field = value.split(',').map(item => item.trim()); //SKS28MAR25 Convert string back to array\n  }\n\n  // SKS20MAR25 Method to handle checkbox changes\n  onCheckboxChange(targetArrayPath: any, targetArrayKey: any, key: any, apiName: string, isChecked: boolean) {\n    const targetArray = this.getDataByPath(targetArrayPath);\n    const foundItem = targetArray.find(item => item[targetArrayKey] === this.selectColumn);\n    foundItem[key] = foundItem[key] ? foundItem[key] : [];\n    if (isChecked) {\n      // Add apiName to selectedApiNames if not already present\n      if (!foundItem[key].includes(apiName)) {\n        foundItem[key].push(apiName);\n      }\n    } else {\n      // Remove apiName from selectedApiNames if present\n      const index = foundItem[key].indexOf(apiName);\n      if (index > -1) {\n        foundItem[key].splice(index, 1);\n      }\n    }\n  }\n  updateProperty(key: string, value: any) {\n    if (this.selectedElementIndex >= 0) {\n      this.setValueByPath(key, value);\n    }\n    if (key === 'question') {\n      if (!this.validateInput(value, key)) {\n        return;\n      }\n    }\n  }\n  // SKS21MAR25 radio button click handler\n  onRadioChange(targetArrayPath: any, targetArrayKey: any, key: any, value: any) {\n    if (this.selectedElement.type === 'Table') {\n      // this.updateValueByArrayPath(targetArray, targetArrayKey, this.selectColumn, key, value);\n      const targetArray = this.getDataByPath(targetArrayPath);\n      if (!Array.isArray(targetArray)) return;\n\n      // Find the object that matches selectColumn\n      let foundItem = targetArray.find(item => item[targetArrayKey] === this.selectColumn);\n\n      // If the item does not exist, create and add it\n      if (!foundItem) {\n        foundItem = { [targetArrayKey]: this.selectColumn }; // Ensure the key exists\n        targetArray.push(foundItem);\n      }\n\n      // Traverse and set the value\n      const keys = key.split('.');\n      let obj = foundItem;\n\n      for (let i = 0; i < keys.length - 1; i++) {\n        const key = keys[i];\n        if (!obj[key]) obj[key] = {}; // Initialize missing objects\n        obj = obj[key];\n      }\n\n      // Assign the value based on input type\n      const lastKey = keys[keys.length - 1];\n\n      obj[lastKey] = value;\n      this.updateElement(this.selectedElement)\n    } else {\n      this.setValueByPath(key, value); // Fallback for non-Table elements, if applicable\n    }\n  }\n  onRequiredChange(value: boolean) {\n    if (this.selectedElement) {\n      let label = this.selectedElement.label ? this.selectedElement.label.replace(/\\s*\\*+$/, '') : 'Label';\n\n      if (value) {\n        label = `${label} *`;\n      }\n\n      this.updateProperty('label', label);\n    }\n  }\n\n  // Toggle for Sub Questions (Each prop has its own state)\n  toggleSubQuestion(prop: any) {\n    prop.isExpanded = !prop.isExpanded;\n  }\n\n  // Separate Toggle for Style Section\n  isStyleExpanded = false;\n\n  toggleStyleSection() {\n    this.isStyleExpanded = !this.isStyleExpanded;\n  }\n\n  getProperties() {\n    if (!this.selectedElement) return null;\n\n    // AP-10MAR25 Retrieve the latest pdf data\n    this.pdf = this.pdfDesignerService.getBook();\n    if (this.selectedElement?.type === 'Table') {\n      if (this.selectColumn !== '' && this.selectColumn !== null) {\n        return this.elementProperties['TableColumn'];\n      }\n    }\n    return this.elementProperties[this.selectedElement?.type];\n  }\n  // AP-28MAR25 Add an option with a unique UUID\n  addOption(options: any[]) {\n    const unique_id = this.dataService.nxtId();\n    options.push({ id: unique_id, value: '' });\n  }\n\n  // AP-28MAR25 Function to remove an option based on its unique UUID\n  removeOption(options: any[], id: string) {\n    const index = options.findIndex(option => option.id === id);\n    if (index !== -1) {\n      options.splice(index, 1);\n    }\n  }\n\n  handleButtonClick() {\n    this.formButtonHandler.emit(this.pdfDesignerService.downloadElement());\n  }\n  // SKS13MAR25 active tab select\n  setActiveTab(tab: string): void {\n    this.activeTab = tab;\n  }\n  // SKS13MAR25 table property save\n  onSave(): void {\n  }\n  // SKS13MAR25 table property reset\n  onCancel(): void {\n  }\n\n  updateProperties(elementType: string): void {\n    // Reset alignment and styles if switching elements\n    this.selectedAlign = 'align-left';\n    this.selectedStyles = [];\n\n    // Fetch the properties of the selected element type\n\n    const properties = this.getProperties();\n    if (properties) {\n      // Make sure the properties are dynamically updated\n    }\n  }\n\n  onAlignSelect(value: string): void {\n    if (this.selectedElement) {\n      this.selectedElement.textAlign = value;\n    }\n  }\n\n  onStyleSelect(value: string): void {\n    if (!this.selectedElement) return;\n\n    // Initialize styles array if it doesn't exist\n    this.selectedElement.styles = this.selectedElement.styles || [];\n\n    // Ensure only one style is selected at a time\n    this.selectedElement.styles = [value];\n\n  }\n\n  isStyleActive(value: string): boolean {\n    return this.selectedElement?.styles?.includes(value) || false;\n  }\n  getValueByPath(path: string): any {\n    return path?.split('.').reduce((obj, key) => obj?.[key] ?? '', this.selectedElement);\n  }\n\n  onToggleChange(path: string, event: Event): void {\n    const checked = (event.target as HTMLInputElement).checked;\n    this.setValueByPath(path, checked);\n    this.updateElement(this.selectedElement)\n  }\n  validateInput(value: string, type: string): boolean {\n    if (type === 'placeholder') {\n      const regex = /^[a-zA-Z0-9\\s]*$/;\n      if (!regex.test(value)) {\n        this.errorMessage = 'Only letters and numbers are allowed';\n        return false;\n      }\n    }\n    this.errorMessage = '';\n    return true;\n  }\n  setValueByPath(path: string, value: any): void {\n    if (value === 'question') {\n      if (!this.validateInput(value, value)) {\n      }\n    }\n    const keys = path.split('.');\n    let obj = this.selectedElement;\n\n    keys.forEach((key, index) => {\n      if (!obj[key]) {\n        // Check if the next key is a number (array index)\n        const nextKey = keys[index + 1];\n        obj[key] = isNaN(Number(nextKey)) ? {} : [];\n      }\n      if (index === keys.length - 1) {\n        // Convert value to number for fontSize\n        if (key === 'fontSize') {\n          obj[key] = parseInt(value, 10) || 12; // Default to 12 if invalid\n        } else {\n          obj[key] = value; // Assign value to last key\n        }\n      } else {\n        obj = obj[key]; // Move deeper\n      }\n    });\n    this.pdfDesignerService.elementUpdate(this.selectedElement);\n  }\n\n  // SKS19MAR25 update element in servies\n  updateElement(element: any) {\n    this.pdfDesignerService.elementUpdate(element)\n    if (this.selectedElement?.type === 'Table' && this.selectColumn) {\n      this.pdfDesignerService.setSelectedTableElement(this.selectedElementIndex, { uniqueIdentifier: this.selectColumn || null });\n    }\n  }\n  // SKS19MAR25 get value from array\n  getValueByArrayPath(\n    targetArrayPath: any,\n    targetArrayKey: string,\n    selectColumn: string,\n    keyPath: string\n  ): any {\n    const targetArray = this.getDataByPath(targetArrayPath);\n    if (!Array.isArray(targetArray)) return null;\n  \n    const foundItem = targetArray.find(item => item[targetArrayKey] === selectColumn);\n  \n    return foundItem\n      ? keyPath.split('.').reduce((obj, key) => obj?.[key] ?? null, foundItem)\n      : null;\n  }\n\n  //SKS19MAR25 Function to update a value in an array dynamically\n  updateValueByArrayPath(targetArrayPath: any, targetArrayKey: string, selectColumn: string, keyPath: string, event: any): void {\n    const targetArray = this.getDataByPath(targetArrayPath);\n    if (!Array.isArray(targetArray)) return;\n\n    // Find the object that matches selectColumn\n    let foundItem = targetArray.find(item => item[targetArrayKey] === selectColumn);\n\n    // If the item does not exist, create and add it\n    if (!foundItem) {\n      foundItem = { [targetArrayKey]: selectColumn }; // Ensure the key exists\n      targetArray.push(foundItem);\n    }\n\n    // Traverse and set the value\n    const keys = keyPath.split('.');\n    let obj = foundItem;\n\n    for (let i = 0; i < keys.length - 1; i++) {\n      const key = keys[i];\n      if (!obj[key]) obj[key] = {}; // Initialize missing objects\n      obj = obj[key];\n    }\n\n    // Assign the value based on input type\n    const lastKey = keys[keys.length - 1];\n    if (keyPath !== 'style.width' && keyPath !== 'formula') {\n      const inputElement = event.target as HTMLInputElement;\n      obj[lastKey] = inputElement?.type === 'checkbox' ? inputElement.checked : inputElement.value;\n      if (keyPath === 'summaryColumn') {\n        if (obj['summaryRow'] === true) {\n          obj['summaryRow'] = false;\n        }\n      }\n      if (keyPath === 'summaryRow') {\n        //this.pdfDesignerService.setSummaryRowData(obj); \n        if (obj['summaryColumn'] === true) {\n          obj['summaryColumn'] = false;\n        }\n      }\n    } else if (keyPath !== 'formula') {\n      if (event === '*' || event === 'auto') {\n        obj[lastKey] = event\n      } else if (obj[lastKey] === '*' || obj[lastKey] === 'auto') {\n        // Default to 100 if switching from * or auto to custom\n        obj[lastKey] = 100\n      } else {\n        obj[lastKey] = event\n      }\n    } else {\n      obj[lastKey] = event\n    }\n    this.updateElement(this.selectedElement)\n  }\n  getDataByPath(path: string): any {\n    return path.split('.').reduce((obj, key) => obj?.[key], this.selectedElement);\n  }\n\n  // SKS25MAR25 image edit functions\n  flipHorizontal() {\n    this.transform = {\n      ...this.transform,\n      flipH: !this.transform.flipH\n    };\n  }\n\n  flipVertical() {\n    this.transform = {\n      ...this.transform,\n      flipV: !this.transform.flipV\n    };\n  }\n\n  resetImage() {\n    this.canvasRotation = 0;\n    this.cropper = undefined;\n    this.transform = {\n      translateUnit: 'px',\n      scale: 1,\n      rotate: 0,\n      flipH: false,\n      flipV: false,\n      translateH: 0,\n      translateV: 0\n    };\n  }\n\n  zoomOut() {\n    this.transform = {\n      ...this.transform,\n      scale: this.transform.scale! - .1\n    };\n  }\n\n  zoomIn() {\n    this.transform = {\n      ...this.transform,\n      scale: this.transform.scale! + .1\n    };\n  }\n  rotateLeft() {\n    this.loading = true;\n    setTimeout(() => { // Use timeout because rotating image is a heavy operation and will block the ui thread\n      this.canvasRotation--;\n      this.flipAfterRotate();\n    });\n  }\n\n  rotateRight() {\n    this.loading = true;\n    setTimeout(() => {\n      this.canvasRotation++;\n      this.flipAfterRotate();\n    });\n  }\n\n  moveLeft() {\n    this.transform = {\n      ...this.transform,\n      translateH: this.transform.translateH! - 1\n    };\n  }\n\n  moveRight() {\n    this.transform = {\n      ...this.transform,\n      translateH: this.transform.translateH! + 1\n    };\n  }\n\n  moveDown() {\n    this.transform = {\n      ...this.transform,\n      translateV: this.transform.translateV! + 1\n    };\n  }\n\n  moveUp() {\n    this.transform = {\n      ...this.transform,\n      translateV: this.transform.translateV! - 1\n    };\n  }\n  private flipAfterRotate() {\n    const flippedH = this.transform.flipH;\n    const flippedV = this.transform.flipV;\n    this.transform = {\n      ...this.transform,\n      flipH: flippedV,\n      flipV: flippedH,\n      translateH: 0,\n      translateV: 0\n    };\n  }\n  async imageCropped(event: any) {\n    try {\n      const base64 = await this.convertBlobToBase64(event.objectUrl);\n      this.selectedElement.imageData = base64;\n      await this.pdfDesignerService.elementUpdate(this.selectedElement);\n    } catch (error) {\n      console.error(\"Error in imageCropped:\", error);\n    }\n  }\n\n\n  cropperReady(sourceImageDimensions: Dimensions) {\n    this.loading = false;\n  }\n  // SKS25MAR25 blob to base 64 converter\n  convertBlobToBase64(objectUrl: string): Promise<string> {\n    return fetch(objectUrl)\n      .then(response => response.blob())\n      .then(blob => {\n        return new Promise((resolve, reject) => {\n          const reader = new FileReader();\n          reader.readAsDataURL(blob);\n          reader.onloadend = () => resolve(reader.result as string);\n          reader.onerror = error => reject(error);\n        });\n      });\n  }\n  // SKS28MAR25 qb pdf update in pdf element\n  childEventCapture(event: any) {\n    this.selectedElement.pdfReference = event?.value?.valueObj?.name\n    this.selectedElement.pdfReferenceQuestions = event?.value?.valueObj?.jsonBody\n    this.pdfDesignerService.elementUpdate(this.selectedElement);\n  }\n\n  // SKS28MAR25 pdf search dropdown emit\n  linkToggleDropdown(event: Event) {\n    event.stopPropagation();\n    this.isLinkDropdownOpen = !this.isLinkDropdownOpen;\n  }\n\n  // SKS28MAR25 pdf search dropdown close\n  @HostListener('document:click', ['$event'])\n  onClickOutside(event: Event) {\n    if (this.dropdown && !this.dropdown.nativeElement.contains(event.target)) {\n      this.isLinkDropdownOpen = false;\n    }\n  }\n  // AP-28MAR25 When drag starts, store the index\n  onDragStart(event: DragEvent, id: string) {\n    this.draggedId = id;\n    event.dataTransfer!.effectAllowed = \"move\";\n  }\n\n  // AP-28MAR25 Prevent default behavior to allow drop\n  onDragOver(event: DragEvent) {\n    event.preventDefault();\n  }\n\n  // AP-28MAR25 Swap the dragged item with the dropped position\n  onDrop(event: DragEvent, key: string) {\n    event.preventDefault();\n    const targetId = (event.target as HTMLElement).closest(\".option-items\")?.getAttribute(\"data-id\");\n\n    if (this.draggedId && targetId && this.draggedId !== targetId) {\n      const options = this.selectedElement[key];\n\n      [options[this.draggedId], options[targetId]] = [options[targetId], options[this.draggedId]];\n      // Find the indexes of the dragged and target options\n      const draggedIndex = options.findIndex(option => option.id === this.draggedId);\n      const targetIndex = options.findIndex(option => option.id === targetId);\n\n      // Swap the items\n      if (draggedIndex !== -1 && targetIndex !== -1) {\n        [options[draggedIndex], options[targetIndex]] = [options[targetIndex], options[draggedIndex]];\n      }\n    }\n\n    this.draggedId = null;\n  }\n  onWidthSelect(value: string) {\n    if (value === '*' || value === 'auto') {\n      this.setValueByPath('width', value);\n    } else if (this.selectedElement?.width === '*' || this.selectedElement?.width === 'auto') {\n      // Default to 100 if switching from * or auto to custom\n      this.setValueByPath('width', 100);\n    }\n  }\n}\n","<!--  - Field and Element Properties -->\n<div class=\"container\">\n  <div class=\"tabs\">\n    <div class=\"tab\" [ngClass]=\"{'active': activeTab === 'attributes'}\" (click)=\"setActiveTab('attributes')\">\n      {{ 'ATTRIBUTES' | nxtCustomTranslate : 'Attributes' }}\n    </div>\n    <div class=\"tab\" [ngClass]=\"{'active': activeTab === 'property'}\" (click)=\"setActiveTab('property')\">\n      {{ 'PROPERTY' | nxtCustomTranslate : 'Property' }}\n    </div>\n    <div class=\"tab\" [ngClass]=\"{'active': activeTab === 'appearance'}\" (click)=\"setActiveTab('appearance')\">\n      {{ 'APPEARANCE' | nxtCustomTranslate : 'Appearance' }}\n    </div>\n  </div>\n  <div class=\"tab-content\" *ngIf=\"activeTab === 'attributes'\">\n    <!-- Element Properrties -->\n    <!--  Select element type show -->\n    <div *ngIf=\"elementProperties[selectedElement?.type === 'Table' && selectColumn !== '' && selectColumn !== null ? 'TableColumn' : selectedElement?.type] as props\">\n      <!-- SKS25MAR25 this is for image edit -->\n      <div *ngIf=\"selectedElement?.type === 'image'\">\n        <div style=\"height: 200px;\">\n          <image-cropper *ngIf=\"selectedElement.imageData \" [imageBase64]=\"selectedElement.orgImageData\"\n            [disabled]=\"false\" [alignImage]=\"alignImage\" [roundCropper]=\"roundCropper\" [backgroundColor]=\"'white'\"\n            imageAltText=\"Alternative image text\" [allowMoveImage]=\"false\" [hideResizeSquares]=\"false\"\n            [canvasRotation]=\"canvasRotation\" [aspectRatio]=\"aspectRatio\" [containWithinAspectRatio]=\"false\"\n            [maintainAspectRatio]=\"false\" [cropperStaticWidth]=\"cropperStaticWidth\"\n            [cropperStaticHeight]=\"cropperStaticHeight\" [cropperMinWidth]=\"cropperMinWidth\"\n            [cropperMinHeight]=\"cropperMinHeight\" [cropperMaxWidth]=\"cropperMaxWidth\"\n            [cropperMaxHeight]=\"cropperMaxHeight\" [resetCropOnAspectRatioChange]='true' [(cropper)]=\"cropper\"\n            [(transform)]=\"transform\" [onlyScaleDown]=\"true\" output=\"blob\" format=\"png\"\n            (imageCropped)=\"imageCropped($event)\" (cropperReady)=\"cropperReady($event)\">\n          </image-cropper>\n        </div>\n        <div *ngIf=\"selectedElement.imageData \" style=\"display: flex; gap: 2px;\">\n          <div class=\"cursor-pointer logo-icon\" (click)=\"rotateLeft()\" title=\"Rotate Left\">⟲</div>\n          <div class=\"cursor-pointer logo-icon\" (click)=\"rotateRight()\" title=\"Rotate Right\">⟳</div>\n          <div class=\"cursor-pointer logo-icon\" (click)=\"zoomOut()\" title=\"Zoom Out\">-</div>\n          <div class=\"cursor-pointer logo-icon\" (click)=\"zoomIn()\" title=\"Zoom In\">+</div>\n          <div class=\"cursor-pointer logo-icon\" (click)=\"moveLeft()\" title=\"Move Left\">←</div>\n          <div class=\"cursor-pointer logo-icon\" (click)=\"moveRight()\" title=\"Move Right\">→</div>\n          <div class=\"cursor-pointer logo-icon\" (click)=\"moveUp()\" title=\"Move Up\">↑</div>\n          <div class=\"cursor-pointer logo-icon\" (click)=\"moveDown()\" title=\"Move Down\">↓</div>\n          <div class=\"cursor-pointer logo-icon\" (click)=\"flipHorizontal()\" [class.enabled]=\"transform.flipH\"\n            title=\"Flip Horizontally\">↔</div>\n          <div class=\"cursor-pointer logo-icon\" (click)=\"flipVertical()\" [class.enabled]=\"transform.flipV\"\n            title=\"Flip Vertically\">↕</div>\n          <div class=\"cursor-pointer logo-icon\" (click)=\"resetImage()\" title=\"Reset\">×</div>\n        </div>\n      </div>\n      <!-- SKS28MAR25 search pdf specific for pdf element -->\n      <div *ngIf=\"selectedElement?.type === 'Pdf'\">\n        <label class=\"text-sm\">{{ 'SEARCHPDF' | nxtCustomTranslate : 'Search Pdf' }}</label>\n        <div style=\"display: flex; gap: 2px; align-items: center; justify-content: center;\">\n          <nxt-search-box [question]=\"selectedElement\" [readOnly]=\"selectedElement.isReadOnly\" [apiMeta]=\"bookSubtext\"\n              [placeHolderText]=\"selectedElement.question || ''\"\n              [mode]=\"'edit'\"\n              (searchValueChange)=\"childEventCapture($event)\">\n          </nxt-search-box>\n          <div class=\"link-icon\">\n            <svg (click)=\"linkToggleDropdown($event)\" fill=\"#000000\" version=\"1.1\" id=\"Capa_1\"\n              xmlns=\"http://www.w3.org/2000/svg\" xmlns:xlink=\"http://www.w3.org/1999/xlink\" width=\"24px\" height=\"24px\"\n              viewBox=\"0 0 450 450\" xml:space=\"preserve\">\n              <g>\n                <g>\n                  <g>\n                    <path d=\"M318.15,230.195l77.934-77.937c31.894-31.892,31.894-83.782-0.004-115.674l-12.66-12.66\n          c-31.893-31.896-83.78-31.896-115.674-0.004l-77.937,77.934c-17.588,17.588-25.457,41.264-23.646,64.311\n          c-23.045-1.813-46.722,6.056-64.308,23.647L23.92,267.748c-31.894,31.889-31.894,83.779,0,115.674l12.664,12.662\n          c31.893,31.893,83.783,31.893,115.674,0l77.935-77.936c17.592-17.59,25.459-41.266,23.647-64.309\n          C276.884,255.654,300.56,247.783,318.15,230.195z M202.653,290.605l-77.936,77.938c-16.705,16.703-43.889,16.703-60.59,0\n          l-12.666-12.666c-16.705-16.701-16.703-43.885,0-60.594l77.936-77.932c14.14-14.141,35.779-16.306,52.226-6.516l-32.302,32.307\n          c-7.606,7.604-7.606,19.938,0,27.541c7.605,7.607,19.937,7.607,27.541,0l32.306-32.303\n          C218.959,254.828,216.795,276.469,202.653,290.605z M238.382,209.169l32.299-32.306c7.608-7.602,7.608-19.935,0-27.538\n          c-7.604-7.61-19.936-7.61-27.541-0.004l-32.303,32.303c-9.791-16.446-7.627-38.087,6.514-52.226l77.935-77.935\n          c16.707-16.707,43.89-16.707,60.594,0l12.664,12.664c16.705,16.705,16.705,43.886,0,60.591l-77.936,77.937\n          C276.468,216.797,254.828,218.959,238.382,209.169z\" />\n                    <path d=\"M343.466,261.465c-45.287,0-82,36.713-82,82s36.713,82,82,82c45.286,0,82-36.713,82-82S388.753,261.465,343.466,261.465z\n           M372.505,333.564l-56.046,56.104c-0.239,0.238-0.536,0.41-0.862,0.496l-22.315,5.85c-0.649,0.168-1.347-0.02-1.822-0.494\n          c-0.477-0.479-0.666-1.172-0.496-1.824l5.826-22.318c0.084-0.326,0.256-0.627,0.494-0.863l56.047-56.104\n          c0.742-0.742,1.945-0.744,2.688-0.002l4.548,4.541c0.739,0.74,0.741,1.943,0,2.688l-37.433,37.471l4.709,4.703l37.435-37.471\n          c0.739-0.742,1.94-0.742,2.682-0.002l4.55,4.541C373.25,331.617,373.25,332.822,372.505,333.564z M395.472,310.574l-17,17.018\n          c-0.739,0.744-1.942,0.744-2.685,0.002l-16.489-16.475c-0.744-0.74-0.744-1.943-0.002-2.688l17-17.02\n          c0.741-0.74,1.944-0.74,2.688-0.002l16.487,16.477C396.216,308.629,396.216,309.832,395.472,310.574z\" />\n                  </g>\n                </g>\n              </g>\n            </svg>\n            <div class=\"link-dropdown-menu\" *ngIf=\"isLinkDropdownOpen\" #dropdown>\n              <label>{{ 'ENDPOINT' | nxtCustomTranslate : 'Endpoint' }}:</label>\n              <input type=\"text\" [(ngModel)]=\"bookSubtext.endpoint\" />\n\n              <label>{{ 'VARIABLE' | nxtCustomTranslate : 'Variable' }}:</label>\n              <input type=\"text\" [(ngModel)]=\"bookSubtext.variable\" />\n\n              <label>{{ 'FIELD' | nxtCustomTranslate : 'Field' }}:</label>\n              <input type=\"text\" [ngModel]=\"fieldAsString\" (ngModelChange)=\"updateField($event)\" />\n\n              <label>{{ 'DEFAULTFIELD' | nxtCustomTranslate : 'Default Field' }}:</label>\n              <input type=\"text\" [(ngModel)]=\"bookSubtext.defaultField\" />\n            </div>\n          </div>\n        </div>\n      </div>\n      <ng-container *ngFor=\"let prop of elementProperties[selectedElement?.type === 'Table' && selectColumn !== '' && selectColumn !== null ? 'TableColumn' : selectedElement?.type].elementProps\">\n        <div class=\"form-group\">\n          <label *ngIf=\"prop.type !== 'checkbox' && prop.type !== 'subQuestion'\" class=\"text-sm\">{{  prop.labelPath | nxtCustomTranslate : prop.label \n            }}</label>\n\n          <!-- Text Input -->\n          <input *ngIf=\"prop.type === 'text'\" type=\"text\" [placeholder]=\"prop.placeholder\"\n            [value]=\"headerSelect ? pdf.title : (selectedElement?.type === 'Table' ? (prop.targetArray ? getValueByArrayPath(prop.targetArray, prop.targetArrayKey, selectColumn, prop.key ) : getValueByPath(prop.key) ) :  getValueByPath(prop.key))\"\n            (input)=\"headerSelect ? updateTitle($event.target.value) : (selectedElement?.type === 'Table' ? (prop.targetArray ? updateValueByArrayPath(prop.targetArray, prop.targetArrayKey, selectColumn, prop.key, $event) : setValueByPath(prop.key, $event.target.value) ) : setValueByPath(prop.key, $event.target.value))\"\n            [class.read-only]=\"selectedElement.readOnly\" [readonly]=\"selectedElement.readOnly\" />\n\n          <!-- questionNumber -->\n          <input *ngIf=\"prop.key === 'questionNumber'\" type=\"number\" [value]=\"selectedElement.questionNumber\"\n            (input)=\"setValueByPath('questionNumber', $event.target.value)\" />\n\n          <!-- file -->\n          <!-- Add this inside the elementProps loop where other inputs are rendered -->\n          <select *ngIf=\"prop.type === 'select' && prop.key === 'supportType'\" [value]=\"selectedElement[prop.key]\"\n            (change)=\"setValueByPath(prop.key, $event.target.value)\">\n            <option value=\"\"></option>\n            <option *ngFor=\"let option of prop.options\" [value]=\"option.value\"> {{ option.labelPath | nxtCustomTranslate : option.label  }} </option>\n          </select>\n\n          <div *ngIf=\"prop.type === 'checkbox'\">\n            <input type=\"checkbox\"\n              [checked]=\"selectedElement.type === 'Table' ? (prop.targetArray ? getValueByArrayPath(prop.targetArray, prop.targetArrayKey, selectColumn, prop.key ) : getValueByPath(prop.key) ):  getValueByPath(prop.key) \"\n              (change)=\"selectedElement.type === 'Table' ? (prop.targetArray ? updateValueByArrayPath(prop.targetArray, prop.targetArrayKey, selectColumn, prop.key, $event) : onToggleChange(prop.key, $event) ) : onToggleChange(prop.key, $event)\" />\n              <span class=\"toggle-label\" style=\"padding-left: 10px;\">{{  prop.labelPath | nxtCustomTranslate : prop.label  }}</span>\n\n          </div>\n          <!-- SKS20MAR25 Subquestion Type -->\n          <div *ngIf=\"prop.type === 'subQuestion'\">\n            <div style=\"display: flex; flex-direction: row; gap: 10px; align-items: center;\">\n              <div>{{  prop.labelPath | nxtCustomTranslate : prop.label  }}</div>\n              <input type=\"checkbox\"\n                [checked]=\"selectedElement.type === 'Table' ? (prop.targetArray ? getValueByArrayPath(prop.targetArray, prop.targetArrayKey, selectColumn, prop.key ) : getValueByPath(prop.key) ):  getValueByPath(prop.key) \"\n                (change)=\" selectedElement.type === 'Table' ? (prop.targetArray ? updateValueByArrayPath(prop.targetArray, prop.targetArrayKey, selectColumn, prop.key, $event) : onToggleChange(prop.key, $event) ) : onToggleChange(prop.key, $event)\" />\n            </div>\n            <!-- SKS20MAR25 Render subquestions when checkbox is checked -->\n            <div *ngIf=\"selectedElement.type === 'Table' ? (prop.targetArray ? getValueByArrayPath(prop.targetArray, prop.targetArrayKey, selectColumn, prop.key ) : getValueByPath(prop.key) ):  getValueByPath(prop.key)\">\n              <div *ngFor=\"let subProp of prop.subQuestion\"\n                style=\"background-color: #e7f2ff; padding: 8px; border-radius: 4px;\">\n                <div class=\"form-group\">\n                  <label>{{ subProp.labelPath | nxtCustomTranslate : subProp.label }}</label>\n                  <div *ngIf=\"subProp.type === 'array'\">\n                    <!-- Iterate over filtered columns to display checkboxes -->\n                    <div *ngFor=\"let column of filteredColumns\">\n                      <label>\n                        <input type=\"checkbox\"\n                          [checked]=\"subProp.operands ? subProp.operands.includes(column.apiName) : false\"\n                          (change)=\"onCheckboxChange(subProp.targetArray,subProp.targetArrayKey,subProp.key, column.apiName, $event.target.checked)\">\n                        {{ column.apiName }}\n                      </label>\n                    </div>\n                  </div>\n                  <!-- SKS21MAR25 New radio type -->\n                  <div *ngIf=\"subProp.type === 'radio'\">\n                    <div *ngFor=\"let column of filteredColumns\">\n                      <label>\n                        <input type=\"radio\" [name]=\"subProp.key\" [value]=\"column.apiName\"\n                          [checked]=\"getValueByArrayPath(subProp.targetArray, subProp.targetArrayKey, selectColumn, subProp.key) === column.apiName\"\n                          (change)=\"onRadioChange(subProp.targetArray, subProp.targetArrayKey, subProp.key, column.apiName)\">\n                        {{ column.apiName }}\n                      </label>\n                    </div>\n                  </div>\n                  <!-- SKS20MAR25 Add more subproperty types as needed -->\n                  <!-- Inside the subProp ngFor loop -->\n                  <input *ngIf=\"subProp.type === 'text'\" type=\"text\" [placeholder]=\"subProp.placeholder\"\n                    [value]=\"selectedElement.type === 'Table' ? (subProp.targetArray ? getValueByArrayPath(subProp.targetArray, subProp.targetArrayKey, selectColumn, subProp.key ) : getValueByPath(subProp.key) ) : getValueByPath(subProp.key)\"\n                    (input)=\"selectedElement.type === 'Table' ? (subProp.targetArray ? updateValueByArrayPath(subProp.targetArray, subProp.targetArrayKey, selectColumn, subProp.key, $event) : setValueByPath(subProp.key, $event.target.value) ) : setValueByPath(subProp.key, $event.target.value)\" />\n\n                  <input *ngIf=\"subProp.type === 'boolean'\" type=\"checkbox\" [checked]=\"getValueByPath(subProp.key)\"\n                    (change)=\"setValueByPath(subProp.key, $event.target.checked)\" />\n                  <select *ngIf=\"subProp.type === 'select'\" [value]=\"getValueByPath(subProp.key)\"\n                    (change)=\"setValueByPath(subProp.key, $event.target.value)\">\n                    <option *ngFor=\"let option of subProp.options\" [value]=\"option\">{{ option }}</option>\n                  </select>\n                  <input *ngIf=\"subProp.type === 'checkbox'\" type=\"checkbox\" [checked]=\"getValueByPath(subProp.key)\"\n                    (change)=\"setValueByPath(subProp.key, $event.target.checked)\" />\n                </div>\n              </div>\n            </div>\n          </div>\n\n          <!-- SKS20MAR25 Text Align Buttons -->\n          <div *ngIf=\"prop.type === 'align'\">\n            <button *ngFor=\"let option of prop.options\" (click)=\"onAlignSelect(option.value)\"\n              [class.active]=\"selectedElement?.textAlign === option.value\" [title]=\"option.value\">\n              <img [src]=\"'../assets/icons/' + option.icon + '.svg'\" [alt]=\"option.value\" class=\"icon-size\" />\n            </button>\n          </div>\n\n          <div *ngIf=\"prop.type === 'style'\">\n            <button *ngFor=\"let option of prop.options\" (click)=\"onStyleSelect(option.value)\"\n              [class.active]=\"isStyleActive(option.value)\" [title]=\"option.value\">\n              <img [src]=\"'../assets/icons/' + option.icon + '.svg'\" [alt]=\"option.value\" class=\"icon-size\" />\n            </button>\n          </div>\n\n          <!-- Field Size Controls -->\n          <!--  Change key width -->\n          <div *ngIf=\"prop.type === 'fieldSize'\" [ngClass]=\"{'flex-container': true, 'custom-active': selectedElement?.width !== '*' && selectedElement?.width !== 'auto'}\">\n            <select\n              class=\"size-select\"\n              [value]=\"selectedElement?.width === '*' ? 'Default' : selectedElement?.width === 'auto' ? 'Auto' : 'Custom'\"\n              (change)=\"selectedElement.type === 'Table' ? (prop.targetArray ? updateValueByArrayPath(prop.targetArray, prop.targetArrayKey, selectColumn, prop.key, $event.target.value === 'Default' ? '*' : $event.target.value === 'Auto' ? 'auto' : 'custom') : onWidthSelect( $event.target.value === 'Default' ? '*' : $event.target.value === 'Auto' ? 'auto' : 'custom' ) ) : onWidthSelect( $event.target.value === 'Default' ? '*' : $event.target.value === 'Auto' ? 'auto' : 'custom' )\">\n              <option value=\"Default\">{{ 'DEFAULT' | nxtCustomTranslate : 'Default' }}</option>\n              <option value=\"Auto\">{{ 'AUTO' | nxtCustomTranslate : 'Auto' }}</option>\n              <option value=\"Custom\">{{ 'CUSTOM' | nxtCustomTranslate : 'Custom' }}</option>\n            </select>\n          \n            <input\n              *ngIf=\"selectedElement.type === 'Table' ? (prop.targetArray ? getValueByArrayPath(prop.targetArray, prop.targetArrayKey, selectColumn, prop.key ) : getValueByPath(prop.key) ) : getValueByPath(prop.key) !== '*' && selectedElement.type === 'Table' ? (prop.targetArray ? getValueByArrayPath(prop.targetArray, prop.targetArrayKey, selectColumn, prop.key ) : getValueByPath(prop.key) ) : getValueByPath(prop.key) !== 'auto'\"\n              type=\"number\"\n              class=\"size-input\"\n              min=\"1\"\n              max=\"100\"\n              [value]=\"selectedElement.type === 'Table' ? (prop.targetArray ? getValueByArrayPath(prop.targetArray, prop.targetArrayKey, selectColumn, prop.key ) : getValueByPath(prop.key) ) : getValueByPath(prop.key)\" (input)=\"selectedElement.type === 'Table' ? (prop.targetArray ? updateValueByArrayPath(prop.targetArray, prop.targetArrayKey, selectColumn, prop.key, $event.target.valueAsNumber < 1 ? 1 :\n              $event.target.valueAsNumber > 100 ? 100 :\n              $event.target.valueAsNumber) : setValueByPath(prop.key, $event.target.valueAsNumber < 1 ? 1 :\n              $event.target.valueAsNumber > 100 ? 100 :\n              $event.target.valueAsNumber) ) : setValueByPath(prop.key, $event.target.valueAsNumber < 1 ? 1 :\n              $event.target.valueAsNumber > 100 ? 100 :\n              $event.target.valueAsNumber)\"\n             />\n          </div>                   \n\n          <!--  Line Properties -->\n          <!-- Padding Top -->\n          <div *ngIf=\"prop.key === 'paddingTop'\">\n            <input type=\"number\" [placeholder]=\"prop.placeholder\" [value]=\"selectedElement?.paddingTop\"\n              (input)=\"setValueByPath('paddingTop', $event.target.value)\" />\n          </div>\n\n          <!-- Padding Bottom -->\n          <div *ngIf=\"prop.key === 'paddingBottom'\">\n            <input type=\"number\" [placeholder]=\"prop.placeholder\" [value]=\"selectedElement?.paddingBottom\"\n              (input)=\"setValueByPath('paddingBottom', $event.target.value)\" />\n          </div>\n\n          <!-- Line Style -->\n          <div *ngIf=\"prop.key === 'lineStyle'\">\n            <select [value]=\"selectedElement?.lineStyle\" (change)=\"setValueByPath('lineStyle', $event.target.value)\">\n              <option *ngFor=\"let option of prop.options\" [value]=\"option\">{{ option }}</option>\n            </select>\n          </div>\n\n          <!-- Color -->\n          <div *ngIf=\"prop.key === 'color'\">\n            <input type=\"color\" [value]=\"selectedElement?.color\"\n              (input)=\"setValueByPath('color', $event.target.value)\" />\n          </div>\n          <!-- SKS16SEP25 formula  -->\n          <div *ngIf=\"prop.type === 'formula'\">\n            <app-formula-input\n              [attributes]=\"selectedElement['fieldsMeta']\"\n              [initialFormula]=\"selectedElement.type === 'Table' ? (prop.targetArray ? getValueByArrayPath(prop.targetArray, prop.targetArrayKey, selectColumn, prop.key ) : getValueByPath(prop.key) ) : getValueByPath(prop.key)\"\n              (formulaChange)=\"selectedElement.type === 'Table' ? (prop.targetArray ? updateValueByArrayPath(prop.targetArray, prop.targetArrayKey, selectColumn, prop.key, $event) : setValueByPath(prop.key, $event) ) : setValueByPath(prop.key, $event)\">\n            </app-formula-input>\n          </div>\n        </div>\n      </ng-container>\n    </div>\n  </div>\n  <div class=\"tab-content\" *ngIf=\"activeTab === 'property'\">\n    <!-- Field Elements Properties -->\n    <!--  Show elements ID  -->\n    <div *ngIf=\"elementProperties[selectedElement?.type === 'Table' && selectColumn !== '' && selectColumn !== null ? 'TableColumn' : selectedElement?.type]\">\n      <label>Id</label>\n      <div style=\"font-size: 13px; padding: 11px; border-radius: 5px; background-color: #f8f8f8; border: 1px solid #ddd;\">\n        {{ headerSelect ? bookId : selectedElement.id }}</div>\n      <ng-container *ngFor=\"let prop of elementProperties[selectedElement?.type === 'Table' && selectColumn !== '' && selectColumn !== null ? 'TableColumn' : selectedElement?.type].fieldProps\">\n        <div class=\"form-group\">\n          <label class=\"text-sm\">{{  prop.labelPath | nxtCustomTranslate : prop.label  }}</label>\n\n          <!-- SKS21MAR25 Toggle Group -->\n          <div *ngIf=\"prop.type === 'toggleGroup'\" class=\"toggle-group\">\n            <div class=\"toggle-item\">\n              <label class=\"toggle-label\">\n                <input type=\"checkbox\" />\n                Disabled\n              </label>\n            </div>\n          </div>\n\n          <!--  - handled options with UUID -->\n          <div *ngIf=\"prop.type === 'dropdown' || prop.type === 'checkbox' || prop.type === 'radio' && prop.key === 'options'\"\n            class=\"options-container\">\n\n            <div class=\"option-list\" (dragover)=\"onDragOver($event)\" (drop)=\"onDrop($event, prop.key)\">\n              <div *ngFor=\"let option of selectedElement[prop.key]\" class=\"option-items\" [attr.data-id]=\"option.id\"\n                draggable=\"true\" (dragstart)=\"onDragStart($event, option.id)\">\n\n                <input type=\"text\" [(ngModel)]=\"option.value\" placeholder=\"Option\" class=\"options\" />\n                <img src=\"../assets/icons/Trash.svg\" (click)=\"removeOption(selectedElement[prop.key], option.id)\">\n                <span class=\"drag-handle\">☰</span>\n              </div>\n            </div>\n\n            <button (click)=\"addOption(selectedElement[prop.key])\">\n              <div class=\"add-varient\">\n                <span class=\"text-lg\">+</span>\n                <span>Add</span>\n              </div>\n            </button>\n          </div>\n\n          <input *ngIf=\"prop.type === 'text'\" type=\"text\" [placeholder]=\"prop.placeholder\"\n            [value]=\"headerSelect ? pdf.title : (selectedElement?.type === 'Table' ? (prop.targetArray ? getValueByArrayPath(prop.targetArray, prop.targetArrayKey, selectColumn, prop.key ) : getValueByPath(prop.key) ) :  getValueByPath(prop.key))\"\n            (input)=\"headerSelect ? updateTitle($event.target.value) : (selectedElement?.type === 'Table' ? (prop.targetArray ? updateValueByArrayPath(prop.targetArray, prop.targetArrayKey, selectColumn, prop.key, $event) : setValueByPath(prop.key, $event.target.value) ) : setValueByPath(prop.key, $event.target.value))\"\n            [class.read-only]=\"selectedElement.readOnly\" [readonly]=\"selectedElement.readOnly\" />\n\n          <!-- Sub Questions Toggle -->\n          <div *ngIf=\"prop.type === 'subQuestion'\">\n            <div class=\"style-toggle-header\" (click)=\"toggleSubQuestion(prop)\">\n              <div class=\"head-elements\">Sub Text</div>\n              <img [src]=\"prop.isExpanded ? '../assets/icons/arrow-down.svg' : '../assets/icons/arrow-right.svg'\"\n                alt=\"Toggle Arrow\" class=\"arrow-icon\">\n            </div>\n\n            <!-- Render subquestions when arrow is down -->\n            <div *ngIf=\"prop.isExpanded\" style=\"border: 1px solid #ddd; padding: 8px; border-radius: 4px;\">\n              <div *ngFor=\"let subProp of prop.subQuestion\" class=\"sub-question-container\">\n                <div class=\"form-group\">\n                  <label>{{ subProp.labelPath | nxtCustomTranslate : subProp.label }}</label>\n\n                  <input *ngIf=\"subProp.type === 'text'\" type=\"text\" [placeholder]=\"subProp.placeholder\"\n                    [value]=\"selectedElement.type === 'Table' ? (subProp.targetArray ? getValueByArrayPath(subProp.targetArray, subProp.targetArrayKey, selectColumn, subProp.key ) : getValueByPath(subProp.key) ) : getValueByPath(subProp.key)\" \n                    (input)=\"selectedElement.type === 'Table' ? (subProp.targetArray ? updateValueByArrayPath(subProp.targetArray, subProp.targetArrayKey, selectColumn, subProp.key, $event) : setValueByPath(subProp.key, $event.target.value) ) : setValueByPath(subProp.key, $event.target.value)\" />\n                    \n                  <!--  Render input field only if subProp.type is 'array' -->\n                  <input *ngIf=\"subProp.type === 'array'\" type=\"text\" [placeholder]=\"subProp.placeholder\"\n                    [value]=\"selectedElement.type === 'Table' ? (subProp.targetArray ? getValueByArrayPath(subProp.targetArray, subProp.targetArrayKey, selectColumn, subProp.key ) : getValueByPath(subProp.key) ) : getValueByPath(subProp.key)\" (input)=\"selectedElement.type === 'Table' ? (subProp.targetArray ? updateValueByArrayPath(subProp.targetArray, subProp.targetArrayKey, selectColumn, subProp.key, $event) : setValueByPath(subProp.key, $event.target.value) ) : setValueByPath(subProp.key, $event.target.value)\" />\n                    <!-- <input type=\"text\" [ngModel]=\"fieldAsString\" (ngModelChange)=\"updateField($event)\" /> -->\n\n                  <input *ngIf=\"subProp.type === 'boolean'\" type=\"checkbox\" [checked]=\"selectedElement.type === 'Table' ? (subProp.targetArray ? getValueByArrayPath(subProp.targetArray, subProp.targetArrayKey, selectColumn, subProp.key ) : getValueByPath(subProp.key) ) : getValueByPath(subProp.key)\"\n                    (change)=\"selectedElement.type === 'Table' ? (subProp.targetArray ? updateValueByArrayPath(subProp.targetArray, subProp.targetArrayKey, selectColumn, subProp.key, $event) : setValueByPath(subProp.key, $event.target.checked) ) : setValueByPath(subProp.key, $event.target.checked)\" />\n                </div>\n              </div>\n            </div>\n          </div>\n\n          <div *ngIf=\"prop.type === 'checkbox'\">\n            <span class=\"toggle-label\" style=\"padding-right: 10px;\">{{  prop.labelPath | nxtCustomTranslate : prop.label  }}</span>\n            <input type=\"checkbox\"\n              [checked]=\"selectedElement.type === 'Table' ? (prop.targetArray ? getValueByArrayPath(prop.targetArray, prop.targetArrayKey, selectColumn, prop.key ) : getValueByPath(prop.key) ):  getValueByPath(prop.key) \"\n              (change)=\" selectedElement.type === 'Table' ? (prop.targetArray ? updateValueByArrayPath(prop.targetArray, prop.targetArrayKey, selectColumn, prop.key, $event) : onToggleChange(prop.key, $event) ) : onToggleChange(prop.key, $event)\" />\n\n          </div>\n          <!-- SKS16SEP25 formula  -->\n          <div *ngIf=\"prop.type === 'formula'\">\n            <app-formula-input\n              [attributes]=\"selectedElement['fieldsMeta']\"\n              [initialFormula]=\"selectedElement.type === 'Table' ? (prop.targetArray ? getValueByArrayPath(prop.targetArray, prop.targetArrayKey, selectColumn, prop.key ) : getValueByPath(prop.key) ) : getValueByPath(prop.key)\"\n              (formulaChange)=\"selectedElement.type === 'Table' ? (prop.targetArray ? updateValueByArrayPath(prop.targetArray, prop.targetArrayKey, selectColumn, prop.key, $event) : setValueByPath(prop.key, $event) ) : setValueByPath(prop.key, $event)\">\n            </app-formula-input>\n          </div>\n        </div>\n      </ng-container>\n    </div>\n  </div>\n  <div class=\"tab-content\" *ngIf=\"activeTab === 'appearance'\">\n    <div *ngIf=\"elementProperties[selectedElement?.type === 'Table' && selectColumn !== '' && selectColumn !== null ? 'TableColumn' : selectedElement?.type]\">\n      <ng-container *ngFor=\"let prop of elementProperties[selectedElement?.type === 'Table' && selectColumn !== '' && selectColumn !== null ? 'TableColumn' : selectedElement?.type].appearance\">\n        <div class=\"form-group\">\n          <label class=\"text-sm\">{{  prop.labelPath | nxtCustomTranslate : prop.label  }}</label>\n          <div class=\"flex-container\">\n            <!-- Type select -->\n            <select *ngIf=\"prop.type === 'select'\" class=\"select-container\" [value]=\"selectedElement.type === 'Table' ? (prop.targetArray ? getValueByArrayPath(prop.targetArray, prop.targetArrayKey, selectColumn, prop.key ) : getValueByPath(prop.key) ) : getValueByPath(prop.key)\"\n              (change)=\"selectedElement.type === 'Table' ? (prop.targetArray ? updateValueByArrayPath(prop.targetArray, prop.targetArrayKey, selectColumn, prop.key, $event) : setValueByPath(prop.key, $event.target.value) ) : setValueByPath(prop.key, $event.target.value)\">\n              <option *ngFor=\"let option of prop.options\" [value]=\"option.value\">\n                {{ option.labelPath | nxtCustomTranslate : option.label  }}\n              </option>\n            </select>\n            <!-- Input Box -->\n            <input *ngIf=\"prop.type === 'text'\" type=\"text\" [placeholder]=\"prop.placeholder\"\n              [value]=\"selectedElement.type === 'Table' ? (prop.targetArray ? getValueByArrayPath(prop.targetArray, prop.targetArrayKey, selectColumn, prop.key ) : getValueByPath(prop.key) ) : getValueByPath(prop.key)\" (input)=\"setValueByPath(prop.key, $event.target.value)\" />\n\n            <!-- Type number -->\n            <div *ngIf=\"prop.type === 'number'\">\n              <input type=\"number\" min=\"1\" max=\"100\" step=\"1\"\n                    [value]=\"selectedElement.type === 'Table' ? (prop.targetArray ? getValueByArrayPath(prop.targetArray, prop.targetArrayKey, selectColumn, prop.key ) : getValueByPath(prop.key) ) : getValueByPath(prop.key)\"\n                    (change)=\"selectedElement.type === 'Table' ? (prop.targetArray ? updateValueByArrayPath(prop.targetArray, prop.targetArrayKey, selectColumn, prop.key, $event) : setValueByPath(prop.key, $event.target.value) ) : setValueByPath(prop.key, $event.target.value)\" />\n            </div>\n\n            <!-- Color Picker -->\n            <div *ngIf=\"prop.type === 'color'\" class=\"color-selector\">\n              <input type=\"color\" [value]=\"selectedElement.type === 'Table' ? (prop.targetArray ? getValueByArrayPath(prop.targetArray, prop.targetArrayKey, selectColumn, prop.key ) : getValueByPath(prop.key) ) : getValueByPath(prop.key)\"\n                (change)=\"selectedElement.type === 'Table' ? (prop.targetArray ? updateValueByArrayPath(prop.targetArray, prop.targetArrayKey, selectColumn, prop.key, $event) : setValueByPath(prop.key, $event.target.value) ) : setValueByPath(prop.key, $event.target.value)\">\n            </div>\n\n            <!-- HEX Input Box -->\n            <div *ngIf=\"prop.type === 'color'\" class=\"hex-input-container\">\n              <span>HEX Code</span>\n              <input type=\"text\" [value]=\"selectedElement.type === 'Table' ? (prop.targetArray ? getValueByArrayPath(prop.targetArray, prop.targetArrayKey, selectColumn, prop.key ) : getValueByPath(prop.key) ) : getValueByPath(prop.key)\"\n                (change)=\"selectedElement.type === 'Table' ? (prop.targetArray ? updateValueByArrayPath(prop.targetArray, prop.targetArrayKey, selectColumn, prop.key, $event) : setValueByPath(prop.key, $event.target.value) ) : setValueByPath(prop.key, $event.target.value)\" />\n            </div>\n             <!-- margin: [0, 10, 0, 0] // [ left, top, right, bottom ] -->\n            <div *ngIf=\"prop.type === 'marginPicker'\">\n              <div class=\"margin-inputs\">\n                <div>\n                  <label>Right</label>\n                  <input type=\"number\" [value]=\"(selectedElement.type === 'Table' ? (prop.targetArray ? getValueByArrayPath(prop.targetArray, prop.targetArrayKey, selectColumn, prop.key )?.[0] : getValueByPath(prop.key)?.[0] ) : getValueByPath(prop.key)?.[0])\"\n                        (change)=\"selectedElement.type === 'Table' ? (prop.targetArray ? updateValueByArrayPath(prop.targetArray, prop.targetArrayKey, selectColumn, prop.key+'.0', $event) : setValueByPath(prop.key+'.0', $event.target.value) ) : setValueByPath(prop.key+'.0', $event.target.value)\" />\n                </div>\n                <div>\n                  <label>Top</label>\n                  <input type=\"number\" [value]=\"(selectedElement.type === 'Table' ? (prop.targetArray ? getValueByArrayPath(prop.targetArray, prop.targetArrayKey, selectColumn, prop.key )?.[1] : getValueByPath(prop.key)?.[1] ) : getValueByPath(prop.key)?.[1])\"\n                        (change)=\"selectedElement.type === 'Table' ? (prop.targetArray ? updateValueByArrayPath(prop.targetArray, prop.targetArrayKey, selectColumn, prop.key+'.1', $event) : setValueByPath(prop.key+'.1', $event.target.value) ) : setValueByPath(prop.key+'.1', $event.target.value)\" />\n                </div>\n                <div>\n                  <label>Left</label>\n                  <input type=\"number\" [value]=\"(selectedElement.type === 'Table' ? (prop.targetArray ? getValueByArrayPath(prop.targetArray, prop.targetArrayKey, selectColumn, prop.key )?.[2] : getValueByPath(prop.key)?.[2] ) : getValueByPath(prop.key)?.[2])\"\n                        (change)=\"selectedElement.type === 'Table' ? (prop.targetArray ? updateValueByArrayPath(prop.targetArray, prop.targetArrayKey, selectColumn, prop.key+'.2', $event) : setValueByPath(prop.key+'.2', $event.target.value) ) : setValueByPath(prop.key+'.2', $event.target.value)\" />\n                </div>\n                <div>\n                  <label>Bottom</label>\n                  <input type=\"number\" [value]=\"(selectedElement.type === 'Table' ? (prop.targetArray ? getValueByArrayPath(prop.targetArray, prop.targetArrayKey, selectColumn, prop.key )?.[3] : getValueByPath(prop.key)?.[3] ) : getValueByPath(prop.key)?.[3])\"\n                        (change)=\"selectedElement.type === 'Table' ? (prop.targetArray ? updateValueByArrayPath(prop.targetArray, prop.targetArrayKey, selectColumn, prop.key+'.3', $event) : setValueByPath(prop.key+'.3', $event.target.value) ) : setValueByPath(prop.key+'.3', $event.target.value)\" />\n                </div>\n              </div>\n            </div> \n            <!-- SKS16SEP25 formula  -->\n            <div *ngIf=\"prop.type === 'formula'\">\n              <app-formula-input\n                [attributes]=\"selectedElement['fieldsMeta']\"\n                [initialFormula]=\"selectedElement.type === 'Table' ? (prop.targetArray ? getValueByArrayPath(prop.targetArray, prop.targetArrayKey, selectColumn, prop.key ) : getValueByPath(prop.key) ) : getValueByPath(prop.key)\"\n                (formulaChange)=\"selectedElement.type === 'Table' ? (prop.targetArray ? updateValueByArrayPath(prop.targetArray, prop.targetArrayKey, selectColumn, prop.key, $event) : setValueByPath(prop.key, $event) ) : setValueByPath(prop.key, $event)\">\n              </app-formula-input>\n            </div>\n          </div>     \n        </div>\n      </ng-container>\n    </div>\n  </div>\n\n  <!-- Default Save Button -->\n  <div class=\"button-container\" *ngIf=\"!templateSelected\">\n    <button class=\"save-btn\" (click)=\"handleButtonClick()\">Save</button>\n    <button class=\"cancel-btn\" (click)=\"onCancel()\">Cancel</button>\n  </div>\n</div>\n","import { Component, ElementRef, EventEmitter, Input, Output, QueryList, SimpleChanges, ViewChildren } from '@angular/core';\nimport { VERSION } from '../../../../environments/version';\nimport { PdfPropertiesComponent } from '../pdf-properties/pdf-properties.component';\nimport { CommonModule } from '@angular/common';\nimport { MatTooltipModule } from '@angular/material/tooltip';\nimport { FormsModule } from '@angular/forms';\nimport { NxtDatatable } from '../../../components/datatable/datatable.component';\nimport { NxtInput } from '../../../components/nxt-input/nxt-input.component';\nimport { ImageTransform } from '../../../components/image-cropper/interfaces/image-transform.interface';\nimport { Dimensions } from '../../../components/image-cropper/interfaces/dimensions.interface';\nimport { CropperPosition } from '../../../components/image-cropper/interfaces/cropper-position.interface';\nimport { ImageCropperComponent } from '../../../components/image-cropper/component/image-cropper.component';\nimport _ from 'lodash'; // Ensure lodash is installed\nimport { PdfDesignerService } from '../../../services/pdf-designer/pdf-designer.service';\nimport { NxtCustomTranslatePipe } from '../../../pipe/custom-translate.pipe';\nimport { nxtDropdown } from '../../../components/nxt-dropdown/nxt-dropdown.component';\nimport { CountryService } from '../../../services/country/country.service';\nimport { ChangeService } from '../../../services/change/change.service';\nimport { DataService } from '../../../services/data/data.service';\n\n@Component({\n  selector: 'app-pdf-designer',\n  standalone: true,\n  imports: [nxtDropdown, CommonModule, ImageCropperComponent, PdfPropertiesComponent, MatTooltipModule, FormsModule, NxtDatatable, NxtInput, NxtCustomTranslatePipe],\n  templateUrl: './pdf-designer.component.html',\n  styleUrls: ['./pdf-designer.component.css']\n})\nexport class PdfDesignerComponent {\n  //@Output() elementButtonClicked = new EventEmitter<string>();\n  @ViewChildren('autoTextarea') textareas!: QueryList<ElementRef>;\n  @Input() pdfJSON: any;\n  @Input() bookletId: any;\n  @Input() isPreview: boolean = false;\n  @Input() from: any;\n  @Input() dataBind: any;\n  @Input() isPropertyHide: boolean = false\n\n  @Output() pdfSaveHandlerEmit = new EventEmitter<any>();\n  @Output() templateMode = new EventEmitter<boolean>();\n  @Output() pdfPreviewEmit = new EventEmitter<any>();\n  field: any;\n  pdfElements: any[] = [];\n  elements: any[] = [];\n  bookId: string;\n  sections = {\n    basic: true,\n    advanced: true\n  };\n  elementsList: any[] = [];\n  elementDisabledArray: any;\n  version = VERSION.version;\n  pdf: any;\n  selectedElement: any = null;\n  isSelectTablePopup: boolean = false;\n  currentType: string;\n  addTable: boolean = true;\n  dots = Array(6);\n  draggedIndex: number | null = null;\n  templateSelected = false;\n  isImageEdit: boolean = false;\n  selectedImageElement: any;\n  transform: ImageTransform = {\n    translateUnit: 'px',\n    scale: 1,\n    rotate: 0,\n    flipH: false,\n    flipV: false,\n    translateH: 0,\n    translateV: 0\n  };\n  loading = false;\n  canvasRotation = 0;\n  cropper?: CropperPosition;\n  cropperMaxHeight = 0;\n  cropperMaxWidth = 0;\n  cropperMinHeight = 0;\n  cropperMinWidth = 0;\n  cropperStaticWidth = 0;\n  cropperStaticHeight = 0;\n  aspectRatio = 4 / 3;\n  roundCropper = false;\n  isImageHover = false;\n  alignImage = 'center' as const;\n  showTextSettings = false;\n  selectedColumn: any = null;\n  defaultColors: string[] = ['#3BA9FF', '#4CAF50', '#FFC107', '#F44336', '#9C27B0', '#2F3A48'];\n  selectedColor: string = this.defaultColors[0];\n  currencyOptions: any\n  selectedCurrency: any = 'INR'\n  private drawing = new Map<string, boolean>(); // SKS21NOV25 track per-field drawing state\n  private ctxMap = new Map<string, CanvasRenderingContext2D>();\n  private ratioMap = new Map<string, number>();\n\n  //subscription: any;\n  constructor( private dataService: DataService, private changeService: ChangeService, private countryService: CountryService, private pdfDesignerService: PdfDesignerService) {\n  }\n  //AP-14JUN25 - Called after view initialization to auto-resize all textareas\n  ngAfterViewInit() {\n    this.resizeAllTextareas();\n    if(this.isPreview && this.dataBind && Object.keys(this.dataBind).length > 0 ){\n      setTimeout(() => {\n        this.pdfElements.forEach(ques => {\n          ques['subText'] = typeof ques?.subText === 'object' ? ques?.subText : ques?.subText ? JSON.parse(ques['subText']) : {};\n          let apiObj: any = ques.subText\n          this.handleQues(ques);\n          let value: any;\n          value = {}\n          value['isObject'] =  apiObj?.isObject\n          value['field'] = apiObj?.defaultField || apiObj?.field?.[0] || apiObj?.field || null\n          if (ques.type === 'Image') {\n            value['valueObj'] = ques.orgImageData;\n          } else if (ques.type === 'Boolean') {\n            if (ques.value !== undefined) {\n              value['valueObj'] = ques.value !== false;\n              value['valueObj'] = typeof ques.value === 'string' ? ques.value === 'true' : ques.value === true  ;\n            } else if (ques.value !== undefined) {\n              value['valueObj'] = typeof ques.value === 'string' ? ques.value === 'true' : ques.value === true  ;\n            } else {\n              value['valueObj'] = false;\n            }\n          } else if (ques.type === 'Table') {\n            value['valueObj'] = ques.value || null;\n          } else {\n            value['valueObj'] = ques.value || null;\n          } \n          value['referenceField'] = ques.referenceField || null\n          value['fromQuestionId'] = ques.id || null\n          if(!ques.isHidden && !ques?.subText?.isDependentField){\n            this.onQuestionChange(value, ques);\n          }\n        });\n      });\n    }\n  }\n  async handleQues(ques: any) {\n    if (this.dataBind && Object.keys(this.dataBind).length > 0) {\n      let value: any = undefined\n      if(Array.isArray(ques.referenceField)){\n        value = ''\n        for(const rf of ques.referenceField){\n          value += this.dataService.getValue(this.dataBind,rf ) + ' '\n        }\n      } else {\n        value = this.dataService.getValue(this.dataBind,ques.referenceField )\n      }\n      if (value) {\n        if (ques.type === 'Dropdown' || ques.type === 'MultiSelect' || ques.type === 'Radio') {\n          ques.value = value || ques.value;\n          ques.selectedValue = value || ques.value;\n        } else if (ques.type === 'Date' || ques.type == 'DateTime') {\n          ques.value = new Date(value?.toString())  || ques.value;\n        } else if (ques.type === 'Location') {\n          ques.value = value['address'] ? value['address'] : value || ques.value;\n        } else if (ques.type === \"Boolean\") {\n          ques.value = typeof value !== 'undefined' ? value === true || value === 'true' : typeof ques.value !== 'undefined' ? ques.value === true || ques.value === 'true' : false;\n        } else if (ques.type === \"image\") {\n          ques.imageData = value || ques.imageData;\n        } else if (ques.type === \"Table\") {\n          let summaryValue: any = {}\n          if(ques.summaryValuesReferenceField){\n            if(Array.isArray(ques.summaryValuesReferenceField)){\n              for(const smrf of ques.summaryValuesReferenceField){\n                summaryValue[smrf] = this.dataService.getValue(this.dataBind,smrf )\n              }\n            } else {\n              summaryValue ={[ques.summaryValuesReferenceField]: this.dataService.getValue(this.dataBind,ques.summaryValuesReferenceField ) }\n            }\n          }\n          ques.value = value && Object.keys(summaryValue).length > 0 ? {data: value, summaryValue: summaryValue} : value ? {data: value} : ques.value\n        } else {\n          ques.value = value || ques.value;\n        }\n      } else if (ques.type === 'Pdf' && ques.pdfReferenceQuestions) {\n        // HA 24JAN24 Fetching from QB reference\n        ques.pdfReferenceQuestions = typeof ques.pdfReferenceQuestions === 'object' ? ques.pdfReferenceQuestions : JSON.parse(ques.pdfReferenceQuestions)\n        ques.pdfReferenceQuestions?.[ques.pdfReference]?.forEach(inQues => {\n          this.handleQues(inQues);\n        });\n      } else{\n        if(ques.type === 'Boolean'){\n          ques.value = typeof ques.value !== 'undefined' ? ques.value === true || ques.value === 'true' : false \n        } else {\n          ques.value = ques.value || null  // SKS23JUN25 defaultly set value false\n        }\n      }\n    } else {\n      const question = {};\n      question['id'] = ques.id;\n      if (ques.type === 'Location') {\n        question['value'] = ques.value ? ques.value : ques.selectedValue;\n      } else if (ques.type == 'File') {\n        question['value'] = ques.value || [];\n      }  else if(ques.type === \"Boolean\") { \n        question['value'] = typeof ques.value !== 'undefined' ? ques.value === true || ques.value === 'true' : typeof ques.value !== 'undefined' ?( (ques.value === true && ques.value !== \"\" && ques.value !== \"false\") || ques.value === 'true') : false;\n      } else {\n        question['value'] = ques.value\n      }\n      question['type'] = ques.type;\n      question['questionNumber'] = ques.questionNumber;\n      question['referenceField'] = ques?.referenceField;\n      question['selectedValue'] = ques?.selectedValue; \n    }\n  }\n  //AP-14JUN25 - Calculates contrast text color (black or white) based on background color\n  getContrastColor(bgColor: string = '#000000'): string {\n    // Convert hex to RGB\n    const color = bgColor.replace('#', '');\n    const r = parseInt(color.substring(0, 2), 16);\n    const g = parseInt(color.substring(2, 4), 16);\n    const b = parseInt(color.substring(4, 6), 16);\n    const brightness = (r * 299 + g * 587 + b * 114) / 1000;\n    return brightness > 128 ? '#000000' : '#ffffff';\n  }\n\n  //AP-14JUN25 - Automatically resizes all textareas based on their content\n  resizeAllTextareas(): void {\n    this.textareas.forEach((textareaRef: ElementRef) => {\n      const textarea = textareaRef.nativeElement as HTMLTextAreaElement;\n      textarea.style.height = 'auto';\n      textarea.style.height = textarea.scrollHeight + 'px';\n    });\n  }\n\n  ngOnInit() {\n    this.elementsList = [\n      { \"type\": \"text\", \"img\": \"TextArea\", \"label\": \"Text\" },\n      { \"type\": \"currency\", \"img\": \"Text\", \"label\": \"Currency\" },\n      { \"type\": \"boolean\", \"img\": \"Text\", \"label\": \"Boolean\" },\n      { \"type\": \"date\", \"img\": \"Date\", \"label\": \"Date\" },\n      { \"type\": \"image\", \"img\": \"Image\", \"label\": \"Image\" },\n      { \"type\": \"Line\", \"img\": \"line\", \"label\": \"Line\" },\n      { \"type\": \"Space\", \"img\": \"space\", \"label\": \"Space\" },\n      { \"type\": \"Table\", \"img\": \"Table\", \"label\": \"Table\" },\n      { \"type\": \"Pdf\", \"img\": \"Search\", \"label\": \"Pdf\" },\n      { \"type\": \"signaturePad\", \"img\": \"space\", \"label\": \"Signature Pad\" },\n    ];\n    this.elementDisabledArray = {\n      Table: [\n        'Pdf', 'Calendar', \"Boolean\", 'List', 'Table', 'Checkbox', 'Radio',\n        'Dropdown', 'MultiSelect', 'RichTextArea', 'Number', 'Label', 'image',\n        'Email', 'Date', 'Time', 'DateTime', 'Line', 'Space'\n      ]\n    };\n    if (!this.isPreview) {\n      this.pdfDesignerService.pdfElements$.subscribe(elements => {\n        setTimeout(() => {\n          this.pdfElements = elements.map(field => ({ ...field }));\n        }, 0);\n      });\n    }\n    if (this.pdfJSON && Object.keys(this.pdfJSON).length && (this.pdfJSON !== '')) {\n      this.initializeForm();\n    } else {\n      this.pdfDesignerService.newBook()\n    }\n    this.pdf = this.pdfDesignerService.getBook();\n    this.pdfDesignerService.selectedElement$.subscribe(event => {\n      const elements = this.pdfDesignerService.getElements();\n      if (event?.index >= 0) {\n        this.selectedElement = elements[event.index];\n        if (event.pdfIndex >= 0) {\n          this.selectedElement = this.selectedElement.pdfReferenceQuestions[this.selectedElement?.pdfReference]?.[event.pdfIndex]\n        }\n      }\n    });\n    this.pdfDesignerService.addElementWithId();\n    this.currencyOptions = this.countryService.getCountryData(['currencies'])\n  }\n\n  isSectionOpen(section: string): boolean {\n    return this.sections[section];\n  }\n\n  ngOnChanges(changes: SimpleChanges) {\n    if (changes['pdfJSON'] && changes['pdfJSON'].currentValue) {\n      if (this.pdfJSON && Object.keys(this.pdfJSON).length && (this.pdfJSON !== '')) {\n        this.initializeForm();\n      } else {\n        this.pdfDesignerService.newBook()\n      }\n    }\n  }\n\n  onTemplateSelected(event: { selectedTemplate: any; elements: any[] }) {\n    this.pdfDesignerService.clearElements();\n    event.elements.forEach(el => this.pdfDesignerService.addElement(el));\n\n    // Emit template mode to parent\n    this.templateMode.emit(true);\n  }\n\n  private initializeForm() {\n    if (!this.pdfJSON || !this.pdfJSON) {\n      console.warn(\"Invalid pdfJSON structure\");\n      return;\n    }\n    this.pdfElements = []\n    this.pdfDesignerService.clearElements();\n    this.pdfDesignerService.intializeBook(this.pdfJSON);\n    this.pdfElements = this.pdfDesignerService.getElements();\n  }\n\n  selectElement(index: number, pdfIndex?: number) {\n    this.selectedFieldIndex = index;\n    this.pdfDesignerService.setSelectedElement(index, pdfIndex);\n    this.pdf = this.pdfDesignerService.getBook();\n  }\n\n  selectedFieldIndex: number | null = null;\n  selectHeading(event: any) {\n    this.pdfDesignerService.selectHeading(event);\n    this.pdf = this.pdfDesignerService.getBook();\n  }\n  // AP-17APR25 generateUiId \n  generateUiId() {\n    return this.pdfDesignerService.addElementWithId();\n  }\n\n  addElement(type: string): void {\n    const unique_id = this.generateUiId();\n    this.currentType = type\n    if (this.selectedElement?.type === 'Table' && this.addTable) {\n      this.isSelectTablePopup = true\n    } else {\n      const newElement = {\n        id: unique_id,\n        type,\n        margin: [0, 0, 0, 0],\n        fontSize: 12,\n        fontWeight: '400',\n        fontStyle: [],\n        alignItems: '',\n        nxtType: type,\n        referenceField: null,\n        question: null,\n        questionNumber: this.pdfDesignerService.getElements().length + 1,\n        fieldsMeta: [],\n        pdfReference: null,\n        pdfReferenceQuestions: null,\n        style: {\n          bold: false,\n          italic: false,\n          alignment: 'left',\n          fontSize: 12,\n          margin: [0, 0, 0, 0],\n          color: '#000000',\n        },\n        imageData: null,\n        imageSize: type === 'image' ? { width: 100, height: 100 } : null,\n        tableConfig: type === 'Table' ? {\n          isNosIndicator: false,\n          serialNumberColumn: true,\n          addInlineRecord: true,\n          isPagination: false,\n          actionButton: false,\n          isDeleteRow: true,\n          isEditRow: false,\n          searchBar: false,\n          isButtons: false,\n        } : null,\n\n        width: 100,\n        styleClass: unique_id,\n      };\n      this.pdfDesignerService.addElement(newElement);\n      this.pdfElements = this.pdfDesignerService.getElements();\n      this.addTable = true\n    }\n  }\n\n  //AP-14JUN25 - Handles textarea input: auto-resizes and updates the field content\n  onTextAreaInput(event: Event, field: any): void {\n    const textarea = event.target as HTMLTextAreaElement;\n    // 1. Auto-resize logic\n    textarea.style.height = 'auto';\n    textarea.style.height = textarea.scrollHeight + 'px';\n    // 2. Trigger value update and PDF sync\n    this.onQuestionChange(textarea.value, field);\n  }\n\n  onQuestionChange(value: any, field: any) {\n    if (field?.type === 'signaturePad') {\n      const canvas = document.querySelector(`#${field.id}`) as HTMLCanvasElement;\n      if (!canvas) return;\n      const dataUrl = canvas.toDataURL('image/png');\n      field.value = dataUrl;  // Save to config\n      value = field.value\n    }\n    this.changeService.announceChange(value);\n    let elementId: any | undefined;\n\n    // SKS19JUN25 Clone to avoid modifying the original\n    const pdfElementsClone = _.cloneDeep(this.pdfElements);\n    const updatePdfQuestion = (element: any, value: string): boolean => {\n      if (element.type === 'Pdf') {\n        const subElements = element.pdfReferenceQuestions?.[element.pdfReference] || [];\n        for (const subElement of subElements) {\n          const found = updatePdfQuestion(subElement, value); // recursive call\n          if (found) return true; // stop once match is found\n        }\n      } else {\n        if (element.id === field.id) {\n          element.value = value;\n          return true;\n        }\n      }\n      return false;\n    };\n\n    pdfElementsClone.forEach((element: any, index: number) => {\n      const found = updatePdfQuestion(element, typeof value?.valueObj === 'boolean' ? value?.valueObj : value?.valueObj || value);\n      if (found && elementId === undefined) {\n        elementId = index;\n      }\n    });\n\n    if (elementId !== undefined) {\n      const updatedElement = pdfElementsClone[elementId];\n      this.pdfDesignerService.elementUpdate(updatedElement, 'valueChange');\n      // SKS19JUN25 Optionally preview or test using updatedElement (without updating original)\n      if (this.isPreview) {\n        this.pdfPreview(this.pdfDesignerService.downloadElement());\n      }\n    }\n  }\n\n  pdfPreview(pdf: any) {\n    this.pdfPreviewEmit.emit(pdf)\n  }\n  onFieldDateChange(event: any) {\n  }\n\n  removeElement(field: any, index: number): void {\n    this.pdfDesignerService.removeElementComponent(field.id);\n    this.pdfElements = this.pdfDesignerService.getElements();\n  }\n\n  onDragStart(event: DragEvent, index: number) {\n    this.draggedIndex = index;\n    event.dataTransfer?.setData('text/plain', index.toString());\n  }\n\n  onDragOver(event: DragEvent, index: number) {\n    event.preventDefault();\n  }\n\n  onDrop(event: DragEvent, dropIndex: number) {\n    event.preventDefault();\n\n    if (this.draggedIndex === null || this.draggedIndex === dropIndex) return;\n\n    const draggedItem = this.pdfElements[this.draggedIndex];\n\n    // Remove dragged item from old position and insert it in new position\n    this.pdfElements.splice(this.draggedIndex, 1);\n    this.pdfElements.splice(dropIndex, 0, draggedItem);\n\n    //AP-28MAR25 Update questionNumber dynamically based on new order\n    this.pdfElements.forEach((element, index) => {\n      element.questionNumber = index + 1;\n    });\n\n    // Reset dragged index\n    this.draggedIndex = null;\n\n    // Notify service about the update\n    this.pdfDesignerService.updateElementsOrder(this.pdfElements);\n  }\n\n  toggleBoolean(field: any): void {\n    field.boolean = !field.boolean;\n  }\n  // SKS13MAR25 table popup conformation based element add\n  onClose() {\n    this.isSelectTablePopup = false\n    this.addTable = false\n    this.addElement(this.currentType)\n  }\n  // SKS13MAR25 column element add inside a table\n  addOnTable() {\n    this.addTable = true\n    this.isSelectTablePopup = false\n    const elements = [...this.pdfDesignerService.getElements()];\n\n    // Find the element and update its columns\n    const index = elements.findIndex(el => el.id === this.selectedElement.id);\n    const rowNum = this.pdfElements[index].columns ? this.pdfElements[index].columns?.length : 0\n    const unique_id = this.generateUiId();\n    const tableElement = {\n      label: `HEADER LABEL ${rowNum}`,\n      fieldName: `FIELD NAME${rowNum}`,\n      type: this.currentType,\n      id: unique_id\n    }\n    this.pdfDesignerService.addTableElement(tableElement, this.selectedFieldIndex);\n    this.pdfElements = this.pdfDesignerService.getElements();\n    // this.addTableData(unique_id, fieldName)\n  }\n  addTableData(fieldId, fieldName) {\n    // this.pdfDesignerService.addTablefieldData(tableElement);\n  }\n  columnSelected(event: any) {\n    // SKS19MAR25 table column update\n    this.pdfDesignerService.setSelectedTableElement(this.selectedFieldIndex, event);\n  }\n  removeColumn(event: any) {\n    this.pdfDesignerService.removeSelectedTableElement(this.selectedFieldIndex, event);\n  }\n\n  // SKS25MAR25 image add\n  async fileChangeEvent(field: any, event: any): Promise<void> {\n    const file = event.target.files[0];\n    if (!file) return;\n    try {\n      const imageData = await this.readFileAsDataURL(file);\n      let elementId: number | undefined;\n      const updatePdfImage = (element: any): boolean => {\n        if (element.type === 'Pdf') {\n          const subElements = element.pdfReferenceQuestions?.[element.pdfReference] || [];\n          for (const subElement of subElements) {\n            const found = updatePdfImage(subElement); // recursive call\n            if (found) return true;\n          }\n        } else {\n          if (element.id === field.id) {\n            element.imageData = imageData;\n            element.orgImageData = imageData;\n            if (!element.imageSize) {\n              element.imageSize = { width: 100, height: 100 };\n            }\n            return true;\n          }\n        }\n        return false;\n      };\n      this.pdfElements.forEach((element: any, index: number) => {\n        const found = updatePdfImage(element);\n        if (found && elementId === undefined) {\n          elementId = index; // remember top-level match\n        }\n      });\n      if (elementId !== undefined) {\n        this.pdfDesignerService.elementUpdate(this.pdfElements[elementId], 'valueChange');\n        if (this.isPreview) {\n          this.pdfPreview(this.pdfDesignerService.downloadElement())\n        }\n      }\n    } catch (error) {\n      console.error(\"Error reading file:\", error);\n    }\n  }\n  private readFileAsDataURL(file: File): Promise<string> {\n    return new Promise((resolve, reject) => {\n      const reader = new FileReader();\n      reader.onload = () => resolve(reader.result as string);\n      reader.onerror = (error) => reject(error);\n      reader.readAsDataURL(file);\n    });\n  }\n  // SKS2APR25 disabled element\n  isElementDisabled(elementType: string): boolean {\n    if (this.selectedElement) {\n      const elements = this.elementDisabledArray[this.selectedElement.type]\n      if (elements) {\n        return elements.includes(elementType);\n      }\n    }\n    return false;\n  }\n  async onImageEdit(ques: any) {\n    this.isImageEdit = true;\n    this.selectedImageElement = ques;\n    //Assign imageSize default value\n    if (!this.selectedImageElement.imageSize) {\n      this.selectedImageElement.imageSize = { width: 100, height: 100 };\n    }\n  }\n  async onImageDelete(ques: any) {\n    try {\n      ques.imageData = '';\n      ques.orgImageData = '';\n      // Initialize logo size if not already set\n      if (!ques.imageSize) {\n        ques.imageSize = { width: 100, height: 100 };\n      }\n      // await this.childEventCapture(ques.imageData, ques);\n    } catch (error) {\n      console.error(\"Error reading file:\", error);\n    }\n  }\n\n  // SKS25MAR25 image edit functions\n  flipHorizontal() {\n    this.transform = {\n      ...this.transform,\n      flipH: !this.transform.flipH\n    };\n  }\n\n  flipVertical() {\n    this.transform = {\n      ...this.transform,\n      flipV: !this.transform.flipV\n    };\n  }\n\n  resetImage() {\n    this.canvasRotation = 0;\n    this.cropper = undefined;\n    this.transform = {\n      translateUnit: 'px',\n      scale: 1,\n      rotate: 0,\n      flipH: false,\n      flipV: false,\n      translateH: 0,\n      translateV: 0\n    };\n  }\n\n  zoomOut() {\n    this.transform = {\n      ...this.transform,\n      scale: this.transform.scale! - .1\n    };\n  }\n\n  zoomIn() {\n    this.transform = {\n      ...this.transform,\n      scale: this.transform.scale! + .1\n    };\n  }\n  rotateLeft() {\n    this.loading = true;\n    setTimeout(() => { // Use timeout because rotating image is a heavy operation and will block the ui thread\n      this.canvasRotation--;\n      this.flipAfterRotate();\n    });\n  }\n\n  rotateRight() {\n    this.loading = true;\n    setTimeout(() => {\n      this.canvasRotation++;\n      this.flipAfterRotate();\n    });\n  }\n\n  moveLeft() {\n    this.transform = {\n      ...this.transform,\n      translateH: this.transform.translateH! - 1\n    };\n  }\n\n  moveRight() {\n    this.transform = {\n      ...this.transform,\n      translateH: this.transform.translateH! + 1\n    };\n  }\n\n  moveDown() {\n    this.transform = {\n      ...this.transform,\n      translateV: this.transform.translateV! + 1\n    };\n  }\n\n  moveUp() {\n    this.transform = {\n      ...this.transform,\n      translateV: this.transform.translateV! - 1\n    };\n  }\n  private flipAfterRotate() {\n    const flippedH = this.transform.flipH;\n    const flippedV = this.transform.flipV;\n    this.transform = {\n      ...this.transform,\n      flipH: flippedV,\n      flipV: flippedH,\n      translateH: 0,\n      translateV: 0\n    };\n  }\n\n  async imageCropped(event: any) {\n    try {\n      const base64 = await this.convertBlobToBase64(event.objectUrl);\n      this.selectedImageElement.imageData = base64;\n      // await this.childEventCapture(base64, this.selectedImageElement);\n      // set default if not present\n      if (!this.selectedImageElement.imageSize) {\n        this.selectedImageElement.imageSize = { width: 100, height: 100 };\n      }\n    } catch (error) {\n      console.error(\"Error in imageCropped:\", error);\n    }\n  }\n\n\n  cropperReady(sourceImageDimensions: Dimensions) {\n    this.loading = false;\n  }\n  // SKS25MAR25 blob to base 64 converter\n  convertBlobToBase64(objectUrl: string): Promise<string> {\n    return fetch(objectUrl)\n      .then(response => response.blob())\n      .then(blob => {\n        return new Promise((resolve, reject) => {\n          const reader = new FileReader();\n          reader.readAsDataURL(blob);\n          reader.onloadend = () => resolve(reader.result as string);\n          reader.onerror = error => reject(error);\n        });\n      });\n  }\n  closeModal() {\n    this.isImageEdit = false;\n  }\n  openTextSettings(field: any, event: MouseEvent) {\n    this.selectedColumn = field;\n    this.showTextSettings = true;\n  }\n  closeTextSettings() {\n    this.showTextSettings = false;\n  }\n  //AP-14JUN25 - Toggles bold or italic style for the selected text block\n  toggleStyle(style: 'bold' | 'italic') {\n    if (!this.selectedColumn) return;\n    if (style === 'bold') {\n      this.selectedColumn.style.bold = !this.selectedColumn.style.bold;\n    } else if (style === 'italic') {\n      this.selectedColumn.style.italics = !this.selectedColumn.style.italics;\n    }\n    this.updateContent();\n  }\n  //AP-14JUN25 - Sets text alignment (left, center, right) for the selected text block\n  setAlignment(alignment: 'left' | 'center' | 'right') {\n    if (!this.selectedColumn) return;\n    this.selectedColumn.style.alignment = alignment;\n    this.updateContent();\n  }\n\n  //AP-14JUN25 - Updates the content in the PDF designer with the selected style changes\n  updateContent(tempElement?: any) {\n    this.pdfDesignerService.elementUpdate(tempElement || this.selectedElement, 'valueChange');\n    this.pdfElements = this.pdfDesignerService.getElements();\n  }\n  pdfSaveHandler(event: any) {\n    if (event === 'preview') {\n      this.pdfSaveHandlerEmit.emit({ \"action\": 'preview', \"pdf\": this.pdfDesignerService.downloadElement() })\n    } else if (event === 'download') {\n      this.pdfSaveHandlerEmit.emit({ \"action\": 'download', \"pdf\": this.pdfDesignerService.downloadElement() })\n    } else {\n      this.pdfSaveHandlerEmit.emit(event)\n    }\n  }\n  // SKS12SEP25 color selection\n  selectColor(color: string) {\n    this.selectedColor = color;\n    if (!this.selectedElement) return;\n    let tempElement = { ...this.selectedElement }\n    if (tempElement.type === 'Table') {\n      let currentColId = this.pdfDesignerService.getSelectTableColumn()\n      tempElement.fieldsMeta.forEach(element => {\n        if (element.uniqueIdentifier === currentColId) {\n          if (!element['style']) element['style'] = {}\n          element['style']['fillColor'] = color\n        }\n      });\n    }\n    this.updateContent(tempElement);\n  }\n  // SKS12SEP25 currency selection\n  currencyChange(event: any) {\n    this.countryService.currentCurrency(event)\n    this.currencyOptions = this.countryService.getCountryData(['currencies'])\n    this.selectedCurrency = event.code\n  }\n  // SKS21NOV25 call this once after view init and whenever canvas size changes (e.g. window resize)\n  setupCanvas(element: HTMLCanvasElement) {\n    if (!element) return;\n    // CSS size\n    const cssWidth = element.offsetWidth;\n    const cssHeight = element.offsetHeight || 90; // fallback height if not set\n\n    // device pixel ratio\n    const ratio = Math.max(window.devicePixelRatio || 1, 1);\n    // SKS21NOV25 set drawing buffer size to CSS size * ratio\n    element.width = Math.round(cssWidth * ratio);\n    element.height = Math.round(cssHeight * ratio);\n\n    // scale the context so drawing coordinates are in CSS pixels\n    const ctx = element.getContext('2d')!;\n    ctx.setTransform(ratio, 0, 0, ratio, 0, 0); // reset & scale\n    ctx.lineWidth = 2;           // line width in CSS pixels\n    ctx.lineCap = 'round';\n    ctx.strokeStyle = 'black';\n\n    // store\n    this.ctxMap.set(element.id, ctx);\n    this.ratioMap.set(element.id, ratio);\n  }\n\n  // SKS21NOV25 call when loading an existing signature into the canvas\n  loadSignatureToCanvas(element: HTMLCanvasElement, base64: string) {\n    if (!element || !base64) return;\n    const ctx = this.ctxMap.get(element.id) || element.getContext('2d')!;\n    const ratio = this.ratioMap.get(element.id) || (window.devicePixelRatio || 1);\n\n    const img = new Image();\n    img.src = base64;\n    img.onload = () => {\n      // draw using CSS pixel coordinates (we already scaled ctx with setTransform)\n      ctx.clearRect(0, 0, element.width / ratio, element.height / ratio);\n      ctx.drawImage(img, 0, 0, element.width / ratio, element.height / ratio);\n    };\n  }\n\n  // SKS21NOV25 unified pointer coordinate in CSS pixels relative to canvas top-left\n  private getCanvasPos(event: PointerEvent, element: HTMLCanvasElement) {\n    const rect = element.getBoundingClientRect();\n    const x = event.clientX - rect.left;\n    const y = event.clientY - rect.top;\n    return { x, y };\n  }\n\n  // SKS21NOV25 pointer handlers\n  pointerDown(event: PointerEvent, field: any) {\n    // ensure we capture the pointer (good for touch + pen)\n    const canvas = event.target as HTMLCanvasElement;\n    if (!canvas) return;\n    canvas.setPointerCapture(event.pointerId);\n\n    // (re)setup canvas sizing in case it changed\n    this.setupCanvas(canvas);\n\n    // prevent scrolling\n    event.preventDefault();\n\n    this.drawing.set(canvas.id, true);\n    const ctx = this.ctxMap.get(canvas.id)!;\n    const pos = this.getCanvasPos(event, canvas);\n    ctx.beginPath();\n    ctx.moveTo(pos.x, pos.y);\n  }\n\n  pointerMove(event: PointerEvent, field: any) {\n    const canvas = event.target as HTMLCanvasElement;\n    if (!canvas) return;\n    if (!this.drawing.get(canvas.id)) return;\n    event.preventDefault();\n\n    const ctx = this.ctxMap.get(canvas.id)!;\n    const pos = this.getCanvasPos(event, canvas);\n    ctx.lineTo(pos.x, pos.y);\n    ctx.stroke();\n  }\n\n  pointerUp(event: PointerEvent, field: any) {\n    const canvas = event.target as HTMLCanvasElement;\n    if (!canvas) return;\n    canvas.releasePointerCapture?.(event.pointerId);\n    this.drawing.set(canvas.id, false);\n    // optionally auto-save to field.value\n    this.saveCanvasToField(canvas, field);\n  }\n\n  saveCanvasToField(canvas: HTMLCanvasElement, field: any) {\n    // get image as base64 (full-resolution); browsers handle converting internal buffer\n    const dataUrl = canvas.toDataURL('image/png');\n    field.value = dataUrl;\n  }\n\n  // SKS21NOV25 clear routine\n  clearCanvas(element: HTMLCanvasElement, field: any) {\n    const ratio = this.ratioMap.get(element.id) || (window.devicePixelRatio || 1);\n    const ctx = this.ctxMap.get(element.id) || element.getContext('2d')!;\n    ctx.clearRect(0, 0, element.width / ratio, element.height / ratio);\n    field.value = '';\n  }\n  clearSignature(field: any) {\n    const canvas = document.querySelector(`#${field.id}`) as HTMLCanvasElement;\n    if (!canvas) return;\n    const ctx = canvas.getContext('2d');\n    ctx.clearRect(0, 0, canvas.width, canvas.height);\n    field.value = '';\n  }\n}","<!-- AP 22JAN25 - form preview and All form elements -->\n<!-- AP 25FEB25 - All elements update -->\n<div class=\"form-container\" [ngClass]=\"{'isPreview': isPreview}\">\n  <div class=\"center-frame\" [ngClass]=\"{'isPreview': isPreview}\">\n    <!-- Form Builder Section All Elements -->\n    <div *ngIf=\"!isPreview\" class=\"form-builder\">\n      <ng-container *ngFor=\"let element of elementsList\">\n        <div\n            class=\"element\"\n            [class.disabled]=\"selectedElement?.type && elementDisabledArray[selectedElement.type]?.includes(element.type)\"\n            (click)=\"!(selectedElement?.type && elementDisabledArray[selectedElement.type]?.includes(element.type)) && addElement(element.type)\"\n            [draggable]=\"!(selectedElement?.type && elementDisabledArray[selectedElement.type]?.includes(element.type))\"\n            [matTooltip]=\"\n              selectedElement?.type && elementDisabledArray[selectedElement.type]?.includes(element.type)\n                ? ('THIS_ELEMENT_NOT_SUPPORTED' | nxtCustomTranslate : 'This element is not supported when a ') +\n                  (selectedElement?.type || ('CERTAIN_ELEMENT' | nxtCustomTranslate : 'certain element')) +\n                  (' IS_PRESENT' | nxtCustomTranslate : ' is present')\n                : null\n            \"\n          >\n          <img src=\"../assets/icons/{{ element.img }}.svg\" class=\"element-icon\">\n          <div class=\"hover-label\">{{ element.label }}</div>      \n          <div class=\"drag-dots\">\n            <div class=\"dot\" *ngFor=\"let dot of dots\"></div>\n          </div>\n        </div>\n      </ng-container>\n      <!-- SKS10MAR25 footer version show -->\n      <div class=\"sticky-footer-version\">\n        {{version}}\n      </div>\n    </div>    \n    <div [ngStyle]=\"!isPreview ? { 'display': 'flex', 'width': '75%' } : { 'display': 'flex', 'width': '100%' }\">\n      <div class=\"form-preview\">\n        <!-- AP-10MAR25 Heading -->\n        <div *ngIf=\"!isPreview\" class=\"field-container\" [ngClass]=\"{'isPreview': isPreview}\"\n          style=\"width: 100%;background-color: #EFF8FF; border: 1px solid #E6F3FF;margin-bottom:10px\"\n          (click)=\"selectHeading('Header')\">\n          <div class=\"label-container\" style=\"display: flex;justify-content: space-between;\">\n            <div *ngIf=\"pdf\" style=\"padding-left: 10px;\">\n              <div *ngIf=\"pdf.title == ''\" style=\"color:#3f4a525c\">{{ 'HEADING' | nxtCustomTranslate : 'Heading' }}</div>\n              <div *ngIf=\"pdf.title !== ''\">{{pdf.title}}</div>\n            </div>\n            <div class=\"action-buttons\">\n              <button class=\"action-btn\" (click)=\"pdfSaveHandler('preview')\">{{ 'PREVIEW' | nxtCustomTranslate : 'Preview' }}</button>\n              <button class=\"action-btn\" (click)=\"pdfSaveHandler('download')\">{{ 'DOWNLOAD' | nxtCustomTranslate : 'Download' }}</button>\n            </div>\n          </div>\n        </div>\n        <ng-container *ngFor=\"let field of pdfElements; let i = index\">\n          <!-- AP-19MAR25 Line Element -->\n          <div *ngIf=\"field?.type === 'Line'\" class=\"line-field\" [ngStyle]=\"{ display: field.isHidden ? 'none' : 'block' }\" [ngClass]=\"{'isPreview': isPreview}\"\n            (click)=\"selectElement(i)\" [class.highlight]=\"selectedFieldIndex === i && !isPreview \"\n            draggable=\"true && !isPreview \" (dragstart)=\"onDragStart($event, i)\" (dragover)=\"onDragOver($event, i)\"\n            (drop)=\"onDrop($event, i)\">\n            <div *ngIf=\"!isPreview \" class=\"line-element\">\n              <div></div>\n              <img src=\"../assets/icons/Trash.svg\" (click)=\"removeElement(field, i)\" class=\"delete-icon\" />\n            </div>\n            <hr class=\"custom-line\" style=\"display: inline-flex\" [ngStyle]=\"{\n                'font-family': field?.style?.font || 'Helvetica Neue',\n                'font-weight': field?.style?.bold ? '700' : '400',\n                'font-size': (field?.style?.fontSize || 12) + 'px',\n                'width': (field?.width || 100) + '%',\n                'text-align': field.textAlign || 'left',\n                'border-radius': '5px',\n                'border-style': (field.lineStyle?.toLowerCase() || 'solid'),\n                'color': field?.style?.color || '#000000',\n                'margin-top': (field?.style?.paddingTop || 0) + 'px',\n                'margin-bottom': (field?.style?.paddingBottom ?? 10) + 'px'\n              }\" />\n          </div>\n  \n          <!--SKS25MAR25 Image Upload Element -->\n          <div *ngIf=\"field?.type === 'image'\" class=\"field-container\" [ngClass]=\"{'isPreview': isPreview}\" [ngStyle]=\"{ display: field.isHidden ? 'none' : 'block' }\" (click)=\"selectElement(i)\"\n            [class.highlight]=\"selectedFieldIndex === i && !isPreview \" draggable=\"true && !isPreview \"\n            (dragstart)=\"onDragStart($event, i)\" (dragover)=\"onDragOver($event, i)\" (drop)=\"onDrop($event, i)\"\n            [ngStyle]=\"{\n              'font-family': field?.style?.font || 'Helvetica Neue',\n              'font-size': (field?.style?.fontSize || 12) + 'px',\n              'width': (field?.width || 100) + '%',\n              'text-align': field?.style?.alignment || '',\n              'border-radius': '5px',\n              'color': field?.style?.color || '#000000',\n              'font-style': field?.style?.italic ? 'italic' : 'normal',\n              'font-weight': field?.style?.bold ? '700' : '400',\n              'padding': \n                (field?.style?.margin?.[1] || 0) + 'px '  +\n                (field?.style?.margin?.[2] || 0) + 'px '  +\n                (field?.style?.margin?.[3] || 0) + 'px '  +\n                (field?.style?.margin?.[0] || 0) + 'px ' ,\n            }\" \n            (mouseenter)=\"isImageHover = true;\"\n            (mouseleave)=\"isImageHover = false;\">\n            <div class=\"field-wrapper\" [ngClass]=\"{'isPreview': isPreview}\">\n              <div class=\"field-content\">\n                <div *ngIf=\"!isPreview \" class=\"label-container\">\n                  <div class=\"top-right\">\n                    <img src=\"../assets/icons/drag-dots.svg\" alt=\"Drag\" class=\"drag-dot\" />\n                    <img src=\"../assets/icons/Trash.svg\" (click)=\"removeElement(field, i)\" class=\"delete-icon\" />\n                  </div>\n                </div>\n                <div>\n                    <div class=\"logo-container\" [ngStyle]=\"{ 'justify-content': field?.style?.alignment || '' }\">\n                      <div class=\"logo-preview\" *ngIf=\"field.imageData\">\n                        <div style=\"display: flex; justify-content: end;\">\n                          <i (click)=\"onImageEdit(field)\" class=\"fusion-icon nav-icon fusion-icon-edit_pencil\" style=\"margin: 0px !important; font-size: 16px !important; color: #787486;\"></i>\n                          <svg (click)=\"onImageDelete(field)\" width=\"16\" height=\"16\"\n                            viewBox=\"0 0 16 16\" fill=\"none\" xmlns=\"http://www.w3.org/2000/svg\">\n                            <path\n                              d=\"M14 3.98726C11.78 3.76726 9.54667 3.65393 7.32 3.65393C6 3.65393 4.68 3.7206 3.36 3.85393L2 3.98726\"\n                              stroke=\"#FF2C10\" stroke-width=\"1.5\" stroke-linecap=\"round\" stroke-linejoin=\"round\" />\n                            <path\n                              d=\"M5.6665 3.31362L5.81317 2.44028C5.91984 1.80695 5.99984 1.33362 7.1265 1.33362H8.87317C9.99984 1.33362 10.0865 1.83362 10.1865 2.44695L10.3332 3.31362\"\n                              stroke=\"#FF2C10\" stroke-width=\"1.5\" stroke-linecap=\"round\" stroke-linejoin=\"round\" />\n                            <path\n                              d=\"M12.5667 6.09375L12.1334 12.8071C12.06 13.8537 12 14.6671 10.14 14.6671H5.86002C4.00002 14.6671 3.94002 13.8537 3.86668 12.8071L3.43335 6.09375\"\n                              stroke=\"#FF2C10\" stroke-width=\"1.5\" stroke-linecap=\"round\" stroke-linejoin=\"round\" />\n                            <path d=\"M6.88647 11.0004H9.10647\" stroke=\"#FF2C10\" stroke-width=\"1.5\" stroke-linecap=\"round\"\n                              stroke-linejoin=\"round\" />\n                            <path d=\"M6.3335 8.33325H9.66683\" stroke=\"#FF2C10\" stroke-width=\"1.5\" stroke-linecap=\"round\"\n                              stroke-linejoin=\"round\" />\n                          </svg>\n                        </div>\n                        <img [src]=\"field.imageData\" [style.width.px]=\"field.imageSize?.width || 100\" [style.height.px]=\"field.imageSize?.height || 100\" />\n                      </div>\n  \n                      <div *ngIf=\"!field.imageData\" class=\"logo-upload-placeholder\">\n                        <label for=\"logo-upload-{{i}}\" class=\"logo-upload-label\">\n                          <img src=\"../assets/icons/Image.svg\" alt=\"Upload\" />\n                          <span>{{ 'UPLOAD_IMAGE' | nxtCustomTranslate : 'Upload Image' }}</span>\n                        </label>\n                        <input type=\"file\" id=\"logo-upload-{{i}}\" accept=\"image/*\" (change)=\"fileChangeEvent(field, $event)\"\n                          style=\"display: none;\" />\n                      </div>\n                    </div>\n                </div>\n              </div>\n            </div>\n          </div>\n  \n          <!-- Space Element -->\n          <div *ngIf=\"field?.type === 'Space'\" class=\"field-container\" [ngClass]=\"{'isPreview': isPreview}\" [ngStyle]=\"{ display: field.isHidden ? 'none' : 'block' }\" (click)=\"selectElement(i)\"\n            [ngStyle]=\"{\n              'font-family': field?.style?.font || 'Helvetica Neue',\n              'font-size': (field?.style?.fontSize || 12) + 'px',\n              'width': (field?.width || 100) + '%',\n              'text-align': field?.style?.alignment || '',\n              'border-radius': '5px',\n              \n              'color': field?.style?.color || '#000000',\n              'font-style': field?.style?.italic ? 'italic' : 'normal',\n              'font-weight': field?.style?.bold ? '700' : '400',\n              'padding': \n                (field?.style?.margin?.[1] || 0) + 'px '  +\n                (field?.style?.margin?.[2] || 0) + 'px '  +\n                (field?.style?.margin?.[3] || 0) + 'px '  +\n                (field?.style?.margin?.[0] || 0) + 'px ' ,\n              \n              \n            }\" [class.highlight]=\"selectedFieldIndex === i && !isPreview \"\n            draggable=\"true && !isPreview \" (dragstart)=\"onDragStart($event, i)\" (dragover)=\"onDragOver($event, i)\"\n            (drop)=\"onDrop($event, i)\">\n            <div class=\"field-wrapper\" style=\"height:93px\" [ngClass]=\"{'isPreview': isPreview}\">\n              <div *ngIf=\"!isPreview \" class=\"field-content\">\n                <div class=\"label-container\">\n                  <div class=\"top-right\" style=\"margin: -11px -11px 0 0;\">\n                    <img src=\"../assets/icons/drag-dots.svg\" alt=\"Drag\" class=\"drag-dot\" />\n                    <img src=\"../assets/icons/Trash.svg\" (click)=\"removeElement(field, i)\" class=\"delete-icon\" />\n                  </div>\n                </div>\n              </div>\n            </div>\n          </div>\n          <!-- SKS21NOV25  signaturePad -->\n          <div *ngIf=\"field?.type === 'signaturePad'\" class=\"field-container\" [ngClass]=\"{'isPreview': isPreview}\" [ngStyle]=\"{ display: field.isHidden ? 'none' : 'block' }\" (click)=\"selectElement(i)\"\n            [ngStyle]=\"{\n              'font-family': field?.style?.font || 'Helvetica Neue',\n              'font-size': (field?.style?.fontSize || 12) + 'px',\n              'width': (field?.width || 100) + '%',\n              'text-align': field?.style?.alignment || '',\n              'border-radius': '5px',\n              \n              'color': field?.style?.color || '#000000',\n              'font-style': field?.style?.italic ? 'italic' : 'normal',\n              'font-weight': field?.style?.bold ? '700' : '400',\n              'padding': \n                (field?.style?.margin?.[1] || 0) + 'px '  +\n                (field?.style?.margin?.[2] || 0) + 'px '  +\n                (field?.style?.margin?.[3] || 0) + 'px '  +\n                (field?.style?.margin?.[0] || 0) + 'px ' ,\n              \n              \n            }\" [class.highlight]=\"selectedFieldIndex === i && !isPreview \"\n            draggable=\"true && !isPreview \" (dragstart)=\"onDragStart($event, i)\" (dragover)=\"onDragOver($event, i)\"\n            (drop)=\"onDrop($event, i)\">\n            <div class=\"field-wrapper\" style=\"height:93px\" [ngClass]=\"{'isPreview': isPreview}\">\n              <div class=\"field-content\">\n                <div  *ngIf=\"!isPreview \" class=\"label-container\">\n                  <div class=\"top-right\" style=\"margin: -11px -11px 0 0;\">\n                    <img src=\"../assets/icons/drag-dots.svg\" alt=\"Drag\" class=\"drag-dot\" />\n                    <img src=\"../assets/icons/Trash.svg\" (click)=\"removeElement(field, i)\" class=\"delete-icon\" />\n                  </div>\n                </div>\n                <!-- SKS21NOV25 Signature Pad Field -->\n                <div class=\"signature-pad-container\">\n                  <!-- SKS21NOV25 Builder mode (editable) -->\n                  <canvas *ngIf=\"!isPreview\"\n                    #sigCanvas\n                    [id]=\"field.id\"\n                    class=\"signature-pad\"\n                    (pointerdown)=\"pointerDown($event, field)\"\n                    (pointermove)=\"pointerMove($event, field)\"\n                    (pointerup)=\"pointerUp($event, field)\"\n                    (pointercancel)=\"pointerUp($event, field)\"\n                    (lostpointercapture)=\"pointerUp($event, field)\">\n                  </canvas>\n\n                  <!-- SKS21NOV25 Preview mode (static image) -->\n                  <img *ngIf=\"isPreview && field.value\"\n                      [src]=\"field.value\"\n                      class=\"signature-preview\" />\n                  <!-- SKS21NOV25 Empty state in preview -->\n                  <div *ngIf=\"isPreview && !field.value\"\n                      class=\"signature-placeholder\">\n                      Signature\n                  </div>\n                  <!-- SKS21NOV25 Builder buttons -->\n                  <div *ngIf=\"!isPreview\" class=\"signature-actions\">\n                      <button type=\"button\" (click)=\"onQuestionChange($event.value, field)\">Save</button>\n                      <button type=\"button\" (click)=\"clearSignature(field)\">Clear</button>\n                  </div>\n                </div>\n              </div>\n            </div>\n          </div>\n  \n          <!-- SKS16SEP25 Date, currency, boolean, text -->\n          <div *ngIf=\"field?.type === 'date' || field?.type === 'currency' ||  field?.type === 'boolean' || field?.type === 'text'\" class=\"field-container\" [ngClass]=\"{'isPreview': isPreview}\" [ngStyle]=\"{ display: field.isHidden ? 'none' : 'block' }\" (click)=\"selectElement(i)\"\n            [ngStyle]=\"{\n              'font-family': field?.style?.font || 'Helvetica Neue',\n              'font-size': (field?.style?.fontSize || 12) + 'px',\n              'width': (field?.width || 100) + '%',\n              'border-radius': '5px',\n              'color': field?.style?.color || '#000000',\n              'font-style': field?.style?.italic ? 'italic' : 'normal',\n              'font-weight': field?.style?.bold ? '700' : '400',\n              'padding': \n                (field?.style?.margin?.[1] || 0) + 'px '  +\n                (field?.style?.margin?.[2] || 0) + 'px '  +\n                (field?.style?.margin?.[3] || 0) + 'px '  +\n                (field?.style?.margin?.[0] || 0) + 'px ' ,\n            }\" [class.highlight]=\"selectedFieldIndex === i && !isPreview \"\n            draggable=\"true && !isPreview \" (dragstart)=\"onDragStart($event, i)\" (dragover)=\"onDragOver($event, i)\"\n            (drop)=\"onDrop($event, i)\">\n            <div class=\"field-wrapper\" [ngClass]=\"{'isPreview': isPreview}\">\n              <div class=\"field-content\">\n                <div *ngIf=\"!isPreview \" class=\"label-container\">\n                  <div class=\"top-right\">\n                    <img src=\"../assets/icons/drag-dots.svg\" alt=\"Drag\" class=\"drag-dot\" />\n                    <img src=\"../assets/icons/Trash.svg\" (click)=\"removeElement(field, i)\" class=\"delete-icon\" />\n                  </div>\n                </div>\n                <!-- AP-04JUN25 - replace custom date picker -->\n                <nxt-input [type]=\"field.type === 'boolean' ? 'checkbox' : field?.type === 'text' ? 'textarea' : field.type\" [mode]=\"'edit'\" [value]=\"field.value\" [question]=\"field\" [labelFont]=\"\"\n                  [labelColor]=\"\" [labelSize]=\"\" [inputValueSize]=\"\" [labelWeight]=\"\" [readOnly]=\"field.isReadOnly\"\n                  [currency] = 'selectedCurrency' [label]=\"field?.questionText\" (click)=\"field?.type === 'text' ? openTextSettings(field, $event) : ''\"\n                  [inputWeight]=\"\" [showLabel]=\"field?.questionText ? true : false\" inputBorder=\"none\" svgHeight=\"20px\" svgWidth=\"20px\"\n                  [placeholder]=\"field.question ? field.question : 'ENTER_YOUR_INPUT' | nxtCustomTranslate : 'Enter your input'\" [required]=\"\"\n                  inputBgColor=\"#ffffff\" [inputId]=\"\" [errorMessages]=\"{ required: 'This field is required' }\" [textAlign]=\"field?.style?.alignment || ''\"\n                  [inputIconLeftSrc]=\"''\" (inputValue)=\"onQuestionChange($event.value, field)\">\n                </nxt-input>\n              </div>\n            </div>\n            <div *ngIf=\"showTextSettings && isPreview && selectedColumn === field\" class=\"text-settings-toolbar\"\n              [ngStyle]=\"{\n                position: 'absolute',\n                background: '#fff',\n                border: '1px solid #ccc',\n                padding: '6px 10px',\n                'border-radius': '4px',\n                'box-shadow': '0 2px 6px rgba(0, 0, 0, 0.1)',\n                'z-index': '65535',\n                display: 'flex',\n                'text-align': 'center',\n                gap: '8px'\n              }\">\n          \n              <select [(ngModel)]=\"selectedColumn.style.fontSize\" class=\"toolbar-select\">\n                <option [value]=\"12\">12pt</option>\n                <option [value]=\"14\">14pt</option>\n                <option [value]=\"16\">16pt</option>\n                <option [value]=\"18\">18pt</option>\n                <option [value]=\"24\">24pt</option>\n              </select>\n  \n              <label title=\"Text Color\" class=\"color-label\">\n              <span class=\"color-box\" [style.color]=\"selectedColumn.style.color || '#000'\" (click)=\"textColorInput.click()\">A</span>\n              <input #textColorInput type=\"color\" [(ngModel)]=\"selectedColumn.style.color\" (change)=\"updateContent()\" class=\"color-picker-hidden\"/>\n              </label>\n  \n              <button (click)=\"toggleStyle('bold')\" [class.active]=\"selectedColumn?.style?.bold\" class=\"toolbar-btn\">{{ 'BOLD' | nxtCustomTranslate : 'B' }}</button>\n            \n              <button (click)=\"toggleStyle('italic')\" [class.active]=\"selectedColumn?.style?.italics\" class=\"toolbar-btn\"><i>{{ 'ITALIC' | nxtCustomTranslate : 'I' }}</i></button>\n  \n  \n            \n              <button (click)=\"setAlignment('left')\" [class.active]=\"selectedColumn?.style?.alignment === 'left'\" class=\"toolbar-btn\">\n                <span class=\"material-icons\">{{ 'FORMAT_ALIGN_LEFT' | nxtCustomTranslate : 'format_align_left' }}</span>\n              </button>\n            \n              <button (click)=\"setAlignment('center')\" [class.active]=\"selectedColumn?.style?.alignment === 'center'\" class=\"toolbar-btn\">\n                <span class=\"material-icons\">{{ 'FORMAT_ALIGN_CENTER' | nxtCustomTranslate : 'format_align_center' }}</span>\n              </button>\n            \n              <button (click)=\"setAlignment('right')\" [class.active]=\"selectedColumn?.style?.alignment === 'right'\" class=\"toolbar-btn\">\n                <span class=\"material-icons\">{{ 'FORMAT_ALIGN_RIGHT' | nxtCustomTranslate : 'format_align_right' }}</span>\n              </button>\n          \n              <button (click)=\"closeTextSettings()\" class=\"toolbar-btn\" style=\"margin-left: auto;\">✕</button>\n            </div>\n          </div>\n  \n          <!-- Pdf -->\n          <div *ngIf=\"field?.type === 'Pdf'\" class=\"field-container\" [ngClass]=\"{'isPreview': isPreview}\" [ngStyle]=\"{ display: field.isHidden ? 'none' : 'block' }\" (click)=\"selectElement(i)\"\n            [ngStyle]=\"{\n              'font-family': field?.style?.font || 'Helvetica Neue',\n              'font-size': (field?.style?.fontSize || 12) + 'px',\n              'width': (field?.width || 100) + '%',\n              'text-align': field?.style?.alignment || '',\n              'border-radius': '5px',\n              'color': field?.style?.color || '#000000',\n              'font-style': field?.style?.italic ? 'italic' : 'normal',\n              'font-weight': field?.style?.bold ? '700' : '400',\n              'padding': \n                (field?.style?.margin?.[1] || 0) + 'px '  +\n                (field?.style?.margin?.[2] || 0) + 'px '  +\n                (field?.style?.margin?.[3] || 0) + 'px '  +\n                (field?.style?.margin?.[0] || 0) + 'px ' ,\n            }\" [class.highlight]=\"selectedFieldIndex === i && !isPreview \"\n            draggable=\"true && !isPreview \" (dragstart)=\"onDragStart($event, i)\" (dragover)=\"onDragOver($event, i)\"\n            (drop)=\"onDrop($event, i)\">\n            <div class=\"field-wrapper\" [ngClass]=\"{'isPreview': isPreview}\">\n              <div class=\"field-content\">\n                <div *ngIf=\"!isPreview \" class=\"label2-container\">\n                  <div>\n                    <div *ngIf=\"field.questionText && field.type != 'checkbox'\" \n                      [ngStyle]=\"{\n                        'padding-top': field.type  === 'label' ? '10px' : '',\n                        \n                      }\"  [style.font-weight]=\"field.labelWeight ||  field.type  === 'label' ? 'bold' : 'normal'\" [style.font-size]=\"field.labelSize || field.type  === 'label' ? '16px' : '14px'\"\n                      style=\"display: flex; gap: 5px;\"> \n                      {{ field.questionText }}\n                      <div *ngIf=\"field.questionText && field.type  != 'checkbox' && field.required && field.showLabel \" style=\"color: red;\">*</div>\n                      <div *ngIf=\"field.questionText && field?.helpText\" [matTooltip]=\"field?.helpText\" matTooltipClass=\"white-tooltip\">\n                        <svg width=\"16\" height=\"16\" viewBox=\"0 0 16 16\" fill=\"none\" xmlns=\"http://www.w3.org/2000/svg\">\n                          <path fill-rule=\"evenodd\" clip-rule=\"evenodd\" d=\"M8.00009 0.615356C3.90779 0.615356 0.615479 3.90766 0.615479 7.99997C0.615479 12.0923 3.90779 15.3846 8.00009 15.3846C12.0924 15.3846 15.3847 12.0923 15.3847 7.99997C15.3847 3.90766 12.0924 0.615356 8.00009 0.615356ZM8.00012 13.5385C4.92319 13.5385 2.46165 11.0769 2.46165 8C2.46165 4.92307 4.92319 2.46153 8.00012 2.46153C11.077 2.46153 13.5386 4.92307 13.5386 8C13.5386 11.0769 11.077 13.5385 8.00012 13.5385ZM8.00027 4.33846C8.52335 4.33846 8.92335 4.73846 8.92335 5.26153C8.92335 5.78461 8.52335 6.18461 8.00027 6.18461C7.47719 6.18461 7.07719 5.78461 7.07719 5.26153C7.07719 4.73846 7.47719 4.33846 8.00027 4.33846ZM9.53859 10.8C9.53859 10.9538 9.41552 11.0769 9.2309 11.0769H6.76936C6.61552 11.0769 6.46167 10.9846 6.46167 10.8V10.1846C6.46167 10.0308 6.58475 9.84614 6.76936 9.84614C6.92321 9.84614 7.07706 9.75383 7.07706 9.56921V8.33844C7.07706 8.1846 6.95398 7.99998 6.76936 7.99998C6.61552 7.99998 6.46167 7.90767 6.46167 7.72306V7.10767C6.46167 6.95383 6.58475 6.76921 6.76936 6.76921H8.61552C8.76936 6.76921 8.92321 6.92306 8.92321 7.10767V9.56921C8.92321 9.72306 9.04629 9.84614 9.2309 9.84614C9.38475 9.84614 9.53859 9.99998 9.53859 10.1846V10.8Z\" fill=\"#747474\"/>\n                        </svg> \n                      </div>\n                    </div>\n                  </div>\n                  <div class=\"top-right\">\n                    <img src=\"../assets/icons/drag-dots.svg\" alt=\"Drag\" class=\"drag-dot\" />\n                    <img src=\"../assets/icons/Trash.svg\" (click)=\"removeElement(field, i)\" class=\"delete-icon\" />\n                  </div>\n                </div>\n                <div *ngIf=\"!field.questionText && field?.helpText\" style=\"display: flex; justify-content: flex-end;\">\n                  <svg  [matTooltip]=\"field?.helpText\" matTooltipClass=\"white-tooltip label-container\" width=\"16\" height=\"16\" viewBox=\"0 0 16 16\" fill=\"none\" xmlns=\"http://www.w3.org/2000/svg\">\n                    <path fill-rule=\"evenodd\" clip-rule=\"evenodd\" d=\"M8.00009 0.615356C3.90779 0.615356 0.615479 3.90766 0.615479 7.99997C0.615479 12.0923 3.90779 15.3846 8.00009 15.3846C12.0924 15.3846 15.3847 12.0923 15.3847 7.99997C15.3847 3.90766 12.0924 0.615356 8.00009 0.615356ZM8.00012 13.5385C4.92319 13.5385 2.46165 11.0769 2.46165 8C2.46165 4.92307 4.92319 2.46153 8.00012 2.46153C11.077 2.46153 13.5386 4.92307 13.5386 8C13.5386 11.0769 11.077 13.5385 8.00012 13.5385ZM8.00027 4.33846C8.52335 4.33846 8.92335 4.73846 8.92335 5.26153C8.92335 5.78461 8.52335 6.18461 8.00027 6.18461C7.47719 6.18461 7.07719 5.78461 7.07719 5.26153C7.07719 4.73846 7.47719 4.33846 8.00027 4.33846ZM9.53859 10.8C9.53859 10.9538 9.41552 11.0769 9.2309 11.0769H6.76936C6.61552 11.0769 6.46167 10.9846 6.46167 10.8V10.1846C6.46167 10.0308 6.58475 9.84614 6.76936 9.84614C6.92321 9.84614 7.07706 9.75383 7.07706 9.56921V8.33844C7.07706 8.1846 6.95398 7.99998 6.76936 7.99998C6.61552 7.99998 6.46167 7.90767 6.46167 7.72306V7.10767C6.46167 6.95383 6.58475 6.76921 6.76936 6.76921H8.61552C8.76936 6.76921 8.92321 6.92306 8.92321 7.10767V9.56921C8.92321 9.72306 9.04629 9.84614 9.2309 9.84614C9.38475 9.84614 9.53859 9.99998 9.53859 10.1846V10.8Z\" fill=\"#747474\"/>\n                  </svg>\n                </div>\n                <!-- <lib-booklet [bookletJSON]=\"field.pdfReferenceQuestions\"></lib-booklet> -->\n                <div *ngIf=\"field?.pdfReferenceQuestions\" class=\"form-preview\" style=\"padding: unset !important;\">\n                  <ng-container *ngFor=\"let pdfField of field?.pdfReferenceQuestions[field?.pdfReference]; let j = index\">\n                    <!-- AP-19MAR25 Line Element -->\n                    <div *ngIf=\"pdfField?.type === 'Line'\" class=\"line-field\" [ngStyle]=\"{ display: pdfField.isHidden ? 'none' : 'block' }\" [ngClass]=\"{'isPreview': isPreview}\"\n                      (click)=\"selectElement(i,j); $event.stopPropagation();\" [class.highlight]=\"selectedFieldIndex === j && !isPreview \"\n                      draggable=\"true && !isPreview \" (dragstart)=\"onDragStart($event, j)\" (dragover)=\"onDragOver($event, j)\"\n                      (drop)=\"onDrop($event, j)\">\n                      <hr class=\"custom-line\" style=\"display: inline-flex\" [ngStyle]=\"{\n                          'font-family': pdfField?.style?.font || 'Helvetica Neue',\n                          'font-weight': pdfField?.style?.bold ? '700' : '400',\n                          'font-size': (pdfField?.style?.fontSize || 12) + 'px',\n                          'width': (pdfField?.width || 100) + '%',\n                          'text-align': pdfField.textAlign || 'left',\n                          'border-radius': '5px',\n                          'border-style': (pdfField.lineStyle?.toLowerCase() || 'solid'),\n                          'color': pdfField?.style?.color || '#000000',\n                          'margin-top': (pdfField?.style?.paddingTop || 0) + 'px',\n                          'margin-bottom': (pdfField?.style?.paddingBottom ?? 10) + 'px'\n                        }\" />\n                    </div>\n\n                    <!--SKS25MAR25 Image Upload Element -->\n                    <div *ngIf=\"pdfField?.type === 'image'\" class=\"field-container\" [ngClass]=\"{'isPreview': isPreview}\" (click)=\"selectElement(i,j); $event.stopPropagation();\"\n                      [class.highlight]=\"selectedFieldIndex === j && !isPreview \"\n                      [ngStyle]=\"{\n                        'font-family': pdfField?.style?.font || 'Helvetica Neue',\n                        'font-size': (pdfField?.style?.fontSize || 12) + 'px',\n                        'width': (pdfField?.width || 100) + '%',\n                        'text-align': pdfField?.style?.alignment || '',\n                        'border-radius': '5px',\n                        \n                        'color': pdfField?.style?.color || '#000000',\n                         'font-style': pdfField?.style?.italic ? 'italic' : 'normal',\n                        'font-weight': pdfField?.style?.bold ? '700' : '400',\n                        'padding': \n                          (pdfField?.style?.margin?.[1] || 0) + 'px ' +\n                          (pdfField?.style?.margin?.[2] || 0) + 'px ' +\n                          (pdfField?.style?.margin?.[3] || 0) + 'px ' +\n                          (pdfField?.style?.margin?.[0] || 0) + 'px',\n                        \n                        \n                        display: pdfField.isHidden ? 'none' : 'block' \n                      }\" \n                      (mouseenter)=\"isImageHover = true;\"\n                      (mouseleave)=\"isImageHover = false;\">\n                      <div class=\"field-wrapper\" [ngClass]=\"{'isPreview': isPreview}\">\n                        <div class=\"field-content\">\n                          <div>\n                              <div class=\"logo-container\" [ngStyle]=\"{ 'justify-content': pdfField?.style?.alignment || '' }\">\n                                <div class=\"logo-preview\" *ngIf=\"pdfField.imageData\">\n                                  <div style=\"display: flex; justify-content: end;\">\n                                    <i (click)=\"onImageEdit(pdfField)\" class=\"fusion-icon nav-icon fusion-icon-edit_pencil\" style=\"margin: 0px !important; font-size: 16px !important; color: #787486;\"></i>\n                                    <svg (click)=\"onImageDelete(pdfField)\" width=\"16\" height=\"16\"\n                                      viewBox=\"0 0 16 16\" fill=\"none\" xmlns=\"http://www.w3.org/2000/svg\">\n                                      <path\n                                        d=\"M14 3.98726C11.78 3.76726 9.54667 3.65393 7.32 3.65393C6 3.65393 4.68 3.7206 3.36 3.85393L2 3.98726\"\n                                        stroke=\"#FF2C10\" stroke-width=\"1.5\" stroke-linecap=\"round\" stroke-linejoin=\"round\" />\n                                      <path\n                                        d=\"M5.6665 3.31362L5.81317 2.44028C5.91984 1.80695 5.99984 1.33362 7.1265 1.33362H8.87317C9.99984 1.33362 10.0865 1.83362 10.1865 2.44695L10.3332 3.31362\"\n                                        stroke=\"#FF2C10\" stroke-width=\"1.5\" stroke-linecap=\"round\" stroke-linejoin=\"round\" />\n                                      <path\n                                        d=\"M12.5667 6.09375L12.1334 12.8071C12.06 13.8537 12 14.6671 10.14 14.6671H5.86002C4.00002 14.6671 3.94002 13.8537 3.86668 12.8071L3.43335 6.09375\"\n                                        stroke=\"#FF2C10\" stroke-width=\"1.5\" stroke-linecap=\"round\" stroke-linejoin=\"round\" />\n                                      <path d=\"M6.88647 11.0004H9.10647\" stroke=\"#FF2C10\" stroke-width=\"1.5\" stroke-linecap=\"round\"\n                                        stroke-linejoin=\"round\" />\n                                      <path d=\"M6.3335 8.33325H9.66683\" stroke=\"#FF2C10\" stroke-width=\"1.5\" stroke-linecap=\"round\"\n                                        stroke-linejoin=\"round\" />\n                                    </svg>\n                                  </div>\n                                  <img [src]=\"pdfField.imageData\" [style.width.px]=\"pdfField.imageSize?.width || 100\" [style.height.px]=\"pdfField.imageSize?.height || 100\" />\n                                </div>\n\n                                <div *ngIf=\"!pdfField.imageData\" class=\"logo-upload-placeholder\">\n                                  <label for=\"logo-upload-{{j}}\" class=\"logo-upload-label\">\n                                    <img src=\"../assets/icons/Image.svg\" alt=\"Upload\" />\n                                    <span>{{ 'UPLOAD_IMAGE' | nxtCustomTranslate : 'Upload Image' }}</span>\n                                  </label>\n                                  <input type=\"file\" id=\"logo-upload-{{j}}\" accept=\"image/*\" (change)=\"fileChangeEvent(pdfField, $event)\"\n                                    style=\"display: none;\" />\n                                </div>\n                              </div>\n                          </div>\n                        </div>\n                      </div>\n                    </div>\n\n                    <!-- Space Element -->\n                    <div *ngIf=\"pdfField?.type === 'Space'\" class=\"field-container\" [ngClass]=\"{'isPreview': isPreview}\" (click)=\"selectElement(i,j); $event.stopPropagation();\"\n                      [ngStyle]=\"{\n                        'font-family': pdfField?.style?.font || 'Helvetica Neue',\n                        'font-size': (pdfField?.style?.fontSize || 12) + 'px',\n                        'width': (pdfField?.width || 100) + '%',\n                        'text-align': pdfField?.style?.alignment || '',\n                        'border-radius': '5px',\n                        \n                        'color': pdfField?.style?.color || '#000000',\n                         'font-style': pdfField?.style?.italic ? 'italic' : 'normal',\n                        'font-weight': pdfField?.style?.bold ? '700' : '400',\n                        'padding': \n                          (pdfField?.style?.margin?.[1] || 0) + 'px ' +\n                          (pdfField?.style?.margin?.[2] || 0) + 'px ' +\n                          (pdfField?.style?.margin?.[3] || 0) + 'px ' +\n                          (pdfField?.style?.margin?.[0] || 0) + 'px',\n                        \n                        \n                        display: pdfField.isHidden ? 'none' : 'block' \n                      }\" [class.highlight]=\"selectedFieldIndex === j && !isPreview \">\n                      <div class=\"field-wrapper\" style=\"height:93px\" [ngClass]=\"{'isPreview': isPreview}\">\n                        <div *ngIf=\"!isPreview \" class=\"field-content\">\n                          <div class=\"label-container\">\n                            <div class=\"top-right\" style=\"margin: -11px -11px 0 0;\">\n                              <img src=\"../assets/icons/drag-dots.svg\" alt=\"Drag\" class=\"drag-dot\" />\n                              <img src=\"../assets/icons/Trash.svg\" (click)=\"removeElement(pdfField, j)\" class=\"delete-icon\" />\n                            </div>\n                          </div>\n                        </div>\n                      </div>\n                    </div>\n\n                    <!-- Date -->\n                     <!-- display: pdfField.isHidden ? 'none' : 'block'  -->\n                    <div *ngIf=\"pdfField?.type === 'date' || pdfField?.type === 'currency' ||  pdfField?.type === 'boolean' || pdfField?.type === 'text'\" class=\"field-container\" [ngClass]=\"{'isPreview': isPreview}\" (click)=\"selectElement(i,j); $event.stopPropagation();\"\n                      [ngStyle]=\"{\n                        'font-family': pdfField?.style?.font || 'Helvetica Neue',\n                        'font-size': (pdfField?.style?.fontSize || 12) + 'px',\n                        'width': (pdfField?.width || 100) + '%',\n                        'border-radius': '5px',\n                        'color': pdfField?.style?.color || '#000000',\n                        'font-style': pdfField?.style?.italic ? 'italic' : 'normal',\n                        'font-weight': pdfField?.style?.bold ? '700' : '400',\n                        'padding': \n                          (pdfField?.style?.margin?.[1] || 0) + 'px '  +\n                          (pdfField?.style?.margin?.[2] || 0) + 'px '  +\n                          (pdfField?.style?.margin?.[3] || 0) + 'px '  +\n                          (pdfField?.style?.margin?.[0] || 0) + 'px ' ,\n                       }\"[class.highlight]=\"selectedFieldIndex === j && !isPreview \">\n                      <div class=\"field-wrapper\" [ngClass]=\"{'isPreview': isPreview}\">\n                        <div class=\"field-content\">\n                          <!-- AP-04JUN25 - replace custom date picker -->\n                          <nxt-input [type]=\"pdfField.type === 'boolean' ? 'checkbox' : pdfField?.type === 'text' ? 'textarea' : pdfField.type\" [mode]=\"'edit'\" [value]=\"pdfField.value\" [question]=\"pdfField\" [labelFont]=\"\"\n                            [labelColor]=\"\" [labelSize]=\"\" [inputValueSize]=\"\" [labelWeight]=\"\" [readOnly]=\"pdfField.isReadOnly\"\n                            [currency] = 'selectedCurrency' [label]=\"pdfField?.questionText\" (click)=\"pdfField?.type === 'text' ? openTextSettings(pdfField, $event) : ''\"\n                            [inputWeight]=\"\"  [showLabel]=\"pdfField?.questionText ? true : false\" inputBorder=\"none\" svgHeight=\"20px\" svgWidth=\"20px\"\n                            [placeholder]=\"pdfField.question ? pdfField.question : 'ENTER_YOUR_INPUT' | nxtCustomTranslate : 'Enter your input'\" [required]=\"\"\n                            inputBgColor=\"#ffffff\" [inputId]=\"\" [errorMessages]=\"{ required: 'This field is required' }\" [textAlign]=\"pdfField?.style?.alignment || ''\"\n                            [inputIconLeftSrc]=\"''\" (inputValue)=\"onQuestionChange($event.value, pdfField)\">\n                          </nxt-input>\n                        </div>\n                      </div>\n                      <!--AP-05JUN25 Text Settings Toolbar: Allows editing font size, bold/italic styles, alignment, and closing the toolbar for the selected column -->\n                      <div *ngIf=\"showTextSettings && isPreview && selectedColumn === pdfField\" class=\"text-settings-toolbar\"\n                        [ngStyle]=\"{\n                          position: 'absolute',\n                          background: '#fff',\n                          border: '1px solid #ccc',\n                          padding: '6px 10px',\n                          'border-radius': '4px',\n                          'box-shadow': '0 2px 6px rgba(0, 0, 0, 0.1)',\n                          'z-index': '65535',\n                          display: 'flex',\n                          'text-align': 'center',\n                          gap: '8px'\n                        }\">\n                    \n                        <!-- Font Size -->\n                        <select [(ngModel)]=\"selectedColumn.style.fontSize\" class=\"toolbar-select\">\n                          <option [value]=\"12\">12pt</option>\n                          <option [value]=\"14\">14pt</option>\n                          <option [value]=\"16\">16pt</option>\n                          <option [value]=\"18\">18pt</option>\n                          <option [value]=\"24\">24pt</option>\n                        </select>\n\n                        <!-- Text Color -->\n                        <label title=\"Text Color\" class=\"color-label\">\n                        <span class=\"color-box\" [style.color]=\"selectedColumn.style.color || '#000'\" (click)=\"textColorInput.click()\">A</span>\n                        <input #textColorInput type=\"color\" [(ngModel)]=\"selectedColumn.style.color\" (change)=\"updateContent()\" class=\"color-picker-hidden\"/>\n                        </label>\n\n                        <!-- Bold -->\n                        <button (click)=\"toggleStyle('bold')\" [class.active]=\"selectedColumn?.style?.bold\" class=\"toolbar-btn\">{{ 'BOLD' | nxtCustomTranslate : 'B' }}</button>\n                      \n                        <!-- Italic -->\n                        <button (click)=\"toggleStyle('italic')\" [class.active]=\"selectedColumn?.style?.italics\" class=\"toolbar-btn\"><i>{{ 'ITALIC' | nxtCustomTranslate : 'I' }}</i></button>\n\n                        <!-- Underline -->\n                        <!-- <button (click)=\"toggleStyle('underline')\" [class.active]=\"selectedColumn?.style?.underline\" class=\"toolbar-btn\"><u>U</u></button> -->\n                        <!-- Align Left -->\n                        <button (click)=\"setAlignment('left')\" [class.active]=\"selectedColumn?.style?.alignment === 'left'\" class=\"toolbar-btn\">\n                          <span class=\"material-icons\">{{ 'FORMAT_ALIGN_LEFT' | nxtCustomTranslate : 'format_align_left' }}</span>\n                        </button>\n                      \n                        <!-- Align Center -->\n                        <button (click)=\"setAlignment('center')\" [class.active]=\"selectedColumn?.style?.alignment === 'center'\" class=\"toolbar-btn\">\n                          <span class=\"material-icons\">{{ 'FORMAT_ALIGN_CENTER' | nxtCustomTranslate : 'format_align_center' }}</span>\n                        </button>\n                      \n                        <!-- Align Right -->\n                        <button (click)=\"setAlignment('right')\" [class.active]=\"selectedColumn?.style?.alignment === 'right'\" class=\"toolbar-btn\">\n                          <span class=\"material-icons\">{{ 'FORMAT_ALIGN_RIGHT' | nxtCustomTranslate : 'format_align_right' }}</span>\n                        </button>\n                    \n                        <!-- Close -->\n                        <button (click)=\"closeTextSettings()\" class=\"toolbar-btn\" style=\"margin-left: auto;\">✕</button>\n                      </div>  \n                    </div>\n                  </ng-container>\n                </div>\n              </div>\n            </div>\n          </div>\n  \n          <!--  Table  -->\n          <div *ngIf=\"field?.type === 'Table'\" class=\"field-container\" [ngClass]=\"{'isPreview': isPreview}\" [ngStyle]=\"{ display: field.isHidden ? 'none' : 'block' }\" (click)=\"selectElement(i)\"\n            [ngStyle]=\"{\n              'font-family': field?.style?.font || 'Helvetica Neue',\n              'font-size': (field?.style?.fontSize || 12) + 'px',\n              'width': (field?.width || 100) + '%',\n              'border-radius': '5px',\n              'color': field?.style?.color || '#000000',\n              'font-style': field?.style?.italic ? 'italic' : 'normal',\n              'font-weight': field?.style?.bold ? '700' : '400',\n              'padding': \n                (field?.style?.margin?.[1] || 0) + 'px '  +\n                (field?.style?.margin?.[2] || 0) + 'px '  +\n                (field?.style?.margin?.[3] || 0) + 'px '  +\n                (field?.style?.margin?.[0] || 0) + 'px ' ,\n            }\" [class.highlight]=\"selectedFieldIndex === i && !isPreview \"\n            draggable=\"true && !isPreview \" (dragstart)=\"onDragStart($event, i)\" (dragover)=\"onDragOver($event, i)\"\n            (drop)=\"onDrop($event, i)\">\n            <div class=\"field-wrapper\" style=\"overflow: hidden;\" [ngClass]=\"{'isPreview': isPreview}\">\n              <div class=\"field-content\">\n                <div *ngIf=\"!isPreview \" class=\"label2-container\">\n                  <div>\n                    <div *ngIf=\"field.questionText && field.type != 'checkbox'\" \n                      [ngStyle]=\"{\n                        'padding-top': field.type  === 'label' ? '10px' : '',\n                        \n                      }\"  [style.font-weight]=\"field.labelWeight ||  field.type  === 'label' ? 'bold' : 'normal'\" [style.font-size]=\"field.labelSize || field.type  === 'label' ? '16px' : '14px'\"\n                      style=\"display: flex; gap: 5px;\"> \n                      {{ field.questionText }}\n                      <div *ngIf=\"field.questionText && field.type  != 'checkbox' && field.required && field.showLabel \" style=\"color: red;\">*</div>\n                      <div *ngIf=\"field.questionText && field?.helpText\" [matTooltip]=\"field?.helpText\" matTooltipClass=\"white-tooltip\">\n                        <svg width=\"16\" height=\"16\" viewBox=\"0 0 16 16\" fill=\"none\" xmlns=\"http://www.w3.org/2000/svg\">\n                          <path fill-rule=\"evenodd\" clip-rule=\"evenodd\" d=\"M8.00009 0.615356C3.90779 0.615356 0.615479 3.90766 0.615479 7.99997C0.615479 12.0923 3.90779 15.3846 8.00009 15.3846C12.0924 15.3846 15.3847 12.0923 15.3847 7.99997C15.3847 3.90766 12.0924 0.615356 8.00009 0.615356ZM8.00012 13.5385C4.92319 13.5385 2.46165 11.0769 2.46165 8C2.46165 4.92307 4.92319 2.46153 8.00012 2.46153C11.077 2.46153 13.5386 4.92307 13.5386 8C13.5386 11.0769 11.077 13.5385 8.00012 13.5385ZM8.00027 4.33846C8.52335 4.33846 8.92335 4.73846 8.92335 5.26153C8.92335 5.78461 8.52335 6.18461 8.00027 6.18461C7.47719 6.18461 7.07719 5.78461 7.07719 5.26153C7.07719 4.73846 7.47719 4.33846 8.00027 4.33846ZM9.53859 10.8C9.53859 10.9538 9.41552 11.0769 9.2309 11.0769H6.76936C6.61552 11.0769 6.46167 10.9846 6.46167 10.8V10.1846C6.46167 10.0308 6.58475 9.84614 6.76936 9.84614C6.92321 9.84614 7.07706 9.75383 7.07706 9.56921V8.33844C7.07706 8.1846 6.95398 7.99998 6.76936 7.99998C6.61552 7.99998 6.46167 7.90767 6.46167 7.72306V7.10767C6.46167 6.95383 6.58475 6.76921 6.76936 6.76921H8.61552C8.76936 6.76921 8.92321 6.92306 8.92321 7.10767V9.56921C8.92321 9.72306 9.04629 9.84614 9.2309 9.84614C9.38475 9.84614 9.53859 9.99998 9.53859 10.1846V10.8Z\" fill=\"#747474\"/>\n                        </svg>\n                      </div>\n                    </div>\n                  </div>\n                  <div class=\"top-right\">\n                    <img src=\"../assets/icons/drag-dots.svg\" alt=\"Drag\" class=\"drag-dot\" />\n                    <img src=\"../assets/icons/Trash.svg\" (click)=\"removeElement(field, i)\" class=\"delete-icon\" />\n                  </div>\n                </div>\n                <div *ngIf=\"!field.questionText && field?.helpText\" style=\"display: flex; justify-content: flex-end;\">\n                  <svg  [matTooltip]=\"field?.helpText\" matTooltipClass=\"white-tooltip label-container\" width=\"16\" height=\"16\" viewBox=\"0 0 16 16\" fill=\"none\" xmlns=\"http://www.w3.org/2000/svg\">\n                    <path fill-rule=\"evenodd\" clip-rule=\"evenodd\" d=\"M8.00009 0.615356C3.90779 0.615356 0.615479 3.90766 0.615479 7.99997C0.615479 12.0923 3.90779 15.3846 8.00009 15.3846C12.0924 15.3846 15.3847 12.0923 15.3847 7.99997C15.3847 3.90766 12.0924 0.615356 8.00009 0.615356ZM8.00012 13.5385C4.92319 13.5385 2.46165 11.0769 2.46165 8C2.46165 4.92307 4.92319 2.46153 8.00012 2.46153C11.077 2.46153 13.5386 4.92307 13.5386 8C13.5386 11.0769 11.077 13.5385 8.00012 13.5385ZM8.00027 4.33846C8.52335 4.33846 8.92335 4.73846 8.92335 5.26153C8.92335 5.78461 8.52335 6.18461 8.00027 6.18461C7.47719 6.18461 7.07719 5.78461 7.07719 5.26153C7.07719 4.73846 7.47719 4.33846 8.00027 4.33846ZM9.53859 10.8C9.53859 10.9538 9.41552 11.0769 9.2309 11.0769H6.76936C6.61552 11.0769 6.46167 10.9846 6.46167 10.8V10.1846C6.46167 10.0308 6.58475 9.84614 6.76936 9.84614C6.92321 9.84614 7.07706 9.75383 7.07706 9.56921V8.33844C7.07706 8.1846 6.95398 7.99998 6.76936 7.99998C6.61552 7.99998 6.46167 7.90767 6.46167 7.72306V7.10767C6.46167 6.95383 6.58475 6.76921 6.76936 6.76921H8.61552C8.76936 6.76921 8.92321 6.92306 8.92321 7.10767V9.56921C8.92321 9.72306 9.04629 9.84614 9.2309 9.84614C9.38475 9.84614 9.53859 9.99998 9.53859 10.1846V10.8Z\" fill=\"#747474\"/>\n                  </svg>\n                </div>\n                <div class=\"nxt-table-container\">\n                  <nxt-datatable isButtons [question]=\"field\" from=\"formBuilder\" [mode]=\"'edit'\"\n                    [apiMeta]=\"field?.subText\" [tableConfig]=\"field.tableConfig\" tableId=\"\" direction=\"ltr\"\n                    tableWidth=\"auto\" isEditable=true isPreview=isPreview (columnSelected)=\"selectElement(i);columnSelected($event)\"\n                    [data]=\"field.value?.data\"\n                    [summaryValues]=\"field.value?.summaryValue\"\n                    (valueChange)=\"onQuestionChange($event, field)\"\n                    (removeColumn)=removeColumn($event)>\n                  </nxt-datatable>\n                </div>\n              </div>\n            </div>\n          </div>\n        </ng-container>\n      </div>\n      <div *ngIf=\"!isPropertyHide && isPreview\" style=\"width: 25%; margin-bottom:10px\">\n        <div style=\"padding-top: 0px; padding-bottom: 8px; padding-left: 8px;padding-right: 8px\">\n          <button class=\"priview-action-div\" style=\"background-color: #585653; color: #ffff;\" (click)=\"pdfSaveHandler('preview')\">{{ 'PREVIEW' | nxtCustomTranslate : 'Preview' }}</button>\n          <button class=\"priview-action-div\" style=\"background-color: #585653; color: #ffff\" (click)=\"pdfSaveHandler('download')\">{{ 'DOWNLOAD' | nxtCustomTranslate : 'Download' }}</button>\n          <div class=\"color-picker\">\n            <label>Change Color</label>\n            <div class=\"colors\">\n              <!-- Default colors -->\n              <div class=\"color-swatch\" *ngFor=\"let color of defaultColors\" \n                   [style.background]=\"color\"\n                   (click)=\"selectColor(color)\">\n              </div>\n          \n              <!-- Last box: custom color picker with eyedropper -->\n              <label class=\"color-swatch custom-picker\">\n                <svg xmlns=\"http://www.w3.org/2000/svg\" shape-rendering=\"geometricPrecision\" text-rendering=\"geometricPrecision\" image-rendering=\"optimizeQuality\" fill-rule=\"evenodd\" clip-rule=\"evenodd\" viewBox=\"0 0 512 512\"><path fill=\"#FC3E81\" d=\"M171.11 171.836L74.204 75.761c.258-.26.517-.521.777-.78C124.688 25.274 189.751.292 254.899.013l.587 136.448c-32.992.139-62.827 13.641-84.376 35.375z\"/><path fill=\"#FD6096\" d=\"M255.486 136.461L254.899.003 256 0c70.296 0 133.967 28.342 180.232 74.212l-96.068 96.898c-21.605-21.421-51.337-34.655-84.164-34.655-.172 0-.343.005-.514.006z\"/><path fill=\"#F9B200\" d=\"M340.164 171.11l96.075-96.906c.26.258.521.517.78.777 49.707 49.707 74.689 114.77 74.968 179.918l-136.448.587c-.139-32.992-13.641-62.827-35.375-84.376z\"/><path fill=\"#C0FF66\" d=\"M375.539 255.486l136.458-.587L512 256c0 70.296-28.342 133.967-74.212 180.232l-96.898-96.068c21.421-21.605 34.655-51.337 34.655-84.164 0-.172-.005-.343-.006-.514z\"/><path fill=\"#1DD1D9\" d=\"M340.89 340.164l96.906 96.075c-.258.26-.517.521-.777.78-49.707 49.707-114.77 74.689-179.918 74.968l-.587-136.448c32.992-.139 62.827-13.641 84.376-35.375z\"/><path fill=\"#64BDFF\" d=\"M256.514 375.539l.587 136.458L256 512c-70.296 0-133.967-28.342-180.232-74.212l96.068-96.898c21.605 21.421 51.337 34.655 84.164 34.655.172 0 .343-.005.514-.006z\"/><path fill=\"#43A3F9\" d=\"M171.836 340.89l-96.075 96.906c-.26-.258-.521-.517-.78-.777C25.274 387.312.292 322.249.013 257.101l136.448-.587c.139 32.992 13.641 62.827 35.375 84.376z\"/><path fill=\"#7884EA\" d=\"M136.461 256.514l-136.458.587L0 256c0-70.296 28.342-133.967 74.212-180.232l96.898 96.068c-21.421 21.605-34.655 51.337-34.655 84.164 0 .172.005.343.006.514z\"/></svg>\n                <input type=\"color\" (change)=\"selectColor($event.target.value)\">\n              </label>\n            </div>\n          </div> \n           <!-- SKS22JUL25 Dropdown -->\n           <nxt-dropdown  \n              [options]=\"currencyOptions\"\n              [id]=\"bookletId\" \n              [selectedValue]=\"selectedCurrency\"\n              [labelColor]=\"'#ffff'\"\n              [inputTextColor]=\"'#ffff'\"\n              [inputBgColor]=\"'#585653'\"\n              placeholder=\"\" [from]=\"'normalDropDown'\"\n              [apiMeta] = \"{'field': 'name','isObject': true}\"\n              (valueChange)=\"currencyChange($event.value.valueObj)\">\n          </nxt-dropdown>    \n        </div>\n      </div>\n    </div>\n  </div>\n  <!-- SKS13MAR25 popup conformation box -->\n  <div class=\"dialog-overlay\" *ngIf=\"isSelectTablePopup\">\n    <div class=\"dialog-box\">\n      <button class=\"close-btn-fb\" (click)=\"onClose()\">✕</button>\n      <p>{{ 'ADD_TABLE_CONFIRMATION' | nxtCustomTranslate : 'These element want to add a table' }}</p>\n      <div class=\"button-container-fb\">\n        <button class=\"yes-btn-fb\" (click)=\"addOnTable()\">{{ 'YES' | nxtCustomTranslate : 'Yes' }}</button>\n        <button class=\"no-btn-fb\" (click)=\"onClose()\">{{ 'NO' | nxtCustomTranslate : 'No' }}</button>\n      </div>\n    </div>\n  </div>\n  <app-pdf-properties *ngIf=\"!isPreview \" (formButtonHandler)=\"pdfSaveHandler($event)\"></app-pdf-properties>\n</div>\n<!--SKS25MAR25 Modal Overlay -->\n<div class=\"modal-overlay\" *ngIf=\"isImageEdit\">\n  <div class=\"modal-content\">\n      <span class=\"close-button\" (click)=\"closeModal()\">×</span>\n      <!-- Image Editor -->\n      <div *ngIf=\"selectedImageElement?.type === 'image'\">\n        <div style=\"height: 200px;\">\n          <image-cropper *ngIf=\"selectedImageElement.imageData\" [imageBase64]=\"selectedImageElement.orgImageData\"\n              [disabled]=\"false\" [alignImage]=\"alignImage\" [roundCropper]=\"roundCropper\" [backgroundColor]=\"'white'\"\n              imageAltText=\"{{ 'ALTERNATIVE_IMAGE_TEXT' | nxtCustomTranslate : 'Alternative image text' }}\" [allowMoveImage]=\"false\" [hideResizeSquares]=\"false\"\n              [canvasRotation]=\"canvasRotation\" [aspectRatio]=\"aspectRatio\" [containWithinAspectRatio]=\"false\"\n              [maintainAspectRatio]=\"false\" [cropperStaticWidth]=\"cropperStaticWidth\"\n              [cropperStaticHeight]=\"cropperStaticHeight\" [cropperMinWidth]=\"cropperMinWidth\"\n              [cropperMinHeight]=\"cropperMinHeight\" [cropperMaxWidth]=\"cropperMaxWidth\"\n              [cropperMaxHeight]=\"cropperMaxHeight\" [resetCropOnAspectRatioChange]='true' [(cropper)]=\"cropper\"\n              [(transform)]=\"transform\" [onlyScaleDown]=\"true\" output=\"blob\" format=\"png\"\n              (imageCropped)=\"imageCropped($event)\" (cropperReady)=\"cropperReady($event)\">\n          </image-cropper>\n        </div>\n          <!-- Controls -->\n          <div *ngIf=\"selectedImageElement.imageData\" class=\"controls\">\n            <div class=\"cursor-pointer logo-icon\" (click)=\"rotateLeft()\" title=\"{{ 'ROTATE_LEFT' | nxtCustomTranslate : 'Rotate Left' }}\">⟲</div>\n            <div class=\"cursor-pointer logo-icon\" (click)=\"rotateRight()\" title=\"{{ 'ROTATE_RIGHT' | nxtCustomTranslate : 'Rotate Right' }}\">⟳</div>\n            <div class=\"cursor-pointer logo-icon\" (click)=\"zoomOut()\" title=\"{{ 'ZOOM_OUT' | nxtCustomTranslate : 'Zoom Out' }}\">-</div>\n            <div class=\"cursor-pointer logo-icon\" (click)=\"zoomIn()\" title=\"{{ 'ZOOM_IN' | nxtCustomTranslate : 'Zoom In' }}\">+</div>\n            <div class=\"cursor-pointer logo-icon\" (click)=\"moveLeft()\" title=\"{{ 'MOVE_LEFT' | nxtCustomTranslate : 'Move Left' }}\">←</div>\n            <div class=\"cursor-pointer logo-icon\" (click)=\"moveRight()\" title=\"{{ 'MOVE_RIGHT' | nxtCustomTranslate : 'Move Right' }}\">→</div>\n            <div class=\"cursor-pointer logo-icon\" (click)=\"moveUp()\" title=\"{{ 'MOVE_UP' | nxtCustomTranslate : 'Move Up' }}\">↑</div>\n            <div class=\"cursor-pointer logo-icon\" (click)=\"moveDown()\" title=\"{{ 'MOVE_DOWN' | nxtCustomTranslate : 'Move Down' }}\">↓</div>\n            <div class=\"cursor-pointer logo-icon\" (click)=\"flipHorizontal()\" [class.enabled]=\"transform.flipH\"\n              title=\"{{ 'FLIP_HORIZONTALLY' | nxtCustomTranslate : 'Flip Horizontally' }}\">↔</div>\n            <div class=\"cursor-pointer logo-icon\" (click)=\"flipVertical()\" [class.enabled]=\"transform.flipV\"\n              title=\"{{ 'FLIP_VERTICALLY' | nxtCustomTranslate : 'Flip Vertically' }}\">↕</div>\n            <div class=\"cursor-pointer logo-icon\" (click)=\"resetImage()\" title=\"{{ 'RESET' | nxtCustomTranslate : 'Reset' }}\">×</div>\n          </div>\n      </div>\n  </div>\n</div>","//AP-25JUN25- common-fields.constants.ts\n\nexport const COMMON_ELEMENT_PROPS = [\n  { label: 'Is Label', placeholder: 'Enter Text', type: 'checkbox', key: 'style.showLabel', labelPath: 'IS_LABEL' },\n  { label: 'primaryKey', placeholder: 'Enter Text', type: 'checkbox', key: 'primaryKey', labelPath: 'PRIMARY_KEY' },\n  { label: 'Label', placeholder: 'Field label', type: 'text', key: 'questionText', isTranslate: true, labelPath: 'LABEL' },\n  { label: 'Place Holder', placeholder: 'Enter Text', type: 'text', key: 'question', isTranslate: true, labelPath: 'PLACE_HOLDER' },\n  // { label: 'Element', type: 'number', key: 'questionNumber', labelPath: 'ELEMENT' },\n  { label: 'Size', type: 'number', key: 'size', labelPath: 'SIZE' },\n  { // SKS12FEB26 type dropdown\n    label: 'Type', type: 'select', key: 'type', required: true, labelPath: 'Type',\n    options:[\n      { label: 'Book', value: 'Book', labelPath: 'BOOK' },\n      { label: 'File', value: 'File', labelPath: 'FILE' },\n      { label: 'Checkbox', value: 'Checkbox', labelPath: 'CHECKBOX' },\n      { label: 'Radio', value: 'Radio', labelPath: 'RADIO' },\n      { label: 'List', value: 'List', labelPath: 'LIST' },\n      { label: 'Dropdown', value: 'Dropdown', labelPath: 'DROPDOWN' },\n      { label: 'Multi Select', value: 'MultiSelect', labelPath: 'MULTI_SELECT' },\n      { label: 'Table', value: 'Table', labelPath: 'TABLE' },\n      { label: 'Text', value: 'Text', labelPath: 'TEXT' },\n      { label: 'Currency', value: 'currency', labelPath: 'CURRENCY' },\n      { label: 'Icon', value: 'Icon', labelPath: 'ICON' },\n      { label: 'Line', value: 'Line', labelPath: 'LINE' },\n      { label: 'Image', value: 'Image', labelPath: 'IMAGE' },\n      { label: 'Space', value: 'Space', labelPath: 'SPACE' },\n      { label: 'Boolean', value: 'Boolean', labelPath: 'BOOLEAN' },\n      { label: 'Calendar', value: 'Calendar', labelPath: 'CALENDAR' },\n      { label: 'Date', value: 'Date', labelPath: 'DATE' },\n      { label: 'Time', value: 'Time', labelPath: 'TIME' },\n      { label: 'DateTime', value: 'DateTime', labelPath: 'DATE_TIME' },\n      { label: 'Month', value: 'month', labelPath: 'MONTH' },\n      { label: 'Email', value: 'Email', labelPath: 'EMAIL' },\n      { label: 'Number', value: 'Number', labelPath: 'NUMBER' },\n      { label: 'TextArea', value: 'TextArea', labelPath: 'TEXT_AREA' },\n      { label: 'RichTextArea', value: 'RichTextArea', labelPath: 'RICH_TEXT_AREA' },\n      { label: 'Label', value: 'Label', labelPath: 'LABEL' }\n    ]    \n  },\n];\n  \nexport const COMMON_FIELD_PROPS = [\n  { label: '', type: 'toggleGroup', key: 'toggleOptions', labelPath: '' },\n  { label: 'Help Text', placeholder: 'Enter Text', type: 'text', key: 'helpText', isTranslate: true, labelPath: 'HELP_TEXT' },\n  { label: 'Default Value', placeholder: 'Enter Text', type: 'text', key: 'defaultValue', labelPath: 'DEFAULT_VALUE' },\n  { label: 'Reference Field', placeholder: 'Reference Field', type: 'text', key: 'referenceField', labelPath: 'REFERENCE_FIELD' },\n  {\n    label: 'Sub Text', type: 'subQuestion', key: 'isSubText', labelPath: 'SUB_TEXT',\n    subQuestion: [\n      { label: 'End Point', placeholder: 'endpoint', type: 'text', key: 'subText.endpoint', labelPath: 'END_POINT' },\n      { label: 'Variable', placeholder: 'variable', type: 'text', key: 'subText.variable', labelPath: 'VARIABLE' },\n      { label: 'Field', placeholder: 'field', type: 'text', key: 'subText.field', labelPath: 'FIELD' },\n      { label: 'Default Field', placeholder: 'defaultField', type: 'text', key: 'subText.defaultField', labelPath: 'DEFAULT_FIELD' },\n      { label: 'Is Object', placeholder: 'Is Object', type: 'boolean', key: 'subText.isObject', labelPath: 'IS_OBJECT' },\n      { label: 'Group Field', placeholder: 'Group Field', type: 'text', key: 'subText.groupField', labelPath: 'GROUP_FIELD' },\n      { label: 'Child Group Field', placeholder: 'Child Group Field', type: 'text', key: 'subText.childGroupField', labelPath: 'CHILD_GROUP_FIELD' },\n      { label: 'Is Currency Field', placeholder: 'Is Currency Field', type: 'boolean', key: 'subText.isCurrencyField', labelPath: 'IS_CURRENCY_FIELD' },\n      { label: 'Single Field Disable', placeholder: 'Single Field Disable', type: 'boolean', key: 'subText.singleFieldDisable', labelPath: 'SINGLE_FIELD_DISABLE' },\n      { label: 'Post Reference Field', placeholder: 'Post Reference Field', type: 'text', key: 'subText.postReferenceField', labelPath: 'POST_REFERENCE_FIELD' },\n      { label: 'Label Field', placeholder: 'labelField', type: 'text', key: 'subText.labelField', labelPath: 'LABEL_FIELD' },\n      { label: 'Value Field', placeholder: 'valueField', type: 'text', key: 'subText.valueField', labelPath: 'VALUE_FIELD' },\n      { label: 'Source Question Id', placeholder: 'sourceQuestionId', type: 'text', key: 'subText.sourceQuestionId', labelPath: 'SOURCE_QUESTION_ID' },\n      { label: 'Dependent Value', placeholder: 'dependentValue', type: 'text', key: 'subText.dependentValue', labelPath: 'DEPENDENT_VALUE' },\n      { label: 'Dependent Field', placeholder: 'isDependentField', type: 'boolean', key: 'subText.isDependentField', labelPath: 'DEPENDENT_FIELD' },\n      { label: 'Query Parameter', placeholder: 'field', type: 'text', key: 'subText.queryParameter', labelPath: 'QUERY_PARAMETER' },\n      { label: 'Query Field', placeholder: 'queryField', type: 'text', key: 'subText.queryField', labelPath: 'QUERY_FIELD' },\n      { label: 'Query Value', placeholder: 'queryValue', type: 'text', key: 'subText.queryValue', labelPath: 'QUERY_VALUE' },\n      { label: 'Query Value Ref', placeholder: 'queryValueRef', type: 'text', key: 'subText.queryValueReference', labelPath: 'QUERY_VALUE_REF' },\n      { label: 'Unique Key', placeholder: 'uniqueKey', type: 'text', key: 'subText.uniqueKey', labelPath: 'UNIQUE_KEY' },\n      { label: 'Allowed Types', placeholder: '.jpg,.png,.pdf', type: 'text', key: 'subText.allowedTypes' },\n      { label: 'Max File Size', placeholder: 'Max file size in MB', type: 'number', key: 'subText.maxFileSize' },\n      { label: 'Max Files', placeholder: 'Max files', type: 'number', key: 'subText.maxFiles' },\n      { label: 'Drag And Drop', placeholder: 'dragAndDrop', type: 'boolean', key: 'subText.dragAndDrop', labelPath: 'DRAG_AND_DROP' },\n      { label: 'save To Backend', placeholder: 'Save To Backend', type: 'text', key: 'subText.saveToBackend' }\n    ]\n  }\n];\n  \nexport const COMMON_APPEARANCE_PROPS = [\n  { label: 'Type', type: 'text', key: 'type', required: true, labelPath: 'Type'},\n  {\n    label: 'Select Font', type: 'select', key: 'font', required: true, labelPath: 'SELECT_FONT',\n    options: [\n      { label: 'Helvetica Neue', value: 'Helvetica Neue', labelPath: 'HELVETICA_NEUE' },\n      { label: 'Arial', value: 'Arial', labelPath: 'ARIAL' },\n      { label: 'Times New Roman', value: 'Times New Roman', labelPath: 'TIMES_NEW_ROMAN' },\n      { label: 'Roboto', value: 'Roboto', labelPath: 'ROBOTO' }\n    ]\n  },\n  { label: 'Font Color', type: 'color', key: 'color', required: true, labelPath: 'FONT_COLOR' },\n  {\n    label: 'Font Size', type: 'select', key: 'fontSize', required: true, labelPath: 'FONT_SIZE',\n    options: [\n      { label: 'Small', value: '12px', labelPath: 'SMALL' },\n      { label: 'Medium', value: '14px', labelPath: 'MEDIUM' },\n      { label: 'Large', value: '16px', labelPath: 'LARGE' }\n    ]\n  },\n  {\n    label: 'Font Width', type: 'select', key: 'fontWeight', required: true, labelPath: 'FONT_WIDTH',\n    options: [\n      { value: '400', label: '400-Normal', labelPath: '400_NORMAL' },\n      { value: '500', label: '500-Medium', labelPath: '500_MEDIUM' },\n      { value: '600', label: '600-Semi Bold', labelPath: '600_SEMI_BOLD' },\n      { value: '700', label: '700-Bold', labelPath: '700_BOLD' }\n    ]\n  },\n  { label: 'Duplicate Field', type: 'button-toggle', key: 'duplicateField', defaultValue: false, labelPath: 'DUPLICATE_FIELD' }\n];\n\nexport const COMMON_OPTIONS_FIELD = [\n  {\n    label: 'Options', type: 'options-type', key: 'options', addOptionLabel: 'Add Option', icon: 'plus', labelPath: 'OPTIONS', addOptionLabelPath: 'ADD_OPTION'\n  }\n];\nexport const COMMON_COLUMN_FIELD = [\n  {\n    label: 'headerLabels', placeholder: 'Enter here', type: 'text', targetArray: 'fieldsMeta', targetArrayKey: 'uniqueIdentifier', key: 'label', isTranslate: true, labelPath: 'HEADER_LABELS'\n  },\n  {\n    label: 'apiName', placeholder: 'Enter here', type: 'text', targetArray: 'fieldsMeta', targetArrayKey: 'uniqueIdentifier', key: 'apiName', labelPath: 'API_NAME'\n  },\n  // SKS16OCT25 table column formula generation config\n  {\"label\": \"Formula\", \"placeholder\": \"Enter here\", \"type\": \"formula\", \"targetArray\": \"fieldsMeta\", \"targetArrayKey\": \"uniqueIdentifier\", \"key\": \"formula\"},\n  {\n    label: 'Summary Column', placeholder: 'Summary Column', type: 'subQuestion', targetArray: 'fieldsMeta', targetArrayKey: 'uniqueIdentifier', key: 'summaryColumn', labelPath: 'SUMMARY_COLUMN',\n    subQuestion: [\n      { label: 'Type', placeholder: 'Enter here', type: 'text', targetArray: 'fieldsMeta', targetArrayKey: 'uniqueIdentifier', key: 'fldType', labelPath: 'TYPE' },\n      { label: 'Operation', placeholder: 'Enter here', type: 'text', targetArray: 'fieldsMeta', targetArrayKey: 'uniqueIdentifier', key: 'operation', labelPath: 'OPERATION' },\n      { label: 'Operands', placeholder: 'Enter here', type: 'array', targetArray: 'fieldsMeta', targetArrayKey: 'uniqueIdentifier', key: 'operands', labelPath: 'OPERANDS' }\n    ]\n  },\n  {\n    label: 'Summary Row', placeholder: 'Summary Row', type: 'subQuestion', targetArray: 'fieldsMeta', targetArrayKey: 'uniqueIdentifier', key: 'summaryRow', labelPath: 'SUMMARY_ROW',\n    subQuestion: [\n      { label: 'Type', placeholder: 'Enter here', type: 'text', targetArray: 'fieldsMeta', targetArrayKey: 'uniqueIdentifier', key: 'fldType', labelPath: 'TYPE' },\n      { label: 'operation', placeholder: 'operation', type: 'text', targetArray: 'fieldsMeta', targetArrayKey: 'uniqueIdentifier', key: 'operation', labelPath: 'OPERATION' },\n      { label: 'column', placeholder: 'Enter here', type: 'radio', targetArray: 'fieldsMeta', targetArrayKey: 'uniqueIdentifier', key: 'column', labelPath: 'COLUMN' },\n      { label: 'operands', placeholder: 'Enter here', type: 'array', targetArray: 'fieldsMeta', targetArrayKey: 'uniqueIdentifier', key: 'operands', labelPath: 'OPERANDS' }\n    ]\n  }\n]","// AP 22JAN25\nimport { Injectable } from '@angular/core';\nimport { BehaviorSubject, Observable } from 'rxjs';\nimport { ElementComponent } from '../../pages/builder/element/element.component';\nimport { HttpClient } from '@angular/common/http';\ninterface FormElement {\n  action: any;\n  id: any;\n  type: string;\n  name: any;\n  questionText?: string;\n  question?: string;\n  helpText?: string;\n  errorMessage?: string;\n  isReadOnly?: boolean;\n  isHidden?: boolean;\n  required?: boolean;\n  referenceField?: any;\n  additionalRichContent?: any;\n  groupName?: any;\n  isDateBackward?: boolean;\n  title?: any;\n  subTitle?: any;\n  size?: number;\n  isDateForward?: boolean;\n  isOptional?: boolean;\n  isTitle?: boolean;\n  nextQuestion?: any;\n  allowedFileExtensions?: any;\n  questionNumber?: number;\n  order: number;\n  questionBookId?: any;\n  fieldsMeta?: any;\n  trackingId?: any;\n  recordId?: any;\n  qbReference?: any;\n  qbReferenceQuestions?: any;\n  primaryKey: boolean,\n  style: {\n    labelClass: any,\n    labelStyle: any,\n    labelValueStyle: any,\n    inputClass: any,\n    inputStyle: any,\n    showLabel: boolean,\n    bookStyle: any,\n    direction: any,\n    questionStyle: any,\n  },\n    // AP 25FEB25 - options array\n  options?: Array<{\n    value: string;\n    label:  string;\n    uniqueIdentifier: any;\n    id: any;\n  }>;\n  subText: any\n}\n@Injectable({\n  providedIn: 'root',\n})\nexport class FormBuilderService {\n  private formElements: FormElement[] = [];\n  private formElementsSubject = new BehaviorSubject<FormElement[]>([]);\n  private selectedElementSubject = new BehaviorSubject<number>(-1);\n  private selectHeaderSubject = new BehaviorSubject<any>(null);\n  private actionSubject = new BehaviorSubject<any>(null);\n  private elementComponent: ElementComponent | null = null;\n  book: any;\n  unique_id: any;\n\n  formElements$ = this.formElementsSubject.asObservable();\n  selectedElement$ = this.selectedElementSubject.asObservable();\n  selectHeaderSubject$ = this.selectHeaderSubject.asObservable();\n  actionSubject$ = this.actionSubject.asObservable();\n  currentElement: any;\n  selectTableColumn: any;\n\n  constructor(private http: HttpClient) {\n    // Load saved elements from localStorage\n    this.formElements = [];\n    const savedFormElements = localStorage.getItem('formElements');\n    if (savedFormElements) {\n      this.formElements = JSON.parse(savedFormElements);\n      this.formElementsSubject.next([...this.formElements]);\n    }\n  }\n \n  intializeBook(book: any) {\n    // AP 13MAR25 - Get the unique id in the bookQuestionsMap \n    this.unique_id = Object.keys(book.bookQuestionsMap)[0];\n    let tempbook = book.bookQuestionsMap[this.unique_id].subQuestions;\n    // SKS28MAR25 update nested book QuestionsMap\n    tempbook.forEach((element) => {\n      if (element.type === \"book\" && element.qbReference) {\n        this.getRefQbData(element.qbReference).subscribe(\n          (response) => {\n            element['qbReferenceQuestions'] = response; // Assign response to qbReferenceQuestions\n          },\n          (error) => {\n            console.error(\"API Error:\", error);\n          }\n        );\n      }\n    });\n    book.bookQuestionsMap[this.unique_id].subQuestions = tempbook\n    this.book = book\n\n    this.book.bookQuestionsMap[this.unique_id]?.subQuestions?.forEach(element => {\n      this.addElement(element);\n    });\n    let translationMap: any = this.book.translationMap || { en: {} };\n    if(!translationMap.en) translationMap['en'] = {}\n    const keysToTranslate = ['questionText', 'helpText', 'question', 'label'];\n    this.book.bookQuestionsMap[this.unique_id]?.subQuestions?.forEach(element => {\n      translationMap.en[element.id] = {}; \n      keysToTranslate.forEach(key => {\n        if (element[key] !== undefined && element[key] !== null && typeof element[key] === 'string') {\n          translationMap.en[element.id][key] = element[key];\n        }\n      });\n      if(element?.['options'] !== undefined && element?.['options'] !== null &&  Array.isArray(element['options'])){\n        element['options'].forEach(opt => {\n          if (opt.label !== undefined && opt.label !== null && typeof opt.label === 'string') {\n            translationMap.en[opt.id] = translationMap.en[opt.id] ?? {};\n            translationMap.en[opt.id]['label'] = opt.label;\n          }\n        })\n      }\n      if(element.type === 'Table' && element?.fieldsMeta){\n        if(!Array.isArray(element?.fieldsMeta) && typeof element?.fieldsMeta === 'string'){\n          element.fieldsMeta = JSON.parse(element?.fieldsMeta)\n        }\n        element?.fieldsMeta?.forEach(field => {\n          translationMap.en[field.uniqueIdentifier] = {}; \n          keysToTranslate.forEach(key => {\n            if (field[key] !== undefined && field[key] !== null && typeof field[key] === 'string') {\n              if(key !== 'question') translationMap.en[field.uniqueIdentifier][key] = field[key];\n            }\n          });\n          if(field?.question?.['options'] !== undefined && field?.question?.['options'] !== null &&  Array.isArray(field?.question?.['options'])){\n            field.question['options'].forEach(opt => {\n              if (opt.label !== undefined && opt.label !== null && typeof opt.label === 'string') {\n                translationMap.en[opt.id] = translationMap.en[opt.id] ?? {};\n                translationMap.en[opt.id]['label'] = opt.label;\n              }\n            })\n          }\n        });\n      }\n    });\n    this.book?.questionbook?.action?.forEach((act: any) =>{\n      const val = translationMap.en[act.id];\n      if (!val || typeof val !== 'object') {\n        translationMap.en[act.id] = {};\n      }\n      translationMap.en[act.id].name = act.name;\n    })\n    this.book['translationMap'] = translationMap\n  }\n\n  //SKS28MAR25 Function to fetch refqb data\n  getRefQbData(refqbid: string): Observable<any> {\n    return this.http.get<any>(`https://dev-api.valarhr.com/nxt?name=${refqbid}`);\n  }\n\n   //AP-17APR25 Function to generate unique id\n   addElementWithId(): string {\n    const prefix = 'ngnxt'; \n    const chars = 'ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789';\n    let core = '';\n    for (let i = 0; i < 14; i++) {\n      core += chars.charAt(Math.floor(Math.random() * chars.length));\n    }\n    return prefix + core; \n  }\n  // AP 23MAY25 Updates the questionbook action buttons: adds or removes based on action type\n  updateQuestionBookActionButtons(button: any,action: string): void {\n    if (!this.book.questionbook) {\n      this.book.questionbook = {};\n    }\n    if(action === 'add') {\n      if(!this.book.questionbook.action) this.book.questionbook.action = []\n      this.book.questionbook.action.push(button);\n    }else if(action === 'remove') {\n      if(!this.book.questionbook.action) this.book.questionbook.action = []\n      this.book.questionbook.action = this.book.questionbook.action.filter((item: any) => item.id !== button.id);\n    }\n    this.actionSubject.next(this.book);\n  }\n  \n  newBook() {\n    this.unique_id = this.addElementWithId();\n    this.book = {\n      'translationMap':{'en':{\n        1: {\"name\" : \"Cancel\"},\n        2: {\"name\": \"Save\"}\n      }},\n      'bookQuestionsMap': {\n        [this.unique_id]: {\n          'subQuestions': [],\n          'type': 'Book'\n        }\n      },\n      'questionbook': {\n        \"action\": [\n            {\n              \"name\": \"Cancel\",\n              \"eventtoemit\": \"close\",\n              \"alt\": \"\",\n              \"positionPercent\": 3,\n              \"width\": 100,\n              \"textColor\": \"#0275ff\",\n              \"borderRadius\": 6,\n              \"id\": 1,\n              \"borderColor\": \"#000000\",\n              \"bgColor\": \"#ffffff\",\n              \"borderSize\": 1\n          },\n          {\n            \"name\": \"Save\",\n            \"eventtoemit\": \"submit\",\n            \"alt\": \"\",\n            \"endpoint\": \"\",\n            \"method\": \"POST\",\n            \"positionPercent\": 14,  \n            \"width\": 100,\n            \"textColor\": \"#ffffff\",\n            \"borderRadius\": 6,\n            'id': 2,\n          }\n        ]\n      },\n      'records': [{\n        'id': this.unique_id,\n        'title': 'Untitled',\n        'subQuestions': [{}]\n      }]\n    }\n  }\n  // AP 26FEB25 - clear the form elements \n  clearElements() {\n    this.book = {}\n    this.formElements = [];\n    this.formElementsSubject.next([...this.formElements]);\n  }\n  // Get the element component reference\n  getElementComponent(): ElementComponent | null {\n    return this.elementComponent;\n  }\n\n  setElementComponent(component: ElementComponent) {\n    this.elementComponent = component;\n  }\n\n  // Add a new element to the form\n  addElement(element: FormElement): void {\n    if (!element.options) {\n      element.options = []; // options is initialized\n    }\n    element['questionBookId'] = this.unique_id;\n    this.formElements.push(element);\n    this.formElementsSubject.next([...this.formElements]);\n    if(this.book?.bookQuestionsMap[Object.keys(this.book.bookQuestionsMap)[0]]?.subQuestions) this.book.bookQuestionsMap[Object.keys(this.book.bookQuestionsMap)[0]].subQuestions = this.formElements\n  }\n  // SKS13MAR25 add table element\n  addTableElement(element: any, ind :any) {\n    //SKS13MAR25 Ensure currentElement exists\n    if (!this.currentElement) return;\n    // Clone elements array\n    const elements = [...this.getElements()];\n\n    // SKS13MAR25 Find the element and update its columns\n    const index = elements.findIndex(el => el.id === this.currentElement.id);\n\n    let tempFieldsMeta = {\n      label: element.label,\n      apiName: element.fieldName,\n      isdeleted: false,\n      orderbyflag: false,\n      filterflag: false,\n      outputFlag: true,\n      ischild: false,\n      resultantflag: false,\n      searchflag: false,\n      fldType: element.type,\n      readOnly: false,\n      uniqueIdentifier: element.id,\n      question:{\n        style: {\n          labelClass: null,\n          labelStyle: null,\n          labelValueStyle: null,\n          inputClass: null,\n          inputStyle: null,\n          showLabel: true,\n          bookStyle: null,\n          direction: \"ltr\",\n          questionStyle: null,\n        },\n        subText: {\n          endpoint: null,\n          variable: null,\n          field: null,\n          defaultField: null,\n          sourceQuestionId: null,\n          valueField: null,\n          labelField: null,\n          isDependentField: false,\n          dependentValue: null,\n          queryField: null,\n          queryValue: null,\n          queryValueReference: null,\n          uniqueKey: null,\n        },\n        options:[]\n      }\n    };    \n    let fieldsMeta = [...(Array.isArray(this.formElements[index].fieldsMeta) ? this.formElements[index].fieldsMeta : (typeof this.formElements[index].fieldsMeta === 'string' ? (JSON.parse(this.formElements[index].fieldsMeta)) : [this.formElements[index].fieldsMeta])), tempFieldsMeta];\n\n    if (index !== -1) {\n      elements[index] = { ...elements[index], fieldsMeta: fieldsMeta };\n    }\n\n    // Emit the updated form elements\n    // this.formElementsSubject.next(elements);\n    this.formElements = elements;\n    if(this.book?.bookQuestionsMap[Object.keys(this.book.bookQuestionsMap)[0]]?.subQuestions) this.book.bookQuestionsMap[Object.keys(this.book.bookQuestionsMap)[0]].subQuestions = this.formElements\n    this.formElementsSubject.next([...elements]);\n    this.selectedElementSubject.next(ind);\n    // Log for debugging\n  }\n\n  updateElement(index: number, updates: Partial<FormElement>) {\n    const elements = [...this.getElements()];\n    if (elements[index]) {\n      elements[index] = {\n        ...elements[index],\n        ...updates,\n        options: updates.options || elements[index].options || [],\n      };\n      this.formElementsSubject.next(elements);\n    }\n\n    if (index >= 0 && index < this.formElements.length) {\n      const updatedElement = {\n        ...this.formElements[index],\n        ...updates\n      };\n      if (updates.required !== undefined) {\n        if (updatedElement.questionText) {\n          const questionText = updatedElement.questionText.replace(/\\s*\\*+$/, '');\n          updatedElement.questionText = updates.required ? `${questionText} *` : questionText;\n        }\n        if (elements[index]) {\n          elements[index] = { ...elements[index], ...updates };\n          this.formElements = elements;\n          this.formElementsSubject.next([...this.formElements]);\n        }\n      }\n\n      // Handle special cases\n      if (updates.required === true && updatedElement.questionText && !updatedElement.questionText.endsWith('*')) {\n        updatedElement.questionText = `${updatedElement.questionText} *`;\n      } else if (updates.required === false && updatedElement.questionText && updatedElement.questionText.endsWith('*')) {\n        updatedElement.questionText = updatedElement.questionText.slice(0, -2);\n      }\n\n      this.formElements[index] = updatedElement;\n      this.formElementsSubject.next([...this.formElements]);\n    }\n    if(this.book?.bookQuestionsMap[Object.keys(this.book.bookQuestionsMap)[0]]?.subQuestions) this.book.bookQuestionsMap[Object.keys(this.book.bookQuestionsMap)[0]].subQuestions = this.formElements\n  }\n  updateTitle(event: any) {\n    //AP-10MAR25 Updates the title of the first record in the book  \n    this.book.records[0].title = event;\n  }\n  setSelectedElement(index: number) {\n    this.selectedElementSubject.next(index);\n    this.currentElement = this.formElements[index]\n    this.selectTableColumn = null\n  }\n  // SKS19MAR25 set the selected table column\n  setSelectedTableElement(index: any, event: any) {\n    this.currentElement = this.formElements[index]\n    if (this.currentElement?.type === 'Table') {\n      this.currentElement['fieldsMeta'] = typeof this.currentElement?.fieldsMeta === 'object' ? this.currentElement?.fieldsMeta : JSON.parse(this.currentElement.fieldsMeta);\n    }\n    const foundItem = this.currentElement?.type === 'Table' ? this.currentElement['fieldsMeta'].find(item => item['uniqueIdentifier'] === event?.uniqueIdentifier) : undefined;\n    this.selectTableColumn = foundItem?.uniqueIdentifier\n    this.selectedElementSubject.next(index);\n  }\n  removeSelectedTableElement(index: number, event: any) {\n    this.currentElement = this.formElements[index];\n\n    if (this.currentElement?.type === 'Table') {\n      this.currentElement['fieldsMeta'] = typeof this.currentElement?.fieldsMeta === 'object' ? this.currentElement?.fieldsMeta : JSON.parse(this.currentElement.fieldsMeta);\n      // Find the index of the item\n      const itemIndex = this.currentElement['fieldsMeta'].findIndex(item => item['uniqueIdentifier'] === event?.uniqueIdentifier);\n      // Remove the item if found\n      if (itemIndex !== -1) {\n        this.currentElement['fieldsMeta'].splice(itemIndex, 1);\n      }\n    }\n    this.selectTableColumn = null\n    this.elementUpdate(index, this.currentElement)\n  }\n  // SKS19MAR25 get the selected table column\n  getSelectTableColumn() {\n    return this.selectTableColumn;\n  }\n  selectHeading(event: any) {\n    //AP-10MAR25 Emits the selected heading event  \n    this.selectHeaderSubject.next(event);\n  }\n\n\n  getElements(): FormElement[] {\n    return this.formElements.map(element => ({\n      ...element,\n      options: element.options || [],\n    }));\n  }\n  sortElementsByOrder(): void {\n    //AP-10MAR25 Sort elements by current order\n    this.formElements.sort((a, b) => a.questionNumber - b.questionNumber);\n    this.formElements.forEach((element, index) => {\n      element.questionNumber = index + 1;\n    });\n    this.formElementsSubject.next([...this.formElements]);\n  }\n  //AP-10MAR25 Returns the current book data  \n  getBook() {\n    return this.book;\n  }\n  getBookId(){\n    return this.unique_id;\n  }\n  updateBook(book: any) {\n    this.book = book;\n    const updatedSubQuestions = book.bookQuestionsMap[this.unique_id]?.subQuestions ?? [];\n    this.formElements = updatedSubQuestions;\n    this.formElementsSubject.next([...this.formElements]);\n  }\n  \n  // In FormBuilderService\n  downloadElement() {\n    let translationMap: any = this.book.translationMap\n    const keysToTranslate = ['questionText', 'helpText', 'question', 'label'];\n    let downloadFormElements: any = this.formElements\n    downloadFormElements?.forEach(element => {\n      keysToTranslate.forEach(key => {\n          element[key] = translationMap.en[element.id]?.[key] ? translationMap.en[element.id][key] : null;\n      });\n      if(element?.['options'] !== undefined && element?.['options'] !== null &&  Array.isArray(element['options'])){\n        element['options'].forEach((opt: any) => {\n          opt.label = translationMap.en[opt.id]?.['label'] ;\n        })\n      }\n      if(element.type === 'Table' && element?.fieldsMeta){\n        if(!Array.isArray(element?.fieldsMeta) && typeof element?.fieldsMeta === 'string'){\n          element.fieldsMeta = JSON.parse(element?.fieldsMeta)\n        }\n        element?.fieldsMeta?.forEach(field => {\n          if(element.columnWidth){\n            field['width'] = field.width || element.columnWidth\n          }\n          keysToTranslate.forEach(key => {\n            if(key !== 'question') field[key] = translationMap.en[field.uniqueIdentifier]?.[key];\n          });\n          if(field?.question?.['options'] !== undefined && field?.question?.['options'] !== null &&  Array.isArray(field?.question?.['options'])){\n            field.question['options'].forEach(opt => {\n              opt.label = translationMap.en[opt.id]?.['label'];\n            })\n          }\n        });\n      }\n    });\n    let downloadBook = this.book\n    downloadBook?.questionbook?.action?.forEach((act: any) =>{\n      act.name = translationMap.en[act.id]?.['name'];\n    })\n    // SKS28MAR25 remove qbReferenceQuestions for download time and subtext to convert too string\n    downloadFormElements.forEach(element => {\n      if (element.type === 'book') {\n        delete element.qbReferenceQuestions;\n      }\n      if( element.subText){\n        element.subText = typeof element?.subText === 'object' ? element?.subText : JSON.parse(element['subText']);\n        const stringArrayFields = ['field','queryParameter', 'sourceQuestionId', 'queryField', 'queryValue', 'allowedTypes'];\n\n        if (element.subText) {\n          stringArrayFields.forEach(key => {\n            const value = element.subText[key];\n            if (typeof value === 'string') {\n              const items = value.split(',').map(item => item.trim()).filter(item => item !== '');\n              element.subText[key] = items.length > 0 ? items : null;\n            } else if (Array.isArray(value)) {\n              element.subText[key] = value.length > 0 ? value : null;\n            }            \n          });\n        }      \n        if(element.type === 'Table'){\n          element.fieldsMeta.forEach(field => {\n            if(field?.question?.subText){\n              stringArrayFields.forEach(key => {\n                const value = field.question.subText[key];\n                if (typeof value === 'string') {\n                  const items = value.split(',').map(item => item.trim()).filter(item => item !== '');\n                  field.question.subText[key] = items.length > 0 ? items : null;\n                } else if (Array.isArray(value)) {\n                  field.question.subText[key] = value.length > 0 ? value : null;\n                }           \n              });\n            }\n          });\n        }\n      }\n      if( element.subText){\n        element.subText = typeof element?.subText !== 'object' ? element?.subText : element['subText'];\n      }\n    });\n    \n    downloadBook.bookQuestionsMap[Object.keys(this.book.bookQuestionsMap)[0]].subQuestions = downloadFormElements;\n    console.log('book', downloadBook);\n    return downloadBook;\n  }\n  // AP-06MAR25 - Element new order update\n  updateElementsOrder(updatedElements: FormElement[]): void {\n    this.formElements = [...updatedElements];\n    if(this.book?.bookQuestionsMap[Object.keys(this.book.bookQuestionsMap)[0]]?.subQuestions) this.book.bookQuestionsMap[Object.keys(this.book.bookQuestionsMap)[0]].subQuestions = this.formElements\n    this.formElementsSubject.next(this.formElements);\n  }\n  // Remove an element by ID\n  // Save elements to localStorage and update the subject\n  removeElementComponent(id: any) {\n    let tempElem = [];\n    this.selectedElementSubject.next(null);\n    this.currentElement = {}\n    this.formElements.forEach((element: any) => {\n      if (element.id !== id) {\n        tempElem.push(element);\n      }\n    });\n    this.formElements = tempElem;\n    if(this.book?.bookQuestionsMap[Object.keys(this.book.bookQuestionsMap)[0]]?.subQuestions) this.book.bookQuestionsMap[Object.keys(this.book.bookQuestionsMap)[0]].subQuestions = this.formElements\n    this.formElementsSubject.next([...this.formElements]);\n  }\n  // SKS19MAR25 update the element\n  elementUpdate(index: any, element: any) {\n    const elements = [...this.getElements()];\n    if (elements[index]) {\n      elements[index] = element\n      this.formElements = elements;\n      if(this.book?.bookQuestionsMap[Object.keys(this.book.bookQuestionsMap)[0]]?.subQuestions) this.book.bookQuestionsMap[Object.keys(this.book.bookQuestionsMap)[0]].subQuestions = this.formElements\n      this.formElementsSubject.next([...elements]);\n      this.selectedElementSubject.next(index);\n    }\n  }\n}\n","import { ChangeDetectionStrategy, Component, ElementRef, EventEmitter, HostListener, Input, OnInit, Output, signal, computed, effect, ViewChild, ChangeDetectorRef } from '@angular/core';\nimport { CommonModule } from '@angular/common';\nimport { FormsModule } from '@angular/forms';\nimport { ImageCropperComponent } from '../../../components/image-cropper/component/image-cropper.component';\nimport { NxtSearchBox } from '../../../components/search-box/search-box.component';\nimport { CropperPosition, Dimensions, ImageTransform } from '../../../components/image-cropper/interfaces';\n//AP-25JUN25-Importing common constants for element, field, and appearance properties\nimport { COMMON_ELEMENT_PROPS, COMMON_OPTIONS_FIELD, COMMON_FIELD_PROPS, COMMON_APPEARANCE_PROPS, COMMON_COLUMN_FIELD } from '../properties/common-fields.constants';\nimport { toSignal } from '@angular/core/rxjs-interop';\nimport { NgClass, NgFor, NgIf } from '@angular/common';\nimport { Pipe, PipeTransform } from '@angular/core';\nimport { FormBuilderService } from '../../../services/form-builder/form-builder.service';\nimport { TemplateService } from '../../../services/template/template.service';\nimport { TranslationService } from '../../../services/translation/translation.service';\nimport { NxtCustomTranslatePipe } from '../../../pipe/custom-translate.pipe';\nimport { DataService } from '../../../services/data/data.service';\nimport { FormulaInputComponent } from '../../../components/formula-input/formula-input.component';\n\n// Custom pipe for path-based value access\n@Pipe({\n  name: 'getValueByPath',\n  standalone: true,\n  pure: true\n})\nexport class GetValueByPathPipe implements PipeTransform {\n  transform(obj: any, path: string, defaultValue: any = ''): any {\n    if (!obj || !path) return defaultValue;\n    return path.split('.').reduce((o, k) => o?.[k] ?? defaultValue, obj);\n  }\n}\n\n@Component({\n  selector: 'app-properties',\n  standalone: true,\n  imports: [CommonModule, FormsModule, ImageCropperComponent, NxtSearchBox, NgClass, NgFor, NgIf, GetValueByPathPipe, NxtCustomTranslatePipe, FormulaInputComponent],\n  templateUrl: './properties.component.html',\n  styleUrls: ['./properties.component.css'],\n  changeDetection: ChangeDetectionStrategy.OnPush\n})\nexport class PropertiesComponent implements OnInit {\n  @Input() templateSelected = false;\n  @Input() set selectedElementType(value: string) {\n    this.selectedElementTypeSig.set(value);\n  }\n  @Output() formButtonHandler = new EventEmitter<any>();\n  @Output() templateSaveHandler = new EventEmitter<any>();\n\n  @ViewChild('dropdown', { static: false }) dropdown!: ElementRef;\n\n  // Signals for reactive state\n  selectedElementTypeSig = signal<string>('');\n  selectedElement = signal<any>(null);\n  selectedElementIndex = signal<number>(-1);\n  headerSelect = signal<boolean>(false);\n  book = signal<any>(null);\n  bookId = signal<any>(null);\n  activeTab = signal<string>('attributes');\n  selectColumn = signal<any>(null);\n  transform = signal<ImageTransform>({\n    translateUnit: 'px',\n    scale: 1,\n    rotate: 0,\n    flipH: false,\n    flipV: false,\n    translateH: 0,\n    translateV: 0\n  });\n  canvasRotation = signal<number>(0);\n  cropper = signal<CropperPosition | undefined>(undefined);\n  loading = signal<boolean>(false);\n  isLinkDropdownOpen = signal<boolean>(false);\n  errorMessage = signal<string>('');\n  bookSubtext = signal({\n    endpoint: 'https://dev-api.valarhr.com/nxt',\n    variable: null,\n    field: ['label', 'name'],\n    defaultField: 'label'\n  });\n  isStyleExpanded = signal<boolean>(false);\n  cropperMaxHeight = 0;\n  cropperMaxWidth = 0;\n  cropperMinHeight = 0;\n  cropperMinWidth = 0;\n  cropperStaticWidth = 0;\n  cropperStaticHeight = 0;\n  aspectRatio = 4 / 3;\n  roundCropper = false;\n  isExpanded: Boolean = false\n  alignImage = 'center' as const;\n  elementType = ['Header','Line','Space','Table','TableColumn','Checkbox','Dropdown','MultiSelect','Radio',\"Text\", \"Calendar\", \"Date\", \"Time\", \"DateTime\",\"month\", \"Email\", \"Book\", \"List\", \"TextArea\", \"RichTextArea\", \"Number\", \"Image\", \"Label\", \"Boolean\", \"File\", \"Icon\", 'Button','object']\n\n  // Add these properties to your component class\n  private _cachedProperties: any = null;\n  private _lastSelectedElement: any = null;\n  private _lastSelectedColumn: string | null = null;\n\n  // Computed signals for memoization\n  fieldAsString = computed(() => this.bookSubtext().field.join(', '));\n  filteredColumns = computed(() => {\n    const fieldsMeta = this.selectedElement()?.fieldsMeta ?? [];\n    return Array.isArray(fieldsMeta)\n      ? fieldsMeta.filter(column => column.uniqueIdentifier !== this.selectColumn())\n      : [];\n  });\n\n  // Memoized properties\n  elementProperties = computed(() => this.createElementProperties());\n  formBuilderLanguageCode:any = 'en'\n  copied = false;\n\n  constructor(\n    private formBuilderService: FormBuilderService,\n    private templateService: TemplateService,\n    private translationService: TranslationService,\n    private cdr: ChangeDetectorRef,\n     private dataService: DataService,\n  ) {}\n  \n  ngOnInit() {\n    this.formBuilderService.selectHeaderSubject$.subscribe(header => {\n      if (header) {\n        this.selectedElement.set({ type: header });\n        this.headerSelect.set(true);\n        const bookData = this.formBuilderService.getBook();\n        this.book.set(bookData);\n        this.bookId.set(bookData?.records[0]?.id);\n      }\n    });\n  \n    this.formBuilderService.selectedElement$.subscribe(index => {\n      this.selectedElementIndex.set(index);\n      this.headerSelect.set(false);\n      if (index >= 0) {\n        const elements = this.formBuilderService.getElements();\n        if (!elements || !Array.isArray(elements) || index >= elements.length) {\n          this.selectedElement.set(null); // Reset selectedElement if invalid\n          this.selectColumn.set(null);\n          return;\n        }\n        const element = { ...elements[index] }; // Safe to spread since we checked\n        let fieldsMeta = element?.fieldsMeta;\n        if (element?.type === 'Table') {\n          try {\n            fieldsMeta = Array.isArray(fieldsMeta)\n              ? fieldsMeta\n              : JSON.parse(fieldsMeta || '[]');\n          } catch (e) {\n            // console.error('Error parsing fieldsMeta:', e);\n            fieldsMeta = [];\n          }\n          this.selectColumn.set(this.formBuilderService.getSelectTableColumn() ?? null);\n        } else {\n          this.selectColumn.set(null);\n        }\n        this.selectedElement.set({ ...element, fieldsMeta });\n      } else {\n        this.selectedElement.set(null); // Reset if index is invalid\n        this.selectColumn.set(null);\n      }\n      const element = this.selectedElement();\n      if (element) {\n        let subText = element.subText;\n        if (typeof subText === 'string' && subText.trim() !== '') {\n          try {\n            subText = JSON.parse(subText);\n          } catch (e) {\n            // console.error('Error parsing subText:', e);\n            subText = {};\n          }\n        } else if (typeof subText !== 'object' || subText === null) {\n          subText = {};\n        }\n        const arrayFields = ['field', 'queryParameter', 'sourceQuestionId', 'queryField', 'queryValue', 'allowedTypes'];\n        if (subText) {\n          arrayFields.forEach(key => {\n            if (Array.isArray(subText[key])) {\n              const trimmed = subText[key]\n                .map(item => item?.toString().trim())\n                .filter(item => item); // removes empty strings, null, undefined\n              subText[key] = trimmed.length > 0 ? trimmed.join(', ') : null;\n            }\n          });\n        }        \n        if(element.type === 'Table'){\n          element.fieldsMeta.forEach(field => {\n            if(field?.question?.subText){\n              arrayFields.forEach(key => {\n                if (Array.isArray(field.question.subText[key])) {\n                  const trimmed = field.question.subText[key]\n                    .map(item => item?.toString().trim())\n                    .filter(item => item); // removes empty strings, null, undefined\n                    field.question.subText[key] = trimmed.length > 0 ? trimmed.join(', ') : null;\n                } \n              });\n            }\n          });\n        }\n        this.selectedElement.update(el => ({ ...el, subText }));\n      }\n    });\n    // SKS28JUL25 formbuilder current element translation value update \n    this.translationService.formBuilderTranslationsLoaded$.subscribe(event => {\n      this.formBuilderLanguageCode = event\n      const elements = this.formBuilderService.getElements();\n      if (Array.isArray(elements) && this.selectedElement()) {\n        const matchedElement = elements.find((ele: any) => ele.id === this.selectedElement().id);\n        if (matchedElement) {\n          this.selectedElement.set(matchedElement);\n        }\n      }      \n      if(this.selectedElement()?.type === \"Header\"){\n        const bookData = this.formBuilderService.getBook();\n        this.book.set(bookData);\n        this.selectedElement.set({...this.selectedElement()})\n      }\n    })\n  }\n\n  private createElementProperties() {\n    return {\n      Header: {\n        elementProps: [\n          { label: 'Label', placeholder: 'Enter Text', type: 'text', key: 'title', isTranslate: true, labelPath: 'LABEL' }\n        ],\n      },\n      currency:this.createElementConfig(),\n      Line: {\n        elementProps: [\n          { label: 'Line Width', type: 'fieldSize', key: 'size', labelPath: 'LINE_WIDTH' },\n          { label: 'Padding Top', type: 'number', key: 'paddingTop', placeholder: 'Enter padding top', labelPath: 'PADDING_TOP' },\n          { label: 'Padding Bottom', type: 'number', key: 'paddingBottom', placeholder: 'Enter padding bottom', labelPath: 'PADDING_BOTTOM' },\n          {\n            label: 'Line Style', type: 'select', key: 'lineStyle', labelPath: 'LINE_STYLE',\n            options: [\n              { label: 'Solid', value: 'Solid', labelPath: 'SOLID' },\n              { label: 'Dashed', value: 'Dashed', labelPath: 'DASHED' },\n              { label: 'Dotted', value: 'Dotted', labelPath: 'DOTTED' }\n            ]\n          }\n        ],\n        fieldProps: []\n      },\n      Space: this.createElementConfig(),\n      Table: {\n        elementProps: [\n          { label: 'Is Label', placeholder: 'Enter Text', type: 'checkbox', key: 'style.showLabel', labelPath: 'IS_LABEL' },\n          { label: 'primaryKey', placeholder: 'Enter Text', type: 'checkbox', key: 'primaryKey', labelPath: 'PRIMARY_KEY' },\n          { label: 'tableName', placeholder: 'Enter here', type: 'text', key: 'questionText', isTranslate: true, labelPath: 'TABLE_NAME' },\n          { label: 'inputTextAlignment', placeholder: 'Left', type: 'text', key: 'inputTextAlignment', labelPath: 'INPUT_TEXT_ALIGNMENT' },\n          { label: 'tableScaleSize', placeholder: '06 - Full Scale', type: 'text', key: 'tableScaleSize', labelPath: 'TABLE_SCALE_SIZE' },\n          { label: 'isNosIndicator', placeholder: '06 - Full Scale', type: 'checkbox', key: 'tableConfig.isNosIndicator', labelPath: 'IS_NOS_INDICATOR' },\n          { label: 'isPagination', placeholder: '06 - Full Scale', type: 'checkbox', key: 'tableConfig.isPagination', labelPath: 'IS_PAGINATION' },\n          { label: 'addInlineRecord', placeholder: '06 - Full Scale', type: 'checkbox', key: 'tableConfig.addInlineRecord', labelPath: 'ADD_INLINE_RECORD' },\n          { label: 'actionButton', placeholder: '06 - Full Scale', type: 'checkbox', key: 'tableConfig.actionButton', labelPath: 'ACTION_BUTTON' },\n          { label: 'searchBar', placeholder: '06 - Full Scale', type: 'checkbox', key: 'tableConfig.searchBar', labelPath: 'SEARCH_BAR' },\n          { label: 'isDeleteRow', placeholder: '06 - Full Scale', type: 'checkbox', key: 'tableConfig.isDeleteRow', labelPath: 'IS_DELETE_ROW' },\n          { label: 'isEditRow', placeholder: '06 - Full Scale', type: 'checkbox', key: 'tableConfig.isEditRow', labelPath: 'IS_EDIT_ROW' },\n          { label: 'isButtons', placeholder: '06 - Full Scale', type: 'checkbox', key: 'tableConfig.isButtons', labelPath: 'IS_BUTTONS' },\n          { label: 'Serial Number Column', placeholder: 'serialNumberColumn', type: 'checkbox', key: 'tableConfig.serialNumberColumn', labelPath: 'SERIAL_NUMBER_COLUMN' },\n          { label: 'rowChoice', placeholder: '', type: 'text', key: 'rowChoice', labelPath: 'ROW_CHOICE' },\n          { label: 'questionNumber', type: 'number', key: 'questionNumber', labelPath: 'QUESTION_NUMBER' },\n          { label: 'Field Size', type: 'fieldSize', key: 'size', labelPath: 'FIELD_SIZE' },\n          { label: 'Column Common Width', placeholder: 'Column Common Width', type: 'number', key: 'columnWidth', labelPath: 'COLUMN_COMMON_WIDTH' },\n        ],\n        fieldProps: [\n          { label: '', type: 'toggleGroup', key: 'toggleOptions', labelPath: '' },\n          { label: 'tableId', placeholder: 'Emp_Table_01', type: 'text', key: 'tableId', isTranslate: true, labelPath: 'TABLE_ID' },\n          { label: 'helpText', placeholder: 'Enter message', type: 'text', key: 'helpText', isTranslate: true, labelPath: 'HELP_TEXT' },\n          { label: 'defaultValue', placeholder: 'Default Value', type: 'text', key: 'defaultValue', labelPath: 'DEFAULT_VALUE' },\n          { label: 'Reference', placeholder: 'Reference Field', type: 'text', key: 'referenceField', labelPath: 'REFERENCE_FIELD' },\n          {\n            label: 'Sub Text', placeholder: 'Enter Text', type: 'subQuestion', key: 'isSubText', labelPath: 'SUB_TEXT',\n            subQuestion: [\n              { label: 'End Point', placeholder: 'endpoint', type: 'text', key: 'subText.endpoint', labelPath: 'END_POINT' },\n              { label: 'Variable', placeholder: 'variable', type: 'text', key: 'subText.variable', labelPath: 'VARIABLE' },\n              { label: 'Field', placeholder: 'field', type: 'text', key: 'subText.field', labelPath: 'FIELD' },\n              { label: 'Query Parameter', placeholder: 'queryParameter', type: 'text', key: 'subText.queryParameter', labelPath: 'QUERY_PARAMETER' },\n              { label: 'Default Field', placeholder: 'defaultField', type: 'text', key: 'subText.defaultField', labelPath: 'DEFAULT_FIELD' },\n              { label: 'Label Field', placeholder: 'labelField', type: 'text', key: 'subText.labelField', labelPath: 'LABEL_FIELD' },\n              { label: 'Value Field', placeholder: 'valueField', type: 'text', key: 'subText.valueField', labelPath: 'VALUE_FIELD' },\n              { label: 'Source Question Id', placeholder: 'sourceQuestionId', type: 'text', key: 'subText.sourceQuestionId', labelPath: 'SOURCE_QUESTION_ID' },\n              { label: 'Dependent Value', placeholder: 'dependentValue', type: 'text', key: 'subText.dependentValue', labelPath: 'DEPENDENT_VALUE' },\n              { label: 'Dependent Field', placeholder: 'isDependentField', type: 'boolean', key: 'subText.isDependentField', labelPath: 'DEPENDENT_FIELD' },\n              { label: 'Query Field', placeholder: 'queryField', type: 'text', key: 'subText.queryField', labelPath: 'QUERY_FIELD' },\n              { label: 'Query Value', placeholder: 'queryValue', type: 'text', key: 'subText.queryValue', labelPath: 'QUERY_VALUE' },\n              { label: 'Query Value Ref', placeholder: 'queryValueRef', type: 'text', key: 'subText.queryValueReference', labelPath: 'QUERY_VALUE_REF' },\n              { label: 'Unique Key', placeholder: 'uniqueKey', type: 'text', key: 'subText.uniqueKey', labelPath: 'UNIQUE_KEY' },\n            ]\n          },\n        ],\n        appearance: [\n          { label: 'Select Font', type: 'select', key: 'font', placeholder: 'Left', required: true, labelPath: 'SELECT_FONT', options: [\n            { label: 'Helvetica Neue', value: 'Helvetica Neue', labelPath: 'HELVETICA_NEUE' },\n            { label: 'Arial', value: 'Arial', labelPath: 'ARIAL' },\n            { label: 'Times New Roman', value: 'Times New Roman', labelPath: 'TIMES_NEW_ROMAN' },\n            { label: 'Roboto', value: 'Roboto', labelPath: 'ROBOTO' }\n          ]},\n          { label: 'Font Color', type: 'color', key: 'color', defaultValue: '', required: true, labelPath: 'FONT_COLOR' },\n          { label: 'Font Size', type: 'select', key: 'fontSize', defaultValue: '', required: true, labelPath: 'FONT_SIZE', options: [\n            { label: 'Small', value: '12px', labelPath: 'SMALL' },\n            { label: 'Medium', value: '14px', labelPath: 'MEDIUM' },\n            { label: 'Large', value: '16px', labelPath: 'LARGE' }\n          ]},\n          { label: 'Font Width', type: 'select', key: 'fontWeight', defaultValue: '', required: true, labelPath: 'FONT_WIDTH', options: [\n            { value: '400', label: '400-Normal', labelPath: '400_NORMAL' },\n            { value: '500', label: '500-Medium', labelPath: '500_MEDIUM' },\n            { value: '600', label: '600-Semi Bold', labelPath: '600_SEMI_BOLD' },\n            { value: '700', label: '700-Bold', labelPath: '700_BOLD' }\n          ]},\n          { label: 'Duplicate Field', type: 'button-toggle', key: 'duplicateField', defaultValue: false, labelPath: 'DUPLICATE_FIELD' }\n        ]\n      },\n      TableColumn: {\n        elementProps: [\n          { label: 'Type', placeholder: 'Text', type: 'select', targetArray: 'fieldsMeta', targetArrayKey: 'uniqueIdentifier', key: 'fldType', required: true, labelPath: 'TYPE', options: this.elementType.map(f => ({ label: f, value: f, labelPath: f.toUpperCase() }))},\n          { label: 'Calendar Type', placeholder: 'Calendar Type', type: 'select', targetArray: 'fieldsMeta', targetArrayKey: 'uniqueIdentifier', key: 'calendarType', required: true, labelPath: 'CALENDAR_TYPE', options: [{label: \"Hijri\", value: \"hijri\", labelPath: \"Hijri\"},{label: \"Gregorian\", value: \"gregorian\", labelPath: \"Gregorian\"}]},\n          { label: 'headerLabels', placeholder: 'Enter here', type: 'text', targetArray: 'fieldsMeta', targetArrayKey: 'uniqueIdentifier', key: 'label', isTranslate: true, labelPath: 'HEADER_LABELS' },\n          { label: 'apiName', placeholder: 'Enter here', type: 'text', targetArray: 'fieldsMeta', targetArrayKey: 'uniqueIdentifier', key: 'apiName', labelPath: 'API_NAME' },\n          { label: 'Column Hide', type: 'checkbox', targetArray: 'fieldsMeta', targetArrayKey: 'uniqueIdentifier', key: 'readOnly', labelPath: 'COlUMN_HIDE' },\n          {\n            label: 'Summary Column', placeholder: 'Summary Column', type: 'subQuestion', targetArray: 'fieldsMeta', targetArrayKey: 'uniqueIdentifier', key: 'summaryColumn', labelPath: 'SUMMARY_COLUMN',\n            subQuestion: [\n              { label: 'Type', placeholder: 'Enter here', type: 'text', targetArray: 'fieldsMeta', targetArrayKey: 'uniqueIdentifier', key: 'fldType', labelPath: 'TYPE' },\n              { label: 'Operation', placeholder: 'Enter here', type: 'text', targetArray: 'fieldsMeta', targetArrayKey: 'uniqueIdentifier', key: 'operation', labelPath: 'OPERATION' },\n              { label: 'Operands', placeholder: 'Enter here', type: 'array', targetArray: 'fieldsMeta', targetArrayKey: 'uniqueIdentifier', key: 'operands', labelPath: 'OPERANDS' },\n            ]\n          },\n          {\n            label: 'Summary Row', placeholder: 'Summary Row', type: 'subQuestion', targetArray: 'fieldsMeta', targetArrayKey: 'uniqueIdentifier', key: 'summaryRow', labelPath: 'SUMMARY_ROW',\n            subQuestion: [\n              { label: 'Type', placeholder: 'Enter here', type: 'text', targetArray: 'fieldsMeta', targetArrayKey: 'uniqueIdentifier', key: 'fldType', labelPath: 'TYPE' },\n              { label: 'operation', placeholder: 'operation', type: 'text', targetArray: 'fieldsMeta', targetArrayKey: 'uniqueIdentifier', key: 'operation', labelPath: 'OPERATION' },\n              { label: 'column', placeholder: 'Enter here', type: 'radio', targetArray: 'fieldsMeta', targetArrayKey: 'uniqueIdentifier', key: 'column', labelPath: 'COLUMN' },\n              { label: 'columns', placeholder: 'Enter here', type: 'array', targetArray: 'fieldsMeta', targetArrayKey: 'uniqueIdentifier', key: 'columns', labelPath: 'COLUMNS' },\n              { label: 'operands', placeholder: 'Enter here', type: 'array', targetArray: 'fieldsMeta', targetArrayKey: 'uniqueIdentifier', key: 'operands', labelPath: 'OPERANDS' },\n            ]\n          },\n          { label: 'textAlignment', placeholder: 'Left', type: 'text', targetArray: 'fieldsMeta', targetArrayKey: 'uniqueIdentifier', key: 'textAlignment', labelPath: 'TEXT_ALIGNMENT' },\n          { label: 'columnScaleSize', placeholder: '06 - Full Scale', type: 'text', targetArray: 'fieldsMeta', targetArrayKey: 'uniqueIdentifier', key: 'columnScaleSize', labelPath: 'COLUMN_SCALE_SIZE' },\n          { label: 'Column Width', placeholder: 'Column Width', type: 'number', targetArray: 'fieldsMeta', targetArrayKey: 'uniqueIdentifier', key: 'width', labelPath: 'COLUMN_WIDTH' },\n        ],\n        fieldProps: [],\n        appearance: []\n      },\n      Checkbox: this.createElementConfig({ customFieldProps: COMMON_OPTIONS_FIELD.map(opt => ({ ...opt, type: 'checkbox' })) }),\n      Dropdown: this.createElementConfig({ customFieldProps: COMMON_OPTIONS_FIELD.map(opt => ({ ...opt, type: 'dropdown' })) }),\n      MultiSelect: this.createElementConfig({ customFieldProps: COMMON_OPTIONS_FIELD.map(opt => ({ ...opt, type: 'checkbox' })) }),\n      Radio: this.createElementConfig({ customFieldProps: COMMON_OPTIONS_FIELD.map(opt => ({ ...opt, type: 'checkbox' })) }),\n      Text: this.createElementConfig(),\n      Calendar: this.createElementConfig(),\n      Date: this.createElementConfig(),\n      Time: this.createElementConfig(),\n      DateTime: this.createElementConfig(),\n      month: this.createElementConfig(),\n      Email: this.createElementConfig(),\n      Book: this.createElementConfig(),\n      List: this.createElementConfig(),\n      TextArea: this.createElementConfig(),\n      RichTextArea: this.createElementConfig(),\n      Number: this.createElementConfig(),\n      Image: this.createElementConfig(),\n      Label: this.createElementConfig(),\n      Boolean: this.createElementConfig(),\n      File: this.createElementConfig(),\n      Icon: this.createElementConfig(), //MSM10JUL25 icon selector element\n      Button: this.createElementConfig(),\n    };\n  }\n\n  createElementConfig(config?: { customElementProps?: any[], customFieldProps?: any[], customAppearanceProps?: any[] }) {\n    return {\n      elementProps: [...COMMON_ELEMENT_PROPS, ...(config?.customElementProps || [])],\n      fieldProps: [...COMMON_FIELD_PROPS, ...(config?.customFieldProps || [])],\n      appearance: [...COMMON_APPEARANCE_PROPS, ...(config?.customAppearanceProps || [])]\n    };\n  }\n  // AP 23MAY25 - Add a new button with default styling\n  addNewButton() {\n    const lastPercent = this.book()?.questionbook?.action?.slice(-1)[0]?.positionPercent ?? 0;\n    const buttons = {\n      name: '',\n      eventtoemit: '',\n      alt: '',\n      endpoint: '',\n      method: '',\n      id: this.formBuilderService.addElementWithId(),\n      positionPercent: lastPercent + 10,\n      width: 100,\n      borderRadius: 6,\n      alignment: 'flex-start',\n      actionData: '',\n      updateParentData: true\n    };\n    this.formBuilderService.updateQuestionBookActionButtons(buttons, 'add');\n    this.book.update(book => ({ ...book }));\n  }\n  //AP 23MAY25 - Remove a button from the action list \n  removeButton(btn: any) {\n    this.formBuilderService.updateQuestionBookActionButtons(btn, 'remove');\n    this.book.update(book => ({ ...book }));\n  }\n  //AP 23MAY25 - Update a specific property of a button\n  onButtonPropertyChange(index: number, key: string, value: any,isTranslate: boolean = false) {\n    const buttons = this.book()?.questionbook?.action ?? [];\n    if (buttons[index]) {\n      buttons[index][key] = value;\n      this.book.update(book => ({ ...book, questionbook: { ...book.questionbook, action: buttons } }));\n    }\n    let button = buttons[index]\n    if(isTranslate){\n      //SKS28JUL25 Refresh the book signal from service\n      const updatedBook = this.formBuilderService.getBook();\n      this.book.set(updatedBook);\n      //SKS28JUL25 Work with a mutable copy\n      const currentBook = this.book();\n      const translationMap = currentBook.translationMap || {};\n      const currentLang = this.translationService.getFormBuilderLanguage();\n      //SKS28JUL25 Ensure nested structure exists\n      if (!translationMap[currentLang]) translationMap[currentLang] = {};\n      if (!translationMap[currentLang][button.id]) translationMap[currentLang][button.id] = {};\n      //SKS28JUL25 Set the translated value\n      translationMap[currentLang][button.id][key] = value;\n      //SKS28JUL25 Update book and re-set the signal\n      currentBook.translationMap = translationMap;\n      if(currentLang === 'en'){\n        this.translationService.updateTranslations(translationMap)\n      }\n      this.book.set(currentBook); // Trigger reactive update\n      //SKS28JUL25 Update in service if needed\n      this.formBuilderService.updateBook(currentBook);\n    }\n  }\n  //AP-10MAR25 Updates the title using the form builder service  \n  updateTitle(value: string) {\n    this.formBuilderService.updateTitle(value);\n    this.book.update(book => ({\n      ...book,\n      records: [{ ...book.records[0], title: value }]\n    }));\n  }\n\n  validateInput(value: string, type: string): boolean {\n    if (type === 'label' || type === 'placeholder') {\n      const regex = /^[a-zA-Z0-9\\s]*$/;\n      if (!regex.test(value)) {\n        this.errorMessage.set('Only letters and numbers are allowed');\n        return false;\n      }\n    }\n    this.errorMessage.set('');\n    return true;\n  }\n\n  updateField(value: string) {\n    this.bookSubtext.update(subtext => ({\n      ...subtext,\n      field: value.split(',').map(item => item.trim())\n    }));\n  }\n\n  onCheckboxChange(targetArrayPath: any, targetArrayKey: any, key: any, apiName: string, isChecked: boolean) {\n    const targetArray = this.getDataByPath(targetArrayPath);\n    const foundItem = targetArray.find(item => item[targetArrayKey] === this.selectColumn());\n    foundItem[key] = foundItem[key] ? foundItem[key] : [];\n    if (isChecked) {\n      if (!foundItem[key].includes(apiName)) {\n        foundItem[key].push(apiName);\n      }\n    } else {\n      const index = foundItem[key].indexOf(apiName);\n      if (index > -1) {\n        foundItem[key].splice(index, 1);\n      }\n    }\n    this.updateElement(this.selectedElement());\n  }\n\n  updateProperty(key: string, value: any) {\n    if (this.selectedElementIndex() >= 0) {\n      if (key === 'questionText' || key === 'question') {\n        if (!this.validateInput(value, key)) {\n          return;\n        }\n      }\n      if (key === 'questionNumber') {\n        //AP-10MAR25 Convert the value to an integer  \n        const newOrder = parseInt(value, 10);\n        if (isNaN(newOrder)) return;\n\n        //AP-10MAR25 Update the element's questionNumber in the form builder service  \n        this.formBuilderService.updateElement(this.selectedElementIndex(), { questionNumber: newOrder });\n\n        //AP-10MAR25 Sort elements based on the updated questionNumber  \n        this.formBuilderService.sortElementsByOrder();\n      }\n      if (key === 'font' || key === 'fontWeight') {\n        this.selectedElement.update(el => ({ ...el, [key]: value }));\n      }\n      const update = { [key]: value };\n      this.formBuilderService.updateElement(this.selectedElementIndex(), update);\n    }\n  }\n\n  onRadioChange(targetArrayPath: any, targetArrayKey: any, key: any, value: any) {\n    if (this.selectedElement()?.type === 'Table') {\n      let targetArray = this.getDataByPath(targetArrayPath);\n      if (typeof targetArray === 'string') {\n        try {\n          targetArray = JSON.parse(targetArray || '[]');\n        } catch (e) {\n          // console.error('Error parsing targetArray:', e);\n          targetArray = [];\n        }\n      }\n      if (!Array.isArray(targetArray)) return;\n      let foundItem = targetArray.find(item => item[targetArrayKey] === this.selectColumn());\n      if (!foundItem) {\n        foundItem = { [targetArrayKey]: this.selectColumn() };\n        targetArray.push(foundItem);\n      }\n      const keys = key.split('.');\n      let obj = foundItem;\n      for (let i = 0; i < keys.length - 1; i++) {\n        const k = keys[i];\n        if (!obj[k]) obj[k] = {};\n        obj = obj[k];\n      }\n      obj[keys[keys.length - 1]] = value;\n      this.selectedElement.update(el => ({\n        ...el,\n        fieldsMeta: targetArray\n      }));\n      this.updateElement(this.selectedElement());\n    } else {\n      this.setValueByPath(key, value);\n    }\n  }\n\n  onRequiredChange(value: boolean) {\n    if (this.selectedElement()) {\n      let label = this.selectedElement().label ? this.selectedElement().label.replace(/\\s*\\*+$/, '') : 'Label';\n      if (value) {\n        label = `${label} *`;\n      }\n      this.updateProperty('label', label);\n      this.updateProperty('isOptional', value);\n    }\n  }\n\n  toggleSubQuestion(prop: any) {\n    this.isExpanded = !this.isExpanded;\n  }\n\n  toggleStyleSection() {\n    this.isStyleExpanded.set(!this.isStyleExpanded());\n  }\n\n  getProperties() {\n    const element = this.selectedElement();\n    const selectedColumn = this.selectColumn();\n    \n    // Check if we can use cached result\n    if (this._cachedProperties && \n        this._lastSelectedElement === element && \n        this._lastSelectedColumn === selectedColumn) {\n      return this._cachedProperties;\n    }    \n    if (!element) {\n      this._cachedProperties = null;\n      this._lastSelectedElement = null;\n      this._lastSelectedColumn = null;\n      return null;\n    }\n  \n    let result = null;\n    \n    if (element.type === 'Header') {\n      result = this.elementProperties()['Header'];\n    } else if (element.type === 'Table' && selectedColumn !== null) {\n      let fieldsMeta = element.fieldsMeta;\n      try {\n        fieldsMeta = Array.isArray(fieldsMeta)\n          ? fieldsMeta\n          : JSON.parse(fieldsMeta || '[]');\n      } catch (e) {\n        // console.error('Error parsing fieldsMeta in getProperties:', e);\n        fieldsMeta = [];\n      }\n      \n      const column = fieldsMeta.find((c: any) => c.uniqueIdentifier === selectedColumn);\n      if (column) {\n        const markIsTableColumn = (items: any[] = []) =>\n          items.map(item => {\n            const newItem = { ...item, isTableColumn: true };\n            if (Array.isArray(newItem.subQuestion)) {\n              newItem.subQuestion = newItem.subQuestion.map(sub => ({\n                ...sub,\n                isTableColumn: true\n              }));\n            }\n            return newItem;\n          });\n        \n        result = {\n          elementProps: [\n            ...(this.elementProperties()['TableColumn'].elementProps || []),\n            ...markIsTableColumn(this.elementProperties()[this.elementType.includes(column.fldType) ? column.fldType : 'Text']?.elementProps)\n          ],\n          fieldProps: [\n            ...(this.elementProperties()['TableColumn'].fieldProps || []),\n            ...markIsTableColumn(this.elementProperties()[this.elementType.includes(column.fldType) ? column.fldType : 'Text']?.fieldProps)\n          ],\n          appearance: [\n            ...(this.elementProperties()['TableColumn'].appearance || []),\n            ...markIsTableColumn(this.elementProperties()[this.elementType.includes(column.fldType) ? column.fldType : 'Text']?.appearance)\n          ]\n        };\n      } else {\n        result = this.elementProperties()['TableColumn'];\n      }\n    } else {\n      result = this.elementProperties()[this.elementType.includes(element.type) ? element.type : 'List']; //SKS12FEB26 default list type set\n    }\n    \n    // Cache the result\n    this._cachedProperties = result;\n    this._lastSelectedElement = element;\n    this._lastSelectedColumn = selectedColumn;\n    \n    return result;\n  }\n  // Add method to clear cache when needed\n  private clearPropertiesCache() {\n    this._cachedProperties = null;\n    this._lastSelectedElement = null;\n    this._lastSelectedColumn = null;\n  }\n  // AP-28MAR25 Add an option with a unique UUID\n  addOption(options: any[]) {\n    const unique_id = this.dataService.nxtId();\n    options.push({ id: unique_id, value: '' });\n  }\n\n  // AP-28MAR25 Function to remove an option based on its unique UUID\n  removeOption(options: any[], id: string) {\n    const index = options.findIndex(option => option.id === id);\n    if (index !== -1) {\n      options.splice(index, 1);\n    }\n  }\n\n  handleButtonClick() {\n    this.formButtonHandler.emit(this.formBuilderService.downloadElement());\n  }\n\n  handleTemplateSave() {\n    this.templateSaveHandler.emit(this.templateService.download());\n  }\n\n  setActiveTab(tab: string) {\n    this.activeTab.set(tab);\n  }\n\n  onSave() {}\n\n  onCancel() {}\n\n  onAlignSelect(value: string) {\n    this.selectedElement.update(el => ({ ...el, textAlign: value }));\n  }\n\n  onStyleSelect(value: string) {\n    this.selectedElement.update(el => ({\n      ...el,\n      styles: [value]\n    }));\n  }\n\n  isStyleActive(value: string): boolean {\n    return this.selectedElement()?.styles?.includes(value) || false;\n  }\n\n  getValueByPath(path: string, obj: any = this.selectedElement(), defaultValue: any = ''): any {\n    if (!obj || !path) return defaultValue;\n    return path.split('.').reduce((o, k) => o?.[k] ?? defaultValue, obj);\n  }\n  isAnotherIdSelected(): boolean {\n    return this.formBuilderService.getElements()\n      .some((el, i) => i !== this.selectedElementIndex() && el.primaryKey);\n  }\n\n  // Also update your onToggleChange method to clear cache\nonToggleChange(path: string, event: any) {\n  // Clear cache when element changes\n  this.clearPropertiesCache();\n  const checked = event.target ? (event.target as HTMLInputElement).checked : event;\n  this.setValueByPath(path, checked);\n  \n  if (this.selectedElement()?.type === 'Table') {\n    let fieldsMeta = this.getDataByPath('fieldsMeta');\n    if (typeof fieldsMeta === 'string') {\n      try {\n        fieldsMeta = JSON.parse(fieldsMeta || '[]');\n      } catch (e) {\n        // console.error('Error parsing fieldsMeta:', e);\n        fieldsMeta = [];\n      }\n    }\n    this.selectedElement.update(el => ({\n      ...el,\n      fieldsMeta: fieldsMeta\n    }));\n    this.updateElement(this.selectedElement());\n  }\n}\n\n  // Update your setValueByPath method to clear cache\nsetValueByPath(path: string, value: any,isTranslate:boolean = false) {\n  // Clear cache when element changes\n  this.clearPropertiesCache();\n  \n  if (this.selectedElementIndex() >= 0) {\n    if (path === 'questionText' || path === 'question') {\n      if (!this.validateInput(value, path)) {\n        return;\n      }\n    }\n    if (path === 'questionNumber') {\n      const newOrder = parseInt(value, 10);\n      if (isNaN(newOrder)) return;\n      this.formBuilderService.updateElement(this.selectedElementIndex(), { questionNumber: newOrder });\n      this.formBuilderService.sortElementsByOrder();\n    }\n    if (path === 'font' || path === 'fontWeight') {\n      this.selectedElement.update(el => ({ ...el, [path]: value }));\n    }\n  }\n  \n  const element = this.selectedElement();\n  if (element) {\n    let subText = element.subText;\n    if (typeof subText === 'string' && subText.trim() !== '') {\n      try {\n        subText = JSON.parse(subText);\n      } catch (e) {\n        // console.error('Error parsing subText:', e);\n        subText = {};\n      }\n    } else if (typeof subText !== 'object' || subText === null) {\n      subText = {};\n    }\n    const arrayFields = ['field', 'queryParameter', 'sourceQuestionId', 'queryField', 'queryValue', 'allowedTypes'];\n    if (subText) {\n      arrayFields.forEach(key => {\n        if (Array.isArray(subText[key])) {\n          const trimmed = subText[key]\n            .map(item => item?.toString().trim())\n            .filter(item => item); // removes empty strings, null, undefined\n        \n          subText[key] = trimmed.length > 0 ? trimmed.join(', ') : null;\n        }            \n      });\n    }        \n    if(element.type === 'Table'){\n      element.fieldsMeta.forEach(field => {\n        if(field?.question?.subText){\n          arrayFields.forEach(key => {\n            if (Array.isArray(field.question.subText[key])) {\n              const trimmed = field.question.subText[key]\n                .map(item => item?.toString().trim())\n                .filter(item => item); // removes empty strings, null, undefined\n                field.question.subText[key] = trimmed.length > 0 ? trimmed.join(', ') : null;\n            } \n          });\n        }\n      });\n    }\n    if (isTranslate) {\n      //SKS28JUL25 Refresh the book signal from service\n      const updatedBook = this.formBuilderService.getBook();\n      this.book.set(updatedBook);\n      // Work with a mutable copy\n      const currentBook = this.book();\n      const translationMap = currentBook.translationMap || {};\n      const currentLang = this.translationService.getFormBuilderLanguage();\n      //SKS28JUL25 Ensure nested structure exists\n      if (!translationMap[currentLang]) translationMap[currentLang] = {};\n      if (!translationMap[currentLang][element.id]) translationMap[currentLang][element.id] = {};\n      // Set the translated value\n      translationMap[currentLang][element.id][path] = value;\n      // Update book and re-set the signal\n      currentBook.translationMap = translationMap;\n      if(currentLang === 'en'){\n        this.translationService.updateTranslations(translationMap)\n      }\n      this.book.set(currentBook); // Trigger reactive update\n      //SKS28JUL25 Update in service if needed\n      this.formBuilderService.updateBook(currentBook);\n    }    \n    this.selectedElement.update(el => ({ ...el, subText }));\n  }\n  \n  const keys = path.split('.');\n  this.selectedElement.update(el => {\n    let obj = { ...el };\n    let current = obj;\n    keys.forEach((key, index) => {\n      if (index === keys.length - 1) {\n        current[key] = value;\n      } else {\n        if (!current[key]) {\n          current[key] = isNaN(Number(keys[index + 1])) ? {} : [];\n        }\n        current = current[key];\n      }\n    });\n    return obj;\n  });\n  \n  this.formBuilderService.elementUpdate(this.selectedElementIndex(), this.selectedElement());\n}\noptionTranslationUpdate(option: any, event: any){\n  //SKS28JUL25 Refresh the book signal from service\n  const updatedBook = this.formBuilderService.getBook();\n  this.book.set(updatedBook);\n  // Work with a mutable copy\n  const currentBook = this.book();\n  const translationMap = currentBook.translationMap || {};\n  const currentLang = this.translationService.getFormBuilderLanguage();\n  //SKS28JUL25 Ensure nested structure exists\n  if (!translationMap[currentLang]) translationMap[currentLang] = {};\n  if (!translationMap[currentLang][option.id]) translationMap[currentLang][option.id] = {};\n  // Set the translated value\n  translationMap[currentLang][option.id]['label'] = event;\n  // Update book and re-set the signal\n  currentBook.translationMap = translationMap;\n  if(currentLang === 'en'){\n    this.translationService.updateTranslations(translationMap)\n  }\n  this.book.set(currentBook); // Trigger reactive update\n  //SKS28JUL25 Update in service if needed\n  this.formBuilderService.updateBook(currentBook);\n}\n  getStyleKeys(): string[] {\n    const style = this.selectedElement()?.style;\n    return style && typeof style === 'object' ? Object.keys(style) : [];\n  }\n\n  updateElement(element: any) {\n    this.formBuilderService.elementUpdate(this.selectedElementIndex(), element);\n    if (element?.type === 'Table' && this.selectColumn()) {\n      this.formBuilderService.setSelectedTableElement(this.selectedElementIndex(), { uniqueIdentifier: this.selectColumn() || null });\n      this.selectedElement.set({ ...element }); // Ensure reactive update\n    }\n  }\n\n  getValueByArrayPath(targetArrayPath: any, targetArrayKey: string, selectColumn: string, keyPath: string, isTableColumn: boolean = false): any {\n    if (isTableColumn) {\n      targetArrayPath = 'fieldsMeta';\n      targetArrayKey = 'uniqueIdentifier';\n      keyPath = 'question.' + keyPath;\n    }\n    let targetArray = this.getDataByPath(targetArrayPath);\n    if (typeof targetArray === 'string') {\n      try {\n        targetArray = JSON.parse(targetArray || '[]');\n      } catch (e) {\n        // console.error('Error parsing targetArray:', e);\n        return '';\n      }\n    }\n    if (!Array.isArray(targetArray)) return '';\n    const foundItem = targetArray.find(item => item[targetArrayKey] === selectColumn);\n    return foundItem ? keyPath.split('.').reduce((obj, key) => obj?.[key], foundItem) : '';\n  }\n  \n  updateValueByArrayPath(targetArrayPath: any, targetArrayKey: string, selectColumn: string, keyPath: string, event: any, isTableColumn: boolean = false,isTranslate:boolean = false ) {\n    // Clear cache when element changes\n    this.clearPropertiesCache();\n        \n    if (isTableColumn) {\n      targetArrayPath = 'fieldsMeta';\n      targetArrayKey = 'uniqueIdentifier';\n      keyPath = 'question.' + keyPath;\n    }\n        \n    let targetArray = this.getDataByPath(targetArrayPath);\n    if (typeof targetArray === 'string') {\n      try {\n        targetArray = JSON.parse(targetArray || '[]');\n      } catch (e) {\n        // console.error('Error parsing targetArray:', e);\n        targetArray = [];\n      }\n    }\n    \n    if (!Array.isArray(targetArray)) {\n      targetArray = [];\n      this.selectedElement.update(el => ({\n        ...el,\n        [targetArrayPath]: targetArray\n      }));\n    }\n    \n    let foundItem = targetArray.find(item => item[targetArrayKey] === selectColumn);\n    if (!foundItem) {\n      foundItem = { [targetArrayKey]: selectColumn };\n      targetArray.push(foundItem);\n    }\n    \n    const keys = keyPath.split('.');\n    let obj = foundItem;\n    for (let i = 0; i < keys.length - 1; i++) {\n      const key = keys[i];\n      if (!obj[key]) obj[key] = {};\n      obj = obj[key];\n    }\n    \n    const lastKey = keys[keys.length - 1];\n    const inputElement: any = event.target ? event.target as HTMLInputElement : event;\n    obj[lastKey] = inputElement?.type === 'checkbox' ? inputElement.checked : inputElement.value ? inputElement.value : inputElement;\n    if (isTranslate) {\n      // Refresh the book\n      this.book.set(this.formBuilderService.getBook());\n      //SKS28JUL25 Work with a mutable copy of the signal value\n      const currentBook = this.book();\n      const translationMap = currentBook.translationMap || {};\n      const currentLang = this.translationService.getFormBuilderLanguage();\n      // Initialize nested structure safely\n      if (!translationMap[currentLang]) translationMap[currentLang] = {};\n      if (!translationMap[currentLang][obj.uniqueIdentifier]) translationMap[currentLang][obj.uniqueIdentifier] = {};\n      // Set the translated input\n      translationMap[currentLang][obj.uniqueIdentifier][lastKey] = inputElement;\n      //SKS28JUL25 Update the book object and re-set the signal\n      currentBook.translationMap = translationMap;\n      if(currentLang === 'en'){\n        this.translationService.updateTranslations(translationMap)\n      }\n      this.book.set(currentBook);\n      // Optionally inform the service\n      this.formBuilderService.updateBook(currentBook);\n    }    \n    if (keyPath === 'summaryColumn') {\n      if (obj['summaryRow'] === true) {\n        obj['summaryRow'] = false;\n      }\n    }\n    \n    if (keyPath === 'summaryRow') {\n      if (obj['summaryColumn'] === true) {\n        obj['summaryColumn'] = false;\n      }\n    }\n    \n    this.selectedElement.update(el => ({\n      ...el,\n      [targetArrayPath]: targetArray\n    }));\n    \n    this.updateElement(this.selectedElement());\n  }\n\n  getDataByPath(path: string): any {\n    return path.split('.').reduce((obj, key) => obj?.[key], this.selectedElement());\n  }\n\n  flipHorizontal() {\n    this.transform.update(t => ({ ...t, flipH: !t.flipH }));\n  }\n\n  flipVertical() {\n    this.transform.update(t => ({ ...t, flipV: !t.flipV }));\n  }\n\n  resetImage() {\n    this.canvasRotation.set(0);\n    this.cropper.set(undefined);\n    this.transform.set({\n      translateUnit: 'px',\n      scale: 1,\n      rotate: 0,\n      flipH: false,\n      flipV: false,\n      translateH: 0,\n      translateV: 0\n    });\n  }\n\n  zoomOut() {\n    this.transform.update(t => ({ ...t, scale: t.scale! - 0.1 }));\n  }\n\n  zoomIn() {\n    this.transform.update(t => ({ ...t, scale: t.scale! + 0.1 }));\n  }\n\n  rotateLeft() {\n    this.loading.set(true);\n    setTimeout(() => {\n      this.canvasRotation.update(c => c - 1);\n      this.flipAfterRotate();\n    });\n  }\n\n  rotateRight() {\n    this.loading.set(true);\n    setTimeout(() => {\n      this.canvasRotation.update(c => c + 1);\n      this.flipAfterRotate();\n    });\n  }\n\n  moveLeft() {\n    this.transform.update(t => ({ ...t, translateH: t.translateH! - 1 }));\n  }\n\n  moveRight() {\n    this.transform.update(t => ({ ...t, translateH: t.translateH! + 1 }));\n  }\n\n  moveDown() {\n    this.transform.update(t => ({ ...t, translateV: t.translateV! + 1 }));\n  }\n\n  moveUp() {\n    this.transform.update(t => ({ ...t, translateV: t.translateV! - 1 }));\n  }\n\n  private flipAfterRotate() {\n    this.transform.update(t => ({\n      ...t,\n      flipH: t.flipV,\n      flipV: t.flipH,\n      translateH: 0,\n      translateV: 0\n    }));\n  }\n\n  async imageCropped(event: any) {\n    try {\n      const base64 = await this.convertBlobToBase64(event.objectUrl);\n      this.selectedElement.update(el => ({ ...el, imageData: base64 }));\n      await this.formBuilderService.elementUpdate(this.selectedElementIndex(), this.selectedElement());\n    } catch (error) {\n      // console.error(\"Error in imageCropped:\", error);\n    }\n  }\n\n  cropperReady(sourceImageDimensions: Dimensions) {\n    this.loading.set(false);\n  }\n\n  convertBlobToBase64(objectUrl: string): Promise<string> {\n    return fetch(objectUrl)\n      .then(response => response.blob())\n      .then(blob => {\n        return new Promise((resolve, reject) => {\n          const reader = new FileReader();\n          reader.readAsDataURL(blob);\n          reader.onloadend = () => resolve(reader.result as string);\n          reader.onerror = error => reject(error);\n        });\n      });\n  }\n\n  childEventCapture(event: any) {\n    this.selectedElement.update(el => ({\n      ...el,\n      qbReference: event?.valueObj?.name,\n      qbReferenceQuestions: event?.valueObj?.jsonBody\n    }));\n    this.formBuilderService.elementUpdate(this.selectedElementIndex(), this.selectedElement());\n  }\n\n  linkToggleDropdown(event: Event) {\n    event.stopPropagation();\n    this.isLinkDropdownOpen.update(open => !open);\n  }\n\n  @HostListener('document:click', ['$event'])\n  onClickOutside(event: Event) {\n    if (this.dropdown && !this.dropdown.nativeElement.contains(event.target)) {\n      this.isLinkDropdownOpen.set(false);\n    }\n  }\n\n  onDragStart(event: DragEvent, id: string) {\n    this.draggedId = id;\n    event.dataTransfer!.effectAllowed = \"move\";\n  }\n\n  // AP-28MAR25 Prevent default behavior to allow drop\n  onDragOver(event: DragEvent) {\n    event.preventDefault();\n  }\n\n  // AP-28MAR25 Swap the dragged item with the dropped position\n  onDrop(event: DragEvent, key: string) {\n    event.preventDefault();\n    const targetId = (event.target as HTMLElement).closest(\".option-items\")?.getAttribute(\"data-id\");\n    if (this.draggedId && targetId && this.draggedId !== targetId) {\n      this.selectedElement.update(el => {\n        const options = [...el[key]];\n        const draggedIndex = options.findIndex(option => option.id === this.draggedId);\n        const targetIndex = options.findIndex(option => option.id === targetId);\n        if (draggedIndex !== -1 && targetIndex !== -1) {\n          [options[draggedIndex], options[targetIndex]] = [options[targetIndex], options[draggedIndex]];\n        }\n        return { ...el, [key]: options };\n      });\n    }\n    this.draggedId = null;\n  }\n\n  duplicateField(element: any) {\n    const elements = this.formBuilderService.getElements();\n    const copy = JSON.parse(JSON.stringify(element));\n    //AP-18APR25 Generate a new ID using the service's method\n    copy.id = this.formBuilderService.addElementWithId();\n    //copy.uuid = copy.id; \n    // AP-18APR25 Set the questionNumber to the next available number\n    copy.questionNumber = elements.length + 1;\n    this.formBuilderService.addElement(copy);\n  }\n\n  private draggedId: string | null = null;\n  updateBookSubtext(key: 'endpoint' | 'variable' | 'defaultField', value: string) {\n    this.bookSubtext.update((s) => ({\n      ...s,\n      [key]: value,\n    }));\n  }  \n  trackByProp(index: number, item: any): any {\n    return item?.key ?? index;\n  }\n  \n  getOptimizedSubPropValue(subProp: any): string {\n    const element = this.selectedElement();\n    if (this.selectedElement()?.type === 'Table' && (subProp.targetArray || subProp.isTableColumn)) {\n      return this.getValueByArrayPath(\n        subProp.targetArray, \n        subProp.targetArrayKey, \n        this.selectColumn(), \n        subProp.key, \n        subProp.isTableColumn\n      );\n    }\n    return this.getValueByPath(subProp.key, element);\n  }\n// SKS31JUL25 default language text copy to clipboard\n  copyToClipboard(text: string | null): void {\n    if (text && navigator.clipboard) {\n      navigator.clipboard.writeText(text).then(() => {\n        this.copied = true;\n        this.cdr.detectChanges(); // manually trigger update\n  \n        setTimeout(() => {\n          this.copied = false;\n          this.cdr.detectChanges(); // update again when hiding\n        }, 1500);\n      }).catch(err => {\n        console.error('Failed to copy:', err);\n      });\n    }\n  }\n}","<!-- AP 22JAN25 - Field and Element Properties -->\n\n<div class=\"container\">\n  <div class=\"tabs\">\n    <div class=\"tab\" [ngClass]=\"{'active': activeTab() === 'attributes'}\" (click)=\"setActiveTab('attributes')\">{{ 'ATTRIBUTES' | nxtCustomTranslate : 'Attributes' }}</div>\n    <div class=\"tab\" [ngClass]=\"{'active': activeTab() === 'property'}\" (click)=\"setActiveTab('property')\">{{ 'PROPERTY' | nxtCustomTranslate : 'Property' }}</div>\n    <div class=\"tab\" [ngClass]=\"{'active': activeTab() === 'appearance'}\" (click)=\"setActiveTab('appearance')\">{{ 'APPEARANCE' | nxtCustomTranslate : 'Appearance' }}</div>\n  </div>\n  <div class=\"tab-content\" *ngIf=\"activeTab() === 'attributes'\">\n    @defer (when getProperties()) {\n      <div>\n        @defer (when selectedElement()?.type === 'Image') {\n          <image-cropper\n            *ngIf=\"selectedElement().imageData\"\n            [imageBase64]=\"selectedElement().orgImageData\"\n            [disabled]=\"false\"\n            [alignImage]=\"alignImage\"\n            [roundCropper]=\"roundCropper\"\n            [backgroundColor]=\"'white'\"\n            imageAltText=\"Alternative image text\"\n            [allowMoveImage]=\"false\"\n            [hideResizeSquares]=\"false\"\n            [canvasRotation]=\"canvasRotation()\"\n            [aspectRatio]=\"aspectRatio\"\n            [containWithinAspectRatio]=\"false\"\n            [maintainAspectRatio]=\"false\"\n            [cropperStaticWidth]=\"cropperStaticWidth\"\n            [cropperStaticHeight]=\"cropperStaticHeight\"\n            [cropperMinWidth]=\"cropperMinWidth\"\n            [cropperMinHeight]=\"cropperMinHeight\"\n            [cropperMaxWidth]=\"cropperMaxWidth\"\n            [cropperMaxHeight]=\"cropperMaxHeight\"\n            [resetCropOnAspectRatioChange]=\"true\"\n            [(cropper)]=\"cropper\"\n            [(transform)]=\"transform\"\n            [onlyScaleDown]=\"true\"\n            output=\"blob\"\n            format=\"png\"\n            (imageCropped)=\"imageCropped($event)\"\n            (cropperReady)=\"cropperReady($event)\"\n          ></image-cropper>\n          <div *ngIf=\"selectedElement().imageData\" style=\"display: flex; gap: 2px;\">\n            <div class=\"cursor-pointer logo-icon\" (click)=\"rotateLeft()\" title=\"{{ 'ROTATE_LEFT' | nxtCustomTranslate : 'Rotate Left' }}\">⟲</div>\n            <div class=\"cursor-pointer logo-icon\" (click)=\"rotateRight()\" title=\"{{ 'ROTATE_RIGHT' | nxtCustomTranslate : 'Rotate Right' }}\">⟳</div>\n            <div class=\"cursor-pointer logo-icon\" (click)=\"zoomOut()\" title=\"{{ 'ZOOM_OUT' | nxtCustomTranslate : 'Zoom Out' }}\">-</div>\n            <div class=\"cursor-pointer logo-icon\" (click)=\"zoomIn()\" title=\"{{ 'ZOOM_IN' | nxtCustomTranslate : 'Zoom In' }}\">+</div>\n            <div class=\"cursor-pointer logo-icon\" (click)=\"moveLeft()\" title=\"{{ 'MOVE_LEFT' | nxtCustomTranslate : 'Move Left' }}\">←</div>\n            <div class=\"cursor-pointer logo-icon\" (click)=\"moveRight()\" title=\"{{ 'MOVE_RIGHT' | nxtCustomTranslate : 'Move Right' }}\">→</div>\n            <div class=\"cursor-pointer logo-icon\" (click)=\"moveUp()\" title=\"{{ 'MOVE_UP' | nxtCustomTranslate : 'Move Up' }}\">↑</div>\n            <div class=\"cursor-pointer logo-icon\" (click)=\"moveDown()\" title=\"{{ 'MOVE_DOWN' | nxtCustomTranslate : 'Move Down' }}\">↓</div>\n            <div class=\"cursor-pointer logo-icon\" (click)=\"flipHorizontal()\" [ngClass]=\"{'enabled': transform().flipH}\" title=\"{{ 'FLIP_HORIZONTALLY' | nxtCustomTranslate : 'Flip Horizontally' }}\">↔</div>\n            <div class=\"cursor-pointer logo-icon\" (click)=\"flipVertical()\" [ngClass]=\"{'enabled': transform().flipV}\" title=\"{{ 'FLIP_VERTICALLY' | nxtCustomTranslate : 'Flip Vertically' }}\">↕</div>\n            <div class=\"cursor-pointer logo-icon\" (click)=\"resetImage()\" title=\"{{ 'RESET' | nxtCustomTranslate : 'Reset' }}\">×</div>\n          </div>\n        }\n        <div *ngIf=\"selectedElement()?.type === 'Book'\">\n          <label class=\"text-sm\">{{ 'SEARCH_BOOK' | nxtCustomTranslate : 'Search Book' }}</label>\n          <div style=\"display: flex; gap: 2px; align-items: center; justify-content: center;\">\n            <nxt-search-box\n              [question]=\"selectedElement()\"\n              [apiMeta]=\"bookSubtext()\"\n              [placeHolderText]=\"'SEARCH' | nxtCustomTranslate : 'Search...'\"\n              (searchValueChange)=\"childEventCapture($event.value)\"\n            ></nxt-search-box>\n            <div class=\"link-icon\">\n              <svg (click)=\"linkToggleDropdown($event)\" fill=\"#000000\" version=\"1.1\" id=\"Capa_1\"\n              xmlns=\"http://www.w3.org/2000/svg\" xmlns:xlink=\"http://www.w3.org/1999/xlink\" width=\"24px\" height=\"24px\"\n              viewBox=\"0 0 450 450\" xml:space=\"preserve\">\n              <g>\n                <g>\n                  <g>\n                    <path d=\"M318.15,230.195l77.934-77.937c31.894-31.892,31.894-83.782-0.004-115.674l-12.66-12.66\n          c-31.893-31.896-83.78-31.896-115.674-0.004l-77.937,77.934c-17.588,17.588-25.457,41.264-23.646,64.311\n          c-23.045-1.813-46.722,6.056-64.308,23.647L23.92,267.748c-31.894,31.889-31.894,83.779,0,115.674l12.664,12.662\n          c31.893,31.893,83.783,31.893,115.674,0l77.935-77.936c17.592-17.59,25.459-41.266,23.647-64.309\n          C276.884,255.654,300.56,247.783,318.15,230.195z M202.653,290.605l-77.936,77.938c-16.705,16.703-43.889,16.703-60.59,0\n          l-12.666-12.666c-16.705-16.701-16.703-43.885,0-60.594l77.936-77.932c14.14-14.141,35.779-16.306,52.226-6.516l-32.302,32.307\n          c-7.606,7.604-7.606,19.938,0,27.541c7.605,7.607,19.937,7.607,27.541,0l32.306-32.303\n          C218.959,254.828,216.795,276.469,202.653,290.605z M238.382,209.169l32.299-32.306c7.608-7.602,7.608-19.935,0-27.538\n          c-7.604-7.61-19.936-7.61-27.541-0.004l-32.303,32.303c-9.791-16.446-7.627-38.087,6.514-52.226l77.935-77.935\n          c16.707-16.707,43.89-16.707,60.594,0l12.664,12.664c16.705,16.705,16.705,43.886,0,60.591l-77.936,77.937\n          C276.468,216.797,254.828,218.959,238.382,209.169z\" />\n                    <path d=\"M343.466,261.465c-45.287,0-82,36.713-82,82s36.713,82,82,82c45.286,0,82-36.713,82-82S388.753,261.465,343.466,261.465z\n           M372.505,333.564l-56.046,56.104c-0.239,0.238-0.536,0.41-0.862,0.496l-22.315,5.85c-0.649,0.168-1.347-0.02-1.822-0.494\n          c-0.477-0.479-0.666-1.172-0.496-1.824l5.826-22.318c0.084-0.326,0.256-0.627,0.494-0.863l56.047-56.104\n          c0.742-0.742,1.945-0.744,2.688-0.002l4.548,4.541c0.739,0.74,0.741,1.943,0,2.688l-37.433,37.471l4.709,4.703l37.435-37.471\n          c0.739-0.742,1.94-0.742,2.682-0.002l4.55,4.541C373.25,331.617,373.25,332.822,372.505,333.564z M395.472,310.574l-17,17.018\n          c-0.739,0.744-1.942,0.744-2.685,0.002l-16.489-16.475c-0.744-0.74-0.744-1.943-0.002-2.688l17-17.02\n          c0.741-0.74,1.944-0.74,2.688-0.002l16.487,16.477C396.216,308.629,396.216,309.832,395.472,310.574z\" />\n                  </g>\n                </g>\n              </g>\n            </svg>\n              <div class=\"link-dropdown-menu\" *ngIf=\"isLinkDropdownOpen()\" #dropdown>\n                <label>{{ 'END_POINT' | nxtCustomTranslate : 'Endpoint' }}:</label>\n                <input type=\"text\" [ngModel]=\"bookSubtext().endpoint\" (ngModelChange)=\"updateBookSubtext('endpoint', $event)\" />\n                <label>{{ 'VARIABLE' | nxtCustomTranslate : 'Variable' }}:</label>\n                <input type=\"text\" [ngModel]=\"bookSubtext().variable\" (ngModelChange)=\"updateBookSubtext('variable', $event)\" />\n                <label>{{ 'FIELD' | nxtCustomTranslate : 'Field' }}:</label>\n                <input type=\"text\" [ngModel]=\"fieldAsString()\" (ngModelChange)=\"updateField($event)\" />\n                <label>{{ 'DEFAULT_FIELD' | nxtCustomTranslate : 'Default Field' }}:</label>\n                <input type=\"text\" [ngModel]=\"bookSubtext().defaultField\" (ngModelChange)=\"updateBookSubtext('defaultField', $event)\" />\n              </div>\n            </div>\n          </div>\n        </div>\n        <ng-container *ngFor=\"let prop of getProperties()?.elementProps; trackBy: trackByProp\">\n          <div class=\"form-group\">\n            <label *ngIf=\"prop.type !== 'checkbox' && prop.type !== 'subQuestion'\" class=\"text-sm\">{{ prop.labelPath | nxtCustomTranslate : prop.label }}</label>\n            <ng-container *ngIf=\"prop.isTranslate && formBuilderLanguageCode && formBuilderLanguageCode !== 'en'\">\n              <ng-container *ngIf=\"((selectedElement()?.type === 'Table' && (prop.targetArray || prop.isTableColumn) ? selectColumn() : selectedElement().id) + '.' + prop.key | nxtCustomTranslate : '' : 'formBuilder') as translated\">\n                <div *ngIf=\"translated?.trim()\" class=\"translation-fallback\">\n                 <div style=\"font-size: 10px;\">Default (English)</div>\n                  <div class=\"readonly-box\" style=\"display: flex; align-items: center; gap: 8px; position: relative;\">\n                    \n                    <span>{{ translated }}</span>\n            \n                    <!-- Copy Icon -->\n                    <svg *ngIf=\"!copied\"\n                    (click)=\"copyToClipboard(translated)\" width=\"16px\" height=\"16px\" viewBox=\"0 0 24.00 24.00\" fill=\"none\" xmlns=\"http://www.w3.org/2000/svg\" transform=\"rotate(0)\"><g id=\"SVGRepo_bgCarrier\" stroke-width=\"0\"></g><g id=\"SVGRepo_tracerCarrier\" stroke-linecap=\"round\" stroke-linejoin=\"round\" stroke=\"#CCCCCC\" stroke-width=\"0.048\"></g><g id=\"SVGRepo_iconCarrier\"> <g id=\"style=stroke\"> <g id=\"copy\"> <path id=\"rec (Stroke)\" fill-rule=\"evenodd\" clip-rule=\"evenodd\" d=\"M6.25 5.25C6.25 2.50265 8.43733 0.25 11.1667 0.25H17.8333C20.5627 0.25 22.75 2.50265 22.75 5.25V13.75C22.75 16.4974 20.5627 18.75 17.8333 18.75C17.4191 18.75 17.0833 18.4142 17.0833 18C17.0833 17.5858 17.4191 17.25 17.8333 17.25C19.7064 17.25 21.25 15.6971 21.25 13.75V5.25C21.25 3.30293 19.7064 1.75 17.8333 1.75H11.1667C9.29363 1.75 7.75 3.30293 7.75 5.25C7.75 5.66421 7.41421 6 7 6C6.58579 6 6.25 5.66421 6.25 5.25Z\" fill=\"#000000\"></path> <path id=\"rec (Stroke)_2\" fill-rule=\"evenodd\" clip-rule=\"evenodd\" d=\"M1.25 10.25C1.25 7.50265 3.43733 5.25 6.16667 5.25H12.8333C15.5627 5.25 17.75 7.50265 17.75 10.25V18.75C17.75 21.4974 15.5627 23.75 12.8333 23.75H6.16667C3.43733 23.75 1.25 21.4974 1.25 18.75V10.25ZM6.16667 6.75C4.29363 6.75 2.75 8.30293 2.75 10.25V18.75C2.75 20.6971 4.29363 22.25 6.16667 22.25H12.8333C14.7064 22.25 16.25 20.6971 16.25 18.75V10.25C16.25 8.30293 14.7064 6.75 12.8333 6.75H6.16667Z\" fill=\"#000000\"></path> </g> </g> </g></svg>\n                \n                    <!-- Copied Message -->\n                    <span *ngIf=\"copied\" class=\"copied-msg\">Copied!</span>\n                  </div>\n                </div>\n              </ng-container>\n            </ng-container>\n            <div *ngIf=\"prop.key === 'helpText' && selectedElement()?.helpText\">{{ selectedElement()?.helpText }}</div>\n            <input *ngIf=\"prop.type === 'text'\"\n              type=\"text\"\n              [placeholder]=\"prop.placeholder\"\n              [ngModel]=\"headerSelect() ? book().records[0].title : (selectedElement()?.type === 'Table' && (prop.targetArray || prop.isTableColumn) ? (getValueByArrayPath(prop.targetArray, prop.targetArrayKey, selectColumn(), prop.key, prop.isTableColumn)) : (selectedElement() | getValueByPath : prop.key))\"\n              (ngModelChange)=\"headerSelect() ? updateTitle($event) : (selectedElement()?.type === 'Table' && (prop.targetArray || prop.isTableColumn) ? updateValueByArrayPath(prop.targetArray, prop.targetArrayKey, selectColumn(), prop.key, $event, prop.isTableColumn, prop.isTranslate) : setValueByPath(prop.key, $event, prop.isTranslate))\"\n              [class.read-only]=\"selectedElement()?.readOnly\"\n              [readonly]=\"selectedElement()?.readOnly\"\n            />\n            <input *ngIf=\"prop.type === 'number'\"\n              type=\"number\"\n              [ngModel]=\"(selectedElement()?.type === 'Table' && (prop.targetArray || prop.isTableColumn) ? (getValueByArrayPath(prop.targetArray, prop.targetArrayKey, selectColumn(), prop.key, prop.isTableColumn)) : (selectedElement() | getValueByPath : prop.key))\"\n              (ngModelChange)=\"(selectedElement()?.type === 'Table' && (prop.targetArray || prop.isTableColumn) ? updateValueByArrayPath(prop.targetArray, prop.targetArrayKey, selectColumn(), prop.key, $event, prop.isTableColumn, prop.isTranslate) : setValueByPath(prop.key, $event, prop.isTranslate))\"\n            />\n            <select *ngIf=\"prop.type === 'select'\"\n              [ngModel]=\"(selectedElement()?.type === 'Table' && (prop.targetArray || prop.isTableColumn) ? (getValueByArrayPath(prop.targetArray, prop.targetArrayKey, selectColumn(), prop.key, prop.isTableColumn)) : (selectedElement() | getValueByPath : prop.key))\"\n              (ngModelChange)=\"(selectedElement()?.type === 'Table' && (prop.targetArray || prop.isTableColumn) ? updateValueByArrayPath(prop.targetArray, prop.targetArrayKey, selectColumn(), prop.key, $event, prop.isTableColumn, prop.isTranslate) : setValueByPath(prop.key, $event, prop.isTranslate))\"\n            >\n              <option *ngFor=\"let option of prop.options\" [value]=\"option.value\">{{ option.labelPath | nxtCustomTranslate : option.label }}</option>\n            </select>\n            <div *ngIf=\"prop.type === 'checkbox'\">\n              <input\n                type=\"checkbox\"\n                [checked]=\"selectedElement()?.type === 'Table' ? (prop.targetArray || prop.isTableColumn ? getValueByArrayPath(prop.targetArray, prop.targetArrayKey, selectColumn(), prop.key, prop.isTableColumn) : (selectedElement() | getValueByPath : prop.key)) : (selectedElement() | getValueByPath : prop.key)\"\n                (change)=\"selectedElement()?.type === 'Table' ? (prop.targetArray || prop.isTableColumn ? updateValueByArrayPath(prop.targetArray, prop.targetArrayKey, selectColumn(), prop.key, $event, prop.isTableColumn, prop.isTranslate) : onToggleChange(prop.key, $event)) : onToggleChange(prop.key, $event)\"\n              />\n              <span class=\"toggle-label\" style=\"padding-left: 10px;\">{{ prop.labelPath | nxtCustomTranslate : prop.label }}</span>\n            </div>\n            <div *ngIf=\"prop.type === 'subQuestion'\">\n              <div style=\"display: flex; flex-direction: row; gap: 10px; align-items: center;\">\n                <div>{{ prop.labelPath | nxtCustomTranslate : prop.label }}</div>\n                <input\n                  type=\"checkbox\"\n                  [checked]=\"selectedElement()?.type === 'Table' ? (prop.targetArray || prop.isTableColumn ? getValueByArrayPath(prop.targetArray, prop.targetArrayKey, selectColumn(), prop.key, prop.isTableColumn) : (selectedElement() | getValueByPath : prop.key)) : (selectedElement() | getValueByPath : prop.key)\"\n                  (change)=\"selectedElement()?.type === 'Table' ? (prop.targetArray || prop.isTableColumn ? updateValueByArrayPath(prop.targetArray, prop.targetArrayKey, selectColumn(), prop.key, $event, prop.isTableColumn, prop.isTranslate) : onToggleChange(prop.key, $event)) : onToggleChange(prop.key, $event)\"\n                />\n              </div>\n              <div *ngIf=\"selectedElement()?.type === 'Table' ? (prop.targetArray || prop.isTableColumn ? getValueByArrayPath(prop.targetArray, prop.targetArrayKey, selectColumn(), prop.key, prop.isTableColumn) : (selectedElement() | getValueByPath : prop.key)) : (selectedElement() | getValueByPath : prop.key)\">\n                <div *ngFor=\"let subProp of prop.subQuestion\" style=\"background-color: #e7f2ff; padding: 8px; border-radius: 4px;\">\n                  <div class=\"form-group\">\n                    <label>{{ subProp.labelPath | nxtCustomTranslate : subProp.label }}</label>\n                    <div *ngIf=\"subProp.type === 'array'\">\n                      <div *ngFor=\"let column of filteredColumns()\">\n                        <label>\n                          <input\n                            type=\"checkbox\"\n                            [checked]=\"subProp.operands ? subProp.operands.includes(column.apiName) : false\"\n                            (change)=\"onCheckboxChange(subProp.targetArray, subProp.targetArrayKey, subProp.key, column.apiName, $event.target.checked)\"\n                          >\n                          {{ column.apiName }}\n                        </label>\n                      </div>\n                    </div>\n                    <div *ngIf=\"subProp.type === 'radio'\">\n                      <div *ngFor=\"let column of filteredColumns()\">\n                        <label>\n                          <input\n                            type=\"radio\"\n                            [name]=\"subProp.key\"\n                            [value]=\"column.apiName\"\n                            [checked]=\"getValueByArrayPath(subProp.targetArray, subProp.targetArrayKey, selectColumn(), subProp.key) === column.apiName\"\n                            (change)=\"onRadioChange(subProp.targetArray, subProp.targetArrayKey, subProp.key, column.apiName)\"\n                          >\n                          {{ column.apiName }}\n                        </label>\n                      </div>\n                    </div>\n                    <input\n                      *ngIf=\"subProp.type === 'text'\"\n                      type=\"text\"\n                      [placeholder]=\"subProp.placeholder\"\n                      [ngModel]=\"selectedElement()?.type === 'Table' ? (subProp.targetArray ? getValueByArrayPath(subProp.targetArray, subProp.targetArrayKey, selectColumn(), subProp.key) : (selectedElement() | getValueByPath : subProp.key)) : (selectedElement() | getValueByPath : subProp.key)\"\n                      (ngModelChange)=\"selectedElement()?.type === 'Table' ? (subProp.targetArray ? updateValueByArrayPath(subProp.targetArray, subProp.targetArrayKey, selectColumn(), subProp.key, $event,false, prop.isTranslate) : setValueByPath(subProp.key, $event)) : setValueByPath(subProp.key, $event, prop.isTranslate)\"\n                    />\n                    <input\n                      *ngIf=\"subProp.type === 'boolean'\"\n                      type=\"checkbox\"\n                      [checked]=\"selectedElement() | getValueByPath : subProp.key\"\n                      (change)=\"setValueByPath(subProp.key, $event.target.checked)\"\n                    />\n                    <select\n                      *ngIf=\"subProp.type === 'select'\"\n                      [ngModel]=\"(selectedElement()?.type === 'Table' && (subProp.targetArray || subProp.isTableColumn) ? (getValueByArrayPath(subProp.targetArray, subProp.targetArrayKey, selectColumn(), subProp.key, subProp.isTableColumn)) : (selectedElement() | getValueByPath : subProp.key))\"\n                      (ngModelChange)=\"(selectedElement()?.type === 'Table' && (subProp.targetArray || subProp.isTableColumn) ? updateValueByArrayPath(subProp.targetArray, subProp.targetArrayKey, selectColumn(), subProp.key, $event, subProp.isTableColumn, prop.isTranslate) : setValueByPath(subProp.key, $event, prop.isTranslate))\"\n                    >\n                      <option *ngFor=\"let option of subProp.options\" [value]=\"option.value\">{{ option.labelPath | nxtCustomTranslate : option.label }}</option>\n                    </select>\n                    <input\n                      *ngIf=\"subProp.type === 'checkbox'\"\n                      type=\"checkbox\"\n                      [checked]=\"selectedElement() | getValueByPath : subProp.key\"\n                      (change)=\"setValueByPath(subProp.key, $event.target.checked)\"\n                    />\n                  </div>\n                </div>\n              </div>\n            </div>\n            <div *ngIf=\"prop.type === 'align'\">\n              <button *ngFor=\"let option of prop.options\" (click)=\"onAlignSelect(option.value)\" [ngClass]=\"{'active': selectedElement()?.textAlign === option.value}\" [title]=\"option.value\">\n                <img [src]=\"'../assets/icons/' + option.icon + '.svg'\" [alt]=\"option.value\" class=\"icon-size\" />\n              </button>\n            </div>\n            <div *ngIf=\"prop.type === 'style'\">\n              <button *ngFor=\"let option of prop.options\" (click)=\"onStyleSelect(option.value)\" [ngClass]=\"{'active': isStyleActive(option.value)}\" [title]=\"option.value\">\n                <img [src]=\"'../assets/icons/' + option.icon + '.svg'\" [alt]=\"option.value\" class=\"icon-size\" />\n              </button>\n            </div>\n            <div *ngIf=\"prop.type === 'color'\">\n              <input\n                type=\"color\" style=\"width: 100%;\"\n                [ngModel]=\"(selectedElement()?.type === 'Table' && (prop.targetArray || prop.isTableColumn) ? (getValueByArrayPath(prop.targetArray, prop.targetArrayKey, selectColumn(), prop.key, prop.isTableColumn)) : (selectedElement() | getValueByPath : prop.key))\"\n                (ngModelChange)=\"(selectedElement()?.type === 'Table' && (prop.targetArray || prop.isTableColumn) ? updateValueByArrayPath(prop.targetArray, prop.targetArrayKey, selectColumn(), prop.key, $event, prop.isTableColumn, prop.isTranslate) : setValueByPath(prop.key, $event, prop.isTranslate))\"\n              />\n            </div>\n             <!-- SKS16SEP25 formula  -->\n            <div *ngIf=\"prop.type === 'formula'\">\n              <app-formula-input\n                [attributes]=\"selectedElement['fieldsMeta']\"\n                [initialFormula]=\"selectedElement()?.type === 'Table' && (prop.targetArray || prop.isTableColumn) ? (getValueByArrayPath(prop.targetArray, prop.targetArrayKey, selectColumn(), prop.key, prop.isTableColumn)) : (selectedElement() | getValueByPath : prop.key)\"\n                (formulaChange)=\"selectedElement()?.type === 'Table' && (prop.targetArray || prop.isTableColumn) ? updateValueByArrayPath(prop.targetArray, prop.targetArrayKey, selectColumn(), prop.key, $event, prop.isTableColumn, prop.isTranslate) : setValueByPath(prop.key, $event, prop.isTranslate)\">\n              </app-formula-input>\n            </div>\n            <div *ngIf=\"prop.key === 'title'\" style=\"margin-top: 15px; border: 1px solid #ddd; padding: 20px; border-radius: 12px; background-color: #f9f9f9;\">\n              <div class=\"form-header\">\n                <label class=\"form-label\">{{ prop.labelPath | nxtCustomTranslate : prop.label }}</label>\n                <button (click)=\"addNewButton()\" class=\"add-button\">+ {{ 'ADD_BUTTON' | nxtCustomTranslate : 'Add Button' }}</button>\n              </div>\n              <div *ngFor=\"let btn of book()?.questionbook?.action || []; let i = index\" class=\"button-config-card\">\n                <div class=\"form-group\">\n                  <label>{{ 'BUTTON_ID' | nxtCustomTranslate : 'Button ID' }}</label>\n                  <input type=\"text\" [ngModel]=\"btn.id\" (ngModelChange)=\"onButtonPropertyChange(i, 'id', $event,true)\" placeholder=\"Enter button id\">\n                </div>\n                <div class=\"form-group\">\n                  <label>{{ 'BUTTON_NAME' | nxtCustomTranslate : 'Button Name' }}</label>\n                  <ng-container *ngIf=\"formBuilderLanguageCode && formBuilderLanguageCode !== 'en'\">\n                    <ng-container *ngIf=\"(btn.id + '.name'  | nxtCustomTranslate : '' : 'formBuilder') as translated\">\n                      <div *ngIf=\"translated?.trim()\" class=\"translation-fallback\">\n                       <div style=\"font-size: 10px;\">Default (English)</div>\n                        <div class=\"readonly-box\" style=\"display: flex; align-items: center; gap: 8px; position: relative;\">\n                          <span>{{ translated }}</span>\n                          <!-- Copy Icon -->\n                          <svg *ngIf=\"!copied\"\n                          (click)=\"copyToClipboard(translated)\" width=\"16px\" height=\"16px\" viewBox=\"0 0 24.00 24.00\" fill=\"none\" xmlns=\"http://www.w3.org/2000/svg\" transform=\"rotate(0)\"><g id=\"SVGRepo_bgCarrier\" stroke-width=\"0\"></g><g id=\"SVGRepo_tracerCarrier\" stroke-linecap=\"round\" stroke-linejoin=\"round\" stroke=\"#CCCCCC\" stroke-width=\"0.048\"></g><g id=\"SVGRepo_iconCarrier\"> <g id=\"style=stroke\"> <g id=\"copy\"> <path id=\"rec (Stroke)\" fill-rule=\"evenodd\" clip-rule=\"evenodd\" d=\"M6.25 5.25C6.25 2.50265 8.43733 0.25 11.1667 0.25H17.8333C20.5627 0.25 22.75 2.50265 22.75 5.25V13.75C22.75 16.4974 20.5627 18.75 17.8333 18.75C17.4191 18.75 17.0833 18.4142 17.0833 18C17.0833 17.5858 17.4191 17.25 17.8333 17.25C19.7064 17.25 21.25 15.6971 21.25 13.75V5.25C21.25 3.30293 19.7064 1.75 17.8333 1.75H11.1667C9.29363 1.75 7.75 3.30293 7.75 5.25C7.75 5.66421 7.41421 6 7 6C6.58579 6 6.25 5.66421 6.25 5.25Z\" fill=\"#000000\"></path> <path id=\"rec (Stroke)_2\" fill-rule=\"evenodd\" clip-rule=\"evenodd\" d=\"M1.25 10.25C1.25 7.50265 3.43733 5.25 6.16667 5.25H12.8333C15.5627 5.25 17.75 7.50265 17.75 10.25V18.75C17.75 21.4974 15.5627 23.75 12.8333 23.75H6.16667C3.43733 23.75 1.25 21.4974 1.25 18.75V10.25ZM6.16667 6.75C4.29363 6.75 2.75 8.30293 2.75 10.25V18.75C2.75 20.6971 4.29363 22.25 6.16667 22.25H12.8333C14.7064 22.25 16.25 20.6971 16.25 18.75V10.25C16.25 8.30293 14.7064 6.75 12.8333 6.75H6.16667Z\" fill=\"#000000\"></path> </g> </g> </g></svg>\n                          <!-- Copied Message -->\n                          <span *ngIf=\"copied\" class=\"copied-msg\">Copied!</span>\n                        </div>\n                      </div>\n                    </ng-container>\n                  </ng-container>\n                  <input type=\"text\" [ngModel]=\"btn.name\" (ngModelChange)=\"onButtonPropertyChange(i, 'name', $event,true)\" placeholder=\"Enter button name\">\n                </div>\n                <div class=\"form-group\">\n                  <label>{{ 'EVENT_NAME' | nxtCustomTranslate : 'Event Name' }}</label>\n                  <input type=\"text\" [ngModel]=\"btn.eventtoemit\" (ngModelChange)=\"onButtonPropertyChange(i, 'eventtoemit', $event)\" placeholder=\"Event to emit\">\n                </div>\n                <div class=\"form-group\">\n                  <label>{{ 'ACTION_DATA' | nxtCustomTranslate : 'Action Data' }}</label>\n                  <input type=\"text\" [ngModel]=\"btn.actionData\" (ngModelChange)=\"onButtonPropertyChange(i, 'actionData', $event)\" placeholder=\"Event to actionData\">\n                </div>\n                <div class=\"form-group\">\n                  <label>{{ 'ALT' | nxtCustomTranslate : 'Alt' }}</label>\n                  <input type=\"text\" [ngModel]=\"btn.alt\" (ngModelChange)=\"onButtonPropertyChange(i, 'alt', $event)\" placeholder=\"Button alt text\">\n                </div>\n                <div class=\"form-group\">\n                  <label>{{ 'END_POINT' | nxtCustomTranslate : 'Endpoint' }}</label>\n                  <input type=\"text\" [ngModel]=\"btn.endpoint\" (ngModelChange)=\"onButtonPropertyChange(i, 'endpoint', $event)\" placeholder=\"API endpoint\">\n                </div>\n                <div class=\"form-group\">\n                  <label>{{ 'METHOD' | nxtCustomTranslate : 'Method' }}</label>\n                  <select [ngModel]=\"btn.method\" (ngModelChange)=\"onButtonPropertyChange(i, 'method', $event)\">\n                    <option value=\"GET\">GET</option>\n                    <option value=\"POST\">POST</option>\n                    <option value=\"PUT\">PUT</option>\n                    <option value=\"DELETE\">DELETE</option>\n                  </select>\n                </div>\n                <div class=\"form-group\">\n                  <label>{{ 'BACKGROUND_COLOR' | nxtCustomTranslate : 'Background Color' }}</label>\n                  <input type=\"color\" style=\"width: 100%;\" [ngModel]=\"btn.bgColor\" (ngModelChange)=\"onButtonPropertyChange(i, 'bgColor', $event)\">\n                </div>\n                <div class=\"form-group\">\n                  <label>{{ 'BORDER_SIZE' | nxtCustomTranslate : 'Border Size' }}</label>\n                  <input type=\"range\" min=\"0\" max=\"50\" [ngModel]=\"btn.borderSize\" (ngModelChange)=\"onButtonPropertyChange(i, 'borderSize', $event)\">\n                  <span>{{ btn.borderSize }}px</span>\n                </div>\n                <div class=\"form-group\">\n                  <label>{{ 'BORDER_COLOR' | nxtCustomTranslate : 'Border Color' }}</label>\n                  <input type=\"color\" style=\"width: 100%;\" [ngModel]=\"btn.borderColor\" (ngModelChange)=\"onButtonPropertyChange(i, 'borderColor', $event)\">\n                </div>\n                <div class=\"form-group\">\n                  <label>{{ 'BORDER_RADIUS' | nxtCustomTranslate : 'Border Radius' }}</label>\n                  <input type=\"range\" min=\"0\" max=\"50\" [ngModel]=\"btn.borderRadius\" (ngModelChange)=\"onButtonPropertyChange(i, 'borderRadius', $event)\">\n                  <span>{{ btn.borderRadius }}px</span>\n                </div>\n                <div class=\"form-group\">\n                  <label>{{ 'BUTTON_WIDTH_PX' | nxtCustomTranslate : 'Button Width (px)' }}</label>\n                  <input type=\"number\" [ngModel]=\"btn.width\" (ngModelChange)=\"onButtonPropertyChange(i, 'width', $event)\" min=\"50\" placeholder=\"Enter width in px\">\n                </div>\n                <div class=\"form-group\">\n                  <label>{{ 'TEXT_COLOR' | nxtCustomTranslate : 'Text Color' }}</label>\n                  <input type=\"color\" style=\"width: 100%;\" [ngModel]=\"btn.textColor\" (ngModelChange)=\"onButtonPropertyChange(i, 'textColor', $event)\">\n                </div>\n                <div class=\"form-group\">\n                  <label>{{ 'POSITION_PERCENT' | nxtCustomTranslate : 'Position (%)' }}</label>\n                  <input type=\"range\" min=\"0\" max=\"100\" [ngModel]=\"btn.positionPercent\" (ngModelChange)=\"onButtonPropertyChange(i, 'positionPercent', $event)\">\n                  <span>{{ btn.positionPercent }}%</span>\n                </div>\n                <div class=\"form-group\">\n                  <label>\n                    <input type=\"checkbox\" [ngModel]=\"btn.updateParentData\"\n                      (ngModelChange)=\"onButtonPropertyChange(i, 'updateParentData', $event)\"\n                    />\n                    {{ 'UPDATE_PARENTDATA' | nxtCustomTranslate : 'updateParentData' }}\n                  </label>\n                </div>                \n                <button (click)=\"removeButton(btn)\" class=\"remove-button\">× {{ 'REMOVE' | nxtCustomTranslate : 'Remove' }}</button>\n              </div>\n            </div>\n          </div>\n        </ng-container>\n        <div *ngIf=\"selectedElement()?.type === 'Date' || selectedElement()?.type === 'DateTime'\">\n          <div class=\"text-sm\">\n            {{ 'DATE_RANGE' | nxtCustomTranslate : 'Date Range' }}\n          </div>\n          <div style=\"display: flex; gap: 2px; align-items: center;\">\n            <!-- Minimum Date -->\n            <div>\n              <label class=\"text-sm\">Minimum Date</label>\n              <label class=\"text-sm\">\n                <input\n                  type=\"checkbox\"\n                  [checked]=\"(selectedElement() | getValueByPath : 'minDate') === 'today'\"\n                  (change)=\"setValueByPath('minDate', $event.target.checked ? 'today' : null)\"\n                />\n                Current Date\n              </label>\n              <input\n                type=\"date\"\n                [ngModel]=\"(selectedElement() | getValueByPath : 'minDate') !== 'today' \n                            ? (selectedElement() | getValueByPath : 'minDate') \n                            : null\"\n                (ngModelChange)=\"setValueByPath('minDate', $event)\"\n                [readonly]=\"selectedElement()?.readOnly || \n                            (selectedElement() | getValueByPath : 'minDate') === 'today'\"\n                [class.read-only]=\"selectedElement()?.readOnly\"\n              />\n            </div>\n            <!-- Maximum Date -->\n            <div>\n              <label class=\"text-sm\">Maximum Date</label>\n              <label class=\"text-sm\">\n                <input\n                  type=\"checkbox\"\n                  [checked]=\"(selectedElement() | getValueByPath : 'maxDate') === 'today'\"\n                  (change)=\"setValueByPath('maxDate', $event.target.checked ? 'today' : null)\"\n                />\n                Current Date\n              </label>\n              <input\n                type=\"date\"\n                [ngModel]=\"(selectedElement() | getValueByPath : 'maxDate') !== 'today' \n                            ? (selectedElement() | getValueByPath : 'maxDate') \n                            : null\"\n                (ngModelChange)=\"setValueByPath('maxDate', $event)\"\n                [readonly]=\"selectedElement()?.readOnly || \n                            (selectedElement() | getValueByPath : 'maxDate') === 'today'\"\n                [class.read-only]=\"selectedElement()?.readOnly\"\n              />\n            </div>\n          </div>\n        </div>\n      </div>\n    }\n  </div>\n\n  <div class=\"tab-content\" *ngIf=\"activeTab() === 'property'\">\n    @defer (when getProperties()) {\n      <div>\n        <label>Id</label>\n        <div style=\"font-size: 13px; padding: 11px; border-radius: 5px; background-color: #f8f8f8; border: 1px solid #ddd;\">\n          {{ headerSelect() ? bookId() : selectedElement()?.id }}\n        </div>\n        <ng-container *ngFor=\"let prop of getProperties()?.fieldProps; trackBy: trackByProp\">\n          <div class=\"form-group\">\n            <label  *ngIf=\"prop.type !== 'subQuestion'\" class=\"text-sm\">{{ prop.labelPath | nxtCustomTranslate : prop.label }}</label>\n            <div *ngIf=\"prop.type === 'toggleGroup'\" class=\"toggle-group\">\n              <div class=\"toggle-item\">\n                <label class=\"toggle-label\">\n                  <input type=\"checkbox\" \n                  [checked]=\"selectedElement()?.type === 'Table' ? ((prop.targetArray || prop.isTableColumn) ? getValueByArrayPath(prop.targetArray, prop.targetArrayKey, selectColumn(), 'isOptional', true) : (selectedElement() | getValueByPath : 'isOptional')) : (selectedElement() | getValueByPath : 'isOptional')\"\n                  (change)=\"selectedElement()?.type === 'Table' ? ((prop.targetArray || prop.isTableColumn) ? updateValueByArrayPath(prop.targetArray, prop.targetArrayKey, selectColumn(), 'isOptional', $event, true, prop.isTranslate) : onToggleChange('isOptional', $event)) : onToggleChange('isOptional', $event)\"\n                  />\n                  {{ 'REQUIRED' | nxtCustomTranslate : 'Required' }}\n                </label>\n              </div>\n              <div class=\"toggle-item\">\n                <label class=\"toggle-label\">\n                  <input type=\"checkbox\" \n                  [checked]=\"selectedElement()?.type === 'Table' ? ((prop.targetArray || prop.isTableColumn) ? getValueByArrayPath(prop.targetArray, prop.targetArrayKey, selectColumn(), 'isReadOnly', true) : (selectedElement() | getValueByPath : 'isReadOnly')) : (selectedElement() | getValueByPath : 'isReadOnly')\"\n                  (change)=\"selectedElement()?.type === 'Table' ? ((prop.targetArray || prop.isTableColumn) ? updateValueByArrayPath(prop.targetArray, prop.targetArrayKey, selectColumn(), 'isReadOnly', $event, true, prop.isTranslate) : onToggleChange('isReadOnly', $event)) : onToggleChange('isReadOnly', $event)\"\n                  />\n                  {{ 'READ_ONLY' | nxtCustomTranslate : 'Read Only' }}\n                </label>\n              </div>\n              <div class=\"toggle-item\">\n                <label class=\"toggle-label\">\n                  <input type=\"checkbox\" \n                  [checked]=\"selectedElement()?.type === 'Table' ? ((prop.targetArray || prop.isTableColumn) ? getValueByArrayPath(prop.targetArray, prop.targetArrayKey, selectColumn(), 'isHidden', true) : (selectedElement() | getValueByPath : 'isHidden')) : (selectedElement() | getValueByPath : 'isHidden')\"\n                  (change)=\"selectedElement()?.type === 'Table' ? ((prop.targetArray || prop.isTableColumn) ? updateValueByArrayPath(prop.targetArray, prop.targetArrayKey, selectColumn(), 'isHidden', $event, true, prop.isTranslate) :  onToggleChange('isHidden', $event)) : onToggleChange('isHidden', $event)\"\n                  />\n                  {{ 'IS_HIDE' | nxtCustomTranslate : 'Is Hide' }}\n                </label>\n              </div>\n            </div>\n            <div *ngIf=\" prop.type === 'checkbox' || prop.type === 'radio' || prop.key === 'options'\" class=\"options-container\">\n              <div class=\"option-list\" (dragover)=\"onDragOver($event)\" (drop)=\"onDrop($event, prop.key)\">\n                <div *ngFor=\"let option of selectedElement()?.type === 'Table' && selectColumn() ? getValueByArrayPath('fieldsMeta', 'uniqueIdentifier', selectColumn(),  prop.key, true) : selectedElement()[prop.key] ; let i = index\" class=\"option-items\" [attr.data-id]=\"option.id\" draggable=\"true\" (dragstart)=\"onDragStart($event, option.id)\">\n                  <input type=\"text\" style=\"padding: 4px; border-radius: 2px;\" [ngModel]=\"option.value\" (ngModelChange)=\"option.value = $event\" placeholder=\"Value\" class=\"options\" />\n                  <input type=\"text\" style=\"padding: 4px; border-radius: 2px;\" [ngModel]=\"option.label\" (ngModelChange)=\"option.label = $event; optionTranslationUpdate(option,$event)\" placeholder=\"Label\" class=\"options\" />\n                  <img src=\"../assets/icons/Trash.svg\" (click)=\"removeOption(selectedElement()?.type === 'Table' && selectColumn() ? getValueByArrayPath('fieldsMeta', 'uniqueIdentifier', selectColumn(),  prop.key, true) : selectedElement()[prop.key], option.id)\">\n                  <span class=\"drag-handle\">☰</span>\n                </div>\n              </div>\n              <button (click)=\"addOption(selectedElement()?.type === 'Table' && selectColumn() ? getValueByArrayPath('fieldsMeta', 'uniqueIdentifier', selectColumn(), prop.key, true) : selectedElement()[prop.key])\">\n                <div class=\"add-varient\">\n                  <span class=\"text-lg\">+</span>\n                  <span>{{ 'ADD' | nxtCustomTranslate : 'Add' }}</span>\n                </div>\n              </button>\n            </div>\n            <input *ngIf=\"prop.type === 'text'\"\n              type=\"text\"\n              [placeholder]=\"prop.placeholder\"\n              [ngModel]=\"headerSelect() ? book().records[0].title : (selectedElement()?.type === 'Table' && (prop.targetArray || prop.isTableColumn) ? getValueByArrayPath(prop.targetArray, prop.targetArrayKey, selectColumn(), prop.key, prop.isTableColumn) : (selectedElement() | getValueByPath : prop.key))\"\n              (ngModelChange)=\"headerSelect() ? updateTitle($event) : (selectedElement()?.type === 'Table' && (prop.targetArray || prop.isTableColumn) ? updateValueByArrayPath(prop.targetArray, prop.targetArrayKey, selectColumn(), prop.key, $event, prop.isTableColumn, prop.isTranslate) : setValueByPath(prop.key, $event, prop.isTranslate))\"\n              [class.read-only]=\"selectedElement()?.readOnly\"\n              [readonly]=\"selectedElement()?.readOnly\"\n            />\n            <div *ngIf=\"prop.type === 'subQuestion'\">\n              <div class=\"style-toggle-header\" (click)=\"toggleSubQuestion(prop)\">\n                <div class=\"head-elements\">Sub Text</div>\n                <img [src]=\"isExpanded ? '../assets/icons/arrow-down.svg' : '../assets/icons/arrow-right.svg'\"\n                  alt=\"Toggle Arrow\" class=\"arrow-icon\">\n              </div>\n              <div *ngIf=\"isExpanded\" style=\"border: 1px solid #ddd; border-radius: 4px;\">\n                <div *ngFor=\"let subProp of prop.subQuestion; trackBy: trackByProp\" style=\"background-color: #e7f2ff; padding: 8px; border-radius: 4px;\">\n                  <div class=\"form-group\">\n                    <label>{{ subProp.labelPath | nxtCustomTranslate : subProp.label }}</label>\n                    <input *ngIf=\"subProp.type === 'text' || subProp.type === 'number'\"\n                      [type]=\"subProp.type\"\n                      [placeholder]=\"subProp.placeholder\"\n                      [value]=\"getOptimizedSubPropValue(subProp)\"\n                      (input)=\"(selectedElement()?.type === 'Table' && (subProp.targetArray || subProp.isTableColumn)) ? updateValueByArrayPath(subProp.targetArray, subProp.targetArrayKey, selectColumn(), subProp.key, $event.target.value, subProp.isTableColumn, prop.isTranslate) : setValueByPath(subProp.key, $event.target.value, prop.isTranslate)\"\n                      [class.read-only]=\"selectedElement()?.readOnly\"\n                      [readonly]=\"selectedElement()?.readOnly\" />\n                    <!-- AP-02APR25 Render input field only if subProp.type is 'array' -->\n                    <input *ngIf=\"subProp.type === 'array'\" type=\"text\" [placeholder]=\"subProp.placeholder\"\n                      [value]=\"getValueByPath(subProp.key)\" (input)=\"setValueByPath(subProp.key, $event.target.value, prop.isTranslate)\" />\n\n                    <input *ngIf=\"subProp.type === 'boolean'\" type=\"checkbox\" [checked]=\"getOptimizedSubPropValue(subProp)\"\n                      (change)=\"(selectedElement()?.type === 'Table' && (subProp.targetArray || subProp.isTableColumn)) ? updateValueByArrayPath(subProp.targetArray, subProp.targetArrayKey, selectColumn(), subProp.key, $event.target.checked, subProp.isTableColumn, prop.isTranslate) : setValueByPath(subProp.key, $event.target.checked, prop.isTranslate)\" />\n                  </div>\n                </div>\n              </div>\n            </div>\n            <div *ngIf=\"prop.type === 'checkbox'\">\n              <span class=\"toggle-label\" style=\"padding-right: 10px;\">{{ prop.labelPath | nxtCustomTranslate : prop.label }}</span>\n              <input\n                type=\"checkbox\"\n                [checked]=\"selectedElement()?.type === 'Table' ? (prop.targetArray || prop.isTableColumn ? getValueByArrayPath(prop.targetArray, prop.targetArrayKey, selectColumn(), prop.key, prop.isTableColumn) : (selectedElement() | getValueByPath : prop.key)) : (selectedElement() | getValueByPath : prop.key)\"\n                (change)=\"selectedElement()?.type === 'Table' ? (prop.targetArray || prop.isTableColumn ? updateValueByArrayPath(prop.targetArray, prop.targetArrayKey, selectColumn(), prop.key, $event, prop.isTableColumn, prop.isTranslate) : onToggleChange(prop.key, $event)) : onToggleChange(prop.key, $event)\"\n              />\n            </div>\n             <!-- SKS16SEP25 formula  -->\n             <div *ngIf=\"prop.type === 'formula'\">\n              <app-formula-input\n                [attributes]=\"selectedElement['fieldsMeta']\"\n                [initialFormula]=\"selectedElement()?.type === 'Table' ? (prop.targetArray || prop.isTableColumn ? getValueByArrayPath(prop.targetArray, prop.targetArrayKey,  selectColumn(), prop.key , prop.isTableColumn) :  (selectedElement() | getValueByPath : prop.key)) : (selectedElement() | getValueByPath : prop.key)\"\n                (formulaChange)=\"selectedElement()?.type === 'Table' ? (prop.targetArray  || prop.isTableColumn ? updateValueByArrayPath(prop.targetArray, prop.targetArrayKey,  selectColumn(), prop.key, $event, prop.isTableColumn, prop.isTranslate) :setValueByPath(prop.key, $event, prop.isTranslate) ) : setValueByPath(prop.key, $event, prop.isTranslate)\">\n              </app-formula-input>\n            </div>\n          </div>\n        </ng-container>\n        <div class=\"style-toggle-header\" (click)=\"toggleStyleSection()\">\n          <div class=\"head-elements\">{{ 'STYLE' | nxtCustomTranslate : 'Style' }}</div>\n          <img [src]=\"isStyleExpanded() ? '../assets/icons/arrow-down.svg' : '../assets/icons/arrow-right.svg'\" alt=\"Toggle Arrow\" class=\"arrow-icon\">\n        </div>\n        <div *ngIf=\"isStyleExpanded()\" style=\"border: 1px solid #ddd; padding: 8px; border-radius: 4px;\">\n          <div class=\"form-group\">\n            <div *ngFor=\"let key of getStyleKeys()\">\n              <label>{{ key }}</label>\n              <input\n                type=\"text\"\n                [value]=\"selectedElement()?.type === 'Table' && selectColumn() ? getValueByArrayPath('fieldsMeta', 'uniqueIdentifier', selectColumn(),'style.' + key, true) : (selectedElement() | getValueByPath : 'style.' + key)\"\n                (input)=\"(selectedElement()?.type === 'Table' && selectColumn() ) ? updateValueByArrayPath('fieldsMeta', 'uniqueIdentifier', selectColumn(), 'style.' + key, $event.target.value, true) : setValueByPath('style.' + key, $event.target.value)\"\n                placeholder=\"Enter {{ key }}\"\n              />\n            </div>\n          </div>\n        </div>\n      </div>\n    }\n  </div>\n\n  <div class=\"tab-content\" *ngIf=\"activeTab() === 'appearance'\">\n    @defer (when getProperties()) {\n      <div>\n        <ng-container *ngFor=\"let prop of getProperties()?.appearance; trackBy: trackByProp\">\n          <div class=\"form-group\">\n            <label class=\"text-sm\">{{ prop.labelPath | nxtCustomTranslate : prop.label }}</label>\n            <select\n              *ngIf=\"prop.type === 'select'\"\n              [ngModel]=\"(selectedElement()?.type === 'Table' && (prop.targetArray || prop.isTableColumn) ? (getValueByArrayPath(prop.targetArray, prop.targetArrayKey, selectColumn(), prop.key, prop.isTableColumn)) : (selectedElement() | getValueByPath : prop.key))\"\n              (ngModelChange)=\"(selectedElement()?.type === 'Table' && (prop.targetArray || prop.isTableColumn) ? updateValueByArrayPath(prop.targetArray, prop.targetArrayKey, selectColumn(), prop.key, $event, prop.isTableColumn, prop.isTranslate) : setValueByPath(prop.key, $event, prop.isTranslate))\"\n            >\n              <option *ngFor=\"let option of prop.options\" [value]=\"option.value\">{{ option.labelPath | nxtCustomTranslate : option.label }}</option>\n            </select>\n            <input\n              *ngIf=\"prop.type === 'text'\"\n              type=\"text\"\n              [placeholder]=\"prop.placeholder\"\n              [ngModel]=\"selectedElement() | getValueByPath : prop.key\"\n              (ngModelChange)=\"setValueByPath(prop.key, $event, prop.isTranslate)\"\n            />\n\n            <div class=\"flex-container\">\n              <div *ngIf=\"prop.type === 'color'\" class=\"color-selector\">\n                <input\n                  type=\"color\" style=\"width: 100%;\"\n                  [ngModel]=\"selectedElement()?.color\"\n                  (ngModelChange)=\"setValueByPath('color', $event, prop.isTranslate)\"\n                >\n              </div>\n              <div *ngIf=\"prop.type === 'color'\" class=\"hex-input-container\">\n                <span>{{ 'HEX_CODE' | nxtCustomTranslate : 'HEX Code' }}</span>\n                <input\n                  type=\"text\"\n                  [ngModel]=\"selectedElement() | getValueByPath : prop.key\"\n                  (ngModelChange)=\"setValueByPath(prop.key, $event, prop.isTranslate)\"\n                />\n              </div>\n            </div>\n            <div *ngIf=\"prop.type === 'button-toggle'\" class=\"button-toggle-wrapper\">\n              <button\n                type=\"button\"\n                class=\"toggle-button\"\n                (click)=\"duplicateField(selectedElement())\"\n              >\n              {{ 'ADD_DUPLICATE' | nxtCustomTranslate : 'Add Duplicate' }}\n              </button>\n            </div>\n          </div>\n        </ng-container>\n      </div>\n    }\n  </div>\n\n  <div class=\"button-container\" *ngIf=\"!templateSelected\">\n    <button class=\"save-btn\" (click)=\"handleButtonClick()\">{{ 'SAVE' | nxtCustomTranslate : 'Save' }}</button>\n    <button class=\"cancel-btn\" (click)=\"onCancel()\">{{ 'CANCEL' | nxtCustomTranslate : 'Cancel' }}</button>\n  </div>\n\n  <div class=\"button-container\" *ngIf=\"templateSelected\" style=\"margin-top: 20px;\">\n    <button class=\"save-btn\" (click)=\"handleTemplateSave()\">{{ 'SAVE_TEMPLATE' | nxtCustomTranslate : 'Save Template' }}</button>\n  </div>\n</div>","// AP 22JAN25 - form preview and All form elements\nimport {\n  ChangeDetectorRef,\n  Component,\n  EventEmitter,\n  Input,\n  Output,\n  SimpleChanges,\n} from \"@angular/core\";\nimport { VERSION } from \"../../../../environments/version\";\nimport { CommonModule } from \"@angular/common\";\nimport { FormsModule } from \"@angular/forms\";\nimport { BookletComponent } from \"../../booklet/booklet.component\";\nimport { NxtDatatable } from \"../../../components/datatable/datatable.component\";\nimport { nxtDropdown } from \"../../../components/nxt-dropdown/nxt-dropdown.component\";\nimport { FormBuilderService } from \"../../../services/form-builder/form-builder.service\";\nimport { TranslationService } from \"../../../services/translation/translation.service\";\nimport { NxtCustomTranslatePipe } from \"../../../pipe/custom-translate.pipe\";\n\n@Component({\n  selector: \"app-element\",\n  standalone: true,\n  imports: [\n    CommonModule,\n    FormsModule,\n    BookletComponent,\n    NxtDatatable,\n    nxtDropdown,\n    NxtCustomTranslatePipe\n],\n  templateUrl: \"./element.component.html\",\n  styleUrls: [\"./element.component.css\"],\n})\nexport class ElementComponent {\n  @Input() bookletJSON: any;\n  @Input() langOption: any;\n  @Input() languageCode: any ='en';\n  @Output() templateMode = new EventEmitter<boolean>();\n  field: any;\n  formElements: any[] = [];\n  elements: any[] = [];\n  bookId: string;\n  sections = {\n    basic: true, // Basic Elements open by default\n    advanced: true, // Advanced Elements closed by default\n  };\n  basicElements: any[] = [];\n  advancedElements: any[] = [];\n  //elementDisabledArray: any;\n  version = VERSION.version; //SKS10MAR25 get version from environment/version.ts\n  book: any;\n  selectedElement: any = null;\n  isSelectTablePopup: boolean = false;\n  currentType: string;\n  addTable: boolean = true;\n  dots = Array(6);\n  draggedIndex: number | null = null;\n  templateSelected = false;\n  isHeaderSelect: boolean = false;\n  selectedColumn: any;\n  statictype = ['Book','File','Checkbox','Radio','List','Dropdown','MultiSelect','Table','Text','currency','Icon','Line','Image','Space','Boolean','Calendar','Date','Time','DateTime','month','Email','Number','TextArea','RichTextArea','Label'] // SKS12FEB26 static element\n  constructor(private cdRef: ChangeDetectorRef, private formBuilderService: FormBuilderService, private translationService: TranslationService) {}\n// AP-06MAR25 Basic elements updated (RichTextArea, Date added)\n  ngOnInit() {\n    this.basicElements = [\n      { type: \"Text\", img: \"Text\", label: \"Text\" },\n      { type: \"Number\", img: \"Number\", label: \"Number\" },\n      { type: \"Label\", img: \"Label\", label: \"Label\" },\n      { type: \"Email\", img: \"Email\", label: \"Email\" },\n      { type: \"Date\", img: \"Date\", label: \"Date\" },\n      { type: \"Time\", img: \"Time\", label: \"Time\" },\n      { type: \"DateTime\", img: \"DateTime\", label: \"DateTime\" },\n      { type: \"month\", img: \"month\", label: \"Month\" },\n      { type: \"Calendar\", img: \"Calendar\", label: \"Calendar\" },\n      { type: \"File\", img: \"File\", label: \"Files\" },\n      { type: \"Image\", img: \"Image\", label: \"Image\" },\n      { type: \"Checkbox\", img: \"CheckBox\", label: \"Checkbox\" },\n      { type: \"Radio\", img: \"Radio\", label: \"Radio\" },\n      { type: \"Dropdown\", img: \"Drop\", label: \"Dropdown\" },\n      { type: \"MultiSelect\", img: \"Drop\", label: \"Multi Select\" },\n      { type: \"TextArea\", img: \"TextArea\", label: \"Text Area\" },\n      { type: \"RichTextArea\", img: \"RichText\", label: \"Rich Text\" },\n    ];\n\n    this.advancedElements = [\n      { type: \"Icon\", img: \"Icon\", label: \"Icon\" }, //MSM10JUL25 icon selector component\n      { type: \"Line\", img: \"line\", label: \"Line\" },\n      { type: \"Space\", img: \"space\", label: \"Space\" },\n      { type: \"Boolean\", img: \"Boolean\", label: \"Boolean\" },\n      { type: \"Book\", img: \"Search\", label: \"Book\" },\n      { type: \"List\", img: \"Search\", label: \"List\" },\n      { type: \"Table\", img: \"Table\", label: \"Table\" },\n      { type: \"Button\", img: \"Button\", label: \"Button\" },\n    ]\n\n    this.formBuilderService.formElements$.subscribe((elements) => {\n      setTimeout(() => {\n        this.formElements = elements.map((field) => ({ ...field }));\n      }, 0);\n    });\n    if (this.bookletJSON && this.bookletJSON !== \"\" && Object.keys(this.bookletJSON).length > 0 && this.bookletJSON.bookQuestionsMap) {\n      this.initializeForm();\n    } else {\n      this.formBuilderService.newBook();\n    }\n    this.book = this.formBuilderService.getBook();\n    this.formBuilderService.selectedElement$.subscribe((index) => {\n      const elements = this.formBuilderService.getElements();\n      if (index >= 0) {\n        this.selectedElement = elements[index];\n      }\n    });\n    this.formBuilderService.addElementWithId();\n    this.translationService.formBuilderTranslationsLoaded$.subscribe(() => {\n      this.cdRef.detectChanges(); // Force pipe re-evaluation\n    });\n  }\n\n  // Add these methods\n  toggleSection(section: \"basic\" | \"advanced\") {\n    this.sections[section] = !this.sections[section];\n  }\n\n  isSectionOpen(section: string): boolean {\n    return this.sections[section];\n  }\n\n  // AP - 26FEB25 - Added ngOnChanges to handle changes in bookletJSON\n  ngOnChanges(changes: SimpleChanges) {\n    if (changes[\"bookletJSON\"] && changes[\"bookletJSON\"].currentValue) {\n      if (this.bookletJSON && this.bookletJSON !== \"\" && Object.keys(this.bookletJSON).length > 0 && this.bookletJSON.bookQuestionsMap) {\n        // AP-28MAY25 - Check and transform `action` if it's in Existing format\n        if (\n          this.bookletJSON.questionbook &&\n          this.bookletJSON.questionbook.action &&\n          typeof this.bookletJSON.questionbook.action === \"string\"\n        ) {\n          try {\n            const parsedActions = JSON.parse(\n              this.bookletJSON.questionbook.action\n            );\n\n            // AP-28MAY25 Assign specific positionPercent based on action name\n            const newActions = parsedActions.map((item: any, index: number) => {\n              const positionPercent =\n                item.name === \"Cancel\"\n                  ? 3\n                  : item.name === \"Save\"\n                  ? 14\n                  : 10 + index * 10;\n\n              return {\n                ...item,\n                positionPercent: positionPercent,\n                width: 100,\n                textColor: \"#ffffff\",\n                borderRadius: 6,\n                id: index + 1,\n              };\n            });\n            // AP-28MAY25 Replace the old action string with the newly formatted array\n            this.bookletJSON.questionbook.action = newActions;\n          } catch (e) {\n            console.error(\"Error parsing action JSON string:\", e);\n          }\n        }\n\n        this.initializeForm();\n      } else {\n        this.formElements = []\n        this.formBuilderService.clearElements();\n        this.formBuilderService.newBook();\n      }\n    }\n  }\n  // AP-08APR25 Template is selected, update form elements and emit template mode\n  onTemplateSelected(event: { selectedTemplate: any; elements: any[] }) {\n    this.formBuilderService.clearElements();\n    event.elements.forEach((el) => this.formBuilderService.addElement(el));\n\n    // Emit template mode to parent\n    this.templateMode.emit(true);\n  }\n\n  private initializeForm() {\n    if (!this.bookletJSON || !this.bookletJSON.bookQuestionsMap) {\n      console.warn(\"Invalid bookletJSON structure\");\n      return;\n    }\n    this.formElements = [];\n    this.formBuilderService.clearElements();\n    this.formBuilderService.intializeBook(this.bookletJSON);\n    this.formElements = this.formBuilderService.getElements();\n  }\n\n  // Add this method to handle element selection\n  selectElement(index: number) {\n    this.isHeaderSelect = false\n    this.selectedColumn = null\n    this.selectedFieldIndex = index; // element is selected\n    this.formBuilderService.setSelectedElement(index);\n    this.book = this.formBuilderService.getBook();\n  }\n  selectedFieldIndex: number | null = null; // element is cleared\n\n  selectHeading(event: any) {\n    this.isHeaderSelect = true\n    this.selectedFieldIndex = null;\n    this.selectedColumn = null\n    this.formBuilderService.selectHeading(event); //AP-10MAR25 Updates the selected heading in the service\n    this.book = this.formBuilderService.getBook(); //AP-10MAR25 Retrieves the updated book/form data\n  }\n  // AP-17APR25 generateUiId\n  generateUiId() {\n    return this.formBuilderService.addElementWithId();\n  }\n\n  addElement(type: string): void {\n    const unique_id = this.generateUiId();\n    this.currentType = type;\n    if (this.selectedElement?.type === \"Table\" && this.addTable) {\n      this.isSelectTablePopup = true;\n    } else {\n      const newElement = {\n        action: null,\n        id: unique_id,\n        type,\n        name: null,\n        questionText: null,\n        question: null,\n        helpText: null,\n        errorMessage: null,\n        isReadOnly: false,\n        isHidden: false,\n        required: false,\n        referenceField: null,\n        additionalRichContent: null,\n        groupName: null,\n        isDateBackward: false,\n        title: null,\n        subTitle: null,\n        size: 12,\n        isDateForward: false,\n        isOptional: false,\n        isTitle: false,\n        nextQuestion: null,\n        allowedFileExtensions: null,\n        questionNumber: this.formBuilderService.getElements().length + 1,\n        order: this.formElements.length + 1,\n        questionBookId: this.formBuilderService.getBookId(),\n        fieldsMeta: [],\n        trackingId: null,\n        recordId: null,\n        qbReference: null,\n        qbReferenceQuestions: null,\n        primaryKey: false,\n        style: {\n          labelClass: null,\n          labelStyle: null,\n          labelValueStyle: null,\n          inputClass: null,\n          inputStyle: null,\n          showLabel: true,\n          bookStyle: null,\n          direction: \"ltr\",\n          questionStyle: null,\n        },\n        subText: {\n          endpoint: null,\n          variable: null,\n          field: null,\n          defaultField: null,\n          sourceQuestionId: null,\n          valueField: null,\n          labelField: null,\n          isDependentField: false,\n          dependentValue: null,\n          queryField: null,\n          queryValue: null,\n          queryValueReference: null,\n          uniqueKey: null,\n        },\n        imageData: null,\n        boolean: false,\n        options:\n          type === \"Dropdown\" || type === \"MultiSelect\" || type === \"TableColumn\" || type === \"Radio\" || type === \"Checkbox\"\n            ? []\n            : null,\n        imageSize: type === \"Image\" ? { width: 150, height: 150 } : null,\n        tableConfig:\n          type === \"Table\"\n            ? {\n                isNosIndicator: true,\n                serialNumberColumn: true,\n                addInlineRecord: true,\n                isPagination: true,\n                actionButton: true,\n                isDeleteRow: true,\n                isEditRow: true,\n                searchBar: true,\n                isButtons: true,\n                itemsPerPage: 10,\n              }\n            : null,\n      };\n      this.formBuilderService.addElement(newElement);\n      this.formElements = this.formBuilderService.getElements() || [];\n      this.addTable = true;\n    }\n  }\n\n  // Remove an element by index\n  removeElement(field: any, index: number): void {\n    this.formBuilderService.removeElementComponent(field.id);\n    this.formElements = this.formBuilderService.getElements() || [];\n  }\n\n  onDragStart(event: DragEvent, index: number) {\n    this.draggedIndex = index;\n    event.dataTransfer?.setData(\"text/plain\", index.toString());\n  }\n\n  // Allow dropping by preventing default\n  onDragOver(event: DragEvent, index: number) {\n    event.preventDefault();\n  }\n\n  // Handle drop event\n  onDrop(event: DragEvent, dropIndex: number) {\n    event.preventDefault();\n\n    if (this.draggedIndex === null || this.draggedIndex === dropIndex) return;\n\n    const draggedItem = this.formElements[this.draggedIndex];\n\n    // Remove dragged item from old position and insert it in new position\n    this.formElements.splice(this.draggedIndex, 1);\n    this.formElements.splice(dropIndex, 0, draggedItem);\n\n    //AP-28MAR25 Update questionNumber dynamically based on new order\n    this.formElements.forEach((element, index) => {\n      element.questionNumber = index + 1;\n    });\n\n    // Reset dragged index\n    this.draggedIndex = null;\n\n    // Notify service about the update\n    this.formBuilderService.updateElementsOrder(this.formElements);\n  }\n\n  toggleBoolean(field: any): void {\n    field.boolean = !field.boolean;\n  }\n\n  // SKS13MAR25 table popup conformation based element add\n  onClose() {\n    this.isSelectTablePopup = false;\n    this.addTable = false;\n    this.addElement(this.currentType);\n  }\n  // SKS13MAR25 column element add inside a table\n  addOnTable() {\n    this.addTable = true;\n    this.isSelectTablePopup = false;\n    const elements = [...this.formBuilderService.getElements()];\n\n    // Find the element and update its columns\n    const index = elements.findIndex((el) => el.id === this.selectedElement.id);\n    const rowNum = this.formElements[index].fieldsMeta\n      ? this.formElements[index].fieldsMeta?.length\n      : 0;\n    const unique_id = this.generateUiId();\n    const tableElement = {\n      label: `HEADER LABEL ${rowNum}`,\n      fieldName: `FIELD NAME ${rowNum}`,\n      type: this.currentType,\n      id: unique_id,\n    };\n    this.formBuilderService.addTableElement(\n      tableElement,\n      this.selectedFieldIndex\n    );\n    this.formElements = this.formBuilderService.getElements() || [];\n  }\n \n  columnSelected(event: any) {\n    // SKS19MAR25 table column update\n    this.formElements.forEach((ele: any, index: number) => {\n      if (ele.type === 'Table' && Array.isArray(ele.fieldsMeta)) {\n        const matchedField = ele.fieldsMeta.find(\n          (field: any) => field.uniqueIdentifier === event?.uniqueIdentifier\n        );\n        if (matchedField) {\n          this.formBuilderService.setSelectedElement(index);\n          this.selectedFieldIndex = index\n        }\n      }\n    });\n    this.formBuilderService.setSelectedTableElement(\n      this.selectedFieldIndex,\n      event\n    );\n    this.selectedColumn = event?.uniqueIdentifier\n  }\n  removeColumn(event: any) {\n    this.formBuilderService.removeSelectedTableElement(\n      this.selectedFieldIndex,\n      event\n    );\n    this.selectedColumn = null\n  }\n\n  // SKS25MAR25 image add\n  async fileChangeEvent(index: any, event: any): Promise<void> {\n    const file = event.target.files[0];\n    if (file) {\n      try {\n        const imageData = await this.readFileAsDataURL(file);\n        this.formElements[index].imageData = imageData;\n        this.formElements[index].orgImageData = imageData;\n        // Initialize logo size if not already set\n        if (!this.formElements[index].imageSize) {\n          this.formElements[index].imageSize = { width: 150, height: 150 };\n        }\n\n        await this.formBuilderService.elementUpdate(\n          index,\n          this.formElements[index]\n        );\n      } catch (error) {\n        console.error(\"Error reading file:\", error);\n      }\n    }\n  }\n\n  private readFileAsDataURL(file: File): Promise<string> {\n    return new Promise((resolve, reject) => {\n      const reader = new FileReader();\n      reader.onload = () => resolve(reader.result as string);\n      reader.onerror = (error) => reject(error);\n      reader.readAsDataURL(file);\n    });\n  }\n  // SKS28JUL25 formbuilder language code change\n  langChangeEmit(event){\n    this.languageCode = event?.valueObj\n    this.book = this.formBuilderService.getBook();\n    this.translationService.setFormBuilderTranslations(this.book.translationMap)\n    const unique_id = Object.keys(this.book.bookQuestionsMap)[0];\n    const keysToTranslate = ['questionText', 'helpText', 'question', 'label'];\n    this.book.bookQuestionsMap[unique_id]?.subQuestions?.forEach(element => {\n      keysToTranslate.forEach(key => {\n        element[key] =  this.translationService.formBuilderTranslate(`${element.id}.${key}`, this.languageCode) ? this.translationService.formBuilderTranslate(`${element.id}.${key}`, this.languageCode) : null\n      });\n      if(element?.['options'] !== undefined && element?.['options'] !== null &&  Array.isArray(element['options'])){\n        element['options'].forEach(opt => {\n          opt.label = this.translationService.formBuilderTranslate(`${opt.id}.label`, this.languageCode) ? this.translationService.formBuilderTranslate(`${opt.id}.label`, this.languageCode) : null\n        })\n      }\n      if(element.type === 'Table' && element?.fieldsMeta){\n        if(!Array.isArray(element?.fieldsMeta) && typeof element?.fieldsMeta === 'string'){\n          element.fieldsMeta = JSON.parse(element?.fieldsMeta)\n        }\n        element?.fieldsMeta?.forEach(field => {\n          keysToTranslate.forEach(key => {\n            if(key !== 'question') field[key] = this.translationService.formBuilderTranslate(`${field.uniqueIdentifier}.${key}`, this.languageCode) ? this.translationService.formBuilderTranslate(`${field.uniqueIdentifier}.${key}`, this.languageCode) : null\n          });\n          if(field?.question?.['options'] !== undefined && field?.question?.['options'] !== null &&  Array.isArray(field?.question?.['options'])){\n            field.question['options'].forEach(opt => {\n              opt.label = this.translationService.formBuilderTranslate(`${opt.id}.label`, this.languageCode) ? this.translationService.formBuilderTranslate(`${opt.id}.label`, this.languageCode) : null\n            })\n          }\n        });\n      }\n    });\n    this.book?.questionbook?.action?.forEach((act: any) =>{\n      act.name = this.translationService.formBuilderTranslate(`${act.id}.name`, this.languageCode) ;\n    })\n    this.formElements = [...this.book.bookQuestionsMap[unique_id]?.subQuestions]\n    this.formBuilderService.updateBook(this.book)\n    this.translationService.setFormBuilderLanguage(this.languageCode);\n  }\n}\n","<!-- AP 22JAN25 - form preview and All form elements -->\n<!-- AP 25FEB25 - All elements update -->\n<div class=\"center-frame\">\n  <!-- Form Builder Section All Elements -->\n  <div class=\"form-builder\">\n    <!-- Basic Elements Toggle -->\n    <div class=\"toggle-header\" (click)=\"toggleSection('basic')\">\n      <div class=\"head-elements\">{{ 'BASIC_ELEMENTS' | nxtCustomTranslate : 'Basic Elements' }}</div>\n      <img [src]=\"sections.basic ? '../assets/icons/arrow-down.svg' : '../assets/icons/arrow-right.svg'\"\n        alt=\"Toggle Arrow\" class=\"arrow-icon\">\n    </div>\n\n    <div *ngIf=\"sections.basic\">\n      <ng-container *ngFor=\"let element of basicElements\">\n        <div class=\"element\" (click)=\"addElement(element.type)\">\n          <img src=\"../assets/icons/{{ element.img }}.svg\" class=\"element-icon\">\n          <div class=\"hover-label\">{{ element.label }}</div>\n          <div class=\"drag-dots\">\n            <div class=\"dot\" *ngFor=\"let dot of dots\"></div>\n          </div>\n        </div>\n      </ng-container>\n    </div>\n\n    <!-- Advanced Elements Toggle -->\n    <div class=\"toggle-header\" (click)=\"toggleSection('advanced')\">\n      <div class=\"head-elements\">{{ 'ADVANCED_ELEMENTS' | nxtCustomTranslate : 'Advanced Elements' }}</div>\n      <img [src]=\"sections.advanced ? '../assets/icons/arrow-down.svg' : '../assets/icons/arrow-right.svg'\"\n        alt=\"Toggle Arrow\" class=\"arrow-icon\">\n    </div>\n\n    <div *ngIf=\"sections.advanced\">\n      <ng-container *ngFor=\"let element of advancedElements\">\n        <div class=\"element\" (click)=\"addElement(element.type)\">\n          <img src=\"../assets/icons/{{ element.img }}.svg\">\n          <div class=\"hover-label\">{{ element.label }}</div>\n          <div class=\"drag-dots\">\n            <div class=\"dot\" *ngFor=\"let dot of dots\"></div>\n          </div>\n        </div>\n      </ng-container>\n    </div>\n    <!-- AP-08APR25 Add Templates Component -->\n    <!-- <app-templates (templateSelected)=\"onTemplateSelected($event)\"></app-templates> -->\n\n    <!-- SKS10MAR25 footer version show -->\n    <div class=\"sticky-footer-version\">\n      {{version}}\n    </div>\n  </div>\n  <!-- AP-27MAR25 Remove CDK drag and drop replace draggable function  -->\n  <div class=\"form-preview\">\n    <!-- AP-10MAR25 Heading -->\n    <div style=\" display: flex; justify-content: space-between; width: 100%; gap: 10px;\">\n      <div class=\"label-container field-container\"\n        style=\"padding: 10px; width: 100%;background-color: #EFF8FF; border: 1px solid #E6F3FF;display: flex;justify-content: center;margin-bottom:10px; border-radius: 5px;\"\n        [class.highlight]=\"isHeaderSelect\" (click)=\"selectHeading('Header')\">\n        <div *ngIf=\"book?.records\">\n          <div *ngIf=\"book.records[0].title == ''\" style=\"color:#3f4a525c\">Heading</div>\n          <div *ngIf=\"book.records[0].title !== ''\">{{book.records[0].title}}</div>\n        </div>\n      </div>\n      <nxt-dropdown \n        [options]=\"langOption\" \n        [selectedValue]=\"languageCode\" \n        [from]=\"'normalDropDown'\"\n        [mode]=\"'edit'\" (valueChange)=\"langChangeEmit($event.value)\"\n        style=\"margin-bottom: 10px; background: #eff8ff; border-radius: 5px;\">\n      </nxt-dropdown>\n    </div>\n    <ng-container *ngFor=\"let field of formElements; let i = index\" getProperties().elementProps>\n      <!-- SKS12FEB26 TextBox and default element -->\n      <div *ngIf=\"field.type === 'Text' || field.type === 'currency' || !statictype.includes(field.type)\" class=\"field-container\" (click)=\"selectElement(i)\" [ngStyle]=\"{\n          'font-family': field?.font || 'Helvetica Neue',\n          'font-weight': field?.fontWeight || '400',\n          'font-size': field?.fontSize || '14px',\n          'width': field?.size ? (field.size / 12 * 100) + '%' : '100%',\n          'text-align': field?.textAlign || 'left',\n          'border-radius': '5px',\n          'border-width': field?.lineWidth ? field.lineWidth + 'px' : '1px',\n          'color': field?.color || '#000000',\n          'margin-top': field?.paddingTop ? field.paddingTop + 'px' : '0px',\n          'margin-bottom': field?.paddingBottom ? field.paddingBottom + 'px' : '10px',\n          'border-color': field?.color || '#EFF8FF'\n        }\" [class.highlight]=\"selectedFieldIndex === i\" draggable=\"true\" (dragstart)=\"onDragStart($event, i)\"\n        (dragover)=\"onDragOver($event, i)\" (drop)=\"onDrop($event, i)\">\n        <div class=\"field-wrapper\">\n          <div class=\"field-content\">\n            <div class=\"label-container\">\n              <div>\n                <label [class.required]=\"field.isOptional\" *ngIf=\"field.style?.showLabel !== false\">{{\n                  field.questionText ? field.questionText : ('LABEL' | nxtCustomTranslate : 'Label') }}</label>\n              </div>\n              <div class=\"top-right\">\n                <img src=\"../assets/icons/drag-dots.svg\" alt=\"Drag\" class=\"drag-dot\" />\n\n                <img src=\"../assets/icons/Trash.svg\" (click)=\"removeElement(field, i)\" class=\"delete-icon\" />\n              </div>\n            </div>\n            <input type=\"text\" class=\"custom-input\"\n              [placeholder]=\"field.question || ('ENTER_TEXT' | nxtCustomTranslate : 'Enter text')\"\n              [readonly]=\"field.isReadOnly\" [class.hidden]=\"field.isHidden\"\n              [value]=\"field.defaultValue ? field.defaultValue : '' \" />\n          </div>\n        </div>\n      </div>\n\n      <!-- MSM-09JUL25 Icon-selectir Element -->\n      <div *ngIf=\"field.type === 'Icon'\" class=\"field-container\" (click)=\"selectElement(i)\" [ngStyle]=\"{\n          'font-family': field?.font || 'Helvetica Neue',\n          'font-weight': field?.fontWeight || '400',\n          'font-size': field?.fontSize || '14px',\n          'width': field?.size ? (field.size / 12 * 100) + '%' : '100%',\n          'text-align': field?.textAlign || 'left',\n          'border-radius': '5px',\n          'border-width': field?.lineWidth ? field.lineWidth + 'px' : '1px',\n          'color': field?.color || '#000000',\n          'margin-top': field?.paddingTop ? field.paddingTop + 'px' : '0px',\n          'margin-bottom': field?.paddingBottom ? field.paddingBottom + 'px' : '10px',\n          'border-color': field?.color || '#EFF8FF'\n        }\" [class.highlight]=\"selectedFieldIndex === i\" draggable=\"true\" (dragstart)=\"onDragStart($event, i)\"\n        (dragover)=\"onDragOver($event, i)\" (drop)=\"onDrop($event, i)\">\n        <div class=\"field-wrapper\">\n          <div class=\"field-content\">\n            <div class=\"label-container\">\n              <div>\n                <label [class.required]=\"field.isRequired\" *ngIf=\"field.style?.showLabel !== false\">{{\n                  field.questionText ? field.questionText : ('CHOOSE_ICON' | nxtCustomTranslate : 'Choose Icon')\n                  }}</label>\n              </div>\n              <div class=\"top-right\">\n                <img src=\"../assets/icons/drag-dots.svg\" alt=\"Drag\" class=\"drag-dot\" />\n                <img src=\"../assets/icons/Trash.svg\" (click)=\"removeElement(field, i)\" class=\"delete-icon\" />\n              </div>\n            </div>\n            <div class=\"choose-icon-placeholder\">\n            </div>\n          </div>\n        </div>\n      </div>\n\n      <!-- AP-19MAR25 Line Element -->\n      <div *ngIf=\"field.type === 'Line'\" class=\"line-field\" (click)=\"selectElement(i)\"\n        [class.highlight]=\"selectedFieldIndex === i\" draggable=\"true\" (dragstart)=\"onDragStart($event, i)\"\n        (dragover)=\"onDragOver($event, i)\" (drop)=\"onDrop($event, i)\">\n        <div class=\"line-element\">\n          <div></div>\n          <img src=\"../assets/icons/Trash.svg\" (click)=\"removeElement(field, i)\" class=\"delete-icon\" />\n        </div>\n        <hr class=\"custom-line\" style=\"display: inline-flex\" [ngStyle]=\"{\n          'font-family': field?.font || 'Helvetica Neue',\n          'font-weight': field?.fontWeight || '400',\n          'font-size': field?.fontSize || '14px',\n          'width': field?.size ? (field.size / 12 * 100) + '%' : '100%',\n          'text-align': field?.textAlign || 'left',\n          'border-radius': '5px',\n          'border-width': field?.lineWidth ? field.lineWidth + 'px' : '1px',\n          'color': field?.color || '#000000',\n          'margin-top': field?.paddingTop ? field.paddingTop + 'px' : '0px',\n          'margin-bottom': field?.paddingBottom ? field.paddingBottom + 'px' : '10px',\n          'border-color': field?.color || '#EFF8FF',\n          'border-style': field?.lineStyle?.toLowerCase() || 'solid'\n        }\" />\n      </div>\n\n      <!--SKS25MAR25 Image Upload Element -->\n      <div *ngIf=\"field.type === 'Image'\" class=\"field-container\" (click)=\"selectElement(i)\"\n        [class.highlight]=\"selectedFieldIndex === i\" draggable=\"true\" (dragstart)=\"onDragStart($event, i)\"\n        (dragover)=\"onDragOver($event, i)\" (drop)=\"onDrop($event, i)\" [ngStyle]=\"{\n          'font-family': field?.font || 'Helvetica Neue',\n          'font-weight': field?.fontWeight || '400',\n          'font-size': field?.fontSize || '14px',\n          'width': field?.size ? (field.size / 12 * 100) + '%' : '100%',\n          'text-align': field?.textAlign || 'left',\n          'border-radius': '5px',\n          'border-width': field?.lineWidth ? field.lineWidth + 'px' : '1px',\n          'color': field?.color || '#000000',\n          'margin-top': field?.paddingTop ? field.paddingTop + 'px' : '0px',\n          'margin-bottom': field?.paddingBottom ? field.paddingBottom + 'px' : '10px',\n          'border-color': field?.color || '#EFF8FF'\n        }\">\n        <div class=\"field-wrapper\">\n          <div class=\"field-content\">\n            <div class=\"label-container\">\n              <div>\n                <label [class.required]=\"field.isOptional\" *ngIf=\"field.style?.showLabel !== false\">{{\n                  field.questionText ? field.questionText : ('UPLOAD_IMAGE' | nxtCustomTranslate : 'Upload Image')\n                  }}</label>\n              </div>\n              <div class=\"top-right\">\n                <img src=\"../assets/icons/drag-dots.svg\" alt=\"Drag\" class=\"drag-dot\" />\n                <img src=\"../assets/icons/Trash.svg\" (click)=\"removeElement(field, i)\" class=\"delete-icon\" />\n              </div>\n            </div>\n            <div>\n              <div class=\"logo-container\">\n                <!-- Logo preview area -->\n                <div class=\"logo-preview\" *ngIf=\"field.imageData\">\n                  <img [src]=\"field.imageData\" />\n                </div>\n\n                <!-- Upload button -->\n                <div *ngIf=\"!field.imageData\" class=\"logo-upload-placeholder\">\n                  <label for=\"logo-upload-{{i}}\" class=\"logo-upload-label\">\n                    <img src=\"../assets/icons/Image.svg\" alt=\"Upload\" />\n                    <span>{{ 'UPLOAD_IMAGE' | nxtCustomTranslate : 'Upload Image' }}</span>\n                  </label>\n                  <input type=\"file\" id=\"logo-upload-{{i}}\" accept=\"image/*\" (change)=\"fileChangeEvent(i, $event)\"\n                    style=\"display: none;\" />\n                </div>\n              </div>\n            </div>\n          </div>\n        </div>\n      </div>\n\n      <!-- Space Element -->\n      <div *ngIf=\"field.type === 'Space'\" class=\"field-container\" (click)=\"selectElement(i)\" [ngStyle]=\"{\n          'font-family': field?.font || 'Helvetica Neue',\n          'font-weight': field?.fontWeight || '400',\n          'font-size': field?.fontSize || '14px',\n          'width': field?.size ? (field.size / 12 * 100) + '%' : '100%',\n          'text-align': field?.textAlign || 'left',\n          'border-radius': '5px',\n          'border-width': field?.lineWidth ? field.lineWidth + 'px' : '1px',\n          'color': field?.color || '#000000',\n          'margin-top': field?.paddingTop ? field.paddingTop + 'px' : '0px',\n          'margin-bottom': field?.paddingBottom ? field.paddingBottom + 'px' : '10px',\n          'border-color': field?.color || '#EFF8FF'\n        }\" [class.highlight]=\"selectedFieldIndex === i\" draggable=\"true\" (dragstart)=\"onDragStart($event, i)\"\n        (dragover)=\"onDragOver($event, i)\" (drop)=\"onDrop($event, i)\">\n        <div class=\"field-wrapper\" style=\"height:93px\">\n          <div class=\"field-content\">\n            <div class=\"label-container\">\n              <label [class.required]=\"field.isOptional\"></label>\n              <div class=\"top-right\" style=\"margin: -11px -11px 0 0;\">\n                <img src=\"../assets/icons/drag-dots.svg\" alt=\"Drag\" class=\"drag-dot\" />\n                <img src=\"../assets/icons/Trash.svg\" (click)=\"removeElement(field, i)\" class=\"delete-icon\" />\n              </div>\n            </div>\n          </div>\n        </div>\n      </div>\n\n      <!-- Boolean Element -->\n      <div *ngIf=\"field.type === 'Boolean'\" class=\"field-container\" (click)=\"selectElement(i)\" [ngStyle]=\"{\n          'font-family': field?.font || 'Helvetica Neue',\n          'font-weight': field?.fontWeight || '400',\n          'font-size': field?.fontSize || '14px',\n          'width': field?.size ? (field.size / 12 * 100) + '%' : '100%',\n          'text-align': field?.textAlign || 'left',\n          'border-radius': '5px',\n          'border-width': field?.lineWidth ? field.lineWidth + 'px' : '1px',\n          'color': field?.color || '#000000',\n          'margin-top': field?.paddingTop ? field.paddingTop + 'px' : '0px',\n          'margin-bottom': field?.paddingBottom ? field.paddingBottom + 'px' : '10px',\n          'border-color': field?.color || '#EFF8FF'\n        }\" [class.highlight]=\"selectedFieldIndex === i\" draggable=\"true\" (dragstart)=\"onDragStart($event, i)\"\n        (dragover)=\"onDragOver($event, i)\" (drop)=\"onDrop($event, i)\">\n        <div class=\"field-wrapper\">\n          <div class=\"label-container\">\n            <div>\n              <label [class.required]=\"field.isOptional\" *ngIf=\"field.style?.showLabel !== false\">{{ field.questionText\n                ? field.questionText : ('BOOLEAN' | nxtCustomTranslate : 'Boolean')}}</label>\n            </div>\n            <div class=\"top-right\">\n              <img src=\"../assets/icons/drag-dots.svg\" alt=\"Drag\" class=\"drag-dot\" />\n\n              <img src=\"../assets/icons/Trash.svg\" (click)=\"removeElement(field, i)\" class=\"delete-icon\" />\n            </div>\n          </div>\n          <input type=\"checkbox\" [checked]=\"field.boolean\" (change)=\"toggleBoolean(field)\"\n            [value]=\"field.defaultValue ? field.defaultValue : ''\" />\n        </div>\n      </div>\n\n      <!-- Calendar -->\n      <div *ngIf=\"field.type === 'Calendar'\" class=\"field-container\" (click)=\"selectElement(i)\" [ngStyle]=\"{\n          'font-family': field?.font || 'Helvetica Neue',\n          'font-weight': field?.fontWeight || '400',\n          'font-size': field?.fontSize || '14px',\n          'width': field?.size ? (field.size / 12 * 100) + '%' : '100%',\n          'text-align': field?.textAlign || 'left',\n          'border-radius': '5px',\n          'border-width': field?.lineWidth ? field.lineWidth + 'px' : '1px',\n          'color': field?.color || '#000000',\n          'margin-top': field?.paddingTop ? field.paddingTop + 'px' : '0px',\n          'margin-bottom': field?.paddingBottom ? field.paddingBottom + 'px' : '10px',\n          'border-color': field?.color || '#EFF8FF'\n        }\" [class.highlight]=\"selectedFieldIndex === i\" draggable=\"true\" (dragstart)=\"onDragStart($event, i)\"\n        (dragover)=\"onDragOver($event, i)\" (drop)=\"onDrop($event, i)\">\n        <div class=\"field-wrapper\">\n          <div class=\"field-content\">\n            <div class=\"label-container\">\n              <div>\n                <label [class.required]=\"field.isOptional\" *ngIf=\"field.style?.showLabel !== false\">{{\n                  field.questionText ? field.questionText : ('SELECT_DATE' | nxtCustomTranslate : 'Select Date')\n                  }}</label>\n              </div>\n              <div class=\"top-right\">\n                <img src=\"../assets/icons/drag-dots.svg\" alt=\"Drag\" class=\"drag-dot\" />\n                <img src=\"../assets/icons/Trash.svg\" (click)=\"removeElement(field, i)\" class=\"delete-icon\" />\n              </div>\n\n            </div>\n            <input type=\"date\" class=\"custom-input\" [readonly]=\"field.isReadOnly\" [class.hidden]=\"field.isHidden\"\n              [value]=\"field.defaultValue ? field.defaultValue : ''\" />\n          </div>\n        </div>\n      </div>\n\n      <!-- AP -12MAR25 Date -->\n      <div *ngIf=\"field.type === 'Date'\" class=\"field-container\" (click)=\"selectElement(i)\" [ngStyle]=\"{\n          'font-family': field?.font || 'Helvetica Neue',\n          'font-weight': field?.fontWeight || '400',\n          'font-size': field?.fontSize || '14px',\n          'width': field?.size ? (field.size / 12 * 100) + '%' : '100%',\n          'text-align': field?.textAlign || 'left',\n          'border-radius': '5px',\n          'border-width': field?.lineWidth ? field.lineWidth + 'px' : '1px',\n          'color': field?.color || '#000000',\n          'margin-top': field?.paddingTop ? field.paddingTop + 'px' : '0px',\n          'margin-bottom': field?.paddingBottom ? field.paddingBottom + 'px' : '10px',\n          'border-color': field?.color || '#EFF8FF'\n        }\" [class.highlight]=\"selectedFieldIndex === i\" draggable=\"true\" (dragstart)=\"onDragStart($event, i)\"\n        (dragover)=\"onDragOver($event, i)\" (drop)=\"onDrop($event, i)\">\n        <div class=\"field-wrapper\">\n          <div class=\"field-content\">\n            <div class=\"label-container\">\n              <div>\n                <label [class.required]=\"field.isOptional\" *ngIf=\"field.style?.showLabel !== false\">{{\n                  field.questionText ? field.questionText : ('SELECT_DATE' | nxtCustomTranslate : 'Select Date')\n                  }}</label>\n              </div>\n              <div class=\"top-right\">\n                <img src=\"../assets/icons/drag-dots.svg\" alt=\"Drag\" class=\"drag-dot\" />\n                <img src=\"../assets/icons/Trash.svg\" (click)=\"removeElement(field, i)\" class=\"delete-icon\" />\n              </div>\n\n            </div>\n            <input type=\"date\" class=\"custom-input\" [readonly]=\"field.isReadOnly\" [class.hidden]=\"field.isHidden\"\n              [value]=\"field.defaultValue ? field.defaultValue : ''\" />\n          </div>\n        </div>\n      </div>\n\n      <!-- AP-21MAR25 Add Time element -->\n      <!-- Time Field -->\n      <div *ngIf=\"field.type === 'Time'\" class=\"field-container\" (click)=\"selectElement(i)\" [ngStyle]=\"{\n          'font-family': field?.font || 'Helvetica Neue',\n          'font-weight': field?.fontWeight || '400',\n          'font-size': field?.fontSize || '14px',\n          'width': field?.size ? (field.size / 12 * 100) + '%' : '100%',\n          'text-align': field?.textAlign || 'left',\n          'border-radius': '5px',\n          'border-width': field?.lineWidth ? field.lineWidth + 'px' : '1px',\n          'color': field?.color || '#000000',\n          'margin-top': field?.paddingTop ? field.paddingTop + 'px' : '0px',\n          'margin-bottom': field?.paddingBottom ? field.paddingBottom + 'px' : '10px',\n          'border-color': field?.color || '#EFF8FF'\n        }\" [class.highlight]=\"selectedFieldIndex === i\" draggable=\"true\" (dragstart)=\"onDragStart($event, i)\"\n        (dragover)=\"onDragOver($event, i)\" (drop)=\"onDrop($event, i)\">\n\n        <div class=\"field-wrapper\">\n          <div class=\"field-content\">\n            <div class=\"label-container\">\n              <label [class.required]=\"field.isOptional\">{{ field.questionText ? field.questionText : ('TIME' |\n                nxtCustomTranslate : 'Time') }}</label>\n              <div class=\"top-right\">\n                <img src=\"../assets/icons/drag-dots.svg\" alt=\"Drag\" class=\"drag-dot\" />\n                <img src=\"../assets/icons/Trash.svg\" (click)=\"removeElement(field, i)\" class=\"delete-icon\" />\n              </div>\n            </div>\n            <input type=\"time\" class=\"custom-input\" [readonly]=\"field.isReadOnly\" [class.hidden]=\"field.isHidden\"\n              [value]=\"field.defaultValue ? field.defaultValue : ''\" />\n          </div>\n        </div>\n      </div>\n\n      <!-- AP-28MAR25 DateTime -->\n      <div *ngIf=\"field.type === 'DateTime'\" class=\"field-container\" (click)=\"selectElement(i)\" [ngStyle]=\"{\n          'font-family': field?.font || 'Helvetica Neue',\n          'font-weight': field?.fontWeight || '400',\n          'font-size': field?.fontSize || '14px',\n          'width': field?.size ? (field.size / 12 * 100) + '%' : '100%',\n          'text-align': field?.textAlign || 'left',\n          'border-radius': '5px',\n          'border-width': field?.lineWidth ? field.lineWidth + 'px' : '1px',\n          'color': field?.color || '#000000',\n          'margin-top': field?.paddingTop ? field.paddingTop + 'px' : '0px',\n          'margin-bottom': field?.paddingBottom ? field.paddingBottom + 'px' : '10px',\n          'border-color': field?.color || '#EFF8FF'\n        }\" [class.highlight]=\"selectedFieldIndex === i\" draggable=\"true\" (dragstart)=\"onDragStart($event, i)\"\n        (dragover)=\"onDragOver($event, i)\" (drop)=\"onDrop($event, i)\">\n        <div class=\"field-wrapper\">\n          <div class=\"field-content\">\n            <div class=\"label-container\">\n              <div>\n                <label [class.required]=\"field.isOptional\" *ngIf=\"field.style?.showLabel !== false\">{{\n                  field.questionText ? field.questionText : ('SELECT_DATE_TIME' | nxtCustomTranslate : 'Select Date & Time')\n                  }}</label>\n              </div>\n              <div class=\"top-right\">\n                <img src=\"../assets/icons/drag-dots.svg\" alt=\"Drag\" class=\"drag-dot\" />\n                <img src=\"../assets/icons/Trash.svg\" (click)=\"removeElement(field, i)\" class=\"delete-icon\" />\n              </div>\n            </div>\n            <input type=\"datetime-local\" class=\"custom-input\" [readonly]=\"field.isReadOnly\"\n              [class.hidden]=\"field.isHidden\" />\n          </div>\n        </div>\n      </div>\n      <!-- SKS7AUG25 month -->\n      <div *ngIf=\"field.type === 'month'\" class=\"field-container\" (click)=\"selectElement(i)\" [ngStyle]=\"{\n          'font-family': field?.font || 'Helvetica Neue',\n          'font-weight': field?.fontWeight || '400',\n          'font-size': field?.fontSize || '14px',\n          'width': field?.size ? (field.size / 12 * 100) + '%' : '100%',\n          'text-align': field?.textAlign || 'left',\n          'border-radius': '5px',\n          'border-width': field?.lineWidth ? field.lineWidth + 'px' : '1px',\n          'color': field?.color || '#000000',\n          'margin-top': field?.paddingTop ? field.paddingTop + 'px' : '0px',\n          'margin-bottom': field?.paddingBottom ? field.paddingBottom + 'px' : '10px',\n          'border-color': field?.color || '#EFF8FF'\n        }\" \n        [class.highlight]=\"selectedFieldIndex === i\" draggable=\"true\" (dragstart)=\"onDragStart($event, i)\"\n        (dragover)=\"onDragOver($event, i)\" (drop)=\"onDrop($event, i)\">\n        <div class=\"field-wrapper\">\n          <div class=\"field-content\">\n            <div class=\"label-container\">\n              <div>\n                <label [class.required]=\"field.isOptional\" *ngIf=\"field.style?.showLabel !== false\">{{field.questionText ? field.questionText : ('SELECT_MONTH' | nxtCustomTranslate : 'Select Month')}}</label>\n              </div>\n              <div class=\"top-right\">\n                <img src=\"../assets/icons/drag-dots.svg\" alt=\"Drag\" class=\"drag-dot\" />\n                <img src=\"../assets/icons/Trash.svg\" (click)=\"removeElement(field, i)\" class=\"delete-icon\" />\n              </div>\n            </div>\n            <input type=\"month\" class=\"custom-input\" [readonly]=\"field.isReadOnly\"\n              [class.hidden]=\"field.isHidden\" />\n          </div>\n        </div>\n      </div>\n\n      <!-- Email -->\n      <div *ngIf=\"field.type === 'Email'\" class=\"field-container\" (click)=\"selectElement(i)\" [ngStyle]=\"{\n          'font-family': field?.font || 'Helvetica Neue',\n          'font-weight': field?.fontWeight || '400',\n          'font-size': field?.fontSize || '14px',\n          'width': field?.size ? (field.size / 12 * 100) + '%' : '100%',\n          'text-align': field?.textAlign || 'left',\n          'border-radius': '5px',\n          'border-width': field?.lineWidth ? field.lineWidth + 'px' : '1px',\n          'color': field?.color || '#000000',\n          'margin-top': field?.paddingTop ? field.paddingTop + 'px' : '0px',\n          'margin-bottom': field?.paddingBottom ? field.paddingBottom + 'px' : '10px',\n          'border-color': field?.color || '#EFF8FF'\n        }\" [class.highlight]=\"selectedFieldIndex === i\" draggable=\"true\" (dragstart)=\"onDragStart($event, i)\"\n        (dragover)=\"onDragOver($event, i)\" (drop)=\"onDrop($event, i)\">\n        <div class=\"field-wrapper\">\n          <div class=\"field-content\">\n            <div class=\"label-container\">\n              <div>\n                <label [class.required]=\"field.isOptional\"> {{ field.questionText ? field.questionText : ('LABEL' |\n                  nxtCustomTranslate : 'Label') }}\n                </label>\n              </div>\n              <div class=\"top-right\">\n                <img src=\"../assets/icons/drag-dots.svg\" alt=\"Drag\" class=\"drag-dot\" />\n                <img src=\"../assets/icons/Trash.svg\" (click)=\"removeElement(field, i)\" class=\"delete-icon\" />\n              </div>\n            </div>\n            <input type=\"email\" class=\"custom-input\"\n              [placeholder]=\"field.question || ('ENTER_EMAIL' | nxtCustomTranslate : 'Enter email')\"\n              [readonly]=\"field.isReadOnly\" [class.hidden]=\"field.isHidden\"\n              [value]=\"field.defaultValue ? field.defaultValue : ''\" />\n          </div>\n        </div>\n      </div>\n\n      <!-- Numbers -->\n      <div *ngIf=\"field.type === 'Number'\" class=\"field-container\" (click)=\"selectElement(i)\" [ngStyle]=\"{\n          'font-family': field?.font || 'Helvetica Neue',\n          'font-weight': field?.fontWeight || '400',\n          'font-size': field?.fontSize || '14px',\n          'width': field?.size ? (field.size / 12 * 100) + '%' : '100%',\n          'text-align': field?.textAlign || 'left',\n          'border-radius': '5px',\n          'border-width': field?.lineWidth ? field.lineWidth + 'px' : '1px',\n          'color': field?.color || '#000000',\n          'margin-top': field?.paddingTop ? field.paddingTop + 'px' : '0px',\n          'margin-bottom': field?.paddingBottom ? field.paddingBottom + 'px' : '10px',\n          'border-color': field?.color || '#EFF8FF'\n        }\" [class.highlight]=\"selectedFieldIndex === i\" draggable=\"true\" (dragstart)=\"onDragStart($event, i)\"\n        (dragover)=\"onDragOver($event, i)\" (drop)=\"onDrop($event, i)\">\n        <div class=\"field-wrapper\">\n          <div class=\"field-content\">\n            <div class=\"label-container\">\n              <div>\n                <label [class.required]=\"field.isOptional\" *ngIf=\"field.style?.showLabel !== false\">{{\n                  field.questionText ? field.questionText : ('LABEL' | nxtCustomTranslate : 'Label') }}</label>\n              </div>\n              <div class=\"top-right\">\n                <img src=\"../assets/icons/drag-dots.svg\" alt=\"Drag\" class=\"drag-dot\" />\n\n                <img src=\"../assets/icons/Trash.svg\" (click)=\"removeElement(field, i)\" class=\"delete-icon\" />\n              </div>\n            </div>\n            <input type=\"number\" class=\"custom-input\"\n              [placeholder]=\"field.question || ('ENTER_NUMBER' | nxtCustomTranslate : 'Enter number')\"\n              [readonly]=\"field.isReadOnly\" [class.hidden]=\"field.isHidden\"\n              [value]=\"field.defaultValue ? field.defaultValue : ''\" />\n          </div>\n        </div>\n      </div>\n\n      <!-- TextArea -->\n      <div *ngIf=\"field.type === 'TextArea'\" class=\"field-container\" (click)=\"selectElement(i)\" [ngStyle]=\"{\n          'font-family': field?.font || 'Helvetica Neue',\n          'font-weight': field?.fontWeight || '400',\n          'font-size': field?.fontSize || '14px',\n          'width': field?.size ? (field.size / 12 * 100) + '%' : '100%',\n          'text-align': field?.textAlign || 'left',\n          'border-radius': '5px',\n          'border-width': field?.lineWidth ? field.lineWidth + 'px' : '1px',\n          'color': field?.color || '#000000',\n          'margin-top': field?.paddingTop ? field.paddingTop + 'px' : '0px',\n          'margin-bottom': field?.paddingBottom ? field.paddingBottom + 'px' : '10px',\n          'border-color': field?.color || '#EFF8FF'\n        }\" [class.highlight]=\"selectedFieldIndex === i\" draggable=\"true\" (dragstart)=\"onDragStart($event, i)\"\n        (dragover)=\"onDragOver($event, i)\" (drop)=\"onDrop($event, i)\">\n        <div class=\"field-wrapper\">\n          <div class=\"field-content\">\n            <div class=\"label-container\">\n              <div>\n                <label [class.required]=\"field.isOptional\" *ngIf=\"field.style?.showLabel !== false\">{{\n                  field.questionText ? field.questionText : ('ENTER_YOUR_TEXT' | nxtCustomTranslate : 'Enter your text')}}</label>\n              </div>\n              <div class=\"top-right\">\n                <img src=\"../assets/icons/drag-dots.svg\" alt=\"Drag\" class=\"drag-dot\" />\n\n                <img src=\"../assets/icons/Trash.svg\" (click)=\"removeElement(field, i)\" class=\"delete-icon\" />\n              </div>\n            </div>\n            <textarea class=\"custom-textarea\"\n              [placeholder]=\"field.question || ('ENTER_DETAILED_TEXT' | nxtCustomTranslate : 'Enter detailed text here...')\"\n              [style.height.px]=\"field.size || 100\" [readonly]=\"field.isReadOnly\" [class.hidden]=\"field.isHidden\"\n              [value]=\"field.defaultValue ? field.defaultValue : ''\"></textarea>\n          </div>\n        </div>\n      </div>\n\n      <!-- RichText -->\n      <div *ngIf=\"field.type === 'RichTextArea'\" class=\"field-container\" (click)=\"selectElement(i)\" [ngStyle]=\"{\n          'font-family': field?.font || 'Helvetica Neue',\n          'font-weight': field?.fontWeight || '400',\n          'font-size': field?.fontSize || '14px',\n          'width': field?.size ? (field.size / 12 * 100) + '%' : '100%',\n          'text-align': field?.textAlign || 'left',\n          'border-radius': '5px',\n          'border-width': field?.lineWidth ? field.lineWidth + 'px' : '1px',\n          'color': field?.color || '#000000',\n          'margin-top': field?.paddingTop ? field.paddingTop + 'px' : '0px',\n          'margin-bottom': field?.paddingBottom ? field.paddingBottom + 'px' : '10px',\n          'border-color': field?.color || '#EFF8FF'\n        }\" [class.highlight]=\"selectedFieldIndex === i\" draggable=\"true\" (dragstart)=\"onDragStart($event, i)\"\n        (dragover)=\"onDragOver($event, i)\" (drop)=\"onDrop($event, i)\">\n        <div class=\"field-wrapper\">\n          <div class=\"field-content\">\n            <div class=\"label-container\">\n              <div>\n                <label [class.required]=\"field.isOptional\" *ngIf=\"field.style?.showLabel !== false\">{{\n                  field.questionText ? field.questionText : ('ENTER_YOUR_TEXT' | nxtCustomTranslate : 'Enter your text')}}</label>\n              </div>\n              <div class=\"top-right\">\n                <img src=\"../assets/icons/drag-dots.svg\" alt=\"Drag\" class=\"drag-dot\" />\n\n                <img src=\"../assets/icons/Trash.svg\" (click)=\"removeElement(field, i)\" class=\"delete-icon\" />\n              </div>\n            </div>\n            <textarea class=\"custom-textarea\"\n              [placeholder]=\"field.question ||('ENTER_DETAILED_TEXT' | nxtCustomTranslate : 'Enter detailed text here...')\"\n              [style.height.px]=\"field.size || 100\" [readonly]=\"field.isReadOnly\" [class.hidden]=\"field.isHidden\"\n              [value]=\"field.defaultValue ? field.defaultValue : ''\"></textarea>\n          </div>\n        </div>\n      </div>\n\n      <!-- Label -->\n      <div *ngIf=\"field.type === 'Label'\" class=\"field-container\" (click)=\"selectElement(i)\" [ngStyle]=\"{\n          'font-family': field?.font || 'Helvetica Neue',\n          'font-weight': field?.fontWeight || '400',\n          'font-size': field?.fontSize || '14px',\n          'width': field?.size ? (field.size / 12 * 100) + '%' : '100%',\n          'text-align': field?.textAlign || 'left',\n          'border-radius': '5px',\n          'border-width': field?.lineWidth ? field.lineWidth + 'px' : '1px',\n          'color': field?.color || '#000000',\n          'margin-top': field?.paddingTop ? field.paddingTop + 'px' : '0px',\n          'margin-bottom': field?.paddingBottom ? field.paddingBottom + 'px' : '10px',\n          'border-color': field?.color || '#EFF8FF'\n        }\" [class.highlight]=\"selectedFieldIndex === i\" draggable=\"true\" (dragstart)=\"onDragStart($event, i)\"\n        (dragover)=\"onDragOver($event, i)\" (drop)=\"onDrop($event, i)\">\n        <div class=\"field-wrapper\">\n          <div class=\"field-content\">\n            <div class=\"label-container\">\n              <div>\n                <label [class.required]=\"field.isOptional\" *ngIf=\"field.style?.showLabel !== false\">{{\n                  field.questionText ? field.questionText : ('LABEL' | nxtCustomTranslate : 'Label') }}</label>\n              </div>\n              <div class=\"top-right\">\n                <img src=\"../assets/icons/drag-dots.svg\" alt=\"Drag\" class=\"drag-dot\" />\n\n                <img src=\"../assets/icons/Trash.svg\" (click)=\"removeElement(field, i)\" class=\"delete-icon\" />\n              </div>\n            </div>\n          </div>\n        </div>\n      </div>\n\n      <!-- Book -->\n      <div *ngIf=\"field.type === 'Book'\" class=\"field-container\" (click)=\"selectElement(i)\" [ngStyle]=\"{\n          'font-family': field?.font || 'Helvetica Neue',\n          'font-weight': field?.fontWeight || '400',\n          'font-size': field?.fontSize || '14px',\n          'width': field?.size ? (field.size / 12 * 100) + '%' : '100%',\n          'text-align': field?.textAlign || 'left',\n          'border-radius': '5px',\n          'border-width': field?.lineWidth ? field.lineWidth + 'px' : '1px',\n          'color': field?.color || '#000000',\n          'margin-top': field?.paddingTop ? field.paddingTop + 'px' : '0px',\n          'margin-bottom': field?.paddingBottom ? field.paddingBottom + 'px' : '10px',\n          'border-color': field?.color || '#EFF8FF'\n        }\" [class.highlight]=\"selectedFieldIndex === i\" draggable=\"true\" (dragstart)=\"onDragStart($event, i)\"\n        (dragover)=\"onDragOver($event, i)\" (drop)=\"onDrop($event, i)\">\n        <div class=\"field-wrapper\">\n          <div class=\"field-content\">\n            <div class=\"label-container\">\n              <div>\n                <label [class.required]=\"field.isOptional\" *ngIf=\"field.style?.showLabel !== false\">{{\n                  field.questionText ? field.questionText : ('LABEL' | nxtCustomTranslate : 'Label') }}</label>\n              </div>\n              <div class=\"top-right\">\n                <img src=\"../assets/icons/drag-dots.svg\" alt=\"Drag\" class=\"drag-dot\" />\n                <img src=\"../assets/icons/Trash.svg\" (click)=\"removeElement(field, i)\" class=\"delete-icon\" />\n              </div>\n            </div>\n            <lib-booklet [bookletJSON]=\"field.qbReferenceQuestions\" from=\"formBuilder\"></lib-booklet>\n          </div>\n        </div>\n      </div>\n\n      <!-- File -->\n      <div *ngIf=\"field.type === 'File'\" class=\"field-container\" (click)=\"selectElement(i)\" [ngStyle]=\"{\n          'font-family': field?.font || 'Helvetica Neue',\n          'font-weight': field?.fontWeight || '400',\n          'font-size': field?.fontSize || '14px',\n          'width': field?.size ? (field.size / 12 * 100) + '%' : '100%',\n          'text-align': field?.textAlign || 'left',\n          'border-radius': '5px',\n          'border-width': field?.lineWidth ? field.lineWidth + 'px' : '1px',\n          'color': field?.color || '#000000',\n          'margin-top': field?.paddingTop ? field.paddingTop + 'px' : '0px',\n          'margin-bottom': field?.paddingBottom ? field.paddingBottom + 'px' : '10px',\n          'border-color': field?.color || '#EFF8FF'\n        }\" [class.highlight]=\"selectedFieldIndex === i\" draggable=\"true\" (dragstart)=\"onDragStart($event, i)\"\n        (dragover)=\"onDragOver($event, i)\" (drop)=\"onDrop($event, i)\">\n        <div class=\"field-wrapper\">\n          <div class=\"field-content\">\n            <div class=\"label-container\">\n              <div>\n                <label [class.required]=\"field.isOptional\" *ngIf=\"field.style?.showLabel !== false\">{{\n                  field.questionText ? field.questionText : ('UPLOAD_FILE' | nxtCustomTranslate : 'Upload File')\n                  }}</label>\n              </div>\n              <div class=\"top-right\">\n                <img src=\"../assets/icons/drag-dots.svg\" alt=\"Drag\" class=\"drag-dot\" />\n                <img src=\"../assets/icons/Trash.svg\" (click)=\"removeElement(field, i)\" class=\"delete-icon\" />\n              </div>\n            </div>\n            <input type=\"file\" class=\"custom-input\" [readonly]=\"field.isReadOnly\" [class.hidden]=\"field.isHidden\" />\n          </div>\n        </div>\n      </div>\n\n      <!-- CheckBox -->\n      <div *ngIf=\"field.type === 'Checkbox'\" class=\"field-container\" (click)=\"selectElement(i)\" [ngStyle]=\"{\n            'font-family': field?.font || 'Helvetica Neue',\n            'font-weight': field?.fontWeight || '400',\n            'font-size': field?.fontSize || '14px',\n            'width': field?.size ? (field.size / 12 * 100) + '%' : '100%',\n            'text-align': field?.textAlign || 'left',\n            'border-radius': '5px',\n            'border-width': field?.lineWidth ? field.lineWidth + 'px' : '1px',\n            'color': field?.color || '#000000',\n            'margin-top': field?.paddingTop ? field.paddingTop + 'px' : '0px',\n            'margin-bottom': field?.paddingBottom ? field.paddingBottom + 'px' : '10px',\n            'border-color': field?.color || '#EFF8FF'\n          }\" [class.highlight]=\"selectedFieldIndex === i\" draggable=\"true\" (dragstart)=\"onDragStart($event, i)\"\n        (dragover)=\"onDragOver($event, i)\" (drop)=\"onDrop($event, i)\">\n        <div class=\"field-wrapper\">\n          <div class=\"field-content\">\n            <div class=\"label-container\">\n              <div>\n                <label [class.required]=\"field.isOptional\" *ngIf=\"field.style?.showLabel !== false\">\n                  {{ field.questionText ? field.questionText : ('LABEL' | nxtCustomTranslate : 'Label') }}\n                </label>\n              </div>\n              <div class=\"top-right\">\n                <img src=\"../assets/icons/drag-dots.svg\" alt=\"Drag\" class=\"drag-dot\" />\n                <img src=\"../assets/icons/Trash.svg\" (click)=\"removeElement(field, i)\" class=\"delete-icon\" />\n              </div>\n            </div>\n\n            <div class=\"checkbox-options-container\">\n              <div *ngFor=\"let option of field.options\" class=\"checkbox-option\">\n                <input type=\"checkbox\" [id]=\"option.value + i\" [name]=\"field.id\"\n                  [value]=\"option.value || field.defaultValue\" class=\"checkbox-input\" [disabled]=\"field.isReadOnly\"\n                  [class.hidden]=\"field.isHidden\">\n                <label [for]=\"option.value + i\" class=\"checkbox-label\">{{ option.label }}</label>\n              </div>\n            </div>\n          </div>\n        </div>\n      </div>\n\n      <!-- Radio -->\n      <div *ngIf=\"field.type === 'Radio'\" class=\"field-container\" (click)=\"selectElement(i)\" [ngStyle]=\"{\n          'font-family': field?.font || 'Helvetica Neue',\n          'font-weight': field?.fontWeight || '400',\n          'font-size': field?.fontSize || '14px',\n          'width': field?.size ? (field.size / 12 * 100) + '%' : '100%',\n          'text-align': field?.textAlign || 'left',\n          'border-radius': '5px',\n          'border-width': field?.lineWidth ? field.lineWidth + 'px' : '1px',\n          'color': field?.color || '#000000',\n          'margin-top': field?.paddingTop ? field.paddingTop + 'px' : '0px',\n          'margin-bottom': field?.paddingBottom ? field.paddingBottom + 'px' : '10px',\n          'border-color': field?.color || '#EFF8FF'\n        }\" [class.highlight]=\"selectedFieldIndex === i\" draggable=\"true\" (dragstart)=\"onDragStart($event, i)\"\n        (dragover)=\"onDragOver($event, i)\" (drop)=\"onDrop($event, i)\">\n        <div class=\"field-wrapper\">\n          <div class=\"field-content\">\n            <div class=\"label-container\">\n              <div>\n                <label [class.required]=\"field.isOptional\" *ngIf=\"field.style?.showLabel !== false\">{{\n                  field.questionText ? field.questionText : ('LABEL' | nxtCustomTranslate : 'Label') }}</label>\n              </div>\n              <div class=\"top-right\">\n                <img src=\"../assets/icons/drag-dots.svg\" alt=\"Drag\" class=\"drag-dot\" />\n\n                <img src=\"../assets/icons/Trash.svg\" (click)=\"removeElement(field, i)\" class=\"delete-icon\" />\n              </div>\n            </div>\n            <div class=\"radio-options-container\">\n              <div *ngFor=\"let option of field.options; let j = index\" class=\"radio-option\">\n                <input type=\"radio\" [id]=\"'radio-' + field.id + '-' + j\" [name]=\"'radio-group-' + field.id\"\n                  [value]=\"option.value || field.defaultValue\" [(ngModel)]=\"field.selectedValue\" class=\"radio-input\"\n                  [disabled]=\"field.isReadOnly\" [class.hidden]=\"field.isHidden\">\n                <label [for]=\"'radio-' + field.id + '-' + j\" class=\"radio-label\"> {{  option.label  }}</label>\n              </div>\n            </div>\n          </div>\n        </div>\n      </div>\n      <!-- Dropdown -->\n      <div *ngIf=\"field.type === 'Dropdown' || field.type === 'MultiSelect'\" class=\"field-container\" (click)=\"selectElement(i)\" [ngStyle]=\"{\n          'font-family': field?.font || 'Helvetica Neue',\n          'font-weight': field?.fontWeight || '400',\n          'font-size': field?.fontSize || '14px',\n          'width': field?.size ? (field.size / 12 * 100) + '%' : '100%',\n          'text-align': field?.textAlign || 'left',\n          'border-radius': '5px',\n          'border-width': field?.lineWidth ? field.lineWidth + 'px' : '1px',\n          'color': field?.color || '#000000',\n          'margin-top': field?.paddingTop ? field.paddingTop + 'px' : '0px',\n          'margin-bottom': field?.paddingBottom ? field.paddingBottom + 'px' : '10px',\n          'border-color': field?.color || '#EFF8FF'\n        }\" [class.highlight]=\"selectedFieldIndex === i\" draggable=\"true\" (dragstart)=\"onDragStart($event, i)\"\n        (dragover)=\"onDragOver($event, i)\" (drop)=\"onDrop($event, i)\">\n        <div class=\"field-wrapper\">\n          <div class=\"field-content\">\n            <div class=\"label-container\">\n              <div>\n                <label [class.required]=\"field.isOptional\" *ngIf=\"field.style?.showLabel !== false\">{{\n                  field.questionText ? field.questionText : ('LABEL' | nxtCustomTranslate : 'Label') }}</label>\n              </div>\n              <div class=\"top-right\">\n                <img src=\"../assets/icons/drag-dots.svg\" alt=\"Drag\" class=\"drag-dot\" />\n\n                <img src=\"../assets/icons/Trash.svg\" (click)=\"removeElement(field, i)\" class=\"delete-icon\" />\n              </div>\n            </div>\n            <select id=\"options\" class=\"dropdown\" [disabled]=\"field.isReadOnly\" [class.hidden]=\"field.isHidden\">\n              <option *ngFor=\"let option of field.options\" [value]=\"option.value || field.defaultValue\"> {{  option.label  }} </option>\n            </select>\n          </div>\n        </div>\n      </div>\n\n      <!--  Table  -->\n      <!-- AP-06MAR25 -->\n      <div *ngIf=\"field.type === 'Table'\" class=\"field-container\" (click)=\"selectElement(i)\" [ngStyle]=\"{\n          'font-family': field?.font || 'Helvetica Neue',\n          'font-weight': field?.fontWeight || '400',\n          'font-size': field?.fontSize || '14px',\n          'width': field?.size ? (field.size / 12 * 100) + '%' : '100%',\n          'text-align': field?.textAlign || 'left',\n          'border-radius': '5px',\n          'border-width': field?.lineWidth ? field.lineWidth + 'px' : '1px',\n          'color': field?.color || '#000000',\n          'margin-top': field?.paddingTop ? field.paddingTop + 'px' : '0px',\n          'margin-bottom': field?.paddingBottom ? field.paddingBottom + 'px' : '10px',\n          'border-color': field?.color || '#EFF8FF'\n        }\" [class.highlight]=\"selectedFieldIndex === i\" draggable=\"true\" (dragstart)=\"onDragStart($event, i)\"\n        (dragover)=\"onDragOver($event, i)\" (drop)=\"onDrop($event, i)\">\n        <div class=\"field-wrapper\" style=\"overflow: hidden;\">\n          <div class=\"field-content\">\n            <div class=\"label-container\">\n              <div>\n                <label [class.required]=\"field.isOptional\" *ngIf=\"field.style?.showLabel !== false\">{{\n                  field.questionText ? field.questionText : ('LABEL' | nxtCustomTranslate : 'Label') }}</label>\n              </div>\n              <div class=\"top-right\">\n                <img src=\"../assets/icons/drag-dots.svg\" alt=\"Drag\" class=\"drag-dot\" />\n                <img src=\"../assets/icons/Trash.svg\" (click)=\"removeElement(field, i)\" class=\"delete-icon\" />\n              </div>\n            </div>\n            <div class=\"nxt-table-container\">\n              <nxt-datatable isButtons [question]=\"field\" from=\"formBuilder\" [mode]=\"'edit'\" [apiMeta]=\"field.subText\"\n                [tableConfig]=\"field.tableConfig\" tableId=\"\" direction=\"ltr\" tableWidth=\"auto\" isEditable=true\n                [selectedColumn]=\"selectedColumn\" (columnSelected)=columnSelected($event)\n                (removeColumn)=removeColumn($event)>\n              </nxt-datatable>\n            </div>\n          </div>\n        </div>\n      </div>\n\n      <!-- List -->\n      <!-- AP-06MAR25 - List data show-->\n      <div *ngIf=\"field.type === 'List'\" class=\"field-container\" (click)=\"selectElement(i)\" [ngStyle]=\"{\n          'font-family': field?.font || 'Helvetica Neue',\n          'font-weight': field?.fontWeight || '400',\n          'font-size': field?.fontSize || '14px',\n          'width': field?.size ? (field.size / 12 * 100) + '%' : '100%',\n          'text-align': field?.textAlign || 'left',\n          'border-radius': '5px',\n          'border-width': field?.lineWidth ? field.lineWidth + 'px' : '1px',\n          'color': field?.color || '#000000',\n          'margin-top': field?.paddingTop ? field.paddingTop + 'px' : '0px',\n          'margin-bottom': field?.paddingBottom ? field.paddingBottom + 'px' : '10px',\n          'border-color': field?.color || '#EFF8FF'\n        }\" [class.highlight]=\"selectedFieldIndex === i\" draggable=\"true\" (dragstart)=\"onDragStart($event, i)\"\n        (dragover)=\"onDragOver($event, i)\" (drop)=\"onDrop($event, i)\">\n        <div class=\"field-wrapper\">\n          <div class=\"field-content\">\n            <div class=\"label-container\">\n              <div>\n                <label [class.required]=\"field.isOptional\" *ngIf=\"field.style?.showLabel !== false\">{{\n                  field.questionText ? field.questionText : ('LABEL' | nxtCustomTranslate : 'Label') }}</label>\n              </div>\n              <div class=\"top-right\">\n                <img src=\"../assets/icons/drag-dots.svg\" alt=\"Drag\" class=\"drag-dot\" />\n                <img src=\"../assets/icons/Trash.svg\" (click)=\"removeElement(field, i)\" class=\"delete-icon\" />\n              </div>\n            </div>\n            <input type=\"text\" class=\"custom-input\" [placeholder]=\"('SEARCH' | nxtCustomTranslate : 'Search...')\"\n              [readonly]=\"field.isReadOnly\" [class.hidden]=\"field.isHidden\"\n              [value]=\"field.defaultValue ? field.defaultValue : ''\" />\n          </div>\n        </div>\n      </div>\n\n    </ng-container>\n  </div>\n</div>\n<!-- SKS13MAR25 popup conformation box -->\n<div class=\"dialog-overlay\" *ngIf=\"isSelectTablePopup\">\n  <div class=\"dialog-box\">\n    <button class=\"close-btn-fb\" (click)=\"onClose()\">✕</button>\n    <p>{{ 'ADD_TABLE_CONFIRMATION' | nxtCustomTranslate : 'These element want to add a table' }}</p>\n    <div class=\"button-container-fb\">\n      <button class=\"yes-btn-fb\" (click)=\"addOnTable()\">{{ 'YES' | nxtCustomTranslate : 'Yes' }}</button>\n      <button class=\"no-btn-fb\" (click)=\"onClose()\">{{ 'NO' | nxtCustomTranslate : 'No' }}</button>\n    </div>\n  </div>\n</div>","// AP-29JAN25 \nimport { CommonModule } from '@angular/common';\nimport { Component, EventEmitter, Input, Output } from '@angular/core';\nimport { PropertiesComponent } from '../properties/properties.component';\nimport { ElementComponent } from '../element/element.component';\n\n@Component({\n  selector: 'app-form-builder',\n  standalone: true,\n  imports: [ PropertiesComponent, CommonModule, ElementComponent],\n  templateUrl: './form.component.html',\n  styleUrls: ['./form.component.css'],\n})\nexport class FormComponent {\n  // Input data for app-element\n    @Input() bookletJSON: any;\n    @Input() langOption: any;\n    @Output() formButtonHandler = new EventEmitter<string>();\n    @Output() templateSaveHandler = new EventEmitter<string>();\n\n  // Input data for app-properties\n  // api: string = 'https://example.com/api'; // Replace with your actual API endpoint\n  // apiMethod: string = 'GET'; // Replace with your actual API method\n  selectedElementType: string = 'button'; // Replace with the default selected element type\n  isTemplateSelected = false;\n\nonTemplateModeChange(status: boolean) {\n  this.isTemplateSelected = status;\n}\n\n  // Event handler for app-element\n  formButtonHandlerClick(event){\n    this.formButtonHandler.emit(event);\n  }\n\n  saveTemplate(event: any) {  \n    this.templateSaveHandler.emit(event);\n  }  \n  \n}\n","<!-- AP-29JAN25 -->\n<div class=\"form-container \">\n    <!-- app-element Component -->\n     <!--AP-08APR25 Passes a boolean to indicate if a template is selected -->\n  <app-element \n    [langOption]=\"langOption\"\n    [bookletJSON]=\"bookletJSON\" \n    (templateMode)=\"onTemplateModeChange($event)\">\n  </app-element>\n   <!-- app-properties Component -->\n  <!-- AP-08APR25 Emits an event when the template mode -->\n  <app-properties \n  (formButtonHandler)=\"formButtonHandlerClick($event)\"\n  (templateSaveHandler)=\"saveTemplate($event)\"\n  [templateSelected]=\"isTemplateSelected\">\n </app-properties>\n  \n  ","import { NgModule, CUSTOM_ELEMENTS_SCHEMA, APP_INITIALIZER } from '@angular/core';\nimport { NxtAppComponent } from './nxt-app.component';\nimport { QuestionnaireComponent } from './pages/questionnaire/questionnaire.component';\nimport { CommonModule } from \"@angular/common\";\nimport { FormsModule } from '@angular/forms';\nimport { QuillModule } from 'ngx-quill';\n// VD 23JAN24 removed HttpClientModule\nimport { BookletComponent } from './pages/booklet/booklet.component';\nimport { QuestionbookComponent } from './pages/questionbook/questionbook.component';\n//AP 22JAN2025 Added the FormBuilderService\nimport { NxtDatatable } from './components/datatable/datatable.component';\nimport { PdfDesignerComponent } from './pages/pdfDesigner/pdf-designer/pdf-designer.component';\nimport { NxtButtonComponent } from './components/button/nxt-button.component';\nimport { NxtInput } from './components/nxt-input/nxt-input.component';\nimport { NxtMultiSelect } from './components/nxt-multi-select/nxt-multi-select.component';\nimport { FormComponent } from './pages/builder/form/form.component';\nimport { ListViewFilterComponent } from './components/list-view-filter/list-view-filter.component';\nimport { NxtSearchBox } from './components/search-box/search-box.component';\nimport { IconSelectorComponent } from '../public-api'; //MSM10JUL25 import icon selector component\nimport { TranslationService } from './services/translation/translation.service';\nimport { FormBuilderService } from './services/form-builder/form-builder.service';\nimport { PdfDesignerService } from './services/pdf-designer/pdf-designer.service';\n\nexport function initializeApp(translationService: TranslationService) {\n  return () => translationService.load();\n}\n\n@NgModule({\n  declarations: [NxtAppComponent],\n  imports: [\n    CommonModule, FormsModule,\n    NxtDatatable,\n    NxtSearchBox,\n    ListViewFilterComponent,\n    NxtInput,\n    NxtMultiSelect,\n    QuestionnaireComponent,\n    BookletComponent,\n    QuestionbookComponent,\n    NxtButtonComponent,\n    IconSelectorComponent, //MSM10JUL25 import icon selector component\n    PdfDesignerComponent,\n    FormComponent\n  ],\n  bootstrap: [ NxtAppComponent ],\n  schemas: [CUSTOM_ELEMENTS_SCHEMA],\n  exports: [NxtAppComponent,\n    QuestionnaireComponent,\n    BookletComponent,\n    NxtDatatable,\n    NxtSearchBox,\n    ListViewFilterComponent,\n    NxtInput,\n    NxtMultiSelect,\n    NxtButtonComponent,\n    IconSelectorComponent, //MSM10JUL25 export icon selector component\n    PdfDesignerComponent,\n  ],\n  providers: [\n    FormBuilderService,//AP 22JAN2025 Added the FormBuilderService\n    PdfDesignerService,\n    TranslationService,\n    {\n      provide: APP_INITIALIZER,\n      useFactory: initializeApp,\n      deps: [TranslationService],\n      multi: true\n    }\n  ]\n})\nexport class NxtAppModule { }\n","/*\n * Public API Surface of nxt-app\n */\n\nexport * from './lib/nxt-app.service';\nexport * from './lib/nxt-app.component';\nexport * from './lib/nxt-app.module';\nexport * from './lib/pages/questionnaire/questionnaire.component';\nexport * from './lib/pages/booklet/booklet.component';\nexport * from './lib/services/salesforce/salesforce.service';\nexport * from './lib/pages/builder/form/form.component';\n// SKS20FEB25 nxt datatable\nexport * from './lib/components/datatable/datatable.component';\n// AP-28MAY25 export nxt button\nexport * from './lib/components/button/nxt-button.component';\n// AP-29MAY25 export pdf-designer\nexport * from './lib/pages/pdfDesigner/pdf-designer/pdf-designer.component';\n// AP-02JUN25 export textarea ,input, date and date-picker components\nexport * from './lib/components/nxt-input/nxt-input.component';\nexport * from './lib/components/nxt-dropdown/nxt-dropdown.component'\nexport * from './lib/components/nxt-multi-select/nxt-multi-select.component'\nexport * from './lib/components/file-upload/file-upload.component'\nexport * from './lib/components/list-view-filter/list-view-filter.component'\nexport * from './lib/components/search-box/search-box.component'\nexport * from './lib/components/icon-selector/icon-selector.component'; //MSM10JUL25 export icon selector component\nexport * from './lib/pipe/NxtDate.pipe'","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './public-api';\n"],"names":["i3","i1","i1.DataService","i2","i4","i2.IndexedDbReaderService","i1.NxtDatePipe","i2.GoogleMapsLoaderService","i3.CountryService","i4.StorageService","i5.TranslationService","i6.ChangeService","i7.DataService","i8","i10","i11","i1.CountryService","i2.TranslationService","i3.ChangeService","i4.DataService","i5.StorageService","i6","i1.TranslationService","i2.NxtCustomTranslatePipe","i3.DataService","i5","i1.StorageService","i2.ChangeService","i4.CountryService","i1.ChangeService","i2.DataService","i3.StorageService","i1.SharedService","takeUntil","i2.StorageService","i3.TranslationService","i5.ChangeService","i7","i9","i1.SalesforceService","i4.SharedService","i4.TranslationService","i3.PdfDesignerService","i4.TemplateService","i4.PdfDesignerService","i1.FormBuilderService","i2.TemplateService"],"mappings":"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;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;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"}