MeDo

Générateur de champs de saisie IA.

Décrivez votre formulaire et MeDo génère le champ de texte et le textarea ensemble — libellés, texte d'aide, états d'erreur, affixes préfixe et suffixe, compteurs de caractères et redimensionnement automatique, le tout relié aux bons attributs d'accessibilité.

Champ de saisie
Champ de saisie

La boîte est la plus petite partie d'un champ de saisie

L'essentiel du travail sur un champ de saisie n'a rien à voir avec le champ lui-même. Le libellé, le texte d'aide, l'emplacement d'erreur et les espacements entre eux sont ce qui rend un formulaire utilisable, et ce sont précisément les parties que les bibliothèques de composants laissent au consommateur. Les équipes écrivent donc un markup d'enveloppe sur mesure pour chaque formulaire, et le rythme vertical dérive champ après champ jusqu'à ce que rien ne s'aligne. Générer le libellé, la description et la zone d'erreur comme une seule unité fixe leur relation une fois pour toutes. Cela supprime aussi le défaut d'accessibilité le plus courant des formulaires web : un message d'erreur affiché à côté d'un champ mais jamais relié programmatiquement à lui.

6 modèles

Modèles de Champ de saisie que vous pouvez générer

Chaque modèle est un vrai prompt, pas une capture d'écran. Copiez-le dans n'importe quel éditeur IA, ou exécutez-le dans MeDo pour récupérer du code React + Tailwind.

BasicLabel + Field

Labeled Input With Helper Text

The baseline every other field extends. Label, field, and a message region that already occupies its line at rest so the form does not grow when an error appears.

Create a text input component with a visible label above the field, wired with a generated id and a matching for attribute rather than wrapping the input in the label. Below it, a helper text line linked through aria-describedby. Reserve the height of that line at rest so the form does not shift when an error replaces it. The field is 40px tall with an 8px radius, a 1px grey border, and a 2px focus-visible ring offset from the border. Add a required prop that sets the required attribute and appends a visually hidden "required" to the label rather than relying on an asterisk alone. Accept type, inputMode and autocomplete as props with no defaults, so each call site declares them.

Tester dans MeDo
ErrorsValidation States

Error, Success and Warning States

Where most form bugs live. An error message rendered beside a field but never connected to it is the most common accessibility defect in web forms.

Add validation states to a text input: error with a red border, a red message replacing the helper text, aria-invalid="true", and the message linked through aria-describedby so it is announced when focus enters the field. Add success and warning states that change the border and the leading icon but keep the same message slot and line height. Never signal state by border color alone — pair every state with an icon and text. Validate on blur, then revalidate on change only once the field is already in an error state, so a half-typed email is not flagged mid-entry. Announce late server-side errors through a polite live region.

Tester dans MeDo
AffixesAffix Slots

Prefix and Suffix Inside the Field

Search icons, currency symbols, unit suffixes, password toggles. The trap is padding — an affix rendered over the field without matching inset padding lets typed text slide underneath it.

Create a text input with optional prefix and suffix slots rendered inside the field border. Static affixes such as a currency symbol or a .com suffix get aria-hidden and muted text; interactive affixes such as a password visibility toggle or a clear button render as real buttons with their own aria-label and stay reachable by keyboard. Increase the field padding to match each affix width so typed text never slides under it. Keep the focus ring on the outer wrapper, not the bare input, so the ring surrounds the affixes too. Include a search variant with a leading magnifier and a trailing clear button that appears only when the field has a value.

Tester dans MeDo
TextareaAutosize Textarea

Growing Textarea With a Counter

A fixed three-row box for a support message forces people to scroll inside a scroll. Growing to a cap keeps the submit button on screen.

Create a textarea that shares the label, helper text and error layout of the text input. Autosize from a three-row minimum up to eight rows, recalculating the height from scrollHeight on input after resetting it, then switch to internal scrolling at the cap so a long message cannot push the submit button off screen. Add an optional character counter in the bottom right showing used and total, turning amber at 90 percent of the limit and red at the limit, announced through a polite live region rather than on every keystroke. Disable the native resize handle only when autosizing is on, otherwise leave it available.

Tester dans MeDo
FormattingMasked Field

Card, Phone and Date Inputs

Formatted fields where the input event rewrites the value. Get the caret handling wrong and editing the middle of a card number jumps the cursor to the end on every keystroke.

Create a formatted input for card numbers, phone numbers and expiry dates. Insert separators as the user types — spaces every four digits for cards, a slash after the month for expiry — while storing the unformatted value in state and submitting that. Preserve the caret position when the mask inserts a character mid-string, rather than letting the value reset send it to the end. Set inputMode="numeric" and the correct autocomplete token: cc-number, tel, cc-exp. Accept paste of an already-formatted value by stripping non-digits first. Validate length on blur and keep the field editable in the error state.

Tester dans MeDo
LayoutField Group

Multi-Field Row With Shared Rhythm

City and postcode on one line, expiry and CVC side by side. The point is a single spacing scale, since per-form wrapper markup is what makes vertical rhythm drift.

Create a form field group component that lays out two or three inputs on one row using a grid, collapsing to a single column below 640px. Keep a shared vertical gap between rows and align the labels on a single baseline even when one field carries helper text and its neighbor does not, by reserving the message line in every field. Group semantically related fields in a fieldset with a legend, such as an address block, so screen readers announce the group name before each field. Let each field declare its own width in grid columns rather than a hardcoded percentage, so a postcode field can be narrower than a city field.

Tester dans MeDo

Comment personnaliser votre Champ de saisie

Demandez toujours un vrai libellé

Un placeholder n'est pas un libellé. Il disparaît dès que quelqu'un commence à taper, ce qui laisse en plan toute personne interrompue en cours de formulaire, et la plupart des lecteurs d'écran le traitent comme un texte optionnel. Demandez un libellé visible relié au champ avec <label for>, et n'utilisez le placeholder que pour des exemples de format comme MM/AA.

Réservez la place du message d'erreur

Si le texte d'erreur n'apparaît qu'en cas d'échec de validation, le champ situé en dessous se décale à la soumission. Précisez que la zone d'aide et d'erreur occupe une hauteur de ligne fixe au repos, afin que la hauteur du formulaire ne change jamais quand les messages apparaissent.

Nommez les types de champs nécessaires

Spécifiez type et inputMode pour chaque champ : email, tel et numeric appellent des claviers mobiles différents. Associez-les aux bons tokens autocomplete, comme email, tel, current-password et one-time-code, pour que les navigateurs et gestionnaires de mots de passe puissent remplir le formulaire.

Décidez du moment de la validation

Valider à chaque frappe marque un email à moitié saisi comme erroné avant que quiconque ait fini. Demandez une validation au blur avec revalidation au change dès qu'un champ est déjà en état d'erreur : cela corrige les fautes sans harceler.

Qui utilise le composant Champ de saisie

Formulaire d'inscription ou de connexion

Champs email et mot de passe avec un bouton de visibilité en ligne dans l'emplacement suffixe, une indication de robustesse du mot de passe dans le texte d'aide, et des tokens autocomplete définis pour que les navigateurs proposent les identifiants enregistrés au lieu de champs vides.

Tunnel de paiement

Champs numéro de carte, expiration et code postal avec des modes de saisie numériques, un préfixe monétaire sur le champ montant, et une validation au blur pour qu'un numéro de carte partiellement saisi ne soit jamais signalé comme invalide.

Formulaire de support ou de contact

Un champ objet court au-dessus d'un textarea de message auto-redimensionnable avec un compteur de 1 000 caractères, pour que les messages longs agrandissent le champ au lieu d'obliger à défiler dans une boîte fixe.

Panneau de réglages du tableau de bord

Rangées denses de petits champs avec des libellés alignés à gauche, des champs read-only pour les valeurs que l'utilisateur ne peut pas modifier, et un texte d'aide expliquant l'effet de chaque réglage.

Modèles de Champ de saisie pour différents sites web

Le même composant champ de saisie, adapté au type de site sur lequel il est publié.

01 / 06

SaaS Signup and Login Inputs

Two fields decide whether the account gets created, so the autocomplete tokens matter more than the styling. Set email and current-password on login and new-password on signup, or password managers offer the wrong entry and people retype credentials they already saved. Put the visibility toggle in the suffix slot as a real button, not a click handler on an icon.

Styles et variantes de Champ de saisie

Choisissez la variante qui correspond au reste de la page, puis générez-la.

01 / 06

Outlined Input

A 1px border on a light surface with the label above — the default that works in the widest range of layouts. Keep the focus ring offset from the border rather than replacing it, so the resting and focused widths match and the field does not appear to move on focus.

Champ de saisie en React, Next.js, Vue et Svelte

React, Next.js, Vue 3, SvelteKit, Astro ou HTML simple — le même champ de saisie, six façons de l'intégrer.

01 / 06

React Input

Generate the id with useId so label association survives rendering the field twice on one page. Forward the ref so form libraries like React Hook Form can register the element directly.

src/components/Input.tsx

export const Input = forwardRef(function Input(
  { label, hint, error, ...props },
  ref
) {
  const id = useId()
  return (
    <div className="space-y-1.5">
      <label htmlFor={id}>{label}</label>
      <input id={id} ref={ref} aria-invalid={!!error}
        aria-describedby={id + '-msg'} {...props} />
      <p id={id + '-msg'}>{error ?? hint}</p>
    </div>
  )
})

Comment ajouter votre Champ de saisie à un projet

Quatre étapes, du choix d'un modèle de champ de saisie à sa mise en production.

01~30s

Pick an Input Template

Scan the six templates and start from the field you actually need — labeled text input, affix slots for search or currency, autosizing textarea, or a masked card field.

02~10s

Copy the Prompt

Take the prompt into MeDo, Lovable, Bolt, v0 or Cursor. Name the type, inputMode and autocomplete token per field before you run it, since those three decide which mobile keyboard opens and whether autofill works.

03~1min

Generate and Refine

You get React + Tailwind back with a live preview. Follow up in plain English — "validate on blur only", "add a clear button in the suffix", "reserve the error line" — rather than editing the aria wiring by hand.

04~2min

Wire It to Your Form State

Register the forwarded ref with React Hook Form, Formik or a Server Action and pass the resolver error straight into the error prop. The component owns layout and aria; your form library owns the validation rules.

Questions fréquentes à propos de Champ de saisie

Comment générer un champ de formulaire avec l'IA ?

Décrivez le champ, son libellé, son texte d'aide et les états nécessaires dans un seul prompt, par exemple « champ email avec libellé, texte d'indication et état d'erreur ». MeDo génère le libellé, le champ et la zone de message comme un composant unique avec les attributs aria déjà reliés. Vous pouvez lister plusieurs types de champs dans le même prompt et récupérer un ensemble cohérent.

Quelle est la différence entre un placeholder et un libellé ?

Un libellé nomme le champ de façon permanente et reste visible pendant la saisie. Un placeholder est un texte d'indication temporaire à l'intérieur du champ qui disparaît à la saisie, donc l'utiliser comme seul libellé laisse les gens deviner ce qu'ils ont déjà rempli. Utilisez un libellé pour le nom du champ et un placeholder uniquement pour un exemple de format.

Les erreurs de saisie doivent-elles apparaître pendant la frappe ou après l'envoi ?

Validez au blur plutôt qu'à chaque frappe, afin qu'une valeur partiellement saisie ne soit pas marquée comme erronée en cours de saisie. Dès qu'un champ affiche déjà une erreur, revalidez au change pour que le message disparaisse dès que la saisie devient valide. Réservez la validation à la soumission aux contrôles qui nécessitent tout le formulaire, comme la confirmation du mot de passe.

L'IA peut-elle générer des champs de saisie accessibles ?

Oui. MeDo associe le libellé au champ via for et id, relie les textes d'aide et d'erreur avec aria-describedby, et définit aria-invalid quand la validation échoue. Mentionnez les champs obligatoires dans votre prompt et ils seront marqués avec l'attribut required plutôt que de reposer sur un simple astérisque.

Comment faire grandir un textarea avec son contenu ?

Demandez un textarea auto-redimensionnable avec un nombre de lignes minimum et maximum, par exemple trois lignes grandissant jusqu'à huit avant de défiler. La hauteur est recalculée à partir du scroll height à chaque saisie, et plafonner le maximum évite qu'un long message pousse le bouton d'envoi hors de l'écran.

L'attribut autocomplete a-t-il vraiment de l'importance ?

Oui. Des tokens autocomplete corrects permettent aux navigateurs et aux gestionnaires de mots de passe de remplir les champs en une étape, ce qui réduit mesurablement l'abandon sur les formulaires d'inscription et de paiement. Dites à MeDo ce que collecte chaque champ et il définira le token correspondant, y compris les valeurs d'adresse et de paiement faciles à rater.