Files
malio-layer-ui/app/story/input/inputPassword.story.vue
tristan 968b7087b5 [#MUI-23] Revoir la config couleur tailwind (#18)
| 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: #18
Co-authored-by: tristan <tristan@yuno.malio.fr>
Co-committed-by: tristan <tristan@yuno.malio.fr>
2026-03-24 09:05:23 +00:00

253 lines
5.9 KiB
Vue

<template>
<Story title="Input/Password">
<div class="grid grid-cols-1 gap-6 md:grid-cols-2">
<div class="rounded-lg border p-4">
<h2 class="mb-4 text-xl font-bold">Simple</h2>
<MalioInputPassword
v-model="simpleValue"
label="Mot de passe"
/>
</div>
<div class="rounded-lg border p-4">
<h2 class="mb-4 text-xl font-bold">Sans icône</h2>
<MalioInputPassword
v-model="noIconValue"
label="Mot de passe"
:display-icon="false"
/>
</div>
<div class="rounded-lg border p-4">
<h2 class="mb-4 text-xl font-bold">Avec hint</h2>
<MalioInputPassword
v-model="hintValue"
label="Mot de passe"
hint="8 caractères minimum"
/>
</div>
<div class="rounded-lg border p-4">
<h2 class="mb-4 text-xl font-bold">Désactivé</h2>
<MalioInputPassword
v-model="disabledValue"
label="Mot de passe"
disabled
/>
</div>
<div class="rounded-lg border p-4">
<h2 class="mb-4 text-xl font-bold">Readonly</h2>
<MalioInputPassword
v-model="readonlyValue"
label="Mot de passe"
readonly
/>
</div>
<div class="rounded-lg border p-4">
<h2 class="mb-4 text-xl font-bold">Erreur</h2>
<MalioInputPassword
v-model="errorValue"
label="Mot de passe"
error="Le mot de passe est trop court"
/>
</div>
<div class="rounded-lg border p-4">
<h2 class="mb-4 text-xl font-bold">Succès</h2>
<MalioInputPassword
v-model="successValue"
label="Mot de passe"
success="Mot de passe valide"
/>
</div>
</div>
</Story>
</template>
<docs lang="md">
# MalioInputPassword
Composant input mot de passe avec label flottant, toggle de visibilité
(icône oeil), états visuels (erreur / succès) et accessibilité.
------------------------------------------------------------------------
## Props détaillées
### id
- Type: string
- Description: Identifiant HTML de l'input.
- Comportement: Si non fourni, un id unique est généré
automatiquement.
### label
- Type: string
- Description: Texte affiché comme label flottant.
- Comportement: Si absent, aucun label n'est rendu.
### name
- Type: string
- Description: Attribut name de l'input (utile pour les formulaires).
### autocomplete
- Type: string
- Description: Active ou configure l'autocomplétion navigateur.
- Défaut: off
### modelValue
- Type: string | null | undefined
- Description: Valeur contrôlée du composant.
- Comportement:
- Si défini composant contrôlé (v-model).
- Sinon gestion interne de l'état.
------------------------------------------------------------------------
## Apparence & Style
### inputClass
- Type: string
- Description: Classes CSS appliquées à l'input.
### labelClass
- Type: string
- Description: Classes CSS appliquées au label.
### groupClass
- Type: string
- Description: Classes CSS appliquées au conteneur.
------------------------------------------------------------------------
## Validation & Contraintes
### required
- Type: boolean
- Description: Ajoute l'attribut HTML required.
### maxLength
- Type: number | string
- Description: Longueur maximale autorisée.
### minLength
- Type: number | string
- Description: Longueur minimale autorisée.
### disabled
- Type: boolean
- Description: Désactive complètement le champ.
### readonly
- Type: boolean
- Description: Rend le champ non modifiable mais focusable.
------------------------------------------------------------------------
## États & Messages
### hint
- Type: string
- Description: Message d'aide affiché sous le champ.
### error
- Type: string
- Description: Message d'erreur.
- Effet:
- Active l'état visuel erreur.
- aria-invalid=true
- Prioritaire sur success et hint.
### success
- Type: string
- Description: Message de succès.
- Effet:
- Actif uniquement si error est absent.
------------------------------------------------------------------------
## Icône de visibilité
### displayIcon
- Type: boolean
- Défaut: true
- Description: Affiche ou masque l'icône toggle de visibilité.
- Comportement:
- `true` : affiche une icône oeil cliquable à droite de l'input.
- `false` : pas d'icône, le type reste `password`.
### Icônes utilisées
- `mdi:eye-off-outline` : mot de passe masqué (état par défaut).
- `mdi:eye-outline` : mot de passe visible (après clic).
### Couleur de l'icône
- `text-m-muted` par défaut.
- `text-m-danger` si la prop `error` est renseignée.
- `text-m-success` si la prop `success` est renseignée.
------------------------------------------------------------------------
## Comportement
- Au clic sur l'icône, le type de l'input alterne entre `password` et `text`.
- Aucune validation interne.
- Les états sont pilotés uniquement par les props.
## Priorité visuelle
1. error
2. success
3. neutre
------------------------------------------------------------------------
## Accessibilité
- aria-invalid est activé si error existe.
- aria-describedby référence dynamiquement le message affiché.
- Fonctionne avec ou sans v-model.
------------------------------------------------------------------------
## Events
### update:modelValue
- Émis à chaque modification de l'input.
- Permet l'utilisation avec v-model.
</docs>
<script setup lang="ts">
import {ref} from 'vue'
import MalioInputPassword from '../../components/malio/input/InputPassword.vue'
const simpleValue = ref('')
const noIconValue = ref('')
const hintValue = ref('')
const disabledValue = ref('motdepasse123')
const readonlyValue = ref('lectureseule')
const errorValue = ref('abc')
const successValue = ref('Str0ngP@ss!')
</script>