diff --git a/.playground/pages/composant/inputText.vue b/.playground/pages/composant/inputText.vue index e1d478f..7c00b7c 100644 --- a/.playground/pages/composant/inputText.vue +++ b/.playground/pages/composant/inputText.vue @@ -2,7 +2,7 @@

Simple

- +
@@ -16,7 +16,7 @@
-

Avec icône

+

Avec icône à droite

+
+

Avec icône à gauche

+ +
+

Désactivé

diff --git a/.playground/pages/index.vue b/.playground/pages/index.vue index ccf06c3..17e7186 100644 --- a/.playground/pages/index.vue +++ b/.playground/pages/index.vue @@ -15,7 +15,7 @@ :key="item.name" type="button" class="rounded px-3 py-2 text-left text-black font-bold hover:bg-m-primary hover:text-white" - :class="selectedName === item.name ? 'bg-m-secondary text-white ' : ''" + :class="selectedName === item.name ? 'bg-m-secondary text-white' : ''" @click="selectOrToggle(item.name)" > {{ item.label }} @@ -32,10 +32,13 @@ v-else-if="selectedName" class="text-gray-700" > - Page de demo introuvable: .playground/pages/composant/{{ selectedDemoFileName }}.vue + Page de demo introuvable: + .playground/pages/composant/{{ selectedDemoFileName }}.vue

-

Playground composants

+

+ Playground composants +

Selectionne un composant dans la liste pour afficher sa page de demo.

@@ -45,6 +48,8 @@ diff --git a/app/story/inputText.story.vue b/app/story/inputText.story.vue index b79b23f..e6db366 100644 --- a/app/story/inputText.story.vue +++ b/app/story/inputText.story.vue @@ -1,56 +1,200 @@ -# Input Text +# MalioInputText -## Liste des props +Composant input texte avec masque optionnel (maska), label flottant, +états visuels (erreur / succès) et icône configurable. -Le composant Input Text permet de saisir du texte. Il peut afficher des messages d'erreur, de succès ou d'information. -On peut lui passer plusieurs props pour personnaliser son comportement et son apparence. - - id: Identifiant HTML du champ. Si non fourni, un id est généré automatiquement. - - label: Texte du label affiché au-dessus du champ (floating label). - - name: Attribut name de l’input. - - autocomplete: Attribut autocomplete de l’input. - - modelValue: Valeur du champ (utilisée avec v-model) ou si valeur brut mettre des " ". - - minWidth: Classe utilitaire pour la largeur minimale du conteneur. Classe Tailwind de largeur (ex: w-64, w-full). - - maxWidth: Classe utilitaire pour la largeur maximale du conteneur. Classe Tailwind de largeur maximale. - - textInput: Classe(s) de style du texte de l’input. Classe(s) Tailwind de couleur ou de typographie (ex : text-gray-700, text-sm). - - textLabel: Classe(s) de style du texte du label. Classe(s) Tailwind de couleur ou de typographie (ex : text-gray-700, text-sm). - - required: Rend le champ obligatoire (required). - - maxLength: Nombre de caractère maximal autorisé. - - minLength: Nombre de caractère minimal autorisé. - - disabled: Désactive le champ et applique le style désactivé. - - readonly: Met le champ en lecture seule. - - hint: Message informatif affiché sous le champ. - - error: Message d’erreur affiché sous le champ. Active le style erreur. - - success: Message de succès affiché sous le champ. Active le style succès. - - iconName: Nom de l’icône affichée à droite dans le champ. - - rounded: Classe utilitaire pour le rayon des coins ( rounded- ). - - iconSize: Taille de l’icône. (ex : 24, 26, 85 ,99, ... ). - - iconColor: Classe(s) personnalisée(s) de couleur pour l’icône ( text- ). - - mask: Masque de saisie pour formater la valeur : - - \# : chiffre - - A : lettre majuscule - - a : lettre minuscule - - \* : chiffre ou lettre +------------------------------------------------------------------------ -Événement émis : +## Props détaillées -- update:modelValue: Émis à chaque saisie pour mettre à jour v-model. +### id -Règles d’affichage des messages : +- Type: string +- Description: Identifiant HTML de l’input. +- Comportement: Si non fourni, un id unique est généré +automatiquement. -Priorité d’affichage : - 1) error - 2) success - 3) hint +### 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: vide + +### 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. + +### mask + +- Type: string | undefined +- Description: Masque appliqué via la directive maska. +- Comportement: Formate la saisie selon les tokens définis. + +------------------------------------------------------------------------ + +## Apparence & Style + +### textInput + +- Type: string +- Description: Classes CSS appliquées à l’input (taille de texte, +etc.). + +### textLabel + +- Type: string +- Description: Classes CSS appliquées au label. + +### rounded + +- Type: string +- Description: Classe Tailwind pour le border-radius. +- Défaut: rounded-md + +### minWidth / maxWidth + +- Type: string +- Description: Classes utilitaires Tailwind pour contraindre la +largeur. + +------------------------------------------------------------------------ + +## 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 + +### iconName + +- Type: string +- Description: Nom de l’icône (ex: mdi:magnify). + +### iconSize + +- Type: string | number +- Description: Taille de l’icône. + +### iconColor + +- Type: string +- Description: Couleur de l’icône. + +------------------------------------------------------------------------ + +## Comportement de validation + +- Aucune validation interne. +- Les états sont pilotés uniquement par les props. + +## Priorité visuelle + +1. error +2. success +3. neutre + +------------------------------------------------------------------------ + +## Tokens de masque + +- \# : chiffre +- A : lettre majuscule +- a : lettre minuscule +- \* : chiffre ou lettre + +------------------------------------------------------------------------ + +## 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. + diff --git a/app/story/inputTextArea.story.vue b/app/story/inputTextArea.story.vue new file mode 100644 index 0000000..ef903ed --- /dev/null +++ b/app/story/inputTextArea.story.vue @@ -0,0 +1,192 @@ + + + +# MalioInputTextArea + +Composant textarea avec label flottant, états visuels (erreur / succès), +gestion du redimensionnement et compteur optionnel. + +------------------------------------------------------------------------ + +## Props détaillées + +### id + +- Type: string +- Description: Identifiant HTML du textarea. +- 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 du textarea (utile pour les formulaires). + +### autocomplete + +- Type: string +- Description: Active ou configure l’autocomplétion navigateur. + +### 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 + +### textInput + +- Type: string +- Description: Classes CSS appliquées au textarea (taille de texte, +etc.). +- Défaut: text-lg + +### textLabel + +- Type: string +- Description: Classes CSS appliquées au label. +- Défaut: text-sm + +### rounded + +- Type: string +- Description: Classe Tailwind pour le border-radius. +- Défaut: rounded-md + +------------------------------------------------------------------------ + +## Dimensions + +### size + +- Type: number | string +- Description: Nombre de lignes initiales (rows). +- Défaut: 2 + +### minResizeWidth / maxResizeWidth + +- Type: number | string +- Description: Largeur minimale / maximale autorisée lors du +redimensionnement. + +### minResizeHeight / maxResizeHeight + +- Type: number | string +- Description: Hauteur minimale / maximale autorisée lors du +redimensionnement. + +### resize +- Type: 'none' | 'both' | 'horizontal' | 'vertical' +- Description: Définit le comportement de redimensionnement CSS. +- Défaut: both + +------------------------------------------------------------------------ + +## Validation & États + +### required + +- Type: boolean +- Description: Ajoute l’attribut HTML required. + +### maxLength + +- Type: number | string +- Description: Longueur maximale autorisée. +- Effet: Limite la saisie et alimente le compteur. + +### disabled + +- Type: boolean +- Description: Désactive complètement le champ. + +### readonly + +- Type: boolean +- Description: Rend le champ non modifiable mais focusable. + +### 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. + +------------------------------------------------------------------------ + +## Compteur + +### showCounter + +- Type: boolean +- Description: Affiche le compteur x / maxLength. +- Condition: +- showCounter = true +- maxLength défini et > 0 +- Position: Bas gauche du textarea. +- Mise à jour: Dynamique à chaque saisie. + +------------------------------------------------------------------------ + +## Priorité d’affichage + +### Messages + +1. error +2. success +3. hint + + +------------------------------------------------------------------------ + +## Accessibilité + +- aria-invalid est activé si error existe. +- aria-describedby référence le message affiché. +- Fonctionne avec ou sans v-model. + +------------------------------------------------------------------------ + +## Events + +### update:modelValue + +- Émis à chaque modification du textarea. +- Permet l’utilisation avec v-model. + + + + diff --git a/tailwind.config.ts b/tailwind.config.ts index bc5b42e..4d24081 100644 --- a/tailwind.config.ts +++ b/tailwind.config.ts @@ -9,7 +9,7 @@ export default { ], safelist: [ { - pattern: /(sm:|md:|lg:|xl:|2xl:)?(text|rounded|w|min-w|max-w)-.+/, + pattern: /^(?:(?:sm|md|lg|xl|2xl):)?(?:text|rounded|w|min-w|max-w)-[^\s]+$/, }, ], theme: {