Compare commits

...

1 Commits

Author SHA1 Message Date
tristan b55050b2ad fix(ui): token w-m-btn-action partagé + fix alignement pagination DataTable (#59)
Release / release (push) Successful in 1m36s
## Description

Deux changements regroupés :

### 1. Nouveau token Tailwind partagé `w-m-btn-action` (150px)

Exposé via `tailwind.config.ts` du layer + CSS var `--m-btn-action-width` dans `malio.css`. Utilisable côté projet consommateur pour les boutons d'action (`<MalioButton button-class="w-m-btn-action" />`), et themable en redéfinissant la CSS var dans son propre `:root`.

Convention alignée sur les couleurs `m-btn-primary` / `m-btn-secondary` / `m-btn-danger` (préfixe `m-btn-`).

### 2. Fix alignement pagination DataTable

Régression visuelle après l'introduction du `min-h-[1rem]` sur la zone message du MalioSelect (qui ajoute ~20px sous le field). La barre pagination du DataTable embarquait un MalioSelect pour le `perPage` à côté d'éléments centrés (span « Lignes : » + nav boutons Prev/Page/Next), faisant dériver l'alignement vertical.

**Fix** :
- La barre pagination passe en `items-center`
- Le MalioSelect du sélecteur perPage est encapsulé dans un wrapper `h-12` qui borne sa taille flex à la hauteur du field — le slot vide déborde invisiblement en dessous
- Tous les centres alignés exactement sur le field (y=24)

## Check list

- [x] Pas de régression
- [x] TU/TI/TF rédigée (34/34 tests DataTable OK)
- [x] TU/TI/TF OK
- [x] CHANGELOG modifié

🤖 Generated with [Claude Code](https://claude.com/claude-code)

---------

Co-authored-by: THOLOT DECHENE Matthieu <matthieu@yuno.malio.fr>
Co-authored-by: matthieu <matthieu@yuno.malio.fr>
Reviewed-on: #59
Co-authored-by: tristan <tristan@yuno.malio.fr>
Co-committed-by: tristan <tristan@yuno.malio.fr>
2026-06-01 07:31:39 +00:00
6 changed files with 29 additions and 16 deletions
@@ -55,7 +55,7 @@
<MalioButton <MalioButton
label="Réinitialiser" label="Réinitialiser"
variant="tertiary" variant="tertiary"
button-class="w-[150px]" button-class="w-m-btn-action"
@click="resetFiltres" @click="resetFiltres"
/> />
<MalioButton <MalioButton
+2
View File
@@ -38,11 +38,13 @@ Liste des évolutions de la librairie Malio layer UI
* [#MUI-39] Création d'un sélecteur d'heure à molettes (MalioTimePicker) ; DateTime rebranché dessus (remplace l'input time natif intérimaire) * [#MUI-39] Création d'un sélecteur d'heure à molettes (MalioTimePicker) ; DateTime rebranché dessus (remplace l'input time natif intérimaire)
* InputAutocomplete : prop `localFilter` pour le filtrage côté client des listes statiques (case-insensitive `label.includes(query)`), sans avoir à brancher `@search` * InputAutocomplete : prop `localFilter` pour le filtrage côté client des listes statiques (case-insensitive `label.includes(query)`), sans avoir à brancher `@search`
* InputTextArea : la scrollbar passe en primary (bleu) au focus, comme la liste du Select * InputTextArea : la scrollbar passe en primary (bleu) au focus, comme la liste du Select
* Token Tailwind partagé `w-m-btn-action` (150px) exposé via `tailwind.config.ts` + CSS var `--m-btn-action-width` dans `malio.css` — utilisable côté consommateur pour les boutons d'action (`<MalioButton button-class="w-m-btn-action" />`), themable en redéfinissant la CSS var
### Changed ### Changed
* [#MUI-35] Refonte du composant drawer : slots `#header`/`#footer`, prop `side` (droite/gauche), `dismissable`, `closeOnEscape`, classes d'override, focus-trap, scroll-lock et fermeture au clavier. **Breaking** : la prop `title` est remplacée par le slot `#header`. * [#MUI-35] Refonte du composant drawer : slots `#header`/`#footer`, prop `side` (droite/gauche), `dismissable`, `closeOnEscape`, classes d'override, focus-trap, scroll-lock et fermeture au clavier. **Breaking** : la prop `title` est remplacée par le slot `#header`.
### Fixed ### Fixed
* DataTable : pagination réalignée verticalement après l'introduction du `min-h-[1rem]` du Select — la barre pagination passe en `items-center`, et le MalioSelect du sélecteur de perPage est encapsulé dans un wrapper `h-12` qui borne sa taille flex à la hauteur du field (le slot vide déborde invisiblement en dessous). Span « Lignes : » et boutons Prev/Page/Next sont désormais centrés exactement sur le field (y=24)
* Drawer : le slot `#footer` est désormais rendu hors de la zone scrollable (épinglé en bas, comme la modal) ; seul le body défile et la scrollbar ne s'étend plus derrière le footer * Drawer : le slot `#footer` est désormais rendu hors de la zone scrollable (épinglé en bas, comme la modal) ; seul le body défile et la scrollbar ne s'étend plus derrière le footer
* Hauteur des boutons de pagination du datatable alignée sur le select (40px) * Hauteur des boutons de pagination du datatable alignée sur le select (40px)
* Distribution de `tailwind.config.ts` aux projets consommateurs avec paths `content` absolus * Distribution de `tailwind.config.ts` aux projets consommateurs avec paths `content` absolus
+3
View File
@@ -653,8 +653,11 @@ Bouton d'action avec 4 variantes visuelles et icône optionnelle.
<MalioButton label="Voir plus" variant="tertiary" /> <MalioButton label="Voir plus" variant="tertiary" />
<MalioButton label="Supprimer" variant="danger" icon-name="mdi:trash" icon-position="left" /> <MalioButton label="Supprimer" variant="danger" icon-name="mdi:trash" icon-position="left" />
<MalioButton label="Pleine largeur" button-class="w-full" /> <MalioButton label="Pleine largeur" button-class="w-full" />
<MalioButton label="Modifier" button-class="w-m-btn-action" /> <!-- 150px, format bouton d'action -->
``` ```
> **Token de largeur partagé** : `w-m-btn-action` (150px) est exposé via `tailwind.config.ts` du layer, branché sur la CSS var `--m-btn-action-width`. Pour les boutons d'action (listes, lignes de tableau, footers denses…). Themable côté consommateur en redéfinissant `--m-btn-action-width` dans son propre CSS.
--- ---
## MalioButtonIcon ## MalioButtonIcon
+3
View File
@@ -31,6 +31,9 @@
--m-btn-danger-hover: 234 151 151; /* #EA9797 */ --m-btn-danger-hover: 234 151 151; /* #EA9797 */
--m-btn-danger-active: 255 83 86; /* #FF5356 */ --m-btn-danger-active: 255 83 86; /* #FF5356 */
/* ── Largeurs Boutons ── */
--m-btn-action-width: 150px; /* Boutons d'action (liste, ligne tableau, footer dense…) */
/* ── Couleurs de site (usage ponctuel) ── */ /* ── Couleurs de site (usage ponctuel) ── */
--m-site-blue: 5 108 242; /* #056CF2 - Bleu Châtellerault */ --m-site-blue: 5 108 242; /* #056CF2 - Bleu Châtellerault */
--m-site-yellow: 243 203 0; /* #F3CB00 - Jaune Saint-Jean */ --m-site-yellow: 243 203 0; /* #F3CB00 - Jaune Saint-Jean */
+17 -15
View File
@@ -57,25 +57,27 @@
<div <div
v-if="totalItems > 0" v-if="totalItems > 0"
class="flex justify-between pt-2" class="flex items-center justify-between pt-2"
data-test="pagination" data-test="pagination"
> >
<div class="flex gap-4"> <div class="flex items-center gap-4">
<span class="whitespace-nowrap text-[16px] text-black self-center">Lignes :</span> <span class="whitespace-nowrap text-[16px] text-black">Lignes :</span>
<MalioSelect <div class="h-12">
:model-value="perPage" <MalioSelect
:options="perPageSelectOptions" :model-value="perPage"
min-width="w-20 !mt-0" :options="perPageSelectOptions"
rounded="rounded" group-class="w-20"
text-field="text-sm" rounded="rounded"
text-value="text-sm" text-field="text-sm"
text-label="text-xs" text-value="text-sm"
data-test="per-page-select" text-label="text-xs"
@update:model-value="onPerPageChange" data-test="per-page-select"
/> @update:model-value="onPerPageChange"
/>
</div>
</div> </div>
<nav aria-label="Pagination" class="flex gap-1" data-test="pagination-nav"> <nav aria-label="Pagination" class="flex items-center gap-1" data-test="pagination-nav">
<MalioButton <MalioButton
variant="tertiary" variant="tertiary"
label="Prev" label="Prev"
+3
View File
@@ -17,6 +17,9 @@ export default {
borderRadius: { borderRadius: {
malio: 'var(--m-radius)', malio: 'var(--m-radius)',
}, },
width: {
'm-btn-action': 'var(--m-btn-action-width)',
},
colors: { colors: {
m: { m: {
primary: 'rgb(var(--m-primary) / <alpha-value>)', primary: 'rgb(var(--m-primary) / <alpha-value>)',