Commit Graph

145 Commits

Author SHA1 Message Date
tristan 41a3df7481 fix(ui) : checkbox internes de SelectCheckbox sans espace message réservé
Les options du dropdown (et le « tout sélectionner ») passaient reserveMessageSpace
par défaut → chaque ligne réservait un min-h-[1rem] inutile, d'où le gros espacement.
On force :reserve-message-space=false sur ces Checkbox internes.
Retire aussi la carte de démo playground hors-sujet.

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
2026-06-03 17:07:42 +02:00
tristan bf4d62a23f docs(playground) : exemple reserveMessageSpace sur SelectCheckbox
Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
2026-06-03 17:03:57 +02:00
tristan 1b5a4c9920 feat(ui) : prop reserveMessageSpace (défaut true) sur Select/SelectCheckbox/Checkbox/date/time
Ajoute reserveMessageSpace (défaut true) pour permettre de ne pas réserver
la ligne de message d'aide quand aucun message n'est présent. Comportement
inchangé par défaut. La famille date hérite via $attrs → CalendarField.

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
2026-06-03 16:53:22 +02:00
tristan cda0f994ca feat(ui) : prop reserveMessageSpace (défaut true) sur la famille input
Ajoute une prop booléenne reserveMessageSpace (défaut true) aux 10 composants
de la famille input. Par défaut, comportement inchangé (ligne message toujours
rendue avec min-h-[1rem]). À false, la ligne ne prend aucun espace en l'absence
de message, et s'affiche sans min-h quand un message est présent.

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
2026-06-03 16:43:31 +02:00
tristan 5f1dc834cd fix(ui) : pt-1 sur InputTextArea pour aligner son haut avec les inputs
Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
2026-06-03 16:31:50 +02:00
tristan de504d8ba0 docs(playground) : retire empty-option-label du SelectCheckbox readonly vide
Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
2026-06-03 16:28:44 +02:00
tristan 59004c9635 docs(playground) : badges (display-tag) sur SelectCheckbox readonly
Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
2026-06-03 16:26:10 +02:00
tristan 801925c443 fix(ui) : SelectCheckbox tolère modelValue absent (défaut []) — corrige crash SSR readonly
Le composant accédait à props.modelValue.length sans garde alors que modelValue
était requis ; un usage non bindé (ex. page playground readonly) plantait le rendu SSR.
modelValue devient optionnel avec défaut [].

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
2026-06-03 16:24:19 +02:00
tristan cec528eac6 docs(playground) : exemples readonly Select/SelectCheckbox (+ page DIVERS)
Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
2026-06-03 16:18:04 +02:00
tristan 358ba246d7 fix(ui) : aria-readonly suit isReadonly sur Select/SelectCheckbox (disabled prime)
Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
2026-06-03 16:15:38 +02:00
tristan 621077f555 feat(ui) : état readonly visuel sur Select et SelectCheckbox
Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
2026-06-03 16:11:13 +02:00
tristan f5163f10f1 fix(playground) : retire prop icon-name fantôme sur InputTextArea (pas d'icône)
Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
2026-06-03 15:57:36 +02:00
tristan 734c7aba2f docs(playground) : page DIVERS regroupant tous les champs readonly
Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
2026-06-03 15:56:08 +02:00
tristan bdca9490ee test(ui) : couvre icône/label readonly vide sur la famille champs
Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
2026-06-03 15:49:56 +02:00
tristan 5b9b771174 docs(playground) : exemples readonly
Ajout de deux blocs readonly (vide + rempli) sur chaque page playground
concernée : InputText, InputEmail, InputAmount, InputAutocomplete,
InputPassword, InputTextArea, InputPhone, InputUpload, Date, TimePicker.

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
2026-06-03 15:39:30 +02:00
tristan 993364062d fix(ui) : garde readonly défensive isOpen + test readonly TimePicker
Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
2026-06-03 15:35:41 +02:00
tristan 12a165c1c1 feat(ui) : état readonly visuel sur pickers date/heure
Bordure noire forcée (même vide), suppression du bleu focus/primary, label
et icône en text-black si rempli sinon text-m-muted, float piloté par isFilled
uniquement en readonly. Bouton clear et astérisque inchangés.

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
2026-06-03 15:30:45 +02:00
tristan f8c0bf13d5 feat(ui) : InputPhone readonly suit les règles readonly (plus de look disabled)
Découple readonly de disabled : le champ affiche border-black + curseur default,
l'icône suit text-black/text-m-muted selon isFilled, et le bouton "add" conserve
son guard onAdd sans porter l'apparence désactivée (opacity-40/cursor-not-allowed).

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
2026-06-03 15:26:50 +02:00
tristan 26c0a8b533 fix(ui) : cursor-default readonly TextArea + test chevron readonly Autocomplete
Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
2026-06-03 15:24:28 +02:00
tristan e622380916 feat(ui) : état readonly visuel sur les inputs floating-label
Applique le traitement readonly canonique (isReadonly, shouldFloatLabel,
mergedInputClass sans grow-height, bordure noire fixe, sans focus:border-m-primary,
mergedLabelClass sans peer-focus, iconStateClass sans isFocused) sur les 6 composants
InputText, InputEmail, InputAmount, InputAutocomplete, InputPassword et InputTextArea.
L'œil de InputPassword reste cliquable en readonly. Tests TDD ajoutés (3 cas par fichier).

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
2026-06-03 15:18:20 +02:00
tristan 289ff036d2 fix(ui) : readonly InputUpload — drop peer-focus float + idiome grow-height/cursor
Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
2026-06-03 15:12:15 +02:00
tristan fd3e3a7922 feat(ui) : état readonly visuel sur InputUpload (+ prop readonly)
Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
2026-06-03 15:05:48 +02:00
tristan c934019260 docs : plan état readonly cohérent
Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
2026-06-03 15:03:26 +02:00
tristan cc03559dcf feat(ui) : astérisque required à 16px
Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
2026-06-03 14:37:15 +02:00
tristan 6b1e11bd6f test(ui) : vérifie aria-required sur Select/SelectCheckbox/RichText
Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
2026-06-03 12:12:09 +02:00
tristan 4f5eaaacb9 docs : documentation required cohérente sur toute la famille formulaire
Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
2026-06-03 12:11:06 +02:00
tristan 2d8639a913 docs(playground) : exemples required + email lowercase
Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
2026-06-03 12:03:15 +02:00
tristan 3e09f4278e docs : required/astérisque + lowercase email (COMPONENTS + CHANGELOG)
Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
2026-06-03 12:00:38 +02:00
tristan 4e2303c471 test(inputs) : tests mode contrôlé email + commentaire caret jsdom
Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
2026-06-03 11:58:06 +02:00
tristan 6081f0c90c feat(inputs) : sanitisation email (suppression des espaces + option lowercase)
Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
2026-06-03 11:54:13 +02:00
tristan 120020b210 feat(ui): astérisque required dans le label de la famille formulaire
Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
2026-06-03 11:45:48 +02:00
tristan 61cb90a9c6 fix(ui): aria-required sur champ visible InputUpload + ordre import RichText
Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
2026-06-03 11:38:25 +02:00
tristan 167cc43870 feat(ui) : prop required + aria-required + astérisque sur Select/SelectCheckbox/Upload/RichText
Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
2026-06-03 11:32:10 +02:00
tristan 03fe458248 feat(ui) : composant partagé MalioRequiredMark (astérisque champ obligatoire)
Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
2026-06-03 11:26:04 +02:00
tristan df289aa829 docs: plan d'implémentation MUI-41 + précisions spec (caret email, exclusion SiteSelector)
Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
2026-06-03 11:23:31 +02:00
tristan 05949b727e docs: spec required asterisk + email sanitization (MUI-41)
Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
2026-06-03 11:16:07 +02:00
tristan aedfaa865d Merge branch 'main' into develop
# Conflicts:
#	CHANGELOG.md
2026-06-01 09:30:53 +02:00
tristan 39eb6e6068 feat(ui): token w-m-btn-action partagé + fix alignement pagination DataTable
- Nouveau token de largeur partagé `w-m-btn-action` (150px) exposé via
  tailwind.config.ts + CSS var `--m-btn-action-width` dans malio.css.
  Themable côté consommateur en redéfinissant la CSS var dans son :root.
- DataTable : pagination réalignée verticalement après l'introduction du
  `min-h-[1rem]` sur MalioSelect — la barre passe en `items-center` et le
  MalioSelect du sélecteur perPage est encapsulé dans un wrapper `h-12`
  qui borne sa taille flex à la hauteur du field. Span « Lignes : » et
  boutons Prev/Page/Next désormais centrés exactement sur le field.

Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
2026-06-01 09:17:58 +02:00
tristan 1d66e5dd31 fix: plusieurs retours UX/UI (#58)
Release / release (push) Successful in 1m11s
| Numéro du ticket | Titre du ticket |
|------------------|-----------------|
|                  |                 |

## Description de la PR

## Modification du .env

## Check list

- [ ] Pas de régression
- [ ] TU/TI/TF rédigée
- [ ] TU/TI/TF OK
- [ ] CHANGELOG modifié

---------

Co-authored-by: THOLOT DECHENE Matthieu <matthieu@yuno.malio.fr>
Co-authored-by: matthieu <matthieu@yuno.malio.fr>
Reviewed-on: #58
Co-authored-by: tristan <tristan@yuno.malio.fr>
Co-committed-by: tristan <tristan@yuno.malio.fr>
v1.7.2
2026-05-29 13:53:52 +00:00
tristan ce9b4853e6 Merge branch 'main' into develop 2026-05-29 15:52:31 +02:00
tristan dc33cf4135 feat(inputs): UX polish across input family + localFilter + focus scrollbar
Polish across the form input components, plus two new features and a few
standalone fixes.

Fixes
-----
* Reserve hint/error/success paragraph space (min-h-[1rem]) in 15
  components so a single error message no longer shifts neighboring grid
  cells: InputText, Email, Password, Phone, Amount, Number, Upload,
  Autocomplete, RichText, TextArea, Select, SelectCheckbox, Time,
  TimePicker, CalendarField, Checkbox.
* InputPhone: the '+' add button now follows the icon-state cascade
  (muted / primary on focus / black when filled / danger / success) like
  the other field icons instead of being permanently primary.
* Select and SelectCheckbox: chevron color follows the field state
  (muted by default, primary when open, black when an option is
  selected, danger / success on error / success) instead of always being
  text-current.
* InputTextArea: single-root component (was multi-root). The message
  wrapper used to occupy its own grid cell, breaking row-span layouts.
  Now flex flex-col, with the textarea area filling the available height
  via flex-1 and the message inside the same root.
* Disabled labels use text-m-muted (border-gray) instead of text-black/60
  (dark) across InputText, Email, Password, Amount, Phone, Upload,
  Autocomplete, TextArea, RichText. Also removes an unreachable
  peer-[&:not(:placeholder-shown):not(:focus)]:text-black/60 rule that
  twMerge was silently overriding with text-black.
* InputAutocomplete: eliminates four sources of visual jitter when
  focusing / opening a field that already has a selected value.
  - Drop peer-focus:-translate-y-[1.55rem] extra label translate.
  - Drop the .grow-height:focus padding rule (no more height growth or
    downward text shift on focus).
  - Drop focus:pl-[11px] (no more 1px horizontal jump).
  - Replace !border-b-0 with !border-b-transparent so the bottom border
    still reserves its 1px while remaining invisible against the
    dropdown.
* Select / SelectCheckbox: same anti-jitter treatment.
  - Drop .grow-height:focus padding rule (~12px height growth gone).
  - Replace !border-b-0 / !border-t-0 with !border-b-transparent /
    !border-t-transparent across danger / success / primary branches.
* Button: default width 240px -> 200px to match the form button sizing
  used across the app. Test updated to match.

Features
--------
* InputTextArea: scrollbar turns primary blue on focus
  (scrollbar-color: rgb(var(--m-primary)) transparent), matching the
  Select listbox styling.
* InputAutocomplete: new localFilter prop (default false). When enabled,
  filters the options prop client-side based on the input value
  (case-insensitive label.includes(query)), so static lists no longer
  need a @search listener. Async/API usage keeps the existing behavior.
  Playground "Simple statique" and "Avec icône à gauche" examples use
  local-filter.

Playground
----------
* client.vue: tighter grid gap (gap-y-5) plus an example error on a
  SelectCheckbox to visually exercise the message-space fix.

Tests
-----
All component test files include regression coverage for the above.
720/720 tests pass.

Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
2026-05-29 15:43:53 +02:00
tristan c0c39705c7 fix: drawer footer (#57)
Release / release (push) Successful in 1m20s
| Numéro du ticket | Titre du ticket |
|------------------|-----------------|
|                  |                 |

## Description de la PR

## Modification du .env

## Check list

- [x] Pas de régression
- [x] TU/TI/TF rédigée
- [x] TU/TI/TF OK
- [x] CHANGELOG modifié

---------

Co-authored-by: THOLOT DECHENE Matthieu <matthieu@yuno.malio.fr>
Co-authored-by: matthieu <matthieu@yuno.malio.fr>
Reviewed-on: #57
Co-authored-by: tristan <tristan@yuno.malio.fr>
Co-committed-by: tristan <tristan@yuno.malio.fr>
v1.7.1
2026-05-27 12:53:43 +00:00
tristan 526dcd1a84 Merge branch 'main' into develop
# Conflicts:
#	.playground/pages/composant/filtre/filtres.vue
2026-05-27 14:53:05 +02:00
tristan 280b650e49 fix: rendre le footer du Drawer hors zone scrollable (épinglé en bas)
Le slot #footer était rendu à l'intérieur du body overflow-y-auto, ce qui
faisait courir la scrollbar sur toute la hauteur, derrière le footer. Il est
désormais frère du body (comme MalioModal) : seul le body défile et le footer
reste fixé en bas. Tests, story, pages playground et doc alignés.

Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
2026-05-27 14:50:55 +02:00
tristan acd531f69e feat: Ajout des composants modal, accordeon, datetime avec selecteur d'heure à la molette (#56)
Release / release (push) Successful in 2m38s
| Numéro du ticket | Titre du ticket |
|------------------|-----------------|
|                  |                 |

## Description de la PR

## Modification du .env

## Check list

- [ ] Pas de régression
- [ ] TU/TI/TF rédigée
- [ ] TU/TI/TF OK
- [ ] CHANGELOG modifié

---------

Co-authored-by: THOLOT DECHENE Matthieu <matthieu@yuno.malio.fr>
Co-authored-by: matthieu <matthieu@yuno.malio.fr>
Reviewed-on: #56
Co-authored-by: tristan <tristan@yuno.malio.fr>
Co-committed-by: tristan <tristan@yuno.malio.fr>
v1.7.0
2026-05-27 12:11:51 +00:00
tristan 951acd448e fix : component.md 2026-05-27 14:09:56 +02:00
tristan 90b81975e3 Merge branch 'main' into develop
# Conflicts:
#	.claude/settings.local.json
#	.playground/playground.nav.ts
#	CHANGELOG.md
#	COMPONENTS.md
#	app/components/malio/date/DateTime.test.ts
#	app/components/malio/date/DateTime.vue
2026-05-27 14:02:27 +02:00
tristan e6a46a9d60 [#MUI-39] Création d'un sélecteur d'heure à molettes (MalioTimePicker) ; DateTime rebranché dessus (remplace l'input time natif intérimaire) (#55)
| Numéro du ticket | Titre du ticket |
|------------------|-----------------|
|                  |                 |

## Description de la PR

## Modification du .env

## Check list

- [ ] Pas de régression
- [ ] TU/TI/TF rédigée
- [ ] TU/TI/TF OK
- [ ] CHANGELOG modifié

Reviewed-on: #55
Co-authored-by: tristan <tristan@yuno.malio.fr>
Co-committed-by: tristan <tristan@yuno.malio.fr>
2026-05-27 12:01:29 +00:00
tristan 6efb830ffe [#MUI-37] Création d'un composant accordéon (#54)
| Numéro du ticket | Titre du ticket |
|------------------|-----------------|
|                  |                 |

## Description de la PR

## Modification du .env

## Check list

- [ ] Pas de régression
- [ ] TU/TI/TF rédigée
- [ ] TU/TI/TF OK
- [ ] CHANGELOG modifié

Reviewed-on: #54
Co-authored-by: tristan <tristan@yuno.malio.fr>
Co-committed-by: tristan <tristan@yuno.malio.fr>
2026-05-27 07:12:10 +00:00
tristan 7b838c60ca [#MUI-36] Création d'un composant modal (#53)
| Numéro du ticket | Titre du ticket |
|------------------|-----------------|
|                  |                 |

## Description de la PR

## Modification du .env

## Check list

- [ ] Pas de régression
- [ ] TU/TI/TF rédigée
- [ ] TU/TI/TF OK
- [ ] CHANGELOG modifié

Reviewed-on: #53
Co-authored-by: tristan <tristan@yuno.malio.fr>
Co-committed-by: tristan <tristan@yuno.malio.fr>
2026-05-26 07:36:13 +00:00