Boutons pilule

L'interaction signature de trc-ui : une pilule fine avec une pastille ronde d'accent. Au survol, la pastille s'étire jusqu'à remplir la pilule et le libellé fonce.

Bordée et pleine

Survolez les pilules, ou atteignez-les avec la touche Tab : le focus clavier joue la même animation. La pilule pleine marque l'action principale ; une seule par écran.

TSDemo.tsx
<PillButton solid>Créer un compte</PillButton>
<PillButton>Commencer</PillButton>

Taille compacte

TSDemo.tsx
<PillButton size="sm">Se connecter</PillButton>
<PillButton size="sm" solid>Commencer</PillButton>

En lien

PillLink rend la même pilule sous forme de <a>. Passez le composant de lien de votre routeur avec as pour garder la navigation côté client.

TSDemo.tsx
<PillLink href="#">Lire la documentation</PillLink>
import Link from "next/link";
import { PillLink } from "trc-ui";

<PillLink as={Link} href="/pricing">Voir les tarifs</PillLink>

L'exception Retour

Les pilules ne portent pas d'autre icône que leur flèche. Seule exception : revenir en arrière, avec une flèche vers la gauche.

TSDemo.tsx
import { ArrowLeft, PillButton } from "trc-ui";

<PillButton icon={<ArrowLeft />}>Retour</PillButton>

Chargement et désactivé

loading remplace la flèche par un indicateur, désactive le bouton et l'annonce comme occupé. Une pilule désactivée ne s'étire pas au survol.

TSDemo.tsx
<PillButton loading>Envoi</PillButton>
<PillButton disabled>Indisponible</PillButton>

Comment marche l'étirement

La pastille et le remplissage sont une seule forme, qui grandit de la largeur de la pastille jusqu'à toute la pilule, sous la bordure, avec une courbe ease-in-out-quart en 500 ms. Le libellé fonce 150 ms après le départ du remplissage, et s'éclaircit tout de suite à la sortie : il reste lisible à chaque image. Sur écran tactile, pas de survol : la pilule reste au repos. Avec le mouvement réduit, le changement est instantané.

CSSRégler le mouvement
:root {
  --trc-ease: cubic-bezier(0.77, 0, 0.175, 1);
  --trc-duration: 500ms;
}

PillButton

PropTypeDéfautDescription
solidbooleanfalseFond blanc : l'action principale d'un écran. Une seule par écran au plus.
size"md" | "sm""md"56 px, ou 40 px pour les en-têtes et barres d'outils.
iconReactNode–Remplace la flèche de la pastille. Réservé à « Retour » (flèche vers la gauche).
loadingbooleanfalseAffiche un indicateur dans la pastille, désactive le bouton et pose aria-busy.
type"button" | "submit" | "reset""button"button par défaut : une pilule n'envoie jamais un formulaire par accident.
…propsComponentProps<"button">–Tout attribut natif de bouton, et une ref.

PillLink

PropTypeDéfautDescription
solidbooleanfalseFond blanc : l'action principale d'un écran. Une seule par écran au plus.
size"md" | "sm""md"56 px, ou 40 px pour les en-têtes et barres d'outils.
iconReactNode–Remplace la flèche de la pastille. Réservé à « Retour » (flèche vers la gauche).
asElementType"a"Le composant de lien de votre routeur (Next.js, React Router…).
…propsComponentProps<typeof as>–Props de l'élément rendu : href, target…