{"version":3,"file":"ng-prime-tools.mjs","sources":["../../../projects/ng-prime-tools/src/lib/utils/text.util.ts","../../../projects/ng-prime-tools/src/lib/pipes/custom-currency.ts","../../../projects/ng-prime-tools/src/lib/pipes/custom-date.pipe.ts","../../../projects/ng-prime-tools/src/lib/pt-advanced-prime-table/pt-advanced-prime-table.component.ts","../../../projects/ng-prime-tools/src/lib/pt-advanced-prime-table/pt-advanced-prime-table.component.html","../../../projects/ng-prime-tools/src/lib/pt-multi-select/pt-multi-select.component.ts","../../../projects/ng-prime-tools/src/lib/pt-multi-select/pt-multi-select.component.html","../../../projects/ng-prime-tools/src/lib/pt-multi-select/pt-multi-select.module.ts","../../../projects/ng-prime-tools/src/lib/pt-button/pt-button.component.ts","../../../projects/ng-prime-tools/src/lib/pt-button/pt-button.component.html","../../../projects/ng-prime-tools/src/lib/pt-button/pt-button.module.ts","../../../projects/ng-prime-tools/src/lib/pt-advanced-prime-table/pt-advanced-prime-table.module.ts","../../../projects/ng-prime-tools/src/lib/pt-advanced-prime-table/date-utility.service.ts","../../../projects/ng-prime-tools/src/lib/enums/table-type.enum.ts","../../../projects/ng-prime-tools/src/lib/enums/search-criteria-type.enum.ts","../../../projects/ng-prime-tools/src/lib/enums/form-input-type.enum.ts","../../../projects/ng-prime-tools/src/lib/enums/button-color.enum.ts","../../../projects/ng-prime-tools/src/lib/enums/input-validation.enum.ts","../../../projects/ng-prime-tools/src/lib/enums/badge-type.enum.ts","../../../projects/ng-prime-tools/src/lib/enums/severity.enum.ts","../../../projects/ng-prime-tools/src/lib/enums/align.enum.ts","../../../projects/ng-prime-tools/src/lib/enums/public-api.ts","../../../projects/ng-prime-tools/src/lib/multi-search-criteria/multi-search-criteria.component.ts","../../../projects/ng-prime-tools/src/lib/multi-search-criteria/multi-search-criteria.component.html","../../../projects/ng-prime-tools/src/lib/multi-search-criteria/multi-search-criteria.module.ts","../../../projects/ng-prime-tools/src/lib/pt-check-box-input/pt-check-box-input.component.ts","../../../projects/ng-prime-tools/src/lib/pt-check-box-input/pt-check-box-input.component.html","../../../projects/ng-prime-tools/src/lib/utils/date.util.ts","../../../projects/ng-prime-tools/src/lib/pt-date-input/pt-date.service.ts","../../../projects/ng-prime-tools/src/lib/pt-date-input/pt-date-input.component.ts","../../../projects/ng-prime-tools/src/lib/pt-date-input/pt-date-input.component.html","../../../projects/ng-prime-tools/src/lib/pt-number-input/pt-number-input.component.ts","../../../projects/ng-prime-tools/src/lib/pt-number-input/pt-number-input.component.html","../../../projects/ng-prime-tools/src/lib/pt-switch-input/pt-switch-input.component.ts","../../../projects/ng-prime-tools/src/lib/pt-switch-input/pt-switch-input.component.html","../../../projects/ng-prime-tools/src/lib/pt-text-area-input/pt-text-area-input.component.ts","../../../projects/ng-prime-tools/src/lib/pt-text-area-input/pt-text-area-input.component.html","../../../projects/ng-prime-tools/src/lib/pt-text-input/pt-text-input.component.ts","../../../projects/ng-prime-tools/src/lib/pt-text-input/pt-text-input.component.html","../../../projects/ng-prime-tools/src/lib/pt-dropdown/pt-dropdown.component.ts","../../../projects/ng-prime-tools/src/lib/pt-dropdown/pt-dropdown.component.html","../../../projects/ng-prime-tools/src/lib/pt-otp-input/pt-otp-input.component.ts","../../../projects/ng-prime-tools/src/lib/pt-otp-input/pt-otp-input.component.html","../../../projects/ng-prime-tools/src/lib/pt-password-input/pt-password-input.component.ts","../../../projects/ng-prime-tools/src/lib/pt-password-input/pt-password-input.component.html","../../../projects/ng-prime-tools/src/lib/pt-form-builder/pt-dynamic-form-field/pt-dynamic-form-field.component.ts","../../../projects/ng-prime-tools/src/lib/pt-form-builder/pt-dynamic-form-field/pt-dynamic-form-field.component.html","../../../projects/ng-prime-tools/src/lib/pt-form-builder/pt-form-builder.component.ts","../../../projects/ng-prime-tools/src/lib/pt-form-builder/pt-form-builder.component.html","../../../projects/ng-prime-tools/src/lib/pt-check-box-input/pt-check-box-input.module.ts","../../../projects/ng-prime-tools/src/lib/pt-number-input/pt-number-input.module.ts","../../../projects/ng-prime-tools/src/lib/pt-switch-input/pt-switch-input.module.ts","../../../projects/ng-prime-tools/src/lib/pt-text-input/pt-text-input.module.ts","../../../projects/ng-prime-tools/src/lib/pt-text-area-input/pt-text-area-input.module.ts","../../../projects/ng-prime-tools/src/lib/pt-date-input/pt-date-input.module.ts","../../../projects/ng-prime-tools/src/lib/pt-dropdown/pt-dropdown.module.ts","../../../projects/ng-prime-tools/src/lib/pt-otp-input/pt-otp-input.module.ts","../../../projects/ng-prime-tools/src/lib/pt-password-input/pt-password-input.module.ts","../../../projects/ng-prime-tools/src/lib/pt-form-builder/pt-dynamic-form-field/pt-dynamic-form-field-module.ts","../../../projects/ng-prime-tools/src/lib/pt-form-builder/pt-form-builder.module.ts","../../../projects/ng-prime-tools/src/lib/pt-metric-card/pt-metric-card.component.ts","../../../projects/ng-prime-tools/src/lib/pt-metric-card/pt-metric-card.component.html","../../../projects/ng-prime-tools/src/lib/pt-metric-card/pt-metric-card.module.ts","../../../projects/ng-prime-tools/src/lib/pt-metric-card-group/pt-metric-card-group.component.ts","../../../projects/ng-prime-tools/src/lib/pt-metric-card-group/pt-metric-card-group.component.html","../../../projects/ng-prime-tools/src/lib/pt-metric-card-group/pt-metric-card-group.module.ts","../../../projects/ng-prime-tools/src/lib/pt-chart/pt-chart.component.ts","../../../projects/ng-prime-tools/src/lib/pt-chart/pt-chart.component.html","../../../projects/ng-prime-tools/src/lib/pt-chart/pt-chart.module.ts","../../../projects/ng-prime-tools/src/lib/pt-menu/pt-menu.component.ts","../../../projects/ng-prime-tools/src/lib/pt-menu/pt-menu.component.html","../../../projects/ng-prime-tools/src/lib/pt-card/pt-card.component.ts","../../../projects/ng-prime-tools/src/lib/pt-card/pt-card.component.html","../../../projects/ng-prime-tools/src/lib/pt-menu/pt-menu.module.ts","../../../projects/ng-prime-tools/src/lib/pt-card/pt-card.module.ts","../../../projects/ng-prime-tools/src/lib/pt-menu-fancy/pt-menu-fancy.component.ts","../../../projects/ng-prime-tools/src/lib/pt-menu-fancy/pt-menu-fancy.component.html","../../../projects/ng-prime-tools/src/lib/pt-nav-bar-menu/pt-nav-bar-menu.component.ts","../../../projects/ng-prime-tools/src/lib/pt-nav-bar-menu/pt-nav-bar-menu.component.html","../../../projects/ng-prime-tools/src/lib/pt-menu-fancy/pt-menu-fancy.module.ts","../../../projects/ng-prime-tools/src/lib/pt-nav-bar-menu/pt-nav-bar-menu.module.ts","../../../projects/ng-prime-tools/src/lib/pt-side-bar-menu/pt-side-bar-menu.component.ts","../../../projects/ng-prime-tools/src/lib/pt-side-bar-menu/pt-side-bar-menu.component.html","../../../projects/ng-prime-tools/src/lib/pt-side-bar-menu/pt-side-bar-menu.module.ts","../../../projects/ng-prime-tools/src/lib/pt-footer/pt-footer.component.ts","../../../projects/ng-prime-tools/src/lib/pt-footer/pt-footer.component.html","../../../projects/ng-prime-tools/src/lib/pt-bread-crumb/pt-bread-crumb.service.ts","../../../projects/ng-prime-tools/src/lib/pt-bread-crumb/pt-bread-crumb.component.ts","../../../projects/ng-prime-tools/src/lib/pt-bread-crumb/pt-bread-crumb.component.html","../../../projects/ng-prime-tools/src/lib/pt-page-skeleton/pt-page-skeleton.component.ts","../../../projects/ng-prime-tools/src/lib/pt-page-skeleton/pt-page-skeleton.component.html","../../../projects/ng-prime-tools/src/lib/pt-footer/pt-footer.module.ts","../../../projects/ng-prime-tools/src/lib/pt-bread-crumb/pt-bread-crumb.module.ts","../../../projects/ng-prime-tools/src/lib/pt-page-skeleton/pt-page-skeleton.module.ts","../../../projects/ng-prime-tools/src/lib/pt-login-page/pt-login-card/pt-login-card.component.ts","../../../projects/ng-prime-tools/src/lib/pt-login-page/pt-login-card/pt-login-card.component.html","../../../projects/ng-prime-tools/src/lib/pt-login-page/pt-login-page.component.ts","../../../projects/ng-prime-tools/src/lib/pt-login-page/pt-login-page.component.html","../../../projects/ng-prime-tools/src/lib/pt-login-page/pt-login-page.module.ts","../../../projects/ng-prime-tools/src/lib/pt-confirm-dialog/pt-confirm-dialog.config.ts","../../../projects/ng-prime-tools/src/lib/pt-confirm-dialog/pt-confirm-dialog.component.ts","../../../projects/ng-prime-tools/src/lib/pt-confirm-dialog/pt-confirm-dialog.component.html","../../../projects/ng-prime-tools/src/lib/pt-confirm-dialog/pt-confirm-dialog.module.ts","../../../projects/ng-prime-tools/src/lib/pt-toast-notifier/pt-toast-notifier.component.ts","../../../projects/ng-prime-tools/src/lib/pt-toast-notifier/pt-toast-notifier.component.html","../../../projects/ng-prime-tools/src/lib/pt-toast-notifier/pt-toast-notifier.module.ts","../../../projects/ng-prime-tools/src/lib/pt-dialog/pt-dialog.component.ts","../../../projects/ng-prime-tools/src/lib/pt-dialog/pt-dialog.component.html","../../../projects/ng-prime-tools/src/lib/pt-dialog/pt-dialog.module.ts","../../../projects/ng-prime-tools/src/lib/pt-otp-page/pt-otp-card/pt-otp-card.component.ts","../../../projects/ng-prime-tools/src/lib/pt-otp-page/pt-otp-card/pt-otp-card.component.html","../../../projects/ng-prime-tools/src/lib/pt-otp-page/pt-otp-page.component.ts","../../../projects/ng-prime-tools/src/lib/pt-otp-page/pt-otp-page.component.html","../../../projects/ng-prime-tools/src/lib/pt-otp-page/pt-otp-page.module.ts","../../../projects/ng-prime-tools/src/lib/ng-prime-tools.module.ts","../../../projects/ng-prime-tools/src/lib/pt-metric-panel/pt-metric-panel.component.ts","../../../projects/ng-prime-tools/src/lib/pt-metric-panel/pt-metric-panel.component.html","../../../projects/ng-prime-tools/src/lib/pt-metric-panel/pt-metric-panel.module.ts","../../../projects/ng-prime-tools/src/lib/pt-chart-comparison/pt-chart-comparison.component.ts","../../../projects/ng-prime-tools/src/lib/pt-chart-comparison/pt-chart-comparison.component.html","../../../projects/ng-prime-tools/src/lib/pt-chart-comparison/pt-chart-comparison.module.ts","../../../projects/ng-prime-tools/src/lib/pt-line-chart/pt-line-chart.component.ts","../../../projects/ng-prime-tools/src/lib/pt-line-chart/pt-line-chart.component.html","../../../projects/ng-prime-tools/src/lib/pt-line-chart/pt-line-chart.module.ts","../../../projects/ng-prime-tools/src/lib/pt-change-password-page/pt-change-password-card/pt-change-password-card.config.ts","../../../projects/ng-prime-tools/src/lib/pt-change-password-page/pt-change-password-card/pt-change-password-card.component.ts","../../../projects/ng-prime-tools/src/lib/pt-change-password-page/pt-change-password-card/pt-change-password-card.component.html","../../../projects/ng-prime-tools/src/lib/pt-change-password-page/pt-change-password-page.component.ts","../../../projects/ng-prime-tools/src/lib/pt-change-password-page/pt-change-password-page.component.html","../../../projects/ng-prime-tools/src/lib/pt-change-password-page/pt-change-password-page.module.ts","../../../projects/ng-prime-tools/src/lib/models/nav-bar-menu-config.model.ts","../../../projects/ng-prime-tools/src/lib/models/pt-dialog-config.model.ts","../../../projects/ng-prime-tools/src/lib/models/public-api.ts","../../../projects/ng-prime-tools/src/lib/pt-group/pt-group.component.ts","../../../projects/ng-prime-tools/src/lib/pt-group/pt-group.component.html","../../../projects/ng-prime-tools/src/lib/pt-group/pt-group.module.ts","../../../projects/ng-prime-tools/src/ng-prime-tools.ts"],"sourcesContent":["import { TableColumn } from '../models';\n\n/**\n * Calculates the width required for a column based on the header text (column title).\n * It uses the Canvas API to measure text width dynamically.\n *\n * @param {TableColumn} col - The column metadata containing the header title and code.\n * @param {string} [font='16px Arial'] - The font to use for measurement (defaults to '16px Arial').\n * @returns {number} - The calculated width of the column in pixels.\n */\nexport function calculateTextWidth(\n  col: TableColumn,\n  font: string = '16px Arial'\n): number {\n  // Create a canvas context for measuring text\n  const canvas = document.createElement('canvas');\n  const context = canvas.getContext('2d');\n\n  if (!context) {\n    return 100; // Fallback width if canvas context is not available\n  }\n\n  // Set the font to match the provided font or the document body font\n  context.font = font || getComputedStyle(document.body).font;\n\n  // Measure the header text width\n  const headerWidth = context.measureText(col.title).width;\n\n  // Return the width with some padding\n  return Math.ceil(headerWidth + 20); // Add padding for extra space\n}\n","import { Pipe, PipeTransform } from '@angular/core';\n\n@Pipe({\n  name: 'customCurrency',\n  standalone: true,\n})\nexport class CustomCurrencyPipe implements PipeTransform {\n  transform(\n    value: number,\n    currency?: string,\n    decimalPlaces?: number,\n    thousandSeparator: 'comma' | 'space' = 'comma',\n    decimalSeparator: 'comma' | 'dot' = 'dot'\n  ): string {\n    let formattedValue: string;\n\n    if (decimalPlaces !== undefined) {\n      formattedValue = value.toFixed(decimalPlaces);\n    } else {\n      formattedValue = value.toString();\n    }\n\n    const thousandSeparatorChar = thousandSeparator === 'space' ? ' ' : ',';\n    const decimalSeparatorChar = decimalSeparator === 'comma' ? ',' : '.';\n\n    formattedValue = formattedValue.replace(\n      /\\B(?=(\\d{3})+(?!\\d))/g,\n      thousandSeparatorChar\n    );\n\n    if (decimalSeparatorChar === ',') {\n      formattedValue = formattedValue.replace('.', ',');\n    }\n\n    if (currency) {\n      let formattedCurrency: string;\n\n      switch (currency) {\n        case 'MAD':\n          formattedCurrency = `${formattedValue} DH`;\n          break;\n        case 'USD':\n          formattedCurrency = `$${formattedValue}`;\n          break;\n        default:\n          formattedCurrency = `${formattedValue} ${currency}`;\n      }\n\n      return formattedCurrency;\n    }\n\n    return formattedValue;\n  }\n}\n","import { Pipe, PipeTransform } from '@angular/core';\n\n@Pipe({\n    name: 'customDate',\n    standalone: false\n})\nexport class CustomDatePipe implements PipeTransform {\n  transform(value: any, format: string = 'dd/MM/yyyy'): string | null {\n    if (!value) return null;\n\n    if (typeof value === 'string') {\n      const parts = value.split('/');\n      if (parts.length === 3) {\n        const day = parseInt(parts[0], 10);\n        const month = parseInt(parts[1], 10) - 1;\n        const year = parseInt(parts[2], 10);\n        const date = new Date(year, month, day);\n\n        if (isNaN(date.getTime())) return null;\n\n        const options: Intl.DateTimeFormatOptions = {\n          year: 'numeric',\n          month: '2-digit',\n          day: '2-digit',\n        };\n        return new Intl.DateTimeFormat('en-GB', options).format(date);\n      }\n    } else if (value instanceof Date) {\n      // If the value is already a Date object\n      const options: Intl.DateTimeFormatOptions = {\n        year: 'numeric',\n        month: '2-digit',\n        day: '2-digit',\n      };\n      return new Intl.DateTimeFormat('en-GB', options).format(value);\n    }\n\n    return null;\n  }\n}\n","import {\n  Component,\n  EventEmitter,\n  Input,\n  OnChanges,\n  OnInit,\n  Output,\n  SimpleChanges,\n  ViewChild,\n} from '@angular/core';\nimport { Table, TableRowReorderEvent } from 'primeng/table';\nimport {\n  AlignEnum,\n  ImageStyle,\n  SeverityEnum,\n  TableColumn,\n  TableTypeEnum,\n  TitleStyle,\n} from '../../public-api';\nimport { calculateTextWidth } from '../utils/text.util';\n\nexport interface PTTableActionConfig {\n  code: string;\n  icon?: string;\n  styleClass?: string;\n  tooltip?: string;\n  action: any;\n  visible?: boolean | ((row: any) => boolean);\n  disabled?: boolean | ((row: any) => boolean);\n}\n\nexport interface PTTableLazyLoadEvent {\n  page: number;\n  rows: number;\n  first: number;\n  search?: string;\n  sortField?: string | null;\n  sortOrder?: 1 | -1 | null;\n  filters?: Record<string, any>;\n}\n\nexport interface PTTableRowOrderItem {\n  id: any;\n  order: number;\n}\n\nexport interface PTTableRowReorderEvent {\n  oldIndex: number;\n  newIndex: number;\n  movedRow: any;\n  data: any[];\n  ordering: PTTableRowOrderItem[];\n}\n\ntype DynamicStyleValue =\n  | { [key: string]: string }\n  | ((row: any) => { [key: string]: string });\n\ntype DynamicTagValue<T> = T | ((row: any) => T);\ntype DynamicProgressValue<T> = T | ((row: any) => T);\n\ntype ExtendedTableColumn = TableColumn & {\n  cellStyle?: DynamicStyleValue;\n  composedCellStyles?: Record<string, DynamicStyleValue>;\n  tagSeverity?: DynamicTagValue<SeverityEnum>;\n  tagValue?: DynamicTagValue<string>;\n  tagIcon?: DynamicTagValue<string>;\n  tagRounded?: boolean;\n\n  progressValue?: DynamicProgressValue<number>;\n  progressShowValue?: boolean;\n  progressUnit?: string;\n  progressSeverity?: DynamicProgressValue<SeverityEnum>;\n};\n\n@Component({\n  selector: 'pt-advanced-prime-table',\n  templateUrl: './pt-advanced-prime-table.component.html',\n  styleUrl: './pt-advanced-prime-table.component.css',\n  standalone: false,\n})\nexport class PTAdvancedPrimeTableComponent implements OnInit, OnChanges {\n  @Input() data: any[] = [];\n  @Input() columns: TableColumn[] = [];\n  @Input() totalRecords = 0;\n  @Input() rowsPerPage: number[] = [10, 20, 30];\n  @Input() hasSearchFilter = false;\n  @Input() hasExportExcel = false;\n  @Input() hasExportPDF = false;\n  @Input() hasColumnFilter = false;\n  @Input() cellPadding = '0.5rem 0.75rem';\n  @Input() isPaginated = true;\n  @Input() isLazy = false;\n\n  @Input() actions: PTTableActionConfig[] = [];\n  @Input() isSortable = false;\n  @Input() loading = false;\n  @Input() maxHeight: string | null = null;\n\n  @Input() isRowReorderable = false;\n  @Input() rowReorderIdField: string = 'id';\n  @Input() rowOrderStartAt = 1;\n\n  @Input() selectionDataKey = 'id';\n  @Input() selectionMode: 'single' | 'multiple' | null = null;\n  @Input() selection: any | any[] | null = null;\n  @Input() cellHeight: string | null = null;\n\n  @Output() selectionChange = new EventEmitter<any>();\n  @Output() rowSelect = new EventEmitter<any>();\n  @Output() rowUnselect = new EventEmitter<any>();\n\n  @Output() lazyLoad = new EventEmitter<PTTableLazyLoadEvent>();\n  @Output() search = new EventEmitter<string>();\n  @Output() exportExcelEvent = new EventEmitter<void>();\n  @Output() exportPdfEvent = new EventEmitter<void>();\n  @Output() onPageChange = new EventEmitter<{ page: number; rows: number }>();\n  @Output() onSortColumn = new EventEmitter<any>();\n  @Output() onFilterColumn = new EventEmitter<any>();\n  @Output() rowReorderChange = new EventEmitter<PTTableRowReorderEvent>();\n  @Output() filteredData = new EventEmitter<any[]>();\n\n  @ViewChild('dt', { static: false }) dt!: Table;\n\n  public TableTypeEnum = TableTypeEnum;\n  public AlignEnum = AlignEnum;\n  public SeverityEnum = SeverityEnum;\n\n  searchValue = '';\n\n  public filters: { [key: string]: any } = {};\n  latestFilterValues: { [field: string]: any } = {};\n  private clearedFields = new Set<string>();\n\n  private validCurrencyCodes = ['USD', 'EUR', 'MAD'];\n  iconWidth = 77;\n\n  rows = 0;\n  first = 0;\n  currentPage = 0;\n  currentSortField: string | null = null;\n  currentSortOrder: 1 | -1 | null = null;\n\n  hasGroupedColumns = false;\n\n  isDelete = false;\n  isEdit = false;\n\n  Delete: (value: any) => void = () => {};\n  initEditableRow: (data: any) => void = () => {};\n  saveEditableRow: (data: any) => void = () => {};\n  cancelEditableRow: (item: any) => void = () => {};\n\n  customActions: PTTableActionConfig[] = [];\n\n  dataMap = new Map<any, any>();\n  map = new Map<any, Map<any, any>>();\n  optionEntries = new Map<string, any[]>();\n  optionValues: any[] = [];\n  globalFilterFields: string[] = [];\n\n  ngOnInit(): void {\n    this.hasGroupedColumns = this.columns.some(\n      (col) => col.children && col.children.length > 0,\n    );\n\n    this.globalFilterFields = this.columns\n      .filter((col) => col.code !== undefined && col.isFilter !== false)\n      .map((col) => col.code as string);\n\n    this.initializePagination();\n    this.initializeActions();\n\n    this.columns.forEach((col) => {\n      if (col.type === TableTypeEnum.ACTION) {\n        col.isEditable = false;\n        col.isFilter = false;\n        col.isSortable = false;\n      }\n\n      if (\n        col.type === TableTypeEnum.TAG ||\n        col.type === TableTypeEnum.PROGRESS\n      ) {\n        col.isEditable = false;\n      }\n\n      if (col.type === TableTypeEnum.COMPOSED) {\n        this.initializeComposedFilters(col);\n      }\n\n      if (col.isSortable === undefined) col.isSortable = true;\n      if (col.isEditable === undefined) col.isEditable = true;\n\n      if (col.isFilter !== false && col.code !== undefined) {\n        if (!this.globalFilterFields.includes(col.code)) {\n          this.globalFilterFields.push(col.code);\n        }\n      }\n\n      if (!col.width) col.width = this.calculateColumnWidth(col);\n    });\n\n    if (!this.isLazy) {\n      this.totalRecords = this.data?.length ?? 0;\n    }\n  }\n\n  ngOnChanges(changes: SimpleChanges): void {\n    if (changes['data'] && !this.isLazy) {\n      this.totalRecords = this.data?.length ?? 0;\n\n      if (this.dt) this.dt.first = 0;\n    }\n  }\n\n  private emitLazyLoad(): void {\n    const payload: PTTableLazyLoadEvent = {\n      page: this.currentPage,\n      rows: this.rows,\n      first: this.first,\n      search: this.searchValue?.trim() || undefined,\n      sortField: this.currentSortField,\n      sortOrder: this.currentSortOrder,\n      filters: { ...this.latestFilterValues },\n    };\n\n    this.lazyLoad.emit(payload);\n  }\n\n  private resetToFirstPage(): void {\n    this.currentPage = 0;\n    this.first = 0;\n\n    if (this.dt) {\n      this.dt.first = 0;\n    }\n  }\n\n  canUseRowReorder(): boolean {\n    return this.isRowReorderable && !this.isLazy;\n  }\n\n  private buildRowOrdering(data: any[]): PTTableRowOrderItem[] {\n    const idField: string = this.rowReorderIdField || 'id';\n\n    return (data ?? []).map((row, index) => ({\n      id: row?.[idField],\n      order: this.rowOrderStartAt + index,\n    }));\n  }\n\n  onRowReorder(event: TableRowReorderEvent): void {\n    const oldIndex = event.dragIndex ?? -1;\n    const newIndex = event.dropIndex ?? -1;\n\n    if (oldIndex < 0 || newIndex < 0) {\n      return;\n    }\n\n    const reorderedData = [...(this.data ?? [])];\n\n    if (!reorderedData.length || newIndex >= reorderedData.length) {\n      return;\n    }\n\n    const movedRow = reorderedData[newIndex] ?? null;\n\n    this.data = reorderedData;\n\n    if (!this.isLazy) {\n      this.totalRecords = this.data.length;\n    }\n\n    this.rowReorderChange.emit({\n      oldIndex,\n      newIndex,\n      movedRow,\n      data: [...this.data],\n      ordering: this.buildRowOrdering(this.data),\n    });\n  }\n\n  getHeaderTitleClass(col: TableColumn): string {\n    const align = col.headerAlign ?? AlignEnum.LEFT;\n\n    switch (align) {\n      case AlignEnum.CENTER:\n        return 'header-title-center';\n      case AlignEnum.RIGHT:\n        return 'header-title-right';\n      default:\n        return 'header-title-left';\n    }\n  }\n\n  getHeaderAlignClass(col: TableColumn): string {\n    const align = col.headerAlign ?? AlignEnum.LEFT;\n\n    switch (align) {\n      case AlignEnum.CENTER:\n        return 'header-align-center';\n      case AlignEnum.RIGHT:\n        return 'header-align-right';\n      default:\n        return 'header-align-left';\n    }\n  }\n\n  getDataAlignClass(col: TableColumn): string {\n    const effectiveAlign =\n      col.dataAlign ??\n      (col.type === TableTypeEnum.NUMBER || col.type === TableTypeEnum.AMOUNT\n        ? AlignEnum.RIGHT\n        : AlignEnum.LEFT);\n\n    switch (effectiveAlign) {\n      case AlignEnum.CENTER:\n        return 'cell-align-center';\n      case AlignEnum.RIGHT:\n        return 'cell-align-right';\n      default:\n        return 'cell-align-left';\n    }\n  }\n\n  getCellInnerAlignClass(col: TableColumn): string {\n    const effectiveAlign =\n      col.dataAlign ??\n      (col.type === TableTypeEnum.NUMBER || col.type === TableTypeEnum.AMOUNT\n        ? AlignEnum.RIGHT\n        : AlignEnum.LEFT);\n\n    switch (effectiveAlign) {\n      case AlignEnum.CENTER:\n        return 'cell-inner-center';\n      case AlignEnum.RIGHT:\n        return 'cell-inner-right';\n      default:\n        return 'cell-inner-left';\n    }\n  }\n\n  private initializeActions(): void {\n    this.isDelete = false;\n    this.isEdit = false;\n    this.Delete = () => {};\n    this.initEditableRow = () => {};\n    this.saveEditableRow = () => {};\n    this.cancelEditableRow = () => {};\n    this.customActions = [];\n\n    if (!this.actions || this.actions.length === 0) return;\n\n    this.actions.forEach((action) => {\n      switch (action.code) {\n        case 'delete':\n          this.isDelete = true;\n          this.Delete = (row: any) => action.action(row);\n          break;\n        case 'edit':\n          this.initializeEditActions(action);\n          break;\n        default:\n          this.customActions.push(action);\n          break;\n      }\n    });\n  }\n\n  private initializeEditActions(action: PTTableActionConfig): void {\n    this.isEdit = true;\n    this.initEditableRow = (data: any) => action.action.init(data);\n    this.saveEditableRow = (data: any) => {\n      const record = this.map.get(data.id);\n      action.action.save(data, record);\n      this.dataMap.clear();\n    };\n    this.cancelEditableRow = (item: any) => console.log(item);\n  }\n\n  onCustomActionClick(action: PTTableActionConfig, row: any): void {\n    if (!this.isActionVisible(action, row)) return;\n    if (this.isActionDisabled(action, row)) return;\n\n    if (action && typeof action.action === 'function') {\n      setTimeout(() => action.action(row), 0);\n    }\n  }\n\n  private initializeComposedFilters(col: TableColumn): void {\n    col.composedNames?.forEach((composedName) => {\n      const code = (col.code as string) || '';\n      const composedCode = code + '.' + composedName;\n\n      if (!this.globalFilterFields.includes(composedCode)) {\n        this.globalFilterFields.push(composedCode);\n      }\n\n      this.filters[composedName] = {\n        options: col.filterOptions,\n        value: [],\n        label: 'Filter by ' + composedName,\n        placeholder: 'Select option',\n      };\n    });\n  }\n\n  getComposedFieldType(\n    col: TableColumn,\n    composedName: string,\n  ): TableTypeEnum | undefined {\n    if (col.composedNames && col.composedTypes) {\n      const index = col.composedNames.indexOf(composedName);\n      if (index >= 0 && index < col.composedTypes.length) {\n        return col.composedTypes[index];\n      }\n    }\n\n    return undefined;\n  }\n\n  onComposedColumnClear(col: TableColumn): void {\n    if (!col.code || !col.composedNames) return;\n\n    col.composedNames.forEach((name) => {\n      const key = `${col.code}.${name}`;\n      delete this.latestFilterValues[key];\n\n      if (this.filters[name]) {\n        this.filters[name].value = [];\n      }\n\n      this.clearedFields.add(key);\n    });\n  }\n\n  onComposedFilterValueChange(\n    col: TableColumn,\n    composedName: string,\n    value: any[],\n    filterModel?: any,\n  ): void {\n    const key = `${col.code}.${composedName}`;\n\n    if (filterModel) {\n      filterModel.value = value;\n\n      if (\n        Array.isArray(filterModel.constraints) &&\n        filterModel.constraints.length > 0\n      ) {\n        filterModel.constraints[0].value = value;\n      }\n    }\n\n    if (!this.filters[composedName]) {\n      this.filters[composedName] = {\n        options: col.filterOptions,\n        value: [],\n        placeholder: 'Select option',\n      };\n    }\n\n    this.filters[composedName].value = value || [];\n\n    const isEmpty = !value || (Array.isArray(value) && value.length === 0);\n\n    if (isEmpty) {\n      delete this.latestFilterValues[key];\n    } else {\n      this.latestFilterValues[key] = value;\n    }\n  }\n\n  onFilterClear(field: string | undefined): void {\n    if (!field) return;\n\n    delete this.latestFilterValues[field];\n    this.clearedFields.add(field);\n  }\n\n  onFilterValueChange(\n    field: string | undefined,\n    filterModel: any | null,\n    value: any,\n  ): void {\n    if (!field) return;\n\n    const isEmpty =\n      value === null ||\n      value === undefined ||\n      value === '' ||\n      (Array.isArray(value) && value.length === 0);\n\n    if (isEmpty) {\n      delete this.latestFilterValues[field];\n    } else {\n      this.latestFilterValues[field] = value;\n    }\n\n    if (filterModel) {\n      filterModel.value = value;\n\n      if (\n        Array.isArray(filterModel.constraints) &&\n        filterModel.constraints.length > 0\n      ) {\n        filterModel.constraints[0].value = value;\n      }\n    }\n  }\n\n  onNumberFilterChange(field: string | undefined, value: any): void {\n    if (!field) return;\n\n    const isEmpty =\n      value === null ||\n      value === undefined ||\n      value === '' ||\n      (Array.isArray(value) && value.length === 0);\n\n    if (isEmpty) {\n      delete this.latestFilterValues[field];\n    } else {\n      this.latestFilterValues[field] = value;\n    }\n  }\n\n  private findColumnByField(field: string): TableColumn | undefined {\n    return this.columns.find(\n      (c) => c.code === field || (c.code && field.startsWith(c.code + '.')),\n    );\n  }\n\n  filterColumn(event: any): void {\n    const filters = event?.filters;\n\n    if (!filters) {\n      if (this.isLazy) {\n        this.resetToFirstPage();\n        this.onFilterColumn.emit(event);\n        this.emitLazyLoad();\n      }\n      return;\n    }\n\n    const isNullish = (v: any) => v === null || v === undefined || v === '';\n    const nextFilterValues: { [field: string]: any } = {\n      ...this.latestFilterValues,\n    };\n\n    Object.keys(filters).forEach((field) => {\n      const meta = filters[field];\n      const normalizeMeta = (m: any) =>\n        Array.isArray(m) && m.length > 0 ? m[0] : m;\n\n      const m = normalizeMeta(meta);\n      const col = this.findColumnByField(field);\n      const wasCleared = this.clearedFields.has(field);\n\n      if (!m && !col) return;\n\n      if (wasCleared) {\n        delete nextFilterValues[field];\n\n        if (\n          col?.type === TableTypeEnum.COMPOSED &&\n          col.code &&\n          col.composedNames\n        ) {\n          col.composedNames.forEach((name) => {\n            delete nextFilterValues[`${col.code}.${name}`];\n          });\n        }\n\n        if (m) {\n          m.value = null;\n\n          if (Array.isArray(m.constraints) && m.constraints.length > 0) {\n            m.constraints.forEach((c: any) => (c.value = null));\n          }\n        }\n\n        this.clearedFields.delete(field);\n        return;\n      }\n\n      if (col && col.type === TableTypeEnum.COMPOSED) {\n        const composedValues: any = {};\n\n        col.composedNames?.forEach((name) => {\n          const key = `${col.code}.${name}`;\n\n          if (this.clearedFields.has(key)) {\n            delete nextFilterValues[key];\n            this.clearedFields.delete(key);\n            return;\n          }\n\n          const val = nextFilterValues[key];\n          const empty =\n            isNullish(val) || (Array.isArray(val) && val.length === 0);\n\n          if (!empty) {\n            composedValues[name] = val;\n          }\n        });\n\n        if (Object.keys(composedValues).length === 0) {\n          if (m) {\n            m.value = null;\n            if (Array.isArray(m.constraints)) {\n              m.constraints.forEach((c: any) => (c.value = null));\n            }\n          }\n        } else {\n          m.value = composedValues;\n        }\n\n        return;\n      }\n\n      if (!m) return;\n\n      let value: any = m.value;\n\n      if (Array.isArray(m.constraints) && m.constraints.length > 0) {\n        const cVal = m.constraints[0].value;\n        if (!isNullish(cVal)) {\n          value = cVal;\n        }\n      }\n\n      const cached = nextFilterValues[field];\n      const hasCached =\n        !isNullish(cached) && (!Array.isArray(cached) || cached.length > 0);\n\n      if (\n        (isNullish(value) || (Array.isArray(value) && value.length === 0)) &&\n        hasCached\n      ) {\n        value = cached;\n      }\n\n      const isEmpty =\n        isNullish(value) || (Array.isArray(value) && value.length === 0);\n\n      if (isEmpty) {\n        delete nextFilterValues[field];\n        m.value = null;\n\n        if (Array.isArray(m.constraints) && m.constraints.length > 0) {\n          m.constraints[0].value = null;\n        }\n\n        return;\n      }\n\n      let emitValue: any = value;\n\n      if (\n        col &&\n        (col.type === TableTypeEnum.DATE || col.type === TableTypeEnum.DATETIME)\n      ) {\n        const d = this.parseAnyDate(value);\n        emitValue =\n          col.type === TableTypeEnum.DATE\n            ? this.formatDateWithColumn(d, col)\n            : this.formatDateTimeWithColumn(d, col);\n      }\n\n      nextFilterValues[field] = emitValue;\n      m.value = emitValue;\n\n      if (Array.isArray(m.constraints) && m.constraints.length > 0) {\n        m.constraints[0].value = emitValue;\n      }\n    });\n\n    this.latestFilterValues = nextFilterValues;\n\n    if (this.isLazy) {\n      this.resetToFirstPage();\n      this.onFilterColumn.emit(event);\n      this.emitLazyLoad();\n    } else if (this.dt) {\n      const current = (this.dt.filteredValue ?? this.dt.value ?? []) as any[];\n      this.totalRecords = current.length;\n      this.dt.first = 0;\n      this.filteredData.emit([...current]);\n    }\n  }\n\n  changePage(event: any): void {\n    const page = event.page ?? Math.floor((event.first || 0) / event.rows);\n    const rows = event.rows;\n    const first = event.first ?? page * rows;\n\n    this.rows = rows;\n    this.currentPage = page;\n    this.first = first;\n\n    if (this.isLazy) {\n      this.onPageChange.emit({ page, rows });\n      this.emitLazyLoad();\n    }\n  }\n\n  sortColumn(event: any): void {\n    if (!this.isLazy) return;\n\n    let field = event.field;\n    const col = this.columns.find((c) => c.code === field);\n\n    if (col && col.type === TableTypeEnum.COMPOSED) {\n      let textProp: string | undefined;\n\n      if (col.composedNames && col.composedTypes) {\n        const idx = col.composedTypes.findIndex(\n          (t) => t === TableTypeEnum.STRING,\n        );\n\n        if (idx >= 0 && idx < col.composedNames.length) {\n          textProp = col.composedNames[idx];\n        }\n      }\n\n      if (!textProp && col.composedNames?.length) {\n        textProp = col.composedNames[0];\n      }\n\n      if (textProp) {\n        field = `${field}.${textProp}`;\n      }\n    }\n\n    this.currentSortField = field ?? null;\n    this.currentSortOrder = (event.order as 1 | -1) ?? null;\n\n    this.resetToFirstPage();\n    this.onSortColumn.emit({ ...event, field });\n    this.emitLazyLoad();\n  }\n\n  private parseDate_ddMMyyyy(dateString: string): Date | null {\n    const parts = dateString.split('/');\n\n    if (parts.length === 3) {\n      const day = parseInt(parts[0], 10);\n      const month = parseInt(parts[1], 10) - 1;\n      const year = parseInt(parts[2], 10);\n      const date = new Date(year, month, day);\n\n      return isNaN(date.getTime()) ? null : date;\n    }\n\n    return null;\n  }\n\n  onChange(event: Event, id: number, key: any): void {\n    const target = event.target as HTMLInputElement;\n    this.changeHandler(id, key, target.value);\n  }\n\n  changeHandler(id: number, key: any, value: any): void {\n    const column = this.columns.find((item) => item.code === key);\n\n    if (!this.map.get(id)) {\n      if (column?.type === TableTypeEnum.DATE) {\n        this.dataMap.set(key, this.parseDate_ddMMyyyy(value));\n      } else {\n        this.dataMap.set(key, value);\n      }\n\n      this.map.set(id, new Map(this.dataMap));\n    } else {\n      const mapItem = this.map.get(id) as Map<any, any>;\n\n      if (column?.type === TableTypeEnum.DATE) {\n        mapItem.set(key, this.parseDate_ddMMyyyy(value));\n      } else {\n        mapItem.set(key, value);\n      }\n    }\n  }\n\n  getColumnFilterType(column: TableColumn): string {\n    switch (column.type) {\n      case TableTypeEnum.STRING:\n        return 'text';\n      case TableTypeEnum.AMOUNT:\n      case TableTypeEnum.NUMBER:\n        return 'numeric';\n      case TableTypeEnum.DATE:\n      case TableTypeEnum.DATETIME:\n        return 'date';\n      case TableTypeEnum.MULTISELECT:\n        return 'multiSelect';\n      case TableTypeEnum.BOOLEAN:\n        return 'boolean';\n      case TableTypeEnum.COMPOSED:\n        return 'composed';\n      default:\n        return 'text';\n    }\n  }\n\n  isEditable(key: string | undefined): boolean {\n    if (!key) return false;\n\n    const column = this.columns.find((item) => item.code === key);\n    return column?.isEditable !== false;\n  }\n\n  isMultiSelect(key: any): boolean {\n    const column = this.columns.find((item) => item.code === key);\n\n    if (\n      column?.type === TableTypeEnum.MULTISELECT &&\n      column.options &&\n      column.code !== undefined\n    ) {\n      this.optionEntries = new Map([\n        [column.code as string, Object.values(column.options)],\n      ]);\n      this.optionValues = this.optionEntries.get(key) || [];\n      return true;\n    }\n\n    return false;\n  }\n\n  isDatePicker(key: any): boolean {\n    const t = this.columns.find((item) => item.code === key)?.type;\n    return t === TableTypeEnum.DATE || t === TableTypeEnum.DATETIME;\n  }\n\n  isDateTimePicker(key: any): boolean {\n    const t = this.columns.find((item) => item.code === key)?.type;\n    return t === TableTypeEnum.DATETIME;\n  }\n\n  filterGlobal(event: Event): void {\n    const target = event.target as HTMLInputElement;\n    const value = (target.value || '').toLowerCase();\n\n    if (this.isLazy) {\n      this.searchValue = value;\n      this.resetToFirstPage();\n      this.search.emit(value);\n      this.emitLazyLoad();\n      return;\n    }\n\n    if (!value) {\n      const allData = [...(this.data ?? [])];\n\n      this.dt.value = allData;\n      this.totalRecords = allData.length;\n      this.dt.first = 0;\n      this.filteredData.emit(allData);\n      return;\n    }\n\n    const filteredData = (this.data ?? []).filter((item) =>\n      (this.globalFilterFields ?? []).some((field) => {\n        const column = this.columns?.find((col) => col.code === field);\n        if (!column) return false;\n\n        const cell = item?.[field];\n\n        if (column.type === TableTypeEnum.DATE) {\n          return this.formatDateWithColumn(this.parseAnyDate(cell), column)\n            .toLowerCase()\n            .includes(value);\n        }\n\n        if (column.type === TableTypeEnum.DATETIME) {\n          return this.formatDateTimeWithColumn(this.parseAnyDate(cell), column)\n            .toLowerCase()\n            .includes(value);\n        }\n\n        if (\n          column.type === TableTypeEnum.AMOUNT ||\n          column.type === TableTypeEnum.NUMBER\n        ) {\n          return String(cell ?? '')\n            .toLowerCase()\n            .includes(value);\n        }\n\n        if (column.type === TableTypeEnum.COMPOSED) {\n          return this.filterComposedColumn(cell, value);\n        }\n\n        return String(cell ?? '')\n          .toLowerCase()\n          .includes(value);\n      }),\n    );\n\n    this.dt.value = filteredData;\n    this.totalRecords = filteredData.length;\n    this.dt.first = 0;\n    this.filteredData.emit([...filteredData]);\n  }\n\n  private filterComposedColumn(composedData: any, value: string): boolean {\n    if (!composedData) return false;\n\n    return Object.keys(composedData).some((key) => {\n      const cellValue = composedData[key];\n      return typeof cellValue === 'string'\n        ? cellValue.toLowerCase().includes(value)\n        : false;\n    });\n  }\n\n  public parseAnyDate(input: any): Date | null {\n    if (input === null || input === undefined || input === '') return null;\n    if (input instanceof Date) return isNaN(input.getTime()) ? null : input;\n\n    if (typeof input === 'number') {\n      const d = new Date(input);\n      return isNaN(d.getTime()) ? null : d;\n    }\n\n    if (typeof input === 'string') {\n      const s = input.trim();\n      const isoTry = new Date(s);\n\n      if (!isNaN(isoTry.getTime())) return isoTry;\n\n      if (s.includes('/')) {\n        const parts = s.split(' ')[0].split('/');\n\n        if (parts.length === 3) {\n          const day = parseInt(parts[0], 10);\n          const month = parseInt(parts[1], 10) - 1;\n          const year = parseInt(parts[2], 10);\n          const d = new Date(year, month, day);\n\n          return isNaN(d.getTime()) ? null : d;\n        }\n      }\n    }\n\n    return null;\n  }\n\n  private formatWithPattern(d: Date | null, pattern: string): string {\n    if (!d) return '';\n\n    const pad2 = (n: number) => String(n).padStart(2, '0');\n\n    const map: Record<string, string> = {\n      dd: pad2(d.getDate()),\n      MM: pad2(d.getMonth() + 1),\n      yyyy: String(d.getFullYear()),\n      HH: pad2(d.getHours()),\n      mm: pad2(d.getMinutes()),\n      ss: pad2(d.getSeconds()),\n    };\n\n    return pattern\n      .replace(/yyyy/g, map.yyyy)\n      .replace(/dd/g, map.dd)\n      .replace(/MM/g, map.MM)\n      .replace(/HH/g, map.HH)\n      .replace(/mm/g, map.mm)\n      .replace(/ss/g, map.ss);\n  }\n\n  formatDate(date: any): string {\n    const d = this.parseAnyDate(date);\n    return this.formatWithPattern(d, 'dd/MM/yyyy');\n  }\n\n  formatDateWithColumn(d: Date | null, col: TableColumn): string {\n    const fmt = col.dateFormat?.trim() || 'dd/MM/yyyy';\n    return this.formatWithPattern(d, fmt);\n  }\n\n  formatDateTimeWithColumn(d: Date | null, col: TableColumn): string {\n    const fmt = col.dateTimeFormat?.trim() || 'dd/MM/yyyy HH:mm:ss';\n    return this.formatWithPattern(d, fmt);\n  }\n\n  private calculateColumnWidth(col: TableColumn): string {\n    const calculatedWidth = calculateTextWidth(col, col.title);\n    const totalWidth = calculatedWidth + this.iconWidth + 20;\n    return `${totalWidth}px`;\n  }\n\n  getHeaderWidth(col: TableColumn): string {\n    return col.width ? col.width : this.calculateColumnWidth(col);\n  }\n\n  clear(table: Table): void {\n    table.clear();\n    this.searchValue = '';\n    this.latestFilterValues = {};\n    this.clearedFields.clear();\n    this.currentSortField = null;\n    this.currentSortOrder = null;\n\n    Object.keys(this.filters).forEach((key) => {\n      if (this.filters[key]) this.filters[key].value = [];\n    });\n\n    if (this.isLazy) {\n      this.resetToFirstPage();\n      this.onFilterColumn.emit({ cleared: true });\n      this.emitLazyLoad();\n      return;\n    }\n\n    if (this.dt) {\n      const allData = [...(this.data ?? [])];\n\n      this.dt.value = allData;\n      this.totalRecords = allData.length;\n      this.dt.first = 0;\n      this.filteredData.emit(allData);\n    }\n  }\n\n  private initializePagination(): void {\n    if (this.isPaginated) {\n      if (!this.rowsPerPage || this.rowsPerPage.length === 0) {\n        this.rowsPerPage = [10, 20, 30];\n      }\n\n      this.rows = this.rowsPerPage[0];\n      this.currentPage = 0;\n      this.first = 0;\n    }\n  }\n\n  getCurrencySymbol(column: TableColumn): string | undefined {\n    return column.type === TableTypeEnum.AMOUNT &&\n      column.currency &&\n      this.isValidCurrencyCode(column.currency)\n      ? column.currency\n      : undefined;\n  }\n\n  private isValidCurrencyCode(currencyCode: string): boolean {\n    return this.validCurrencyCodes.includes(currencyCode);\n  }\n\n  exportExcel(): void {\n    this.exportExcelEvent.emit();\n  }\n\n  exportPdf(): void {\n    this.exportPdfEvent.emit();\n  }\n\n  getImageStyle(style: TitleStyle | ImageStyle | undefined): {\n    [key: string]: string;\n  } {\n    if (!style) return {};\n\n    const imageStyle: { [key: string]: string } = {\n      width: (style as ImageStyle).width || 'auto',\n      height: (style as ImageStyle).height || 'auto',\n    };\n\n    if ((style as ImageStyle).margin) {\n      imageStyle.margin = (style as ImageStyle).margin!;\n    }\n\n    if ((style as ImageStyle).marginLeft) {\n      imageStyle.marginLeft = (style as ImageStyle).marginLeft!;\n    }\n\n    if ((style as ImageStyle).marginRight) {\n      imageStyle.marginRight = (style as ImageStyle).marginRight!;\n    }\n\n    if ((style as ImageStyle).marginTop) {\n      imageStyle.marginTop = (style as ImageStyle).marginTop!;\n    }\n\n    if ((style as ImageStyle).marginBottom) {\n      imageStyle.marginBottom = (style as ImageStyle).marginBottom!;\n    }\n\n    return imageStyle;\n  }\n\n  getTitleStyle(style: TitleStyle | ImageStyle | undefined): {\n    [key: string]: string;\n  } {\n    if (!style) return {};\n\n    return {\n      color: style.color || 'inherit',\n      fontSize: (style as TitleStyle).fontSize || 'inherit',\n      textAlign: (style as TitleStyle).position || 'left',\n    };\n  }\n\n  formatNumber(\n    value: number,\n    decimalPlaces?: number,\n    thousandSeparator: 'comma' | 'space' = 'comma',\n    decimalSeparator: 'comma' | 'dot' = 'dot',\n  ): string {\n    if (value === null || value === undefined || isNaN(value)) return '';\n\n    let formattedNumber =\n      decimalPlaces !== undefined\n        ? value.toFixed(decimalPlaces)\n        : value.toString();\n\n    if (decimalSeparator === 'comma') {\n      formattedNumber = formattedNumber.replace('.', ',');\n    }\n\n    if (thousandSeparator && Math.abs(value) >= 1000) {\n      const parts = formattedNumber.split(\n        decimalSeparator === 'comma' ? ',' : '.',\n      );\n\n      parts[0] = parts[0].replace(\n        /\\B(?=(\\d{3})+(?!\\d))/g,\n        thousandSeparator === 'comma' ? ',' : ' ',\n      );\n\n      formattedNumber = parts.join(decimalSeparator === 'comma' ? ',' : '.');\n    }\n\n    return formattedNumber;\n  }\n\n  isActionVisible(action: PTTableActionConfig, row: any): boolean {\n    const v = action?.visible;\n\n    if (v === undefined || v === null) return true;\n\n    return typeof v === 'function' ? !!v(row) : !!v;\n  }\n\n  isActionDisabled(action: PTTableActionConfig, row: any): boolean {\n    const d = action.disabled;\n\n    if (d === undefined || d === null) return false;\n\n    return typeof d === 'function' ? !!d(row) : !!d;\n  }\n\n  getComposedCellStyle(\n    col: TableColumn,\n    composedName: string,\n    row: any,\n  ): { [key: string]: string } {\n    const extendedCol = col as ExtendedTableColumn;\n    const styleConfig = extendedCol?.composedCellStyles?.[composedName];\n\n    if (!styleConfig) {\n      return {};\n    }\n\n    return typeof styleConfig === 'function'\n      ? (styleConfig(row) ?? {})\n      : styleConfig;\n  }\n\n  mergeStyles(...styles: Array<{ [key: string]: string } | null | undefined>): {\n    [key: string]: string;\n  } {\n    return styles.reduce<{ [key: string]: string }>((acc, style) => {\n      if (!style) {\n        return acc;\n      }\n\n      return {\n        ...acc,\n        ...style,\n      };\n    }, {});\n  }\n\n  getMergedComposedTextStyle(\n    col: TableColumn,\n    composedName: string,\n    row: any,\n  ): { [key: string]: string } {\n    return this.mergeStyles(\n      this.getTitleStyle(col.composedStyles?.[composedName]),\n      this.getComposedCellStyle(col, composedName, row),\n    );\n  }\n\n  getMergedComposedImageStyle(\n    col: TableColumn,\n    composedName: string,\n    row: any,\n  ): { [key: string]: string } {\n    return this.mergeStyles(\n      this.getImageStyle(col.composedStyles?.[composedName]),\n      this.getComposedCellStyle(col, composedName, row),\n    );\n  }\n\n  getTagValue(col: TableColumn, row: any): string {\n    const extendedCol = col as ExtendedTableColumn;\n    const tagValue = extendedCol.tagValue;\n\n    if (typeof tagValue === 'function') {\n      return tagValue(row) ?? '';\n    }\n\n    if (tagValue !== undefined && tagValue !== null) {\n      return String(tagValue);\n    }\n\n    return String(col.code ? row?.[col.code] : '');\n  }\n\n  getTagSeverity(col: TableColumn, row: any): SeverityEnum {\n    const extendedCol = col as ExtendedTableColumn;\n    const tagSeverity = extendedCol.tagSeverity;\n\n    if (typeof tagSeverity === 'function') {\n      return tagSeverity(row) ?? SeverityEnum.INFO;\n    }\n\n    return tagSeverity ?? SeverityEnum.INFO;\n  }\n\n  getTagIcon(col: TableColumn, row: any): string | undefined {\n    const extendedCol = col as ExtendedTableColumn;\n    const tagIcon = extendedCol.tagIcon;\n\n    if (typeof tagIcon === 'function') {\n      return tagIcon(row) || undefined;\n    }\n\n    return tagIcon || undefined;\n  }\n\n  isTagRounded(col: TableColumn): boolean {\n    return (col as ExtendedTableColumn).tagRounded !== false;\n  }\n\n  getActionTooltip(action: PTTableActionConfig, row: any): string {\n    if (!action?.tooltip) {\n      return '';\n    }\n\n    return action.tooltip;\n  }\n\n  getDefaultActionTooltip(code: string): string {\n    switch (code) {\n      case 'delete':\n        return 'Supprimer';\n      case 'edit':\n        return 'Modifier';\n      case 'save':\n        return 'Enregistrer';\n      case 'cancel':\n        return 'Annuler';\n      default:\n        return '';\n    }\n  }\n  getProgressValue(col: TableColumn, row: any): number {\n    const extendedCol = col as ExtendedTableColumn;\n    const progressValue = extendedCol.progressValue;\n\n    let value: number;\n\n    if (typeof progressValue === 'function') {\n      value = Number(progressValue(row) ?? 0);\n    } else if (progressValue !== undefined && progressValue !== null) {\n      value = Number(progressValue);\n    } else {\n      value = Number(col.code ? row?.[col.code] : 0);\n    }\n\n    if (!Number.isFinite(value)) {\n      return 0;\n    }\n\n    return Math.max(0, Math.min(100, value));\n  }\n\n  isProgressShowValue(col: TableColumn): boolean {\n    return (col as ExtendedTableColumn).progressShowValue !== false;\n  }\n\n  getProgressUnit(col: TableColumn): string {\n    return (col as ExtendedTableColumn).progressUnit ?? '%';\n  }\n\n  getProgressSeverity(col: TableColumn, row: any): SeverityEnum {\n    const extendedCol = col as ExtendedTableColumn;\n    const severity = extendedCol.progressSeverity;\n\n    if (typeof severity === 'function') {\n      return severity(row) ?? SeverityEnum.INFO;\n    }\n\n    return severity ?? SeverityEnum.INFO;\n  }\n\n  getMultiSelectValues(value: any): any[] {\n    if (Array.isArray(value)) {\n      return value;\n    }\n\n    if (value === null || value === undefined || value === '') {\n      return [];\n    }\n\n    return [value];\n  }\n\n  getCellHeight(): string | null {\n    return this.cellHeight?.trim() || null;\n  }\n\n  getColumnCellPadding(col: TableColumn): string {\n    return col.cellPadding?.trim() || this.cellPadding?.trim() || '0px';\n  }\n\n  getColumnCellMargin(col: TableColumn): string {\n    return col.cellMargin?.trim() || '0px';\n  }\n\n  getCellInnerStyle(\n    col: TableColumn,\n    defaultMargin: string = '0px',\n  ): { [key: string]: string } {\n    return {\n      margin: col.cellMargin?.trim() || defaultMargin,\n      minHeight: '0',\n      boxSizing: 'border-box',\n    };\n  }\n\n  getCellStyle(col: TableColumn, row: any): { [key: string]: string } {\n    const styles: { [key: string]: string } = {};\n\n    if (col.cellStyle) {\n      const customStyle =\n        typeof col.cellStyle === 'function'\n          ? col.cellStyle(row)\n          : col.cellStyle;\n\n      Object.assign(styles, customStyle);\n    }\n\n    const height = this.getCellHeight();\n\n    if (height) {\n      styles['height'] = height;\n      styles['max-height'] = height;\n      styles['line-height'] = height;\n    }\n\n    styles['padding'] = this.getColumnCellPadding(col);\n    styles['box-sizing'] = 'border-box';\n\n    return styles;\n  }\n\n  getHeaderCellStyle(col: TableColumn): { [key: string]: string } {\n    const styles: { [key: string]: string } = {\n      padding: this.getColumnCellPadding(col),\n      boxSizing: 'border-box',\n    };\n\n    const height = this.getCellHeight();\n\n    if (height) {\n      styles['height'] = height;\n      styles['max-height'] = height;\n      styles['line-height'] = height;\n    }\n\n    return styles;\n  }\n\n  getStaticCellStyle(): { [key: string]: string } {\n    const styles: { [key: string]: string } = {\n      padding: this.cellPadding?.trim() || '0px',\n      boxSizing: 'border-box',\n    };\n\n    const height = this.getCellHeight();\n\n    if (height) {\n      styles['height'] = height;\n      styles['max-height'] = height;\n      styles['line-height'] = height;\n    }\n\n    return styles;\n  }\n}\n","<div class=\"pt-advanced-prime-table table-container\">\n  <p-table\n    #dt\n    [value]=\"data\"\n    [loading]=\"loading\"\n    [rows]=\"rows\"\n    [paginator]=\"isPaginated\"\n    [globalFilterFields]=\"globalFilterFields\"\n    [rowsPerPageOptions]=\"rowsPerPage\"\n    [totalRecords]=\"totalRecords\"\n    [lazy]=\"isLazy\"\n    [filterDelay]=\"0\"\n    [dataKey]=\"selectionDataKey || rowReorderIdField || 'id'\"\n    styleClass=\"p-datatable-gridlines p-datatable-striped\"\n    [scrollable]=\"true\"\n    [scrollHeight]=\"maxHeight !== null ? maxHeight : undefined\"\n    (onRowReorder)=\"onRowReorder($event)\"\n    (onPage)=\"changePage($event)\"\n    (onSort)=\"sortColumn($event)\"\n    (onFilter)=\"filterColumn($event)\"\n    [selectionMode]=\"selectionMode\"\n    [(selection)]=\"selection\"\n    (selectionChange)=\"selectionChange.emit($event)\"\n    (onRowSelect)=\"rowSelect.emit($event.data)\"\n    (onRowUnselect)=\"rowUnselect.emit($event.data)\"\n  >\n    <ng-template pTemplate=\"colgroup\" let-columns>\n      <colgroup>\n        @if (canUseRowReorder()) {\n          <col style=\"width: 3rem\" />\n        }\n\n        @for (col of columns; track col) {\n          <col [style.width]=\"col.width || getHeaderWidth(col)\" />\n        }\n      </colgroup>\n    </ng-template>\n\n    <ng-template pTemplate=\"caption\">\n      <div class=\"flex\">\n        <div>\n          <h3>Total: {{ totalRecords }}</h3>\n        </div>\n\n        <div>\n          @if (hasSearchFilter) {\n            <button\n              pButton\n              icon=\"pi pi-filter-slash\"\n              class=\"p-button-rounded p-button-text\"\n              (click)=\"clear(dt)\"\n              title=\"Clear filters\"\n            ></button>\n          }\n\n          @if (hasExportExcel) {\n            <button\n              pButton\n              icon=\"pi pi-file-excel\"\n              class=\"p-button-rounded p-button-text\"\n              (click)=\"exportExcel()\"\n              title=\"Export to Excel\"\n            ></button>\n          }\n\n          @if (hasExportPDF) {\n            <button\n              pButton\n              icon=\"pi pi-file-pdf\"\n              class=\"p-button-rounded p-button-text\"\n              (click)=\"exportPdf()\"\n              title=\"Export to PDF\"\n            ></button>\n          }\n        </div>\n\n        @if (hasSearchFilter) {\n          <div class=\"ml-auto\">\n            <p-iconField iconPosition=\"left\" class=\"ml-auto\">\n              <p-inputIcon>\n                <i class=\"pi pi-search\"></i>\n              </p-inputIcon>\n\n              <input\n                pInputText\n                type=\"text\"\n                [(ngModel)]=\"searchValue\"\n                (input)=\"filterGlobal($event)\"\n                placeholder=\"Search keyword\"\n              />\n            </p-iconField>\n          </div>\n        }\n      </div>\n    </ng-template>\n\n    <ng-template pTemplate=\"header\">\n      <tr class=\"sticky-header\">\n        @if (canUseRowReorder()) {\n          <th [style.width]=\"'3rem'\" [ngStyle]=\"getStaticCellStyle()\"></th>\n        }\n\n        @for (col of columns; track col) {\n          @if (!col.children) {\n            <th\n              [pSortableColumn]=\"col.code\"\n              [style.width]=\"col.width || getHeaderWidth(col)\"\n              [ngStyle]=\"getHeaderCellStyle(col)\"\n              [ngClass]=\"[\n                getHeaderAlignClass(col),\n                col.type === TableTypeEnum.ACTION ? 'action-column' : '',\n              ]\"\n              colspan=\"1\"\n            >\n              @if (isSortable && col.isSortable !== false) {\n                <div\n                  class=\"header-container d-flex align-items-center justify-content-between\"\n                  [style.width]=\"col.width || getHeaderWidth(col)\"\n                  [ngStyle]=\"getCellInnerStyle(col, '10px')\"\n                >\n                  <span [ngClass]=\"getHeaderTitleClass(col)\">\n                    {{ col.title }}\n                  </span>\n\n                  <div\n                    class=\"icons d-flex align-items-center\"\n                    [style.width]=\"'77px'\"\n                  >\n                    <p-sortIcon [field]=\"col.code\" />\n\n                    @if (hasColumnFilter && col.isFilter !== false) {\n                      @if (col.type === TableTypeEnum.COMPOSED) {\n                        <p-columnFilter\n                          display=\"menu\"\n                          [field]=\"col.code\"\n                          type=\"text\"\n                          [showApplyButton]=\"true\"\n                          [showClearButton]=\"true\"\n                          [showMatchModes]=\"false\"\n                          [showOperator]=\"false\"\n                          (onClear)=\"onComposedColumnClear(col)\"\n                        >\n                          <ng-template\n                            pTemplate=\"filter\"\n                            let-filter=\"filterCallback\"\n                          >\n                            @for (\n                              composedName of col.composedNames;\n                              track composedName\n                            ) {\n                              <div>\n                                @if (\n                                  getComposedFieldType(col, composedName) ===\n                                  TableTypeEnum.STRING\n                                ) {\n                                  <p-multiSelect\n                                    [options]=\"filters[composedName]?.options\"\n                                    optionLabel=\"label\"\n                                    optionValue=\"value\"\n                                    [ngModel]=\"\n                                      filters[composedName]?.value ?? []\n                                    \"\n                                    (ngModelChange)=\"\n                                      onComposedFilterValueChange(\n                                        col,\n                                        composedName,\n                                        $event\n                                      );\n                                      filter($event ?? [])\n                                    \"\n                                    [placeholder]=\"\n                                      filters[composedName]?.placeholder\n                                    \"\n                                    display=\"chip\"\n                                  >\n                                    <ng-template let-item pTemplate=\"item\">\n                                      <div class=\"custom-multiselect-item\">\n                                        @if (item.image) {\n                                          <img\n                                            [src]=\"item.image\"\n                                            alt=\"icon\"\n                                            class=\"filter-image\"\n                                          />\n                                        }\n\n                                        <span>{{ item.label }}</span>\n                                      </div>\n                                    </ng-template>\n                                  </p-multiSelect>\n                                }\n                              </div>\n                            }\n                          </ng-template>\n                        </p-columnFilter>\n                      }\n\n                      @if (col.type !== TableTypeEnum.COMPOSED) {\n                        <p-columnFilter\n                          display=\"menu\"\n                          [field]=\"col.code\"\n                          [type]=\"getColumnFilterType(col)\"\n                          [showApplyButton]=\"true\"\n                          [showClearButton]=\"true\"\n                          [showMatchModes]=\"\n                            col.type !== TableTypeEnum.MULTISELECT\n                          \"\n                          [showOperator]=\"\n                            col.type !== TableTypeEnum.MULTISELECT\n                          \"\n                          [matchMode]=\"\n                            col.type === TableTypeEnum.MULTISELECT\n                              ? 'in'\n                              : undefined\n                          \"\n                          (onClear)=\"onFilterClear(col.code!)\"\n                        >\n                          @if (\n                            col.type === TableTypeEnum.NUMBER ||\n                              col.type === TableTypeEnum.AMOUNT;\n                            as value\n                          ) {\n                            <ng-template pTemplate=\"filter\" let-value>\n                              <input\n                                pInputText\n                                type=\"text\"\n                                inputmode=\"decimal\"\n                                [ngModel]=\"\n                                  latestFilterValues[col.code!] ?? value\n                                \"\n                                (ngModelChange)=\"\n                                  onNumberFilterChange(col.code!, $event)\n                                \"\n                                placeholder=\"Enter a number\"\n                              />\n                            </ng-template>\n                          }\n\n                          <ng-template\n                            pTemplate=\"filter\"\n                            *ngIf=\"col.type === TableTypeEnum.DATE\"\n                            let-filter=\"filterCallback\"\n                            let-value\n                          >\n                            <p-datepicker\n                              [ngModel]=\"latestFilterValues[col.code!] ?? value\"\n                              (ngModelChange)=\"\n                                onFilterValueChange(col.code!, null, $event);\n                                filter($event)\n                              \"\n                              dateFormat=\"dd/mm/yy\"\n                              placeholder=\"Choose a date\"\n                            ></p-datepicker>\n                          </ng-template>\n\n                          <ng-template\n                            pTemplate=\"filter\"\n                            *ngIf=\"\n                              col.type === TableTypeEnum.MULTISELECT &&\n                              col.filterOptions &&\n                              col.filterOptions.length > 0\n                            \"\n                            let-filter=\"filterCallback\"\n                            let-value\n                          >\n                            <p-multiSelect\n                              [options]=\"col.filterOptions\"\n                              optionLabel=\"label\"\n                              optionValue=\"value\"\n                              [ngModel]=\"\n                                latestFilterValues[col.code!] ?? value ?? []\n                              \"\n                              (ngModelChange)=\"\n                                onFilterValueChange(col.code!, null, $event);\n                                filter($event ?? [])\n                              \"\n                              display=\"chip\"\n                              placeholder=\"Choose option\"\n                              class=\"custom-multiselect\"\n                            ></p-multiSelect>\n                          </ng-template>\n                        </p-columnFilter>\n                      }\n                    }\n                  </div>\n                </div>\n              } @else {\n                <div\n                  class=\"header-container d-flex align-items-center justify-content-between\"\n                  [style.width]=\"col.width || getHeaderWidth(col)\"\n                  [ngStyle]=\"getCellInnerStyle(col, '10px')\"\n                >\n                  <span [ngClass]=\"getHeaderTitleClass(col)\">\n                    {{ col.title }}\n                  </span>\n\n                  @if (hasColumnFilter && col.isFilter !== false) {\n                    <p-columnFilter\n                      display=\"menu\"\n                      [field]=\"col.code\"\n                      [type]=\"getColumnFilterType(col)\"\n                      [currency]=\"getCurrencySymbol(col)\"\n                      [showApplyButton]=\"true\"\n                      [showClearButton]=\"true\"\n                      [showMatchModes]=\"\n                        getColumnFilterType(col) !== 'multiSelect'\n                      \"\n                      [showOperator]=\"\n                        getColumnFilterType(col) !== 'multiSelect'\n                      \"\n                      [matchMode]=\"\n                        getColumnFilterType(col) === 'multiSelect'\n                          ? 'in'\n                          : undefined\n                      \"\n                      (onClear)=\"onFilterClear(col.code!)\"\n                    >\n                      <ng-template\n                        pTemplate=\"filter\"\n                        let-filter=\"filterCallback\"\n                        let-value\n                        *ngIf=\"getColumnFilterType(col) === 'date'\"\n                      >\n                        <p-datepicker\n                          [ngModel]=\"latestFilterValues[col.code!] ?? value\"\n                          (ngModelChange)=\"\n                            onFilterValueChange(col.code!, null, $event);\n                            filter($event)\n                          \"\n                          dateFormat=\"dd/mm/yy\"\n                        ></p-datepicker>\n                      </ng-template>\n\n                      <ng-template\n                        pTemplate=\"filter\"\n                        let-filter=\"filterCallback\"\n                        let-value\n                        *ngIf=\"getColumnFilterType(col) === 'multiSelect'\"\n                      >\n                        <p-multiSelect\n                          [options]=\"col.filterOptions\"\n                          optionLabel=\"label\"\n                          optionValue=\"value\"\n                          [ngModel]=\"\n                            latestFilterValues[col.code!] ?? value ?? []\n                          \"\n                          (ngModelChange)=\"\n                            onFilterValueChange(col.code!, null, $event);\n                            filter($event ?? [])\n                          \"\n                          display=\"chip\"\n                          placeholder=\"Select\"\n                          class=\"custom-multiselect\"\n                        ></p-multiSelect>\n                      </ng-template>\n                    </p-columnFilter>\n                  }\n                </div>\n              }\n            </th>\n          } @else {\n            <th\n              [attr.colspan]=\"col?.children?.length\"\n              [style.width]=\"col.width || getHeaderWidth(col)\"\n              [ngStyle]=\"getHeaderCellStyle(col)\"\n              [ngClass]=\"getHeaderAlignClass(col)\"\n            >\n              <span>{{ col.title }}</span>\n            </th>\n          }\n        }\n      </tr>\n\n      @if (hasGroupedColumns) {\n        <tr>\n          @if (canUseRowReorder()) {\n            <th [style.width]=\"'3rem'\" [ngStyle]=\"getStaticCellStyle()\"></th>\n          }\n\n          @for (col of columns; track col) {\n            @if (col.children) {\n              @for (child of col.children; track child) {\n                <th\n                  [style.width]=\"child.width || getHeaderWidth(child)\"\n                  [ngStyle]=\"getHeaderCellStyle(child)\"\n                ></th>\n              }\n            }\n          }\n        </tr>\n      }\n    </ng-template>\n\n    <ng-template pTemplate=\"emptymessage\">\n      <tr class=\"p-datatable-emptymessage\">\n        <td\n          class=\"empty-message-cell\"\n          [attr.colspan]=\"columns.length + (canUseRowReorder() ? 1 : 0)\"\n        >\n          <div class=\"empty-message-wrapper\">\n            <div class=\"empty-message\">\n              <i class=\"pi pi-info-circle\"></i>\n              <p>No records available to display.</p>\n            </div>\n          </div>\n        </td>\n      </tr>\n    </ng-template>\n\n    <ng-template\n      pTemplate=\"body\"\n      let-data\n      let-editing=\"editing\"\n      let-ri=\"rowIndex\"\n    >\n      @if (!loading) {\n        <tr\n          [pEditableRow]=\"isEdit ? data : null\"\n          [pReorderableRow]=\"canUseRowReorder() ? ri : null\"\n          [pSelectableRow]=\"selectionMode ? data : null\"\n        >\n          @if (canUseRowReorder()) {\n            <td\n              [style.width]=\"'3rem'\"\n              [style.text-align]=\"'center'\"\n              [ngStyle]=\"getStaticCellStyle()\"\n            >\n              <span\n                pReorderableRowHandle\n                style=\"cursor: move; display: inline-flex; align-items: center\"\n                title=\"Déplacer la ligne\"\n              >\n                <i class=\"pi pi-bars\"></i>\n              </span>\n            </td>\n          }\n\n          @for (col of columns; track col) {\n            @if (!col.children) {\n              @if (isEditable(col.code!) && col.type !== TableTypeEnum.ACTION) {\n                <td\n                  [style.width]=\"col.width || getHeaderWidth(col)\"\n                  [ngClass]=\"getDataAlignClass(col)\"\n                  [ngStyle]=\"getCellStyle(col, data)\"\n                >\n                  <div\n                    [ngClass]=\"getCellInnerAlignClass(col)\"\n                    [ngStyle]=\"getCellInnerStyle(col)\"\n                  >\n                    @if (isMultiSelect(col.code)) {\n                      <p-cellEditor>\n                        <ng-template pTemplate=\"input\">\n                          <p-multiSelect\n                            appendTo=\"body\"\n                            [ngModel]=\"data[col.code!]\"\n                            [style]=\"{ width: '100%' }\"\n                            (ngModelChange)=\"\n                              changeHandler(data.id, col.code, $event)\n                            \"\n                            [options]=\"optionValues\"\n                          ></p-multiSelect>\n                        </ng-template>\n\n                        <ng-template pTemplate=\"output\">\n                          <div class=\"multi-select-container\">\n                            @for (\n                              rec of getMultiSelectValues(data[col.code!]);\n                              track rec\n                            ) {\n                              <p-tag [value]=\"rec\"></p-tag>\n                            }\n                          </div>\n                        </ng-template>\n                      </p-cellEditor>\n                    } @else {\n                      @if (isDatePicker(col.code)) {\n                        <p-cellEditor>\n                          <ng-template pTemplate=\"input\">\n                            <p-datepicker\n                              [inputId]=\"data[col.code!]\"\n                              [ngModel]=\"data[col.code!]\"\n                              (ngModelChange)=\"\n                                changeHandler(data.id, col.code, $event)\n                              \"\n                              [dateFormat]=\"'dd/mm/yy'\"\n                            ></p-datepicker>\n                          </ng-template>\n\n                          <ng-template pTemplate=\"output\">\n                            {{ data[col.code!] | customDate }}\n                          </ng-template>\n                        </p-cellEditor>\n                      } @else {\n                        <p-cellEditor>\n                          <ng-template pTemplate=\"input\">\n                            <input\n                              pInputText\n                              type=\"text\"\n                              [ngModel]=\"data[col.code!]\"\n                              (change)=\"onChange($event, data.id, col.code)\"\n                            />\n                          </ng-template>\n\n                          <ng-template pTemplate=\"output\">\n                            @if (col.type === TableTypeEnum.AMOUNT) {\n                              {{\n                                data[col.code!]\n                                  | customCurrency\n                                    : getCurrencySymbol(col)\n                                    : col.decimalPlaces\n                                    : col.thousandSeparator\n                                    : col.decimalSeparator\n                              }}\n                            } @else {\n                              {{ data[col.code!] }}\n                            }\n                          </ng-template>\n                        </p-cellEditor>\n                      }\n                    }\n                  </div>\n                </td>\n              } @else {\n                <td\n                  [style.width]=\"col.width || getHeaderWidth(col)\"\n                  [ngClass]=\"[\n                    getDataAlignClass(col),\n                    col.type === TableTypeEnum.ACTION ? 'action-column' : '',\n                  ]\"\n                  [ngStyle]=\"getCellStyle(col, data)\"\n                >\n                  @if (col.type === TableTypeEnum.ACTION) {\n                    <div\n                      class=\"action-buttons-container\"\n                      [ngStyle]=\"getCellInnerStyle(col)\"\n                    >\n                      @if (isDelete) {\n                        <button\n                          pButton\n                          pRipple\n                          pTooltip=\"Supprimer\"\n                          tooltipPosition=\"top\"\n                          appendTo=\"body\"\n                          type=\"button\"\n                          icon=\"pi pi-trash\"\n                          (click)=\"Delete(data)\"\n                          class=\"p-button-rounded p-button-text\"\n                        ></button>\n                      }\n\n                      @if (isEdit) {\n                        <div>\n                          @if (!editing) {\n                            <button\n                              pInitEditableRow\n                              pButton\n                              pRipple\n                              pTooltip=\"Modifier\"\n                              tooltipPosition=\"top\"\n                              appendTo=\"body\"\n                              type=\"button\"\n                              icon=\"pi pi-pencil\"\n                              (click)=\"initEditableRow(data)\"\n                              class=\"p-button-rounded p-button-text\"\n                            ></button>\n                          }\n\n                          @if (editing) {\n                            <button\n                              pSaveEditableRow\n                              pButton\n                              pRipple\n                              pTooltip=\"Enregistrer\"\n                              tooltipPosition=\"top\"\n                              appendTo=\"body\"\n                              type=\"button\"\n                              icon=\"pi pi-check\"\n                              (click)=\"saveEditableRow(data)\"\n                              class=\"p-button-rounded p-button-text\"\n                            ></button>\n                          }\n\n                          @if (editing) {\n                            <button\n                              pCancelEditableRow\n                              pButton\n                              pRipple\n                              pTooltip=\"Annuler\"\n                              tooltipPosition=\"top\"\n                              appendTo=\"body\"\n                              type=\"button\"\n                              icon=\"pi pi-times\"\n                              (click)=\"cancelEditableRow(data)\"\n                              class=\"p-button-rounded p-button-text\"\n                            ></button>\n                          }\n                        </div>\n                      }\n\n                      @for (act of customActions; track act) {\n                        @if (isActionVisible(act, data)) {\n                          <button\n                            pButton\n                            pRipple\n                            [pTooltip]=\"act.tooltip || ''\"\n                            tooltipPosition=\"top\"\n                            appendTo=\"body\"\n                            type=\"button\"\n                            class=\"p-button-rounded p-button-text\"\n                            [icon]=\"act.icon || 'pi pi-ellipsis-h'\"\n                            [ngClass]=\"act.styleClass\"\n                            [disabled]=\"isActionDisabled(act, data)\"\n                            (click)=\"onCustomActionClick(act, data)\"\n                          ></button>\n                        }\n                      }\n                    </div>\n                  } @else {\n                    <div\n                      [ngClass]=\"getCellInnerAlignClass(col)\"\n                      [ngStyle]=\"getCellInnerStyle(col)\"\n                    >\n                      @if (col.type === TableTypeEnum.COMPOSED) {\n                        <div class=\"composed-cell\">\n                          @for (\n                            composedName of col.composedNames;\n                            track composedName;\n                            let i = $index\n                          ) {\n                            @if (\n                              col.composedTypes &&\n                              col.composedTypes[i] === TableTypeEnum.IMAGE\n                            ) {\n                              <img\n                                [src]=\"data[col.code!]?.[composedName]\"\n                                alt=\"composed-img\"\n                                class=\"composed-image\"\n                                [ngStyle]=\"\n                                  getMergedComposedImageStyle(\n                                    col,\n                                    composedName,\n                                    data\n                                  )\n                                \"\n                              />\n                            }\n\n                            @if (\n                              col.composedTypes &&\n                              col.composedTypes[i] === TableTypeEnum.STRING\n                            ) {\n                              <span\n                                class=\"composed-text\"\n                                [ngStyle]=\"\n                                  getMergedComposedTextStyle(\n                                    col,\n                                    composedName,\n                                    data\n                                  )\n                                \"\n                              >\n                                {{ data[col.code!]?.[composedName] }}\n                              </span>\n                            }\n                          }\n                        </div>\n                      } @else {\n                        @if (col.type === TableTypeEnum.PROGRESS) {\n                          <div class=\"progress-cell\">\n                            <p-progressBar\n                              [value]=\"getProgressValue(col, data)\"\n                              [showValue]=\"false\"\n                              [ngClass]=\"\n                                'pt-progress-' + getProgressSeverity(col, data)\n                              \"\n                            ></p-progressBar>\n\n                            @if (isProgressShowValue(col)) {\n                              <span class=\"progress-cell-value\">\n                                {{ getProgressValue(col, data)\n                                }}{{ getProgressUnit(col) }}\n                              </span>\n                            }\n                          </div>\n                        } @else {\n                          @if (col.type === TableTypeEnum.TAG) {\n                            <p-tag\n                              [value]=\"getTagValue(col, data)\"\n                              [severity]=\"$any(getTagSeverity(col, data))\"\n                              [icon]=\"getTagIcon(col, data)\"\n                              [rounded]=\"isTagRounded(col)\"\n                            ></p-tag>\n                          } @else {\n                            @if (col.type === TableTypeEnum.AMOUNT) {\n                              {{\n                                data[col.code!]\n                                  | customCurrency\n                                    : getCurrencySymbol(col)\n                                    : col.decimalPlaces\n                                    : col.thousandSeparator\n                                    : col.decimalSeparator\n                              }}\n                            } @else {\n                              @if (col.type === TableTypeEnum.NUMBER) {\n                                {{\n                                  formatNumber(\n                                    data[col.code!],\n                                    col.decimalPlaces,\n                                    col.thousandSeparator,\n                                    col.decimalSeparator\n                                  )\n                                }}\n                              } @else {\n                                @if (\n                                  col.type === TableTypeEnum.DATE ||\n                                  col.type === TableTypeEnum.DATETIME\n                                ) {\n                                  @if (col.type === TableTypeEnum.DATE) {\n                                    {{\n                                      formatDateWithColumn(\n                                        parseAnyDate(data[col.code!]),\n                                        col\n                                      )\n                                    }}\n                                  }\n\n                                  @if (col.type === TableTypeEnum.DATETIME) {\n                                    {{\n                                      formatDateTimeWithColumn(\n                                        parseAnyDate(data[col.code!]),\n                                        col\n                                      )\n                                    }}\n                                  }\n                                } @else {\n                                  @if (\n                                    [\n                                      TableTypeEnum.STRING,\n                                      TableTypeEnum.MULTISELECT,\n                                    ].includes(col.type!)\n                                  ) {\n                                    {{ data[col.code!] }}\n                                  }\n                                }\n                              }\n                            }\n                          }\n                        }\n                      }\n                    </div>\n                  }\n                </td>\n              }\n            } @else {\n              @for (child of col.children; track child) {\n                <td\n                  [style.width]=\"child.width || getHeaderWidth(child)\"\n                  [ngClass]=\"getDataAlignClass(child)\"\n                  [ngStyle]=\"getCellStyle(child, data)\"\n                >\n                  <div\n                    [ngClass]=\"getCellInnerAlignClass(child)\"\n                    [ngStyle]=\"getCellInnerStyle(child)\"\n                  >\n                    @if (isEditable(child.code)) {\n                      <p-cellEditor>\n                        <ng-template pTemplate=\"input\">\n                          <input\n                            pInputText\n                            type=\"text\"\n                            [ngModel]=\"child.code ? data[child.code] : null\"\n                            (change)=\"onChange($event, data.id, child.code)\"\n                          />\n                        </ng-template>\n\n                        <ng-template pTemplate=\"output\">\n                          {{ child.code ? data[child.code] : \"\" }}\n                        </ng-template>\n                      </p-cellEditor>\n                    } @else {\n                      @if (child.type === TableTypeEnum.TAG) {\n                        <p-tag\n                          [value]=\"getTagValue(child, data)\"\n                          [severity]=\"$any(getTagSeverity(child, data))\"\n                          [icon]=\"getTagIcon(child, data)\"\n                          [rounded]=\"isTagRounded(child)\"\n                        ></p-tag>\n                      } @else {\n                        {{ child.code ? data[child.code] : \"\" }}\n                      }\n                    }\n                  </div>\n                </td>\n              }\n            }\n          }\n        </tr>\n      }\n    </ng-template>\n  </p-table>\n</div>\n","import {\n  Component,\n  EventEmitter,\n  Input,\n  OnChanges,\n  OnDestroy,\n  OnInit,\n  Output,\n  SimpleChanges,\n} from '@angular/core';\nimport {\n  FormControl,\n  FormGroup,\n  ValidatorFn,\n  Validators,\n} from '@angular/forms';\nimport { Subscription } from 'rxjs';\n\nimport { FormMultiSelectField } from '../models/form-multi-select.model';\nimport { PTMultiSelectConfig } from '../models/pt-multi-select-config.model';\n\n@Component({\n  selector: 'pt-multi-select',\n  templateUrl: './pt-multi-select.component.html',\n  styleUrls: ['./pt-multi-select.component.css'],\n  standalone: false,\n})\nexport class PTMultiSelectComponent implements OnInit, OnChanges, OnDestroy {\n  /**\n   * Form-builder / reactive-form usage.\n   */\n  @Input() formGroup?: FormGroup;\n  @Input() formField?: FormMultiSelectField;\n\n  /**\n   * Standalone usage.\n   */\n  @Input() config?: PTMultiSelectConfig;\n\n  /**\n   * Two-way standalone value.\n   */\n  @Input() value: any[] = [];\n  @Output() valueChange = new EventEmitter<any[]>();\n  @Output() selectionChange = new EventEmitter<any[]>();\n\n  private standaloneFormGroup = new FormGroup({});\n  private valueChangesSubscription?: Subscription;\n\n  ngOnInit(): void {\n    this.setupControl(true);\n  }\n\n  ngOnChanges(changes: SimpleChanges): void {\n    if (\n      changes['formGroup'] ||\n      changes['formField'] ||\n      changes['config'] ||\n      changes['value']\n    ) {\n      this.setupControl(false);\n    }\n  }\n\n  ngOnDestroy(): void {\n    this.valueChangesSubscription?.unsubscribe();\n  }\n\n  get activeFormGroup(): FormGroup {\n    return this.formGroup || this.standaloneFormGroup;\n  }\n\n  get controlName(): string {\n    return this.formField?.name || this.config?.name || 'multiSelect';\n  }\n\n  get inputId(): string {\n    return `pt-multiselect-${this.controlName}`;\n  }\n\n  get resolvedHidden(): boolean {\n    return this.formField?.hidden ?? this.config?.hidden ?? false;\n  }\n\n  get resolvedLabel(): string | undefined {\n    return this.formField?.label || this.config?.label;\n  }\n\n  get resolvedWidth(): string {\n    return this.formField?.width || this.config?.width || '100%';\n  }\n\n  get resolvedOptions(): any[] {\n    return this.formField?.options || this.config?.options || [];\n  }\n\n  get resolvedPlaceholder(): string {\n    return (\n      this.formField?.placeholder ||\n      this.config?.placeholder ||\n      'Select options'\n    );\n  }\n\n  get resolvedOptionLabel(): string {\n    return this.config?.optionLabel || 'label';\n  }\n\n  get resolvedOptionValue(): string {\n    return this.config?.optionValue || 'value';\n  }\n\n  get resolvedRequired(): boolean {\n    return this.formField?.required ?? this.config?.required ?? false;\n  }\n\n  get resolvedDisabled(): boolean {\n    return this.formField?.disabled ?? this.config?.disabled ?? false;\n  }\n\n  get resolvedErrorText(): string | undefined {\n    return this.formField?.errorText || this.config?.errorText;\n  }\n\n  get resolvedFilter(): boolean {\n    return this.config?.filter === true;\n  }\n\n  get resolvedFilterBy(): string {\n    return this.config?.filterBy || this.resolvedOptionLabel;\n  }\n\n  get resolvedDisplay(): 'comma' | 'chip' {\n    return this.config?.display || 'comma';\n  }\n\n  get resolvedMaxSelectedLabels(): number {\n    return this.config?.maxSelectedLabels ?? 3;\n  }\n\n  get resolvedSelectedItemsLabel(): string {\n    return this.config?.selectedItemsLabel || '{0} items selected';\n  }\n\n  private setupControl(forceValueFromConfig: boolean): void {\n    const name = this.controlName;\n\n    if (!name) {\n      return;\n    }\n\n    let control = this.activeFormGroup.get(name) as FormControl | null;\n\n    if (!control) {\n      control = new FormControl(this.getInitialValue());\n      this.activeFormGroup.addControl(name, control);\n    } else if (forceValueFromConfig) {\n      control.setValue(this.getInitialValue(), { emitEvent: false });\n    } else if (!this.formGroup && this.value !== undefined) {\n      control.setValue(this.normalizeValue(this.value), { emitEvent: false });\n    }\n\n    control.setValidators(this.getValidators());\n\n    if (this.resolvedDisabled) {\n      control.disable({ emitEvent: false });\n    } else {\n      control.enable({ emitEvent: false });\n    }\n\n    control.updateValueAndValidity({ emitEvent: false });\n\n    this.valueChangesSubscription?.unsubscribe();\n    this.valueChangesSubscription = control.valueChanges.subscribe(\n      (selectedValues) => {\n        const normalizedValues = this.normalizeValue(selectedValues);\n        this.valueChange.emit(normalizedValues);\n        this.selectionChange.emit(normalizedValues);\n      },\n    );\n  }\n\n  private getInitialValue(): any[] {\n    if (this.formField?.value !== undefined) {\n      return this.normalizeValue(this.formField.value);\n    }\n\n    if (this.value !== undefined && Array.isArray(this.value)) {\n      return this.normalizeValue(this.value);\n    }\n\n    return this.normalizeValue(this.config?.value);\n  }\n\n  private getValidators(): ValidatorFn[] {\n    const validators: ValidatorFn[] = [];\n\n    if (this.resolvedRequired) {\n      validators.push(Validators.required);\n    }\n\n    return validators;\n  }\n\n  /**\n   * Le MultiSelect doit manipuler un tableau d'identifiants primitifs,\n   * pas des objets complets, pour éviter les problèmes de référence.\n   */\n  private normalizeValue(value: any): any[] {\n    if (!Array.isArray(value)) {\n      return [];\n    }\n\n    if (value.length === 0) {\n      return [];\n    }\n\n    if (typeof value[0] === 'number' || typeof value[0] === 'string') {\n      return value;\n    }\n\n    return value\n      .map((item: any) => {\n        const optionValue = this.resolvedOptionValue;\n\n        if (item?.[optionValue] !== undefined) {\n          return item[optionValue];\n        }\n\n        return item?.value ?? item?.id ?? null;\n      })\n      .filter((item: any) => item !== null && item !== undefined);\n  }\n\n  getErrorMessage(): string {\n    const control = this.activeFormGroup.get(this.controlName);\n\n    if (control?.hasError('required')) {\n      return (\n        this.resolvedErrorText ||\n        `${this.resolvedLabel || this.controlName} is required`\n      );\n    }\n\n    return '';\n  }\n}\n","@if (!resolvedHidden) {\n  <div\n    [formGroup]=\"activeFormGroup\"\n    class=\"form-field\"\n    [ngStyle]=\"{ width: resolvedWidth }\"\n  >\n    @if (resolvedLabel) {\n      <label [for]=\"inputId\" class=\"field-label\">\n        {{ resolvedLabel }}\n      </label>\n    }\n\n    <p-multiSelect\n      [inputId]=\"inputId\"\n      [name]=\"controlName\"\n      [formControlName]=\"controlName\"\n      [options]=\"resolvedOptions\"\n      [placeholder]=\"resolvedPlaceholder\"\n      [optionLabel]=\"resolvedOptionLabel\"\n      [optionValue]=\"resolvedOptionValue\"\n      [filter]=\"resolvedFilter\"\n      [filterBy]=\"resolvedFilterBy\"\n      [display]=\"resolvedDisplay\"\n      [maxSelectedLabels]=\"resolvedMaxSelectedLabels\"\n      [selectedItemsLabel]=\"resolvedSelectedItemsLabel\"\n      [appendTo]=\"'body'\"\n      [overlayOptions]=\"{ baseZIndex: 11000 }\"\n    ></p-multiSelect>\n\n    @if (\n      activeFormGroup.get(controlName)?.invalid &&\n      (activeFormGroup.get(controlName)?.touched ||\n        activeFormGroup.get(controlName)?.dirty)\n    ) {\n      <div class=\"error-container\">\n        <small class=\"field-error\">{{ getErrorMessage() }}</small>\n      </div>\n    }\n  </div>\n}\n","import { NgModule } from '@angular/core';\nimport { CommonModule } from '@angular/common';\nimport { ReactiveFormsModule } from '@angular/forms';\nimport { MultiSelectModule } from 'primeng/multiselect'; // PrimeNG module\nimport { PTMultiSelectComponent } from './pt-multi-select.component';\n\n@NgModule({\n  declarations: [PTMultiSelectComponent],\n  imports: [CommonModule, ReactiveFormsModule, MultiSelectModule],\n  exports: [PTMultiSelectComponent],\n})\nexport class PTMultiSelectModule {}\n","import {\n  Component,\n  Input,\n  OnInit,\n  AfterViewInit,\n  Renderer2,\n  ElementRef,\n  SimpleChanges,\n  OnChanges,\n} from '@angular/core';\nimport { ButtonModel } from '../models';\nimport { SeverityEnum } from '../enums';\n\n@Component({\n  selector: 'pt-button',\n  templateUrl: './pt-button.component.html',\n  styleUrls: ['./pt-button.component.css'],\n  standalone: false,\n})\nexport class PTButtonComponent implements OnInit, AfterViewInit, OnChanges {\n  @Input() buttonConfig!: ButtonModel;\n\n  constructor(\n    private renderer: Renderer2,\n    private el: ElementRef,\n  ) {}\n\n  ngOnInit(): void {\n    // Fallback to default config if undefined\n    if (!this.buttonConfig) {\n      this.buttonConfig = {\n        label: 'Click Me',\n        icon: '',\n        iconPos: 'left',\n        disabled: false,\n        styleClass: '',\n        loading: false,\n        type: 'button',\n        width: '100%',\n        height: 'auto',\n        fontColor: '#000',\n        backgroundColor: '#fff',\n        borderColor: '#000',\n        outlined: false,\n      };\n    }\n  }\n\n  ngOnChanges(changes: SimpleChanges): void {\n    const configChange = changes['buttonConfig'];\n\n    if (configChange) {\n      const prev = configChange.previousValue as ButtonModel | undefined;\n      const curr = configChange.currentValue as ButtonModel | undefined;\n\n      if (prev && curr) {\n        const onlyDisabledChanged =\n          prev.disabled !== curr.disabled &&\n          JSON.stringify({ ...prev, disabled: undefined }) ===\n            JSON.stringify({ ...curr, disabled: undefined });\n\n        if (onlyDisabledChanged) {\n          setTimeout(() => this.updateDisabledStyles(curr.disabled ?? false));\n        } else {\n          setTimeout(() => this.applyButtonStyles());\n        }\n      } else {\n        // If no previous value (first load), apply full styles\n        setTimeout(() => this.applyButtonStyles());\n      }\n    }\n  }\n\n  ngAfterViewInit(): void {\n    setTimeout(() => this.applyButtonStyles());\n  }\n\n  getIconPos(): 'left' | 'right' {\n    return this.buttonConfig?.iconPos === 'right' ? 'right' : 'left';\n  }\n\n  getType(): string {\n    return this.buttonConfig?.type || 'button';\n  }\n\n  hasCustomColors(): boolean {\n    return !!(\n      this.buttonConfig?.backgroundColor ||\n      this.buttonConfig?.borderColor ||\n      this.buttonConfig?.fontColor\n    );\n  }\n\n  /**\n   * When custom colors are provided, do not pass PrimeNG severity.\n   * Otherwise PrimeNG theme classes can override the custom colors.\n   */\n  getSeverity(): SeverityEnum | undefined {\n    return this.hasCustomColors() ? undefined : this.buttonConfig?.severity;\n  }\n\n  getStyleClass(): string {\n    const classes: string[] = [];\n\n    if (this.buttonConfig?.styleClass) {\n      classes.push(this.buttonConfig.styleClass);\n    }\n\n    if (this.hasCustomColors()) {\n      classes.push('pt-custom-colored-button');\n    }\n\n    return classes.join(' ');\n  }\n\n  /**\n   * Direct style binding for PrimeNG p-button.\n   * This is the reliable fallback for PrimeNG v21 themes.\n   */\n  getButtonStyle(): { [key: string]: string } {\n    const baseStyle: { [key: string]: string } = {\n      width: this.buttonConfig?.width || 'auto',\n      height: this.buttonConfig?.height || 'auto',\n    };\n\n    if (!this.hasCustomColors()) {\n      return baseStyle;\n    }\n\n    if (this.buttonConfig?.disabled) {\n      return {\n        ...baseStyle,\n        color: '#999999',\n        background: '#e0e0e0',\n        'background-color': '#e0e0e0',\n        'border-color': '#bdbdbd',\n      };\n    }\n\n    const backgroundColor = this.buttonConfig.backgroundColor || 'transparent';\n\n    const borderColor =\n      this.buttonConfig.borderColor ||\n      this.buttonConfig.backgroundColor ||\n      'transparent';\n\n    return {\n      ...baseStyle,\n      color: this.buttonConfig.fontColor || '#ffffff',\n      background: backgroundColor,\n      'background-color': backgroundColor,\n      'border-color': borderColor,\n    };\n  }\n\n  private getButtonElement(): HTMLElement | null {\n    return (\n      this.el.nativeElement.querySelector('button.p-button') ||\n      this.el.nativeElement.querySelector('button.p-element') ||\n      this.el.nativeElement.querySelector('.p-button') ||\n      this.el.nativeElement.querySelector('button')\n    );\n  }\n\n  private updateDisabledStyles(isDisabled: boolean): void {\n    const buttonElement = this.getButtonElement();\n\n    if (!buttonElement || !this.buttonConfig) {\n      return;\n    }\n\n    if (!this.hasCustomColors()) {\n      return;\n    }\n\n    this.renderer.setStyle(\n      buttonElement,\n      'color',\n      isDisabled ? '#999' : this.buttonConfig.fontColor || '#ffffff',\n    );\n\n    this.renderer.setStyle(\n      buttonElement,\n      'background',\n      isDisabled\n        ? '#e0e0e0'\n        : this.buttonConfig.backgroundColor || 'transparent',\n    );\n\n    this.renderer.setStyle(\n      buttonElement,\n      'background-color',\n      isDisabled\n        ? '#e0e0e0'\n        : this.buttonConfig.backgroundColor || 'transparent',\n    );\n\n    this.renderer.setStyle(\n      buttonElement,\n      'border-color',\n      isDisabled\n        ? '#bdbdbd'\n        : this.buttonConfig.borderColor ||\n            this.buttonConfig.backgroundColor ||\n            'transparent',\n    );\n  }\n\n  /**\n   * We delegate colors to PrimeNG theme when no manual color is provided.\n   */\n  private shouldUseThemeColors(): boolean {\n    return !this.hasCustomColors();\n  }\n\n  applyButtonStyles(): void {\n    const buttonElement = this.getButtonElement();\n\n    if (!buttonElement || !this.buttonConfig) {\n      return;\n    }\n\n    const isDisabled = !!this.buttonConfig.disabled;\n    const useThemeColors = this.shouldUseThemeColors();\n\n    // Width / height always applied\n    this.renderer.setStyle(\n      buttonElement,\n      'width',\n      this.buttonConfig.width || 'auto',\n    );\n\n    this.renderer.setStyle(\n      buttonElement,\n      'height',\n      this.buttonConfig.height || 'auto',\n    );\n\n    // Only override colors when custom colors are provided\n    if (!useThemeColors) {\n      this.renderer.setStyle(\n        buttonElement,\n        'color',\n        isDisabled ? '#999' : this.buttonConfig.fontColor || '#ffffff',\n      );\n\n      this.renderer.setStyle(\n        buttonElement,\n        'background',\n        isDisabled\n          ? '#e0e0e0'\n          : this.buttonConfig.backgroundColor || 'transparent',\n      );\n\n      this.renderer.setStyle(\n        buttonElement,\n        'background-color',\n        isDisabled\n          ? '#e0e0e0'\n          : this.buttonConfig.backgroundColor || 'transparent',\n      );\n\n      this.renderer.setStyle(\n        buttonElement,\n        'border-color',\n        isDisabled\n          ? '#bdbdbd'\n          : this.buttonConfig.borderColor ||\n              this.buttonConfig.backgroundColor ||\n              'transparent',\n      );\n    } else {\n      // If we delegate to theme, clear any inline overrides\n      this.renderer.removeStyle(buttonElement, 'color');\n      this.renderer.removeStyle(buttonElement, 'background');\n      this.renderer.removeStyle(buttonElement, 'background-color');\n      this.renderer.removeStyle(buttonElement, 'border-color');\n    }\n  }\n}\n","<p-button\n  [label]=\"buttonConfig.label\"\n  [icon]=\"buttonConfig.icon || ''\"\n  [iconPos]=\"getIconPos()\"\n  [disabled]=\"buttonConfig.disabled\"\n  [loading]=\"buttonConfig.loading\"\n  [styleClass]=\"getStyleClass()\"\n  [style]=\"getButtonStyle()\"\n  [type]=\"getType()\"\n  [severity]=\"getSeverity()\"\n  [outlined]=\"buttonConfig.outlined\"\n></p-button>\n","import { NgModule } from '@angular/core';\nimport { CommonModule } from '@angular/common';\nimport { PTButtonComponent } from './pt-button.component';\nimport { ButtonModule } from 'primeng/button';\n\n@NgModule({\n  declarations: [PTButtonComponent],\n  imports: [CommonModule, ButtonModule],\n  exports: [PTButtonComponent],\n})\nexport class PTButtonModule {}\n","import { NgModule } from '@angular/core';\nimport { CommonModule } from '@angular/common';\nimport { FormsModule } from '@angular/forms';\n\nimport { ButtonModule } from 'primeng/button';\nimport { DatePickerModule } from 'primeng/datepicker';\nimport { InputTextModule } from 'primeng/inputtext';\nimport { MultiSelectModule } from 'primeng/multiselect';\nimport { TableModule } from 'primeng/table';\nimport { TagModule } from 'primeng/tag';\nimport { IconFieldModule } from 'primeng/iconfield';\nimport { InputIconModule } from 'primeng/inputicon';\nimport { ProgressSpinnerModule } from 'primeng/progressspinner';\nimport { TooltipModule } from 'primeng/tooltip';\nimport { ProgressBarModule } from 'primeng/progressbar';\n\nimport { PTAdvancedPrimeTableComponent } from './pt-advanced-prime-table.component';\nimport { CustomCurrencyPipe } from '../pipes/custom-currency';\nimport { CustomDatePipe } from '../pipes/custom-date.pipe';\nimport { PTMultiSelectModule } from '../pt-multi-select';\nimport { PTButtonModule } from '../pt-button';\n\n@NgModule({\n  declarations: [PTAdvancedPrimeTableComponent, CustomDatePipe],\n  imports: [\n    CommonModule,\n    FormsModule,\n\n    TableModule,\n    InputTextModule,\n    ButtonModule,\n    DatePickerModule,\n    MultiSelectModule,\n    TagModule,\n    IconFieldModule,\n    InputIconModule,\n    ProgressSpinnerModule,\n    TooltipModule,\n    ProgressBarModule,\n\n    CustomCurrencyPipe,\n\n    PTMultiSelectModule,\n    PTButtonModule,\n  ],\n  exports: [PTAdvancedPrimeTableComponent],\n})\nexport class PTAdvancedPrimeTableModule {}\n","import { Injectable } from '@angular/core';\n\n@Injectable({\n  providedIn: 'root',\n})\nexport class DateUtilityService {\n  // Converts a date string (dd/mm/yyyy) to a Date object\n  convertToDate(dateString: string): Date | null {\n    if (dateString) {\n      const parts = dateString.split('/');\n      if (parts.length === 3) {\n        const day = parseInt(parts[0], 10);\n        const month = parseInt(parts[1], 10) - 1; // Month is 0-based\n        const year = parseInt(parts[2], 10);\n        const date = new Date(year, month, day);\n        return isNaN(date.getTime()) ? null : date;\n      }\n    }\n    return null;\n  }\n\n  // Method to transform the data based on column type\n  transformDateFields(data: any[], columns: any[]): any[] {\n    return data.map((item) => {\n      const transformedItem = { ...item };\n\n      columns.forEach((col) => {\n        if (\n          col.code &&\n          col.type === 'DATE' && // Make sure it's a date column\n          transformedItem[col.code]\n        ) {\n          transformedItem[col.code] =\n            this.convertToDate(transformedItem[col.code] as string) ||\n            transformedItem[col.code];\n        }\n      });\n\n      return transformedItem;\n    });\n  }\n}\n","export enum TableTypeEnum {\n  DATE = 'DATE',\n  DATETIME = 'DATETIME',\n  STRING = 'STRING',\n  AMOUNT = 'AMOUNT',\n  NUMBER = 'NUMBER',\n  MULTISELECT = 'MULTISELECT',\n  CURRENCY = 'CURRENCY',\n  BOOLEAN = 'BOOLEAN',\n  ACTION = 'ACTION',\n  COMPOSED = 'COMPOSED',\n  IMAGE = 'IMAGE',\n  TAG = 'TAG',\n  PROGRESS = 'PROGRESS',\n}\n","export enum SearchCriteriaTypeEnum {\n  DATE = 'DATE',\n  DATERANGE = 'DATERANGE',\n  STRING = 'STRING',\n  AMOUNT = 'AMOUNT',\n  NUMBER = 'NUMBER',\n  MULTISELECT = 'MULTISELECT',\n}\n","export enum FormInputTypeEnum {\n  DATE = 'DATE',\n  TEXT = 'TEXT',\n  EMAIL = 'EMAIL',\n  TEXTAREA = 'TEXTAREA',\n  AMOUNT = 'AMOUNT',\n  NUMBER = 'NUMBER',\n  MULTISELECT = 'MULTISELECT',\n  SELECT = 'SELECT',\n  CURRENCY = 'CURRENCY',\n  CHECKBOX = 'CHECKBOX',\n  SWITCH = 'SWITCH',\n  PASSWORD = 'PASSWORD',\n  OTP = 'OTP',\n}\n","export enum ButtonColorEnum {\n  PRIMARY = 'p-button-primary',\n  SECONDARY = 'p-button-secondary',\n  SUCCESS = 'p-button-success',\n  INFO = 'p-button-info',\n  WARNING = 'p-button-warning',\n  DANGER = 'p-button-danger',\n}\n","export enum InputValidationEnum {\n  ONLY_LETTERS = '^[A-Za-z ]+$',\n  ONLY_NUMBERS = '^[0-9]+$',\n  LETTERS_AND_NUMBERS = '^[A-Za-z0-9 ]+$',\n  PHONE_NUMBER = '^[0-9 ]+$',\n  EMAIL = '^[a-zA-Z0-9._%+-]+@[a-zA-Z0-9.-]+\\\\.[A-Za-z]{2,}$',\n}\n","export enum BadgeType {\n  Info = 'info',\n  Danger = 'danger',\n  Warning = 'warning',\n}\n\nexport const BadgeTypeStyles = {\n  [BadgeType.Info]: {\n    color: 'white',\n    backgroundColor: '#17a2b8', // Info blue\n  },\n  [BadgeType.Danger]: {\n    color: 'white',\n    backgroundColor: '#dc3545', // Danger red\n  },\n  [BadgeType.Warning]: {\n    color: 'white',\n    backgroundColor: '#ffc107', // Warning yellow\n  },\n};\n","export enum SeverityEnum {\n  SUCCESS = 'success',\n  SECONDARY = 'secondary',\n  INFO = 'info',\n  WARN = 'warn',\n  WARNING = 'warn',\n  DANGER = 'danger',\n  CONTRAST = 'contrast',\n  HELP = 'help',\n  PRIMARY = 'primary',\n}\n","// projects/ng-prime-tools/src/lib/enums/align.enum.ts\nexport enum AlignEnum {\n  LEFT = 'left',\n  CENTER = 'center',\n  RIGHT = 'right',\n}\n","// projects/ng-prime-tools/src/lib/enums/public_api.ts\nexport * from './table-type.enum';\nexport * from './search-criteria-type.enum';\nexport * from './form-input-type.enum';\nexport * from './button-color.enum';\nexport * from './input-validation.enum';\nexport * from './badge-type.enum';\nexport * from './severity.enum';\nexport * from './align.enum';\n","import { Component, Input, Output, EventEmitter, OnInit } from '@angular/core';\nimport { SearchCriteriaTypeEnum } from '../enums';\nimport { SearchCriteria } from '../models/search-criteria.model';\nimport { FilterOption } from '../models/filter-option.model';\n\n@Component({\n    selector: 'multi-search-criteria',\n    templateUrl: './multi-search-criteria.component.html',\n    styleUrls: ['./multi-search-criteria.component.css'],\n    standalone: false\n})\nexport class MultiSearchCriteriaComponent implements OnInit {\n  SearchCriteriaTypeEnum = SearchCriteriaTypeEnum;\n\n  @Input() title: String = '';\n  @Input() criteria: SearchCriteria[] = [];\n  @Input() inputsPerRow: number = 3;\n  @Input() data: any[] = [];\n  @Input() mode: 'static' | 'dynamic' = 'static'; // Add mode input\n  @Output() filteredData = new EventEmitter<any[]>();\n  @Output() searchCriteria = new EventEmitter<{ [key: string]: any }>();\n\n  selectAll: boolean = false;\n  selected: FilterOption[] = [];\n\n  ngOnInit() {\n    this.criteria.forEach((item) => {\n      if (\n        item.type === SearchCriteriaTypeEnum.MULTISELECT &&\n        item.filterOptions\n      ) {\n        this.selected = [...item.filterOptions];\n        item.value = this.selected;\n      }\n    });\n  }\n\n  getCurrencySymbol(input: SearchCriteria): string {\n    return input.currency || 'EUR';\n  }\n\n  getMinFractionDigits(input: SearchCriteria): number {\n    return input.minFractionDigits ?? 0;\n  }\n\n  getMaxFractionDigits(input: SearchCriteria): number | undefined {\n    return input.maxFractionDigits ?? undefined;\n  }\n\n  getStepValue(input: SearchCriteria): number {\n    return input.maxFractionDigits\n      ? parseFloat(`0.${'1'.padEnd(input.maxFractionDigits, '0')}`)\n      : 0.0000000001;\n  }\n\n  search(): void {\n    if (this.mode === 'dynamic') {\n      const criteriaValues: { [key: string]: any } = {};\n      this.criteria.forEach((criterion) => {\n        if (criterion.value !== null && criterion.value !== undefined) {\n          criteriaValues[criterion.code] = criterion.value;\n        }\n      });\n      this.searchCriteria.emit(criteriaValues);\n    } else {\n      const filtered = this.data.filter((item) => {\n        return this.criteria.every((criterion) => {\n          if (criterion.type === SearchCriteriaTypeEnum.DATERANGE) {\n            const [startDate, endDate] = criterion.value || [\n              undefined,\n              undefined,\n            ];\n            const itemDate = this.parseDate(\n              item[criterion.code] || item['date']\n            );\n            if (!startDate && !endDate) {\n              return true;\n            }\n            if (itemDate === null) {\n              return false;\n            }\n            const parsedStartDate = startDate\n              ? this.parseDate(startDate)\n              : null;\n            const parsedEndDate = endDate ? this.parseDate(endDate) : null;\n            return (\n              (!parsedStartDate || itemDate >= parsedStartDate) &&\n              (!parsedEndDate || itemDate <= parsedEndDate)\n            );\n          } else if (\n            criterion.type === SearchCriteriaTypeEnum.AMOUNT ||\n            criterion.type === SearchCriteriaTypeEnum.NUMBER\n          ) {\n            return (\n              !criterion.value ||\n              Number(item[criterion.code]) === Number(criterion.value)\n            );\n          } else if (criterion.type === SearchCriteriaTypeEnum.MULTISELECT) {\n            return (\n              !criterion.value ||\n              criterion.value.some(\n                (option: FilterOption) => option.label === item[criterion.code]\n              )\n            );\n          } else if (criterion.type === SearchCriteriaTypeEnum.STRING) {\n            return (\n              !criterion.value ||\n              item[criterion.code]\n                .toString()\n                .toLowerCase()\n                .includes(criterion.value.toString().toLowerCase())\n            );\n          }\n          return true;\n        });\n      });\n      this.filteredData.emit(filtered);\n    }\n  }\n\n  clear(): void {\n    this.criteria.forEach((input) => {\n      input.value = null;\n    });\n    this.filteredData.emit(this.data);\n  }\n\n  onSelectAllChange(event: any, criterion: SearchCriteria) {\n    this.selectAll = event.checked;\n    criterion.value = event.checked ? [...(criterion.filterOptions ?? [])] : [];\n  }\n\n  private parseDate(dateString: string | Date | null | undefined): Date | null {\n    if (!dateString) {\n      return null;\n    }\n\n    if (Object.prototype.toString.call(dateString) === '[object Date]') {\n      return dateString as Date;\n    }\n\n    const parts = (dateString as string).split('/');\n    if (parts.length === 3) {\n      const day = parseInt(parts[0], 10);\n      const month = parseInt(parts[1], 10) - 1;\n      const year = parseInt(parts[2], 10);\n      const date = new Date(year, month, day);\n      return isNaN(date.getTime()) ? null : date;\n    }\n    return null;\n  }\n  getDecimalSeparator(input: SearchCriteria): string {\n    return input.decimalSeparator === 'comma' ? 'fr-FR' : 'en-US';\n  }\n}\n","<p-panel\n  header=\"{{ title }}\"\n  [toggleable]=\"true\"\n  [collapsed]=\"true\"\n  class=\"multi-search-criteria\"\n>\n  <div\n    class=\"criteria-container\"\n    [ngStyle]=\"{ 'grid-template-columns': 'repeat(' + inputsPerRow + ', 1fr)' }\"\n  >\n    @for (input of criteria; track input.title) {\n      <div class=\"criteria-item\">\n        <label class=\"bsc-label\">{{ input.title }}</label>\n\n        @switch (input.type) {\n          @case (SearchCriteriaTypeEnum.DATERANGE) {\n            <p-datepicker\n              [(ngModel)]=\"input.value\"\n              selectionMode=\"range\"\n              [dateFormat]=\"'dd/mm/yy'\"\n              class=\"full-width-input\"\n              [showIcon]=\"true\"\n              (ngModelChange)=\"input.value = $event\"\n            ></p-datepicker>\n          }\n\n          @case (SearchCriteriaTypeEnum.DATE) {\n            <p-datepicker\n              [ngModel]=\"input.value\"\n              (ngModelChange)=\"input.value = $event\"\n              [dateFormat]=\"'dd/mm/yy'\"\n              [showIcon]=\"true\"\n              class=\"full-width-input\"\n            ></p-datepicker>\n          }\n\n          @case (SearchCriteriaTypeEnum.STRING) {\n            <input\n              type=\"text\"\n              pInputText\n              [(ngModel)]=\"input.value\"\n              class=\"full-width-input\"\n            />\n          }\n\n          @case (SearchCriteriaTypeEnum.AMOUNT) {\n            <p-inputNumber\n              type=\"number\"\n              [(ngModel)]=\"input.value\"\n              mode=\"decimal\"\n              [minFractionDigits]=\"getMinFractionDigits(input)\"\n              [maxFractionDigits]=\"getMaxFractionDigits(input)\"\n              [step]=\"getStepValue(input)\"\n              [placeholder]=\"getCurrencySymbol(input)\"\n              [locale]=\"getDecimalSeparator(input)\"\n              class=\"full-width-input\"\n            ></p-inputNumber>\n          }\n\n          @case (SearchCriteriaTypeEnum.NUMBER) {\n            <p-inputNumber\n              [(ngModel)]=\"input.value\"\n              mode=\"decimal\"\n              [minFractionDigits]=\"getMinFractionDigits(input)\"\n              [maxFractionDigits]=\"getMaxFractionDigits(input)\"\n              [step]=\"getStepValue(input)\"\n              [useGrouping]=\"false\"\n              [locale]=\"getDecimalSeparator(input)\"\n              class=\"full-width-input\"\n            ></p-inputNumber>\n          }\n\n          @case (SearchCriteriaTypeEnum.MULTISELECT) {\n            <p-multiSelect\n              [options]=\"input.filterOptions\"\n              [display]=\"'chip'\"\n              placeholder=\"Select\"\n              [selectAll]=\"selectAll\"\n              [(ngModel)]=\"input.value\"\n              optionLabel=\"label\"\n              (onSelectAllChange)=\"onSelectAllChange($event, input)\"\n              class=\"custom-multiselect full-width-input\"\n            ></p-multiSelect>\n          }\n        }\n      </div>\n    }\n  </div>\n\n  <ng-template pTemplate=\"footer\">\n    <div class=\"footer-buttons\">\n      <p-button\n        label=\"Effacer\"\n        icon=\"pi pi-times\"\n        (click)=\"clear()\"\n        class=\"footer-button\"\n      ></p-button>\n\n      <p-button\n        label=\"Rechercher\"\n        icon=\"pi pi-search\"\n        (click)=\"search()\"\n        class=\"footer-button\"\n      ></p-button>\n    </div>\n  </ng-template>\n</p-panel>\n","// projects/ng-prime-tools/src/lib/multi-search-criteria/multi-search-criteria.module.ts\n\nimport { NgModule } from '@angular/core';\nimport { CommonModule } from '@angular/common';\nimport { FormsModule } from '@angular/forms';\n\nimport { ButtonModule } from 'primeng/button';\nimport { DatePickerModule } from 'primeng/datepicker';\nimport { InputTextModule } from 'primeng/inputtext';\nimport { MultiSelectModule } from 'primeng/multiselect';\nimport { InputNumberModule } from 'primeng/inputnumber';\nimport { PanelModule } from 'primeng/panel';\n\nimport { MultiSearchCriteriaComponent } from './multi-search-criteria.component';\n\n@NgModule({\n  declarations: [MultiSearchCriteriaComponent],\n  imports: [\n    CommonModule,\n    DatePickerModule,\n    InputTextModule,\n    MultiSelectModule,\n    ButtonModule,\n    FormsModule,\n    InputNumberModule,\n    PanelModule,\n  ],\n  exports: [MultiSearchCriteriaComponent],\n})\nexport class MultiSearchCriteriaModule {}\n","import { Component, Input, OnInit } from '@angular/core';\nimport {\n  FormGroup,\n  FormControl,\n  ValidatorFn,\n  AbstractControl,\n} from '@angular/forms';\nimport { FormCheckBoxField } from '../models/form-check-field.model';\n\n@Component({\n    selector: 'pt-check-box-input',\n    templateUrl: './pt-check-box-input.component.html',\n    styleUrls: ['./pt-check-box-input.component.css'],\n    standalone: false\n})\nexport class PTCheckBoxInputComponent implements OnInit {\n  @Input() formGroup!: FormGroup;\n  @Input() formField!: FormCheckBoxField;\n\n  ngOnInit(): void {\n    this.setupControl();\n  }\n\n  get inputId(): string {\n    return `pt-checkbox-${this.formField?.name || 'field'}`;\n  }\n\n  setupControl(): void {\n    let control = this.formGroup.get(this.formField.name) as FormControl | null;\n\n    if (!control) {\n      control = new FormControl(null);\n      this.formGroup.addControl(this.formField.name, control);\n    }\n\n    const validators = this.getValidators();\n    control.setValidators(validators);\n\n    if (this.formField.disabled) {\n      control.disable({ emitEvent: false });\n    } else {\n      control.enable({ emitEvent: false });\n    }\n\n    control.updateValueAndValidity({ emitEvent: false });\n  }\n\n  private getValidators(): ValidatorFn[] {\n    const validators: ValidatorFn[] = [];\n\n    if (this.formField.required) {\n      validators.push(this.requireChoiceValidator());\n    }\n\n    return validators;\n  }\n\n  private requireChoiceValidator(): ValidatorFn {\n    return (control: AbstractControl): { [key: string]: any } | null => {\n      return control.value !== null && control.value !== undefined\n        ? null\n        : { requiredChoice: true };\n    };\n  }\n\n  getErrorMessage(): string {\n    const control = this.formGroup.get(this.formField.name);\n\n    if (control?.errors?.['requiredChoice']) {\n      return this.formField.errorText || `${this.formField.label} is required`;\n    }\n\n    return '';\n  }\n}\n","@if (!formField.hidden) {\n  <div\n    [formGroup]=\"formGroup\"\n    class=\"form-field\"\n    [ngStyle]=\"{ width: formField.width || '100%' }\"\n  >\n    <div class=\"checkbox-container\">\n      <p-checkbox\n        [inputId]=\"inputId\"\n        [name]=\"formField.name\"\n        [formControlName]=\"formField.name\"\n        [binary]=\"true\"\n      ></p-checkbox>\n\n      @if (formField.label) {\n        <label [for]=\"inputId\" class=\"checkbox-label\">\n          {{ formField.label }}\n        </label>\n      }\n    </div>\n\n    @if (\n      formGroup.get(formField.name)?.errors &&\n      (formGroup.get(formField.name)?.touched ||\n        formGroup.get(formField.name)?.dirty)\n    ) {\n      <div class=\"error-container\">\n        <small class=\"p-error\">{{ getErrorMessage() }}</small>\n      </div>\n    }\n  </div>\n}\n","// date.util.ts\n\nimport { DateFormatType } from '../types/date-format.type';\nimport { DateInputType } from '../types/date-input.type';\n\nexport function getDefaultDateFormat(\n  dateInputType: DateInputType\n): DateFormatType {\n  switch (dateInputType) {\n    case 'time':\n      return 'HH:mm';\n    case 'datetime':\n      return 'dd/mm/yy';\n    case 'date':\n    default:\n      return 'dd/mm/yy';\n  }\n}\n\nexport function getDefaultPlaceholder(dateInputType: DateInputType): string {\n  switch (dateInputType) {\n    case 'time':\n      return 'Select time';\n    case 'datetime':\n      return 'Select date and time';\n    case 'date':\n    default:\n      return 'Select date';\n  }\n}\n\nexport function parseDate(dateString: string, format: DateFormatType): Date {\n  const parts = dateString.match(/\\d+/g);\n  if (!parts || parts.length < 2)\n    throw new Error(`Invalid date string: ${dateString}`);\n\n  let day, month, year, hour, minute, second;\n  switch (format) {\n    case 'dd/mm/yy':\n    case 'dd-mm-yy':\n    case 'dd.mm.yy':\n      [day, month, year] = parts;\n      break;\n    case 'mm/dd/yy':\n      [month, day, year] = parts;\n      break;\n    case 'yy/mm/dd':\n      [year, month, day] = parts;\n      break;\n    case 'HH:mm':\n      [hour, minute] = parts;\n      return new Date(0, 0, 0, Number(hour), Number(minute));\n    case 'HH:mm:ss':\n      [hour, minute, second] = parts;\n      return new Date(0, 0, 0, Number(hour), Number(minute), Number(second));\n    default:\n      throw new Error(`Unsupported date format: ${format}`);\n  }\n\n  year = year.length === 2 ? `20${year}` : year;\n  return new Date(\n    Number(year),\n    Number(month) - 1,\n    Number(day),\n    Number(hour || 0),\n    Number(minute || 0),\n    Number(second || 0)\n  );\n}\n\nexport function validateTimeValue(\n  value: string,\n  dateFormat: DateFormatType,\n  valueType: 'minValue' | 'maxValue',\n  hourFormat: '12' | '24'\n): void {\n  const timeFormat = dateFormat.includes('ss') ? 'HH:mm:ss' : 'HH:mm';\n  const timeParts = value.match(/\\d+/g);\n\n  if (!timeParts || timeParts.length !== (timeFormat === 'HH:mm:ss' ? 3 : 2)) {\n    throw new Error(\n      `Invalid ${valueType} \"${value}\" for time format \"${timeFormat}\".`\n    );\n  }\n\n  const [hour, minute, second] = timeParts.map(Number);\n  const maxHour = hourFormat === '12' ? 12 : 23;\n  if (\n    hour < 0 ||\n    hour > maxHour ||\n    minute < 0 ||\n    minute > 59 ||\n    (second !== undefined && (second < 0 || second > 59))\n  ) {\n    throw new Error(\n      `Invalid ${valueType} \"${value}\". Time must be between 00:00 and ${maxHour}:59.`\n    );\n  }\n}\n","// pt-date.service.ts\nimport { Injectable } from '@angular/core';\nimport { DateFormatType } from '../types/date-format.type';\nimport { DateInputType } from '../types/date-input.type';\nimport { getDefaultDateFormat, validateTimeValue } from '../utils/date.util';\n\n@Injectable({\n  providedIn: 'root',\n})\nexport class PTDateService {\n  constructor() {}\n\n  // Assign default date format based on input type\n  assignDefaultDateFormat(\n    dateInputType: DateInputType,\n    currentFormat?: DateFormatType\n  ): DateFormatType {\n    return currentFormat || getDefaultDateFormat(dateInputType);\n  }\n\n  // Validate date format and input type compatibility\n  validateDateFormatAndType(\n    dateFormat: DateFormatType,\n    dateInputType: DateInputType,\n    minValue?: string,\n    maxValue?: string,\n    hourFormat: '12' | '24' = '24'\n  ): void {\n    const dateOnlyFormats: DateFormatType[] = [\n      'dd/mm/yy',\n      'dd-mm-yy',\n      'dd.mm.yy',\n      'mm/dd/yy',\n      'yy/mm/dd',\n    ];\n\n    const timeOnlyFormats: DateFormatType[] = ['HH:mm', 'HH:mm:ss'];\n\n    const dateTimeFormats: DateFormatType[] = dateOnlyFormats;\n\n    switch (dateInputType) {\n      case 'date':\n        if (!dateOnlyFormats.includes(dateFormat)) {\n          throw new Error(\n            `Invalid dateFormat \"${dateFormat}\" for dateInputType \"date\".`\n          );\n        }\n        break;\n      case 'time':\n        if (!timeOnlyFormats.includes(dateFormat)) {\n          throw new Error(\n            `Invalid dateFormat \"${dateFormat}\" for dateInputType \"time\".`\n          );\n        }\n        if (minValue) {\n          validateTimeValue(minValue, dateFormat, 'minValue', hourFormat);\n        }\n        if (maxValue) {\n          validateTimeValue(maxValue, dateFormat, 'maxValue', hourFormat);\n        }\n        break;\n      case 'datetime':\n        if (!dateTimeFormats.includes(dateFormat)) {\n          throw new Error(\n            `Invalid dateFormat \"${dateFormat}\" for dateInputType \"datetime\".`\n          );\n        }\n        break;\n      case 'range':\n        if (!dateOnlyFormats.includes(dateFormat)) {\n          throw new Error(\n            `Invalid dateFormat \"${dateFormat}\" for dateInputType \"range\".`\n          );\n        }\n        break;\n      default:\n        throw new Error(`Unsupported dateInputType: ${dateInputType}`);\n    }\n  }\n}\n","import {\n  Component,\n  EventEmitter,\n  Input,\n  OnChanges,\n  OnDestroy,\n  OnInit,\n  Output,\n  SimpleChanges,\n} from '@angular/core';\nimport {\n  FormControl,\n  FormGroup,\n  ValidatorFn,\n  Validators,\n} from '@angular/forms';\nimport { Subscription } from 'rxjs';\n\nimport { getDefaultPlaceholder, parseDate } from '../utils/date.util';\nimport { DateFormatType } from '../types/date-format.type';\nimport { DateInputType } from '../types/date-input.type';\nimport { PTDateService } from './pt-date.service';\nimport { FormDateField } from '../models/form-date-field.model';\nimport { PTDateInputConfig } from '../models/pt-date-input-config.model';\n\n@Component({\n  selector: 'pt-date-input',\n  templateUrl: './pt-date-input.component.html',\n  styleUrls: ['./pt-date-input.component.css'],\n  standalone: false,\n})\nexport class PTDateInputComponent implements OnInit, OnChanges, OnDestroy {\n  /**\n   * Form-builder / reactive-form usage.\n   */\n  @Input() formGroup?: FormGroup;\n  @Input() formField?: FormDateField;\n\n  /**\n   * Standalone usage.\n   */\n  @Input() config?: PTDateInputConfig;\n\n  /**\n   * Two-way standalone value.\n   */\n  @Input() value: Date | Date[] | string | null = null;\n  @Output() valueChange = new EventEmitter<Date | Date[] | string | null>();\n  @Output() dateChange = new EventEmitter<Date | Date[] | string | null>();\n\n  minDate: Date | null = null;\n  maxDate: Date | null = null;\n  defaultPlaceholder = 'Select date';\n  defaultDateFormat: DateFormatType = 'dd/mm/yy';\n\n  private standaloneFormGroup = new FormGroup({});\n  private valueChangesSubscription?: Subscription;\n\n  constructor(private dateService: PTDateService) {}\n\n  ngOnInit(): void {\n    this.initializeComponent();\n  }\n\n  ngOnChanges(changes: SimpleChanges): void {\n    if (\n      changes['formGroup'] ||\n      changes['formField'] ||\n      changes['config'] ||\n      changes['value']\n    ) {\n      this.initializeComponent();\n    }\n  }\n\n  ngOnDestroy(): void {\n    this.valueChangesSubscription?.unsubscribe();\n  }\n\n  get activeFormGroup(): FormGroup {\n    return this.formGroup || this.standaloneFormGroup;\n  }\n\n  get controlName(): string {\n    return this.formField?.name || this.config?.name || 'date';\n  }\n\n  get inputId(): string {\n    return `pt-date-${this.controlName}`;\n  }\n\n  get resolvedHidden(): boolean {\n    return this.formField?.hidden ?? this.config?.hidden ?? false;\n  }\n\n  get resolvedLabel(): string | undefined {\n    return this.formField?.label || this.config?.label;\n  }\n\n  get resolvedWidth(): string {\n    return this.formField?.width || this.config?.width || '100%';\n  }\n\n  get resolvedPlaceholder(): string {\n    return (\n      this.formField?.placeholder ||\n      this.config?.placeholder ||\n      this.defaultPlaceholder\n    );\n  }\n\n  get resolvedDateInputType(): DateInputType {\n    return (\n      (this.formField?.dateInputType as DateInputType) ||\n      this.config?.dateInputType ||\n      'date'\n    );\n  }\n\n  get resolvedDateFormat(): DateFormatType {\n    return (\n      (this.formField?.dateFormat as DateFormatType) ||\n      this.config?.dateFormat ||\n      this.defaultDateFormat\n    );\n  }\n\n  get resolvedHourFormat(): '12' | '24' {\n    return (\n      (this.formField?.hourFormat as '12' | '24') ||\n      this.config?.hourFormat ||\n      '24'\n    );\n  }\n\n  get resolvedRequired(): boolean {\n    return this.formField?.required ?? this.config?.required ?? false;\n  }\n\n  get resolvedDisabled(): boolean {\n    return this.formField?.disabled ?? this.config?.disabled ?? false;\n  }\n\n  get resolvedShowIcon(): boolean {\n    return this.config?.showIcon ?? true;\n  }\n\n  get resolvedMinValue(): string | undefined {\n    return this.formField?.minValue || this.config?.minValue;\n  }\n\n  get resolvedMaxValue(): string | undefined {\n    return this.formField?.maxValue || this.config?.maxValue;\n  }\n\n  get resolvedErrorText(): string | undefined {\n    return this.formField?.errorText || this.config?.errorText;\n  }\n\n  private initializeComponent(): void {\n    this.defaultDateFormat = this.dateService.assignDefaultDateFormat(\n      this.resolvedDateInputType,\n      this.formField?.dateFormat || this.config?.dateFormat,\n    );\n\n    this.setupControl();\n    this.initializeDateLimits();\n    this.validateConfiguration();\n\n    this.defaultPlaceholder = getDefaultPlaceholder(this.resolvedDateInputType);\n  }\n\n  private setupControl(): void {\n    const name = this.controlName;\n\n    if (!name) {\n      return;\n    }\n\n    let control = this.activeFormGroup.get(name) as FormControl | null;\n\n    if (!control) {\n      control = new FormControl(this.getInitialValue());\n      this.activeFormGroup.addControl(name, control);\n    }\n\n    if (\n      !this.formGroup &&\n      this.value !== undefined &&\n      control.value !== this.value\n    ) {\n      control.setValue(this.value, { emitEvent: false });\n    }\n\n    control.setValidators(this.getValidators());\n\n    if (this.resolvedDisabled) {\n      control.disable({ emitEvent: false });\n    } else {\n      control.enable({ emitEvent: false });\n    }\n\n    control.updateValueAndValidity({ emitEvent: false });\n\n    this.valueChangesSubscription?.unsubscribe();\n    this.valueChangesSubscription = control.valueChanges.subscribe(\n      (selectedValue) => {\n        this.valueChange.emit(selectedValue);\n        this.dateChange.emit(selectedValue);\n      },\n    );\n  }\n\n  private getInitialValue(): Date | Date[] | string | null {\n    if (this.formField?.value !== undefined) {\n      return this.formField.value;\n    }\n\n    if (this.value !== undefined && this.value !== null) {\n      return this.value;\n    }\n\n    return this.config?.value ?? null;\n  }\n\n  private initializeDateLimits(): void {\n    this.minDate = this.resolvedMinValue\n      ? parseDate(this.resolvedMinValue, this.resolvedDateFormat)\n      : null;\n\n    this.maxDate = this.resolvedMaxValue\n      ? parseDate(this.resolvedMaxValue, this.resolvedDateFormat)\n      : null;\n  }\n\n  private validateConfiguration(): void {\n    try {\n      this.dateService.validateDateFormatAndType(\n        this.resolvedDateFormat,\n        this.resolvedDateInputType,\n        this.resolvedMinValue,\n        this.resolvedMaxValue,\n        this.resolvedHourFormat,\n      );\n    } catch (error) {\n      if (error instanceof Error) {\n        console.error(error.message);\n      } else {\n        console.error('An unknown error occurred.');\n      }\n    }\n  }\n\n  private getValidators(): ValidatorFn[] {\n    const validators: ValidatorFn[] = [];\n\n    if (this.resolvedRequired) {\n      validators.push(Validators.required);\n    }\n\n    return validators;\n  }\n\n  getErrorMessage(): string {\n    const control = this.activeFormGroup.get(this.controlName);\n\n    if (control?.hasError('required')) {\n      return (\n        this.resolvedErrorText ||\n        `${this.resolvedLabel || this.controlName} is required`\n      );\n    }\n\n    return '';\n  }\n}\n","@if (!resolvedHidden) {\n  <div\n    [formGroup]=\"activeFormGroup\"\n    class=\"form-field\"\n    [ngStyle]=\"{ width: resolvedWidth }\"\n  >\n    @if (resolvedLabel) {\n      <label [for]=\"inputId\" class=\"field-label\">\n        {{ resolvedLabel }}\n      </label>\n    }\n\n    <p-datepicker\n      [inputId]=\"inputId\"\n      [name]=\"controlName\"\n      [formControlName]=\"controlName\"\n      [placeholder]=\"resolvedPlaceholder\"\n      [dateFormat]=\"resolvedDateFormat\"\n      [showIcon]=\"resolvedShowIcon\"\n      [minDate]=\"minDate\"\n      [maxDate]=\"maxDate\"\n      [showTime]=\"\n        resolvedDateInputType === 'datetime' || resolvedDateInputType === 'time'\n      \"\n      [timeOnly]=\"resolvedDateInputType === 'time'\"\n      [hourFormat]=\"resolvedHourFormat\"\n      [selectionMode]=\"resolvedDateInputType === 'range' ? 'range' : 'single'\"\n      appendTo=\"body\"\n      [panelStyle]=\"{ zIndex: 99999 }\"\n    ></p-datepicker>\n\n    @if (\n      activeFormGroup.get(controlName)?.invalid &&\n      (activeFormGroup.get(controlName)?.touched ||\n        activeFormGroup.get(controlName)?.dirty)\n    ) {\n      <div class=\"error-container\">\n        <small class=\"field-error\">{{ getErrorMessage() }}</small>\n      </div>\n    }\n  </div>\n}\n","import {\n  Component,\n  Input,\n  OnInit,\n  OnChanges,\n  SimpleChanges,\n} from '@angular/core';\nimport {\n  FormControl,\n  FormGroup,\n  ValidatorFn,\n  Validators,\n} from '@angular/forms';\nimport { InputValidationEnum } from '../enums/input-validation.enum';\nimport { FormNumberField } from '../models/form-number-field.model';\n\n@Component({\n    selector: 'pt-number-input',\n    templateUrl: './pt-number-input.component.html',\n    styleUrls: ['./pt-number-input.component.css'],\n    standalone: false\n})\nexport class PTNumberInputComponent implements OnInit, OnChanges {\n  @Input() formGroup!: FormGroup;\n  @Input() formField!: FormNumberField;\n\n  ngOnInit(): void {\n    this.setupControl();\n  }\n\n  ngOnChanges(changes: SimpleChanges): void {\n    if (changes['formField'] && !changes['formField'].firstChange) {\n      this.setupControl();\n    }\n  }\n\n  get inputId(): string {\n    return `pt-number-${this.formField?.name || 'field'}`;\n  }\n\n  private setupControl(): void {\n    const name = this.formField?.name;\n\n    if (!name || !this.formGroup) {\n      return;\n    }\n\n    let control = this.formGroup.get(name) as FormControl | null;\n\n    if (!control) {\n      control = new FormControl(this.formField?.value ?? null);\n      this.formGroup.addControl(name, control);\n    }\n\n    control.setValidators(this.getValidators());\n\n    if (this.formField?.disabled) {\n      control.disable({ emitEvent: false });\n    } else {\n      control.enable({ emitEvent: false });\n    }\n\n    control.updateValueAndValidity({ emitEvent: false });\n  }\n\n  private getValidators(): ValidatorFn[] {\n    const validators: ValidatorFn[] = [];\n\n    if (this.formField?.required) {\n      validators.push(Validators.required);\n    }\n\n    if (\n      this.formField?.minValue !== undefined &&\n      this.formField.minValue !== null\n    ) {\n      const minValue = Number(this.formField.minValue);\n      if (!Number.isNaN(minValue)) {\n        validators.push(Validators.min(minValue));\n      } else {\n        console.error(\n          `Invalid minValue: ${this.formField.minValue} is not a number.`,\n        );\n      }\n    }\n\n    if (\n      this.formField?.maxValue !== undefined &&\n      this.formField.maxValue !== null\n    ) {\n      const maxValue = Number(this.formField.maxValue);\n      if (!Number.isNaN(maxValue)) {\n        validators.push(Validators.max(maxValue));\n      } else {\n        console.error(\n          `Invalid maxValue: ${this.formField.maxValue} is not a number.`,\n        );\n      }\n    }\n\n    if (this.formField?.inputValidation) {\n      validators.push(\n        this.validateWithInputValidation(this.formField.inputValidation),\n      );\n    }\n\n    return validators;\n  }\n\n  private validateWithInputValidation(\n    inputValidation: InputValidationEnum,\n  ): ValidatorFn {\n    return Validators.pattern(new RegExp(inputValidation));\n  }\n\n  getErrorMessage(): string {\n    const control = this.formGroup.get(this.formField.name);\n\n    if (control?.hasError('required')) {\n      return this.formField.errorText || `${this.formField.label} is required`;\n    }\n\n    if (control?.hasError('min')) {\n      return `${this.formField.label} must be at least ${this.formField.minValue}`;\n    }\n\n    if (control?.hasError('max')) {\n      return `${this.formField.label} must be at most ${this.formField.maxValue}`;\n    }\n\n    if (control?.hasError('pattern')) {\n      return `${this.formField.label} is invalid`;\n    }\n\n    return '';\n  }\n}\n","@if (!formField.hidden) {\n  <div\n    [formGroup]=\"formGroup\"\n    class=\"form-field\"\n    [ngStyle]=\"{ width: formField.width || '100%' }\"\n  >\n    @if (formField.label) {\n      <label [for]=\"inputId\" class=\"field-label\">\n        {{ formField.label }}\n      </label>\n    }\n\n    <p-inputGroup>\n      @if (!formField.iconPosition || formField.iconPosition === \"left\") {\n        @if (formField.iconClass || formField.currency) {\n          <p-inputGroupAddon>\n            @if (formField.iconClass) {\n              <i [ngClass]=\"formField.iconClass\"></i>\n            }\n\n            @if (!formField.iconClass && formField.currency) {\n              <span>\n                {{ formField.currency }}\n              </span>\n            }\n          </p-inputGroupAddon>\n        }\n\n        <p-inputNumber\n          [inputId]=\"inputId\"\n          [name]=\"formField.name\"\n          [formControlName]=\"formField.name\"\n          mode=\"decimal\"\n          [locale]=\"formField.numberFormat || undefined\"\n          [useGrouping]=\"!!formField.numberFormat\"\n          [minFractionDigits]=\"formField.decimalDigits || 0\"\n          [maxFractionDigits]=\"formField.decimalDigits || 0\"\n          [placeholder]=\"formField.placeholder || ''\"\n        ></p-inputNumber>\n      }\n\n      @if (formField.iconPosition === \"right\") {\n        <p-inputNumber\n          [inputId]=\"inputId\"\n          [name]=\"formField.name\"\n          [formControlName]=\"formField.name\"\n          mode=\"decimal\"\n          [locale]=\"formField.numberFormat || undefined\"\n          [useGrouping]=\"!!formField.numberFormat\"\n          [minFractionDigits]=\"formField.decimalDigits || 0\"\n          [maxFractionDigits]=\"formField.decimalDigits || 0\"\n          [placeholder]=\"formField.placeholder || ''\"\n        ></p-inputNumber>\n\n        @if (formField.iconClass || formField.currency) {\n          <p-inputGroupAddon>\n            @if (formField.iconClass) {\n              <i [ngClass]=\"formField.iconClass\"></i>\n            }\n\n            @if (!formField.iconClass && formField.currency) {\n              <span>\n                {{ formField.currency }}\n              </span>\n            }\n          </p-inputGroupAddon>\n        }\n      }\n    </p-inputGroup>\n\n    @if (\n      formGroup.get(formField.name)?.invalid &&\n      (formGroup.get(formField.name)?.touched ||\n        formGroup.get(formField.name)?.dirty)\n    ) {\n      <div class=\"error-container\">\n        <small class=\"field-error\">{{ getErrorMessage() }}</small>\n      </div>\n    }\n  </div>\n}\n","import {\n  Component,\n  EventEmitter,\n  Input,\n  OnChanges,\n  OnDestroy,\n  OnInit,\n  Output,\n  SimpleChanges,\n} from '@angular/core';\n\nimport {\n  AbstractControl,\n  FormControl,\n  FormGroup,\n  ValidatorFn,\n} from '@angular/forms';\n\nimport { Subscription } from 'rxjs';\n\nimport { FormSwitchField } from '../models/form-switch-field.model';\nimport { PTSwitchConfig } from '../models/pt-switch-config.model';\n\n@Component({\n  selector: 'pt-switch-input',\n  templateUrl: './pt-switch-input.component.html',\n  styleUrls: ['./pt-switch-input.component.css'],\n  standalone: false,\n})\nexport class PTSwitchInputComponent implements OnInit, OnChanges, OnDestroy {\n  /**\n   * Form-builder / reactive-form usage.\n   */\n  @Input() formGroup?: FormGroup;\n  @Input() formField?: FormSwitchField;\n\n  /**\n   * Standalone usage.\n   */\n  @Input() config?: PTSwitchConfig;\n\n  /**\n   * Two-way standalone value.\n   */\n  @Input() value: boolean | null = null;\n  @Output() valueChange = new EventEmitter<boolean | null>();\n  @Output() switchChange = new EventEmitter<boolean | null>();\n\n  private readonly standaloneFormGroup = new FormGroup({});\n  private valueChangesSubscription?: Subscription;\n\n  ngOnInit(): void {\n    this.setupControl();\n  }\n\n  ngOnChanges(changes: SimpleChanges): void {\n    if (\n      changes['formGroup'] ||\n      changes['formField'] ||\n      changes['config'] ||\n      changes['value']\n    ) {\n      this.setupControl();\n    }\n  }\n\n  ngOnDestroy(): void {\n    this.valueChangesSubscription?.unsubscribe();\n  }\n\n  get activeFormGroup(): FormGroup {\n    return this.formGroup || this.standaloneFormGroup;\n  }\n\n  get controlName(): string {\n    return this.formField?.name || this.config?.name || 'switch';\n  }\n\n  get inputId(): string {\n    return `pt-switch-${this.controlName}`;\n  }\n\n  get labelId(): string {\n    return `pt-switch-label-${this.controlName}`;\n  }\n\n  get resolvedHidden(): boolean {\n    return this.formField?.hidden ?? this.config?.hidden ?? false;\n  }\n\n  get resolvedLabel(): string | undefined {\n    return this.formField?.label || this.config?.label;\n  }\n\n  get resolvedWidth(): string {\n    return this.formField?.width || this.config?.width || '100%';\n  }\n\n  get resolvedRequired(): boolean {\n    return this.formField?.required ?? this.config?.required ?? false;\n  }\n\n  get resolvedDisabled(): boolean {\n    return this.formField?.disabled ?? this.config?.disabled ?? false;\n  }\n\n  get resolvedErrorText(): string | undefined {\n    return this.formField?.errorText || this.config?.errorText;\n  }\n\n  private setupControl(): void {\n    const name = this.controlName;\n\n    if (!name) {\n      return;\n    }\n\n    const initialValue = this.getInitialValue();\n    const hasExplicitValue = this.hasExplicitFieldValue(initialValue);\n\n    let control = this.activeFormGroup.get(name) as FormControl | null;\n\n    if (!control) {\n      control = new FormControl(\n        hasExplicitValue ? initialValue : this.resolvedRequired ? null : false,\n      );\n\n      this.activeFormGroup.addControl(name, control);\n    } else if (!this.formGroup && this.hasExplicitFieldValue(this.value)) {\n      control.setValue(this.value, { emitEvent: false });\n    }\n\n    control.setValidators(this.getValidators());\n\n    if (this.resolvedDisabled) {\n      control.disable({ emitEvent: false });\n    } else {\n      control.enable({ emitEvent: false });\n    }\n\n    control.updateValueAndValidity({ emitEvent: false });\n\n    this.valueChangesSubscription?.unsubscribe();\n    this.valueChangesSubscription = control.valueChanges.subscribe(\n      (selectedValue: boolean | null) => {\n        this.valueChange.emit(selectedValue);\n        this.switchChange.emit(selectedValue);\n      },\n    );\n  }\n\n  private getInitialValue(): boolean | null {\n    if (this.formField?.value !== undefined) {\n      return this.formField.value as boolean | null;\n    }\n\n    if (this.value !== undefined && this.value !== null) {\n      return this.value;\n    }\n\n    return this.config?.value ?? null;\n  }\n\n  private hasExplicitFieldValue(value: boolean | null | undefined): boolean {\n    return value !== null && value !== undefined;\n  }\n\n  private getValidators(): ValidatorFn[] {\n    const validators: ValidatorFn[] = [];\n\n    if (this.resolvedRequired) {\n      validators.push(this.requireChoiceValidator());\n    }\n\n    return validators;\n  }\n\n  private requireChoiceValidator(): ValidatorFn {\n    return (control: AbstractControl): { [key: string]: any } | null => {\n      return control.value !== null && control.value !== undefined\n        ? null\n        : { requiredChoice: true };\n    };\n  }\n\n  getErrorMessage(): string {\n    const control = this.activeFormGroup.get(this.controlName);\n\n    if (control?.errors?.['requiredChoice']) {\n      return (\n        this.resolvedErrorText ||\n        `${this.resolvedLabel || this.controlName} is required`\n      );\n    }\n\n    return '';\n  }\n}\n","@if (!resolvedHidden) {\n  <div\n    [formGroup]=\"activeFormGroup\"\n    class=\"form-field\"\n    [ngStyle]=\"{ width: resolvedWidth }\"\n  >\n    <div class=\"switch-container\">\n      <p-toggleswitch\n        [inputId]=\"inputId\"\n        [formControlName]=\"controlName\"\n        [ariaLabelledBy]=\"labelId\"\n      ></p-toggleswitch>\n\n      @if (resolvedLabel) {\n        <label [id]=\"labelId\" [for]=\"inputId\" class=\"switch-label\">\n          {{ resolvedLabel }}\n        </label>\n      }\n    </div>\n\n    @if (\n      activeFormGroup.get(controlName)?.errors &&\n      (activeFormGroup.get(controlName)?.touched ||\n        activeFormGroup.get(controlName)?.dirty)\n    ) {\n      <div class=\"error-container\">\n        <small class=\"field-error\">{{ getErrorMessage() }}</small>\n      </div>\n    }\n  </div>\n}\n","import {\n  Component,\n  Input,\n  OnChanges,\n  OnInit,\n  SimpleChanges,\n} from '@angular/core';\nimport {\n  FormControl,\n  FormGroup,\n  ValidatorFn,\n  Validators,\n} from '@angular/forms';\nimport { InputValidationEnum } from '../enums/input-validation.enum';\nimport { FormTextAreaField } from '../models/form-text-area-field.model';\n\n@Component({\n    selector: 'pt-text-area-input',\n    templateUrl: './pt-text-area-input.component.html',\n    styleUrls: ['./pt-text-area-input.component.css'],\n    standalone: false\n})\nexport class PTTextAreaInputComponent implements OnInit, OnChanges {\n  @Input() formGroup!: FormGroup;\n  @Input() formField!: FormTextAreaField;\n\n  characterCount = 0;\n\n  ngOnInit(): void {\n    this.setupControl();\n    this.updateCharacterCount();\n  }\n\n  ngOnChanges(changes: SimpleChanges): void {\n    if (changes['formField'] && !changes['formField'].firstChange) {\n      this.setupControl();\n      this.updateCharacterCount();\n    }\n  }\n\n  get inputId(): string {\n    return `pt-textarea-${this.formField?.name || 'field'}`;\n  }\n\n  private setupControl(): void {\n    const name = this.formField?.name;\n\n    if (!name || !this.formGroup) {\n      return;\n    }\n\n    let control = this.formGroup.get(name) as FormControl | null;\n\n    if (!control) {\n      control = new FormControl(this.formField?.value ?? null);\n      this.formGroup.addControl(name, control);\n    }\n\n    control.setValidators(this.getValidators());\n\n    if (this.formField?.disabled) {\n      control.disable({ emitEvent: false });\n    } else {\n      control.enable({ emitEvent: false });\n    }\n\n    control.updateValueAndValidity({ emitEvent: false });\n\n    control.valueChanges.subscribe(() => {\n      this.updateCharacterCount();\n    });\n  }\n\n  private updateCharacterCount(): void {\n    const control = this.formGroup?.get(\n      this.formField?.name,\n    ) as FormControl | null;\n\n    if (!control) {\n      this.characterCount = 0;\n      return;\n    }\n\n    const value = control.value;\n    this.characterCount = value ? String(value).length : 0;\n  }\n\n  private getValidators(): ValidatorFn[] {\n    const validators: ValidatorFn[] = [];\n\n    if (this.formField?.required) {\n      validators.push(Validators.required);\n    }\n\n    if (this.formField?.minLength !== undefined) {\n      validators.push(Validators.minLength(this.formField.minLength));\n    }\n\n    if (this.formField?.maxLength !== undefined) {\n      validators.push(Validators.maxLength(this.formField.maxLength));\n    }\n\n    if (this.formField?.inputValidation) {\n      validators.push(\n        this.validateWithInputValidation(this.formField.inputValidation),\n      );\n    }\n\n    return validators;\n  }\n\n  private validateWithInputValidation(\n    inputValidation: InputValidationEnum,\n  ): ValidatorFn {\n    return Validators.pattern(new RegExp(inputValidation));\n  }\n\n  getErrorMessage(): string {\n    const control = this.formGroup.get(this.formField.name);\n\n    if (control?.hasError('required')) {\n      return this.formField.errorText || `${this.formField.label} is required`;\n    }\n\n    if (control?.hasError('minlength')) {\n      return `${this.formField.label} must be at least ${this.formField.minLength} characters long`;\n    }\n\n    if (control?.hasError('maxlength')) {\n      return `${this.formField.label} must be at most ${this.formField.maxLength} characters long`;\n    }\n\n    if (control?.hasError('pattern')) {\n      return `${this.formField.label} is invalid`;\n    }\n\n    return '';\n  }\n}\n","@if (!formField.hidden) {\n  <div\n    [formGroup]=\"formGroup\"\n    class=\"form-field\"\n    [ngStyle]=\"{ width: formField.width || '100%' }\"\n    >\n    @if (formField.label) {\n      <label [for]=\"inputId\">{{ formField.label }}</label>\n    }\n    <p-inputGroup>\n      @if (!formField.iconPosition || formField.iconPosition === 'left') {\n        @if (formField.iconClass) {\n          <p-inputGroupAddon>\n            <i [ngClass]=\"formField.iconClass\"></i>\n          </p-inputGroupAddon>\n        }\n        <textarea\n          [id]=\"inputId\"\n          pTextarea\n          [formControlName]=\"formField.name\"\n          [rows]=\"formField.rows || 5\"\n          [cols]=\"formField.cols || 30\"\n          [autoResize]=\"formField.autoResize || false\"\n          [attr.minlength]=\"formField.minLength\"\n          [attr.maxlength]=\"formField.maxLength\"\n          [placeholder]=\"formField.placeholder || ''\"\n        ></textarea>\n      }\n      @if (formField.iconPosition === 'right') {\n        <textarea\n          [id]=\"inputId\"\n          pTextarea\n          [formControlName]=\"formField.name\"\n          [rows]=\"formField.rows || 5\"\n          [cols]=\"formField.cols || 30\"\n          [autoResize]=\"formField.autoResize || false\"\n          [attr.minlength]=\"formField.minLength\"\n          [attr.maxlength]=\"formField.maxLength\"\n          [placeholder]=\"formField.placeholder || ''\"\n        ></textarea>\n        @if (formField.iconClass) {\n          <p-inputGroupAddon>\n            <i [ngClass]=\"formField.iconClass\"></i>\n          </p-inputGroupAddon>\n        }\n      }\n    </p-inputGroup>\n    <div class=\"form-info-row\">\n      @if (\n        formGroup.get(formField.name)?.invalid &&\n        (formGroup.get(formField.name)?.touched ||\n        formGroup.get(formField.name)?.dirty)\n        ) {\n        <small\n          class=\"p-error\"\n          >\n          {{ getErrorMessage() }}\n        </small>\n      }\n      <div class=\"spacer\"></div>\n      @if (!formField.disabled && formField.maxLength !== undefined) {\n        <div\n          class=\"character-counter\"\n          >\n          {{ characterCount }}/{{ formField.maxLength }} characters\n        </div>\n      }\n    </div>\n  </div>\n}\n","import { Component, Input, OnDestroy, OnInit } from '@angular/core';\nimport {\n  FormGroup,\n  Validators,\n  ValidatorFn,\n  FormControl,\n} from '@angular/forms';\nimport { Subscription } from 'rxjs';\n\nimport { InputValidationEnum } from '../enums/input-validation.enum';\nimport { FormTextField } from '../models/form-text-field.model';\nimport { FormInputTypeEnum } from '../enums/form-input-type.enum';\n\n@Component({\n  selector: 'pt-text-input',\n  templateUrl: './pt-text-input.component.html',\n  styleUrls: ['./pt-text-input.component.css'],\n  standalone: false,\n})\nexport class PTTextInputComponent implements OnInit, OnDestroy {\n  @Input() formGroup!: FormGroup;\n  @Input() formField!: FormTextField;\n\n  characterCount = 0;\n\n  private valueChangesSubscription?: Subscription;\n\n  ngOnInit(): void {\n    this.setupControl();\n    this.updateCharacterCount();\n  }\n\n  ngOnDestroy(): void {\n    this.valueChangesSubscription?.unsubscribe();\n  }\n\n  get inputId(): string {\n    return `pt-input-${this.formField?.name || 'field'}`;\n  }\n\n  setupControl(): void {\n    const control = this.formGroup.get(\n      this.formField.name,\n    ) as FormControl | null;\n\n    if (!control) {\n      return;\n    }\n\n    control.setValidators(this.getValidators());\n\n    this.valueChangesSubscription?.unsubscribe();\n\n    if (this.formField.disabled) {\n      control.disable({ emitEvent: false });\n    } else {\n      control.enable({ emitEvent: false });\n\n      this.valueChangesSubscription = control.valueChanges.subscribe(() => {\n        this.updateCharacterCount();\n      });\n    }\n\n    control.updateValueAndValidity({ emitEvent: false });\n  }\n\n  updateCharacterCount(): void {\n    const control = this.formGroup.get(\n      this.formField.name,\n    ) as FormControl | null;\n\n    if (!control) {\n      this.characterCount = 0;\n      return;\n    }\n\n    const value = control.value;\n    this.characterCount = value != null ? String(value).length : 0;\n  }\n\n  getInputType(): string {\n    switch (this.formField.type) {\n      case FormInputTypeEnum.PASSWORD:\n        return 'password';\n      case FormInputTypeEnum.NUMBER:\n        return 'number';\n      case FormInputTypeEnum.EMAIL:\n        return 'email';\n      default:\n        return 'text';\n    }\n  }\n\n  isPasswordInput(): boolean {\n    return this.formField.type === FormInputTypeEnum.PASSWORD;\n  }\n\n  getPasswordToggleMask(): boolean {\n    return this.formField.toggleMask ?? true;\n  }\n\n  getPasswordFeedback(): boolean {\n    return this.formField.feedback ?? false;\n  }\n\n  private getValidators(): ValidatorFn[] {\n    const validators: ValidatorFn[] = [];\n\n    if (this.formField.required) {\n      validators.push(Validators.required);\n    }\n\n    if (this.formField.minLength !== undefined) {\n      validators.push(Validators.minLength(this.formField.minLength));\n    }\n\n    if (this.formField.maxLength !== undefined) {\n      validators.push(Validators.maxLength(this.formField.maxLength));\n    }\n\n    if (this.formField.type === FormInputTypeEnum.EMAIL) {\n      validators.push(Validators.email);\n    }\n\n    if (this.formField.inputValidation) {\n      validators.push(\n        this.validateWithInputValidation(this.formField.inputValidation),\n      );\n    }\n\n    return validators;\n  }\n\n  private validateWithInputValidation(\n    inputValidation: InputValidationEnum,\n  ): ValidatorFn {\n    return Validators.pattern(new RegExp(inputValidation));\n  }\n\n  getErrorMessage(): string {\n    const control = this.formGroup.get(this.formField.name);\n\n    if (control?.hasError('required')) {\n      return `${this.formField.label} is required`;\n    }\n\n    if (control?.hasError('email')) {\n      return `${this.formField.label} is not a valid email`;\n    }\n\n    if (control?.hasError('minlength')) {\n      return `${this.formField.label} must be at least ${this.formField.minLength} characters`;\n    }\n\n    if (control?.hasError('maxlength')) {\n      return `${this.formField.label} must be at most ${this.formField.maxLength} characters`;\n    }\n\n    if (control?.hasError('pattern')) {\n      return `${this.formField.label} is invalid`;\n    }\n\n    return '';\n  }\n\n  hasError(): boolean {\n    const control = this.formGroup.get(this.formField.name);\n\n    return !!(control?.invalid && (control.touched || control.dirty));\n  }\n\n  hasCharacterCounter(): boolean {\n    return !this.formField.disabled && this.formField.maxLength !== undefined;\n  }\n\n  hasInfoRow(): boolean {\n    return this.hasError() || this.hasCharacterCounter();\n  }\n}\n","@if (!formField.hidden) {\n  <div\n    [formGroup]=\"formGroup\"\n    class=\"form-field\"\n    [ngStyle]=\"{\n      width: formField.width || '100%',\n      height: formField.height || 'auto',\n      margin: formField.margin || null,\n    }\"\n  >\n    @if (formField.label) {\n      <label [for]=\"inputId\" class=\"field-label\">\n        {{ formField.label }}\n      </label>\n    }\n\n    @if (formField.iconClass) {\n      <p-iconField [iconPosition]=\"formField.iconPosition || 'left'\">\n        <p-inputIcon [styleClass]=\"formField.iconClass\"></p-inputIcon>\n\n        @if (isPasswordInput()) {\n          <p-password\n            [inputId]=\"inputId\"\n            [formControlName]=\"formField.name\"\n            [placeholder]=\"formField.placeholder ?? ''\"\n            [toggleMask]=\"getPasswordToggleMask()\"\n            [feedback]=\"getPasswordFeedback()\"\n            [attr.name]=\"formField.name\"\n            [inputStyle]=\"{\n              width: formField.width || '100%',\n              height: formField.height || 'auto',\n            }\"\n            styleClass=\"pt-password-input\"\n          ></p-password>\n        } @else {\n          <input\n            [id]=\"inputId\"\n            [attr.name]=\"formField.name\"\n            [type]=\"getInputType()\"\n            pInputText\n            [formControlName]=\"formField.name\"\n            [placeholder]=\"formField.placeholder ?? ''\"\n            [attr.minlength]=\"formField.minLength\"\n            [attr.maxlength]=\"formField.maxLength\"\n            [ngStyle]=\"{\n              width: formField.width || '100%',\n              height: formField.height || 'auto',\n            }\"\n          />\n        }\n      </p-iconField>\n    } @else {\n      @if (isPasswordInput()) {\n        <p-password\n          [inputId]=\"inputId\"\n          [formControlName]=\"formField.name\"\n          [placeholder]=\"formField.placeholder ?? ''\"\n          [toggleMask]=\"getPasswordToggleMask()\"\n          [feedback]=\"getPasswordFeedback()\"\n          [attr.name]=\"formField.name\"\n          [inputStyle]=\"{\n            width: formField.width || '100%',\n            height: formField.height || 'auto',\n          }\"\n          styleClass=\"pt-password-input\"\n        ></p-password>\n      } @else {\n        <input\n          [id]=\"inputId\"\n          [attr.name]=\"formField.name\"\n          [type]=\"getInputType()\"\n          pInputText\n          [formControlName]=\"formField.name\"\n          [placeholder]=\"formField.placeholder ?? ''\"\n          [attr.minlength]=\"formField.minLength\"\n          [attr.maxlength]=\"formField.maxLength\"\n          [ngStyle]=\"{\n            width: formField.width || '100%',\n            height: formField.height || 'auto',\n          }\"\n        />\n      }\n    }\n\n    @if (hasInfoRow()) {\n      <div class=\"form-info-row\">\n        @if (hasError()) {\n          <small class=\"field-error\">\n            {{ getErrorMessage() }}\n          </small>\n        }\n\n        <div class=\"spacer\"></div>\n\n        @if (hasCharacterCounter()) {\n          <div class=\"character-counter\">\n            {{ characterCount }}/{{ formField.maxLength }} characters\n          </div>\n        }\n      </div>\n    }\n  </div>\n}\n","import {\n  Component,\n  EventEmitter,\n  Input,\n  OnChanges,\n  OnDestroy,\n  OnInit,\n  Output,\n  SimpleChanges,\n} from '@angular/core';\nimport {\n  FormControl,\n  FormGroup,\n  ValidatorFn,\n  Validators,\n} from '@angular/forms';\nimport { Subscription } from 'rxjs';\n\nimport { FormDropdownField } from '../models/form-drop-down-field.model';\nimport { IconStyle } from '../models/icon-style.model';\nimport { IconImageStyle } from '../models/icon-image-style.model';\nimport { PTDropdownConfig } from '../models/pt-dropdown-config.model';\n\n@Component({\n  selector: 'pt-dropdown',\n  templateUrl: './pt-dropdown.component.html',\n  styleUrls: ['./pt-dropdown.component.css'],\n  standalone: false,\n})\nexport class PTDropdownComponent implements OnInit, OnChanges, OnDestroy {\n  /**\n   * Form-builder / reactive-form usage.\n   */\n  @Input() formGroup?: FormGroup;\n  @Input() formField?: FormDropdownField;\n\n  /**\n   * Standalone usage.\n   */\n  @Input() config?: PTDropdownConfig;\n\n  /**\n   * Two-way standalone value.\n   */\n  @Input() value: any = null;\n  @Output() valueChange = new EventEmitter<any>();\n  @Output() selectionChange = new EventEmitter<any>();\n\n  private standaloneFormGroup = new FormGroup({});\n  private valueChangesSubscription?: Subscription;\n\n  ngOnInit(): void {\n    this.setupControl();\n  }\n\n  ngOnChanges(changes: SimpleChanges): void {\n    if (\n      changes['formGroup'] ||\n      changes['formField'] ||\n      changes['config'] ||\n      changes['value']\n    ) {\n      this.setupControl();\n    }\n  }\n\n  ngOnDestroy(): void {\n    this.valueChangesSubscription?.unsubscribe();\n  }\n\n  get activeFormGroup(): FormGroup {\n    return this.formGroup || this.standaloneFormGroup;\n  }\n\n  get controlName(): string {\n    return this.formField?.name || this.config?.name || 'dropdown';\n  }\n\n  get inputId(): string {\n    return `pt-dropdown-${this.controlName}`;\n  }\n\n  get labelId(): string {\n    return `pt-dropdown-label-${this.controlName}`;\n  }\n\n  get resolvedHidden(): boolean {\n    return this.formField?.hidden ?? this.config?.hidden ?? false;\n  }\n\n  get resolvedLabel(): string | undefined {\n    return this.formField?.label || this.config?.label;\n  }\n\n  get resolvedWidth(): string {\n    return this.formField?.width || this.config?.width || '100%';\n  }\n\n  get resolvedOptions(): any[] {\n    return this.formField?.options || this.config?.options || [];\n  }\n\n  get resolvedPlaceholder(): string {\n    return (\n      this.formField?.placeholder ||\n      this.config?.placeholder ||\n      'Select an option'\n    );\n  }\n\n  get resolvedOptionLabel(): string {\n    return this.formField?.optionLabel || this.config?.optionLabel || 'label';\n  }\n\n  get resolvedOptionValue(): string {\n    return this.formField?.optionValue || this.config?.optionValue || 'value';\n  }\n\n  get resolvedOptionDisabled(): string {\n    return (\n      this.formField?.optionDisabled ||\n      this.config?.optionDisabled ||\n      'disabled'\n    );\n  }\n\n  get resolvedFilter(): boolean {\n    return this.formField?.filter === true || this.config?.filter === true;\n  }\n\n  get resolvedFilterBy(): string {\n    return this.formField?.filterBy || this.config?.filterBy || 'label';\n  }\n\n  get resolvedRequired(): boolean {\n    return this.formField?.required ?? this.config?.required ?? false;\n  }\n\n  get resolvedDisabled(): boolean {\n    return this.formField?.disabled ?? this.config?.disabled ?? false;\n  }\n\n  get resolvedErrorText(): string | undefined {\n    return this.formField?.errorText || this.config?.errorText;\n  }\n\n  get resolvedIcon(): string | IconStyle | IconImageStyle | undefined {\n    return this.formField?.icon || this.config?.icon;\n  }\n\n  private setupControl(): void {\n    const name = this.controlName;\n\n    if (!name) {\n      return;\n    }\n\n    const initialValue = this.getInitialValue();\n    const hasExplicitValue = this.hasExplicitFieldValue(initialValue);\n    const normalizedValue = this.normalizeValue(initialValue);\n\n    let control = this.activeFormGroup.get(name) as FormControl | null;\n\n    if (!control) {\n      control = new FormControl(hasExplicitValue ? normalizedValue : null);\n      this.activeFormGroup.addControl(name, control);\n    } else if (!this.formGroup && this.hasExplicitFieldValue(this.value)) {\n      control.setValue(this.normalizeValue(this.value), { emitEvent: false });\n    }\n\n    control.setValidators(this.getValidators());\n\n    if (this.resolvedDisabled) {\n      control.disable({ emitEvent: false });\n    } else {\n      control.enable({ emitEvent: false });\n    }\n\n    control.updateValueAndValidity({ emitEvent: false });\n\n    this.valueChangesSubscription?.unsubscribe();\n    this.valueChangesSubscription = control.valueChanges.subscribe(\n      (selectedValue) => {\n        this.valueChange.emit(selectedValue);\n        this.selectionChange.emit(selectedValue);\n      },\n    );\n  }\n\n  private getInitialValue(): any {\n    if (this.formField?.value !== undefined) {\n      return this.formField.value;\n    }\n\n    if (this.value !== undefined && this.value !== null && this.value !== '') {\n      return this.value;\n    }\n\n    return this.config?.value ?? null;\n  }\n\n  private hasExplicitFieldValue(value: any): boolean {\n    return value !== null && value !== undefined && value !== '';\n  }\n\n  private normalizeValue(value: any): any {\n    if (value === null || value === undefined || value === '') {\n      return null;\n    }\n\n    if (typeof value === 'object' && 'value' in value) {\n      return value.value;\n    }\n\n    return value;\n  }\n\n  private getValidators(): ValidatorFn[] {\n    const validators: ValidatorFn[] = [];\n\n    if (this.resolvedRequired) {\n      validators.push(Validators.required);\n    }\n\n    return validators;\n  }\n\n  getErrorMessage(): string {\n    const control = this.activeFormGroup.get(this.controlName);\n\n    if (control?.hasError('required')) {\n      return (\n        this.resolvedErrorText ||\n        `${this.resolvedLabel || this.controlName} is required`\n      );\n    }\n\n    return '';\n  }\n\n  getResolvedIcon(option: any): {\n    type: 'none' | 'font' | 'image';\n    fontIconClass?: string;\n    fontIconStyle?: { [k: string]: any };\n    imageUrl?: string;\n    imageStyle?: { [k: string]: any };\n  } {\n    const source =\n      option?.iconStyle ||\n      option?.iconImageStyle ||\n      option?.icon ||\n      this.resolvedIcon;\n\n    if (!source) {\n      return { type: 'none' };\n    }\n\n    if (this.isIconImageStyle(source)) {\n      const img = source as IconImageStyle;\n      return {\n        type: 'image',\n        imageUrl: img.url,\n        imageStyle: this.buildImageStyle(img),\n      };\n    }\n\n    if (this.isIconStyle(source)) {\n      const style = source as IconStyle;\n      return {\n        type: 'font',\n        fontIconClass: style.code,\n        fontIconStyle: this.buildFontIconStyle(style),\n      };\n    }\n\n    if (typeof source === 'string') {\n      return {\n        type: 'font',\n        fontIconClass: source,\n        fontIconStyle: {},\n      };\n    }\n\n    return { type: 'none' };\n  }\n\n  private isIconStyle(value: any): value is IconStyle {\n    return !!value && typeof value === 'object' && 'code' in value;\n  }\n\n  private isIconImageStyle(value: any): value is IconImageStyle {\n    return !!value && typeof value === 'object' && 'url' in value;\n  }\n\n  private buildFontIconStyle(icon: IconStyle): { [k: string]: any } {\n    const styles: { [k: string]: any } = {};\n\n    if (icon.color) {\n      styles.color = icon.color;\n    }\n\n    if (icon.fontSize) {\n      styles['font-size'] = icon.fontSize;\n    }\n\n    if (icon.backgroundColor) {\n      styles['background-color'] = icon.backgroundColor;\n      styles.padding = styles.padding ?? '0.15rem 0.3rem';\n    }\n\n    if (icon.shape === 'circular') {\n      styles['border-radius'] = '50%';\n    } else if (icon.shape === 'rounded-square') {\n      styles['border-radius'] = '6px';\n    }\n\n    return styles;\n  }\n\n  private buildImageStyle(icon: IconImageStyle): { [k: string]: any } {\n    const styles: { [k: string]: any } = {};\n\n    if (icon.width) {\n      styles.width = icon.width;\n    }\n\n    if (icon.height) {\n      styles.height = icon.height;\n    }\n\n    if (icon.marginLeft) {\n      styles['margin-left'] = icon.marginLeft;\n    }\n\n    if (icon.marginRight) {\n      styles['margin-right'] = icon.marginRight;\n    }\n\n    if (icon.marginTop) {\n      styles['margin-top'] = icon.marginTop;\n    }\n\n    if (icon.marginBottom) {\n      styles['margin-bottom'] = icon.marginBottom;\n    }\n\n    if (icon.shape === 'circular') {\n      styles['border-radius'] = '50%';\n    } else if (icon.shape === 'rounded-square') {\n      styles['border-radius'] = '6px';\n    }\n\n    return styles;\n  }\n\n  getIconPosition(option: any): 'left' | 'right' {\n    const src =\n      option?.iconStyle ||\n      option?.iconImageStyle ||\n      option?.icon ||\n      this.resolvedIcon;\n\n    if (this.isIconStyle(src) && src.position) {\n      return src.position;\n    }\n\n    if (this.isIconImageStyle(src) && src.position) {\n      return src.position;\n    }\n\n    return 'left';\n  }\n}\n","@if (!resolvedHidden) {\n  <div\n    [formGroup]=\"activeFormGroup\"\n    class=\"form-field\"\n    [ngStyle]=\"{ width: resolvedWidth }\"\n  >\n    @if (resolvedLabel) {\n      <label [id]=\"labelId\" class=\"field-label\">\n        {{ resolvedLabel }}\n      </label>\n    }\n\n    <p-select\n      [inputId]=\"inputId\"\n      [name]=\"controlName\"\n      [formControlName]=\"controlName\"\n      [options]=\"resolvedOptions\"\n      [placeholder]=\"resolvedPlaceholder\"\n      [optionLabel]=\"resolvedOptionLabel\"\n      [optionValue]=\"resolvedOptionValue\"\n      [optionDisabled]=\"resolvedOptionDisabled\"\n      [dataKey]=\"resolvedOptionValue\"\n      [filter]=\"resolvedFilter\"\n      [filterBy]=\"resolvedFilterBy\"\n      [appendTo]=\"'body'\"\n      [overlayOptions]=\"{ baseZIndex: 11000 }\"\n      [ariaLabelledBy]=\"labelId\"\n    >\n      <ng-template pTemplate=\"selectedItem\" let-option>\n        @if (option) {\n          <div class=\"pt-dropdown-item\">\n            @if (getResolvedIcon(option); as iconMeta) {\n              @if (iconMeta.type === \"image\") {\n                <img\n                  [src]=\"iconMeta.imageUrl\"\n                  [ngStyle]=\"iconMeta.imageStyle\"\n                  class=\"pt-dropdown-icon-image\"\n                />\n              }\n\n              @if (iconMeta.type === \"font\") {\n                <i\n                  [ngClass]=\"iconMeta.fontIconClass\"\n                  [ngStyle]=\"iconMeta.fontIconStyle\"\n                  class=\"pt-dropdown-icon-font\"\n                ></i>\n              }\n            }\n\n            <span class=\"pt-dropdown-label\">\n              {{ option[resolvedOptionLabel] }}\n            </span>\n          </div>\n        } @else {\n          <span>{{ resolvedPlaceholder }}</span>\n        }\n      </ng-template>\n\n      <ng-template pTemplate=\"item\" let-option>\n        <div\n          class=\"pt-dropdown-item\"\n          [class.pt-dropdown-parent-option]=\"option?.isParent\"\n          [class.pt-dropdown-child-option]=\"option?.isChild\"\n          [class.pt-dropdown-disabled-option]=\"option?.disabled\"\n          [ngStyle]=\"{ 'padding-left': option?.indent || '0rem' }\"\n        >\n          @if (getResolvedIcon(option); as iconMeta) {\n            @if (iconMeta.type === \"image\") {\n              <img\n                [src]=\"iconMeta.imageUrl\"\n                [ngStyle]=\"iconMeta.imageStyle\"\n                class=\"pt-dropdown-icon-image\"\n              />\n            }\n\n            @if (iconMeta.type === \"font\") {\n              <i\n                [ngClass]=\"iconMeta.fontIconClass\"\n                [ngStyle]=\"iconMeta.fontIconStyle\"\n                class=\"pt-dropdown-icon-font\"\n              ></i>\n            }\n          }\n\n          <span class=\"pt-dropdown-label\">\n            {{ option[resolvedOptionLabel] }}\n          </span>\n        </div>\n      </ng-template>\n    </p-select>\n\n    @if (\n      activeFormGroup.get(controlName)?.invalid &&\n      (activeFormGroup.get(controlName)?.touched ||\n        activeFormGroup.get(controlName)?.dirty)\n    ) {\n      <div class=\"error-container\">\n        <small class=\"field-error\">{{ getErrorMessage() }}</small>\n      </div>\n    }\n  </div>\n}\n","import { Component, Input, OnDestroy, OnInit } from '@angular/core';\nimport {\n  FormControl,\n  FormGroup,\n  ValidatorFn,\n  Validators,\n} from '@angular/forms';\nimport { Subscription } from 'rxjs';\n\nimport { FormField } from '../models/form-field.model';\n\n@Component({\n  selector: 'pt-otp-input',\n  templateUrl: './pt-otp-input.component.html',\n  styleUrls: ['./pt-otp-input.component.css'],\n  standalone: false,\n})\nexport class PTOtpInputComponent implements OnInit, OnDestroy {\n  @Input() formGroup!: FormGroup;\n\n  @Input() formField!: FormField;\n\n  private valueChangesSubscription?: Subscription;\n\n  ngOnInit(): void {\n    this.initializeDefaults();\n    this.setupControl();\n  }\n\n  ngOnDestroy(): void {\n    this.valueChangesSubscription?.unsubscribe();\n  }\n\n  get inputId(): string {\n    return `pt-otp-input-${this.formField?.name || 'field'}`;\n  }\n\n  get resolvedLength(): number {\n    return this.formField.otpLength ?? 6;\n  }\n\n  get resolvedIntegerOnly(): boolean {\n    return this.formField.otpIntegerOnly ?? true;\n  }\n\n  get resolvedMask(): boolean {\n    return this.formField.otpMask ?? false;\n  }\n\n  get control(): FormControl | null {\n    return this.formGroup.get(this.formField.name) as FormControl | null;\n  }\n\n  setupControl(): void {\n    const control = this.control;\n\n    if (!control) {\n      return;\n    }\n\n    control.setValidators(this.getValidators());\n\n    this.valueChangesSubscription?.unsubscribe();\n\n    if (this.formField.disabled) {\n      control.disable({ emitEvent: false });\n    } else {\n      control.enable({ emitEvent: false });\n\n      this.valueChangesSubscription = control.valueChanges.subscribe(\n        (value) => {\n          this.normalizeOtpValue(value);\n        },\n      );\n    }\n\n    control.updateValueAndValidity({ emitEvent: false });\n  }\n\n  hasError(): boolean {\n    const control = this.control;\n\n    return !!(control?.invalid && (control.touched || control.dirty));\n  }\n\n  getErrorMessage(): string {\n    const control = this.control;\n\n    if (control?.hasError('required')) {\n      return (\n        this.formField.errorText ??\n        `${this.formField.label ?? 'OTP code'} is required`\n      );\n    }\n\n    if (control?.hasError('pattern')) {\n      return (\n        this.formField.errorText ??\n        `${this.formField.label ?? 'OTP code'} must contain exactly ${\n          this.resolvedLength\n        } ${this.resolvedIntegerOnly ? 'digits' : 'characters'}`\n      );\n    }\n\n    return '';\n  }\n\n  private initializeDefaults(): void {\n    this.formField = {\n      required: true,\n      otpLength: 6,\n      otpIntegerOnly: true,\n      otpMask: false,\n      width: '100%',\n      ...this.formField,\n    };\n  }\n\n  private getValidators(): ValidatorFn[] {\n    const validators: ValidatorFn[] = [];\n\n    if (this.formField.required) {\n      validators.push(Validators.required);\n    }\n\n    validators.push(Validators.pattern(this.buildOtpPattern()));\n\n    return validators;\n  }\n\n  private buildOtpPattern(): RegExp {\n    if (this.resolvedIntegerOnly) {\n      return new RegExp(`^[0-9]{${this.resolvedLength}}$`);\n    }\n\n    return new RegExp(`^[A-Za-z0-9]{${this.resolvedLength}}$`);\n  }\n\n  private normalizeOtpValue(value: unknown): void {\n    const control = this.control;\n\n    if (!control || value === null || value === undefined) {\n      return;\n    }\n\n    let normalizedValue = String(value).trim();\n\n    if (this.resolvedIntegerOnly) {\n      normalizedValue = normalizedValue.replace(/[^0-9]/g, '');\n    } else {\n      normalizedValue = normalizedValue.replace(/[^A-Za-z0-9]/g, '');\n    }\n\n    normalizedValue = normalizedValue.slice(0, this.resolvedLength);\n\n    if (normalizedValue !== String(value)) {\n      control.setValue(normalizedValue, { emitEvent: false });\n    }\n  }\n}\n","@if (!formField.hidden) {\n  <div\n    [formGroup]=\"formGroup\"\n    class=\"form-field\"\n    [ngStyle]=\"{\n      width: formField.width || '100%',\n      height: formField.height || 'auto',\n      margin: formField.margin || null,\n    }\"\n  >\n    @if (formField.label) {\n      <label class=\"field-label\">\n        {{ formField.label }}\n      </label>\n    }\n\n    <div class=\"otp-input-wrapper\">\n      <p-inputOtp\n        [formControlName]=\"formField.name\"\n        [length]=\"resolvedLength\"\n        [integerOnly]=\"resolvedIntegerOnly\"\n        [mask]=\"resolvedMask\"\n        [readonly]=\"formField.disabled ?? false\"\n        styleClass=\"pt-otp-input\"\n      ></p-inputOtp>\n    </div>\n\n    @if (hasError()) {\n      <div class=\"form-info-row\">\n        <small class=\"field-error\">\n          {{ getErrorMessage() }}\n        </small>\n      </div>\n    }\n  </div>\n}\n","import { Component, Input, OnDestroy, OnInit } from '@angular/core';\nimport {\n  FormControl,\n  FormGroup,\n  ValidatorFn,\n  Validators,\n} from '@angular/forms';\nimport { Subscription } from 'rxjs';\n\nimport { InputValidationEnum } from '../enums/input-validation.enum';\nimport { FormTextField } from '../models/form-text-field.model';\n\n@Component({\n  selector: 'pt-password-input',\n  templateUrl: './pt-password-input.component.html',\n  styleUrls: ['./pt-password-input.component.css'],\n  standalone: false,\n})\nexport class PTPasswordInputComponent implements OnInit, OnDestroy {\n  @Input() formGroup!: FormGroup;\n  @Input() formField!: FormTextField;\n\n  characterCount = 0;\n\n  private valueChangesSubscription?: Subscription;\n\n  ngOnInit(): void {\n    this.setupControl();\n    this.updateCharacterCount();\n  }\n\n  ngOnDestroy(): void {\n    this.valueChangesSubscription?.unsubscribe();\n  }\n\n  get inputId(): string {\n    return `pt-password-${this.formField?.name || 'field'}`;\n  }\n\n  setupControl(): void {\n    const control = this.formGroup.get(\n      this.formField.name,\n    ) as FormControl | null;\n\n    if (!control) {\n      return;\n    }\n\n    control.setValidators(this.getValidators());\n\n    this.valueChangesSubscription?.unsubscribe();\n\n    if (this.formField.disabled) {\n      control.disable({ emitEvent: false });\n    } else {\n      control.enable({ emitEvent: false });\n\n      this.valueChangesSubscription = control.valueChanges.subscribe(() => {\n        this.updateCharacterCount();\n      });\n    }\n\n    control.updateValueAndValidity({ emitEvent: false });\n  }\n\n  updateCharacterCount(): void {\n    const control = this.formGroup.get(\n      this.formField.name,\n    ) as FormControl | null;\n\n    if (!control) {\n      this.characterCount = 0;\n      return;\n    }\n\n    const value = control.value;\n    this.characterCount = value != null ? String(value).length : 0;\n  }\n\n  getPasswordToggleMask(): boolean {\n    return this.formField.toggleMask ?? true;\n  }\n\n  getPasswordFeedback(): boolean {\n    return this.formField.feedback ?? false;\n  }\n\n  private getValidators(): ValidatorFn[] {\n    const validators: ValidatorFn[] = [];\n\n    if (this.formField.required) {\n      validators.push(Validators.required);\n    }\n\n    if (this.formField.minLength !== undefined) {\n      validators.push(Validators.minLength(this.formField.minLength));\n    }\n\n    if (this.formField.maxLength !== undefined) {\n      validators.push(Validators.maxLength(this.formField.maxLength));\n    }\n\n    if (this.formField.inputValidation) {\n      validators.push(\n        this.validateWithInputValidation(this.formField.inputValidation),\n      );\n    }\n\n    return validators;\n  }\n\n  private validateWithInputValidation(\n    inputValidation: InputValidationEnum,\n  ): ValidatorFn {\n    return Validators.pattern(new RegExp(inputValidation));\n  }\n\n  getErrorMessage(): string {\n    const control = this.formGroup.get(this.formField.name);\n\n    if (control?.hasError('required')) {\n      return this.formField.errorText ?? `${this.formField.label} is required`;\n    }\n\n    if (control?.hasError('minlength')) {\n      return `${this.formField.label} must be at least ${this.formField.minLength} characters`;\n    }\n\n    if (control?.hasError('maxlength')) {\n      return `${this.formField.label} must be at most ${this.formField.maxLength} characters`;\n    }\n\n    if (control?.hasError('pattern')) {\n      return this.formField.errorText ?? `${this.formField.label} is invalid`;\n    }\n\n    return '';\n  }\n\n  hasError(): boolean {\n    const control = this.formGroup.get(this.formField.name);\n\n    return !!(control?.invalid && (control.touched || control.dirty));\n  }\n\n  hasCharacterCounter(): boolean {\n    return !this.formField.disabled && this.formField.maxLength !== undefined;\n  }\n\n  hasInfoRow(): boolean {\n    return this.hasError() || this.hasCharacterCounter();\n  }\n}\n","@if (!formField.hidden) {\n  <div\n    [formGroup]=\"formGroup\"\n    class=\"form-field\"\n    [ngStyle]=\"{\n      width: formField.width || '100%',\n      height: formField.height || 'auto',\n      margin: formField.margin || null,\n    }\"\n  >\n    @if (formField.label) {\n      <label [for]=\"inputId\" class=\"field-label\">\n        {{ formField.label }}\n      </label>\n    }\n\n    @if (formField.iconClass) {\n      <p-iconField [iconPosition]=\"formField.iconPosition || 'left'\">\n        <p-inputIcon [styleClass]=\"formField.iconClass\"></p-inputIcon>\n\n        <p-password\n          [inputId]=\"inputId\"\n          [formControlName]=\"formField.name\"\n          [placeholder]=\"formField.placeholder ?? ''\"\n          [toggleMask]=\"getPasswordToggleMask()\"\n          [feedback]=\"getPasswordFeedback()\"\n          [attr.name]=\"formField.name\"\n          [inputStyle]=\"{\n            width: formField.width || '100%',\n            height: formField.height || 'auto',\n          }\"\n          styleClass=\"pt-password-input\"\n        ></p-password>\n      </p-iconField>\n    } @else {\n      <p-password\n        [inputId]=\"inputId\"\n        [formControlName]=\"formField.name\"\n        [placeholder]=\"formField.placeholder ?? ''\"\n        [toggleMask]=\"getPasswordToggleMask()\"\n        [feedback]=\"getPasswordFeedback()\"\n        [attr.name]=\"formField.name\"\n        [inputStyle]=\"{\n          width: formField.width || '100%',\n          height: formField.height || 'auto',\n        }\"\n        styleClass=\"pt-password-input\"\n      ></p-password>\n    }\n\n    @if (hasInfoRow()) {\n      <div class=\"form-info-row\">\n        @if (hasError()) {\n          <small class=\"field-error\">\n            {{ getErrorMessage() }}\n          </small>\n        }\n\n        <div class=\"spacer\"></div>\n\n        @if (hasCharacterCounter()) {\n          <div class=\"character-counter\">\n            {{ characterCount }}/{{ formField.maxLength }} characters\n          </div>\n        }\n      </div>\n    }\n  </div>\n}\n","import { Component, Input } from '@angular/core';\nimport { FormGroup } from '@angular/forms';\n\nimport { FormInputTypeEnum } from '../../enums';\n\nimport { FormField } from '../../models';\nimport { FormCheckBoxField } from '../../models/form-check-field.model';\nimport { FormDateField } from '../../models/form-date-field.model';\nimport { FormDropdownField } from '../../models/form-drop-down-field.model';\nimport { FormMultiSelectField } from '../../models/form-multi-select.model';\nimport { FormNumberField } from '../../models/form-number-field.model';\nimport { FormSwitchField } from '../../models/form-switch-field.model';\nimport { FormTextAreaField } from '../../models/form-text-area-field.model';\nimport { FormTextField } from '../../models/form-text-field.model';\n\n@Component({\n  selector: 'pt-dynamic-form-field',\n  templateUrl: './pt-dynamic-form-field.component.html',\n  styleUrls: ['./pt-dynamic-form-field.component.css'],\n  standalone: false,\n})\nexport class PTDynamicFormFieldComponent {\n  @Input() field!: FormField;\n  @Input() form!: FormGroup;\n  @Input() inputWidth!: string;\n\n  FormInputTypeEnum = FormInputTypeEnum;\n\n  asTextField(field: FormField): FormTextField {\n    return field as FormTextField;\n  }\n\n  asNumberField(field: FormField): FormNumberField {\n    return field as FormNumberField;\n  }\n\n  asTextAreaField(field: FormField): FormTextAreaField {\n    return field as FormTextAreaField;\n  }\n\n  asDateField(field: FormField): FormDateField {\n    return field as FormDateField;\n  }\n\n  asSelectField(field: FormField): FormDropdownField {\n    return field as FormDropdownField;\n  }\n\n  asMultiSelectField(field: FormField): FormMultiSelectField {\n    return field as FormMultiSelectField;\n  }\n\n  asCheckboxField(field: FormField): FormCheckBoxField {\n    return field as FormCheckBoxField;\n  }\n\n  asSwitchField(field: FormField): FormSwitchField {\n    return field as FormSwitchField;\n  }\n\n  asOtpField(field: FormField): FormField {\n    return field;\n  }\n}\n","<!-- projects/ng-prime-tools/src/lib/pt-form-builder/pt-dynamic-form-field/pt-dynamic-form-field.component.html -->\n\n<div\n  [formGroup]=\"form\"\n  class=\"form-field\"\n  [ngStyle]=\"{\n    width:\n      field.type !== FormInputTypeEnum.CHECKBOX\n        ? field.width || inputWidth\n        : 'auto',\n  }\"\n>\n  @switch (field.type) {\n    <!-- TEXT -->\n    @case (FormInputTypeEnum.TEXT) {\n      <pt-text-input\n        [formGroup]=\"form\"\n        [formField]=\"asTextField(field)\"\n      ></pt-text-input>\n    }\n\n    <!-- EMAIL -->\n    @case (FormInputTypeEnum.EMAIL) {\n      <pt-text-input\n        [formGroup]=\"form\"\n        [formField]=\"asTextField(field)\"\n      ></pt-text-input>\n    }\n\n    <!-- PASSWORD -->\n    @case (FormInputTypeEnum.PASSWORD) {\n      <pt-password-input\n        [formGroup]=\"form\"\n        [formField]=\"asTextField(field)\"\n      ></pt-password-input>\n    }\n\n    <!-- NUMBER -->\n    @case (FormInputTypeEnum.NUMBER) {\n      <pt-number-input\n        [formGroup]=\"form\"\n        [formField]=\"asNumberField(field)\"\n      ></pt-number-input>\n    }\n\n    <!-- AMOUNT -->\n    @case (FormInputTypeEnum.AMOUNT) {\n      <pt-number-input\n        [formGroup]=\"form\"\n        [formField]=\"asNumberField(field)\"\n      ></pt-number-input>\n    }\n\n    <!-- TEXTAREA -->\n    @case (FormInputTypeEnum.TEXTAREA) {\n      <pt-text-area-input\n        [formGroup]=\"form\"\n        [formField]=\"asTextAreaField(field)\"\n      ></pt-text-area-input>\n    }\n\n    <!-- DATE -->\n    @case (FormInputTypeEnum.DATE) {\n      <pt-date-input\n        [formGroup]=\"form\"\n        [formField]=\"asDateField(field)\"\n      ></pt-date-input>\n    }\n\n    <!-- MULTISELECT -->\n    @case (FormInputTypeEnum.MULTISELECT) {\n      <pt-multi-select\n        [formGroup]=\"form\"\n        [formField]=\"asMultiSelectField(field)\"\n      ></pt-multi-select>\n    }\n\n    <!-- SELECT -->\n    @case (FormInputTypeEnum.SELECT) {\n      <pt-dropdown\n        [formGroup]=\"form\"\n        [formField]=\"asSelectField(field)\"\n      ></pt-dropdown>\n    }\n\n    <!-- OTP -->\n    @case (FormInputTypeEnum.OTP) {\n      <pt-otp-input\n        [formGroup]=\"form\"\n        [formField]=\"asOtpField(field)\"\n      ></pt-otp-input>\n    }\n\n    <!-- CHECKBOX -->\n    @case (FormInputTypeEnum.CHECKBOX) {\n      <pt-check-box-input\n        [formGroup]=\"form\"\n        [formField]=\"asCheckboxField(field)\"\n      ></pt-check-box-input>\n    }\n\n    <!-- SWITCH -->\n    @case (FormInputTypeEnum.SWITCH) {\n      <pt-switch-input\n        [formGroup]=\"form\"\n        [formField]=\"asSwitchField(field)\"\n      ></pt-switch-input>\n    }\n  }\n</div>\n","import {\n  Component,\n  EventEmitter,\n  Input,\n  OnChanges,\n  OnDestroy,\n  OnInit,\n  Output,\n  SimpleChanges,\n} from '@angular/core';\n\nimport {\n  AbstractControl,\n  FormBuilder,\n  FormGroup,\n  ValidatorFn,\n  Validators,\n} from '@angular/forms';\n\nimport { Subscription } from 'rxjs';\n\nimport { FormInputTypeEnum } from '../enums/form-input-type.enum';\nimport { InputValidationEnum } from '../enums/input-validation.enum';\n\nimport { FormButton } from '../models/form-button.model';\nimport { FormField } from '../models/form-field.model';\nimport { FormFieldGroup } from '../models/form-field-group.model';\n\n@Component({\n  selector: 'pt-form-builder',\n  templateUrl: './pt-form-builder.component.html',\n  styleUrls: ['./pt-form-builder.component.css'],\n  standalone: false,\n})\nexport class PTFormBuilderComponent implements OnInit, OnChanges, OnDestroy {\n  @Input() mainGroup: FormFieldGroup = { fields: [], groups: [] };\n  @Input() buttons: FormButton[] = [];\n  @Input() title?: string;\n  @Input() titleStyle?: { [key: string]: string };\n\n  /**\n   * Largeur des inputs/champs.\n   */\n  @Input() inputWidth = '100%';\n\n  /**\n   * Largeur globale du composant pt-form-builder.\n   */\n  @Input() formWidth = '100%';\n\n  @Input() language: 'en' | 'fr' = 'en';\n\n  @Output() formSubmit = new EventEmitter<{ [key: string]: any }>();\n  @Output() formReady = new EventEmitter<FormGroup>();\n  @Output() formChange = new EventEmitter<{ [key: string]: any }>();\n\n  form: FormGroup;\n\n  FormInputTypeEnum = FormInputTypeEnum;\n\n  private formValueChangesSub?: Subscription;\n\n  private errorMessages = {\n    en: {\n      required: 'is required',\n      email: 'is not a valid email address',\n      pattern: 'is invalid',\n      minlength: 'must be at least',\n      maxlength: 'must be at most',\n    },\n    fr: {\n      required: 'est requis',\n      email: \"n'est pas une adresse e-mail valide\",\n      pattern: 'est invalide',\n      minlength: 'doit contenir au moins',\n      maxlength: 'doit contenir au plus',\n    },\n  };\n\n  constructor(private readonly fb: FormBuilder) {\n    this.form = this.fb.group({});\n  }\n\n  ngOnInit(): void {\n    this.rebuildForm();\n  }\n\n  ngOnChanges(changes: SimpleChanges): void {\n    if (changes['mainGroup'] && !changes['mainGroup'].firstChange) {\n      this.rebuildForm();\n    }\n  }\n\n  ngOnDestroy(): void {\n    this.formValueChangesSub?.unsubscribe();\n  }\n\n  private rebuildForm(): void {\n    this.formValueChangesSub?.unsubscribe();\n\n    this.form = this.fb.group({});\n    this.buildFormGroup(this.mainGroup);\n\n    this.formReady.emit(this.form);\n\n    this.formValueChangesSub = this.form.valueChanges.subscribe((value) => {\n      this.formChange.emit(value);\n    });\n  }\n\n  private buildFormGroup(group: FormFieldGroup): void {\n    (group?.fields ?? []).forEach((field) => {\n      const validators = this.buildValidators(field);\n      const anyField = field as any;\n\n      this.form.addControl(\n        field.name,\n        this.fb.control(\n          {\n            value: this.resolveInitialValue(field),\n            disabled: !!anyField.disabled,\n          },\n          validators,\n        ),\n      );\n    });\n\n    (group?.groups ?? []).forEach((subGroup) => this.buildFormGroup(subGroup));\n  }\n\n  private resolveInitialValue(field: FormField): any {\n    if (field.value !== undefined && field.value !== null) {\n      return field.value;\n    }\n\n    if (field.type === FormInputTypeEnum.SWITCH) {\n      return field.required ? null : false;\n    }\n\n    if (field.type === FormInputTypeEnum.CHECKBOX) {\n      return false;\n    }\n\n    return null;\n  }\n\n  private buildValidators(field: FormField): ValidatorFn[] {\n    const validators: ValidatorFn[] = [];\n    const anyField = field as any;\n\n    if (field.required) {\n      validators.push(Validators.required);\n    }\n\n    if (anyField.minLength != null) {\n      validators.push(Validators.minLength(Number(anyField.minLength)));\n    }\n\n    if (anyField.maxLength != null) {\n      validators.push(Validators.maxLength(Number(anyField.maxLength)));\n    }\n\n    if (anyField.inputValidation) {\n      validators.push(\n        Validators.pattern(\n          new RegExp(anyField.inputValidation as InputValidationEnum),\n        ),\n      );\n    } else if (anyField.pattern) {\n      validators.push(Validators.pattern(anyField.pattern));\n    }\n\n    switch (field.type) {\n      case FormInputTypeEnum.EMAIL:\n        validators.push(Validators.email);\n        break;\n\n      case FormInputTypeEnum.OTP:\n        validators.push(Validators.pattern(this.buildOtpPattern(field)));\n        break;\n\n      default:\n        break;\n    }\n\n    return validators;\n  }\n\n  private buildOtpPattern(field: FormField): RegExp {\n    const length = field.otpLength ?? 6;\n    const integerOnly = field.otpIntegerOnly ?? true;\n\n    if (integerOnly) {\n      return new RegExp(`^[0-9]{${length}}$`);\n    }\n\n    return new RegExp(`^[A-Za-z0-9]{${length}}$`);\n  }\n\n  isInvalid(field: FormField): boolean {\n    const control = this.form.get(field.name);\n\n    return !!control && control.invalid && (control.touched || control.dirty);\n  }\n\n  getErrorMessage(field: FormField): string {\n    const control: AbstractControl | null = this.form.get(field.name);\n\n    if (!control) {\n      return '';\n    }\n\n    const lang = this.language;\n\n    if (control.hasError('required')) {\n      return (\n        (field as any).errorText ||\n        `${field.label} ${this.errorMessages[lang].required}`\n      );\n    }\n\n    if (control.hasError('email')) {\n      return (\n        (field as any).errorText ||\n        `${field.label} ${this.errorMessages[lang].email}`\n      );\n    }\n\n    if (control.hasError('pattern')) {\n      return (\n        (field as any).errorText ||\n        `${field.label} ${this.errorMessages[lang].pattern}`\n      );\n    }\n\n    if (control.hasError('minlength')) {\n      const requiredLen = control.getError('minlength')?.requiredLength;\n\n      return `${field.label} ${this.errorMessages[lang].minlength} ${requiredLen} ${\n        lang === 'fr' ? 'caractères' : 'characters'\n      }`;\n    }\n\n    if (control.hasError('maxlength')) {\n      const requiredLen = control.getError('maxlength')?.requiredLength;\n\n      return `${field.label} ${this.errorMessages[lang].maxlength} ${requiredLen} ${\n        lang === 'fr' ? 'caractères' : 'characters'\n      }`;\n    }\n\n    return '';\n  }\n\n  onSubmit(): void {\n    this.form.markAllAsTouched();\n\n    if (this.form.valid) {\n      this.formSubmit.emit(this.form.getRawValue());\n    }\n  }\n\n  onClear(): void {\n    this.form.reset();\n    this.formChange.emit(this.form.getRawValue());\n  }\n}\n","<div\n  class=\"pt-form-builder-wrapper\"\n  [ngStyle]=\"{ width: formWidth, maxWidth: formWidth }\"\n>\n  @if (title) {\n    <div [ngStyle]=\"titleStyle\" class=\"form-title\">{{ title }}</div>\n  }\n\n  <form [formGroup]=\"form\" (ngSubmit)=\"onSubmit()\">\n    @for (field of mainGroup.fields; track field.name) {\n      <pt-dynamic-form-field\n        [field]=\"field\"\n        [form]=\"form\"\n        [inputWidth]=\"inputWidth\"\n      ></pt-dynamic-form-field>\n    }\n\n    @for (group of mainGroup.groups; track $index) {\n      <div\n        class=\"form-field-group\"\n        [ngStyle]=\"{ width: group.width || '100%' }\"\n      >\n        @for (field of group.fields; track field.name) {\n          <pt-dynamic-form-field\n            [field]=\"field\"\n            [form]=\"form\"\n            [inputWidth]=\"inputWidth\"\n            class=\"flex-item\"\n          ></pt-dynamic-form-field>\n        }\n      </div>\n    }\n\n    @if (buttons.length) {\n      <div class=\"button-group\">\n        @for (button of buttons; track button.text) {\n          <button\n            type=\"button\"\n            pButton\n            [label]=\"button.text\"\n            [icon]=\"button.icon || ''\"\n            [class]=\"button.color || ''\"\n            [disabled]=\"button.disabled || false\"\n            [ngStyle]=\"{\n              color: button.fontColor || null,\n              'background-color': button.backgroundColor || null,\n              'border-color':\n                button.borderColor || button.backgroundColor || null,\n            }\"\n            (click)=\"\n              button.isSubmit\n                ? onSubmit()\n                : button.isClear\n                  ? onClear()\n                  : button.action\n                    ? button.action()\n                    : null\n            \"\n          ></button>\n        }\n      </div>\n    }\n  </form>\n</div>\n","import { NgModule } from '@angular/core';\nimport { CommonModule } from '@angular/common';\nimport { ReactiveFormsModule } from '@angular/forms';\nimport { CheckboxModule } from 'primeng/checkbox';\nimport { PTCheckBoxInputComponent } from './pt-check-box-input.component';\n\n@NgModule({\n  declarations: [PTCheckBoxInputComponent],\n  imports: [CommonModule, ReactiveFormsModule, CheckboxModule],\n  exports: [PTCheckBoxInputComponent],\n})\nexport class PTCheckBoxInputModule {}\n","import { NgModule } from '@angular/core';\nimport { CommonModule } from '@angular/common';\nimport { FormsModule, ReactiveFormsModule } from '@angular/forms';\nimport { InputGroupModule } from 'primeng/inputgroup';\nimport { InputGroupAddonModule } from 'primeng/inputgroupaddon';\nimport { PTNumberInputComponent } from './pt-number-input.component';\nimport { InputTextModule } from 'primeng/inputtext';\nimport { InputNumberModule } from 'primeng/inputnumber';\n\n@NgModule({\n  declarations: [PTNumberInputComponent],\n  imports: [\n    CommonModule,\n    ReactiveFormsModule,\n    FormsModule,\n    InputGroupModule,\n    InputGroupAddonModule,\n    InputTextModule,\n    InputNumberModule,\n  ],\n  exports: [PTNumberInputComponent],\n})\nexport class PTNumberInputModule {}\n","import { NgModule } from '@angular/core';\nimport { CommonModule } from '@angular/common';\nimport { ReactiveFormsModule } from '@angular/forms';\nimport { ToggleSwitchModule } from 'primeng/toggleswitch';\n\nimport { PTSwitchInputComponent } from './pt-switch-input.component';\n\n@NgModule({\n  declarations: [PTSwitchInputComponent],\n  imports: [CommonModule, ReactiveFormsModule, ToggleSwitchModule],\n  exports: [PTSwitchInputComponent],\n})\nexport class PTSwitchInputModule {}\n","import { NgModule } from '@angular/core';\nimport { CommonModule } from '@angular/common';\nimport { FormsModule, ReactiveFormsModule } from '@angular/forms';\n\nimport { InputTextModule } from 'primeng/inputtext';\nimport { IconFieldModule } from 'primeng/iconfield';\nimport { InputIconModule } from 'primeng/inputicon';\nimport { PasswordModule } from 'primeng/password';\n\nimport { PTTextInputComponent } from './pt-text-input.component';\n\n@NgModule({\n  declarations: [PTTextInputComponent],\n  imports: [\n    CommonModule,\n    FormsModule,\n    ReactiveFormsModule,\n    InputTextModule,\n    IconFieldModule,\n    InputIconModule,\n    PasswordModule,\n  ],\n  exports: [PTTextInputComponent],\n})\nexport class PTTextInputModule {}\n","import { NgModule } from '@angular/core';\nimport { CommonModule } from '@angular/common';\nimport { ReactiveFormsModule } from '@angular/forms';\n\nimport { TextareaModule } from 'primeng/textarea';\nimport { InputGroupModule } from 'primeng/inputgroup';\nimport { InputGroupAddonModule } from 'primeng/inputgroupaddon';\n\nimport { PTTextAreaInputComponent } from './pt-text-area-input.component';\n\n@NgModule({\n  declarations: [PTTextAreaInputComponent],\n  imports: [\n    CommonModule,\n    ReactiveFormsModule,\n    TextareaModule,\n    InputGroupModule,\n    InputGroupAddonModule,\n  ],\n  exports: [PTTextAreaInputComponent],\n})\nexport class PTTextAreaInputModule {}\n","import { NgModule } from '@angular/core';\nimport { CommonModule } from '@angular/common';\nimport { ReactiveFormsModule } from '@angular/forms';\n\nimport { DatePickerModule } from 'primeng/datepicker';\n\nimport { PTDateInputComponent } from './pt-date-input.component';\n\n@NgModule({\n  declarations: [PTDateInputComponent],\n  imports: [CommonModule, ReactiveFormsModule, DatePickerModule],\n  exports: [PTDateInputComponent],\n})\nexport class PTDateInputModule {}\n","import { NgModule } from '@angular/core';\nimport { CommonModule } from '@angular/common';\nimport { ReactiveFormsModule } from '@angular/forms';\n\nimport { SelectModule } from 'primeng/select';\n\nimport { PTDropdownComponent } from './pt-dropdown.component';\n\n@NgModule({\n  declarations: [PTDropdownComponent],\n  imports: [CommonModule, ReactiveFormsModule, SelectModule],\n  exports: [PTDropdownComponent],\n})\nexport class PTDropdownModule {}\n","import { CommonModule } from '@angular/common';\nimport { NgModule } from '@angular/core';\nimport { FormsModule, ReactiveFormsModule } from '@angular/forms';\n\nimport { InputOtpModule } from 'primeng/inputotp';\n\nimport { PTOtpInputComponent } from './pt-otp-input.component';\n\n@NgModule({\n  declarations: [PTOtpInputComponent],\n  imports: [CommonModule, FormsModule, ReactiveFormsModule, InputOtpModule],\n  exports: [PTOtpInputComponent],\n})\nexport class PTOtpInputModule {}\n","import { CommonModule } from '@angular/common';\nimport { NgModule } from '@angular/core';\nimport { FormsModule, ReactiveFormsModule } from '@angular/forms';\n\nimport { IconFieldModule } from 'primeng/iconfield';\nimport { InputIconModule } from 'primeng/inputicon';\nimport { PasswordModule } from 'primeng/password';\n\nimport { PTPasswordInputComponent } from './pt-password-input.component';\n\n@NgModule({\n  declarations: [PTPasswordInputComponent],\n  imports: [\n    CommonModule,\n    FormsModule,\n    ReactiveFormsModule,\n    IconFieldModule,\n    InputIconModule,\n    PasswordModule,\n  ],\n  exports: [PTPasswordInputComponent],\n})\nexport class PTPasswordInputModule {}\n","import { NgModule } from '@angular/core';\nimport { CommonModule } from '@angular/common';\nimport { ReactiveFormsModule } from '@angular/forms';\nimport { PTDynamicFormFieldComponent as PTDynamicFormFieldComponent } from './pt-dynamic-form-field.component';\nimport { PTCheckBoxInputModule } from '../../pt-check-box-input';\nimport { PTNumberInputModule } from '../../pt-number-input/pt-number-input.module';\nimport { PTSwitchInputModule } from '../../pt-switch-input/pt-switch-input.module';\nimport { PTTextInputModule } from '../../pt-text-input/pt-text-input.module';\nimport { PTTextAreaInputModule } from '../../pt-text-area-input/pt-text-area-input.module';\nimport { PTDateInputModule } from '../../pt-date-input';\nimport { PTDropdownModule } from '../../pt-dropdown';\nimport { PTMultiSelectModule } from '../../pt-multi-select';\nimport { PTOtpInputModule } from '../../pt-otp-input';\nimport { PTPasswordInputModule } from '../../pt-password-input';\n\n@NgModule({\n  declarations: [PTDynamicFormFieldComponent],\n  imports: [\n    CommonModule,\n    ReactiveFormsModule,\n\n    // Inputs\n    PTCheckBoxInputModule,\n    PTDateInputModule,\n    PTNumberInputModule,\n    PTSwitchInputModule,\n    PTTextAreaInputModule,\n    PTTextInputModule,\n    PTDropdownModule,\n    PTMultiSelectModule,\n    PTOtpInputModule,\n    PTPasswordInputModule,\n  ],\n  exports: [PTDynamicFormFieldComponent],\n})\nexport class PTDynamicFormFieldModule {}\n","import { NgModule } from '@angular/core';\nimport { CommonModule } from '@angular/common';\nimport { ReactiveFormsModule } from '@angular/forms';\nimport { PTFormBuilderComponent } from './pt-form-builder.component';\nimport { ButtonModule } from 'primeng/button';\nimport { PTDynamicFormFieldModule } from './pt-dynamic-form-field/pt-dynamic-form-field-module';\n\n@NgModule({\n  declarations: [PTFormBuilderComponent],\n  imports: [\n    CommonModule,\n    ReactiveFormsModule,\n    ButtonModule,\n    PTDynamicFormFieldModule,\n  ],\n  exports: [PTFormBuilderComponent],\n})\nexport class PTFormBuilderModule {}\n","import { Component, Input } from '@angular/core';\nimport {\n  LabelSetting,\n  MetricCardData,\n  ValueSetting,\n  IconStyle,\n  TextStyle,\n} from '../models';\n\n@Component({\n    selector: 'pt-metric-card',\n    templateUrl: './pt-metric-card.component.html',\n    styleUrls: ['./pt-metric-card.component.css'],\n    standalone: false\n})\nexport class PTMetricCardComponent {\n  private static readonly DEFAULT_ICON_COLOR = '#5a67d8';\n  private static readonly DEFAULT_ICON_SIZE = '24px';\n  private static readonly DEFAULT_TITLE_COLOR = '#5a67d8';\n  private static readonly DEFAULT_TITLE_SIZE = '16px';\n  private static readonly DEFAULT_VALUE_COLOR = '#2d3748';\n  private static readonly DEFAULT_VALUE_SIZE = '32px';\n  private static readonly DEFAULT_LABEL_COLOR = '#718096';\n  private static readonly DEFAULT_LABEL_SIZE = '14px';\n  private static readonly DEFAULT_ADDITIONAL_INFO_COLOR = 'gray';\n  private static readonly DEFAULT_ADDITIONAL_INFO_SIZE = '14px';\n  private static readonly DEFAULT_BACKGROUND_COLOR = '#fff';\n\n  @Input() cardData!: MetricCardData;\n\n  isIconObject(): boolean {\n    return (\n      typeof this.cardData.icon === 'object' && this.cardData.icon !== null\n    );\n  }\n\n  isTitleObject(): boolean {\n    return (\n      typeof this.cardData.title === 'object' && this.cardData.title !== null\n    );\n  }\n\n  isValueObject(): boolean {\n    return (\n      typeof this.cardData.value === 'object' && this.cardData.value !== null\n    );\n  }\n\n  isLabelObject(label: LabelSetting | string | undefined): boolean {\n    return typeof label === 'object' && label !== null;\n  }\n\n  isAdditionalInfoObject(): boolean {\n    return (\n      typeof this.cardData.additionalInfo === 'object' &&\n      this.cardData.additionalInfo !== null\n    );\n  }\n\n  getIconText(): string {\n    return this.isIconObject()\n      ? (this.cardData.icon as IconStyle).code\n      : (this.cardData.icon as string);\n  }\n\n  getTitleText(): string {\n    return this.isTitleObject()\n      ? (this.cardData.title as TextStyle).text\n      : (this.cardData.title as string) || '';\n  }\n\n  getValueText(): string {\n    return this.isValueObject()\n      ? (this.cardData.value as ValueSetting).text\n      : (this.cardData.value as string) || '';\n  }\n\n  getLabelText(): string {\n    const label = (this.cardData.value as ValueSetting)?.label;\n    return this.isLabelObject(label)\n      ? (label as LabelSetting).text\n      : (label as string) || '';\n  }\n\n  getAdditionalInfoText(): string {\n    return this.isAdditionalInfoObject()\n      ? (this.cardData.additionalInfo as TextStyle).text\n      : (this.cardData.additionalInfo as string) || '';\n  }\n\n  getIconStyles() {\n    if (this.isIconObject()) {\n      const icon = this.cardData.icon as IconStyle;\n      const shape = icon.shape || 'circular';\n      const borderRadius = shape === 'circular' ? '50%' : '8px';\n\n      return {\n        color: icon.color || PTMetricCardComponent.DEFAULT_ICON_COLOR,\n        fontSize: icon.fontSize || PTMetricCardComponent.DEFAULT_ICON_SIZE,\n        backgroundColor: icon.backgroundColor || 'transparent',\n        borderRadius,\n        padding: '6px',\n        display: 'inline-block',\n      };\n    }\n\n    return {};\n  }\n\n  getTitleStyles() {\n    if (this.isTitleObject()) {\n      const title = this.cardData.title as TextStyle;\n\n      return {\n        color: title.color || PTMetricCardComponent.DEFAULT_TITLE_COLOR,\n        fontSize: title.fontSize || PTMetricCardComponent.DEFAULT_TITLE_SIZE,\n        fontWeight: title.fontWeight || 'normal',\n      };\n    }\n\n    return {};\n  }\n\n  getValueStyles() {\n    if (this.isValueObject()) {\n      const value = this.cardData.value as ValueSetting;\n      const position = value.position || 'left';\n\n      return {\n        color: value.color || PTMetricCardComponent.DEFAULT_VALUE_COLOR,\n        fontSize: value.fontSize || PTMetricCardComponent.DEFAULT_VALUE_SIZE,\n        fontWeight: value.fontWeight || 'bold',\n        textAlign: position,\n        width: '100%',\n        display: 'flex',\n        justifyContent:\n          position === 'center'\n            ? 'center'\n            : position === 'right'\n              ? 'flex-end'\n              : 'flex-start',\n        alignItems: 'center',\n      };\n    }\n\n    return {\n      color: PTMetricCardComponent.DEFAULT_VALUE_COLOR,\n      fontSize: PTMetricCardComponent.DEFAULT_VALUE_SIZE,\n      fontWeight: 'bold',\n      textAlign: 'left',\n      width: '100%',\n      display: 'flex',\n      justifyContent: 'flex-start',\n      alignItems: 'center',\n    };\n  }\n\n  getValueTextStyles() {\n    if (this.isValueObject()) {\n      const value = this.cardData.value as ValueSetting;\n\n      return {\n        textAlign: value.position || 'left',\n      };\n    }\n\n    return {\n      textAlign: 'left',\n    };\n  }\n\n  getLabelStyles(position: 'left' | 'right') {\n    const label = (this.cardData.value as ValueSetting)?.label;\n\n    if (\n      this.isLabelObject(label) &&\n      (label as LabelSetting).position === position\n    ) {\n      return {\n        color:\n          (label as LabelSetting).color ||\n          PTMetricCardComponent.DEFAULT_LABEL_COLOR,\n        fontSize:\n          (label as LabelSetting).fontSize ||\n          PTMetricCardComponent.DEFAULT_LABEL_SIZE,\n        fontWeight: (label as LabelSetting).fontWeight || 'normal',\n      };\n    }\n\n    return {\n      color: PTMetricCardComponent.DEFAULT_LABEL_COLOR,\n      fontSize: PTMetricCardComponent.DEFAULT_LABEL_SIZE,\n      fontWeight: 'normal',\n    };\n  }\n\n  getAdditionalInfoStyles() {\n    if (this.isAdditionalInfoObject()) {\n      const additionalInfo = this.cardData.additionalInfo as TextStyle;\n\n      return {\n        color:\n          additionalInfo.color ||\n          PTMetricCardComponent.DEFAULT_ADDITIONAL_INFO_COLOR,\n        fontSize:\n          additionalInfo.fontSize ||\n          PTMetricCardComponent.DEFAULT_ADDITIONAL_INFO_SIZE,\n        fontWeight: additionalInfo.fontWeight || 'normal',\n      };\n    }\n\n    return {\n      color: PTMetricCardComponent.DEFAULT_ADDITIONAL_INFO_COLOR,\n      fontSize: PTMetricCardComponent.DEFAULT_ADDITIONAL_INFO_SIZE,\n      fontWeight: 'normal',\n    };\n  }\n\n  isLabelOnLeft(): boolean {\n    const label = (this.cardData.value as ValueSetting)?.label;\n\n    return (\n      this.isLabelObject(label) && (label as LabelSetting).position === 'left'\n    );\n  }\n\n  isLabelOnRight(): boolean {\n    const label = (this.cardData.value as ValueSetting)?.label;\n\n    return (\n      this.isLabelObject(label) && (label as LabelSetting).position === 'right'\n    );\n  }\n\n  getMetricCardContainerStyle() {\n    return {\n      minWidth: this.cardData.size?.minWidth || '100%',\n      maxWidth: this.cardData.size?.maxWidth || 'calc(25% - 16px)',\n      width: this.cardData.size?.fixedWidth || 'auto',\n    };\n  }\n\n  getMetricCardStyle() {\n    return {\n      backgroundColor:\n        this.cardData.appearance?.backgroundColor ||\n        PTMetricCardComponent.DEFAULT_BACKGROUND_COLOR,\n      minWidth: this.cardData.size?.minWidth || '100%',\n      maxWidth: this.cardData.size?.maxWidth || 'calc(25% - 16px)',\n      width: this.cardData.size?.fixedWidth || 'auto',\n    };\n  }\n}\n","<div class=\"metric-card-container\" [ngStyle]=\"getMetricCardContainerStyle()\">\n  @if (cardData.verticalLine?.show) {\n    <div\n      class=\"vertical-line\"\n    [ngStyle]=\"{\n      'background-color': cardData.verticalLine?.color || '#5a67d8',\n    }\"\n    ></div>\n  }\n\n  <div class=\"metric-card\" [ngStyle]=\"getMetricCardStyle()\">\n    <div class=\"metric-card-header\">\n      @if (isIconObject()) {\n        <i\n          [ngClass]=\"getIconText()\"\n          [ngStyle]=\"getIconStyles()\"\n        ></i>\n      }\n      @if (!isIconObject()) {\n        <i [ngClass]=\"cardData.icon\"></i>\n      }\n\n      @if (isTitleObject()) {\n        <span\n          class=\"metric-card-header-text\"\n          [ngStyle]=\"getTitleStyles()\"\n          >\n          {{ getTitleText() }}\n        </span>\n      }\n      @if (!isTitleObject()) {\n        <span class=\"metric-card-header-text\">\n          {{ cardData.title }}\n        </span>\n      }\n    </div>\n\n    <div class=\"metric-card-content\">\n      <div class=\"metric-value\" [ngStyle]=\"getValueStyles()\">\n        @if (isLabelOnLeft()) {\n          <span\n            class=\"value-label\"\n            [ngStyle]=\"getLabelStyles('left')\"\n            >\n            {{ getLabelText() }}\n          </span>\n        }\n\n        <span class=\"metric-value-text\" [ngStyle]=\"getValueTextStyles()\">\n          {{ getValueText() }}\n        </span>\n\n        @if (isLabelOnRight()) {\n          <span\n            class=\"value-label\"\n            [ngStyle]=\"getLabelStyles('right')\"\n            >\n            {{ getLabelText() }}\n          </span>\n        }\n      </div>\n\n      @if (cardData.divider?.show) {\n        <div\n          class=\"metric-divider\"\n          [ngStyle]=\"{ backgroundColor: cardData.divider?.color || '#e2e8f0' }\"\n        ></div>\n      }\n\n      @if (isAdditionalInfoObject()) {\n        <div\n          class=\"metric-additional-info\"\n          [ngStyle]=\"getAdditionalInfoStyles()\"\n          >\n          {{ getAdditionalInfoText() }}\n        </div>\n      }\n      @if (!isAdditionalInfoObject()) {\n        <div\n          class=\"metric-additional-info\"\n          [ngStyle]=\"getAdditionalInfoStyles()\"\n          >\n          {{ cardData.additionalInfo }}\n        </div>\n      }\n    </div>\n  </div>\n</div>\n","import { NgModule } from '@angular/core';\nimport { CommonModule } from '@angular/common';\nimport { PTMetricCardComponent } from './pt-metric-card.component';\n\n@NgModule({\n  declarations: [PTMetricCardComponent],\n  imports: [CommonModule],\n  exports: [PTMetricCardComponent],\n})\nexport class PTMetricCardModule {}\n","import { Component, Input } from '@angular/core';\nimport { MetricCardData } from '../models/metric-card-data.model';\n\n@Component({\n    selector: 'pt-metric-card-group',\n    templateUrl: './pt-metric-card-group.component.html',\n    styleUrls: ['./pt-metric-card-group.component.css'],\n    standalone: false\n})\nexport class PTMetricCardGroupComponent {\n  @Input() cardsData: MetricCardData[] = [];\n}\n","<div class=\"metric-card-group\">\n  @for (card of cardsData; track card) {\n    <pt-metric-card\n      [cardData]=\"card\"\n    ></pt-metric-card>\n  }\n</div>\n","import { NgModule } from '@angular/core';\nimport { CommonModule } from '@angular/common';\nimport { PTMetricCardGroupComponent } from './pt-metric-card-group.component';\nimport { PTMetricCardModule } from '../pt-metric-card/pt-metric-card.module';\n\n@NgModule({\n  declarations: [PTMetricCardGroupComponent],\n  imports: [CommonModule, PTMetricCardModule],\n  exports: [PTMetricCardGroupComponent],\n})\nexport class PTMetricCardGroupModule {}\n","import { DOCUMENT } from '@angular/common';\nimport {\n  AfterViewInit,\n  Component,\n  ElementRef,\n  Inject,\n  Input,\n  OnChanges,\n  OnDestroy,\n  SimpleChanges,\n  ViewChild,\n} from '@angular/core';\nimport {\n  Chart,\n  ChartConfiguration,\n  ChartData,\n  ChartDataset,\n  ChartOptions,\n  ChartType,\n  FontSpec,\n  TooltipItem,\n  registerables,\n} from 'chart.js';\nimport ChartDataLabels from 'chartjs-plugin-datalabels';\n\nimport { ChartConfig } from '../models/chart-config.model';\n\ninterface ChartTheme {\n  textColor: string;\n  secondaryTextColor: string;\n  surfaceColor: string;\n  gridColor: string;\n  tooltipBackgroundColor: string;\n  tooltipTextColor: string;\n  tooltipBorderColor: string;\n}\n\n@Component({\n  selector: 'pt-chart',\n  templateUrl: './pt-chart.component.html',\n  styleUrls: ['./pt-chart.component.css'],\n  standalone: false,\n})\nexport class PTChartComponent implements AfterViewInit, OnChanges, OnDestroy {\n  @Input() chartConfig!: ChartConfig;\n\n  @ViewChild('chartCanvas', { static: true })\n  canvasRef!: ElementRef<HTMLCanvasElement>;\n\n  private chart?: Chart;\n  private currentChartType?: ChartType;\n  private viewInitialized = false;\n\n  private resizeObserver?: ResizeObserver;\n  private themeMutationObserver?: MutationObserver;\n  private colorSchemeMediaQuery?: MediaQueryList;\n\n  private readonly colorSchemeChangeListener = (): void => {\n    this.refreshTheme();\n  };\n\n  constructor(@Inject(DOCUMENT) private readonly document: Document) {\n    Chart.register(...registerables, ChartDataLabels);\n  }\n\n  ngAfterViewInit(): void {\n    this.viewInitialized = true;\n\n    this.initializeChart();\n    this.observeContainerResize();\n    this.observeThemeChanges();\n  }\n\n  ngOnChanges(changes: SimpleChanges): void {\n    if (this.viewInitialized && changes['chartConfig'] && this.chartConfig) {\n      this.updateChart();\n    }\n  }\n\n  ngOnDestroy(): void {\n    this.resizeObserver?.disconnect();\n    this.themeMutationObserver?.disconnect();\n\n    this.colorSchemeMediaQuery?.removeEventListener(\n      'change',\n      this.colorSchemeChangeListener,\n    );\n\n    this.destroyChart();\n  }\n\n  get chartContainerStyle(): Record<string, string> {\n    return {\n      width: this.chartConfig?.chartWidth?.trim() || '100%',\n      height: this.chartConfig?.chartHeight?.trim() || '100%',\n    };\n  }\n\n  get chartAriaLabel(): string {\n    return this.chartConfig?.medianTitle?.trim() || 'Graphique de données';\n  }\n\n  initializeChart(): void {\n    if (!this.viewInitialized || !this.chartConfig) {\n      return;\n    }\n\n    const canvas = this.canvasRef.nativeElement;\n\n    this.destroyChart();\n\n    const configuration = this.buildChartConfiguration();\n\n    this.chart = new Chart(canvas, configuration);\n    this.currentChartType = this.chartConfig.type;\n  }\n\n  updateChart(): void {\n    if (!this.viewInitialized || !this.chartConfig) {\n      return;\n    }\n\n    if (!this.chart) {\n      this.initializeChart();\n      return;\n    }\n\n    const requestedType = this.chartConfig.type;\n\n    /*\n     * Chart.js does not safely support changing the root chart type\n     * dynamically. Recreate the chart when the requested type changes.\n     */\n    if (this.currentChartType !== requestedType) {\n      this.initializeChart();\n      return;\n    }\n\n    const configuration = this.buildChartConfiguration();\n\n    this.chart.data = configuration.data;\n\n    if (configuration.options) {\n      this.chart.options = configuration.options;\n    }\n\n    this.chart.update();\n  }\n\n  private buildChartConfiguration(): ChartConfiguration<ChartType> {\n    const chartType = this.chartConfig.type;\n    const theme = this.resolveTheme();\n\n    const defaultOptions = this.buildDefaultOptions(chartType, theme);\n\n    const consumerOptions =\n      (this.chartConfig.options as ChartOptions<ChartType> | undefined) ?? {};\n\n    return {\n      type: chartType,\n      data: this.cloneChartData(this.chartConfig.data),\n      options: this.mergeChartOptions(\n        defaultOptions,\n        consumerOptions,\n        chartType,\n      ),\n    };\n  }\n\n  private buildDefaultOptions(\n    chartType: ChartType,\n    theme: ChartTheme,\n  ): ChartOptions<ChartType> {\n    const isCartesianChart = this.isCartesianChart(chartType);\n    const isCircularChart = this.isCircularChart(chartType);\n\n    const options: ChartOptions<ChartType> = {\n      responsive: true,\n      maintainAspectRatio: false,\n      resizeDelay: 100,\n\n      interaction: {\n        intersect: false,\n        mode: isCartesianChart ? 'index' : 'nearest',\n      },\n\n      animation: {\n        duration: 450,\n        easing: 'easeOutQuart',\n      },\n\n      layout: {\n        padding: {\n          top: 12,\n          right: 12,\n          bottom: 8,\n          left: 12,\n        },\n      },\n\n      plugins: {\n        legend: {\n          display: true,\n          position: 'bottom',\n          align: 'center',\n\n          labels: {\n            color: theme.textColor,\n            usePointStyle: true,\n            pointStyle: 'circle',\n            boxWidth: 9,\n            boxHeight: 9,\n            padding: 18,\n\n            font: {\n              family: this.resolveFontFamily(),\n              size: 12,\n              weight: 500,\n            },\n          },\n        },\n\n        title: {\n          display: Boolean(this.chartConfig.medianTitle?.trim()),\n          text: this.chartConfig.medianTitle?.trim() || '',\n          align: 'start',\n          color: theme.textColor,\n\n          padding: {\n            top: 4,\n            bottom: 18,\n          },\n\n          font: {\n            family: this.resolveFontFamily(),\n            size: 16,\n            weight: 600,\n          },\n        },\n\n        tooltip: {\n          enabled: true,\n          backgroundColor: theme.tooltipBackgroundColor,\n          titleColor: theme.tooltipTextColor,\n          bodyColor: theme.tooltipTextColor,\n          footerColor: theme.secondaryTextColor,\n          borderColor: theme.tooltipBorderColor,\n          borderWidth: 1,\n          cornerRadius: 10,\n          caretSize: 7,\n          caretPadding: 8,\n          padding: 12,\n          boxPadding: 6,\n          usePointStyle: true,\n          displayColors: true,\n\n          titleFont: {\n            family: this.resolveFontFamily(),\n            size: 13,\n            weight: 600,\n          },\n\n          bodyFont: {\n            family: this.resolveFontFamily(),\n            size: 12,\n            weight: 400,\n          },\n\n          callbacks: {\n            label: (context: TooltipItem<ChartType>): string => {\n              return this.buildTooltipLabel(context, isCircularChart);\n            },\n          },\n        },\n\n        datalabels: {\n          display: isCircularChart,\n          color: theme.textColor,\n          anchor: isCircularChart ? 'center' : 'end',\n          align: isCircularChart ? 'center' : 'top',\n          clamp: true,\n          clip: false,\n\n          formatter: (\n            value: unknown,\n            context: {\n              chart: Chart;\n              datasetIndex: number;\n              dataIndex: number;\n            },\n          ): string => {\n            return this.formatDataLabel(\n              value,\n              context.chart,\n              context.datasetIndex,\n              isCircularChart,\n            );\n          },\n\n          font: {\n            family: this.resolveFontFamily(),\n            size: 11,\n            weight: 'bold',\n          },\n\n          textStrokeColor: theme.surfaceColor,\n          textStrokeWidth: isCircularChart ? 2 : 0,\n        },\n      },\n    };\n\n    if (isCartesianChart) {\n      options.scales = this.buildDefaultScales(theme);\n    }\n\n    return options;\n  }\n\n  private buildDefaultScales(\n    theme: ChartTheme,\n  ): ChartOptions<ChartType>['scales'] {\n    const commonTickFont: Partial<FontSpec> = {\n      family: this.resolveFontFamily(),\n      size: 11,\n      weight: 400,\n    };\n\n    return {\n      x: {\n        display: true,\n        beginAtZero: false,\n\n        border: {\n          display: false,\n        },\n\n        grid: {\n          display: false,\n          color: theme.gridColor,\n          drawTicks: false,\n        },\n\n        ticks: {\n          color: theme.secondaryTextColor,\n          padding: 10,\n          maxRotation: 0,\n          autoSkip: true,\n          font: commonTickFont,\n        },\n\n        title: {\n          display: Boolean(this.chartConfig.xAxisTitle?.trim()),\n          text: this.chartConfig.xAxisTitle?.trim() || '',\n          color: theme.textColor,\n\n          padding: {\n            top: 12,\n          },\n\n          font: {\n            family: this.resolveFontFamily(),\n            size: 12,\n            weight: 600,\n          },\n        },\n      },\n\n      y: {\n        display: true,\n        beginAtZero: this.chartConfig.scales?.y?.ticks?.beginAtZero ?? true,\n        min: this.chartConfig.scales?.y?.min,\n        max: this.chartConfig.scales?.y?.max,\n\n        border: {\n          display: false,\n        },\n\n        grid: {\n          display: true,\n          color: theme.gridColor,\n          drawTicks: false,\n          lineWidth: 1,\n        },\n\n        ticks: {\n          color: theme.secondaryTextColor,\n          padding: 10,\n          stepSize: this.chartConfig.scales?.y?.ticks?.stepSize,\n          font: commonTickFont,\n        },\n\n        title: {\n          display: Boolean(this.chartConfig.yAxisTitle?.trim()),\n          text: this.chartConfig.yAxisTitle?.trim() || '',\n          color: theme.textColor,\n\n          padding: {\n            bottom: 12,\n          },\n\n          font: {\n            family: this.resolveFontFamily(),\n            size: 12,\n            weight: 600,\n          },\n        },\n      },\n    };\n  }\n\n  private mergeChartOptions(\n    defaultOptions: ChartOptions<ChartType>,\n    consumerOptions: ChartOptions<ChartType>,\n    chartType: ChartType,\n  ): ChartOptions<ChartType> {\n    const defaultPlugins = defaultOptions.plugins;\n    const consumerPlugins = consumerOptions.plugins;\n\n    const mergedOptions: ChartOptions<ChartType> = {\n      ...defaultOptions,\n      ...consumerOptions,\n\n      interaction: {\n        ...defaultOptions.interaction,\n        ...consumerOptions.interaction,\n      },\n\n      animation:\n        consumerOptions.animation === false\n          ? false\n          : {\n              ...(typeof defaultOptions.animation === 'object'\n                ? defaultOptions.animation\n                : {}),\n              ...(typeof consumerOptions.animation === 'object'\n                ? consumerOptions.animation\n                : {}),\n            },\n\n      layout: {\n        ...defaultOptions.layout,\n        ...consumerOptions.layout,\n\n        padding:\n          consumerOptions.layout?.padding ?? defaultOptions.layout?.padding,\n      },\n\n      plugins: {\n        ...defaultPlugins,\n        ...consumerPlugins,\n\n        legend: {\n          ...defaultPlugins?.legend,\n          ...consumerPlugins?.legend,\n\n          labels: {\n            ...defaultPlugins?.legend?.labels,\n            ...consumerPlugins?.legend?.labels,\n\n            /*\n             * Chart.js font options may be scriptable callbacks.\n             * Keep the complete consumer value rather than spreading it.\n             */\n            font:\n              consumerPlugins?.legend?.labels?.font ??\n              defaultPlugins?.legend?.labels?.font,\n          },\n        },\n\n        title: {\n          ...defaultPlugins?.title,\n          ...consumerPlugins?.title,\n\n          font: consumerPlugins?.title?.font ?? defaultPlugins?.title?.font,\n        },\n\n        tooltip: {\n          ...defaultPlugins?.tooltip,\n          ...consumerPlugins?.tooltip,\n\n          titleFont:\n            consumerPlugins?.tooltip?.titleFont ??\n            defaultPlugins?.tooltip?.titleFont,\n\n          bodyFont:\n            consumerPlugins?.tooltip?.bodyFont ??\n            defaultPlugins?.tooltip?.bodyFont,\n\n          footerFont:\n            consumerPlugins?.tooltip?.footerFont ??\n            defaultPlugins?.tooltip?.footerFont,\n\n          callbacks: {\n            ...defaultPlugins?.tooltip?.callbacks,\n            ...consumerPlugins?.tooltip?.callbacks,\n          },\n        },\n\n        datalabels: {\n          ...(defaultPlugins?.datalabels as object),\n          ...(consumerPlugins?.datalabels as object),\n        },\n      },\n    };\n\n    if (this.isCartesianChart(chartType)) {\n      mergedOptions.scales = this.mergeScales(\n        defaultOptions.scales,\n        consumerOptions.scales,\n      );\n    } else if (consumerOptions.scales) {\n      mergedOptions.scales = consumerOptions.scales;\n    }\n\n    return mergedOptions;\n  }\n\n  private mergeScales(\n    defaultScales: ChartOptions<ChartType>['scales'],\n    consumerScales: ChartOptions<ChartType>['scales'],\n  ): ChartOptions<ChartType>['scales'] {\n    const defaultScaleRecord =\n      (defaultScales as Record<string, Record<string, unknown>> | undefined) ??\n      {};\n\n    const consumerScaleRecord =\n      (consumerScales as Record<string, Record<string, unknown>> | undefined) ??\n      {};\n\n    const scaleKeys = new Set<string>([\n      ...Object.keys(defaultScaleRecord),\n      ...Object.keys(consumerScaleRecord),\n    ]);\n\n    const mergedScales: Record<string, Record<string, unknown>> = {};\n\n    scaleKeys.forEach((scaleKey) => {\n      const defaultScale = defaultScaleRecord[scaleKey] ?? {};\n      const consumerScale = consumerScaleRecord[scaleKey] ?? {};\n\n      mergedScales[scaleKey] = {\n        ...defaultScale,\n        ...consumerScale,\n\n        border: {\n          ...this.asObject(defaultScale['border']),\n          ...this.asObject(consumerScale['border']),\n        },\n\n        grid: {\n          ...this.asObject(defaultScale['grid']),\n          ...this.asObject(consumerScale['grid']),\n        },\n\n        ticks: {\n          ...this.asObject(defaultScale['ticks']),\n          ...this.asObject(consumerScale['ticks']),\n        },\n\n        title: {\n          ...this.asObject(defaultScale['title']),\n          ...this.asObject(consumerScale['title']),\n        },\n      };\n    });\n\n    return mergedScales as ChartOptions<ChartType>['scales'];\n  }\n\n  private buildTooltipLabel(\n    context: TooltipItem<ChartType>,\n    includePercentage: boolean,\n  ): string {\n    const datasetLabel = context.dataset.label?.trim();\n    const value = this.extractNumericValue(context.raw);\n\n    const formattedValue =\n      value !== null ? this.formatNumber(value) : context.formattedValue;\n\n    const prefix = datasetLabel ? `${datasetLabel}: ` : '';\n\n    if (!includePercentage || value === null) {\n      return `${prefix}${formattedValue}`;\n    }\n\n    const total = this.calculateDatasetTotal(context.dataset);\n\n    if (total <= 0) {\n      return `${prefix}${formattedValue}`;\n    }\n\n    const percentage = ((Math.abs(value) / total) * 100).toFixed(1);\n\n    return `${prefix}${formattedValue} (${percentage} %)`;\n  }\n\n  private formatDataLabel(\n    value: unknown,\n    chart: Chart,\n    datasetIndex: number,\n    displayPercentage: boolean,\n  ): string {\n    const numericValue = this.extractNumericValue(value);\n\n    if (numericValue === null) {\n      return '';\n    }\n\n    if (!displayPercentage) {\n      return this.formatNumber(numericValue);\n    }\n\n    const dataset = chart.data.datasets[datasetIndex];\n\n    if (!dataset) {\n      return '';\n    }\n\n    const total = this.calculateDatasetTotal(dataset);\n\n    if (total <= 0) {\n      return '';\n    }\n\n    const percentage = (Math.abs(numericValue) / total) * 100;\n\n    return percentage >= 1 ? `${percentage.toFixed(1)}%` : '';\n  }\n\n  private calculateDatasetTotal(dataset: ChartDataset<ChartType>): number {\n    return dataset.data.reduce<number>((total, currentValue) => {\n      const numericValue = this.extractNumericValue(currentValue);\n\n      return numericValue !== null ? total + Math.abs(numericValue) : total;\n    }, 0);\n  }\n\n  private extractNumericValue(value: unknown): number | null {\n    if (typeof value === 'number' && Number.isFinite(value)) {\n      return value;\n    }\n\n    if (typeof value === 'string') {\n      const parsedValue = Number(value);\n\n      return Number.isFinite(parsedValue) ? parsedValue : null;\n    }\n\n    if (Array.isArray(value)) {\n      const candidate = value.find(\n        (item) => typeof item === 'number' && Number.isFinite(item),\n      );\n\n      return typeof candidate === 'number' ? candidate : null;\n    }\n\n    if (value && typeof value === 'object') {\n      const point = value as Record<string, unknown>;\n\n      const candidate =\n        point['y'] ?? point['r'] ?? point['value'] ?? point['x'];\n\n      return this.extractNumericValue(candidate);\n    }\n\n    return null;\n  }\n\n  private formatNumber(value: number): string {\n    return new Intl.NumberFormat(undefined, {\n      maximumFractionDigits: 2,\n    }).format(value);\n  }\n\n  private cloneChartData(data: ChartData): ChartData<ChartType> {\n    return {\n      ...data,\n\n      labels: data.labels ? [...data.labels] : undefined,\n\n      xLabels: data.xLabels ? [...data.xLabels] : undefined,\n\n      yLabels: data.yLabels ? [...data.yLabels] : undefined,\n\n      datasets: data.datasets.map((dataset) => ({\n        ...dataset,\n        data: [...dataset.data],\n      })),\n    } as ChartData<ChartType>;\n  }\n\n  private observeContainerResize(): void {\n    if (typeof ResizeObserver === 'undefined') {\n      return;\n    }\n\n    const container = this.canvasRef.nativeElement.parentElement;\n\n    if (!container) {\n      return;\n    }\n\n    this.resizeObserver = new ResizeObserver(() => {\n      this.chart?.resize();\n    });\n\n    this.resizeObserver.observe(container);\n  }\n\n  private observeThemeChanges(): void {\n    const documentElement = this.document.documentElement;\n\n    if (typeof MutationObserver !== 'undefined') {\n      this.themeMutationObserver = new MutationObserver(() => {\n        this.refreshTheme();\n      });\n\n      this.themeMutationObserver.observe(documentElement, {\n        attributes: true,\n        attributeFilter: ['class', 'style', 'data-theme'],\n      });\n\n      if (this.document.body) {\n        this.themeMutationObserver.observe(this.document.body, {\n          attributes: true,\n          attributeFilter: ['class', 'style', 'data-theme'],\n        });\n      }\n    }\n\n    if (typeof window !== 'undefined' && window.matchMedia) {\n      this.colorSchemeMediaQuery = window.matchMedia(\n        '(prefers-color-scheme: dark)',\n      );\n\n      this.colorSchemeMediaQuery.addEventListener(\n        'change',\n        this.colorSchemeChangeListener,\n      );\n    }\n  }\n\n  private refreshTheme(): void {\n    if (!this.chart || !this.chartConfig) {\n      return;\n    }\n\n    const configuration = this.buildChartConfiguration();\n\n    if (configuration.options) {\n      this.chart.options = configuration.options;\n    }\n\n    this.chart.update('none');\n  }\n\n  private resolveTheme(): ChartTheme {\n    const rootStyles = getComputedStyle(this.document.documentElement);\n\n    const bodyStyles = this.document.body\n      ? getComputedStyle(this.document.body)\n      : rootStyles;\n\n    const isDarkMode = this.isDarkMode(rootStyles, bodyStyles);\n\n    return {\n      textColor: this.resolveCssVariable(\n        rootStyles,\n        ['--p-text-color', '--text-color'],\n        isDarkMode ? '#f8fafc' : '#0f172a',\n      ),\n\n      secondaryTextColor: this.resolveCssVariable(\n        rootStyles,\n        [\n          '--p-text-muted-color',\n          '--p-text-secondary-color',\n          '--text-color-secondary',\n        ],\n        isDarkMode ? '#94a3b8' : '#64748b',\n      ),\n\n      surfaceColor: this.resolveCssVariable(\n        rootStyles,\n        [\n          '--p-content-background',\n          '--p-surface-0',\n          '--surface-card',\n          '--surface-ground',\n        ],\n        isDarkMode ? '#0f172a' : '#ffffff',\n      ),\n\n      gridColor: this.resolveCssVariable(\n        rootStyles,\n        ['--p-content-border-color', '--p-surface-border', '--surface-border'],\n        isDarkMode ? 'rgba(148, 163, 184, 0.16)' : 'rgba(15, 23, 42, 0.08)',\n      ),\n\n      tooltipBackgroundColor: this.resolveCssVariable(\n        rootStyles,\n        ['--p-tooltip-background', '--p-surface-900', '--surface-900'],\n        isDarkMode ? 'rgba(15, 23, 42, 0.96)' : 'rgba(15, 23, 42, 0.94)',\n      ),\n\n      tooltipTextColor: this.resolveCssVariable(\n        rootStyles,\n        ['--p-tooltip-color', '--p-surface-0', '--surface-0'],\n        '#f8fafc',\n      ),\n\n      tooltipBorderColor: this.resolveCssVariable(\n        rootStyles,\n        ['--p-content-border-color', '--p-surface-border', '--surface-border'],\n        isDarkMode ? 'rgba(148, 163, 184, 0.35)' : 'rgba(255, 255, 255, 0.18)',\n      ),\n    };\n  }\n\n  private isDarkMode(\n    rootStyles: CSSStyleDeclaration,\n    bodyStyles: CSSStyleDeclaration,\n  ): boolean {\n    const root = this.document.documentElement;\n    const body = this.document.body;\n\n    const darkClassDetected =\n      root.classList.contains('p-dark') ||\n      root.classList.contains('dark') ||\n      root.classList.contains('dark-mode') ||\n      body?.classList.contains('p-dark') ||\n      body?.classList.contains('dark') ||\n      body?.classList.contains('dark-mode') ||\n      root.getAttribute('data-theme') === 'dark' ||\n      body?.getAttribute('data-theme') === 'dark';\n\n    if (darkClassDetected) {\n      return true;\n    }\n\n    const rootColorScheme = rootStyles\n      .getPropertyValue('color-scheme')\n      .trim()\n      .toLowerCase();\n\n    const bodyColorScheme = bodyStyles\n      .getPropertyValue('color-scheme')\n      .trim()\n      .toLowerCase();\n\n    if (rootColorScheme === 'dark' || bodyColorScheme === 'dark') {\n      return true;\n    }\n\n    return (\n      typeof window !== 'undefined' &&\n      window.matchMedia?.('(prefers-color-scheme: dark)').matches === true\n    );\n  }\n\n  private resolveCssVariable(\n    styles: CSSStyleDeclaration,\n    variableNames: string[],\n    fallback: string,\n  ): string {\n    for (const variableName of variableNames) {\n      const value = styles.getPropertyValue(variableName).trim();\n\n      if (value) {\n        return value;\n      }\n    }\n\n    return fallback;\n  }\n\n  private resolveFontFamily(): string {\n    const rootStyles = getComputedStyle(this.document.documentElement);\n\n    return this.resolveCssVariable(\n      rootStyles,\n      ['--p-font-family', '--font-family'],\n      'Inter, ui-sans-serif, system-ui, -apple-system, BlinkMacSystemFont, \"Segoe UI\", sans-serif',\n    );\n  }\n\n  private asObject(value: unknown): Record<string, unknown> {\n    return value !== null && typeof value === 'object'\n      ? (value as Record<string, unknown>)\n      : {};\n  }\n\n  private isCircularChart(chartType: ChartType): boolean {\n    return (\n      chartType === 'pie' ||\n      chartType === 'doughnut' ||\n      chartType === 'polarArea'\n    );\n  }\n\n  private isCartesianChart(chartType: ChartType): boolean {\n    return (\n      chartType === 'bar' ||\n      chartType === 'line' ||\n      chartType === 'scatter' ||\n      chartType === 'bubble'\n    );\n  }\n\n  private destroyChart(): void {\n    this.chart?.destroy();\n    this.chart = undefined;\n    this.currentChartType = undefined;\n  }\n}\n","<div\n  class=\"pt-chart\"\n  [ngStyle]=\"chartContainerStyle\"\n  role=\"img\"\n  [attr.aria-label]=\"chartAriaLabel\"\n>\n  <div class=\"pt-chart__canvas-container\">\n    <canvas #chartCanvas></canvas>\n  </div>\n</div>\n","import { NgModule } from '@angular/core';\nimport { CommonModule } from '@angular/common';\nimport { PTChartComponent } from './pt-chart.component';\n\n@NgModule({\n  declarations: [PTChartComponent],\n  imports: [CommonModule],\n  exports: [PTChartComponent],\n})\nexport class PTChartModule {}\n","import { Component, Input, HostListener } from '@angular/core';\nimport { MenuItem, MenuConfig } from '../models';\n\n@Component({\n    selector: 'pt-menu',\n    templateUrl: './pt-menu.component.html',\n    styleUrls: ['./pt-menu.component.css'],\n    standalone: false\n})\nexport class PTMenuComponent {\n  @Input() config: MenuConfig = {\n    icon: { code: 'pi pi-ellipsis-v', color: '#000', fontSize: '15px' },\n    menuDirection: 'right',\n  };\n\n  private static readonly DEFAULT_TEXT_COLOR = '#000';\n  private static readonly DEFAULT_TEXT_FONT_SIZE = '15px';\n  private static readonly DEFAULT_ICON_COLOR = '#000';\n  private static readonly DEFAULT_ICON_FONT_SIZE = '15px';\n  private static readonly DEFAULT_ICON_CODE = 'pi pi-ellipsis-v';\n\n  private static openMenuInstance: PTMenuComponent | null = null;\n\n  isOpen = false;\n\n  toggleMenu() {\n    if (\n      PTMenuComponent.openMenuInstance &&\n      PTMenuComponent.openMenuInstance !== this\n    ) {\n      PTMenuComponent.openMenuInstance.closeMenu();\n    }\n\n    this.isOpen = !this.isOpen;\n\n    if (this.isOpen) {\n      PTMenuComponent.openMenuInstance = this;\n    } else {\n      PTMenuComponent.openMenuInstance = null;\n    }\n  }\n\n  closeMenu() {\n    this.isOpen = false;\n    if (PTMenuComponent.openMenuInstance === this) {\n      PTMenuComponent.openMenuInstance = null;\n    }\n  }\n\n  getMenuItemIconClass(item: MenuItem): string {\n    // Assuming that icons starting with \"fa\" are FontAwesome icons\n    return typeof item.icon === 'string' ? item.icon : item.icon?.code || '';\n  }\n\n  getMenuItemIconStyles(item: MenuItem) {\n    if (typeof item.icon !== 'string') {\n      return {\n        color: item.icon?.color || PTMenuComponent.DEFAULT_ICON_COLOR,\n        fontSize: item.icon?.fontSize || PTMenuComponent.DEFAULT_ICON_FONT_SIZE,\n      };\n    }\n    return {\n      color: PTMenuComponent.DEFAULT_ICON_COLOR,\n      fontSize: PTMenuComponent.DEFAULT_ICON_FONT_SIZE,\n    };\n  }\n\n  getIconClass(): string {\n    return this.config.icon?.code || PTMenuComponent.DEFAULT_ICON_CODE;\n  }\n\n  getIconStyles() {\n    return {\n      color:\n        this.config.color ||\n        this.config.icon?.color ||\n        PTMenuComponent.DEFAULT_ICON_COLOR,\n      fontSize:\n        this.config.fontSize ||\n        this.config.icon?.fontSize ||\n        PTMenuComponent.DEFAULT_ICON_FONT_SIZE,\n    };\n  }\n\n  getTextStyles(item: MenuItem) {\n    return {\n      color: item.color || PTMenuComponent.DEFAULT_TEXT_COLOR,\n      fontSize: item.fontSize || PTMenuComponent.DEFAULT_TEXT_FONT_SIZE,\n    };\n  }\n\n  onItemClick(item: MenuItem): void {\n    if (item?.disabled) return;\n    if (typeof item?.action === 'function') {\n      item.action();\n    }\n  }\n\n  @HostListener('document:click', ['$event'])\n  onDocumentClick(event: MouseEvent) {\n    const clickedInside = (event.target as HTMLElement).closest('.pt-menu');\n    if (!clickedInside) {\n      this.closeMenu();\n    }\n  }\n}\n","<div\n  [ngClass]=\"{\n    open: isOpen,\n    'menu-left': config.menuDirection === 'left',\n    'menu-right': config.menuDirection === 'right'\n  }\"\n  class=\"pt-menu\"\n  >\n  <i\n    class=\"menu-icon\"\n    (click)=\"toggleMenu()\"\n    [ngClass]=\"getIconClass()\"\n    [ngStyle]=\"getIconStyles()\"\n  ></i>\n  @if (isOpen) {\n    <div class=\"menu-dropdown\">\n      @for (item of config.menuItems; track item) {\n        <div\n          class=\"menu-item\"\n          [class.menu-item-disabled]=\"item.disabled\"\n          [class.menu-item-header]=\"item.isHeader\"\n          (click)=\"onItemClick(item)\"\n          >\n          @if (item.icon) {\n            <i\n              [ngClass]=\"getMenuItemIconClass(item)\"\n              [ngStyle]=\"getMenuItemIconStyles(item)\"\n            ></i>\n          }\n          <span [ngStyle]=\"getTextStyles(item)\">{{ item.text }}</span>\n        </div>\n      }\n    </div>\n  }\n</div>\n","import {\n  AfterViewInit,\n  ChangeDetectorRef,\n  Component,\n  Input,\n} from '@angular/core';\n\nimport { CardConfig, IconStyle, TitleStyle } from '../models';\n\n@Component({\n  selector: 'pt-card',\n  templateUrl: './pt-card.component.html',\n  styleUrls: ['./pt-card.component.css'],\n  standalone: false,\n})\nexport class PTCardComponent implements AfterViewInit {\n  @Input() config: CardConfig = {};\n\n  private static readonly DEFAULT_TITLE_COLOR = 'var(--pt-card-title, #333)';\n  private static readonly DEFAULT_TITLE_FONT_SIZE = '1.5em';\n  private static readonly DEFAULT_ICON_COLOR = 'var(--pt-card-icon, #333)';\n  private static readonly DEFAULT_ICON_FONT_SIZE = '1em';\n  private static readonly DEFAULT_ICON_POSITION: 'left' | 'right' = 'left';\n  private static readonly DEFAULT_TITLE_POSITION = 'left';\n  private static readonly DEFAULT_MENU_POSITION: 'left' | 'right' = 'right';\n  private static readonly DEFAULT_BORDER_COLOR = 'var(--pt-card-border, #ddd)';\n  private static readonly DEFAULT_BORDER_WIDTH = '1px';\n  private static readonly DEFAULT_WIDTH = '100%';\n  private static readonly DEFAULT_HEIGHT = 'auto';\n\n  /**\n   * Padding for the outer card container.\n   */\n  private static readonly DEFAULT_PADDING = '16px';\n\n  /**\n   * Padding for the projected content area.\n   * Keep it 0 by default to avoid double spacing:\n   * card padding + body padding.\n   */\n  private static readonly DEFAULT_BODY_PADDING = '0';\n\n  private static readonly DEFAULT_MARGIN = '16px 0';\n  private static readonly DEFAULT_BORDER_RADIUS = '8px';\n  private static readonly DEFAULT_BOX_SHADOW =\n    'var(--pt-card-shadow, 0 2px 4px rgba(0, 0, 0, 0.1))';\n\n  constructor(private readonly cd: ChangeDetectorRef) {}\n\n  ngAfterViewInit(): void {\n    this.logPatternUrl();\n  }\n\n  private logPatternUrl(): void {\n    if (this.config.pattern?.imageUrl) {\n      console.log(\n        `[PTCardComponent] Identifier: ${this.config.identifier}, Pattern URL: ${this.config.pattern.imageUrl}`,\n      );\n    }\n  }\n\n  updateStyles(): void {\n    this.getCardStyles();\n    this.cd.detectChanges();\n  }\n\n  isTitleObject(): boolean {\n    return typeof this.config.title === 'object';\n  }\n\n  hasTitle(): boolean {\n    return this.config.title !== undefined && this.config.title !== null;\n  }\n\n  getTitleText(): string {\n    return this.isTitleObject()\n      ? (this.config.title as TitleStyle).text\n      : (this.config.title as string);\n  }\n\n  getTitleStyles(): { [key: string]: string } {\n    const title = this.config.title as TitleStyle | undefined;\n\n    const alignMap: { [key: string]: string } = {\n      left: 'flex-start',\n      center: 'center',\n      right: 'flex-end',\n    };\n\n    return {\n      color: title?.color || PTCardComponent.DEFAULT_TITLE_COLOR,\n      fontSize: title?.fontSize || PTCardComponent.DEFAULT_TITLE_FONT_SIZE,\n      '--text-align':\n        alignMap[title?.position || PTCardComponent.DEFAULT_TITLE_POSITION],\n    };\n  }\n\n  getIconClass(): string | null {\n    const icon = (this.config.title as TitleStyle)?.icon;\n\n    return typeof icon === 'string' ? icon : (icon as IconStyle)?.code || null;\n  }\n\n  getIconStyles(): { [key: string]: string } {\n    const icon = (this.config.title as TitleStyle)?.icon;\n\n    if (typeof icon !== 'string') {\n      return {\n        color: icon?.color || PTCardComponent.DEFAULT_ICON_COLOR,\n        fontSize: icon?.fontSize || PTCardComponent.DEFAULT_ICON_FONT_SIZE,\n      };\n    }\n\n    return {\n      color: PTCardComponent.DEFAULT_ICON_COLOR,\n      fontSize: PTCardComponent.DEFAULT_ICON_FONT_SIZE,\n    };\n  }\n\n  getIconPosition(): 'left' | 'right' | null {\n    const icon = (this.config.title as TitleStyle)?.icon;\n\n    if (typeof icon !== 'string' && icon?.position) {\n      return icon.position;\n    }\n\n    return PTCardComponent.DEFAULT_ICON_POSITION;\n  }\n\n  getMenuPosition(): 'left' | 'right' {\n    return this.config.menuPosition || PTCardComponent.DEFAULT_MENU_POSITION;\n  }\n\n  getCardStyles(): { [key: string]: string | number } {\n    const backgroundTransparency = this.config.transparencyPercentage\n      ? parseFloat(this.config.transparencyPercentage) / 100\n      : 1;\n\n    const patternTransparency = this.config.pattern?.transparencyPercentage\n      ? parseFloat(this.config.pattern.transparencyPercentage) / 100\n      : 1;\n\n    const backgroundColor =\n      this.config.backgroundColor && this.config.transparencyPercentage !== '0'\n        ? this.hexToRgba(this.config.backgroundColor, backgroundTransparency)\n        : 'var(--pt-card-bg, transparent)';\n\n    const backgroundImage =\n      this.config.pattern?.imageUrl &&\n      this.config.pattern.transparencyPercentage !== '0'\n        ? `linear-gradient(\n            rgba(var(--pt-card-pattern-overlay-rgb, 255, 255, 255), ${\n              1 - patternTransparency\n            }),\n            rgba(var(--pt-card-pattern-overlay-rgb, 255, 255, 255), ${\n              1 - patternTransparency\n            })\n          ), url('${this.config.pattern.imageUrl}')`\n        : '';\n\n    const patternWidth = this.config.pattern?.width || '100%';\n    const patternHeight = this.config.pattern?.height || 'auto';\n\n    const repeatX = this.config.pattern?.repeatX ? 'repeat' : 'no-repeat';\n    const repeatY = this.config.pattern?.repeatY ? 'repeat' : 'no-repeat';\n    const backgroundRepeat = `${repeatX} ${repeatY}`;\n\n    const backgroundSize = `${patternWidth} ${patternHeight}`;\n    const backgroundPosition = this.config.pattern?.position || 'center';\n\n    const justifyContent =\n      this.config.alignContent === 'center' ? 'center' : 'flex-start';\n\n    const alignItems =\n      this.config.alignContent === 'center' ? 'center' : 'stretch';\n\n    return {\n      display: 'flex',\n      flexDirection: 'column',\n      justifyContent,\n      alignItems,\n      backgroundColor,\n      backgroundImage,\n      backgroundSize,\n      backgroundPosition,\n      backgroundRepeat,\n      color: 'var(--pt-card-text, inherit)',\n      width: this.config.width || PTCardComponent.DEFAULT_WIDTH,\n      height: this.config.height || PTCardComponent.DEFAULT_HEIGHT,\n      border: this.config.noBorder\n        ? 'none'\n        : `solid ${\n            this.config.borderWidth || PTCardComponent.DEFAULT_BORDER_WIDTH\n          } ${this.config.borderColor || PTCardComponent.DEFAULT_BORDER_COLOR}`,\n      padding: this.config.padding ?? PTCardComponent.DEFAULT_PADDING,\n      margin: this.config.margin || PTCardComponent.DEFAULT_MARGIN,\n      borderRadius:\n        this.config.borderRadius || PTCardComponent.DEFAULT_BORDER_RADIUS,\n      boxShadow: this.config.boxShadow || PTCardComponent.DEFAULT_BOX_SHADOW,\n      position: 'relative',\n      zIndex: this.config.zIndex !== undefined ? this.config.zIndex : 'auto',\n    };\n  }\n\n  getBodyStyles(): { [key: string]: string | number } {\n    const justifyContent =\n      this.config.alignBodyContent === 'center' ? 'center' : 'flex-start';\n\n    const alignItems =\n      this.config.alignBodyContent === 'center' ? 'center' : 'stretch';\n\n    return {\n      display: 'flex',\n      flexDirection: 'column',\n      justifyContent,\n      alignItems,\n      flexGrow: 1,\n      maxWidth: '100%',\n      padding: this.config.bodyPadding ?? PTCardComponent.DEFAULT_BODY_PADDING,\n      boxSizing: 'border-box',\n      overflowX: this.isScrollableHorizontal() ? 'auto' : 'hidden',\n      overflowY: this.isScrollableVertical() ? 'auto' : 'hidden',\n      color: 'var(--pt-card-body-text, inherit)',\n    };\n  }\n\n  getHeaderStyles(): { [key: string]: string } {\n    const justifyContent =\n      this.config.alignHeaderContent === 'center' ? 'center' : 'flex-start';\n\n    const alignItems =\n      this.config.alignHeaderContent === 'center' ? 'center' : 'stretch';\n\n    return {\n      display: 'flex',\n      justifyContent,\n      alignItems,\n      marginBottom: '16px',\n      position: 'relative',\n      color: 'var(--pt-card-header-text, inherit)',\n    };\n  }\n\n  isScrollableHorizontal(): boolean {\n    return !!this.config.scrollableHorizontal;\n  }\n\n  isScrollableVertical(): boolean {\n    return !!this.config.scrollableVertical;\n  }\n\n  getCardClass(): string {\n    return this.config.alignContent === 'center' ? 'center-align' : '';\n  }\n\n  getBodyClass(): string {\n    return this.config.alignBodyContent === 'center' ? 'center-align' : '';\n  }\n\n  getHeaderClass(): string {\n    return this.config.alignHeaderContent === 'center' ? 'center-align' : '';\n  }\n\n  private hexToRgba(hex: string, alpha: number): string {\n    const shorthandRegex = /^#?([a-f\\d])([a-f\\d])([a-f\\d])$/i;\n\n    hex = hex.replace(shorthandRegex, (_, r, g, b) => r + r + g + b + b);\n\n    const result = /^#?([a-f\\d]{2})([a-f\\d]{2})([a-f\\d]{2})$/i.exec(hex);\n\n    return result\n      ? `rgba(${parseInt(result[1], 16)}, ${parseInt(\n          result[2],\n          16,\n        )}, ${parseInt(result[3], 16)}, ${alpha})`\n      : hex;\n  }\n}\n","<div\n  class=\"pt-card card\"\n  [ngClass]=\"getCardClass()\"\n  [attr.id]=\"config.identifier\"\n  [ngStyle]=\"getCardStyles()\"\n>\n  <!-- Card Header -->\n  @if (hasTitle()) {\n    <div\n      class=\"card-header\"\n      [ngClass]=\"getHeaderClass()\"\n      [ngStyle]=\"getHeaderStyles()\"\n    >\n      @if (getIconClass() && getIconPosition() === \"left\") {\n        <i\n          class=\"card-header-icon-left\"\n          [ngClass]=\"getIconClass()\"\n          [ngStyle]=\"getIconStyles()\"\n        ></i>\n      }\n\n      <span class=\"card-title\">\n        {{ getTitleText() }}\n      </span>\n\n      @if (getIconClass() && getIconPosition() === \"right\") {\n        <i\n          class=\"card-header-icon-right\"\n          [ngClass]=\"getIconClass()\"\n          [ngStyle]=\"getIconStyles()\"\n        ></i>\n      }\n\n      @if (config.menu) {\n        <pt-menu\n          class=\"card-menu\"\n          [config]=\"config.menu\"\n          [ngClass]=\"{\n            'menu-left': getMenuPosition() === 'left',\n            'menu-right': getMenuPosition() === 'right',\n          }\"\n        ></pt-menu>\n      }\n    </div>\n  }\n\n  <!-- Card Body -->\n  <div class=\"card-body\" [ngClass]=\"getBodyClass()\" [ngStyle]=\"getBodyStyles()\">\n    <ng-content></ng-content>\n  </div>\n</div>\n","import { NgModule } from '@angular/core';\nimport { CommonModule } from '@angular/common';\nimport { PTMenuComponent } from './pt-menu.component';\n\n@NgModule({\n  declarations: [PTMenuComponent],\n  imports: [CommonModule],\n  exports: [PTMenuComponent],\n})\nexport class PTMenuModule {}\n","import { NgModule } from '@angular/core';\nimport { CommonModule } from '@angular/common';\nimport { PTCardComponent } from './pt-card.component';\nimport { PTMenuModule } from '../pt-menu';\n\n@NgModule({\n  declarations: [PTCardComponent],\n  imports: [CommonModule, PTMenuModule],\n  exports: [PTCardComponent],\n})\nexport class PTCardModule {}\n","import { Component, Input, HostListener } from '@angular/core';\nimport { MenuItem, MenuConfig, CardConfig } from '../models';\n\n@Component({\n    selector: 'pt-menu-fancy',\n    templateUrl: './pt-menu-fancy.component.html',\n    styleUrls: ['./pt-menu-fancy.component.css'],\n    standalone: false\n})\nexport class PTMenuFancyComponent {\n  @Input() config: MenuConfig = {\n    icon: { code: 'pi pi-ellipsis-v', color: '#000', fontSize: '15px' },\n    menuDirection: 'right',\n  };\n\n  cardMenuConfig: CardConfig = {\n    noBorder: true,\n    margin: '0',\n    padding: '5px',\n  };\n\n  private static readonly DEFAULT_TEXT_COLOR = '#000';\n  private static readonly DEFAULT_TEXT_FONT_SIZE = '15px';\n  private static readonly DEFAULT_ICON_COLOR = '#000';\n  private static readonly DEFAULT_ICON_FONT_SIZE = '15px';\n  private static readonly DEFAULT_ICON_CODE = 'pi pi-ellipsis-v';\n\n  private static openMenuInstance: PTMenuFancyComponent | null = null;\n\n  isOpen = false;\n\n  toggleMenu() {\n    if (\n      PTMenuFancyComponent.openMenuInstance &&\n      PTMenuFancyComponent.openMenuInstance !== this\n    ) {\n      PTMenuFancyComponent.openMenuInstance.closeMenu();\n    }\n\n    this.isOpen = !this.isOpen;\n\n    if (this.isOpen) {\n      PTMenuFancyComponent.openMenuInstance = this;\n    } else {\n      PTMenuFancyComponent.openMenuInstance = null;\n    }\n  }\n\n  closeMenu() {\n    this.isOpen = false;\n    if (PTMenuFancyComponent.openMenuInstance === this) {\n      PTMenuFancyComponent.openMenuInstance = null;\n    }\n  }\n\n  getMenuItemIconClass(item: MenuItem): string {\n    // Assuming that icons starting with \"fa\" are FontAwesome icons\n    return typeof item.icon === 'string' ? item.icon : item.icon?.code || '';\n  }\n\n  getMenuItemIconStyles(item: MenuItem) {\n    if (typeof item.icon !== 'string') {\n      return {\n        color: item.icon?.color || PTMenuFancyComponent.DEFAULT_ICON_COLOR,\n        fontSize:\n          item.icon?.fontSize || PTMenuFancyComponent.DEFAULT_ICON_FONT_SIZE,\n      };\n    }\n    return {\n      color: PTMenuFancyComponent.DEFAULT_ICON_COLOR,\n      fontSize: PTMenuFancyComponent.DEFAULT_ICON_FONT_SIZE,\n    };\n  }\n\n  getIconClass(): string {\n    return this.config.icon?.code || PTMenuFancyComponent.DEFAULT_ICON_CODE;\n  }\n\n  getIconStyles() {\n    return {\n      color:\n        this.config.color ||\n        this.config.icon?.color ||\n        PTMenuFancyComponent.DEFAULT_ICON_COLOR,\n      fontSize:\n        this.config.fontSize ||\n        this.config.icon?.fontSize ||\n        PTMenuFancyComponent.DEFAULT_ICON_FONT_SIZE,\n    };\n  }\n\n  getTextStyles(item: MenuItem) {\n    return {\n      color: item.color || PTMenuFancyComponent.DEFAULT_TEXT_COLOR,\n      fontSize: item.fontSize || PTMenuFancyComponent.DEFAULT_TEXT_FONT_SIZE,\n    };\n  }\n  isItemDisabled(item: MenuItem): boolean {\n    return !!item?.disabled || !!item?.isHeader || !item?.action;\n  }\n\n  onItemClick(item: MenuItem): void {\n    if (this.isItemDisabled(item)) return;\n    item.action?.();\n    this.closeMenu(); // optional UX: close after click\n  }\n\n  @HostListener('document:click', ['$event'])\n  onDocumentClick(event: MouseEvent) {\n    const clickedInside = (event.target as HTMLElement).closest(\n      '.pt-menu-fancy'\n    );\n    if (!clickedInside) {\n      this.closeMenu();\n    }\n  }\n}\n","<div\n  [ngClass]=\"{\n    open: isOpen,\n    'menu-left': config.menuDirection === 'left',\n    'menu-right': config.menuDirection === 'right'\n  }\"\n  class=\"pt-menu-fancy\"\n  >\n  <i\n    class=\"menu-icon\"\n    (click)=\"toggleMenu()\"\n    [ngClass]=\"getIconClass()\"\n    [ngStyle]=\"getIconStyles()\"\n  ></i>\n\n  @if (isOpen) {\n    <div class=\"menu-dropdown\">\n      <pt-card [config]=\"cardMenuConfig\">\n        @for (item of config.menuItems; track item) {\n          <div\n            class=\"menu-item\"\n            [class.menu-item-disabled]=\"isItemDisabled(item)\"\n            [class.menu-item-header]=\"item.isHeader\"\n            (click)=\"onItemClick(item)\"\n            >\n            @if (getMenuItemIconClass(item)) {\n              <i\n                [ngClass]=\"getMenuItemIconClass(item)\"\n                [ngStyle]=\"getMenuItemIconStyles(item)\"\n              ></i>\n            }\n            <span [ngStyle]=\"getTextStyles(item)\">{{ item.text }}</span>\n          </div>\n        }\n      </pt-card>\n    </div>\n  }\n</div>\n","import {\n  Component,\n  EventEmitter,\n  HostListener,\n  Input,\n  Output,\n  OnInit,\n  OnDestroy,\n  OnChanges,\n  SimpleChanges,\n} from '@angular/core';\n\nimport { Subject, interval } from 'rxjs';\nimport { takeUntil } from 'rxjs/operators';\n\nimport { ImageStyle, NavBarMenuConfig, TextStyle } from '../models';\nimport type {\n  DateFormat,\n  TimeFormat,\n  DateTimePosition,\n  DateTimeSource,\n  NavBarUserMenuItem,\n} from '../models';\n\n@Component({\n  selector: 'pt-nav-bar-menu',\n  templateUrl: './pt-nav-bar-menu.component.html',\n  styleUrls: ['./pt-nav-bar-menu.component.css'],\n  standalone: false,\n})\nexport class PTNavbarMenuComponent implements OnInit, OnDestroy, OnChanges {\n  @Input() navBarMenuConfig: NavBarMenuConfig = {};\n\n  /**\n   * SERVER mode input provided by the host application.\n   */\n  @Input() serverDateTime?: { date: string; time: string } | string;\n\n  @Output() toggleSidebar: EventEmitter<void> = new EventEmitter<void>();\n\n  private destroy$ = new Subject<void>();\n\n  dateTimeText = '';\n\n  isUserMenuOpen = false;\n\n  private dateFormat: DateFormat = 'dd/MM/YYYY';\n  private timeFormat: TimeFormat = 'HH:mm:ss';\n\n  private fixedStart: Date = new Date();\n  private fixedSetAt: Date = new Date();\n\n  manualDateTimeLocal = this.toDateTimeLocalValue(new Date());\n\n  private static readonly DEFAULT_LOGO_URL: string = '';\n  private static readonly DEFAULT_LOGO_ALT_TEXT: string = 'Logo';\n  private static readonly DEFAULT_LOGO_WIDTH: string = '40px';\n  private static readonly DEFAULT_LOGO_HEIGHT: string = 'auto';\n  private static readonly DEFAULT_APP_NAME: string = 'Application';\n  private static readonly DEFAULT_APP_NAME_COLOR: string = '#000';\n  private static readonly DEFAULT_APP_NAME_FONT_SIZE: string = '24px';\n  private static readonly DEFAULT_TRANSPARENCY: string = '100';\n  private static readonly DEFAULT_ICON_COLOR: string = '#333';\n  private static readonly DEFAULT_TOGGLE_BUTTON_ICON: string = 'pi pi-bars';\n  private static readonly DEFAULT_TOGGLE_BUTTON_COLOR: string = '#333';\n\n  ngOnInit(): void {\n    this.applyConfigFormatsAndFixedBase();\n\n    interval(1000)\n      .pipe(takeUntil(this.destroy$))\n      .subscribe(() => this.refreshDateTime());\n\n    this.refreshDateTime();\n  }\n\n  ngOnChanges(changes: SimpleChanges): void {\n    if (changes['navBarMenuConfig']) {\n      this.applyConfigFormatsAndFixedBase();\n    }\n\n    if (changes['serverDateTime'] || changes['navBarMenuConfig']) {\n      this.refreshDateTime();\n    }\n  }\n\n  ngOnDestroy(): void {\n    this.destroy$.next();\n    this.destroy$.complete();\n  }\n\n  @HostListener('document:click')\n  closeUserMenu(): void {\n    this.isUserMenuOpen = false;\n  }\n\n  private applyConfigFormatsAndFixedBase(): void {\n    if (!this.hasDateTime()) {\n      return;\n    }\n\n    const dtCfg = this.navBarMenuConfig.dateTime;\n\n    this.dateFormat = (dtCfg?.dateFormat ?? 'dd/MM/YYYY') as DateFormat;\n    this.timeFormat = (dtCfg?.timeFormat ?? 'HH:mm:ss') as TimeFormat;\n\n    if (this.isFixedMode()) {\n      const base = this.buildFixedBaseDateFromConfig();\n\n      if (base) {\n        this.setFixedDateTime(base);\n      }\n    }\n  }\n\n  // =========================\n  // DateTime helpers\n  // =========================\n\n  hasDateTime(): boolean {\n    return !!this.navBarMenuConfig.dateTime;\n  }\n\n  isFixedMode(): boolean {\n    return !!this.navBarMenuConfig.dateTime?.dateValue;\n  }\n\n  isServerMode(): boolean {\n    const src: DateTimeSource =\n      this.navBarMenuConfig.dateTime?.source ?? 'CLIENT';\n\n    return src === 'SERVER';\n  }\n\n  onManualDateTimeChange(value: string): void {\n    this.manualDateTimeLocal = value;\n\n    const dt = this.fromDateTimeLocalValue(value);\n\n    if (dt) {\n      this.setFixedDateTime(dt);\n    }\n\n    this.refreshDateTime();\n  }\n\n  getDateTimePositionClass(): string {\n    const pos: DateTimePosition =\n      this.navBarMenuConfig.dateTime?.position ?? 'right';\n\n    return `dt-pos-${pos}`;\n  }\n\n  private refreshDateTime(): void {\n    const now = new Date();\n\n    if (this.isFixedMode()) {\n      const displayDate = new Date(\n        this.fixedStart.getTime() + (now.getTime() - this.fixedSetAt.getTime()),\n      );\n\n      this.dateTimeText = this.formatDateTime(\n        displayDate,\n        this.dateFormat,\n        this.timeFormat,\n      );\n\n      return;\n    }\n\n    if (this.isServerMode()) {\n      const formatted = this.normalizeServerDateTime(this.serverDateTime);\n      this.dateTimeText = formatted ?? this.getServerPlaceholder();\n\n      return;\n    }\n\n    this.dateTimeText = this.formatDateTime(\n      now,\n      this.dateFormat,\n      this.timeFormat,\n    );\n  }\n\n  private normalizeServerDateTime(\n    v: { date: string; time: string } | string | undefined,\n  ): string | null {\n    if (!v) {\n      return null;\n    }\n\n    if (typeof v === 'string') {\n      const s = v.trim();\n\n      return s ? s : null;\n    }\n\n    const date = (v.date ?? '').trim();\n    const time = (v.time ?? '').trim();\n\n    if (!date || !time) {\n      return null;\n    }\n\n    return `${date} ${time}`.trim();\n  }\n\n  private getServerPlaceholder(): string {\n    const datePh = '--/--/--';\n    const timePh = this.timeFormat === 'HH:mm' ? '--:--' : '--:--:--';\n\n    return `${datePh} ${timePh}`.trim();\n  }\n\n  private setFixedDateTime(dt: Date): void {\n    this.fixedStart = dt;\n    this.fixedSetAt = new Date();\n    this.manualDateTimeLocal = this.toDateTimeLocalValue(dt);\n  }\n\n  private buildFixedBaseDateFromConfig(): Date | null {\n    const dateValue = this.navBarMenuConfig.dateTime?.dateValue;\n\n    if (!dateValue) {\n      return null;\n    }\n\n    const timeSource =\n      this.fromDateTimeLocalValue(this.manualDateTimeLocal) ?? new Date();\n\n    const parsedDate = this.parseDateByFormat(dateValue, this.dateFormat);\n\n    if (!parsedDate) {\n      return null;\n    }\n\n    parsedDate.setHours(\n      timeSource.getHours(),\n      timeSource.getMinutes(),\n      timeSource.getSeconds(),\n      0,\n    );\n\n    return parsedDate;\n  }\n\n  private parseDateByFormat(value: string, fmt: DateFormat): Date | null {\n    try {\n      if (fmt === 'dd/MM/YYYY') {\n        const [dd, MM, YYYY] = value.split('/').map(Number);\n\n        if (!dd || !MM || !YYYY) {\n          return null;\n        }\n\n        return new Date(YYYY, MM - 1, dd);\n      }\n\n      if (fmt === 'MM/dd/YYYY') {\n        const [MM, dd, YYYY] = value.split('/').map(Number);\n\n        if (!dd || !MM || !YYYY) {\n          return null;\n        }\n\n        return new Date(YYYY, MM - 1, dd);\n      }\n\n      if (fmt === 'YYYY-MM-dd') {\n        const [YYYY, MM, dd] = value.split('-').map(Number);\n\n        if (!dd || !MM || !YYYY) {\n          return null;\n        }\n\n        return new Date(YYYY, MM - 1, dd);\n      }\n\n      return null;\n    } catch {\n      return null;\n    }\n  }\n\n  // =========================\n  // User profile helpers\n  // =========================\n\n  hasUser(): boolean {\n    return !!this.navBarMenuConfig.user;\n  }\n\n  toggleUserMenu(): void {\n    this.isUserMenuOpen = !this.isUserMenuOpen;\n  }\n\n  isInitialsAvatar(): boolean {\n    return this.navBarMenuConfig.user?.avatarMode === 'INITIALS';\n  }\n\n  showProfileInMenu(): boolean {\n    return this.navBarMenuConfig.user?.showProfileInMenu !== false;\n  }\n\n  showProfileLeftOfAvatar(): boolean {\n    return this.navBarMenuConfig.user?.profilePosition === 'LEFT_OF_AVATAR';\n  }\n\n  getUsername(): string {\n    return this.navBarMenuConfig.user?.username?.trim() || '-';\n  }\n\n  getUserFullName(): string {\n    const configuredFullName = this.navBarMenuConfig.user?.fullName?.trim();\n\n    if (configuredFullName) {\n      return configuredFullName;\n    }\n\n    const firstName = this.navBarMenuConfig.user?.firstName?.trim() || '';\n    const lastName = this.navBarMenuConfig.user?.lastName?.trim() || '';\n    const fullName = `${firstName} ${lastName}`.trim();\n\n    return fullName || this.getUsername();\n  }\n\n  getUserInitials(): string {\n    const firstName = this.navBarMenuConfig.user?.firstName?.trim() || '';\n    const lastName = this.navBarMenuConfig.user?.lastName?.trim() || '';\n\n    const firstInitial = firstName.charAt(0);\n    const lastInitial = lastName.charAt(0);\n    const initials = `${firstInitial}${lastInitial}`.toUpperCase();\n\n    if (initials) {\n      return initials;\n    }\n\n    const fullNameParts = this.getUserFullName()\n      .split(' ')\n      .map((item) => item.trim())\n      .filter(Boolean);\n\n    if (fullNameParts.length >= 2) {\n      return `${fullNameParts[0].charAt(0)}${fullNameParts[1].charAt(\n        0,\n      )}`.toUpperCase();\n    }\n\n    const usernameInitial = this.getUsername().charAt(0).toUpperCase();\n\n    return usernameInitial || '?';\n  }\n\n  getUserProfile(): string {\n    return this.navBarMenuConfig.user?.profile?.trim() || '-';\n  }\n\n  getUserAvatarStyles(): { [key: string]: string } {\n    return {\n      backgroundColor:\n        this.navBarMenuConfig.user?.avatarBackgroundColor ?? '#eff6ff',\n      color: this.navBarMenuConfig.user?.avatarTextColor ?? '#2563eb',\n      borderColor: this.navBarMenuConfig.user?.avatarBorderColor ?? '#bfdbfe',\n    };\n  }\n\n  getUserProfileTextStyles(): { [key: string]: string } {\n    const style = this.navBarMenuConfig.user?.profileTextStyle;\n\n    return {\n      color: style?.color ?? '#2563eb',\n      fontSize: style?.fontSize ?? '0.8rem',\n      fontWeight: style?.fontWeight ?? '700',\n    };\n  }\n\n  getUserMenuItems(): NavBarUserMenuItem[] {\n    return (this.navBarMenuConfig.user?.menuItems ?? []).filter((item) => {\n      return item.visible !== false;\n    });\n  }\n\n  hasUserMenuItems(): boolean {\n    return this.getUserMenuItems().length > 0;\n  }\n\n  getUserMenuItemIcon(item: NavBarUserMenuItem): string {\n    return item.icon || '';\n  }\n\n  getUserMenuItemClasses(item: NavBarUserMenuItem): string {\n    const classes = ['navbar-user-menu-item'];\n\n    if (item.severity === 'danger') {\n      classes.push('danger');\n    }\n\n    if (item.disabled) {\n      classes.push('disabled');\n    }\n\n    return classes.join(' ');\n  }\n\n  onUserMenuItemClick(item: NavBarUserMenuItem): void {\n    if (item.disabled) {\n      return;\n    }\n\n    this.isUserMenuOpen = false;\n    item.action?.();\n  }\n\n  // =========================\n  // Formatting utils\n  // =========================\n\n  private pad2(n: number): string {\n    return String(n).padStart(2, '0');\n  }\n\n  private replaceAllCompat(\n    source: string,\n    search: string,\n    replace: string,\n  ): string {\n    return source.split(search).join(replace);\n  }\n\n  private formatDateTime(\n    d: Date,\n    dateFmt: DateFormat,\n    timeFmt: TimeFormat,\n  ): string {\n    const dd = this.pad2(d.getDate());\n    const MM = this.pad2(d.getMonth() + 1);\n    const YYYY = String(d.getFullYear());\n    const HH = this.pad2(d.getHours());\n    const mm = this.pad2(d.getMinutes());\n    const ss = this.pad2(d.getSeconds());\n\n    let dateOut: string = dateFmt;\n    dateOut = this.replaceAllCompat(dateOut, 'dd', dd);\n    dateOut = this.replaceAllCompat(dateOut, 'MM', MM);\n    dateOut = this.replaceAllCompat(dateOut, 'YYYY', YYYY);\n\n    let timeOut: string = timeFmt;\n    timeOut = this.replaceAllCompat(timeOut, 'HH', HH);\n    timeOut = this.replaceAllCompat(timeOut, 'mm', mm);\n    timeOut = this.replaceAllCompat(timeOut, 'ss', ss);\n\n    return `${dateOut} ${timeOut}`.trim();\n  }\n\n  private toDateTimeLocalValue(d: Date): string {\n    const yyyy = d.getFullYear();\n    const MM = this.pad2(d.getMonth() + 1);\n    const dd = this.pad2(d.getDate());\n    const HH = this.pad2(d.getHours());\n    const mm = this.pad2(d.getMinutes());\n    const ss = this.pad2(d.getSeconds());\n\n    return `${yyyy}-${MM}-${dd}T${HH}:${mm}:${ss}`;\n  }\n\n  private fromDateTimeLocalValue(value: string): Date | null {\n    if (!value) {\n      return null;\n    }\n\n    const dt = new Date(value);\n\n    return isNaN(dt.getTime()) ? null : dt;\n  }\n\n  // =========================\n  // Existing navbar helpers\n  // =========================\n\n  isImageStyle(object: any): object is ImageStyle {\n    return typeof object === 'object' && 'imageUrl' in object;\n  }\n\n  isTextStyle(object: any): object is TextStyle {\n    return typeof object === 'object' && 'text' in object;\n  }\n\n  getLogoUrl(): string {\n    return this.isImageStyle(this.navBarMenuConfig.logo)\n      ? this.navBarMenuConfig.logo.imageUrl\n      : PTNavbarMenuComponent.DEFAULT_LOGO_URL;\n  }\n\n  getLogoAltText(): string {\n    return this.isImageStyle(this.navBarMenuConfig.logo)\n      ? this.navBarMenuConfig.logo.altText ||\n          PTNavbarMenuComponent.DEFAULT_LOGO_ALT_TEXT\n      : PTNavbarMenuComponent.DEFAULT_LOGO_ALT_TEXT;\n  }\n\n  getLogoStyles(): { [key: string]: string } {\n    if (this.isImageStyle(this.navBarMenuConfig.logo)) {\n      return {\n        color:\n          this.navBarMenuConfig.logo.color ||\n          PTNavbarMenuComponent.DEFAULT_ICON_COLOR,\n        width:\n          this.navBarMenuConfig.logo.width ||\n          PTNavbarMenuComponent.DEFAULT_LOGO_WIDTH,\n        height:\n          this.navBarMenuConfig.logo.height ||\n          PTNavbarMenuComponent.DEFAULT_LOGO_HEIGHT,\n      };\n    }\n\n    return {};\n  }\n\n  getAppName(): string {\n    return this.isTextStyle(this.navBarMenuConfig.appName)\n      ? this.navBarMenuConfig.appName.text\n      : PTNavbarMenuComponent.DEFAULT_APP_NAME;\n  }\n\n  getAppNameStyles(): { [key: string]: string } {\n    if (this.isTextStyle(this.navBarMenuConfig.appName)) {\n      return {\n        color:\n          this.navBarMenuConfig.appName.color ||\n          PTNavbarMenuComponent.DEFAULT_APP_NAME_COLOR,\n        fontSize:\n          this.navBarMenuConfig.appName.fontSize ||\n          PTNavbarMenuComponent.DEFAULT_APP_NAME_FONT_SIZE,\n      };\n    }\n\n    return {\n      color: PTNavbarMenuComponent.DEFAULT_APP_NAME_COLOR,\n      fontSize: PTNavbarMenuComponent.DEFAULT_APP_NAME_FONT_SIZE,\n    };\n  }\n\n  getNavbarStyles(): { [key: string]: string } {\n    const transparency =\n      this.navBarMenuConfig.pattern?.transparencyPercentage ||\n      PTNavbarMenuComponent.DEFAULT_TRANSPARENCY;\n\n    const imageUrl = this.navBarMenuConfig.pattern?.imageUrl || '';\n    const patternWidth = this.navBarMenuConfig.pattern?.width || '100%';\n    const patternHeight = this.navBarMenuConfig.pattern?.height || 'auto';\n\n    const repeatX = this.navBarMenuConfig.pattern?.repeatX\n      ? 'repeat'\n      : 'no-repeat';\n\n    const repeatY = this.navBarMenuConfig.pattern?.repeatY\n      ? 'repeat'\n      : 'no-repeat';\n\n    const backgroundRepeat = `${repeatX} ${repeatY}`;\n\n    const backgroundPosition =\n      this.navBarMenuConfig.pattern?.position || 'center';\n\n    const backgroundImage = imageUrl\n      ? `linear-gradient(\n        rgba(var(--pt-navbar-pattern-overlay-rgb, 255, 255, 255), ${\n          1 - parseFloat(transparency) / 100\n        }),\n        rgba(var(--pt-navbar-pattern-overlay-rgb, 255, 255, 255), ${\n          1 - parseFloat(transparency) / 100\n        })\n      ), url(${imageUrl})`\n      : '';\n\n    return {\n      backgroundColor: this.navBarMenuConfig.pattern\n        ? 'var(--pt-navbar-pattern-bg, transparent)'\n        : 'var(--pt-navbar-bg, #ffffff)',\n      backgroundImage,\n      backgroundSize: `${patternWidth} ${patternHeight}`,\n      backgroundPosition,\n      backgroundRepeat,\n      color: 'var(--pt-navbar-text, #1f2937)',\n\n      height: this.navBarMenuConfig.height || 'auto',\n      minHeight: this.navBarMenuConfig.minHeight || '56px',\n      paddingTop: this.navBarMenuConfig.paddingTop || '0',\n      paddingBottom: this.navBarMenuConfig.paddingBottom || '0',\n    };\n  }\n\n  toggleMenu(): void {\n    this.toggleSidebar.emit();\n  }\n\n  getToggleButtonIcon(): string {\n    return (\n      this.navBarMenuConfig.toggleButtonIcon ||\n      PTNavbarMenuComponent.DEFAULT_TOGGLE_BUTTON_ICON\n    );\n  }\n\n  getToggleButtonStyles(): { [key: string]: string } {\n    return {\n      color:\n        this.navBarMenuConfig.toggleButtonColor ||\n        'var(--pt-navbar-toggle-color, #333)',\n    };\n  }\n\n  getDateTimeTextStyles(): { [key: string]: string } {\n    const s = this.navBarMenuConfig.dateTime?.textStyle;\n\n    return {\n      color: s?.color ?? 'var(--pt-navbar-datetime-text, #222)',\n      fontSize: s?.fontSize ?? '14px',\n      fontWeight: s?.fontWeight ?? '600',\n    };\n  }\n}\n","<div class=\"pt-nav-bar-menu\" [ngStyle]=\"getNavbarStyles()\">\n  <!-- LEFT -->\n  <div class=\"navbar-left\">\n    <a\n      [routerLink]=\"\n        isImageStyle(navBarMenuConfig.logo)\n          ? navBarMenuConfig.logo.routerLink\n          : '/'\n      \"\n      class=\"logo-link\"\n    >\n      <img\n        [src]=\"getLogoUrl()\"\n        [alt]=\"getLogoAltText()\"\n        [ngStyle]=\"getLogoStyles()\"\n        class=\"navbar-logo\"\n      />\n\n      <span class=\"navbar-title\" [ngStyle]=\"getAppNameStyles()\">\n        {{ getAppName() }}\n      </span>\n    </a>\n\n    <a (click)=\"toggleMenu()\" class=\"toggle-btn\">\n      <i\n        [class]=\"getToggleButtonIcon()\"\n        [ngStyle]=\"getToggleButtonStyles()\"\n      ></i>\n    </a>\n  </div>\n\n  <!-- MIDDLE DateTime -->\n  @if (hasDateTime()) {\n    <div class=\"navbar-middle\" [ngClass]=\"getDateTimePositionClass()\">\n      <div class=\"navbar-datetime\">\n        <span class=\"dt-value\" [ngStyle]=\"getDateTimeTextStyles()\">\n          {{ dateTimeText }}\n        </span>\n\n        @if (isFixedMode()) {\n          <input\n            class=\"dt-input\"\n            type=\"datetime-local\"\n            step=\"1\"\n            [value]=\"manualDateTimeLocal\"\n            (input)=\"onManualDateTimeChange($any($event.target).value)\"\n          />\n        }\n      </div>\n    </div>\n  }\n\n  <!-- RIGHT -->\n  <div class=\"navbar-actions\">\n    <div class=\"navbar-right\">\n      @for (menuConfig of navBarMenuConfig.menus; track menuConfig) {\n        <pt-menu-fancy [config]=\"menuConfig\"></pt-menu-fancy>\n      }\n    </div>\n\n    @if (hasUser()) {\n      <div class=\"navbar-user\" (click)=\"$event.stopPropagation()\">\n        @if (showProfileLeftOfAvatar()) {\n          <div\n            class=\"navbar-user-profile-left\"\n            [ngStyle]=\"getUserProfileTextStyles()\"\n          >\n            {{ getUserProfile() }}\n          </div>\n        }\n\n        <button\n          type=\"button\"\n          class=\"navbar-user-trigger\"\n          (click)=\"toggleUserMenu()\"\n        >\n          <div class=\"navbar-user-avatar\" [ngStyle]=\"getUserAvatarStyles()\">\n            @if (isInitialsAvatar()) {\n              <span>{{ getUserInitials() }}</span>\n            } @else {\n              <i class=\"fa fa-user\"></i>\n            }\n          </div>\n        </button>\n\n        @if (isUserMenuOpen) {\n          <div class=\"navbar-user-menu\">\n            <div class=\"navbar-user-menu-header\">\n              <div\n                class=\"navbar-user-menu-avatar\"\n                [ngStyle]=\"getUserAvatarStyles()\"\n              >\n                @if (isInitialsAvatar()) {\n                  <span>{{ getUserInitials() }}</span>\n                } @else {\n                  <i class=\"fa fa-user\"></i>\n                }\n              </div>\n\n              <div class=\"navbar-user-menu-identity\">\n                <div class=\"navbar-user-menu-name\">\n                  {{ getUserFullName() }}\n                </div>\n\n                @if (showProfileInMenu()) {\n                  <div\n                    class=\"navbar-user-menu-profile\"\n                    [ngStyle]=\"getUserProfileTextStyles()\"\n                  >\n                    {{ getUserProfile() }}\n                  </div>\n                }\n\n                <div class=\"navbar-user-menu-username\">\n                  {{ getUsername() }}\n                </div>\n              </div>\n            </div>\n\n            @if (hasUserMenuItems()) {\n              <div class=\"navbar-user-menu-separator\"></div>\n\n              @for (item of getUserMenuItems(); track item) {\n                @if (item.separatorBefore) {\n                  <div class=\"navbar-user-menu-separator\"></div>\n                }\n\n                <button\n                  type=\"button\"\n                  [class]=\"getUserMenuItemClasses(item)\"\n                  [disabled]=\"item.disabled\"\n                  (click)=\"onUserMenuItemClick(item)\"\n                >\n                  @if (getUserMenuItemIcon(item)) {\n                    <i [class]=\"getUserMenuItemIcon(item)\"></i>\n                  }\n\n                  <span>{{ item.text }}</span>\n                </button>\n              }\n            }\n          </div>\n        }\n      </div>\n    }\n  </div>\n</div>\n","import { NgModule } from '@angular/core';\nimport { CommonModule } from '@angular/common';\nimport { PTMenuFancyComponent } from './pt-menu-fancy.component';\nimport { PTCardModule } from '../pt-card/pt-card.module';\n\n@NgModule({\n  declarations: [PTMenuFancyComponent],\n  imports: [CommonModule, PTCardModule],\n  exports: [PTMenuFancyComponent],\n})\nexport class PTMenuFancyModule {}\n","import { NgModule } from '@angular/core';\nimport { CommonModule } from '@angular/common';\nimport { PTNavbarMenuComponent } from './pt-nav-bar-menu.component';\nimport { RouterModule } from '@angular/router';\nimport { PTMenuFancyModule } from '../pt-menu-fancy';\n\n@NgModule({\n  declarations: [PTNavbarMenuComponent],\n  imports: [CommonModule, RouterModule, PTMenuFancyModule],\n  exports: [PTNavbarMenuComponent],\n})\nexport class PTNavbarMenuModule {}\n","import {\n  AfterViewInit,\n  Component,\n  ElementRef,\n  Input,\n  OnInit,\n  Renderer2,\n} from '@angular/core';\nimport { FormControl, FormGroup } from '@angular/forms';\n\nimport {\n  Badge,\n  CardConfig,\n  FormTextField,\n  Menu,\n  SideMenuBarConfig,\n} from '../models';\nimport { BadgeType, FormInputTypeEnum } from '../enums';\n\n@Component({\n  selector: 'pt-side-bar-menu',\n  templateUrl: './pt-side-bar-menu.component.html',\n  styleUrls: ['./pt-side-bar-menu.component.css'],\n  standalone: false,\n})\nexport class PTSideBarMenuComponent implements OnInit, AfterViewInit {\n  @Input() menuConfig: SideMenuBarConfig = {\n    menus: [],\n    isVisible: true,\n    searchable: true,\n    width: '250px',\n    height: '100vh',\n    scrollable: true,\n    backgroundColor: 'var(--pt-sidebar-bg, #ffffff)',\n    fontColor: 'var(--pt-sidebar-menu-text, #333333)',\n    fontColorSubMenu: 'var(--pt-sidebar-submenu-text, #666666)',\n    hoverColor: 'var(--pt-sidebar-menu-hover-bg, #f1f1f1)',\n    hoverColorSubMenu: 'var(--pt-sidebar-submenu-hover-bg, #e0e0e0)',\n  };\n\n  searchCardConfig: CardConfig = {\n    alignContent: 'center',\n    alignBodyContent: 'center',\n    identifier: 'pt-side-bar-menu/search',\n    backgroundColor: 'var(--pt-sidebar-bg, #ffffff)',\n    width: '250px',\n    height: '72px',\n    padding: '0',\n    bodyPadding: '0',\n    margin: '6px 0px',\n    scrollableVertical: false,\n  };\n\n  cardConfig: CardConfig = {\n    identifier: 'pt-side-bar-menu',\n    backgroundColor: 'var(--pt-sidebar-bg, #ffffff)',\n    padding: '10px 6px',\n    bodyPadding: '0',\n    margin: '6px 0px',\n    width: '250px',\n    height: '100vh',\n    scrollableVertical: true,\n  };\n\n  formGroup: FormGroup = new FormGroup({\n    search: new FormControl(''),\n  });\n\n  searchField: FormTextField = {\n    name: 'search',\n    placeholder: 'Search...',\n    type: FormInputTypeEnum.TEXT,\n    iconClass: 'pi pi-search',\n    iconPosition: 'left',\n    width: '250px',\n    height: '42px',\n  };\n\n  filteredMenus: Menu[] = [];\n\n  constructor(\n    private renderer: Renderer2,\n    private el: ElementRef,\n  ) {}\n\n  ngOnInit(): void {\n    this.initializeConfigs();\n    this.filteredMenus = this.cloneMenus(this.menuConfig.menus);\n\n    if (this.isSearchEnabled()) {\n      this.formGroup\n        .get('search')\n        ?.valueChanges.subscribe((searchTerm: string) => {\n          this.onSearch(searchTerm ?? '');\n        });\n    }\n  }\n\n  ngAfterViewInit(): void {\n    this.applyHoverEffects();\n  }\n\n  private initializeConfigs(): void {\n    const sidebarWidth = this.menuConfig.width || '250px';\n\n    this.cardConfig = {\n      identifier: 'pt-side-bar-menu',\n      backgroundColor:\n        this.menuConfig.backgroundColor || 'var(--pt-sidebar-bg, #ffffff)',\n      width: sidebarWidth,\n      height: this.menuConfig.height || '100vh',\n      scrollableVertical: this.menuConfig.scrollable ?? true,\n      pattern: this.menuConfig.pattern,\n      padding: '10px 6px',\n      bodyPadding: '0',\n      margin: '0',\n      borderColor: 'var(--pt-sidebar-border, #e5e7eb)',\n      boxShadow: 'var(--pt-sidebar-shadow, none)',\n    };\n\n    this.searchCardConfig = {\n      alignContent: 'default',\n      alignBodyContent: 'default',\n      identifier: 'pt-side-bar-menu/search',\n      backgroundColor:\n        this.menuConfig.backgroundColor || 'var(--pt-sidebar-bg, #ffffff)',\n      width: sidebarWidth,\n      height: 'auto',\n      padding: '10px 14px',\n      bodyPadding: '0',\n      margin: '16px 0 8px 0',\n      pattern: this.menuConfig.pattern,\n      scrollableVertical: false,\n      scrollableHorizontal: false,\n      borderColor: 'var(--pt-sidebar-border, #e5e7eb)',\n      boxShadow: 'var(--pt-sidebar-shadow, none)',\n    };\n\n    this.searchField = {\n      ...this.searchField,\n      width: '100%',\n      height: '42px',\n    };\n  }\n\n  isSearchEnabled(): boolean {\n    return this.menuConfig.searchable !== false;\n  }\n\n  toggleMenu(item: Menu, event: Event): void {\n    item.isExpanded = !item.isExpanded;\n    event.preventDefault();\n  }\n\n  getChevronClass(item: Menu): string {\n    return item.isExpanded ? 'fa fa-chevron-down' : 'fa fa-chevron-right';\n  }\n\n  hasChildren(item: Menu | null | undefined): boolean {\n    return !!item?.children?.length;\n  }\n\n  getBadgeStyles(badge: Badge): { [key: string]: string } {\n    const defaultColors = this.getDefaultBadgeColors(\n      badge.type || BadgeType.Info,\n    );\n\n    return {\n      color: badge.color || defaultColors.color,\n      backgroundColor: badge.backgroundColor || defaultColors.backgroundColor,\n      padding: '2px 8px',\n      borderRadius: '5px',\n      fontSize: '12px',\n    };\n  }\n\n  getDefaultBadgeColors(type: BadgeType): {\n    color: string;\n    backgroundColor: string;\n  } {\n    switch (type) {\n      case BadgeType.Info:\n        return {\n          color: 'var(--pt-sidebar-badge-info-text, #ffffff)',\n          backgroundColor: 'var(--pt-sidebar-badge-info-bg, #17a2b8)',\n        };\n\n      case BadgeType.Danger:\n        return {\n          color: 'var(--pt-sidebar-badge-danger-text, #ffffff)',\n          backgroundColor: 'var(--pt-sidebar-badge-danger-bg, #dc3545)',\n        };\n\n      case BadgeType.Warning:\n        return {\n          color: 'var(--pt-sidebar-badge-warning-text, #ffffff)',\n          backgroundColor: 'var(--pt-sidebar-badge-warning-bg, #ffc107)',\n        };\n\n      default:\n        return {\n          color: 'var(--pt-sidebar-badge-default-text, #ffffff)',\n          backgroundColor: 'var(--pt-sidebar-badge-default-bg, #6c757d)',\n        };\n    }\n  }\n\n  onSearch(searchTerm: string): void {\n    const value = searchTerm.trim().toLowerCase();\n\n    if (!value) {\n      this.filteredMenus = this.cloneMenus(this.menuConfig.menus);\n      this.collapseAllMenus(this.filteredMenus);\n      return;\n    }\n\n    this.filteredMenus = this.cloneMenus(this.menuConfig.menus)\n      .map((menu) => this.searchInMenu(menu, value))\n      .filter(Boolean) as Menu[];\n  }\n\n  private searchInMenu(menu: Menu, searchTerm: string): Menu | null {\n    const isMatch = (menu.label || '').toLowerCase().includes(searchTerm);\n\n    const matchingChildren = (menu.children || [])\n      .map((child) => this.searchInMenu(child, searchTerm))\n      .filter(Boolean) as Menu[];\n\n    if (matchingChildren.length > 0) {\n      menu.children = matchingChildren;\n      menu.isExpanded = true;\n      return menu;\n    }\n\n    return isMatch ? menu : null;\n  }\n\n  private collapseAllMenus(menus: Menu[]): void {\n    menus.forEach((menu) => {\n      menu.isExpanded = false;\n\n      if (menu.children?.length) {\n        this.collapseAllMenus(menu.children);\n      }\n    });\n  }\n\n  private cloneMenus(menus: Menu[]): Menu[] {\n    return (menus || []).map((menu) => ({\n      ...menu,\n      children: menu.children ? this.cloneMenus(menu.children) : undefined,\n    }));\n  }\n\n  getMenuItemStyles(): { [key: string]: string } {\n    return {\n      color:\n        this.menuConfig.fontColor || 'var(--pt-sidebar-menu-text, #333333)',\n    };\n  }\n\n  getMenuLinkStyles(): { [key: string]: string } {\n    return {\n      color:\n        this.menuConfig.fontColor || 'var(--pt-sidebar-menu-text, #333333)',\n      textDecoration: 'none',\n      borderRadius: '8px',\n      padding: '10px 15px',\n      fontSize: '16px',\n      transition: 'background-color 0.2s, color 0.2s',\n      display: 'flex',\n      alignItems: 'center',\n    };\n  }\n\n  getSubMenuLinkStyles(level = 1): { [key: string]: string } {\n    return {\n      color:\n        this.menuConfig.fontColorSubMenu ||\n        this.menuConfig.fontColor ||\n        'var(--pt-sidebar-submenu-text, #666666)',\n      textDecoration: 'none',\n      borderRadius: '5px',\n      padding: level === 1 ? '5px 10px' : '4px 10px',\n      transition: 'background-color 0.2s, color 0.2s',\n      display: 'flex',\n      alignItems: 'center',\n      fontSize: level === 1 ? '14px' : '13px',\n    };\n  }\n\n  getMenuHoverBackground(): string {\n    return (\n      this.menuConfig.hoverColor || 'var(--pt-sidebar-menu-hover-bg, #f1f1f1)'\n    );\n  }\n\n  getSubMenuHoverBackground(): string {\n    return (\n      this.menuConfig.hoverColorSubMenu ||\n      this.menuConfig.hoverColor ||\n      'var(--pt-sidebar-submenu-hover-bg, #f1f1f1)'\n    );\n  }\n\n  getMenuHoverColor(): string {\n    return (\n      this.menuConfig.fontColor || 'var(--pt-sidebar-menu-hover-text, #111111)'\n    );\n  }\n\n  getSubMenuHoverColor(): string {\n    return (\n      this.menuConfig.fontColorSubMenu ||\n      this.menuConfig.fontColor ||\n      'var(--pt-sidebar-submenu-hover-text, #000000)'\n    );\n  }\n\n  private applyHoverEffects(): void {\n    const menuLinks =\n      this.el.nativeElement.querySelectorAll('.menu-link') ?? [];\n\n    const submenuLinks =\n      this.el.nativeElement.querySelectorAll('.submenu-link') ?? [];\n\n    menuLinks.forEach((link: HTMLElement) => {\n      this.renderer.listen(link, 'mouseenter', () => {\n        this.renderer.setStyle(\n          link,\n          'background-color',\n          this.getMenuHoverBackground(),\n        );\n        this.renderer.setStyle(link, 'color', this.getMenuHoverColor());\n      });\n\n      this.renderer.listen(link, 'mouseleave', () => {\n        this.renderer.removeStyle(link, 'background-color');\n        this.renderer.setStyle(\n          link,\n          'color',\n          this.menuConfig.fontColor || 'var(--pt-sidebar-menu-text, #333333)',\n        );\n      });\n    });\n\n    submenuLinks.forEach((link: HTMLElement) => {\n      this.renderer.listen(link, 'mouseenter', () => {\n        this.renderer.setStyle(\n          link,\n          'background-color',\n          this.getSubMenuHoverBackground(),\n        );\n        this.renderer.setStyle(link, 'color', this.getSubMenuHoverColor());\n      });\n\n      this.renderer.listen(link, 'mouseleave', () => {\n        this.renderer.removeStyle(link, 'background-color');\n        this.renderer.setStyle(\n          link,\n          'color',\n          this.menuConfig.fontColorSubMenu ||\n            this.menuConfig.fontColor ||\n            'var(--pt-sidebar-submenu-text, #666666)',\n        );\n      });\n    });\n  }\n}\n","<div class=\"pt-side-bar-menu\">\n  @if (isSearchEnabled()) {\n    <pt-card\n      [config]=\"searchCardConfig\"\n      [ngClass]=\"{ 'sidebar-hidden': menuConfig.isVisible === false }\"\n    >\n      <div class=\"search-input\">\n        <pt-text-input\n          [formGroup]=\"formGroup\"\n          [formField]=\"searchField\"\n        ></pt-text-input>\n      </div>\n    </pt-card>\n  }\n\n  <pt-card\n    [config]=\"cardConfig\"\n    [ngClass]=\"{ 'sidebar-hidden': menuConfig.isVisible === false }\"\n  >\n    <ul class=\"menu-list\">\n      <ng-container\n        *ngTemplateOutlet=\"\n          recursiveMenu;\n          context: { $implicit: filteredMenus, level: 0 }\n        \"\n      ></ng-container>\n    </ul>\n  </pt-card>\n</div>\n\n<ng-template #recursiveMenu let-menus let-level=\"level\">\n  @for (item of menus; track item) {\n    <li\n      class=\"menu-item\"\n      [ngClass]=\"{\n        'menu-item-expanded': item.isExpanded,\n        'submenu-level-item': level > 0,\n      }\"\n      [attr.data-level]=\"level\"\n      [ngStyle]=\"getMenuItemStyles()\"\n    >\n      @if (!hasChildren(item)) {\n        <a\n          [routerLink]=\"item.url\"\n          [class.menu-link]=\"level === 0\"\n          [class.submenu-link]=\"level > 0\"\n          [ngStyle]=\"\n            level === 0 ? getMenuLinkStyles() : getSubMenuLinkStyles(level)\n          \"\n        >\n          <i [ngClass]=\"item.icon\"></i>\n\n          <span [class.submenu-title]=\"level > 0\">\n            {{ item.label }}\n          </span>\n\n          @if (item.badge) {\n            <span [ngStyle]=\"getBadgeStyles(item.badge)\" class=\"badge\">\n              {{ item.badge.count }}\n            </span>\n          }\n        </a>\n      }\n\n      @if (hasChildren(item)) {\n        <a\n          href=\"#\"\n          [class.menu-link]=\"level === 0\"\n          [class.submenu-link]=\"level > 0\"\n          (click)=\"toggleMenu(item, $event)\"\n          [ngStyle]=\"\n            level === 0 ? getMenuLinkStyles() : getSubMenuLinkStyles(level)\n          \"\n        >\n          <i [ngClass]=\"item.icon\"></i>\n\n          <span [class.submenu-title]=\"level > 0\">\n            {{ item.label }}\n          </span>\n\n          @if (item.badge) {\n            <span [ngStyle]=\"getBadgeStyles(item.badge)\" class=\"badge\">\n              {{ item.badge.count }}\n            </span>\n          }\n\n          <i [ngClass]=\"getChevronClass(item)\" class=\"chevron\"></i>\n        </a>\n      }\n\n      @if (hasChildren(item)) {\n        <div class=\"submenu-wrapper\" [class.expanded]=\"item.isExpanded\">\n          <ul\n            class=\"submenu-list\"\n            [ngClass]=\"{\n              'submenu-list-root': level === 0,\n              'submenu-list-nested': level > 0,\n            }\"\n          >\n            <ng-container\n              *ngTemplateOutlet=\"\n                recursiveMenu;\n                context: { $implicit: item.children, level: level + 1 }\n              \"\n            ></ng-container>\n          </ul>\n        </div>\n      }\n    </li>\n  }\n</ng-template>\n","import { NgModule } from '@angular/core';\nimport { CommonModule } from '@angular/common';\nimport { PTSideBarMenuComponent } from './pt-side-bar-menu.component';\nimport { RouterModule } from '@angular/router';\nimport { PTCardModule } from '../pt-card';\nimport { PTTextInputModule } from '../pt-text-input';\n\n@NgModule({\n  declarations: [PTSideBarMenuComponent],\n  imports: [CommonModule, RouterModule, PTCardModule, PTTextInputModule],\n  exports: [PTSideBarMenuComponent],\n})\nexport class PTSideBarMenuModule {}\n","import { Component, Input } from '@angular/core';\nimport { FooterConfig, CardConfig } from '../models';\n\n@Component({\n  selector: 'pt-footer',\n  templateUrl: './pt-footer.component.html',\n  styleUrls: ['./pt-footer.component.css'],\n  standalone: false,\n})\nexport class PTFooterComponent {\n  @Input() footerConfig: FooterConfig = {\n    appName: 'Default App',\n    version: '1.0.0',\n    productionYear: new Date().getFullYear(),\n  };\n\n  private readonly defaultFooterCardConfig: CardConfig = {\n    backgroundColor: '#f8f8f8',\n    width: '100%',\n    height: 'auto',\n    scrollableVertical: false,\n    scrollableHorizontal: false,\n    padding: '0',\n    margin: '0',\n    bodyPadding: '0',\n  };\n\n  getCurrentYear(): number {\n    return new Date().getFullYear();\n  }\n\n  getCardConfig(): CardConfig {\n    return {\n      ...this.defaultFooterCardConfig,\n      ...(this.footerConfig.cardConfig ?? {}),\n      padding: this.footerConfig.cardConfig?.padding ?? '0',\n      margin: this.footerConfig.cardConfig?.margin ?? '0',\n      bodyPadding: this.footerConfig.cardConfig?.bodyPadding ?? '0',\n    };\n  }\n\n  displayYears(): string {\n    const currentYear = this.getCurrentYear();\n    const productionYear = this.footerConfig.productionYear;\n\n    return productionYear === currentYear\n      ? `${currentYear}`\n      : `${productionYear} - ${currentYear}`;\n  }\n}\n","<pt-card [config]=\"getCardConfig()\" class=\"footer-card\">\n  <footer class=\"footer\">\n    <p>\n      {{ footerConfig.appName }} V {{ footerConfig.version }}\n      <br />\n      &copy; {{ displayYears() }} All rights reserved.\n    </p>\n  </footer>\n</pt-card>\n","import { Injectable } from '@angular/core';\nimport { NavigationEnd, Router } from '@angular/router';\nimport { filter } from 'rxjs/operators';\nimport { MenuItem } from 'primeng/api';\nimport { BehaviorSubject } from 'rxjs';\nimport { Menu } from '../models';\n\n@Injectable({\n  providedIn: 'root',\n})\nexport class PTBreadCrumbService {\n  private _breadcrumb = new BehaviorSubject<MenuItem[]>([]);\n  breadcrumb$ = this._breadcrumb.asObservable();\n  private menuData: any[] = [];\n\n  constructor(private router: Router) {\n    this.router.events\n      .pipe(\n        filter(\n          (event): event is NavigationEnd => event instanceof NavigationEnd\n        )\n      )\n      .subscribe((event: NavigationEnd) => {\n        let urlParts = event.urlAfterRedirects.split('/');\n        urlParts.splice(0, 1);\n        let urlWithoutContext = urlParts.join('/');\n        let newBreadcrumb = this.createBreadcrumb(urlWithoutContext);\n        this._breadcrumb.next(newBreadcrumb);\n      });\n  }\n\n  // Method to set menuData\n  setMenuData(menuData: any[]) {\n    this.menuData = menuData;\n  }\n\n  createBreadcrumb(url: string = '', breadcrumbs: MenuItem[] = []): MenuItem[] {\n    if (!url) {\n      return breadcrumbs;\n    }\n\n    const pathSegments = url.split('/').filter((segment) => segment);\n\n    return this.buildParentBreadcrumbs(\n      this.menuData,\n      pathSegments,\n      breadcrumbs\n    );\n  }\n\n  private buildParentBreadcrumbs(\n    menuData: any[],\n    pathSegments: string[],\n    breadcrumbs: MenuItem[]\n  ): MenuItem[] {\n    if (pathSegments.length === 0) {\n      return breadcrumbs;\n    }\n\n    const currentSegment = pathSegments.shift();\n\n    const currentMenu = menuData.find(\n      (menu) => menu.url === currentSegment || menu.url.endsWith(currentSegment)\n    );\n\n    if (currentMenu) {\n      breadcrumbs.push({ label: currentMenu.label, url: currentMenu.url });\n\n      if (\n        currentMenu.children &&\n        currentMenu.children.length > 0 &&\n        pathSegments.length > 0\n      ) {\n        return this.buildChildBreadcrumbs(\n          currentMenu.children,\n          pathSegments,\n          breadcrumbs,\n          currentSegment || ''\n        );\n      }\n    }\n\n    return breadcrumbs;\n  }\n\n  private buildChildBreadcrumbs(\n    menuData: Menu[],\n    pathSegments: string[],\n    breadcrumbs: MenuItem[],\n    currentUrl: string\n  ): MenuItem[] {\n    if (pathSegments.length === 0) {\n      return breadcrumbs;\n    }\n\n    const currentSegment = pathSegments.shift();\n    currentUrl = `/${currentUrl}/${currentSegment}`;\n\n    const currentMenu = menuData.find((menu) => menu.url === currentUrl);\n\n    if (currentMenu) {\n      breadcrumbs.push({ label: currentMenu.label, url: currentMenu.url });\n\n      if (\n        currentMenu.children &&\n        currentMenu.children.length > 0 &&\n        pathSegments.length > 0\n      ) {\n        return this.buildChildBreadcrumbs(\n          currentMenu.children,\n          pathSegments,\n          breadcrumbs,\n          currentUrl\n        );\n      }\n    } else {\n      const parentMenu = menuData.find(\n        (menu) =>\n          menu.children &&\n          menu.children.some((child) => child.url === currentUrl)\n      );\n      if (parentMenu && parentMenu.children) {\n        const childMenu = parentMenu.children.find(\n          (child: Menu) => child.url === currentUrl\n        );\n        if (childMenu) {\n          breadcrumbs.push({ label: parentMenu.label, url: parentMenu.url });\n          breadcrumbs.push({ label: childMenu.label, url: childMenu.url });\n\n          if (\n            childMenu.children &&\n            childMenu.children.length > 0 &&\n            pathSegments.length > 0\n          ) {\n            return this.buildChildBreadcrumbs(\n              childMenu.children,\n              pathSegments,\n              breadcrumbs,\n              currentUrl\n            );\n          }\n        }\n      }\n    }\n\n    return breadcrumbs;\n  }\n}\n","import {\n  Component,\n  Input,\n  OnInit,\n  OnDestroy,\n  Renderer2,\n  ElementRef,\n  AfterViewInit,\n} from '@angular/core';\nimport { MenuItem } from 'primeng/api';\nimport { Subscription } from 'rxjs';\nimport { PTBreadCrumbService } from './pt-bread-crumb.service';\nimport { BreadCrumbConfig } from '../models/bread-crumb-config.model';\n\n@Component({\n    selector: 'pt-bread-crumb',\n    templateUrl: './pt-bread-crumb.component.html',\n    styleUrls: ['./pt-bread-crumb.component.css'],\n    standalone: false\n})\nexport class PTBreadCrumbComponent implements OnInit, OnDestroy, AfterViewInit {\n  @Input() breadCrumbConfig!: BreadCrumbConfig;\n  items: MenuItem[] | undefined;\n  home: MenuItem | undefined;\n  breadCrumbSubscription!: Subscription;\n\n  constructor(\n    private breadcrumbService: PTBreadCrumbService,\n    private renderer: Renderer2,\n    private el: ElementRef\n  ) {}\n\n  ngOnInit(): void {\n    this.home = { icon: 'pi pi-home', routerLink: 'dashboard' };\n\n    // Pass the input menuData to the service\n    this.breadcrumbService.setMenuData(this.breadCrumbConfig.menuData);\n\n    this.breadCrumbSubscription = this.breadcrumbService.breadcrumb$.subscribe(\n      (breadcrumb) => {\n        this.items = breadcrumb;\n      }\n    );\n  }\n\n  ngAfterViewInit(): void {\n    this.applyBackgroundStyles();\n  }\n\n  ngOnDestroy(): void {\n    if (this.breadCrumbSubscription) {\n      this.breadCrumbSubscription.unsubscribe();\n    }\n  }\n\n  applyBackgroundStyles() {\n    const transparency =\n      this.breadCrumbConfig.pattern?.transparencyPercentage || '100';\n    const backgroundImage = this.breadCrumbConfig.pattern?.imageUrl\n      ? `linear-gradient(rgba(255, 255, 255, ${\n          1 - parseFloat(transparency) / 100\n        }), rgba(255, 255, 255, ${1 - parseFloat(transparency) / 100})), url('${\n          this.breadCrumbConfig.pattern.imageUrl\n        }')`\n      : '';\n\n    // Delay to ensure that the element is fully rendered before applying styles\n    setTimeout(() => {\n      const breadcrumbNav = this.el.nativeElement.querySelector(\n        'nav.p-breadcrumb.p-component'\n      );\n\n      if (breadcrumbNav) {\n        this.renderer.setStyle(\n          breadcrumbNav,\n          'background-image',\n          backgroundImage\n        );\n      }\n    });\n  }\n}\n","@if (items && items.length > 0) {\n  <div\n    class=\"pt-bread-crumb breadcrumb-container\"\n    >\n    <p-breadcrumb class=\"max-w-full\" [model]=\"items\" [home]=\"home\"></p-breadcrumb>\n  </div>\n}\n","import { Component, EventEmitter, Input, OnInit, Output } from '@angular/core';\n\nimport { PageSkeletonConfig } from '../models';\n\n@Component({\n  selector: 'pt-page-skeleton',\n  templateUrl: './pt-page-skeleton.component.html',\n  styleUrls: ['./pt-page-skeleton.component.css'],\n  standalone: false,\n})\nexport class PTPageSkeletonComponent implements OnInit {\n  @Input() pageSkeletonConfig!: PageSkeletonConfig;\n\n  @Input() serverDateTime?: { date: string; time: string } | string;\n\n  @Output() toggleSidebar: EventEmitter<void> = new EventEmitter<void>();\n\n  isSidebarVisible = true;\n\n  ngOnInit(): void {\n    this.initializeBackgroundCardConfig();\n    this.initializeContentCardConfig();\n  }\n\n  onToggleSidebar(): void {\n    this.isSidebarVisible = !this.isSidebarVisible;\n    this.toggleSidebar.emit();\n  }\n\n  private initializeBackgroundCardConfig(): void {\n    this.pageSkeletonConfig.backgroundCardConfig = {\n      identifier: 'pt-page-skeleton/background',\n      noBorder: this.pageSkeletonConfig.backgroundCardConfig?.noBorder ?? true,\n      backgroundColor:\n        this.pageSkeletonConfig.backgroundCardConfig?.backgroundColor ||\n        'var(--pt-page-skeleton-bg, #ffffff)',\n      padding: this.pageSkeletonConfig.backgroundCardConfig?.padding || '20px',\n      margin: this.pageSkeletonConfig.backgroundCardConfig?.margin || '10px',\n      borderColor:\n        this.pageSkeletonConfig.backgroundCardConfig?.borderColor ||\n        'var(--pt-page-skeleton-border, transparent)',\n      boxShadow:\n        this.pageSkeletonConfig.backgroundCardConfig?.boxShadow ||\n        'var(--pt-page-skeleton-shadow, none)',\n      ...this.pageSkeletonConfig.backgroundCardConfig,\n    };\n  }\n\n  private initializeContentCardConfig(): void {\n    this.pageSkeletonConfig.contentCardConfig = {\n      identifier: 'pt-page-skeleton/content',\n      noBorder: this.pageSkeletonConfig.contentCardConfig?.noBorder ?? false,\n      backgroundColor:\n        this.pageSkeletonConfig.contentCardConfig?.backgroundColor ||\n        'var(--pt-page-skeleton-content-bg, #f0f0f0)',\n      padding: this.pageSkeletonConfig.contentCardConfig?.padding || '15px',\n      borderColor:\n        this.pageSkeletonConfig.contentCardConfig?.borderColor ||\n        'var(--pt-page-skeleton-content-border, #e5e7eb)',\n      boxShadow:\n        this.pageSkeletonConfig.contentCardConfig?.boxShadow ||\n        'var(--pt-page-skeleton-content-shadow, none)',\n      scrollableVertical: true,\n      scrollableHorizontal: true,\n      ...this.pageSkeletonConfig.contentCardConfig,\n    };\n  }\n}\n","<pt-card [config]=\"pageSkeletonConfig.backgroundCardConfig!\">\n  <!-- Navbar -->\n  <pt-nav-bar-menu\n    [navBarMenuConfig]=\"pageSkeletonConfig.navBarMenuConfig\"\n    [serverDateTime]=\"serverDateTime\"\n    (toggleSidebar)=\"onToggleSidebar()\"\n  ></pt-nav-bar-menu>\n\n  <div class=\"main-content\">\n    <!-- Sidebar -->\n    @if (isSidebarVisible) {\n      <pt-side-bar-menu\n        [menuConfig]=\"pageSkeletonConfig.sideMenuBarConfig\"\n        class=\"sidebar\"\n      ></pt-side-bar-menu>\n    }\n\n    <!-- Main View Area -->\n    <div class=\"content-area\" [ngClass]=\"{ 'full-width': !isSidebarVisible }\">\n      <pt-card [config]=\"pageSkeletonConfig.contentCardConfig\">\n        <!-- Breadcrumb -->\n        @if (pageSkeletonConfig.breadCrumbConfig) {\n          <pt-bread-crumb\n            [breadCrumbConfig]=\"pageSkeletonConfig.breadCrumbConfig\"\n            class=\"bread-crumb\"\n          ></pt-bread-crumb>\n        }\n\n        <router-outlet></router-outlet>\n      </pt-card>\n    </div>\n  </div>\n\n  <!-- Footer -->\n  @if (pageSkeletonConfig.footerConfig) {\n    <pt-footer\n      [footerConfig]=\"pageSkeletonConfig.footerConfig\"\n      class=\"pt-footer\"\n    ></pt-footer>\n  }\n</pt-card>\n","import { NgModule } from '@angular/core';\nimport { CommonModule } from '@angular/common';\nimport { PTFooterComponent } from './pt-footer.component';\nimport { PTCardModule } from '../pt-card';\n\n@NgModule({\n  declarations: [PTFooterComponent],\n  imports: [CommonModule, PTCardModule],\n  exports: [PTFooterComponent],\n})\nexport class PTFooterModule {}\n","import { NgModule } from '@angular/core';\nimport { CommonModule } from '@angular/common';\nimport { PTBreadCrumbComponent } from './pt-bread-crumb.component';\nimport { BreadcrumbModule } from 'primeng/breadcrumb';\n\n@NgModule({\n  declarations: [PTBreadCrumbComponent],\n  imports: [CommonModule, BreadcrumbModule],\n  exports: [PTBreadCrumbComponent],\n})\nexport class PTBreadCrumbModule {}\n","import { NgModule } from '@angular/core';\nimport { CommonModule } from '@angular/common';\nimport { PTPageSkeletonComponent } from './pt-page-skeleton.component';\nimport { PTNavbarMenuModule } from '../pt-nav-bar-menu';\nimport { PTCardModule } from '../pt-card';\nimport { PTSideBarMenuModule } from '../pt-side-bar-menu';\nimport { RouterModule } from '@angular/router';\nimport { PTFooterModule } from '../pt-footer';\nimport { PTBreadCrumbModule } from '../pt-bread-crumb';\n\n@NgModule({\n  declarations: [PTPageSkeletonComponent],\n  imports: [\n    CommonModule,\n    PTNavbarMenuModule,\n    PTCardModule,\n    PTSideBarMenuModule,\n    RouterModule,\n    PTFooterModule,\n    PTBreadCrumbModule,\n  ],\n  exports: [PTPageSkeletonComponent],\n})\nexport class PTPageSkeletonModule {}\n","import { CommonModule } from '@angular/common';\nimport {\n  Component,\n  EventEmitter,\n  Input,\n  OnDestroy,\n  OnInit,\n  Output,\n} from '@angular/core';\nimport {\n  FormBuilder,\n  FormGroup,\n  FormsModule,\n  ReactiveFormsModule,\n  Validators,\n} from '@angular/forms';\nimport { Subject } from 'rxjs';\nimport { takeUntil } from 'rxjs/operators';\n\nimport { FormInputTypeEnum } from '../../enums';\nimport {\n  LoginAdditionalContent,\n  LoginModel,\n  LoginPageConfig,\n} from '../../models';\nimport { PTButtonModule } from '../../pt-button';\nimport { PTCardModule } from '../../pt-card';\nimport { PTTextInputModule } from '../../pt-text-input';\n\n@Component({\n  selector: 'pt-login-card',\n  standalone: true,\n  imports: [\n    CommonModule,\n    FormsModule,\n    ReactiveFormsModule,\n    PTCardModule,\n    PTButtonModule,\n    PTTextInputModule,\n  ],\n  templateUrl: './pt-login-card.component.html',\n  styleUrls: ['./pt-login-card.component.css'],\n})\nexport class PTLoginCardComponent implements OnInit, OnDestroy {\n  @Input() loginPageConfig!: LoginPageConfig;\n  @Input() loginErrorMessage: string | null = null;\n\n  @Output() loginSubmit = new EventEmitter<LoginModel>();\n\n  formGroup: FormGroup;\n\n  private readonly destroy$ = new Subject<void>();\n\n  constructor(private readonly fb: FormBuilder) {\n    this.formGroup = this.fb.group({});\n  }\n\n  ngOnInit(): void {\n    this.initializeDefaults();\n    this.setupFormFields();\n\n    this.formGroup.patchValue({\n      username: this.loginPageConfig?.login?.username || '',\n      password: this.loginPageConfig?.login?.password || '',\n    });\n\n    this.updateButtonDisabledState(this.formGroup.valid);\n\n    this.formGroup.statusChanges\n      .pipe(takeUntil(this.destroy$))\n      .subscribe((status) => {\n        this.updateButtonDisabledState(status === 'VALID');\n      });\n  }\n\n  ngOnDestroy(): void {\n    this.destroy$.next();\n    this.destroy$.complete();\n  }\n\n  get visibleAdditionalContent(): LoginAdditionalContent[] {\n    return (\n      this.loginPageConfig.additionalContent?.filter(\n        (item) => item.visible !== false,\n      ) ?? []\n    );\n  }\n\n  initializeDefaults(): void {\n    this.loginPageConfig.backgroundImage = {\n      imageUrl: this.loginPageConfig.backgroundImage?.imageUrl || '',\n      transparencyPercentage:\n        this.loginPageConfig.backgroundImage?.transparencyPercentage || '100',\n      ...this.loginPageConfig.backgroundImage,\n    };\n\n    this.loginPageConfig.title = {\n      text: this.loginPageConfig.title?.text || 'Login',\n      position: this.loginPageConfig.title?.position || 'center',\n      color: this.loginPageConfig.title?.color || '#333',\n      fontSize: this.loginPageConfig.title?.fontSize || '24px',\n      ...this.loginPageConfig.title,\n    };\n\n    this.loginPageConfig.logoUrl = {\n      altText: this.loginPageConfig.logoUrl?.altText || 'Logo',\n      imageUrl: this.loginPageConfig.logoUrl?.imageUrl || '',\n      width: this.loginPageConfig.logoUrl?.width || '100px',\n      height: this.loginPageConfig.logoUrl?.height || 'auto',\n      ...this.loginPageConfig.logoUrl,\n    };\n\n    this.loginPageConfig.footer = {\n      version: this.loginPageConfig.footer?.version || 'V1.0',\n      copyright:\n        this.loginPageConfig.footer?.copyright || 'Your Company © 2024',\n      ...this.loginPageConfig.footer,\n    };\n\n    this.loginPageConfig.login = {\n      username: this.loginPageConfig.login?.username || '',\n      password: this.loginPageConfig.login?.password || '',\n      errorMessage: this.loginPageConfig.login?.errorMessage || '',\n      emptyFieldsErrorMessage:\n        this.loginPageConfig.login?.emptyFieldsErrorMessage ||\n        \"Veuillez saisir votre nom d'utilisateur et votre mot de passe !\",\n      ...this.loginPageConfig.login,\n    };\n\n    this.loginPageConfig.loginCardConfig = {\n      noBorder: this.loginPageConfig.loginCardConfig?.noBorder ?? true,\n      width: this.loginPageConfig.loginCardConfig?.width ?? '400px',\n      padding: this.loginPageConfig.loginCardConfig?.padding ?? '40px',\n      ...this.loginPageConfig.loginCardConfig,\n    };\n\n    this.loginPageConfig.usernameField = {\n      name: this.loginPageConfig.usernameField?.name || 'username',\n      label: this.loginPageConfig.usernameField?.label || \"Nom d'utilisateur\",\n      required: this.loginPageConfig.usernameField?.required ?? true,\n      placeholder:\n        this.loginPageConfig.usernameField?.placeholder ||\n        \"Entrer votre nom d'utilisateur\",\n      ...this.loginPageConfig.usernameField,\n    };\n\n    this.loginPageConfig.passwordField = {\n      name: this.loginPageConfig.passwordField?.name || 'password',\n      label: this.loginPageConfig.passwordField?.label || 'Mot de passe',\n      required: this.loginPageConfig.passwordField?.required ?? true,\n      placeholder:\n        this.loginPageConfig.passwordField?.placeholder ||\n        'Entrer votre mot de passe',\n      type:\n        this.loginPageConfig.passwordField?.type || FormInputTypeEnum.PASSWORD,\n      toggleMask: this.loginPageConfig.passwordField?.toggleMask ?? true,\n      feedback: this.loginPageConfig.passwordField?.feedback ?? false,\n      ...this.loginPageConfig.passwordField,\n    };\n\n    this.loginPageConfig.buttonConfig = {\n      label: this.loginPageConfig.buttonConfig?.label || 'Login',\n      type: this.loginPageConfig.buttonConfig?.type || 'submit',\n      icon: this.loginPageConfig.buttonConfig?.icon || 'pi pi-sign-in',\n      iconPos: this.loginPageConfig.buttonConfig?.iconPos || 'left',\n      styleClass:\n        this.loginPageConfig.buttonConfig?.styleClass || 'p-button-success',\n      disabled: this.loginPageConfig.buttonConfig?.disabled ?? true,\n      width: this.loginPageConfig.buttonConfig?.width ?? '100%',\n      ...this.loginPageConfig.buttonConfig,\n    };\n\n    this.loginPageConfig.additionalContent =\n      this.loginPageConfig.additionalContent?.map((item) => ({\n        type: item.type ?? this.resolveItemType(item),\n        target: item.target ?? '_self',\n        linkPosition: item.linkPosition ?? 'after',\n        align: item.align ?? 'center',\n        visible: item.visible ?? true,\n        ...item,\n      })) ?? [];\n  }\n\n  onSubmit(): void {\n    if (this.formGroup.valid) {\n      this.loginSubmit.emit(this.formGroup.getRawValue() as LoginModel);\n      return;\n    }\n\n    this.formGroup.markAllAsTouched();\n\n    this.loginPageConfig.login!.errorMessage =\n      this.loginPageConfig.login?.emptyFieldsErrorMessage;\n  }\n\n  setupFormFields(): void {\n    const usernameField = this.loginPageConfig.usernameField!;\n\n    const passwordField = this.loginPageConfig.passwordField!;\n\n    const usernameValidators = usernameField.required\n      ? [Validators.required]\n      : [];\n\n    const passwordValidators = passwordField.required\n      ? [Validators.required]\n      : [];\n\n    this.formGroup.addControl(\n      usernameField.name,\n      this.fb.control(\n        this.loginPageConfig.login?.username ?? '',\n        usernameValidators,\n      ),\n    );\n\n    this.formGroup.addControl(\n      passwordField.name,\n      this.fb.control(\n        this.loginPageConfig.login?.password ?? '',\n        passwordValidators,\n      ),\n    );\n  }\n\n  getAdditionalContentClass(item: LoginAdditionalContent): string[] {\n    return [\n      `additional-content-${item.align ?? 'center'}`,\n      item.styleClass ?? '',\n    ].filter(Boolean);\n  }\n\n  getLinkRel(item: LoginAdditionalContent): string | null {\n    if (item.rel) {\n      return item.rel;\n    }\n\n    return item.target === '_blank' ? 'noopener noreferrer' : null;\n  }\n\n  private resolveItemType(\n    item: LoginAdditionalContent,\n  ): LoginAdditionalContent['type'] {\n    if (item.text && item.linkText && item.url) {\n      return 'text-with-link';\n    }\n\n    if (item.linkText && item.url) {\n      return 'link';\n    }\n\n    return 'text';\n  }\n\n  private updateButtonDisabledState(formValid: boolean): void {\n    this.loginPageConfig.buttonConfig = {\n      ...this.loginPageConfig.buttonConfig!,\n      disabled: !formValid,\n    };\n  }\n}\n","<pt-card [config]=\"loginPageConfig.loginCardConfig!\">\n  @if (loginPageConfig.logoUrl; as logoUrl) {\n    @if (logoUrl.imageUrl) {\n      <div class=\"logo-container\">\n        <img\n          [src]=\"logoUrl.imageUrl\"\n          [alt]=\"logoUrl.altText || 'Logo'\"\n          [style.width]=\"logoUrl.width || '100px'\"\n          [style.height]=\"logoUrl.height || 'auto'\"\n        />\n      </div>\n    }\n  }\n\n  <div class=\"title-container\">\n    <h1\n      [ngStyle]=\"{\n        color: loginPageConfig.title?.color || '#333',\n        'font-size': loginPageConfig.title?.fontSize || '24px',\n      }\"\n    >\n      {{ loginPageConfig.title?.text || \"Default Title\" }}\n    </h1>\n  </div>\n\n  @if (loginErrorMessage) {\n    <div class=\"error-message\" role=\"alert\">\n      {{ loginErrorMessage }}\n    </div>\n  }\n\n  <form class=\"form-container\" [formGroup]=\"formGroup\" (ngSubmit)=\"onSubmit()\">\n    @if (loginPageConfig.login; as login) {\n      @if (login.errorMessage) {\n        <div class=\"error-message\" role=\"alert\">\n          {{ login.errorMessage }}\n        </div>\n      }\n    }\n\n    <div class=\"field\">\n      <pt-text-input\n        [formGroup]=\"formGroup\"\n        [formField]=\"loginPageConfig.usernameField!\"\n      ></pt-text-input>\n    </div>\n\n    <div class=\"field\">\n      <pt-text-input\n        [formGroup]=\"formGroup\"\n        [formField]=\"loginPageConfig.passwordField!\"\n      ></pt-text-input>\n    </div>\n\n    <div class=\"submit-btn\">\n      <pt-button [buttonConfig]=\"loginPageConfig.buttonConfig!\"></pt-button>\n    </div>\n\n    @if (loginPageConfig.forgotPasswordConfig; as forgotPasswordConfig) {\n      @if (forgotPasswordConfig.text && forgotPasswordConfig.url) {\n        <div\n          class=\"forgot-password-container\"\n          [ngClass]=\"\n            'forgot-password-' + (forgotPasswordConfig.align || 'center')\n          \"\n        >\n          <a\n            [href]=\"forgotPasswordConfig.url\"\n            [target]=\"forgotPasswordConfig.target || '_self'\"\n            [rel]=\"\n              forgotPasswordConfig.target === '_blank'\n                ? 'noopener noreferrer'\n                : null\n            \"\n            [ngStyle]=\"forgotPasswordConfig.style\"\n            [class]=\"forgotPasswordConfig.styleClass || 'forgot-password-link'\"\n          >\n            {{ forgotPasswordConfig.text }}\n          </a>\n        </div>\n      }\n    }\n\n    @if (visibleAdditionalContent.length > 0) {\n      <div class=\"additional-content-list\">\n        @for (item of visibleAdditionalContent; track item.id || $index) {\n          <div\n            class=\"additional-content-item\"\n            [ngClass]=\"getAdditionalContentClass(item)\"\n            [ngStyle]=\"item.style\"\n          >\n            @switch (item.type) {\n              @case (\"link\") {\n                @if (item.linkText && item.url) {\n                  <a\n                    [href]=\"item.url\"\n                    [target]=\"item.target || '_self'\"\n                    [rel]=\"getLinkRel(item)\"\n                    [class]=\"item.linkStyleClass || 'additional-content-link'\"\n                    [ngStyle]=\"item.linkStyle\"\n                  >\n                    {{ item.linkText }}\n                  </a>\n                }\n              }\n\n              @case (\"text-with-link\") {\n                @if (\n                  item.linkPosition === \"before\" && item.linkText && item.url\n                ) {\n                  <a\n                    [href]=\"item.url\"\n                    [target]=\"item.target || '_self'\"\n                    [rel]=\"getLinkRel(item)\"\n                    [class]=\"item.linkStyleClass || 'additional-content-link'\"\n                    [ngStyle]=\"item.linkStyle\"\n                  >\n                    {{ item.linkText }}\n                  </a>\n\n                  @if (item.text) {\n                    <span class=\"additional-content-text\">\n                      {{ item.text }}\n                    </span>\n                  }\n                } @else {\n                  @if (item.text) {\n                    <span class=\"additional-content-text\">\n                      {{ item.text }}\n                    </span>\n                  }\n\n                  @if (item.linkText && item.url) {\n                    <a\n                      [href]=\"item.url\"\n                      [target]=\"item.target || '_self'\"\n                      [rel]=\"getLinkRel(item)\"\n                      [class]=\"item.linkStyleClass || 'additional-content-link'\"\n                      [ngStyle]=\"item.linkStyle\"\n                    >\n                      {{ item.linkText }}\n                    </a>\n                  }\n                }\n              }\n\n              @default {\n                @if (item.text) {\n                  <span class=\"additional-content-text\">\n                    {{ item.text }}\n                  </span>\n                }\n              }\n            }\n          </div>\n        }\n      </div>\n    }\n  </form>\n\n  <div class=\"login-footer\">\n    {{ loginPageConfig.footer?.version }}\n\n    <span>\n      {{ loginPageConfig.footer?.copyright }}\n    </span>\n  </div>\n</pt-card>\n","import { Component, EventEmitter, Input, OnInit, Output } from '@angular/core';\nimport { LoginModel, LoginPageConfig, CardConfig } from '../models';\n\n@Component({\n    selector: 'pt-login-page',\n    templateUrl: './pt-login-page.component.html',\n    styleUrls: ['./pt-login-page.component.css'],\n    standalone: false\n})\nexport class PTLoginPageComponent implements OnInit {\n  @Input() loginPageConfig!: LoginPageConfig;\n  @Input() loginErrorMessage: string | null = null;\n  @Output() loginSubmit: EventEmitter<LoginModel> =\n    new EventEmitter<LoginModel>();\n\n  private defaultCardConfig: CardConfig = {\n    borderRadius: '0',\n    margin: '0',\n    width: '100%',\n    height: '100%',\n    noBorder: true,\n    alignContent: 'center',\n    alignBodyContent: 'center',\n  };\n\n  ngOnInit(): void {\n    this.applyDefaultConfigs();\n  }\n\n  private applyDefaultConfigs(): void {\n    // Apply defaults to centerCardConfig\n    this.loginPageConfig.centerCardConfig = this.applyDefaults(\n      this.loginPageConfig.centerCardConfig\n    );\n\n    // Apply defaults to leftCardConfig\n    this.loginPageConfig.leftCardConfig = this.applyDefaults(\n      this.loginPageConfig.leftCardConfig\n    );\n\n    // Apply defaults to rightCardConfig\n    this.loginPageConfig.rightCardConfig = this.applyDefaults(\n      this.loginPageConfig.rightCardConfig\n    );\n  }\n\n  private applyDefaults(config?: CardConfig): CardConfig {\n    return {\n      ...this.defaultCardConfig,\n      ...(config || {}),\n    };\n  }\n\n  onLoginSubmit(loginModel: LoginModel): void {\n    this.loginSubmit.emit(loginModel);\n  }\n}\n","<!-- Center Position -->\n<ng-container>\n  @if (loginPageConfig.position === 'center') {\n    <div class=\"center-container\">\n      @if (loginPageConfig.centerCardConfig) {\n        <pt-card\n          [config]=\"loginPageConfig.centerCardConfig\"\n          >\n          <pt-login-card\n            [loginErrorMessage]=\"loginErrorMessage\"\n            [loginPageConfig]=\"loginPageConfig\"\n            (loginSubmit)=\"onLoginSubmit($event)\"\n          ></pt-login-card>\n        </pt-card>\n      }\n    </div>\n  }\n  <!-- Left and Right Positions -->\n  @if (\n    loginPageConfig.position === 'left' ||\n    loginPageConfig.position === 'right'\n    ) {\n    <div\n      class=\"left-right-container\"\n      >\n      <!-- Left Card -->\n      @if (loginPageConfig.leftCardConfig) {\n        <pt-card\n          [config]=\"loginPageConfig.leftCardConfig\"\n          >\n          @if (loginPageConfig.position === 'left') {\n            <pt-login-card\n              [loginErrorMessage]=\"loginErrorMessage\"\n              [loginPageConfig]=\"loginPageConfig\"\n              (loginSubmit)=\"onLoginSubmit($event)\"\n            ></pt-login-card>\n          }\n        </pt-card>\n      }\n      <!-- Right Card -->\n      @if (loginPageConfig.rightCardConfig) {\n        <pt-card\n          [config]=\"loginPageConfig.rightCardConfig\"\n          >\n          @if (loginPageConfig.position === 'right') {\n            <pt-login-card\n              [loginErrorMessage]=\"loginErrorMessage\"\n              [loginPageConfig]=\"loginPageConfig\"\n              (loginSubmit)=\"onLoginSubmit($event)\"\n            ></pt-login-card>\n          }\n        </pt-card>\n      }\n    </div>\n  }\n</ng-container>\n","import { NgModule } from '@angular/core';\nimport { CommonModule } from '@angular/common';\nimport { PTLoginPageComponent } from './pt-login-page.component';\nimport { FormsModule, ReactiveFormsModule } from '@angular/forms';\nimport { PTTextInputModule } from '../pt-text-input/pt-text-input.module';\nimport { PTCardModule } from '../pt-card/pt-card.module';\nimport { PTButtonModule } from '../pt-button';\nimport { PTLoginCardComponent } from './pt-login-card/pt-login-card.component';\n\n@NgModule({\n  declarations: [PTLoginPageComponent],\n  imports: [\n    CommonModule,\n    FormsModule,\n    ReactiveFormsModule,\n    PTTextInputModule,\n    PTCardModule,\n    PTButtonModule,\n    PTLoginCardComponent,\n  ],\n  exports: [PTLoginPageComponent],\n})\nexport class PTLoginPageModule {}\n","import { AlignEnum, SeverityEnum } from '../enums';\n\nexport type DialogSeverity = 'INFO' | 'SUCCESS' | 'WARNING' | 'DANGER';\n\nexport interface DialogColorSet {\n  background: string;\n  border: string;\n  iconBackground: string;\n  icon: string;\n  title: string;\n  message: string;\n}\n\nexport const PT_CONFIRM_DIALOG_DEFAULT_WIDTH = '560px';\nexport const PT_CONFIRM_DIALOG_DEFAULT_HEIGHT = 'auto';\n\nexport const PT_CONFIRM_DIALOG_OVERLAY_CLASS = 'pt-confirm-dialog-overlay';\n\nexport const PT_CONFIRM_DIALOG_NO_FOOTER_CLASS = 'pt-confirm-dialog-no-footer';\n\nexport const PT_CONFIRM_DIALOG_DEFAULT_FOOTER_ALIGN = AlignEnum.CENTER;\n\nexport const PT_CONFIRM_DIALOG_DEFAULT_SEVERITY = SeverityEnum.INFO;\n\nexport const PT_CONFIRM_DIALOG_COLORS: Record<DialogSeverity, DialogColorSet> =\n  {\n    INFO: {\n      background: '#eff6ff',\n      border: '#bfdbfe',\n      iconBackground: '#dbeafe',\n      icon: '#2563eb',\n      title: '#1e40af',\n      message: '#334155',\n    },\n    SUCCESS: {\n      background: '#f0fdf4',\n      border: '#bbf7d0',\n      iconBackground: '#dcfce7',\n      icon: '#16a34a',\n      title: '#15803d',\n      message: '#334155',\n    },\n    WARNING: {\n      background: '#fffbeb',\n      border: '#fde68a',\n      iconBackground: '#fef3c7',\n      icon: '#d97706',\n      title: '#b45309',\n      message: '#334155',\n    },\n    DANGER: {\n      background: '#fef2f2',\n      border: '#fecaca',\n      iconBackground: '#fee2e2',\n      icon: '#dc2626',\n      title: '#b91c1c',\n      message: '#334155',\n    },\n  };\n\nexport const PT_CONFIRM_DIALOG_SEVERITY_CLASS: Record<DialogSeverity, string> =\n  {\n    INFO: 'pt-confirm-dialog-info',\n    SUCCESS: 'pt-confirm-dialog-success',\n    WARNING: 'pt-confirm-dialog-warning',\n    DANGER: 'pt-confirm-dialog-danger',\n  };\n\nexport const PT_CONFIRM_DIALOG_DEFAULT_ICON: Record<DialogSeverity, string> = {\n  INFO: 'pi pi-info-circle',\n  SUCCESS: 'pi pi-check-circle',\n  WARNING: 'pi pi-exclamation-triangle',\n  DANGER: 'pi pi-times-circle',\n};\n\nexport const PT_CONFIRM_DIALOG_DEFAULT_HEADER: Record<DialogSeverity, string> =\n  {\n    INFO: 'Information',\n    SUCCESS: 'Succès',\n    WARNING: 'Attention',\n    DANGER: 'Confirmation requise',\n  };\n","import {\n  AfterContentInit,\n  Component,\n  ContentChild,\n  EventEmitter,\n  HostListener,\n  Input,\n  OnChanges,\n  Output,\n  SimpleChanges,\n  TemplateRef,\n} from '@angular/core';\nimport { FormGroup } from '@angular/forms';\nimport { ConfirmationService } from 'primeng/api';\n\nimport { PTFormBuilderComponent } from '../pt-form-builder/pt-form-builder.component';\nimport { AlignEnum, SeverityEnum } from '../enums';\nimport { IconStyle, PTConfirmDialogConfig } from '../models';\n\nimport {\n  DialogColorSet,\n  DialogSeverity,\n  PT_CONFIRM_DIALOG_COLORS,\n  PT_CONFIRM_DIALOG_DEFAULT_FOOTER_ALIGN,\n  PT_CONFIRM_DIALOG_DEFAULT_HEADER,\n  PT_CONFIRM_DIALOG_DEFAULT_HEIGHT,\n  PT_CONFIRM_DIALOG_DEFAULT_ICON,\n  PT_CONFIRM_DIALOG_DEFAULT_SEVERITY,\n  PT_CONFIRM_DIALOG_DEFAULT_WIDTH,\n  PT_CONFIRM_DIALOG_NO_FOOTER_CLASS,\n  PT_CONFIRM_DIALOG_OVERLAY_CLASS,\n  PT_CONFIRM_DIALOG_SEVERITY_CLASS,\n} from './pt-confirm-dialog.config';\n\n@Component({\n  selector: 'pt-confirm-dialog',\n  templateUrl: './pt-confirm-dialog.component.html',\n  styleUrls: ['./pt-confirm-dialog.component.css'],\n  providers: [ConfirmationService],\n  standalone: false,\n})\nexport class PTConfirmDialogComponent implements OnChanges, AfterContentInit {\n  @Input() dialogConfig: PTConfirmDialogConfig = {\n    header: { text: 'Confirmation' },\n    content: '',\n    visible: false,\n    width: PT_CONFIRM_DIALOG_DEFAULT_WIDTH,\n    height: PT_CONFIRM_DIALOG_DEFAULT_HEIGHT,\n    dialogStyle: PT_CONFIRM_DIALOG_DEFAULT_SEVERITY,\n    closeOnEscape: true,\n    footerAlign: PT_CONFIRM_DIALOG_DEFAULT_FOOTER_ALIGN,\n    confirmButtonConfig: {\n      label: 'Confirmer',\n      icon: 'pi pi-check',\n    },\n    cancelButtonConfig: {\n      label: 'Annuler',\n      icon: 'pi pi-times',\n    },\n  };\n\n  @Input() formGroup?: FormGroup | null;\n\n  @Output() confirm = new EventEmitter<void>();\n  @Output() cancel = new EventEmitter<void>();\n\n  @ContentChild('dialogBody') dialogBodyTpl?: TemplateRef<unknown>;\n\n  @ContentChild(PTFormBuilderComponent)\n  projectedFormBuilder?: PTFormBuilderComponent;\n\n  overlayStyleClass = `${PT_CONFIRM_DIALOG_OVERLAY_CLASS} ${PT_CONFIRM_DIALOG_SEVERITY_CLASS.INFO}`;\n\n  private isDialogOpen = false;\n\n  constructor(private readonly confirmationService: ConfirmationService) {}\n\n  ngAfterContentInit(): void {\n    // Projection support only.\n  }\n\n  ngOnChanges(changes: SimpleChanges): void {\n    if (!changes['dialogConfig']) {\n      return;\n    }\n\n    if (this.dialogConfig?.visible) {\n      this.showDialog();\n    }\n  }\n\n  @HostListener('document:keydown.escape', ['$event'])\n  onEscapeKey(event: Event): void {\n    if (!this.isDialogOpen || this.dialogConfig.closeOnEscape === false) {\n      return;\n    }\n\n    event.preventDefault();\n    event.stopPropagation();\n\n    this.onCancelClick();\n  }\n\n  showDialog(): void {\n    this.overlayStyleClass = [\n      PT_CONFIRM_DIALOG_OVERLAY_CLASS,\n      this.getSeverityClass(),\n      this.hasFooter() ? '' : PT_CONFIRM_DIALOG_NO_FOOTER_CLASS,\n    ]\n      .filter(Boolean)\n      .join(' ');\n\n    this.isDialogOpen = true;\n\n    this.confirmationService.confirm({\n      header: '',\n      message: this.getDialogContentText() || ' ',\n      accept: () => {\n        this.handleConfirm();\n      },\n      reject: () => {\n        this.handleCancel();\n      },\n    });\n  }\n\n  onConfirmClick(): void {\n    const form = this.getActiveForm();\n\n    if (form) {\n      form.markAllAsTouched();\n      form.updateValueAndValidity({ emitEvent: true });\n\n      if (form.invalid) {\n        return;\n      }\n    }\n\n    this.handleConfirm();\n  }\n\n  onCancelClick(): void {\n    this.handleCancel();\n  }\n\n  hasFooter(): boolean {\n    return !!(\n      this.dialogConfig?.confirmButtonConfig ||\n      this.dialogConfig?.cancelButtonConfig\n    );\n  }\n\n  get confirmButtonModel(): any {\n    const config = this.dialogConfig.confirmButtonConfig;\n\n    return {\n      ...(config || {}),\n      label: config?.label || 'Confirmer',\n      icon: config?.icon || 'pi pi-check',\n      iconPos: config?.iconPos || 'left',\n      type: config?.type || 'button',\n      outlined: config?.outlined ?? true,\n      severity: config?.severity || this.getButtonSeverity(),\n      width: config?.width || 'auto',\n      height: config?.height || 'auto',\n      styleClass: [config?.styleClass || '', 'pt-confirm-dialog-confirm-btn']\n        .join(' ')\n        .trim(),\n      disabled: config?.disabled || this.isConfirmDisabled(),\n    };\n  }\n\n  get cancelButtonModel(): any {\n    const config = this.dialogConfig.cancelButtonConfig;\n\n    return {\n      ...(config || {}),\n      label: config?.label || 'Annuler',\n      icon: config?.icon || 'pi pi-times',\n      iconPos: config?.iconPos || 'left',\n      type: config?.type || 'button',\n      outlined: config?.outlined ?? true,\n      severity: config?.severity || SeverityEnum.INFO,\n      width: config?.width || 'auto',\n      height: config?.height || 'auto',\n      styleClass: [config?.styleClass || '', 'pt-confirm-dialog-cancel-btn']\n        .join(' ')\n        .trim(),\n      disabled: config?.disabled || false,\n    };\n  }\n\n  getFooterButtonsStyle(): Record<string, string> {\n    const align =\n      this.dialogConfig.footerAlign || PT_CONFIRM_DIALOG_DEFAULT_FOOTER_ALIGN;\n\n    switch (align) {\n      case AlignEnum.LEFT:\n        return { justifyContent: 'flex-start' };\n\n      case AlignEnum.RIGHT:\n        return { justifyContent: 'flex-end' };\n\n      case AlignEnum.CENTER:\n      default:\n        return { justifyContent: 'center' };\n    }\n  }\n\n  getDialogHeaderText(): string {\n    const header = this.dialogConfig.header;\n\n    if (typeof header === 'string') {\n      return header;\n    }\n\n    if (header && typeof header === 'object' && 'text' in header) {\n      return String(header.text || this.getDefaultHeaderText());\n    }\n\n    return this.getDefaultHeaderText();\n  }\n\n  getDialogContentText(): string {\n    const content = this.dialogConfig.content;\n\n    if (typeof content === 'string') {\n      return content;\n    }\n\n    if (content && typeof content === 'object' && 'text' in content) {\n      return String(content.text || '');\n    }\n\n    return '';\n  }\n\n  getDialogIconClass(): string {\n    const header = this.dialogConfig.header;\n\n    const icon =\n      header && typeof header === 'object' && 'icon' in header\n        ? header.icon\n        : undefined;\n\n    if (typeof icon === 'string') {\n      return icon;\n    }\n\n    if ((icon as IconStyle)?.code) {\n      return (icon as IconStyle).code;\n    }\n\n    return PT_CONFIRM_DIALOG_DEFAULT_ICON[this.getNormalizedSeverity()];\n  }\n\n  getDialogIconStyle(): Record<string, string> {\n    const header = this.dialogConfig.header;\n\n    const icon =\n      header && typeof header === 'object' && 'icon' in header\n        ? (header.icon as IconStyle)\n        : undefined;\n\n    const colors = this.getColors();\n\n    return {\n      color: icon?.color || colors.icon,\n      fontSize: icon?.fontSize || '2rem',\n    };\n  }\n\n  getDialogHeaderStyle(): Record<string, string | number> {\n    const colors = this.getColors();\n    const header = this.dialogConfig.header as any;\n\n    return {\n      color: header?.color || colors.title,\n      fontSize: header?.fontSize || '1.35rem',\n      fontWeight: 700,\n    };\n  }\n\n  getDialogContentStyle(): Record<string, string> {\n    const colors = this.getColors();\n    const content = this.dialogConfig.content as any;\n\n    return {\n      color: content?.color || colors.message,\n      fontSize: content?.fontSize || '1rem',\n      textAlign: content?.position || AlignEnum.LEFT,\n    };\n  }\n\n  getDialogBodyStyle(): Record<string, string> {\n    const colors = this.getColors();\n\n    return {\n      background: colors.background,\n      borderColor: colors.border,\n    };\n  }\n\n  getIconWrapperStyle(): Record<string, string> {\n    const colors = this.getColors();\n\n    return {\n      background: colors.iconBackground,\n      borderColor: colors.border,\n    };\n  }\n\n  private handleConfirm(): void {\n    if (!this.isDialogOpen) {\n      return;\n    }\n\n    this.isDialogOpen = false;\n    this.closeDialog();\n\n    this.confirm.emit();\n  }\n\n  private handleCancel(): void {\n    if (!this.isDialogOpen) {\n      return;\n    }\n\n    this.isDialogOpen = false;\n    this.closeDialog();\n\n    this.cancel.emit();\n  }\n\n  private closeDialog(): void {\n    this.confirmationService.close();\n  }\n\n  private getActiveForm(): FormGroup | null {\n    if (this.formGroup) {\n      return this.formGroup;\n    }\n\n    if (this.projectedFormBuilder?.form) {\n      return this.projectedFormBuilder.form;\n    }\n\n    return null;\n  }\n\n  private isConfirmDisabled(): boolean {\n    const form = this.getActiveForm();\n    return !!form && form.invalid;\n  }\n\n  private getSeverityClass(): string {\n    return PT_CONFIRM_DIALOG_SEVERITY_CLASS[this.getNormalizedSeverity()];\n  }\n\n  private getNormalizedSeverity(): DialogSeverity {\n    const raw = String(\n      this.dialogConfig.dialogStyle || PT_CONFIRM_DIALOG_DEFAULT_SEVERITY,\n    )\n      .trim()\n      .toUpperCase();\n\n    if (raw === 'SUCCESS') {\n      return 'SUCCESS';\n    }\n\n    if (raw === 'WARNING' || raw === 'WARN') {\n      return 'WARNING';\n    }\n\n    if (raw === 'DANGER' || raw === 'ERROR') {\n      return 'DANGER';\n    }\n\n    return 'INFO';\n  }\n\n  private getColors(): DialogColorSet {\n    return PT_CONFIRM_DIALOG_COLORS[this.getNormalizedSeverity()];\n  }\n\n  private getDefaultHeaderText(): string {\n    return PT_CONFIRM_DIALOG_DEFAULT_HEADER[this.getNormalizedSeverity()];\n  }\n\n  private getButtonSeverity(): SeverityEnum {\n    switch (this.getNormalizedSeverity()) {\n      case 'SUCCESS':\n        return SeverityEnum.SUCCESS;\n      case 'WARNING':\n        return SeverityEnum.WARNING;\n      case 'DANGER':\n        return SeverityEnum.DANGER;\n      case 'INFO':\n      default:\n        return SeverityEnum.INFO;\n    }\n  }\n}\n","<div class=\"pt-confirm-dialog\">\n  <p-confirmDialog\n    #cd\n    [styleClass]=\"overlayStyleClass\"\n    [appendTo]=\"'body'\"\n    [closable]=\"false\"\n    [closeOnEscape]=\"false\"\n  >\n    <ng-template pTemplate=\"header\"></ng-template>\n\n    <ng-template pTemplate=\"message\">\n      <div class=\"pt-confirm-dialog-wrapper\">\n        <div class=\"pt-confirm-dialog-body\" [ngStyle]=\"getDialogBodyStyle()\">\n          <button\n            type=\"button\"\n            class=\"pt-confirm-dialog-close\"\n            aria-label=\"Fermer\"\n            (click)=\"onCancelClick()\"\n          >\n            <i class=\"pi pi-times\"></i>\n          </button>\n\n          <div class=\"pt-confirm-dialog-content\">\n            <div\n              class=\"pt-confirm-dialog-icon-wrapper\"\n              [ngStyle]=\"getIconWrapperStyle()\"\n            >\n              <i\n                class=\"pt-confirm-dialog-icon\"\n                [class]=\"getDialogIconClass()\"\n                [ngStyle]=\"getDialogIconStyle()\"\n              ></i>\n            </div>\n\n            <div class=\"pt-confirm-dialog-text-wrapper\">\n              <h3\n                class=\"pt-confirm-dialog-title\"\n                [ngStyle]=\"getDialogHeaderStyle()\"\n              >\n                {{ getDialogHeaderText() }}\n              </h3>\n\n              @if (dialogBodyTpl) {\n                <ng-container [ngTemplateOutlet]=\"dialogBodyTpl\"></ng-container>\n              } @else {\n                <p\n                  class=\"pt-confirm-dialog-message-text\"\n                  [ngStyle]=\"getDialogContentStyle()\"\n                >\n                  {{ getDialogContentText() }}\n                </p>\n              }\n            </div>\n          </div>\n        </div>\n\n        @if (hasFooter()) {\n          <div class=\"pt-confirm-dialog-custom-footer\">\n            <div\n              class=\"pt-confirm-dialog-footer-buttons\"\n              [ngStyle]=\"getFooterButtonsStyle()\"\n            >\n              @if (dialogConfig.cancelButtonConfig) {\n                <div class=\"pt-confirm-dialog-button-slot\">\n                  <pt-button\n                    [buttonConfig]=\"cancelButtonModel\"\n                    (click)=\"onCancelClick()\"\n                  ></pt-button>\n                </div>\n              }\n\n              @if (dialogConfig.confirmButtonConfig) {\n                <div class=\"pt-confirm-dialog-button-slot\">\n                  <pt-button\n                    [buttonConfig]=\"confirmButtonModel\"\n                    (click)=\"onConfirmClick()\"\n                  ></pt-button>\n                </div>\n              }\n            </div>\n          </div>\n        }\n      </div>\n    </ng-template>\n  </p-confirmDialog>\n</div>\n","import { NgModule } from '@angular/core';\nimport { CommonModule } from '@angular/common';\nimport { ConfirmDialogModule } from 'primeng/confirmdialog';\n\nimport { PTConfirmDialogComponent } from './pt-confirm-dialog.component';\nimport { PTButtonModule } from '../pt-button';\n\n@NgModule({\n  declarations: [PTConfirmDialogComponent],\n  imports: [CommonModule, ConfirmDialogModule, PTButtonModule],\n  exports: [PTConfirmDialogComponent],\n})\nexport class PTConfirmDialogModule {}\n","import { Component } from '@angular/core';\nimport { MessageService } from 'primeng/api';\nimport { ToastMessage } from '../models';\n\n@Component({\n    selector: 'pt-toast-notifier',\n    templateUrl: './pt-toast-notifier.component.html',\n    standalone: false\n})\nexport class PTToastNotifierComponent {\n  constructor(private messageService: MessageService) {}\n\n  show(toast: ToastMessage): void {\n    if (toast) {\n      this.messageService.add({\n        severity: toast.severity,\n        summary: toast.summary,\n        detail: toast.detail,\n        life: toast.life || 3000,\n      });\n    }\n  }\n\n  clear(): void {\n    this.messageService.clear();\n  }\n}\n","<p-toast position=\"top-right\"></p-toast>\n","import { NgModule } from '@angular/core';\nimport { PTToastNotifierComponent } from './pt-toast-notifier.component';\nimport { ToastModule } from 'primeng/toast';\nimport { CommonModule } from '@angular/common';\nimport { MessageService } from 'primeng/api';\n\n@NgModule({\n  declarations: [PTToastNotifierComponent],\n  imports: [CommonModule, ToastModule],\n  exports: [PTToastNotifierComponent],\n  providers: [MessageService],\n})\nexport class PTToastNotifierModule {}\n","import {\n  Component,\n  EventEmitter,\n  HostListener,\n  Input,\n  Output,\n} from '@angular/core';\nimport {\n  DialogPosition,\n  PTDialogConfig,\n} from '../models/pt-dialog-config.model';\nimport { SeverityEnum } from '../enums';\n\nconst DEFAULT_DIALOG_CONFIG: PTDialogConfig = {\n  dialogStyle: SeverityEnum.INFO,\n  modal: true,\n  closable: true,\n  draggable: true,\n  resizable: true,\n  maximizable: false,\n  dismissableMask: false,\n  closeOnEscape: true,\n  blockScroll: true,\n  bodyScrollable: true,\n  showFooter: true,\n  position: 'center',\n};\n\n@Component({\n    selector: 'pt-dialog',\n    templateUrl: './pt-dialog.component.html',\n    styleUrls: ['./pt-dialog.component.css'],\n    standalone: false\n})\nexport class PTDialogComponent {\n  private _config: PTDialogConfig = { ...DEFAULT_DIALOG_CONFIG };\n\n  @Input()\n  set config(value: PTDialogConfig | undefined) {\n    this._config = { ...DEFAULT_DIALOG_CONFIG, ...(value || {}) };\n  }\n\n  get config(): PTDialogConfig {\n    return this._config;\n  }\n\n  _internalVisible = false;\n  isFullscreen = false;\n\n  @Input()\n  get visible(): boolean {\n    return this._internalVisible;\n  }\n\n  set visible(v: boolean) {\n    this._internalVisible = v;\n\n    if (!v) {\n      this.isFullscreen = false;\n    }\n  }\n\n  @Output() visibleChange = new EventEmitter<boolean>();\n\n  @HostListener('document:keydown.escape')\n  onEscape(): void {\n    if (!this._internalVisible) {\n      return;\n    }\n\n    if (this.isFullscreen) {\n      this.isFullscreen = false;\n      return;\n    }\n\n    if (this.config.closeOnEscape !== false) {\n      this.onInternalVisibleChange(false);\n    }\n  }\n\n  get dialogSeverity(): SeverityEnum {\n    const style = this.config.dialogStyle ?? SeverityEnum.INFO;\n\n    return style === SeverityEnum.DANGER\n      ? SeverityEnum.DANGER\n      : style === SeverityEnum.WARNING\n        ? SeverityEnum.WARNING\n        : style === SeverityEnum.SUCCESS\n          ? SeverityEnum.SUCCESS\n          : SeverityEnum.INFO;\n  }\n\n  private getSeverityClass(): string {\n    switch (this.dialogSeverity) {\n      case SeverityEnum.DANGER:\n        return 'pt-dialog-danger';\n      case SeverityEnum.WARNING:\n        return 'pt-dialog-warning';\n      case SeverityEnum.SUCCESS:\n        return 'pt-dialog-success';\n      case SeverityEnum.INFO:\n      default:\n        return 'pt-dialog-info';\n    }\n  }\n\n  get dialogStyleClass(): string {\n    return [\n      'border-round-3xl',\n      'shadow-6',\n      'overflow-hidden',\n      'pt-dialog-overlay',\n      this.getSeverityClass(),\n      this.isFullscreen ? 'pt-dialog-fullscreen' : '',\n      this.config.styleClass,\n    ]\n      .filter(Boolean)\n      .join(' ');\n  }\n\n  get primePosition(): DialogPosition {\n    return (this.config.position ?? 'center') as DialogPosition;\n  }\n\n  get bodyStyle(): { [key: string]: any } {\n    const style: any = {};\n\n    if (this.config.bodyWidth) {\n      style['max-width'] = this.config.bodyWidth;\n    }\n\n    if (this.config.bodyHeight) {\n      style['max-height'] = this.config.bodyHeight;\n\n      if (this.config.bodyScrollable !== false) {\n        style['overflow-y'] = 'auto';\n        style['overflow-x'] = 'auto';\n      }\n    }\n\n    return style;\n  }\n\n  toggleFullscreen(): void {\n    this.isFullscreen = !this.isFullscreen;\n  }\n\n  onInternalVisibleChange(v: boolean): void {\n    this._internalVisible = v;\n\n    if (!v) {\n      this.isFullscreen = false;\n    }\n\n    this.visibleChange.emit(v);\n  }\n\n  private getSeverityHeaderColor(): string {\n    switch (this.dialogSeverity) {\n      case SeverityEnum.DANGER:\n        return '#b91c1c';\n      case SeverityEnum.WARNING:\n        return '#b45309';\n      case SeverityEnum.SUCCESS:\n        return '#15803d';\n      case SeverityEnum.INFO:\n      default:\n        return '#2563eb';\n    }\n  }\n\n  get headerIconStyle(): { [key: string]: any } {\n    return {\n      color: this.getSeverityHeaderColor(),\n      'color!important': this.getSeverityHeaderColor(),\n    } as any;\n  }\n\n  get headerTitleStyle(): { [key: string]: any } {\n    return {\n      color: this.getSeverityHeaderColor(),\n      'color!important': this.getSeverityHeaderColor(),\n    } as any;\n  }\n\n  private removeTextUtilityClasses(cls: string | undefined): string {\n    if (!cls) return '';\n\n    return cls\n      .split(/\\s+/)\n      .filter(Boolean)\n      .filter((c) => !c.startsWith('text-'))\n      .join(' ');\n  }\n\n  get safeHeaderIconClass(): string {\n    return this.removeTextUtilityClasses(this.config.headerIconClass);\n  }\n}\n","<p-dialog\n  [visible]=\"_internalVisible\"\n  (visibleChange)=\"onInternalVisibleChange($event)\"\n  [header]=\"config.header\"\n  [modal]=\"config.modal\"\n  [style]=\"config.style\"\n  [breakpoints]=\"config.breakpoints\"\n  [closable]=\"config.closable\"\n  [draggable]=\"config.draggable && !isFullscreen\"\n  [resizable]=\"config.resizable && !isFullscreen\"\n  [maximizable]=\"false\"\n  [dismissableMask]=\"config.dismissableMask\"\n  [closeOnEscape]=\"false\"\n  [blockScroll]=\"config.blockScroll\"\n  [position]=\"primePosition\"\n  [contentStyle]=\"config.contentStyle\"\n  [styleClass]=\"dialogStyleClass\"\n  >\n  <ng-template pTemplate=\"header\">\n    <div class=\"pt-dialog-header-inner\">\n      <div class=\"pt-dialog-header-left\">\n        @if (config.headerIconClass) {\n          <i\n            class=\"pt-dialog-header-icon\"\n            [ngClass]=\"safeHeaderIconClass\"\n            [ngStyle]=\"headerIconStyle\"\n          ></i>\n        }\n\n        <ng-content select=\"[ptDialogHeader]\"></ng-content>\n\n        @if (config.header) {\n          <span\n            class=\"pt-dialog-header-title\"\n            [ngStyle]=\"headerTitleStyle\"\n            >\n            {{ config.header }}\n          </span>\n        }\n      </div>\n\n      <div class=\"pt-dialog-header-actions\">\n        <button\n          type=\"button\"\n          class=\"pt-dialog-header-btn\"\n          [title]=\"isFullscreen ? 'Réduire' : 'Plein écran'\"\n          (click)=\"toggleFullscreen()\"\n          >\n          <i\n            class=\"pi\"\n            [ngClass]=\"\n              isFullscreen ? 'pi-window-minimize' : 'pi-window-maximize'\n            \"\n          ></i>\n        </button>\n      </div>\n    </div>\n  </ng-template>\n\n  <div class=\"pt-dialog-body\" [ngStyle]=\"bodyStyle\">\n    <div class=\"pt-dialog-body-inner\">\n      <ng-content select=\"[ptDialogContent]\"></ng-content>\n      <ng-content></ng-content>\n    </div>\n  </div>\n\n  @if (config.showFooter !== false) {\n    <ng-template pTemplate=\"footer\">\n      <div class=\"pt-dialog-footer-buttons\">\n        <ng-content select=\"[ptDialogFooter]\"></ng-content>\n      </div>\n    </ng-template>\n  }\n</p-dialog>\n","import { NgModule } from '@angular/core';\nimport { CommonModule } from '@angular/common';\nimport { DialogModule } from 'primeng/dialog';\nimport { PTDialogComponent } from './pt-dialog.component';\n\n@NgModule({\n  declarations: [PTDialogComponent],\n  imports: [CommonModule, DialogModule],\n  exports: [PTDialogComponent],\n})\nexport class PTDialogModule {}\n","import { CommonModule } from '@angular/common';\nimport {\n  Component,\n  EventEmitter,\n  Input,\n  OnDestroy,\n  OnInit,\n  Output,\n} from '@angular/core';\nimport {\n  FormBuilder,\n  FormControl,\n  FormGroup,\n  ReactiveFormsModule,\n  Validators,\n} from '@angular/forms';\nimport { Subject } from 'rxjs';\nimport { takeUntil } from 'rxjs/operators';\n\nimport { FormInputTypeEnum } from '../../enums';\nimport { ButtonModel, OtpPageConfig } from '../../models';\nimport { PTButtonModule } from '../../pt-button';\nimport { PTCardModule } from '../../pt-card';\nimport { PTOtpInputModule } from '../../pt-otp-input';\n\n@Component({\n  selector: 'pt-otp-card',\n  standalone: true,\n  imports: [\n    CommonModule,\n    ReactiveFormsModule,\n    PTCardModule,\n    PTButtonModule,\n    PTOtpInputModule,\n  ],\n  templateUrl: './pt-otp-card.component.html',\n  styleUrls: ['./pt-otp-card.component.css'],\n})\nexport class PTOtpCardComponent implements OnInit, OnDestroy {\n  @Input({ required: true }) otpPageConfig!: OtpPageConfig;\n\n  @Input()\n  set otpErrorMessage(value: string | null) {\n    this.externalOtpErrorMessage = value;\n\n    if (value) {\n      this.otpValidated = false;\n    }\n  }\n\n  @Input() otpValidated: boolean | null = null;\n\n  @Output() otpSubmit = new EventEmitter<string>();\n\n  @Output() backClick = new EventEmitter<void>();\n\n  formGroup: FormGroup;\n\n  externalOtpErrorMessage: string | null = null;\n\n  private readonly destroy$ = new Subject<void>();\n\n  constructor(private readonly fb: FormBuilder) {\n    this.formGroup = this.fb.group({});\n  }\n\n  ngOnInit(): void {\n    this.initializeDefaults();\n    this.setupFormField();\n\n    this.formGroup.patchValue({\n      otpCode: this.otpPageConfig.otp?.otpCode ?? '',\n    });\n\n    this.updateButtonDisabledState(this.formGroup.invalid);\n\n    this.formGroup.statusChanges\n      .pipe(takeUntil(this.destroy$))\n      .subscribe(() => {\n        this.updateButtonDisabledState(this.formGroup.invalid);\n      });\n\n    this.otpControl?.valueChanges\n      .pipe(takeUntil(this.destroy$))\n      .subscribe(() => {\n        this.clearOtpValidationState();\n      });\n  }\n\n  ngOnDestroy(): void {\n    this.destroy$.next();\n    this.destroy$.complete();\n  }\n\n  get otpControl(): FormControl | null {\n    const otpCodeField = this.otpPageConfig.otpCodeField;\n\n    if (!otpCodeField) {\n      return null;\n    }\n\n    return this.formGroup.get(otpCodeField.name) as FormControl | null;\n  }\n\n  get otpIconClass(): string {\n    return this.otpValidated === true ? 'pi pi-lock-open' : 'pi pi-lock';\n  }\n\n  get otpIconStateClass(): string {\n    return this.otpValidated === true ? 'otp-icon-valid' : 'otp-icon-invalid';\n  }\n\n  onSubmit(): void {\n    if (this.formGroup.invalid) {\n      this.formGroup.markAllAsTouched();\n\n      this.otpValidated = false;\n\n      this.otpPageConfig.otp = {\n        ...this.otpPageConfig.otp,\n        errorMessage:\n          this.otpPageConfig.otp?.emptyFieldErrorMessage ??\n          'Veuillez saisir le code de vérification.',\n      };\n\n      return;\n    }\n\n    this.otpValidated = null;\n    this.externalOtpErrorMessage = null;\n\n    this.otpPageConfig.otp = {\n      ...this.otpPageConfig.otp,\n      errorMessage: '',\n    };\n\n    const otpCode = String(this.formGroup.getRawValue().otpCode ?? '').trim();\n\n    this.otpSubmit.emit(otpCode);\n  }\n\n  onBack(): void {\n    this.backClick.emit();\n  }\n\n  private initializeDefaults(): void {\n    this.otpPageConfig.logoUrl = {\n      altText: 'Logo',\n      imageUrl: '',\n      width: '100px',\n      height: 'auto',\n      ...this.otpPageConfig.logoUrl,\n    };\n\n    this.otpPageConfig.title = {\n      text: 'Vérification à deux facteurs',\n      position: 'center',\n      color: '#333',\n      fontSize: '24px',\n      ...this.otpPageConfig.title,\n    };\n\n    this.otpPageConfig.description = {\n      text: 'Saisissez le code de vérification envoyé à votre adresse e-mail.',\n      color: 'var(--p-text-muted-color, #64748b)',\n      fontSize: '0.95rem',\n      ...this.otpPageConfig.description,\n    };\n\n    this.otpPageConfig.otp = {\n      otpCode: '',\n      errorMessage: '',\n      emptyFieldErrorMessage: 'Veuillez saisir le code de vérification.',\n      ...this.otpPageConfig.otp,\n    };\n\n    this.otpPageConfig.otpCardConfig = {\n      noBorder: true,\n      width: '400px',\n      padding: '40px',\n      ...this.otpPageConfig.otpCardConfig,\n    };\n\n    this.otpPageConfig.otpCodeField = {\n      name: 'otpCode',\n      label: 'Code de vérification',\n      required: true,\n      placeholder: 'Saisissez le code à 6 chiffres',\n      type: FormInputTypeEnum.OTP,\n      otpLength: 6,\n      otpIntegerOnly: true,\n      otpMask: false,\n      width: '100%',\n      ...this.otpPageConfig.otpCodeField,\n    };\n\n    this.otpPageConfig.buttonConfig = {\n      label: 'Vérifier le code',\n      type: 'submit',\n      icon: 'pi pi-shield',\n      iconPos: 'left',\n      styleClass: 'p-button-primary',\n      disabled: true,\n      width: '100%',\n      ...this.otpPageConfig.buttonConfig,\n    } as ButtonModel;\n\n    this.otpPageConfig.backButtonConfig = {\n      label: 'Retour',\n      type: 'button',\n      icon: 'pi pi-arrow-left',\n      iconPos: 'left',\n      styleClass: 'p-button-text',\n      width: '100%',\n      ...this.otpPageConfig.backButtonConfig,\n    } as ButtonModel;\n\n    this.otpPageConfig.footer = {\n      version: 'V1.0',\n      copyright: 'Your Company © 2026',\n      ...this.otpPageConfig.footer,\n    };\n  }\n\n  private setupFormField(): void {\n    const otpCodeField = this.otpPageConfig.otpCodeField!;\n\n    const otpLength = otpCodeField.otpLength ?? 6;\n    const integerOnly = otpCodeField.otpIntegerOnly ?? true;\n\n    const otpPattern = integerOnly\n      ? new RegExp(`^[0-9]{${otpLength}}$`)\n      : new RegExp(`^[A-Za-z0-9]{${otpLength}}$`);\n\n    const validators = otpCodeField.required\n      ? [Validators.required, Validators.pattern(otpPattern)]\n      : [Validators.pattern(otpPattern)];\n\n    this.formGroup.addControl(\n      otpCodeField.name,\n      this.fb.control(this.otpPageConfig.otp?.otpCode ?? '', validators),\n    );\n  }\n\n  private clearOtpValidationState(): void {\n    this.otpValidated = null;\n    this.externalOtpErrorMessage = null;\n\n    if (this.otpPageConfig.otp?.errorMessage) {\n      this.otpPageConfig.otp = {\n        ...this.otpPageConfig.otp,\n        errorMessage: '',\n      };\n    }\n  }\n\n  private updateButtonDisabledState(disabled: boolean): void {\n    this.otpPageConfig.buttonConfig = {\n      ...this.otpPageConfig.buttonConfig!,\n      disabled,\n    };\n  }\n}\n","<pt-card [config]=\"otpPageConfig.otpCardConfig!\">\n  @if (otpPageConfig.logoUrl; as logoUrl) {\n    @if (logoUrl.imageUrl) {\n      <div class=\"logo-container\">\n        <img\n          [src]=\"logoUrl.imageUrl\"\n          [alt]=\"logoUrl.altText || 'Logo'\"\n          [style.width]=\"logoUrl.width || '100px'\"\n          [style.height]=\"logoUrl.height || 'auto'\"\n        />\n      </div>\n    }\n  }\n\n  <div\n    class=\"title-container\"\n    [style.text-align]=\"otpPageConfig.title?.position || 'center'\"\n  >\n    <h1\n      [ngStyle]=\"{\n        color: otpPageConfig.title?.color || '#333',\n        'font-size': otpPageConfig.title?.fontSize || '24px',\n      }\"\n    >\n      {{ otpPageConfig.title?.text }}\n    </h1>\n  </div>\n\n  @if (otpPageConfig.description; as description) {\n    @if (description.text) {\n      <p\n        class=\"description\"\n        [ngStyle]=\"{\n          color: description.color,\n          'font-size': description.fontSize,\n        }\"\n      >\n        {{ description.text }}\n      </p>\n    }\n  }\n\n  <div class=\"otp-icon-container\" aria-hidden=\"true\">\n    <div class=\"otp-icon\" [ngClass]=\"otpIconStateClass\">\n      <i [class]=\"otpIconClass\"></i>\n    </div>\n  </div>\n\n  @if (externalOtpErrorMessage) {\n    <div class=\"error-message\" role=\"alert\">\n      {{ externalOtpErrorMessage }}\n    </div>\n  }\n\n  <form class=\"form-container\" [formGroup]=\"formGroup\" (ngSubmit)=\"onSubmit()\">\n    @if (otpPageConfig.otp; as otp) {\n      @if (otp.errorMessage) {\n        <div class=\"error-message\" role=\"alert\">\n          {{ otp.errorMessage }}\n        </div>\n      }\n    }\n\n    <div class=\"field\">\n      <pt-otp-input\n        [formGroup]=\"formGroup\"\n        [formField]=\"otpPageConfig.otpCodeField!\"\n      ></pt-otp-input>\n    </div>\n\n    <div class=\"submit-btn\">\n      <pt-button [buttonConfig]=\"otpPageConfig.buttonConfig!\"></pt-button>\n    </div>\n\n    <div class=\"back-btn\">\n      <pt-button\n        [buttonConfig]=\"otpPageConfig.backButtonConfig!\"\n        (click)=\"onBack()\"\n      ></pt-button>\n    </div>\n  </form>\n\n  <div class=\"otp-footer\">\n    {{ otpPageConfig.footer?.version }}\n\n    <span>\n      {{ otpPageConfig.footer?.copyright }}\n    </span>\n  </div>\n</pt-card>\n","import { Component, EventEmitter, Input, OnInit, Output } from '@angular/core';\n\nimport { CardConfig, OtpPageConfig } from '../models';\n\n@Component({\n  selector: 'pt-otp-page',\n  templateUrl: './pt-otp-page.component.html',\n  styleUrls: ['./pt-otp-page.component.css'],\n  standalone: false,\n})\nexport class PTOtpPageComponent implements OnInit {\n  @Input({ required: true }) otpPageConfig!: OtpPageConfig;\n\n  @Input() otpErrorMessage: string | null = null;\n\n  @Input() otpValidated: boolean | null = null;\n\n  @Output() otpSubmit = new EventEmitter<string>();\n\n  @Output() backClick = new EventEmitter<void>();\n\n  private readonly defaultCardConfig: CardConfig = {\n    borderRadius: '0',\n    margin: '0',\n    width: '100%',\n    height: '100%',\n    noBorder: true,\n    alignContent: 'center',\n    alignBodyContent: 'center',\n  };\n\n  ngOnInit(): void {\n    this.applyDefaultConfigs();\n  }\n\n  onOtpSubmit(otpCode: string): void {\n    this.otpSubmit.emit(otpCode);\n  }\n\n  onBackClick(): void {\n    this.backClick.emit();\n  }\n\n  private applyDefaultConfigs(): void {\n    this.otpPageConfig.centerCardConfig = this.applyDefaults(\n      this.otpPageConfig.centerCardConfig,\n    );\n\n    this.otpPageConfig.leftCardConfig = this.applyDefaults(\n      this.otpPageConfig.leftCardConfig,\n    );\n\n    this.otpPageConfig.rightCardConfig = this.applyDefaults(\n      this.otpPageConfig.rightCardConfig,\n    );\n  }\n\n  private applyDefaults(config?: CardConfig): CardConfig {\n    return {\n      ...this.defaultCardConfig,\n      ...(config ?? {}),\n    };\n  }\n}\n","<ng-container>\n  @if (otpPageConfig.position === \"center\") {\n    <div class=\"center-container\">\n      @if (otpPageConfig.centerCardConfig) {\n        <pt-card [config]=\"otpPageConfig.centerCardConfig\">\n          <pt-otp-card\n            [otpPageConfig]=\"otpPageConfig\"\n            [otpErrorMessage]=\"otpErrorMessage\"\n            [otpValidated]=\"otpValidated\"\n            (otpSubmit)=\"onOtpSubmit($event)\"\n            (backClick)=\"onBackClick()\"\n          ></pt-otp-card>\n        </pt-card>\n      }\n    </div>\n  }\n\n  @if (\n    otpPageConfig.position === \"left\" || otpPageConfig.position === \"right\"\n  ) {\n    <div class=\"left-right-container\">\n      @if (otpPageConfig.leftCardConfig) {\n        <pt-card [config]=\"otpPageConfig.leftCardConfig\">\n          @if (otpPageConfig.position === \"left\") {\n            <pt-otp-card\n              [otpPageConfig]=\"otpPageConfig\"\n              [otpErrorMessage]=\"otpErrorMessage\"\n              [otpValidated]=\"otpValidated\"\n              (otpSubmit)=\"onOtpSubmit($event)\"\n              (backClick)=\"onBackClick()\"\n            ></pt-otp-card>\n          }\n        </pt-card>\n      }\n\n      @if (otpPageConfig.rightCardConfig) {\n        <pt-card [config]=\"otpPageConfig.rightCardConfig\">\n          @if (otpPageConfig.position === \"right\") {\n            <pt-otp-card\n              [otpPageConfig]=\"otpPageConfig\"\n              [otpErrorMessage]=\"otpErrorMessage\"\n              [otpValidated]=\"otpValidated\"\n              (otpSubmit)=\"onOtpSubmit($event)\"\n              (backClick)=\"onBackClick()\"\n            ></pt-otp-card>\n          }\n        </pt-card>\n      }\n    </div>\n  }\n</ng-container>\n","import { NgModule } from '@angular/core';\n\nimport { PTCardModule } from '../pt-card';\nimport { PTOtpCardComponent } from './pt-otp-card/pt-otp-card.component';\nimport { PTOtpPageComponent } from './pt-otp-page.component';\n\n@NgModule({\n  declarations: [PTOtpPageComponent],\n  imports: [PTCardModule, PTOtpCardComponent],\n  exports: [PTOtpPageComponent],\n})\nexport class PTOtpPageModule {}\n","import { NgModule } from '@angular/core';\nimport { CommonModule } from '@angular/common';\nimport { FormsModule } from '@angular/forms';\nimport { PTAdvancedPrimeTableModule } from './pt-advanced-prime-table';\nimport { MultiSearchCriteriaModule } from './multi-search-criteria';\nimport { PTFormBuilderModule } from './pt-form-builder';\nimport { PTTextInputModule } from './pt-text-input';\nimport { PTTextAreaInputModule } from './pt-text-area-input';\nimport { PTSwitchInputModule } from './pt-switch-input';\nimport { PTNumberInputModule } from './pt-number-input';\nimport { PTCheckBoxInputModule } from './pt-check-box-input';\nimport { PTDateInputModule } from './pt-date-input';\nimport { PTMetricCardModule } from './pt-metric-card';\nimport { PTMetricCardGroupModule } from './pt-metric-card-group';\nimport { PTChartModule } from './pt-chart';\nimport { PTCardModule } from './pt-card';\nimport { PTMenuModule } from './pt-menu';\nimport { PTNavbarMenuModule } from './pt-nav-bar-menu';\nimport { PTSideBarMenuModule } from './pt-side-bar-menu';\nimport { PTPageSkeletonModule } from './pt-page-skeleton';\nimport { PTFooterModule } from './pt-footer';\nimport { PTBreadCrumbModule } from './pt-bread-crumb';\nimport { PTMenuFancyModule } from './pt-menu-fancy';\nimport { PTLoginPageModule } from './pt-login-page';\nimport { PTButtonModule } from './pt-button';\nimport { PTConfirmDialogModule } from './pt-confirm-dialog/pt-confirm-dialog.module';\nimport { PTToastNotifierModule } from './pt-toast-notifier';\nimport { PTDialogModule } from './pt-dialog';\nimport { PTMultiSelectModule } from './pt-multi-select';\nimport { PTOtpPageModule } from './pt-otp-page';\nimport { PTOtpInputModule } from './pt-otp-input';\nimport { PTPasswordInputModule } from './pt-password-input';\n\n@NgModule({\n  imports: [\n    CommonModule,\n    FormsModule,\n    PTAdvancedPrimeTableModule,\n    MultiSearchCriteriaModule,\n\n    // Inputs\n    PTCheckBoxInputModule,\n    PTDateInputModule,\n    PTFormBuilderModule,\n    PTNumberInputModule,\n    PTSwitchInputModule,\n    PTTextAreaInputModule,\n    PTTextInputModule,\n    PTMultiSelectModule,\n    PTOtpInputModule,\n    PTPasswordInputModule,\n\n    // Dashboard\n    PTMetricCardModule,\n    PTMetricCardGroupModule,\n\n    // Chart\n    PTChartModule,\n\n    // Cards\n    PTCardModule,\n\n    // Menu\n    PTMenuModule,\n    PTMenuFancyModule,\n\n    // Navbar\n    PTNavbarMenuModule,\n\n    // SideBar\n    PTSideBarMenuModule,\n\n    // Page skeleton\n    PTPageSkeletonModule,\n\n    // Footer\n    PTFooterModule,\n\n    // BreadCrumb\n    PTBreadCrumbModule,\n\n    // Login\n    PTLoginPageModule,\n    PTOtpPageModule,\n\n    // Button\n    PTButtonModule,\n\n    // Dialog\n    PTConfirmDialogModule,\n\n    // Toasts\n    PTToastNotifierModule,\n  ],\n  exports: [\n    PTAdvancedPrimeTableModule,\n    MultiSearchCriteriaModule,\n\n    // Inputs\n    PTCheckBoxInputModule,\n    PTDateInputModule,\n    PTFormBuilderModule,\n    PTNumberInputModule,\n    PTSwitchInputModule,\n    PTTextAreaInputModule,\n    PTTextInputModule,\n    PTMultiSelectModule,\n    PTOtpInputModule,\n    PTPasswordInputModule,\n\n    // Dashboard\n    PTMetricCardModule,\n    PTMetricCardGroupModule,\n\n    // Chart\n    PTChartModule,\n\n    // Cards\n    PTCardModule,\n\n    // Menu\n    PTMenuModule,\n    PTMenuFancyModule,\n    // Navbar\n    PTNavbarMenuModule,\n\n    // SideBar\n    PTSideBarMenuModule,\n\n    // Page skeleton\n    PTPageSkeletonModule,\n\n    // Footer\n    PTFooterModule,\n\n    // BreadCrumb\n    PTBreadCrumbModule,\n\n    // Login\n    PTLoginPageModule,\n    PTOtpPageModule,\n\n    // Button\n    PTButtonModule,\n\n    // Dialog\n    PTConfirmDialogModule,\n    PTDialogModule,\n\n    // Toasts\n    PTToastNotifierModule,\n  ],\n})\nexport class NgPrimeToolsModule {}\n","import { Component, Input, OnInit } from '@angular/core';\nimport { MetricPanelData } from '../models/metric-panel-data.model';\nimport { CardConfig, TitleStyle } from '../models';\nimport { Router } from '@angular/router';\n\n@Component({\n    selector: 'pt-metric-panel',\n    templateUrl: './pt-metric-panel.component.html',\n    styleUrls: ['./pt-metric-panel.component.css'],\n    standalone: false\n})\nexport class PTMetricPanelComponent implements OnInit {\n  @Input() panelData!: MetricPanelData;\n  @Input() cardConfig: CardConfig = this.getDefaultCardConfig();\n\n  constructor(private router: Router) {}\n\n  ngOnInit(): void {}\n\n  getDefaultCardConfig(): CardConfig {\n    return {\n      backgroundColor: '#fff',\n      borderColor: '#ddd',\n      borderWidth: '1px',\n      padding: '20px',\n      margin: '10px 0',\n      borderRadius: '8px',\n      boxShadow: '0 4px 6px rgba(0, 0, 0, 0.1)',\n    };\n  }\n\n  getTitleText(): string {\n    return typeof this.panelData.title === 'object'\n      ? this.panelData.title.text\n      : this.panelData.title || '';\n  }\n\n  getTitleStyles() {\n    if (typeof this.panelData.title === 'object') {\n      return {\n        color: this.panelData.title.color || '#333',\n        fontSize: this.panelData.title.fontSize || '1.5rem',\n        textAlign: this.panelData.title.position || 'left',\n      };\n    }\n    return {};\n  }\n\n  getIconClass(icon?: string): string {\n    return icon ? icon : '';\n  }\n\n  getIconStyles(icon?: any) {\n    if (typeof icon === 'object') {\n      return {\n        color: icon.color || '#333',\n        fontSize: icon.fontSize || '1.2rem',\n        backgroundColor: icon.backgroundColor || 'transparent',\n        borderRadius: icon.shape === 'circular' ? '50%' : '8px',\n        padding: '6px',\n        display: 'inline-block',\n      };\n    }\n    return {};\n  }\n\n  getValueStyles(value: any) {\n    if (typeof value === 'object' && 'text' in value) {\n      return {\n        color: value.color || '#2d3748',\n        fontSize: value.fontSize || '1rem',\n        fontWeight: value.fontWeight || 'bold',\n      };\n    }\n    return {};\n  }\n\n  isTitleObject(): boolean {\n    return typeof this.panelData.title === 'object';\n  }\n\n  getTitleIcon(): string | undefined {\n    if (this.isTitleObject()) {\n      const icon = (this.panelData.title as TitleStyle).icon;\n      return typeof icon === 'string' ? icon : icon?.code;\n    }\n    return undefined;\n  }\n\n  isTitleStyle(value: any): value is TitleStyle {\n    return typeof value === 'object' && value !== null && 'text' in value;\n  }\n\n  handleClick(url?: string) {\n    if (url) {\n      this.router.navigate([url]);\n    }\n  }\n}\n","<pt-card [config]=\"cardConfig\">\n  <!-- Panel Title -->\n  <div class=\"panel-header\" [ngStyle]=\"getTitleStyles()\">\n    @if (getTitleIcon()) {\n      <i\n        [ngClass]=\"getIconClass(getTitleIcon())\"\n        [ngStyle]=\"getIconStyles(getTitleIcon())\"\n      ></i>\n    }\n    <span>{{ getTitleText() }}</span>\n  </div>\n\n  <hr />\n\n  <!-- Metric Indicators -->\n  <div class=\"metric-list\">\n    @for (item of panelData.indicators; track item) {\n      <div\n        class=\"metric-item\"\n        [ngStyle]=\"{ cursor: item?.url ? 'pointer' : 'default' }\"\n        (click)=\"handleClick(item?.url)\"\n        [attr.title]=\"item?.url ? 'Go to ' + item.url : ''\"\n        >\n        @if (item.icon) {\n          <i\n            [ngClass]=\"getIconClass(item.icon.code)\"\n            [ngStyle]=\"getIconStyles(item.icon)\"\n          ></i>\n        }\n        <span class=\"metric-title\">\n          {{ isTitleStyle(item.title) ? item.title.text : item.title }}\n        </span>\n        <span class=\"metric-value\" [ngStyle]=\"getValueStyles(item.value)\">\n          {{ isTitleStyle(item.value) ? item.value.text : item.value }}\n        </span>\n      </div>\n    }\n  </div>\n</pt-card>\n","import { NgModule } from '@angular/core';\nimport { CommonModule } from '@angular/common';\nimport { PTMetricPanelComponent } from './pt-metric-panel.component';\nimport { PTCardModule } from '../pt-card';\n\n@NgModule({\n  declarations: [PTMetricPanelComponent],\n  imports: [CommonModule, PTCardModule],\n  exports: [PTMetricPanelComponent],\n})\nexport class PTMetricPanelModule {}\n","import {\n  Component,\n  Input,\n  OnInit,\n  OnDestroy,\n  ViewChild,\n  ElementRef,\n} from '@angular/core';\nimport {\n  Chart,\n  ChartConfiguration,\n  registerables,\n  ChartData,\n  ChartOptions,\n} from 'chart.js';\nimport ChartDataLabels from 'chartjs-plugin-datalabels';\nimport { ChartConfig, Dataset } from '../models/chart-config.model';\n\n@Component({\n    selector: 'pt-chart-comparison',\n    templateUrl: './pt-chart-comparison.component.html',\n    styleUrls: ['./pt-chart-comparison.component.css'],\n    standalone: false\n})\nexport class PTChartComparisonComponent implements OnInit, OnDestroy {\n  @Input() chartConfig!: ChartConfig;\n  @Input() medianTitle: string = 'Médiane';\n  @Input() xAxisTitle: string = 'Time';\n  @Input() yAxisTitle: string = 'Value';\n\n  @Input() yMin!: number;\n  @Input() yMax!: number;\n  @Input() yStepSize!: number;\n\n  @Input() chartHeight: string = '400px';\n  @Input() chartWidth: string = '1200px';\n\n  @ViewChild('chartCanvas', { static: true })\n  canvasRef!: ElementRef<HTMLCanvasElement>;\n\n  private chart!: Chart;\n\n  constructor() {\n    Chart.register(...registerables, ChartDataLabels);\n  }\n\n  ngOnInit() {\n    this.initializeChart();\n  }\n\n  ngOnDestroy() {\n    this.destroyChart();\n  }\n\n  private initializeChart() {\n    const canvas = this.canvasRef.nativeElement;\n    this.destroyChart();\n\n    const config: ChartConfiguration = {\n      type: this.chartConfig.type || 'line',\n      data: this.getFormattedChartData(),\n      options: this.getChartOptions(),\n    };\n\n    this.chart = new Chart(canvas, config);\n  }\n\n  private getFormattedChartData(): ChartData {\n    const medianValues = this.calculateMedian();\n\n    return {\n      labels: this.chartConfig.data.labels,\n      datasets: [\n        {\n          label: this.chartConfig.medianTitle || this.medianTitle || 'Médiane',\n          data: medianValues,\n          borderColor: '#0000FF',\n          borderWidth: 3,\n          backgroundColor: 'transparent',\n          pointRadius: 0,\n          fill: false,\n          tension: 0.1,\n          borderDash: [], // ✅ médiane continue\n        },\n        ...(this.chartConfig.data.datasets as Dataset[]),\n      ],\n    };\n  }\n\n  private calculateMedian(): number[] {\n    const datasets = this.chartConfig.data.datasets as Dataset[];\n\n    return this.chartConfig.data.labels!.map((_, index) => {\n      const valuesAtTime = datasets\n        .map((dataset) => dataset.data[index])\n        .filter(\n          (val): val is number => typeof val === 'number' && !Number.isNaN(val),\n        );\n\n      if (valuesAtTime.length === 0) return 0;\n\n      valuesAtTime.sort((a, b) => a - b);\n      const middle = Math.floor(valuesAtTime.length / 2);\n\n      return valuesAtTime.length % 2 === 0\n        ? (valuesAtTime[middle - 1] + valuesAtTime[middle]) / 2\n        : valuesAtTime[middle];\n    });\n  }\n\n  private getChartOptions(): ChartOptions {\n    const externalOptions = this.chartConfig.options ?? {};\n\n    return {\n      responsive: true,\n      maintainAspectRatio: false,\n      plugins: {\n        legend: { display: true, position: 'top' },\n        tooltip: { mode: 'index', intersect: false },\n        datalabels: {\n          display: false, // ✅ supprime les nombres au-dessus des lignes\n        },\n        ...(externalOptions.plugins ?? {}),\n      },\n      scales: {\n        x: {\n          title: { display: true, text: this.chartConfig.xAxisTitle || 'Time' },\n          ticks: { font: { size: 12 } },\n          ...(externalOptions.scales as any)?.x,\n        },\n        y: {\n          title: {\n            display: true,\n            text: this.chartConfig.yAxisTitle || 'Value',\n          },\n          min: this.chartConfig.scales?.y?.min,\n          max: this.chartConfig.scales?.y?.max,\n          ticks: {\n            stepSize: this.chartConfig.scales?.y?.ticks?.stepSize,\n            font: { size: 16, weight: 'bold' },\n            color: '#333',\n          },\n          grid: {\n            color: 'rgba(0,0,0,0.1)',\n          },\n          border: {\n            display: true,\n            color: '#000',\n          },\n          ...(externalOptions.scales as any)?.y,\n        },\n      },\n      ...externalOptions,\n    };\n  }\n\n  private destroyChart() {\n    if (this.chart) {\n      this.chart.destroy();\n      this.chart = undefined as any;\n    }\n  }\n}\n","<div class=\"chart-scroll-container\">\n  <div\n    class=\"chart-inner\"\n    [style.width]=\"chartConfig.chartWidth || '1200px'\"\n    [style.height]=\"chartConfig.chartHeight || '400px'\"\n  >\n    <canvas #chartCanvas></canvas>\n  </div>\n</div>\n","import { NgModule } from '@angular/core';\nimport { CommonModule } from '@angular/common';\nimport { PTChartComparisonComponent } from './pt-chart-comparison.component';\n\n@NgModule({\n  declarations: [PTChartComparisonComponent],\n  imports: [CommonModule],\n  exports: [PTChartComparisonComponent],\n})\nexport class PTChartComparisonModule {}\n","import { Component, Input, OnChanges, SimpleChanges } from '@angular/core';\nimport {\n  AxisChartConfig,\n  AxisChartData,\n  ChartConfig,\n  TitleStyle,\n} from '../models';\n\n@Component({\n    selector: 'pt-line-chart',\n    templateUrl: './pt-line-chart.component.html',\n    styleUrls: ['./pt-line-chart.component.css'],\n    standalone: false\n})\nexport class PTLineChartComponent implements OnChanges {\n  @Input() chartData!: AxisChartData[];\n  @Input() config: AxisChartConfig = {\n    yAxisTitle: 'Values',\n    xAxisTitle: 'Labels',\n    chartIdentifier: 'line-chart',\n    chartMenu: [],\n    chartWidth: '100%',\n    cardConfig: {\n      identifier: 'line-chart-card',\n      title: 'Line Chart',\n      width: '100%',\n      menu: {\n        menuItems: [],\n      },\n    },\n  };\n\n  lineChartConfig: ChartConfig;\n\n  constructor() {\n    this.lineChartConfig = this.createLineChartConfig();\n  }\n\n  ngOnChanges(changes: SimpleChanges): void {\n    if (changes['chartData'] && this.chartData && this.chartData.length > 0) {\n      this.updateChartData();\n    }\n  }\n\n  private createLineChartConfig(): ChartConfig {\n    const chartTitle =\n      typeof this.config.cardConfig?.title === 'string'\n        ? this.config.cardConfig.title\n        : (this.config.cardConfig?.title as TitleStyle)?.text || 'Line Chart';\n\n    return {\n      type: 'line',\n      data: {\n        labels: [],\n        datasets: [\n          {\n            label: chartTitle,\n            data: [],\n            borderColor: '#4aa0fa',\n            backgroundColor: 'rgba(74, 160, 250, 0.2)',\n            borderWidth: 2,\n            tension: 0.4,\n            fill: true,\n            pointRadius: 5,\n            pointBackgroundColor: '#4aa0fa',\n          },\n        ],\n      },\n      options: {\n        responsive: true,\n        plugins: {\n          legend: {\n            display: true,\n            position: 'bottom',\n          },\n          tooltip: {\n            callbacks: {\n              label: (context: any) =>\n                `${context.dataset.label}: ${context.raw.toFixed(2)}`,\n            },\n          },\n          datalabels: {\n            display: false,\n          },\n        },\n        scales: {\n          y: {\n            beginAtZero: true,\n            title: {\n              display: !!this.config.yAxisTitle,\n              text: this.config.yAxisTitle,\n            },\n          },\n          x: {\n            title: {\n              display: !!this.config.xAxisTitle,\n              text: this.config.xAxisTitle,\n            },\n          },\n        },\n      },\n    };\n  }\n\n  private updateChartData(): void {\n    const labels = this.chartData.map((item) => item.label);\n    const data = this.chartData.map((item) => item.value);\n\n    this.lineChartConfig.data.labels = labels;\n    this.lineChartConfig.data.datasets[0].data = data;\n\n    // Trigger chart update\n    (this.lineChartConfig as any)._chart?.update();\n  }\n}\n","<pt-card [config]=\"config.cardConfig!\">\n  <pt-chart [chartConfig]=\"lineChartConfig\"></pt-chart>\n</pt-card>\n","import { NgModule } from '@angular/core';\nimport { CommonModule } from '@angular/common';\nimport { PTCardModule } from '../pt-card';\nimport { PTChartModule } from '../pt-chart';\nimport { PTLineChartComponent } from './pt-line-chart.component';\n\n@NgModule({\n  declarations: [PTLineChartComponent],\n  imports: [CommonModule, PTCardModule, PTChartModule],\n  exports: [PTLineChartComponent],\n})\nexport class PTLineChartModule {}\n","import { FormInputTypeEnum } from '../../enums';\nimport { ChangePasswordPageConfig } from '../../models';\n\nexport const applyChangePasswordCardDefaults = (\n  config: ChangePasswordPageConfig,\n): void => {\n  config.title = {\n    text: 'Changer le mot de passe',\n    position: 'center',\n    color: '#333',\n    fontSize: '24px',\n    ...config.title,\n  };\n\n  config.logoUrl = {\n    altText: 'Logo',\n    imageUrl: '',\n    width: '100px',\n    height: 'auto',\n    ...config.logoUrl,\n  };\n\n  config.footer = {\n    version: 'V1.0',\n    copyright: 'Your Company © 2026',\n    ...config.footer,\n  };\n\n  config.changePassword = {\n    currentPassword: config.changePassword?.currentPassword ?? '',\n    newPassword: config.changePassword?.newPassword ?? '',\n    confirmationPassword: config.changePassword?.confirmationPassword ?? '',\n  };\n\n  config.changePasswordCardConfig = {\n    noBorder: true,\n    width: '480px',\n    padding: '40px',\n    ...config.changePasswordCardConfig,\n  };\n\n  config.showCurrentPasswordField = config.showCurrentPasswordField ?? false;\n\n  config.showPasswordStrength = config.showPasswordStrength ?? true;\n\n  config.newPasswordField = {\n    name: 'newPassword',\n    label: 'Nouveau mot de passe',\n    required: true,\n    placeholder: 'Saisir le nouveau mot de passe',\n    type: FormInputTypeEnum.PASSWORD,\n    toggleMask: true,\n    feedback: false,\n    ...config.newPasswordField,\n  };\n\n  config.confirmationPasswordField = {\n    name: 'confirmationPassword',\n    label: 'Confirmer le mot de passe',\n    required: true,\n    placeholder: 'Confirmer le nouveau mot de passe',\n    type: FormInputTypeEnum.PASSWORD,\n    toggleMask: true,\n    feedback: false,\n    ...config.confirmationPasswordField,\n  };\n\n  if (config.showCurrentPasswordField) {\n    config.currentPasswordField = {\n      name: 'currentPassword',\n      label: 'Mot de passe actuel',\n      required: true,\n      placeholder: 'Saisir le mot de passe actuel',\n      type: FormInputTypeEnum.PASSWORD,\n      toggleMask: true,\n      feedback: false,\n      ...config.currentPasswordField,\n    };\n  }\n\n  config.buttonConfig = {\n    label: 'Changer le mot de passe',\n    type: 'submit',\n    icon: 'pi pi-lock',\n    iconPos: 'left',\n    styleClass: 'p-button-primary',\n    disabled: true,\n    width: '100%',\n    ...config.buttonConfig,\n  };\n\n  config.passwordPolicyRules = config.passwordPolicyRules ?? [];\n\n  config.additionalContent = config.additionalContent ?? [];\n};\n","import { CommonModule } from '@angular/common';\nimport {\n  Component,\n  EventEmitter,\n  Input,\n  OnChanges,\n  OnDestroy,\n  OnInit,\n  Output,\n  SimpleChanges,\n} from '@angular/core';\nimport {\n  AbstractControl,\n  FormBuilder,\n  FormGroup,\n  ReactiveFormsModule,\n  ValidationErrors,\n  ValidatorFn,\n  Validators,\n} from '@angular/forms';\nimport { Subject } from 'rxjs';\nimport { takeUntil } from 'rxjs/operators';\n\nimport {\n  ChangePasswordModel,\n  ChangePasswordPageConfig,\n  LoginAdditionalContent,\n  PasswordPolicyRuleModel,\n} from '../../models';\nimport { PTButtonModule } from '../../pt-button';\nimport { PTCardModule } from '../../pt-card';\nimport { PTTextInputModule } from '../../pt-text-input';\nimport { ProgressBarModule } from 'primeng/progressbar';\n\nimport { applyChangePasswordCardDefaults } from './pt-change-password-card.config';\n\n@Component({\n  selector: 'pt-change-password-card',\n  standalone: true,\n  imports: [\n    CommonModule,\n    ReactiveFormsModule,\n    PTCardModule,\n    PTButtonModule,\n    PTTextInputModule,\n    ProgressBarModule,\n  ],\n  templateUrl: './pt-change-password-card.component.html',\n  styleUrls: ['./pt-change-password-card.component.css'],\n})\nexport class PTChangePasswordCardComponent\n  implements OnInit, OnChanges, OnDestroy\n{\n  @Input() changePasswordPageConfig!: ChangePasswordPageConfig;\n\n  @Input() changePasswordErrorMessage: string | null = null;\n\n  @Output() passwordValueChange = new EventEmitter<ChangePasswordModel>();\n\n  @Output() changePasswordSubmit = new EventEmitter<ChangePasswordModel>();\n\n  formGroup: FormGroup;\n\n  private readonly destroy$ = new Subject<void>();\n\n  private initialized = false;\n\n  constructor(private readonly formBuilder: FormBuilder) {\n    this.formGroup = this.formBuilder.group(\n      {},\n      {\n        validators: [this.passwordMatchValidator()],\n      },\n    );\n  }\n\n  ngOnInit(): void {\n    applyChangePasswordCardDefaults(this.changePasswordPageConfig);\n\n    this.setupFormFields();\n    this.listenToPasswordChanges();\n\n    this.initialized = true;\n\n    this.updateButtonDisabledState();\n  }\n\n  ngOnChanges(changes: SimpleChanges): void {\n    const configChange = changes['changePasswordPageConfig'];\n\n    if (!configChange?.currentValue || !this.initialized) {\n      return;\n    }\n\n    applyChangePasswordCardDefaults(this.changePasswordPageConfig);\n\n    /*\n     * The parent recreates the configuration after calculating\n     * passwordPolicyRules. Therefore the button must be recalculated\n     * each time the input configuration changes.\n     */\n    this.updateButtonDisabledState();\n  }\n\n  ngOnDestroy(): void {\n    this.destroy$.next();\n    this.destroy$.complete();\n  }\n\n  get confirmationPasswordControl(): AbstractControl | null {\n    return this.formGroup.get(\n      this.changePasswordPageConfig.confirmationPasswordField?.name ??\n        'confirmationPassword',\n    );\n  }\n\n  get visiblePasswordPolicyRules(): PasswordPolicyRuleModel[] {\n    return (\n      this.changePasswordPageConfig.passwordPolicyRules?.filter(\n        (rule: PasswordPolicyRuleModel) => rule.visible !== false,\n      ) ?? []\n    );\n  }\n\n  get visibleAdditionalContent(): LoginAdditionalContent[] {\n    return (\n      this.changePasswordPageConfig.additionalContent?.filter(\n        (item: LoginAdditionalContent) => item.visible !== false,\n      ) ?? []\n    );\n  }\n\n  onSubmit(): void {\n    this.formGroup.markAllAsTouched();\n\n    this.formGroup.updateValueAndValidity({\n      emitEvent: false,\n    });\n\n    this.updateButtonDisabledState();\n\n    if (!this.formGroup.valid) {\n      this.changePasswordPageConfig.errorMessage =\n        this.changePasswordPageConfig.emptyFieldsErrorMessage ??\n        'Veuillez renseigner tous les champs obligatoires.';\n\n      return;\n    }\n\n    if (!this.areFrontendPasswordPolicyRulesValid()) {\n      this.changePasswordPageConfig.errorMessage =\n        'Le nouveau mot de passe ne respecte pas les règles de sécurité.';\n\n      return;\n    }\n\n    this.changePasswordPageConfig.errorMessage = '';\n\n    this.changePasswordSubmit.emit(this.buildChangePasswordModel());\n  }\n\n  getAdditionalContentClass(item: LoginAdditionalContent): string[] {\n    return [\n      `additional-content-${item.align ?? 'center'}`,\n      item.styleClass ?? '',\n    ].filter(Boolean);\n  }\n\n  private setupFormFields(): void {\n    const changePassword = this.changePasswordPageConfig.changePassword!;\n\n    if (this.changePasswordPageConfig.showCurrentPasswordField) {\n      const currentPasswordField =\n        this.changePasswordPageConfig.currentPasswordField!;\n\n      this.formGroup.addControl(\n        currentPasswordField.name,\n        this.formBuilder.control(\n          changePassword.currentPassword ?? '',\n          currentPasswordField.required ? [Validators.required] : [],\n        ),\n      );\n    }\n\n    const newPasswordField = this.changePasswordPageConfig.newPasswordField!;\n\n    this.formGroup.addControl(\n      newPasswordField.name,\n      this.formBuilder.control(\n        changePassword.newPassword ?? '',\n        newPasswordField.required ? [Validators.required] : [],\n      ),\n    );\n\n    const confirmationPasswordField =\n      this.changePasswordPageConfig.confirmationPasswordField!;\n\n    this.formGroup.addControl(\n      confirmationPasswordField.name,\n      this.formBuilder.control(\n        changePassword.confirmationPassword ?? '',\n        confirmationPasswordField.required ? [Validators.required] : [],\n      ),\n    );\n  }\n\n  private listenToPasswordChanges(): void {\n    this.formGroup.valueChanges.pipe(takeUntil(this.destroy$)).subscribe(() => {\n      this.formGroup.updateValueAndValidity({\n        emitEvent: false,\n      });\n\n      /*\n       * First synchronize the local form state.\n       */\n      const changePasswordModel = this.buildChangePasswordModel();\n\n      this.changePasswordPageConfig.changePassword = changePasswordModel;\n\n      /*\n       * The parent will compute the policy state and replace the config.\n       * ngOnChanges() then recalculates disabled status with fresh rules.\n       */\n      this.passwordValueChange.emit(changePasswordModel);\n    });\n\n    this.formGroup.statusChanges\n      .pipe(takeUntil(this.destroy$))\n      .subscribe(() => {\n        this.updateButtonDisabledState();\n      });\n  }\n\n  private buildChangePasswordModel(): ChangePasswordModel {\n    const currentPasswordFieldName =\n      this.changePasswordPageConfig.currentPasswordField?.name ??\n      'currentPassword';\n\n    const newPasswordFieldName =\n      this.changePasswordPageConfig.newPasswordField?.name ?? 'newPassword';\n\n    const confirmationPasswordFieldName =\n      this.changePasswordPageConfig.confirmationPasswordField?.name ??\n      'confirmationPassword';\n\n    return {\n      currentPassword: this.changePasswordPageConfig.showCurrentPasswordField\n        ? String(this.formGroup.get(currentPasswordFieldName)?.value ?? '')\n        : undefined,\n\n      newPassword: String(\n        this.formGroup.get(newPasswordFieldName)?.value ?? '',\n      ),\n\n      confirmationPassword: String(\n        this.formGroup.get(confirmationPasswordFieldName)?.value ?? '',\n      ),\n    };\n  }\n\n  private passwordMatchValidator(): ValidatorFn {\n    return (control: AbstractControl): ValidationErrors | null => {\n      const newPasswordFieldName =\n        this.changePasswordPageConfig?.newPasswordField?.name ?? 'newPassword';\n\n      const confirmationPasswordFieldName =\n        this.changePasswordPageConfig?.confirmationPasswordField?.name ??\n        'confirmationPassword';\n\n      const newPassword = String(\n        control.get(newPasswordFieldName)?.value ?? '',\n      );\n\n      const confirmationPassword = String(\n        control.get(confirmationPasswordFieldName)?.value ?? '',\n      );\n\n      if (!newPassword || !confirmationPassword) {\n        return null;\n      }\n\n      return newPassword === confirmationPassword\n        ? null\n        : { passwordMismatch: true };\n    };\n  }\n\n  private areFrontendPasswordPolicyRulesValid(): boolean {\n    return this.visiblePasswordPolicyRules\n      .filter((rule: PasswordPolicyRuleModel) => !rule.backendOnly)\n      .every((rule: PasswordPolicyRuleModel) => rule.valid === true);\n  }\n\n  private updateButtonDisabledState(): void {\n    if (!this.changePasswordPageConfig?.buttonConfig) {\n      return;\n    }\n\n    const isFormValid = this.formGroup.valid;\n    const arePoliciesValid = this.areFrontendPasswordPolicyRulesValid();\n\n    this.changePasswordPageConfig.buttonConfig = {\n      ...this.changePasswordPageConfig.buttonConfig,\n      disabled: !isFormValid || !arePoliciesValid,\n    };\n  }\n}\n","<pt-card [config]=\"changePasswordPageConfig.changePasswordCardConfig!\">\n  @if (changePasswordPageConfig.logoUrl; as logoUrl) {\n    @if (logoUrl.imageUrl) {\n      <div class=\"logo-container\">\n        <img\n          [src]=\"logoUrl.imageUrl\"\n          [alt]=\"logoUrl.altText || 'Logo'\"\n          [style.width]=\"logoUrl.width || '100px'\"\n          [style.height]=\"logoUrl.height || 'auto'\"\n        />\n      </div>\n    }\n  }\n\n  <div class=\"title-container\">\n    <h1\n      [ngStyle]=\"{\n        color: changePasswordPageConfig.title?.color || '#333',\n        'font-size': changePasswordPageConfig.title?.fontSize || '24px',\n      }\"\n    >\n      {{ changePasswordPageConfig.title?.text || \"Changer le mot de passe\" }}\n    </h1>\n  </div>\n\n  @if (changePasswordErrorMessage) {\n    <div class=\"error-message\" role=\"alert\">\n      {{ changePasswordErrorMessage }}\n    </div>\n  }\n\n  <form class=\"form-container\" [formGroup]=\"formGroup\" (ngSubmit)=\"onSubmit()\">\n    @if (changePasswordPageConfig.errorMessage) {\n      <div class=\"error-message\" role=\"alert\">\n        {{ changePasswordPageConfig.errorMessage }}\n      </div>\n    }\n\n    @if (changePasswordPageConfig.showCurrentPasswordField) {\n      <div class=\"field\">\n        <pt-text-input\n          [formGroup]=\"formGroup\"\n          [formField]=\"changePasswordPageConfig.currentPasswordField!\"\n        ></pt-text-input>\n      </div>\n    }\n\n    <div class=\"field\">\n      <pt-text-input\n        [formGroup]=\"formGroup\"\n        [formField]=\"changePasswordPageConfig.newPasswordField!\"\n      ></pt-text-input>\n    </div>\n\n    @if (changePasswordPageConfig.showPasswordStrength) {\n      <div class=\"password-strength-section\">\n        <div class=\"password-strength-header\">\n          <span>\n            {{\n              changePasswordPageConfig.passwordStrengthLabel ||\n                \"Robustesse du mot de passe\"\n            }}\n          </span>\n\n          <span\n            class=\"strength-label\"\n            [ngClass]=\"\n              'strength-' +\n              (changePasswordPageConfig.passwordStrengthSeverity || 'neutral')\n            \"\n          >\n            {{\n              changePasswordPageConfig.passwordStrengthText || \"Non renseigné\"\n            }}\n          </span>\n        </div>\n\n        <p-progressbar\n          [value]=\"changePasswordPageConfig.passwordStrengthPercentage || 0\"\n          [showValue]=\"false\"\n          [ngClass]=\"\n            'password-progressbar strength-' +\n            (changePasswordPageConfig.passwordStrengthSeverity || 'neutral')\n          \"\n        ></p-progressbar>\n      </div>\n    }\n\n    @if (visiblePasswordPolicyRules.length > 0) {\n      <div class=\"password-policy-section\">\n        <strong class=\"password-policy-title\">\n          {{\n            changePasswordPageConfig.passwordPolicyTitle || \"Règles de sécurité\"\n          }}\n        </strong>\n\n        <ul class=\"password-policy-list\">\n          @for (rule of visiblePasswordPolicyRules; track rule.code) {\n            <li\n              [class.valid]=\"rule.valid\"\n              [class.invalid]=\"!rule.valid && !rule.backendOnly\"\n              [class.backend-only]=\"rule.backendOnly\"\n            >\n              @if (rule.backendOnly) {\n                <i class=\"pi pi-shield\"></i>\n              } @else if (rule.valid) {\n                <i class=\"pi pi-check-circle\"></i>\n              } @else {\n                <i class=\"pi pi-times-circle\"></i>\n              }\n\n              <span>{{ rule.label }}</span>\n            </li>\n          }\n        </ul>\n      </div>\n    }\n\n    <div class=\"field\">\n      <pt-text-input\n        [formGroup]=\"formGroup\"\n        [formField]=\"changePasswordPageConfig.confirmationPasswordField!\"\n      ></pt-text-input>\n\n      @if (\n        confirmationPasswordControl?.touched &&\n        formGroup.hasError(\"passwordMismatch\")\n      ) {\n        <small class=\"field-error\">\n          {{\n            changePasswordPageConfig.passwordMismatchErrorMessage ||\n              \"Les deux mots de passe ne correspondent pas.\"\n          }}\n        </small>\n      }\n    </div>\n\n    <div class=\"submit-btn\">\n      <pt-button\n        [buttonConfig]=\"changePasswordPageConfig.buttonConfig!\"\n      ></pt-button>\n    </div>\n\n    @if (visibleAdditionalContent.length > 0) {\n      <div class=\"additional-content-list\">\n        @for (item of visibleAdditionalContent; track item.id || $index) {\n          <div\n            class=\"additional-content-item\"\n            [ngClass]=\"getAdditionalContentClass(item)\"\n            [ngStyle]=\"item.style\"\n          >\n            @if (item.text) {\n              <span class=\"additional-content-text\">\n                {{ item.text }}\n              </span>\n            }\n          </div>\n        }\n      </div>\n    }\n  </form>\n\n  <div class=\"change-password-footer\">\n    {{ changePasswordPageConfig.footer?.version }}\n\n    <span>\n      {{ changePasswordPageConfig.footer?.copyright }}\n    </span>\n  </div>\n</pt-card>\n","import { Component, EventEmitter, Input, OnInit, Output } from '@angular/core';\n\nimport {\n  CardConfig,\n  ChangePasswordModel,\n  ChangePasswordPageConfig,\n} from '../models';\n\n@Component({\n  selector: 'pt-change-password-page',\n  templateUrl: './pt-change-password-page.component.html',\n  styleUrls: ['./pt-change-password-page.component.css'],\n  standalone: false,\n})\nexport class PTChangePasswordPageComponent implements OnInit {\n  @Input() changePasswordPageConfig!: ChangePasswordPageConfig;\n\n  @Input() changePasswordErrorMessage: string | null = null;\n\n  @Output() passwordValueChange = new EventEmitter<ChangePasswordModel>();\n\n  @Output() changePasswordSubmit = new EventEmitter<ChangePasswordModel>();\n\n  private readonly defaultCardConfig: CardConfig = {\n    borderRadius: '0',\n    margin: '0',\n    width: '100%',\n    height: '100%',\n    noBorder: true,\n    alignContent: 'center',\n    alignBodyContent: 'center',\n  };\n\n  ngOnInit(): void {\n    this.initializeDefaultPosition();\n    this.applyDefaultConfigs();\n  }\n\n  onPasswordValueChange(changePasswordModel: ChangePasswordModel): void {\n    this.passwordValueChange.emit(changePasswordModel);\n  }\n\n  onChangePasswordSubmit(changePasswordModel: ChangePasswordModel): void {\n    this.changePasswordSubmit.emit(changePasswordModel);\n  }\n\n  private initializeDefaultPosition(): void {\n    this.changePasswordPageConfig.position =\n      this.changePasswordPageConfig.position ?? 'center';\n  }\n\n  private applyDefaultConfigs(): void {\n    this.changePasswordPageConfig.centerCardConfig = this.applyDefaults(\n      this.changePasswordPageConfig.centerCardConfig,\n    );\n\n    this.changePasswordPageConfig.leftCardConfig = this.applyDefaults(\n      this.changePasswordPageConfig.leftCardConfig,\n    );\n\n    this.changePasswordPageConfig.rightCardConfig = this.applyDefaults(\n      this.changePasswordPageConfig.rightCardConfig,\n    );\n  }\n\n  private applyDefaults(config?: CardConfig): CardConfig {\n    return {\n      ...this.defaultCardConfig,\n      ...(config ?? {}),\n    };\n  }\n}\n","<!-- Center Position -->\n<ng-container>\n  @if (changePasswordPageConfig.position === \"center\") {\n    <div class=\"center-container\">\n      @if (changePasswordPageConfig.centerCardConfig) {\n        <pt-card [config]=\"changePasswordPageConfig.centerCardConfig\">\n          <pt-change-password-card\n            [changePasswordErrorMessage]=\"changePasswordErrorMessage\"\n            [changePasswordPageConfig]=\"changePasswordPageConfig\"\n            (passwordValueChange)=\"onPasswordValueChange($event)\"\n            (changePasswordSubmit)=\"onChangePasswordSubmit($event)\"\n          ></pt-change-password-card>\n        </pt-card>\n      }\n    </div>\n  }\n\n  @if (\n    changePasswordPageConfig.position === \"left\" ||\n    changePasswordPageConfig.position === \"right\"\n  ) {\n    <div class=\"left-right-container\">\n      @if (changePasswordPageConfig.leftCardConfig) {\n        <pt-card [config]=\"changePasswordPageConfig.leftCardConfig\">\n          @if (changePasswordPageConfig.position === \"left\") {\n            <pt-change-password-card\n              [changePasswordErrorMessage]=\"changePasswordErrorMessage\"\n              [changePasswordPageConfig]=\"changePasswordPageConfig\"\n              (passwordValueChange)=\"onPasswordValueChange($event)\"\n              (changePasswordSubmit)=\"onChangePasswordSubmit($event)\"\n            ></pt-change-password-card>\n          }\n        </pt-card>\n      }\n\n      @if (changePasswordPageConfig.rightCardConfig) {\n        <pt-card [config]=\"changePasswordPageConfig.rightCardConfig\">\n          @if (changePasswordPageConfig.position === \"right\") {\n            <pt-change-password-card\n              [changePasswordErrorMessage]=\"changePasswordErrorMessage\"\n              [changePasswordPageConfig]=\"changePasswordPageConfig\"\n              (passwordValueChange)=\"onPasswordValueChange($event)\"\n              (changePasswordSubmit)=\"onChangePasswordSubmit($event)\"\n            ></pt-change-password-card>\n          }\n        </pt-card>\n      }\n    </div>\n  }\n</ng-container>\n","import { NgModule } from '@angular/core';\nimport { CommonModule } from '@angular/common';\nimport { PTChangePasswordPageComponent } from './pt-change-password-page.component';\nimport { FormsModule, ReactiveFormsModule } from '@angular/forms';\nimport { PTTextInputModule } from '../pt-text-input/pt-text-input.module';\nimport { PTCardModule } from '../pt-card/pt-card.module';\nimport { PTButtonModule } from '../pt-button';\nimport { PTChangePasswordCardComponent } from './pt-change-password-card/pt-change-password-card.component';\n\n@NgModule({\n  declarations: [PTChangePasswordPageComponent],\n  imports: [\n    CommonModule,\n    FormsModule,\n    ReactiveFormsModule,\n    PTTextInputModule,\n    PTCardModule,\n    PTButtonModule,\n    PTChangePasswordCardComponent,\n  ],\n  exports: [PTChangePasswordPageComponent],\n})\nexport class PTChangePasswordPageModule {}\n","// nav-bar-menu-config.model.ts\n\nimport { ImageStyle } from './image-style.model';\nimport { MenuConfig } from './menu-config.model';\nimport { Pattern } from './pattern.model';\nimport { TextStyle } from './text-style.model';\n\nexport type DateFormat = 'dd/MM/YYYY' | 'MM/dd/YYYY' | 'YYYY-MM-dd';\nexport type TimeFormat = 'HH:mm:ss' | 'HH:mm';\nexport type DateTimePosition = 'left' | 'center' | 'right';\nexport type DateTimeSource = 'CLIENT' | 'SERVER';\n\nexport type NavBarUserAvatarMode = 'ICON' | 'INITIALS';\nexport type NavBarUserProfilePosition = 'NONE' | 'LEFT_OF_AVATAR';\n\nexport type NavBarUserMenuItemSeverity = 'default' | 'danger';\n\nexport interface NavBarDateTimeConfig {\n  dateFormat?: DateFormat;\n  timeFormat?: TimeFormat;\n\n  /** FIXED mode */\n  dateValue?: string;\n\n  /** style datetime using TextStyle */\n  textStyle?: Omit<TextStyle, 'text'>;\n\n  /** position between left and actions */\n  position?: DateTimePosition;\n\n  /** CLIENT or SERVER */\n  source?: DateTimeSource;\n}\n\nexport interface NavBarUserMenuItem {\n  text: string;\n  icon?: string;\n  severity?: NavBarUserMenuItemSeverity;\n  disabled?: boolean;\n  visible?: boolean;\n  separatorBefore?: boolean;\n  action?: () => void;\n}\n\nexport interface NavBarUserConfig {\n  username?: string;\n  firstName?: string;\n  lastName?: string;\n  fullName?: string;\n  profile?: string;\n\n  avatarMode?: NavBarUserAvatarMode;\n  showProfileInMenu?: boolean;\n  profilePosition?: NavBarUserProfilePosition;\n\n  avatarBackgroundColor?: string;\n  avatarTextColor?: string;\n  avatarBorderColor?: string;\n\n  profileTextStyle?: Omit<TextStyle, 'text'>;\n\n  menuItems?: NavBarUserMenuItem[];\n}\n\nexport interface NavBarMenuConfig {\n  logo?: string | ImageStyle;\n  appName?: string | TextStyle;\n  menus?: MenuConfig[];\n  pattern?: Pattern;\n  toggleButtonIcon?: string;\n  toggleButtonColor?: string;\n  dateTime?: NavBarDateTimeConfig;\n  user?: NavBarUserConfig;\n  height?: string;\n  minHeight?: string;\n  paddingTop?: string;\n  paddingBottom?: string;\n}\n","// src/lib/models/pt-dialog-config.model.ts\n\nimport { SeverityEnum } from '../enums';\n\nexport type DialogPosition =\n  | 'right'\n  | 'left'\n  | 'center'\n  | 'top'\n  | 'bottom'\n  | 'topleft'\n  | 'topright'\n  | 'bottomleft'\n  | 'bottomright';\n\nexport interface PTDialogConfig {\n  /** Title text in the header */\n  header?: string;\n\n  /** Inline style for the whole dialog container (PrimeNG [style]) */\n  style?: { [key: string]: any };\n\n  /** Extra classes applied to PrimeNG dialog */\n  styleClass?: string;\n\n  /** Optional icon in the header (e.g. 'pi pi-info-circle text-blue-500') */\n  headerIconClass?: string;\n\n  /** Optional body max width / height (e.g. '500px', '60vh') */\n  bodyWidth?: string;\n  bodyHeight?: string;\n\n  /** Enable scroll when body exceeds given height/width (default: true) */\n  bodyScrollable?: boolean;\n\n  /** Control footer visibility (default: true) */\n  showFooter?: boolean;\n\n  /** PrimeNG dialog behavior flags */\n  modal?: boolean;\n  closable?: boolean;\n  draggable?: boolean;\n  resizable?: boolean;\n  maximizable?: boolean;\n  dismissableMask?: boolean;\n  closeOnEscape?: boolean;\n  blockScroll?: boolean;\n\n  /** Responsive breakpoints */\n  breakpoints?: { [key: string]: string };\n\n  /** Dialog position (PrimeNG <p-dialog> position) */\n  position?: DialogPosition;\n\n  /** Extra style for content (PrimeNG [contentStyle]) */\n  contentStyle?: { [key: string]: any };\n\n  dialogStyle?: SeverityEnum;\n}\n","// Advanced table\nexport * from './table-column.model';\n\n// Multi search criteria\nexport * from './search-criteria.model';\nexport * from './filter-option.model';\n\n// Form inputs and btns\nexport * from './form-button.model';\nexport * from './form-field.model';\nexport * from './form-field-group.model';\nexport * from './form-check-field.model';\nexport * from './form-date-field.model';\nexport * from './form-drop-down-field.model';\nexport * from './form-multi-select.model';\nexport * from './form-number-field.model';\nexport * from './form-switch-field.model';\nexport * from './form-text-area-field.model';\nexport * from './form-text-field.model';\nexport * from './pt-date-input-config.model';\nexport * from './pt-dropdown-config.model';\nexport * from './pt-multi-select-config.model';\nexport * from './pt-switch-config.model';\n\n// Metric data for dashboard\nexport * from './metric-card-data.model';\nexport * from './metric-panel-data.model';\nexport * from './metric-indicateur-data.model';\n\n// Chart\nexport * from './chart-config.model';\nexport * from './axis-chart-config.model';\nexport * from './axis-chart-data.model';\n\n// Card\nexport * from './card-config.model';\n\n// Menu\nexport * from './menu.model';\nexport * from './menu-item.model';\nexport * from './menu-config.model';\nexport * from './nav-bar-menu-config.model';\nexport * from './side-menu-bar-config.model';\n\n// Page Skeleton\nexport * from './page-skeleton-config.model';\n\n// Footer\nexport * from './footer-config.model';\n\n// Bread Crumb\nexport * from './bread-crumb-config.model';\n\n// login\nexport * from './login-page-config.model';\nexport * from './login-model';\nexport * from './forgot-password-config.model';\nexport * from './login-additional-content.model';\nexport * from './otp-page-config.model';\n\n// change password\nexport * from './change-password-page-config.model';\nexport * from './change-password.model';\nexport * from './password-policy-rule.model';\n\n// Button\nexport * from './button.model';\n\n// Dialog\nexport * from './pt-confirm-dialog-config.model';\nexport * from './pt-dialog-config.model';\nexport * from './toast-message.model';\n\n// Generic\nexport * from './icon-style.model';\nexport * from './icon-image-style.model';\nexport * from './title-style.model';\nexport * from './text-style.model';\nexport * from './image-style.model';\nexport * from './badge.model';\nexport * from './pattern.model';\nexport * from './footer.model';\n","import { Component, Input, HostBinding } from '@angular/core';\n\n@Component({\n    selector: 'pt-group',\n    templateUrl: './pt-group.component.html',\n    styleUrls: ['./pt-group.component.css'],\n    standalone: false\n})\nexport class PTGroupComponent {\n  @Input() gap: string = '16px';\n  @Input() justify:\n    | 'flex-start'\n    | 'center'\n    | 'flex-end'\n    | 'space-between'\n    | 'space-around' = 'flex-start';\n\n  @HostBinding('style.display') display = 'flex';\n  @HostBinding('style.flexWrap') flexWrap = 'wrap';\n  @HostBinding('style.gap') get gapSize() {\n    return this.gap;\n  }\n  @HostBinding('style.justifyContent') get justifyContent() {\n    return this.justify;\n  }\n}\n","<ng-content></ng-content>\n","import { NgModule } from '@angular/core';\nimport { CommonModule } from '@angular/common';\nimport { PTCardModule } from '../pt-card';\nimport { PTGroupComponent } from './pt-group.component';\n\n@NgModule({\n  declarations: [PTGroupComponent],\n  imports: [CommonModule, PTCardModule],\n  exports: [PTGroupComponent],\n})\nexport class PTGroupModule {}\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './public-api';\n"],"names":["i4","i14.CustomCurrencyPipe","i15.CustomDatePipe","i3","i1","i2","i5","i7","i8","i9","i1.PTDateService","i6","i3.PTCheckBoxInputComponent","i4.PTDateInputComponent","i5.PTNumberInputComponent","i6.PTSwitchInputComponent","i7.PTTextAreaInputComponent","i8.PTTextInputComponent","i9.PTDropdownComponent","i10.PTMultiSelectComponent","i11.PTOtpInputComponent","i12.PTPasswordInputComponent","i4.PTDynamicFormFieldComponent","i1.PTMetricCardComponent","i2.PTMenuComponent","i2.PTCardComponent","i3.PTMenuFancyComponent","i3.PTCardComponent","i4.PTTextInputComponent","i1.PTCardComponent","i1.PTBreadCrumbService","i2.PTNavbarMenuComponent","i4.PTSideBarMenuComponent","i6.PTFooterComponent","i7.PTBreadCrumbComponent","i5.PTTextInputComponent","i2.PTLoginCardComponent","i4.PTButtonComponent","i5.PTOtpInputComponent","i2.PTOtpCardComponent","i2.PTChartComponent","i2.PTChangePasswordCardComponent"],"mappings":"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"}