{"version":3,"file":"edugouvfr-ngx-dsfr-ext-grid.mjs","sources":["../../../projects/ngx-dsfr-ext/grid/src/lib/components/button-cell-grid.component.ts","../../../projects/ngx-dsfr-ext/grid/src/lib/components/select-column-filter.component.ts","../../../projects/ngx-dsfr-ext/grid/src/lib/interfaces/remote-ag-grid-api.ts","../../../projects/ngx-dsfr-ext/grid/src/lib/directives/remote-ag-grid.directive.ts","../../../projects/ngx-dsfr-ext/grid/src/lib/i18n/grid.fr.ts","../../../projects/ngx-dsfr-ext/grid/src/lib/i18n/messages.en.ts","../../../projects/ngx-dsfr-ext/grid/src/lib/i18n/messages.fr.ts","../../../projects/ngx-dsfr-ext/grid/src/lib/grid.component.ts","../../../projects/ngx-dsfr-ext/grid/src/lib/grid.component.html","../../../projects/ngx-dsfr-ext/grid/src/lib/grid.module.ts","../../../projects/ngx-dsfr-ext/grid/src/public-api.ts","../../../projects/ngx-dsfr-ext/grid/src/edugouvfr-ngx-dsfr-ext-grid.ts"],"sourcesContent":["import { Component, ViewEncapsulation } from '@angular/core';\nimport { DsfrButtonModule, DsfrPosition, DsfrSize } from '@edugouvfr/ngx-dsfr';\nimport { ICellRendererAngularComp } from 'ag-grid-angular';\n\n@Component({\n  selector: 'dsfr-button-cell-grid',\n  styles: ['.ag-cell-value .fr-btn { margin: 0 0.25rem; vertical-align: sub }'],\n  template: `<dsfr-button\n    [id]=\"id\"\n    [icon]=\"icon\"\n    [label]=\"label\"\n    [iconPosition]=\"iconPosition\"\n    [ariaLabel]=\"ariaLabel\"\n    [customClass]=\"customClass\"\n    [tooltipMessage]=\"tooltipMessage\"\n    [ariaControls]=\"ariaControls\"\n    [buttonSize]=\"size ?? 'MD'\"\n    (click)=\"onClick($event)\"\n    variant=\"secondary\"></dsfr-button>`,\n  encapsulation: ViewEncapsulation.None,\n  imports: [DsfrButtonModule],\n})\nexport class DsfrButtonCellGridComponent implements ICellRendererAngularComp {\n  id?: string;\n  params: any;\n  label!: string;\n  size?: DsfrSize;\n  icon?: string;\n  iconPosition?: DsfrPosition;\n  ariaLabel?: string;\n  customClass?: string;\n  tooltipMessage?: string;\n  ariaControls?: string;\n\n  agInit(params: any): void {\n    this.id = params.id;\n    this.params = params;\n    this.label = params.label;\n    this.size = params.size;\n    this.icon = params.icon;\n    this.tooltipMessage = params.tooltipMessage;\n    this.ariaLabel = params.ariaLabel;\n    this.customClass = params.customClass;\n    this.iconPosition = params.iconPosition;\n    this.ariaControls = params.ariaControls;\n  }\n\n  refresh(params?: any): boolean {\n    return true;\n  }\n\n  /**\n   * Permet d'appeler la méthode définie sur le bouton en passant les données de la ligne\n   * @param $event Event lié au clic sur le bouton\n   */\n  onClick($event: any) {\n    if (this.params.onClick instanceof Function) {\n      const params = {\n        event: $event,\n        rowData: this.params.node.data,\n      };\n      this.params.onClick(params);\n    }\n  }\n}\n","import { Component } from '@angular/core';\nimport { FormsModule, ReactiveFormsModule } from '@angular/forms';\nimport { DsfrFormSelectModule, DsfrOption } from '@edugouvfr/ngx-dsfr';\nimport { IFloatingFilterAngularComp } from 'ag-grid-angular';\nimport { IFloatingFilterParams, ISimpleFilter } from 'ag-grid-community';\n\nexport interface DsfrFilterSelectParams {\n  label: string;\n  id: string;\n  options: DsfrOption[];\n  compareFn?: any;\n  placeholder?: string;\n}\n\n@Component({\n  imports: [FormsModule, ReactiveFormsModule, DsfrFormSelectModule],\n  template: `<dsfr-form-select\n    [inputId]=\"params.id\"\n    [(ngModel)]=\"currentValue\"\n    [placeholder]=\"params.placeholder ?? ''\"\n    [options]=\"options\"\n    (selectChange)=\"onSelectChanged()\">\n    <ng-container label\n      ><span class=\"fr-sr-only\"> {{ label }}</span>\n    </ng-container>\n  </dsfr-form-select>`,\n})\nexport class DsfrSelectFilterComponent<T> implements IFloatingFilterAngularComp {\n  params!: IFloatingFilterParams<ISimpleFilter> & DsfrFilterSelectParams;\n  currentValue?: T;\n  style: any;\n  options: DsfrOption[] = [];\n  label?: string;\n  compareFn: any;\n\n  agInit(params: IFloatingFilterParams<ISimpleFilter> & DsfrFilterSelectParams): void {\n    this.params = params;\n    this.label = params.label;\n    this.options = params.options;\n  }\n\n  onParentModelChanged(parentModel: any) {\n    // When the filter is empty we will receive a null value here\n    if (!parentModel) {\n      this.currentValue = undefined;\n    } else {\n      this.currentValue = parentModel.filter;\n    }\n  }\n\n  onSelectChanged() {\n    if (!this.currentValue) {\n      // Remove the filter\n      this.params.parentFilterInstance((instance: any) => {\n        instance.onFloatingFilterChanged(null, null);\n      });\n      return;\n    }\n\n    //this.currentValue = Number(this.currentValue);\n    this.params.parentFilterInstance((instance: any) => {\n      instance.onFloatingFilterChanged('equals', this.currentValue);\n    });\n  }\n}\n","import { GridApi, IGetRowsParams, SortModelItem } from 'ag-grid-community';\nimport { Observable } from 'rxjs';\n\nexport enum DsfrGridModeConst {\n  CLIENT = 'client',\n  SERVER = 'server',\n}\n\nexport type DsfrGridMode = `${DsfrGridModeConst}`;\n\n/** Données retournées par la grid */\nexport interface DsfrRemoteGridResult {\n  data: any[];\n  totalRecords: number;\n}\n\n/** Mapper le modèle de l'API par rapport aux query params utilisés par la grid  */\nexport interface DsfrGridParams {\n  /** nombre de résultat à retourner (taille de la page) */\n  limit: number;\n  /**  Index du premier résultat à afficher */\n  offset: number;\n  /** Tri */\n  sort?: SortModelItem[];\n  /** Filtres */\n  filters?: any[];\n}\n\n/** Mapper les résultats de la grid par rapport au résultat retournés par l'API */\nexport interface DsfrGridResultModel {\n  /** données */\n  data: string;\n  /** total de résultats */\n  totalRecords: string;\n  /** fonction de mapping optionnelle des données */\n  mappingFunction?: (e: any) => void;\n}\n\n/**\n * Datasource pour implémentation de la pagination coté backend de Ag-grid community\n * cf: https://medium.com/weekly-webtips/tech-building-reusable-server-side-pagination-for-ag-grid-in-angular-c8127e2da346\n * et https://www.ag-grid.com/javascript-data-grid/infinite-scrolling/\n *  */\nexport abstract class EduRemoteAgGridApi {\n  getDataError?: (err: any) => void;\n  gridApi?: GridApi | undefined;\n  prepareUpdateData!: (params: IGetRowsParams) => void;\n  result$: Observable<DsfrRemoteGridResult> | undefined;\n}\n","import { Directive, EventEmitter, HostListener, NgZone, inject } from '@angular/core';\nimport { AgGridAngular } from 'ag-grid-angular';\nimport { IDatasource, IGetRowsParams } from 'ag-grid-community';\nimport { EMPTY } from 'rxjs';\nimport { DsfrRemoteGridResult, EduRemoteAgGridApi } from '../interfaces/remote-ag-grid-api';\n\n/**\n * Directive pour l'implémentation de la pagination coté backend de Ag-grid community\n * cf: https://medium.com/weekly-webtips/tech-building-reusable-server-side-pagination-for-ag-grid-in-angular-c8127e2da346\n */\n@Directive({\n  selector: '[remoteAgGridBinding]',\n  standalone: true,\n})\nexport class EduRemoteAgGridDirective {\n  remoteGridReady = new EventEmitter();\n\n  // DOC: https://www.ag-grid.com/javascript-data-grid/infinite-scrolling/#datasource-interface\n  dataSource: IDatasource = {\n    getRows: (params: IGetRowsParams) => {\n      this.zone.run(() => {\n        // force event to run inside angular zone for detection (#fix 31.0.2)\n        this.host.prepareUpdateData(params);\n      });\n      this.host.result$?.subscribe({\n        next: (e: DsfrRemoteGridResult) => {\n          params.successCallback(e.data, e.totalRecords);\n        },\n        error: (error) => {\n          this.handleError(error);\n        },\n      });\n    },\n  };\n\n  private host = inject(EduRemoteAgGridApi);\n  private zone = inject(NgZone);\n\n  // https://www.ag-grid.com/angular-data-grid/grid-events/\n  /**\n   * Initialisation grid\n   * @param grid\n   */\n  @HostListener('gridReady', ['$event' as any])\n  gridReady(grid: AgGridAngular) {\n    grid.api.setGridOption('datasource', this.dataSource);\n    this.remoteGridReady.emit(grid);\n  }\n\n  handleError(err: any) {\n    this.host.getDataError && this.host.getDataError(err);\n    return EMPTY;\n  }\n}\n","export const AG_GRID_LOCALE_FR = {\n  // Set Filter\n  selectAll: '(Tout sélectionner)',\n  selectAllSearchResults: '(Sélectionner tous les résultats)',\n  addCurrentSelectionToFilter: 'Ajouter la sélection courante au filtre',\n  searchOoo: 'Rechercher...',\n  blanks: '(Blancs)',\n  noMatches: 'Aucun résultat',\n\n  // Number Filter & Text Filter\n  filterOoo: 'Filtre...',\n  equals: 'Egal',\n  notEqual: 'Différent de',\n  blank: 'Vide',\n  notBlank: 'Non vide',\n  empty: 'Choisir',\n\n  // Number Filter\n  lessThan: 'Inférieur à',\n  greaterThan: 'Supérieur à',\n  lessThanOrEqual: 'Inférieur ou égal à',\n  greaterThanOrEqual: 'Supérieur ou égal à',\n  inRange: 'Fourchette',\n  inRangeStart: 'entre',\n  inRangeEnd: 'et',\n\n  // Text Filter\n  contains: 'Contient',\n  notContains: 'Ne contient pas',\n  startsWith: 'Commence par',\n  endsWith: 'Finit par',\n\n  // Date Filter\n  dateFormatOoo: 'jj/mm/aaaa',\n  before: 'Avant',\n  after: 'Après',\n\n  // Filter Conditions\n  andCondition: 'ET',\n  orCondition: 'OU',\n\n  // Filter Buttons\n  applyFilter: 'Appliquer',\n  resetFilter: 'Réinitialiser',\n  clearFilter: 'Vider',\n  cancelFilter: 'Annuler',\n\n  // Filter Titles\n  textFilter: 'Filtre textuel',\n  numberFilter: 'Filtre numérique',\n  dateFilter: 'Filtre de date',\n  setFilter: 'Appliquer le filtre',\n\n  // Side Bar\n  columns: 'Colonnes',\n  filters: 'Filtres',\n\n  // columns tool panel\n  pivotMode: 'Mode Pivot',\n  groups: 'Groupes de lignes',\n  rowGroupColumnsEmptyMessage: 'Faites glisser ici pour définir les groupes de lignes',\n  values: 'Valeurs',\n  valueColumnsEmptyMessage: 'Faites glisser ici pour aggréger',\n  pivots: 'Labels de colonnes',\n  pivotColumnsEmptyMessage: 'Faites glisser ici pour définir les labels de colonnes',\n\n  // Header of the Default Group Column\n  group: 'Groupe',\n\n  // Row Drag\n  rowDragRow: 'ligne',\n  rowDragRows: 'lignes',\n\n  // Other\n  loadingOoo: 'Chargement...',\n  loadingError: 'ERREUR',\n  noRowsToShow: 'Aucun résultat',\n  enabled: 'Activé',\n\n  // Group Column Filter\n  groupFilterSelect: 'Sélectionner un champ:',\n\n  // Menu\n  pinColumn: 'Epingler la colonne',\n  pinLeft: 'Epingler à gauche',\n  pinRight: 'Epingler à droite',\n  noPin: \"Pas d'épingle\",\n  valueAggregation: \"Valeur d'aggrégation\",\n  autosizeThiscolumn: 'Adapter la taille de cette colonne',\n  autosizeAllColumns: 'Adapter la taille de toutes les colonnes',\n  groupBy: 'Grouper par',\n  ungroupBy: 'Dégrouper par',\n  addToValues: 'Ajouter ${variable} aux valeurs',\n  removeFromValues: 'Retirer ${variable} des valeurs',\n  addToLabels: 'Ajouter ${variable} aux labels',\n  removeFromLabels: 'Retirer ${variable} des labels',\n  resetColumns: 'Réinitialiser les colonnes',\n  expandAll: 'Développer tout',\n  collapseAll: 'Fermer tout',\n  copy: 'Copier',\n  ctrlC: 'Ctrl + C',\n  copyWithHeaders: 'Copier avec les en-têtes',\n  copyWithGroupHeaders: 'Copier avec les en-têtes de groupes',\n  paste: 'Coller',\n  ctrlV: 'Ctrl + V',\n  export: 'Exporter',\n  csvExport: 'Export en CSV ',\n  excelExport: 'Export au format Excel',\n  noAggregation: 'Aucune',\n  ungroupAll: 'Tout dégrouper',\n  ctrlX: 'Ctrl+X',\n  cut: 'Couper',\n  columnFilter: 'Filtre de colonne',\n  columnChooser: 'Choisir la colonne',\n  sortAscending: 'Tri ascendant',\n  sortDescending: 'Tri descendant',\n  sortUnSort: 'Effacer le tri',\n\n  // Enterprise Menu Aggregation and Status Bar\n  sum: 'Somme',\n  min: 'Min',\n  max: 'Max',\n  none: 'Aucun',\n  count: 'Compte',\n  avg: 'Moyenne',\n  filteredRows: 'Filtré',\n  selectedRows: 'Selectionné',\n  totalRows: 'Nombre total de lignes',\n  totalAndFilteredRows: 'Lignes',\n  more: 'Plus',\n  to: 'à',\n  of: 'sur',\n  page: 'Page',\n  nextPage: 'Page suivante',\n  lastPage: 'Dernière Page',\n  firstPage: 'Premère Page',\n  previousPage: 'Page précédente',\n  pageSize: 'Nombre de résultats affichés par page',\n\n  // Pivoting\n  pivotColumnGroupTotals: 'Total',\n\n  // ARIA\n  ariaChecked: 'sélectionné',\n  ariaColumn: 'colonne',\n  ariaColumnGroup: 'Groupe de colonnes',\n  ariaColumnFiltered: 'Colonne Filtrée',\n  ariaColumnList: 'Liste de colonnes',\n  ariaColumnSelectAll: 'Sélectionner toutes les colonnes',\n  ariaDateFilterInput: 'Champ du filtre de date',\n  ariaDefaultListName: 'Liste',\n  ariaFilterColumnsInput: 'Champ du filtre des colonnes',\n  ariaFilterFromValue: 'Filtrer à partir de la valeur',\n  ariaFilterInput: '',\n  ariaFilterList: 'Filtre de liste',\n  ariaFilterToValue: 'Valeur du filtre \"de\"',\n  ariaFilterValue: 'Valeur du filtre',\n  ariaFilteringOperator: 'Opérateur de filtre',\n  ariaHidden: 'masqué',\n  ariaIndeterminate: 'indéterminé',\n  ariaInputEditor: 'Editeur',\n  ariaMenuColumn: 'Appuyez sur CTRL ENTREE pour ouvrir le menu de colonne.',\n  ariaRowDeselect: 'Appuyez sur ESPACE pour déselectionner cette ligne',\n  ariaRowSelectAll: 'Appuyez sur ESPACE pour activer la sélection de toutes les lignes',\n  ariaRowToggleSelection: 'Appuyez sur ESPACE pour activer la sélection de ligne',\n  ariaRowSelect: 'Appuyez sur ESPACE pour sélectionner cette ligne',\n  ariaSearch: 'Rechercher',\n  ariaSortableColumn: 'Appuyez sur ENTREE pour trier',\n  ariaToggleVisibility: 'Appuyez sur ESPACE pour activer la visibilité',\n  ariaUnchecked: 'désélectionné',\n  ariaVisible: 'visible',\n  ariaSearchFilterValues: 'Chercher les valeurs de filtres',\n  ariaFilterMenuOpen: 'Ouvrir le menu de filtre',\n  ariaFilterColumn: 'Appuyer sur CTRL ENTER pour ouvrir le filtre',\n  ariaRowSelectionDisabled: 'La sélection est désactivée pour cette ligne',\n  ariaToggleCellValue: 'Appuyez sur ESPACE pour changer la valeur de la cellule',\n  ariaPageSizeSelectorLabel: 'Nombre de résultats affichés par page',\n  ariaSkeletonCellLoadingFailed: 'Le chargement de la ligne a échoué',\n  ariaSkeletonCellLoading: 'Chargement des données en cours',\n\n  // ARIA Labels for Drop Zones\n\n  ariaRowGroupDropZonePanelLabel: 'Groupes de lignes',\n  ariaValuesDropZonePanelLabel: 'Valeurs',\n  ariaPivotDropZonePanelLabel: 'Labels des colonnes',\n  ariaDropZoneColumnComponentDescription: 'Appuyez sur SUPPR pour supprimer',\n  ariaDropZoneColumnValueItemDescription: \"Appuyez sur ENTREE pour changer le type d'aggregation\",\n  ariaDropZoneColumnGroupItemDescription: 'Appuyez sur ENTREE pour trier',\n  // used for aggregate drop zone, format: {aggregation}{ariaDropZoneColumnComponentAggFuncSeperator}{column name}\n  ariaDropZoneColumnComponentAggFuncSeperator: ' de ',\n  ariaDropZoneColumnComponentSortAscending: 'croissant',\n  ariaDropZoneColumnComponentSortDescending: 'décroissant',\n\n  // ARIA Labels for Dialogs\n  ariaLabelColumnMenu: 'Menu des colonnes',\n  ariaLabelCellEditor: 'Editeur de cellule',\n  ariaLabelDialog: 'Modale',\n  ariaLabelSelectField: 'Sélectionner le champ',\n  ariaLabelTooltip: 'Info-bulle',\n  ariaLabelContextMenu: 'Menu contextuel',\n  ariaLabelSubMenu: 'Sous-Menu',\n  ariaLabelAggregationFunction: \"Fonction d'aggrégation\",\n  ariaLabelColumnFilter: 'Filtre de colonne',\n  // Number Format (Status Bar, Pagination Panel)\n  thousandSeparator: ' ',\n  decimalSeparator: ',',\n\n  // Data types\n  true: 'Vrai',\n  false: 'Faux',\n  invalidDate: 'Date invalide',\n  invalidNumber: 'Nombre invalide',\n  january: 'Janvier',\n  february: 'Février',\n  march: 'Mars',\n  april: 'Avril',\n  may: 'Mai',\n  june: 'Juin',\n  july: 'Juillet',\n  august: 'Août',\n  september: 'Septembre',\n  october: 'Octobre',\n  november: 'Novembre',\n  december: 'Décembre',\n\n  // Time formats\n  timeFormatSlashesDDMMYYYY: 'JJ/MM/AAAA',\n  timeFormatSlashesMMDDYYYY: 'MM/JJ/AAAA',\n  timeFormatSlashesDDMMYY: 'JJ/MM/AA',\n  timeFormatSlashesMMDDYY: 'MM/AA/AA',\n  timeFormatDotsDDMYY: 'JJ.M.AA',\n  timeFormatDotsMDDYY: 'M.JJ.AA',\n  timeFormatDashesYYYYMMDD: 'AAAA-MM-JJ',\n  timeFormatSpacesDDMMMMYYYY: 'JJ MMMM AAAA',\n  timeFormatHHMMSS: 'HH:MM:SS',\n  timeFormatHHMMSSAmPm: 'HH:MM:SS AM/PM',\n};\n","// Ordre alphabétique requis\nexport const MESSAGES_EN = {\n  grid: {\n    noData: 'No matching data',\n    loading: 'Data loading...',\n  },\n};\n","// Ordre alphabétique requis\nexport const MESSAGES_FR = {\n  grid: {\n    noData: 'Aucune donnée correspondante',\n    loading: 'Chargement des données...',\n  },\n};\n","import { CommonModule } from '@angular/common';\nimport {\n  ChangeDetectionStrategy,\n  Component,\n  ContentChild,\n  ElementRef,\n  EventEmitter,\n  Input,\n  OnInit,\n  Output,\n  TemplateRef,\n  ViewChild,\n  ViewEncapsulation,\n  booleanAttribute,\n  forwardRef,\n  inject,\n} from '@angular/core';\nimport { FormsModule } from '@angular/forms';\nimport {\n  DsfrButtonModule,\n  DsfrFormSelectModule,\n  DsfrI18nService,\n  DsfrOption,\n  DsfrPaginationModule,\n  DsfrTableFooterComponent,\n  DsfrTableState,\n  Language,\n  newUniqueId,\n} from '@edugouvfr/ngx-dsfr';\nimport { AgGridAngular } from 'ag-grid-angular';\nimport {\n  AllCommunityModule,\n  CellClickedEvent,\n  CellEditingStoppedEvent,\n  ColDef,\n  FilterChangedEvent,\n  GetRowIdParams,\n  GridApi,\n  GridOptions,\n  GridPreDestroyedEvent,\n  GridReadyEvent,\n  GridState,\n  IGetRowsParams,\n  IRowNode,\n  ModuleRegistry,\n  PaginationChangedEvent,\n  RowSelectedEvent,\n  SelectionChangedEvent,\n  SortChangedEvent,\n  SortModelItem,\n  SuppressHeaderKeyboardEventParams,\n  SuppressKeyboardEventParams,\n} from 'ag-grid-community';\nimport { Observable, ReplaySubject, Subject } from 'rxjs';\nimport { EduRemoteAgGridDirective } from './directives/remote-ag-grid.directive';\nimport { AG_GRID_LOCALE_FR } from './i18n/grid.fr';\nimport { MESSAGES_EN } from './i18n/messages.en';\nimport { MESSAGES_FR } from './i18n/messages.fr';\nimport {\n  DsfrGridMode,\n  DsfrGridModeConst,\n  DsfrGridParams,\n  DsfrRemoteGridResult,\n  EduRemoteAgGridApi,\n} from './interfaces/remote-ag-grid-api';\n\n/** Représentation d'un évènement selectionChange ou rowSelect */\nexport interface DsfrGridSelectionEvent {\n  /** type d'évènement ag-grid */\n  event: RowSelectedEvent<any> | SelectionChangedEvent<any>;\n  /** liste des noeuds ag-grid IRowNode */\n  selectedNodes: IRowNode<any>[];\n}\n\nModuleRegistry.registerModules([AllCommunityModule]);\n\n@Component({\n  selector: 'dsfr-ext-ag-grid, dsfrx-ag-grid',\n  templateUrl: './grid.component.html',\n  providers: [{ provide: EduRemoteAgGridApi, useExisting: forwardRef(() => DsfrGridComponent) }],\n  styleUrls: ['./styles/grid.component.scss'],\n  encapsulation: ViewEncapsulation.None,\n  changeDetection: ChangeDetectionStrategy.OnPush,\n  imports: [\n    AgGridAngular,\n    CommonModule,\n    FormsModule,\n    DsfrButtonModule,\n    DsfrPaginationModule,\n    DsfrFormSelectModule,\n    DsfrTableFooterComponent,\n    EduRemoteAgGridDirective,\n  ],\n})\nexport class DsfrGridComponent implements EduRemoteAgGridApi, OnInit {\n  @ViewChild('grid', { read: ElementRef }) grid?: ElementRef;\n\n  /** Template personnalisé pour afficher le total de lignes */\n  @ContentChild('footerResultsTemplate', { static: true }) footerResultsTemplate?: TemplateRef<void>;\n\n  /** Template pour les groupes de boutons d'actions du footer */\n  @ContentChild('footerActionsTemplate', { static: true }) footerActionsTemplate?: TemplateRef<void>;\n\n  /** Template pour les groupes de boutons d'actions du header. (dsfr-button-group) */\n  @ContentChild('headerActionsTemplate', { static: true }) headerActionsTemplate?: TemplateRef<void>;\n\n  /** Id du composant, généré par défaut */\n  @Input() gridId: string;\n\n  /* Liste des colonnes au format agGrid ColDef[] */\n  @Input({ required: true }) columnDefs!: ColDef[];\n\n  /* Titre du tableau */\n  @Input() caption?: string;\n\n  /** Nombre d'éléments affichés par page */\n  @Input() pageSize = 20;\n\n  /** Traductions des éléments de agGrid. Français par défaut, anglais si valeur nulle. */\n  @Input() localeText: any;\n\n  /** Mode de la grid: données côté client ou serveur (défaut client) */\n  @Input() mode: DsfrGridMode = DsfrGridModeConst.CLIENT;\n\n  /** Données locale dans le cas de clientSide */\n  @Input() rowData?: any[];\n\n  /** Options des colonnes par défaut (cf. https://www.ag-grid.com/angular-data-grid/column-properties/ ) */\n  @Input() defaultColDef: ColDef = {\n    suppressHeaderMenuButton: true,\n    sortable: true,\n    filter: false,\n    resizable: false,\n    filterParams: {\n      maxNumConditions: 1,\n    },\n  };\n\n  /** Etat initial du tableau (ex. page courante, filtres..) */\n  @Input() initialState?: GridState;\n\n  /** Classes personnalisées pour la grid. Prédéfinies : \"fr-table-bordered\", \"fr-table-no-strip\".  */\n  @Input() customClass?: string;\n\n  /** Afficher un texte par-dessus la grid pendant le chargement */\n  @Input() showLoadingOverlay: boolean = true;\n\n  /** Redéfinir le template de chargement */\n  //FIXME: nommage non consistant, à déprécier au profit de `overlayLoadingTemplate`\n  @Input() loadingOverlayTemplate?: string;\n\n  /** Redéfinir le template aucun résultat. /!\\ L'id de ce container doit être passé à idNoRowsTemplate */\n  @Input() overlayNoRowsTemplate?: string;\n\n  /** Id du template overlayNoRowsTemplate contenant le texte utilisé pour le aria-describedby */\n  @Input() idNoRowsTemplate = 'no-data-container';\n\n  /** Hauteur fixe (scroll vertical si nécessaire) */\n  @Input() fixedHeight?: string;\n\n  /** Calcul dynamique de la hauteur des lignes pour afficher le contenu des cellules sur plusieurs lignes (uniquement utilisé en serverSide).\n   * Déconseillé d'utiliser si le nombre de lignes par pages est élevé, peut causer des problèmes de performance d'affichage.\n   */\n  @Input({ transform: booleanAttribute }) autoRowsHeight: boolean = false;\n\n  /** Surcharge d'options supplémentaires pour agGrid (optionnel) */\n  @Input() gridOptions?: GridOptions<any>;\n\n  /** Afficher le bouton d'action exporter au format CSV (uniqument si headerActionsTemplate non défini) */\n  @Input({ transform: booleanAttribute }) showExportCsv = false;\n\n  /** Champ qui correspond à l'identifiant de la donnée (optionnel) */\n  @Input() rowId?: string;\n\n  /** Afficher la pagination */\n  @Input({ transform: booleanAttribute }) showPagination: boolean = true;\n\n  /** Afficher le total de lignes */\n  @Input({ transform: booleanAttribute }) showFooterResult: boolean = true;\n\n  /** Mise à jour et application du tri des colonnes */\n  @Output() sortChanged: EventEmitter<SortChangedEvent<any>> = new EventEmitter();\n\n  /** Callback apres l'initialisation de la grid, retourne l'accès à l'API de agGrid */\n  @Output() gridReady: EventEmitter<GridApi<any>> = new EventEmitter();\n\n  /** Callback avant la destruction de la grid (destruction du composant), permet de récuperer le state */\n  @Output() gridPreDestroyed: EventEmitter<GridPreDestroyedEvent<any>> = new EventEmitter();\n\n  /** Mise à jour et application des filtres */\n  @Output() filterChanged: EventEmitter<FilterChangedEvent<any>> = new EventEmitter();\n\n  /** Sélection d'une cellule du tableau */\n  @Output() cellSelect: EventEmitter<CellClickedEvent<any>> = new EventEmitter();\n\n  /** Sélection ou déselection d'une ligne du tableau. Emission de l'évènement (RowSelectedEvent) et des noeuds sélectionnés (IRowNode[]) */\n  @Output() rowSelect: EventEmitter<DsfrGridSelectionEvent> = new EventEmitter();\n\n  /** La sélection des lignes a changé. Emission de l'évènement (SelectionChangedEvent) et des noeuds sélectionnés (IRowNode[]) */\n  @Output() selectionChange: EventEmitter<DsfrGridSelectionEvent> = new EventEmitter();\n\n  /** Indique une mise à jour nécessaire des données suite à un changement d'affichage (pagination, tri ou filtres). Si données côté serveur. */\n  @Output() dataChange: EventEmitter<DsfrGridParams> = new EventEmitter();\n\n  /** Callback après changement de page */\n  @Output() paginationChange: EventEmitter<PaginationChangedEvent> = new EventEmitter();\n\n  /** Callback après chaque changement des lignes affichées (modelUpdated) */\n  @Output() dataRender: EventEmitter<void> = new EventEmitter();\n\n  /** Callback après appel à l'api en cas d'erreur de celle-ci */\n  @Output() dataFail: EventEmitter<any> = new EventEmitter();\n\n  /** Evenement de fin d'édition d'une cellule */\n  @Output() cellEditingStopped: EventEmitter<CellEditingStoppedEvent<any>> = new EventEmitter();\n\n  /** @internal Pour acceder a Grid API */\n  @ViewChild(AgGridAngular) agGrid!: AgGridAngular;\n\n  /** Pagination */\n\n  /** Choix de taille de page (par défaut 10, 20, 50, 100). Pas d'affichage du select si non défini */\n  @Input()\n  pageSizes: DsfrOption[] = [\n    {\n      value: 10,\n      label: '10 lignes par page',\n    },\n    {\n      value: 20,\n      label: '20 lignes par page',\n    },\n    {\n      value: 50,\n      label: '50 lignes par page',\n    },\n    {\n      value: 100,\n      label: '100 lignes par page',\n    },\n  ];\n\n  /** @internal Total résultats*/\n  totalElements = 0;\n  /** @internal  Page courante*/\n  currentPage: number | undefined = undefined;\n  /** @internal Total pages */\n  totalPage = 0;\n  /**@internal Id généré du titre du tableau */\n  captionId?: string;\n  /** @internal Index de la première ligne affichée */\n  startRow: number = 1;\n  /** @internal Index de la première ligne affichée */\n  endRow: number = 1;\n  /** @internal */\n  isLoadingServerSide = false;\n\n  protected initialStatePagination: DsfrTableState | undefined; // Pour compatibilité avec le composant footer de la lib ngx-dsfr\n  protected loading = false;\n  protected selectable = false;\n\n  /** @internal */\n  private _resultSubject$: Subject<DsfrRemoteGridResult> = new ReplaySubject<DsfrRemoteGridResult>(1);\n\n  /** Nombre d'éléments visuellement affichés en mode serveur */\n  private _nbElementsDisplayed: number = 0;\n  private i18n = inject(DsfrI18nService);\n\n  constructor() {\n    this.gridId ??= newUniqueId();\n    this.i18n.extendsLabelsBundle(Language.EN, MESSAGES_EN);\n    this.i18n.extendsLabelsBundle(Language.FR, MESSAGES_FR);\n    this.i18n.completeLangChange$.subscribe((code: string) => this.onLangChange(code));\n  }\n\n  /** @internal */\n  public get result$(): Observable<DsfrRemoteGridResult> {\n    return this._resultSubject$.asObservable();\n  }\n\n  /** Données renvoyées par l'API */\n  @Input() set result(value: DsfrRemoteGridResult) {\n    if (value && this.agGrid?.api) {\n      this.totalElements = value.totalRecords;\n      this.totalPage = this.calculateTotalPage();\n      this._nbElementsDisplayed = value.data.length;\n\n      this._resultSubject$.next(value);\n      if (this.autoRowsHeight) {\n        this.setHeightOnRows();\n      }\n\n      this.isLoadingServerSide = false;\n\n      this.forceReloadOnNoData();\n      this.loading = false;\n\n      if (!this.gridOptions?.autoSizeStrategy) {\n        this.agGrid.api.sizeColumnsToFit();\n      }\n\n      if (this.totalElements === 0) {\n        this.agGrid.api.showNoRowsOverlay();\n      }\n    }\n  }\n\n  public ngOnInit(): void {\n    this.captionId = 'caption-' + newUniqueId();\n    this.defaultColDef = {\n      wrapText: this.autoRowsHeight ? true : false,\n      filterParams: { maxNumConditions: 1, debounceMs: 1000 },\n      suppressFloatingFilterButton: true,\n      suppressHeaderMenuButton: true,\n      suppressHeaderFilterButton: true,\n      resizable: false,\n      unSortIcon: true,\n      ...this.defaultColDef,\n    };\n\n    // gestion de la navigation au clavier par défaut\n    if (this.defaultColDef && !this.defaultColDef?.suppressKeyboardEvent) this.suppressCellKeyboardEvent();\n    if (this.defaultColDef && !this.defaultColDef?.suppressHeaderKeyboardEvent) this.suppressHeaderKeyboardEvent();\n    this.gridOptions = {\n      rowModelType: 'infinite',\n      pagination: this.showPagination,\n      suppressContextMenu: true,\n      paginationPageSize: this.pageSize,\n      maxBlocksInCache: 1,\n      domLayout: this.fixedHeight ? 'normal' : 'autoHeight',\n      enableCellTextSelection: true,\n      suppressPaginationPanel: true,\n      ensureDomOrder: true,\n      rowBuffer: 20,\n      icons: {\n        filter: '<i class=\"fr-icon-filter-line\"></i>',\n        sortAscending: '<i class=\"fr-icon-arrow-up-line\"></i>',\n        sortDescending: '<i class=\"fr-icon-arrow-down-line\"></i>',\n        sortUnSort: '<i class=\"fr-icon-arrow-up-down-line\"></i> ',\n      },\n      onGridPreDestroyed: ($event) => this.onGridPreDestroyed($event),\n      ...this.gridOptions,\n      getRowId: this.rowId ? (rowParams) => this.getRowNodeId(rowParams) : undefined,\n    };\n\n    if (!this.initialState && this.gridOptions.initialState) {\n      this.initialState = this.gridOptions.initialState;\n    }\n\n    this.selectable = !!this.gridOptions.rowSelection;\n\n    this.initPagination();\n\n    if (this.mode === DsfrGridModeConst.CLIENT) {\n      this.gridOptions.rowModelType = 'clientSide';\n    } else {\n      this.gridOptions.cacheBlockSize = this.pageSize;\n      this.isLoadingServerSide = true;\n    }\n  }\n\n  /**\n   * Au changement de paramètres des lignes affichées (pagination, filtre etc.), préparation des query params et envoi de l'evenement updateData\n   * @param params IGetRowsParams paramètres modifiés\n   * @internal\n   */\n  public prepareUpdateData(params: IGetRowsParams): void {\n    if (this.showLoadingOverlay) this.loading = true;\n\n    // Paramètres de la pagination\n    if (!this.currentPage && this.initialState) {\n      // si c'est le premier chargement du tableau et initialState renseigné, on remet les paramètres\n      this.restoreInitialStateServer(params);\n    }\n\n    this.currentPage = Math.floor(params.startRow / this.pageSize) + 1;\n    const httpParams: DsfrGridParams = { limit: this.pageSize, offset: params.startRow };\n\n    // Ajout du tri\n    if (params.sortModel && params.sortModel[0]) {\n      this.addSort(params.sortModel, httpParams);\n    }\n\n    //Ajout des filtres\n    if (params.filterModel) {\n      this.addFilters(params.filterModel, httpParams);\n    }\n\n    this.dataChange.emit(httpParams);\n  }\n\n  /**\n   * Erreur au retour de l'appel à l'api\n   * @internal\n   */\n  public getDataError(err: any) {\n    this.loading = false;\n    if (this.totalElements === 0) {\n      this.agGrid.api.showNoRowsOverlay();\n    }\n    this.dataFail.emit(err);\n  }\n\n  /**\n   * Modification et application du tri\n   * @internal\n   */\n  public onSortChange(e: any): void {\n    this.sortChanged.emit(e);\n  }\n\n  /**\n   * Modification et application des filtres\n   * @internal\n   */\n  public onFilterChange(e: any): void {\n    this.filterChanged.emit(e);\n  }\n\n  /**@internal */\n  public onCellEditingStop(e: any) {\n    this.cellEditingStopped.emit(e);\n  }\n\n  /**\n   * Après mise à jour des données\n   * @internal\n   */\n  public onModelUpdated(e: any) {\n    if (this.mode === DsfrGridModeConst.CLIENT) {\n      this.loading = false;\n    } else if (this.totalElements === 0) {\n      this.loading = false;\n      this.agGrid.api.showNoRowsOverlay();\n    }\n\n    this.dataRender.emit();\n  }\n\n  /**\n   * Au redimensionnement de la fenêtre\n   * @internal\n   */\n  public onGridSizeChanged(e: any) {\n    if (this.autoRowsHeight && this.mode !== DsfrGridModeConst.CLIENT) {\n      // recalculer la hauteur des lignes\n      this.setHeightOnRows();\n    }\n    // this.agGrid.api.sizeColumnsToFit(); disable  automatic resize for perfs\n  }\n\n  /**\n   * Au redimensionnement d'une colonne\n   * @internal\n   */\n  public onColumnResized() {\n    if (this.autoRowsHeight && this.mode !== DsfrGridModeConst.CLIENT) {\n      // recalculer la hauteur des lignes\n      this.setHeightOnRows();\n    }\n  }\n\n  /**\n   * Premier affichage des données\n   * bug ag-grid: en mode infite + pagination + initialPagination, si le nombre de lignes a afficher est < a pageSize\n   * des lignes vides s'affichent. Execution d'un double appel avec paginationGoToPage pour forcer un rendu correct\n   * @internal\n   */\n  public onFirstDataRendered() {\n    if (!this.gridOptions?.autoSizeStrategy) {\n      this.agGrid.api.sizeColumnsToFit();\n    }\n\n    if (this.currentPage && this.currentPage > 1 && this._nbElementsDisplayed < this.pageSize) {\n      this.agGrid.api.paginationGoToPage(this.currentPage);\n    }\n  }\n\n  /**\n   * Initialisation de la grid\n   * @param params\n   * @internal\n   */\n  public onGridReady(params: GridReadyEvent): void {\n    this.agGrid.api = params.api;\n    if (this.caption && this.captionId) {\n      this.agGrid.api.setGridAriaProperty('labelledby', this.captionId);\n    }\n\n    this.gridReady.emit(this.agGrid.api);\n  }\n\n  /**\n   * Evenement clic sur une cellule\n   * @internal\n   */\n  public onCellClicked(e: CellClickedEvent<any>): void {\n    this.cellSelect.emit(e);\n  }\n\n  /**\n   * Evenement à la sélection ou déselection d'une ligne\n   * @internal\n   */\n  public onRowSelected(e: RowSelectedEvent<any>): void {\n    this.rowSelect.emit({ event: e, selectedNodes: this.agGrid.api?.getSelectedNodes() });\n  }\n\n  /**\n   * Evenement au changement de sélection\n   * @internal\n   */\n  public onSelectionChanged(e: SelectionChangedEvent<any>): void {\n    this.selectionChange.emit({ event: e, selectedNodes: this.agGrid.api?.getSelectedNodes() });\n  }\n\n  /**\n   * Changement de page\n   * @param e numéro de page\n   * @internal\n   */\n  public onPage(e: number): void {\n    this.agGrid.api.paginationGoToPage(e - 1);\n\n    // Fix bug mode server avec initial page et retour a page 1\n    if (\n      this.agGrid.api.paginationGetCurrentPage() === 0 &&\n      this.initialStatePagination &&\n      this.initialStatePagination.page > 1\n    ) {\n      this.initialStatePagination.page = 1;\n      this.agGrid.api.refreshInfiniteCache();\n    }\n  }\n\n  /**\n   * @internal\n   */\n  public onClickExportCsv(): void {\n    this.agGrid.api.exportDataAsCsv();\n  }\n\n  /**\n   * @internal\n   */\n  public onChangePageSize(pageSize: number): void {\n    this.pageSize = pageSize;\n    this.agGrid.api.updateGridOptions({\n      paginationPageSize: this.pageSize,\n      cacheBlockSize: this.pageSize,\n    });\n  }\n\n  /**\n   * @internal\n   */\n  public onGridPreDestroyed(e: GridPreDestroyedEvent) {\n    if (e?.state?.pagination?.page) {\n      // fix current page number base 1\n      e.state.pagination.page = this.currentPage;\n    }\n\n    this.gridPreDestroyed.emit(e);\n  }\n\n  protected onPaginationChanged(e: PaginationChangedEvent): void {\n    if (this.totalElements === 0) {\n      this.agGrid.api.setGridAriaProperty('describedby', this.idNoRowsTemplate);\n    } else {\n      this.agGrid.api.setGridAriaProperty('describedby', null);\n    }\n\n    if (!this.showPagination) {\n      this.totalElements = this.agGrid.api.getDisplayedRowCount();\n    } else {\n      this.totalElements = this.agGrid.api.paginationGetRowCount();\n      this.totalPage = this.agGrid.api.paginationGetTotalPages();\n      if (this.mode === DsfrGridModeConst.CLIENT) this.currentPage = this.agGrid.api.paginationGetCurrentPage() + 1;\n    }\n\n    this.paginationChange.emit(e);\n  }\n\n  private calculateTotalPage(): number {\n    return Math.ceil(this.totalElements / this.pageSize);\n  }\n\n  /* Retourne un identifiant unique selon la propriété définie par rowId */\n  private getRowNodeId(row: GetRowIdParams<any>) {\n    if (!row.data || !this.rowId || !row.data[this.rowId]) {\n      throw Error(`L'identifiant rowId '${this.rowId}' n'est pas défini pour une donnée`);\n    }\n\n    return row.data[this.rowId];\n  }\n\n  /** Ajout du tri aux query params */\n  private addSort(sortModel: SortModelItem[], httpParams: any): any {\n    httpParams.sort = sortModel;\n\n    return httpParams;\n  }\n\n  /**\n   * Ajout des filtres aux query params\n   * @internal */\n  private addFilters(filterModel: any, httpParams: any): any {\n    httpParams.filters = filterModel;\n  }\n\n  /**\n   * Remettre manuellement les paramètres de query en cas d'initialState\n   * @param params query params\n   */\n  private restoreInitialStateServer(params: IGetRowsParams) {\n    if (!this.initialState) return;\n\n    if (this.initialState.pagination?.page) {\n      params.startRow = (this.initialState.pagination.page - 1) * this.pageSize;\n    }\n    if (this.initialState.filter?.filterModel) {\n      params.filterModel = this.initialState.filter.filterModel;\n    }\n    if (this.initialState.sort?.sortModel) {\n      params.sortModel = this.initialState.sort.sortModel;\n    }\n  }\n\n  /**\n   * Détection du changement de langue depuis le service i18n (display)\n   * @param code\n   */\n  private onLangChange(code: string) {\n    // si la langue n'est pas gérée (ni anglais ni francais), pas de traitement\n    if (this.localeText && this.localeText !== 'fr' && this.localeText !== 'en') return;\n    // sinon mis a jour en français ou anglais\n    this.localeText = code === 'fr' ? AG_GRID_LOCALE_FR : undefined;\n  }\n\n  /**\n   * Permettre d'afficher sur plusieurs lignes en mode serveur (equivalent autoHeight en mode client)\n   * Calculer la dimension de chaque row par rapport à son contenu et recalculer la taille de la grille\n   * globale (limitation ag-grid sur le mode infinite)\n   */\n  private setHeightOnRows() {\n    if (!this.grid || !this.grid.nativeElement) return;\n    let gridHeight = 0;\n\n    // Dans le cas des colonnes pinned les rows peuvent être divisées en 3 containers\n    const containers = [\n      this.grid.nativeElement.querySelector('.ag-center-cols-viewport'),\n      this.grid.nativeElement.querySelector('.ag-pinned-left-cols-container'),\n      this.grid.nativeElement.querySelector('.ag-pinned-right-cols-container'),\n    ].filter((el): el is HTMLElement => !!el && el.querySelector('.ag-row'));\n\n    const hasPinnedColumns = containers.length > 1;\n\n    this.agGrid.api.forEachNode((node) => {\n      let maxRowHeight = 0;\n\n      // Calculer la hauteur maximale pour cette row sur tous les containers\n      containers.forEach((container) => {\n        const rowElements = this.getRowElementFromNode(node.id, container);\n\n        rowElements.forEach((rowEl) => {\n          const cells = rowEl.getElementsByClassName('ag-cell-value');\n          const rowHeight = this.getMaxHeightOnRow(cells) + 10;\n          if (rowHeight > maxRowHeight) maxRowHeight = rowHeight;\n\n          if (!hasPinnedColumns) {\n            this.transformRowHeight(rowEl, maxRowHeight, gridHeight);\n          }\n        });\n      });\n\n      // Appliquer cette hauteur et position à tous les containers en cas de colonnes pinned\n      if (hasPinnedColumns) {\n        containers.forEach((container) => {\n          const rowElements = this.getRowElementFromNode(node.id, container);\n          rowElements.forEach((rowEl) => {\n            this.transformRowHeight(rowEl, maxRowHeight, gridHeight);\n          });\n        });\n      }\n\n      gridHeight += maxRowHeight; // increment grid height\n    });\n\n    // Maj de la hauteur totale de la grille\n    if (containers[0]) {\n      (containers[0] as HTMLElement).style.height = `${gridHeight}px`;\n    }\n  }\n\n  private transformRowHeight(rowEl: HTMLElement, maxRowHeight: number, gridHeight: number) {\n    rowEl.style.height = `${maxRowHeight}px`;\n    rowEl.style.setProperty('transform', `translateY(${gridHeight}px)`);\n  }\n\n  private getRowElementFromNode(nodeId: string | undefined, container: HTMLElement): NodeListOf<HTMLElement> {\n    return container.querySelectorAll(`.ag-row[row-id=\"${nodeId}\"]`);\n  }\n\n  /**\n   * Get max cell height needed on row\n   * @param nodesCell each cells on row\n   * @returns max height\n   */\n  private getMaxHeightOnRow(nodesCell: HTMLCollectionOf<Element>): number {\n    const maxHeight = Array.from(nodesCell)?.reduce((a, b) => (a.clientHeight > b.clientHeight ? a : b)).clientHeight;\n    // set min height of 30px if row height is not defined\n    return maxHeight && maxHeight > 31 ? maxHeight : 31;\n  }\n\n  /**\n   * Redéfinir le focus pour les cellules possédant des éléments interactifs (focusables, ex. buttons)\n   * Suppression de la gestion du focus par défaut de ag grid lorsque c'est le cas\n   */\n  private suppressCellKeyboardEvent() {\n    this.defaultColDef.suppressKeyboardEvent = (params: SuppressKeyboardEventParams) => {\n      const e: KeyboardEvent = params.event;\n\n      return this.suppressDefaultKeyboardEvent(e, '.ag-cell');\n    };\n  }\n\n  /**\n   * Redéfinir le focus pour les cellules d'en-tête possédant des floatings filters avec éléments interactifs (focusables, ex. buttons)\n   * Suppression de la gestion du focus par défaut de ag grid lorsque c'est le cas\n   */\n  private suppressHeaderKeyboardEvent() {\n    this.defaultColDef.suppressHeaderKeyboardEvent = (params: SuppressHeaderKeyboardEventParams) => {\n      const e: KeyboardEvent = params.event;\n      return this.suppressDefaultKeyboardEvent(e, '.ag-floating-cell');\n    };\n  }\n\n  private suppressDefaultKeyboardEvent(e: KeyboardEvent, classToSearch: string): boolean {\n    if (e.code == 'Tab' || e.key == 'Tab') {\n      // get interactive children of cell\n      const target = e.target as HTMLElement;\n      const focusableChildrenOfParent = target\n        ?.closest(classToSearch)\n        ?.querySelectorAll(\n          'button, [href], :not(.ag-hidden) > input[tabindex]:not([tabindex=\"-1\"], select, textarea, [tabindex]:not([tabindex=\"-1\"])',\n        );\n      if (\n        !focusableChildrenOfParent ||\n        focusableChildrenOfParent.length == 0 ||\n        (!e.shiftKey && target == focusableChildrenOfParent[focusableChildrenOfParent.length - 1]) ||\n        (e.shiftKey && target == focusableChildrenOfParent[0]) ||\n        (e.shiftKey && target.classList.contains('ag-cell'))\n      ) {\n        return false; // if no interactive elements are present do not suppress\n      }\n      return true; // else suppress\n    }\n    return false; // do not suppress by default\n  }\n\n  /* \n    Fix to force reload of ag-Grid data when no data is previously displayed (e.g., after applying a filter).\n    The modelUpdated callback is not called the first time, and cacheBlockState remains in \"no data\" mode.\n    ag-Grid bug on infite mode ? Inconvenience: Data is loaded twice in this case.\n  */\n  private forceReloadOnNoData(): void {\n    const cacheBlock: any = this.agGrid.api.getCacheBlockState();\n\n    if ((!cacheBlock || Object.keys(cacheBlock).length === 0) && this.totalElements > 0) {\n      this.agGrid.api.refreshInfiniteCache();\n    }\n  }\n\n  private initPagination(): void {\n    this.pageSize =\n      !this.pageSize && this.initialState?.pagination?.pageSize\n        ? this.initialState?.pagination?.pageSize\n        : this.pageSize;\n\n    if (this.gridOptions) this.gridOptions.paginationPageSize = this.pageSize;\n\n    this.initialStatePagination = {\n      rowsPerPage: this.pageSize,\n      page: this.initialState?.pagination?.page ?? 1, // l'indexation de la pagination doit commencer à 1 ici\n      sort: null,\n    };\n  }\n}\n","<!-- AG Grid Angular Component -->\n<div\n  class=\"edu-grid__wrapper fr-table\"\n  [class]=\"customClass ?? ''\"\n  [ngClass]=\"{ 'dsfrx-auto-height__server': autoRowsHeight, 'fr-table--selectable': selectable }\">\n  <!-- Header ------------------------------->\n  <div class=\"fr-table__header\">\n    <!-- Gestion du titre du tableau -->\n    @if (caption) {\n      <p [id]=\"captionId\" class=\"edu-grid__title\">\n        {{ caption }}\n      </p>\n    } @else {\n      <div [id]=\"captionId\" class=\"edu-grid__title\">\n        <ng-content select=\"[caption]\"></ng-content>\n      </div>\n    }\n    <!-- Template actions groupées -->\n    @if (headerActionsTemplate) {\n      <div class=\"edu-grid__actions\">\n        <ng-container *ngTemplateOutlet=\"headerActionsTemplate\"></ng-container>\n      </div>\n    } @else if (showExportCsv) {\n      <div class=\"edu-grid__actions\">\n        <dsfr-button\n          label=\"Exporter au format CSV\"\n          customClass=\"edu-grid__actions--export\"\n          (click)=\"onClickExportCsv()\"\n          variant=\"secondary\"></dsfr-button>\n      </div>\n    }\n  </div>\n\n  <!-- Client side-->\n  @if (mode === 'client') {\n    <ag-grid-angular\n      [rowData]=\"rowData\"\n      #grid\n      style=\"width: 100%\"\n      [id]=\"gridId\"\n      [ngStyle]=\"{ height: fixedHeight ? fixedHeight : '100%' }\"\n      [ngClass]=\"customClass\"\n      [columnDefs]=\"columnDefs\"\n      [defaultColDef]=\"defaultColDef\"\n      [initialState]=\"initialState\"\n      [gridOptions]=\"gridOptions\"\n      [loading]=\"loading\"\n      [overlayLoadingTemplate]=\"loadingOverlayTemplate\"\n      [overlayNoRowsTemplate]=\"overlayNoRowsTemplate\"\n      [suppressPaginationPanel]=\"true\"\n      [localeText]=\"localeText\"\n      [animateRows]=\"false\"\n      (columnResized)=\"onColumnResized()\"\n      (gridSizeChanged)=\"onGridSizeChanged($event)\"\n      (modelUpdated)=\"onModelUpdated($event)\"\n      (cellClicked)=\"onCellClicked($event)\"\n      (cellEditingStopped)=\"onCellEditingStop($event)\"\n      (filterChanged)=\"onFilterChange($event)\"\n      (paginationChanged)=\"onPaginationChanged($event)\"\n      (sortChanged)=\"onSortChange($event)\"\n      (rowSelected)=\"onRowSelected($event)\"\n      (selectionChanged)=\"onSelectionChanged($event)\"\n      (gridReady)=\"onGridReady($event)\"></ag-grid-angular>\n  } @else if (mode === 'server') {\n    <!-- Remote data-->\n    <ag-grid-angular\n      remoteAgGridBinding\n      #grid\n      style=\"width: 100%\"\n      [id]=\"gridId\"\n      [ngStyle]=\"{ height: fixedHeight ? fixedHeight : '100%' }\"\n      [ngClass]=\"customClass\"\n      [columnDefs]=\"columnDefs\"\n      [defaultColDef]=\"defaultColDef\"\n      [initialState]=\"initialState\"\n      [gridOptions]=\"gridOptions\"\n      [loading]=\"loading\"\n      [overlayLoadingTemplate]=\"loadingOverlayTemplate\"\n      [overlayNoRowsTemplate]=\"overlayNoRowsTemplate\"\n      [suppressPaginationPanel]=\"true\"\n      [localeText]=\"localeText\"\n      [animateRows]=\"false\"\n      (columnResized)=\"onColumnResized()\"\n      (firstDataRendered)=\"onFirstDataRendered()\"\n      (gridSizeChanged)=\"onGridSizeChanged($event)\"\n      (modelUpdated)=\"onModelUpdated($event)\"\n      (cellClicked)=\"onCellClicked($event)\"\n      (cellEditingStopped)=\"onCellEditingStop($event)\"\n      (filterChanged)=\"onFilterChange($event)\"\n      (sortChanged)=\"onSortChange($event)\"\n      (paginationChanged)=\"onPaginationChanged($event)\"\n      (rowSelected)=\"onRowSelected($event)\"\n      (selectionChanged)=\"onSelectionChanged($event)\"\n      (gridReady)=\"onGridReady($event)\"></ag-grid-angular>\n  }\n\n  <!-- Footer -->\n  @if (totalElements > 0 && !isLoadingServerSide) {\n    <dsfr-table-footer\n      [initialState]=\"initialStatePagination\"\n      [rowsPerPageOptions]=\"pageSizes\"\n      [showFooterResult]=\"showFooterResult\"\n      [showPagination]=\"showPagination\"\n      [currentPage]=\"currentPage\"\n      [footerActionsTemplate]=\"footerActionsTemplate\"\n      [footerResultsTemplate]=\"footerResultsTemplate\"\n      [totalPage]=\"totalPage\"\n      [totalElements]=\"totalElements\"\n      (rowsPerPageChange)=\"onChangePageSize($event)\"\n      (pageSelect)=\"onPage($event)\"\n      data-testid=\"ag-grid-footer\"></dsfr-table-footer>\n  }\n</div>\n","import { provideHttpClient, withInterceptorsFromDi } from '@angular/common/http';\nimport { NgModule } from '@angular/core';\nimport { DsfrGridComponent } from './grid.component';\n\n@NgModule({\n  imports: [DsfrGridComponent],\n  exports: [DsfrGridComponent],\n  providers: [provideHttpClient(withInterceptorsFromDi())],\n})\nexport class DsfrGridModule {}\n","/**\n * API publique du module Grid.\n *\n * @module ngx-dsfr-ext/grid\n */\n\nexport * from './lib';\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './public-api';\n"],"names":["i1"],"mappings":"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"}