Dialogues et messages
Ces composants ouvrent une fenêtre, affichent un message dans la page ou montrent une liste vide. La question avant d'effacer et les toasts ne sont pas des composants : ce sont des fonctions, décrites dans Fonctions.
Dialog
La fenêtre de Hodi, centrée sur l'écran, avec un en-tête teinté et une croix pour la fermer. La touche Échap, un clic à côté de la fenêtre ou la croix appellent onClose. Les boutons de la fenêtre se placent dans DialogActions.
import { Button, Dialog, DialogActions, TextField } from 'hodi:sdk'
import { Hand } from 'lucide-react'
<Dialog
open={open}
onClose={close}
size="compact"
title="Nouvelle salutation"
intro="Elle remplace « Salut »."
>
<TextField
icon={Hand}
aria-label="Salutation"
placeholder="Coucou"
/>
<DialogActions>
<Button onClick={close}>Annuler</Button>
<Button look="primary" onClick={save}>Enregistrer</Button>
</DialogActions>
</Dialog>openbooleantrue quand la fenêtre est ouverte.
onClose() => voidAppelé quand la personne ferme la fenêtre : avec Échap, la croix ou un clic à côté.
title?ReactNodeLe titre de la fenêtre. Sans titre, labelledBy doit nommer la fenêtre.
intro?ReactNodeUne ou deux phrases sous le titre, qui disent à quoi sert la fenêtre.
size?'compact' | 'wide'La largeur de la fenêtre : compact pour une question ou un court formulaire, wide quand il y a plus à lire.
onBack?() => voidAjoute une flèche de retour avant le titre, qui appelle cette fonction.
labelledBy?stringL'id de l'élément qui nomme la fenêtre, pour les lecteurs d'écran.
describedBy?stringL'id de l'élément qui décrit la fenêtre, pour les lecteurs d'écran.
childrenReactNodeLe contenu de la fenêtre, puis ses DialogActions.
DialogActions
La rangée de boutons au bas d'une fenêtre, sous un trait. Le bouton secondaire, comme Annuler, va à gauche ; le bouton de l'action va à droite.
childrenReactNodeLes boutons de la rangée. Le bouton principal vient en dernier.
className?stringUne classe CSS de plus, préfixée par l'id du plugin.
StatusLine
Une ligne de message sous un champ : en bleu pour dire ce qui se passe, en rouge pour dire qu'une chose a échoué.
Enregistré il y a 2 min.
import { StatusLine } from 'hodi:sdk'
<StatusLine tone="info">Enregistré il y a 2 min.</StatusLine>tone'info' | 'error'La couleur de la ligne : info en bleu, error en rouge.
childrenstringLe message, déjà traduit.
Notice
Un encadré avec une icône et un titre, pour une information qui doit rester visible dans la page, comme un avertissement.
import { Notice } from 'hodi:sdk'
import { ExternalLink, Info } from 'lucide-react'
<Notice
title="Nouvelle version"
icon={Info}
action={{
label: 'Voir',
icon: ExternalLink,
href: links.plugins
}}
>
Hello world 0.2 dit bonjour en néerlandais.
</Notice>titlestringLe titre de l'encadré.
iconLucideIconL'icône de l'encadré, une icône Lucide.
childrenReactNodeLe texte sous le titre.
tone?'info' | 'warning' | 'error'La couleur de l'encadré : info en bleu par défaut, warning en jaune, error en rouge.
action?NoticeActionUn bouton au bout de l'encadré. Il a un label, une icon, et un onClick ou un href.
side?ReactNodeDes boutons ronds au bout de l'encadré, à la place de action.
href?stringFait de tout l'encadré un lien vers cette adresse, ouvert dans un nouvel onglet.
EmptyState
Ce qu'affiche une liste vide, ou une liste qui n'a pas pu se charger : une icône, un titre et une ligne de texte au plus.
Aucun bonjour
Les salutations du foyer arrivent ici.
import { EmptyState } from 'hodi:sdk'
import { Inbox } from 'lucide-react'
<EmptyState
icon={<Inbox size={28} />}
title="Aucun bonjour"
compact
>
Les salutations du foyer arrivent ici.
</EmptyState>iconReactNodeL'icône, affichée à 28 px dans un carré.
titlestringLe titre, qui dit ce qui manque, comme Aucun bonjour.
children?ReactNodeUne ligne de texte sous le titre, pas plus.
actions?ReactNodeDes boutons sous le texte, comme Réessayer.
tone?'default' | 'danger'danger met l'icône en rouge, quand la liste n'a pas pu se charger.
compact?booleanUne version plus petite, pour un état vide posé au-dessus d'un autre contenu.