Button
Composant de bouton d'action utilisé dans l'interface utilisateur PyColors, construit sur shadcn/ui. Comprend les variantes, les tailles, l'accessibilité et les règles d'utilisation du produit.
Actions auxquelles les utilisateurs peuvent faire confianceLien vers la section
Les Bouton component est la primitive d'action primaire dans PyColors UI.
Utilisez-le pour:
- Soumettre des formulaires
- Déclenchement des dialogues
- ouverture feuilles
- Débuter le paiement
- enregistrer les changements
- Confirmer les actions destructrices
- naviguer quand un élément doit se comporter visuellement comme un bouton
Cette mise en œuvre étend la primitive de bouton shadcn/ui et est aligné avec le système de conception PyColors: tokens de couleur sémantiques, rayon, ombres et anneaux de focus.
Idée de base
Les boutons communiquent l'intention. Choisissez la variante en fonction de la priorité d'action et non de la décoration.
ImportationLien vers la section
import { Button } from "@pycolors/ui";Utilisation de baseLien vers la section
Le bouton par défaut utilise des tokens sémantiques primaires et s'adapte automatiquement au mode clair et sombre.
Modèle d'action produitLien vers la section
Les boutons sont l'une des primitives d'interaction à la plus haute fréquence dans un produit SaaS.
Ils influencent :
- clarté de conversion
- Confiance dans le workflow
- action destructrice sécurité
- friction d'embarquement
- Qualité perçue des produits
Modèle mental
Un bouton n’est pas une décoration. C’est un engagement d’interaction.
Quand utiliser le boutonLien vers la section
Utilisez le bouton lorsque l'utilisateur effectue une action.
Actions principales
Actions secondaires
Actions risquées
Modèle de décisionLien vers la section
Actions principales
Primary buttons represent the highest-priority action inside a product surface.
VariantesLien vers la section
Les boutons prennent en charge les variantes de priorité d'action et de signification sémantique.
Variantes disponiblesLien vers la section
| Variante | Objet |
|---|---|
default | Action principale, priorité absolue |
secondary | Action alternative neutre |
outline | Action à moyen terme |
ghost | Action de faible accentuation dans l'interface utilisateur dense |
destructive | Action dangereuse ou irréversible |
link | Action en ligne de style texte |
Variante de règle
Une page doit généralement avoir une action primaire claire. Utilisez secondaire, contour ou fantôme pour soutenir les actions.
TaillesLien vers la section
Le bouton prend en charge les tailles standard et les tailles d'icônes uniquement.
Tailles disponiblesLien vers la section
| Taille | Objet |
|---|---|
sm | Boutons compacts pour des interfaces produit denses |
default | Taille standard du bouton |
lg | Poids visuel plus élevé |
icon | Bouton carré icône seule |
icon-sm | Bouton compact icône seule |
icon-lg | Bouton icône seule plus grande |
Règle de taille
Gardez les tailles de boutons cohérentes dans la même section. Utilisation
lg pour les grands CTA et sm pour des actions de produits denses.
État handicapéLien vers la section
Utilisez l'état désactivé lorsqu'une action n'est pas disponible.
Les boutons désactivés utilisent une opacité réduite et suppriment l'interaction avec le pointeur.
Règle UX
Lorsque vous désactivez un bouton, assurez-vous que l'utilisateur peut comprendre ce qui est nécessaire pour l'activer.
Avec icôneLien vers la section
Utilisez des icônes lorsqu'elles renforcent l'action.
Le bouton applique une valeur par défaut size-4 aux icônes SVG imbriquées qui n'ont pas déjà un size-* classe.
import { Button } from "@pycolors/ui";
import { Plus } from "lucide-react";
export function ButtonLeadingIcon() {
return (
<Button>
<Plus className="mr-2 size-4" aria-hidden="true" />
Add item
</Button>
);
}Règle d'icône
Les icônes devraient soutenir l'étiquette. Pour les boutons icon-only,
toujours fournir un aria-label.
État de validationLien vers la section
Le bouton prend en charge l'état visuel invalide grâce à aria-invalid.
Cela peut être utile pour soumettre des actions lorsque le formulaire associé n'est pas valide.
Avec icôneLien vers la section
Utilisation asChild pour rendre le bouton comme un autre élément tout en préservant le style du bouton.
Ceci est couramment utilisé pour les liens et les composants de routeur.
Règle sémantique
Si l'action navigue, rendez un lien d'ancre ou de routeur. S'il soumet ou mute l'état, rendez un bouton.
UtilisationsLien vers la section
Choisissez la priorité d'action
Utilisation default pour l'action principale, puis choisissez secondaire, contour ou fantôme pour les actions de soutien.
Utiliser l'intention sémantique
Utilisation destructive uniquement lorsque l'action est dangereuse ou irréversible.
Gardez les étiquettes orientées vers l'action
Préférez des verbes clairs tels que Enregistrer, Continuer, Créer un projet, Mettre à niveau, Supprimer.
Coupler le chargement avec l'état
Pendant le travail asynchrone, désactivez le bouton et mettez à jour l'étiquette pour afficher la progression.
Gardez les boutons icon-only accessibles
Toujours fournir aria-label et marquer les icônes décoratives comme aria-hidden.
Guide de décision produitLien vers la section
Utiliser le bouton
- enregistrer les données
- Soumettre des formulaires
- overlays ouverts
- Déclencher des actions async
Utiliser Link
- navigation page
- docs externes
- Changements d'route
- liens de ressources
Bouton vs lien vs badgeLien vers la section
| Situation | Utilisation |
|---|---|
| Soumettre un formulaire | Bouton |
| Déclencher une mutation | Bouton |
| Ouvrir une boîte de dialogue ou un panneau latéral | Bouton |
| Naviguer vers une autre URL | Lien stylé avec Button asChild |
| Afficher les métadonnées ou l'état | Badge |
| Navigation texte en ligne | Lien |
| Actions de rangée compactes | Bouton de déclenchement DropdownMenu |
Règle de décision
Le bouton est pour l'intention. Link est pour la navigation. Badge pour les métadonnées.
APILien vers la section
| Prop | Type | Par défaut | Désignation |
|---|---|---|---|
variant | ButtonVariant | "default" | Style visuel |
size | ButtonSize | "default" | Taille du bouton |
asChild | boolean | false | Rendu avec Radix Slot |
disabled | boolean | false | Désactiver l'interaction |
className | string | — | Autres classes Tailwind |
Button étend les accessoires de bouton HTML standard.
React.ComponentProps<"button">;TypeScript typesLien vers la section
export type ButtonVariant =
"default" | "secondary" | "outline" | "ghost" | "destructive" | "link";
export type ButtonSize =
"default" | "sm" | "lg" | "icon" | "icon-sm" | "icon-lg";AccessibilitéLien vers la section
- Utilisez des étiquettes claires et descriptives.
- Préserver les styles de focus clavier.
- Utilisez des boutons d'icône uniquement avec un
aria-label. - Marquer les icônes décoratives avec
aria-hidden="true". - Utilisation
disabledpour des actions indisponibles. - Ne comptez pas uniquement sur la couleur pour communiquer un état destructeur ou invalide.
- Utilisez des liens pour la navigation et des boutons pour les actions.
Règle d'accessibilité
Chaque bouton doit avoir un nom accessible. Le texte visible est le meilleur;
aria-label est nécessaire pour les boutons icon-only.
Préférez/évitezLien vers la section
Préférez
- une action primaire claire par section
- Étiquettes courtes verbe-first
- Tailles cohérentes dans la même vue
asChildpour les liens qui ressemblent à des boutons- Étiquettes accessibles pour boutons d'icônes uniquement
Éviter
- Plusieurs boutons principaux concurrents
- Style destructeur pour des actions non destructives
- boutons icon-only sans étiquettes
- boutons utilisés comme navigation sans sémantique de lien
- étiquettes vagues comme « OK » ou « Soumettre » lorsque le contexte n’est pas clair
Directives de copie du produitLien vers la section
Les étiquettes de bouton doivent communiquer clairement l'intention et réduire l'hésitation.
Bonnes étiquettes
Strong labels are explicit, action-oriented, and outcome-focused.