ng-prime-tools 1.0.86 → 1.0.87

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -1 +1 @@
1
- {"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-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-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/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/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\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 ?? 0;\n this.dt.first = 0;\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 this.dt.value = [...(this.data ?? [])];\n this.totalRecords = (this.dt.value ?? []).length;\n this.dt.first = 0;\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 }\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 this.dt.value = [...(this.data ?? [])];\n this.totalRecords = (this.dt.value ?? []).length;\n this.dt.first = 0;\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}\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 } 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","<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 <!-- 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 <!-- 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 default:\n break;\n }\n\n return validators;\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 { 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';\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 ],\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?.imageUrl) {\n <div class=\"logo-container\">\n <img\n [src]=\"loginPageConfig.logoUrl?.imageUrl\"\n [alt]=\"loginPageConfig.logoUrl?.altText || 'Logo'\"\n [style.width]=\"loginPageConfig.logoUrl?.width || '100px'\"\n [style.height]=\"loginPageConfig.logoUrl?.height || 'auto'\"\n />\n </div>\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?.errorMessage) {\n <div class=\"error-message\" role=\"alert\">\n {{ loginPageConfig.login?.errorMessage }}\n </div>\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 (\n loginPageConfig.forgotPasswordConfig?.text &&\n loginPageConfig.forgotPasswordConfig?.url\n ) {\n <div\n class=\"forgot-password-container\"\n [ngClass]=\"\n 'forgot-password-' +\n (loginPageConfig.forgotPasswordConfig?.align || 'center')\n \"\n >\n <a\n [href]=\"loginPageConfig.forgotPasswordConfig?.url\"\n [target]=\"loginPageConfig.forgotPasswordConfig?.target || '_self'\"\n [rel]=\"\n loginPageConfig.forgotPasswordConfig?.target === '_blank'\n ? 'noopener noreferrer'\n : null\n \"\n [ngStyle]=\"loginPageConfig.forgotPasswordConfig?.style\"\n [class]=\"\n loginPageConfig.forgotPasswordConfig?.styleClass ||\n 'forgot-password-link'\n \"\n >\n {{ loginPageConfig.forgotPasswordConfig?.text }}\n </a>\n </div>\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 { 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';\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\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\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\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\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","// 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';\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","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","i2.PTChartComponent"],"mappings":"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"}
1
+ {"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-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-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/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.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\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 ?? 0;\n this.dt.first = 0;\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 this.dt.value = [...(this.data ?? [])];\n this.totalRecords = (this.dt.value ?? []).length;\n this.dt.first = 0;\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 }\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 this.dt.value = [...(this.data ?? [])];\n this.totalRecords = (this.dt.value ?? []).length;\n this.dt.first = 0;\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}\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 } 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","<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 <!-- 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 <!-- 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 default:\n break;\n }\n\n return validators;\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 { 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';\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 ],\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?.imageUrl) {\n <div class=\"logo-container\">\n <img\n [src]=\"loginPageConfig.logoUrl?.imageUrl\"\n [alt]=\"loginPageConfig.logoUrl?.altText || 'Logo'\"\n [style.width]=\"loginPageConfig.logoUrl?.width || '100px'\"\n [style.height]=\"loginPageConfig.logoUrl?.height || 'auto'\"\n />\n </div>\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?.errorMessage) {\n <div class=\"error-message\" role=\"alert\">\n {{ loginPageConfig.login?.errorMessage }}\n </div>\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 (\n loginPageConfig.forgotPasswordConfig?.text &&\n loginPageConfig.forgotPasswordConfig?.url\n ) {\n <div\n class=\"forgot-password-container\"\n [ngClass]=\"\n 'forgot-password-' +\n (loginPageConfig.forgotPasswordConfig?.align || 'center')\n \"\n >\n <a\n [href]=\"loginPageConfig.forgotPasswordConfig?.url\"\n [target]=\"loginPageConfig.forgotPasswordConfig?.target || '_self'\"\n [rel]=\"\n loginPageConfig.forgotPasswordConfig?.target === '_blank'\n ? 'noopener noreferrer'\n : null\n \"\n [ngStyle]=\"loginPageConfig.forgotPasswordConfig?.style\"\n [class]=\"\n loginPageConfig.forgotPasswordConfig?.styleClass ||\n 'forgot-password-link'\n \"\n >\n {{ loginPageConfig.forgotPasswordConfig?.text }}\n </a>\n </div>\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 { 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';\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\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\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\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\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 { CommonModule } from '@angular/common';\nimport {\n Component,\n EventEmitter,\n Input,\n OnDestroy,\n OnInit,\n Output,\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 { FormInputTypeEnum } from '../../enums';\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\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 implements OnInit, OnDestroy {\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 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 this.initializeDefaults();\n this.setupFormFields();\n this.listenToPasswordChanges();\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 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 initializeDefaults(): void {\n this.changePasswordPageConfig.title = {\n text: 'Changer le mot de passe',\n position: 'center',\n color: '#333',\n fontSize: '24px',\n ...this.changePasswordPageConfig.title,\n };\n\n this.changePasswordPageConfig.logoUrl = {\n altText: 'Logo',\n imageUrl: '',\n width: '100px',\n height: 'auto',\n ...this.changePasswordPageConfig.logoUrl,\n };\n\n this.changePasswordPageConfig.footer = {\n version: 'V1.0',\n copyright: 'Your Company © 2026',\n ...this.changePasswordPageConfig.footer,\n };\n\n this.changePasswordPageConfig.changePassword = {\n currentPassword:\n this.changePasswordPageConfig.changePassword?.currentPassword ?? '',\n newPassword:\n this.changePasswordPageConfig.changePassword?.newPassword ?? '',\n confirmationPassword:\n this.changePasswordPageConfig.changePassword?.confirmationPassword ??\n '',\n };\n\n this.changePasswordPageConfig.changePasswordCardConfig = {\n noBorder: true,\n width: '480px',\n padding: '40px',\n ...this.changePasswordPageConfig.changePasswordCardConfig,\n };\n\n this.changePasswordPageConfig.showCurrentPasswordField =\n this.changePasswordPageConfig.showCurrentPasswordField ?? false;\n\n this.changePasswordPageConfig.showPasswordStrength =\n this.changePasswordPageConfig.showPasswordStrength ?? true;\n\n this.changePasswordPageConfig.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 ...this.changePasswordPageConfig.newPasswordField,\n };\n\n this.changePasswordPageConfig.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 ...this.changePasswordPageConfig.confirmationPasswordField,\n };\n\n if (this.changePasswordPageConfig.showCurrentPasswordField) {\n this.changePasswordPageConfig.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 ...this.changePasswordPageConfig.currentPasswordField,\n };\n }\n\n this.changePasswordPageConfig.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 ...this.changePasswordPageConfig.buttonConfig,\n };\n\n this.changePasswordPageConfig.passwordPolicyRules =\n this.changePasswordPageConfig.passwordPolicyRules ?? [];\n\n this.changePasswordPageConfig.additionalContent =\n this.changePasswordPageConfig.additionalContent ?? [];\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 const changePasswordModel = this.buildChangePasswordModel();\n\n this.changePasswordPageConfig.changePassword = changePasswordModel;\n\n this.passwordValueChange.emit(changePasswordModel);\n\n this.formGroup.updateValueAndValidity({\n emitEvent: false,\n });\n\n this.updateButtonDisabledState();\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 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?.imageUrl) {\n <div class=\"logo-container\">\n <img\n [src]=\"changePasswordPageConfig.logoUrl?.imageUrl\"\n [alt]=\"changePasswordPageConfig.logoUrl?.altText || 'Logo'\"\n [style.width]=\"changePasswordPageConfig.logoUrl?.width || '100px'\"\n [style.height]=\"changePasswordPageConfig.logoUrl?.height || 'auto'\"\n />\n </div>\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';\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","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","i2.PTChartComponent","i2.PTChangePasswordCardComponent"],"mappings":"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"}