[]` | **requis** | Données à afficher |
| `totalItems` | `number` | **requis** | Total pour la pagination |
| `page` | `number` | `1` | Page courante (v-model) |
| `perPage` | `number` | `10` | Lignes par page (v-model) |
| `perPageOptions` | `number[]` | `[10, 25, 50]` | Options du sélecteur de lignes |
| `rowClickable` | `boolean` | `true` | Lignes cliquables |
| `tableClass` | `string` | `''` | Classes CSS sur le wrapper (twMerge) |
| `emptyMessage` | `string` | `'Aucune donnée'` | Message si items vide |
## Slots
| Slot | Scope | Description |
|------|-------|-------------|
| `#header-{key}` | `{ column }` | Filtre dans le `| ` (placeholder = label). Fallback : texte du label |
| `#cell-{key}` | `{ item, column }` | Contenu du ` | `. Fallback : `item[key]` |
| `#empty` | — | Contenu état vide. Fallback : `emptyMessage` |
## Events
| Event | Payload | Description |
|-------|---------|-------------|
| `update:page` | `number` | Changement de page |
| `update:per-page` | `number` | Changement du nb de lignes (reset page à 1) |
| `row-click` | `Record` | Clic sur une ligne |
## Pagination
- ≤ 5 pages : toutes affichées
- \> 5 pages : page 1 … [voisin] **[courante]** [voisin] … dernière
- Boutons Prev/Next toujours visibles, désactivés aux extrêmes
## Accessibilité
- `| ` sur chaque en-tête
- ` | |