Formulaires

Champ de texte

حقل نصيText input

Stablesrc/dsm/components/input.tsx
Contrôle de saisie de texte natif partagé par tous les formulaires du DSM : bordure, focus, états invalide et désactivé sont cohérents entre `Input`, `Textarea` et `PasswordInput`. Icônes et affixes textuels (« MAD », « +212 ») s'insèrent sans casser l'alignement du texte.

Import

import { Input } from "@/dsm/components/input";

Exemples

Champ simple et affixes

Saisie de base, puis avec un affixe textuel (« MAD », « +212 »).

LTR

Utilisé pour retrouver votre dossier.

MAD
+212

Tailles

Les trois hauteurs disponibles : sm, md, lg.

LTR

États

Invalide, désactivé et lecture seule.

LTR

Attribué automatiquement, non modifiable.

Zone de texte et mot de passe

`Textarea` avec compteur de caractères et `PasswordInput` avec bascule de visibilité.

LTR

Décrivez brièvement l'objet de votre requête.

280 caractères restants

Usage

Quand l'utiliser

  • Utilisez `Input` pour toute saisie sur une ligne : texte, nombre, e-mail, téléphone, recherche simple.
  • Utilisez `addonStart`/`addonEnd` pour un préfixe ou suffixe textuel fixe (unité, indicatif) plutôt que de l'inclure dans le `placeholder`.
  • Utilisez `Textarea` pour un texte libre de plusieurs lignes, avec `maxLength` si le champ alimente un système ayant une limite de caractères.
  • Utilisez `PasswordInput` pour tout mot de passe ou code secret afin d'offrir le bouton d'affichage/masquage.

Quand ne pas l'utiliser

  • N'utilisez pas `Input` pour un choix parmi une liste fermée : préférez `Select` ou `RadioGroup`.
  • Ne mettez pas d'information obligatoire uniquement dans le `placeholder` : elle disparaît dès la saisie, utilisez `Field` avec `hint` ou `required`.

Accessibilité & langues

Accessibilité

  • Toujours envelopper le contrôle dans `Field` (ou lui fournir un `<label>` explicite) : `Input` seul n'a pas de nom accessible.
  • L'anneau de focus est déplacé sur le conteneur du champ (pas sur le texte) afin de rester net même avec des icônes ou affixes.
  • `Textarea` annonce le compteur de caractères restants avec `aria-live="polite"`, sans interrompre la saisie.
  • `PasswordInput` porte un `aria-label` explicite (« Afficher/Masquer le mot de passe ») sur le bouton bascule, jamais une icône seule sans texte alternatif.

RTL & multilingue

  • Les paddings utilisent `ps-*`/`pe-*` : les icônes et affixes changent de côté automatiquement en arabe.
  • Les bordures d'affixe utilisent `border-s`/`border-e`, jamais `border-l`/`border-r`.

Propriétés

Input
PropriétéTypeDéfautDescription
size"sm" | "md" | "lg"mdHauteur du champ : 36px, 44px ou 52px.
invalidboolean—Applique l'anneau et le focus en ton d'erreur.
iconStart / iconEndReactNode—Icône décorative insérée avant ou après le texte.
addonStart / addonEndReactNode—Affixe textuel dans un encart teinté (unité, indicatif téléphonique…).
disabled / readOnlyboolean—États standards du champ natif, stylés de façon cohérente.
Textarea
PropriétéTypeDéfautDescription
rowsnumber4Nombre de lignes visibles initialement.
maxLengthnumber—Active un compteur « n caractères restants » sous le champ.
invalidboolean—Applique l'anneau en ton d'erreur.
PasswordInput
PropriétéTypeDéfautDescription
…InputProps—Accepte toutes les props d'`Input` sauf `type` et `iconEnd`, réservées à la bascule de visibilité.

Composants liés