import type { ButtonHTMLAttributes, ReactNode } from 'react'; import { cx } from '@/lib/cx'; // Primitives visuelles du design « Bénévoles Festival » : bordures franches, // ombres portées dures, libellés capitales. Aucun texte en dur ici — les // libellés sont passés par les écrans (via i18n). export function Panel({ children, className, shadow = 'md', }: { children: ReactNode; className?: string; shadow?: 'none' | 'md' | 'lg'; }) { return (
{children}
); } export function PanelHeader({ children, hatched = false, className, }: { children: ReactNode; hatched?: boolean; className?: string; }) { return (
{children}
); } type BtnVariant = 'solid' | 'ghost' | 'danger' | 'dark'; export function Btn({ variant = 'solid', className, type = 'button', ...props }: ButtonHTMLAttributes & { variant?: BtnVariant }) { return ( ); } type BadgeTone = 'success' | 'info' | 'warn' | 'danger' | 'neutral'; export function Badge({ tone, children }: { tone: BadgeTone; children: ReactNode }) { return ( {children} ); } export function Stepper({ value, onDecrement, onIncrement, suffix, }: { value: ReactNode; onDecrement: () => void; onIncrement: () => void; suffix?: string; }) { return ( {value} {suffix ? ` ${suffix}` : null} ); } export function StatCard({ value, label, tone = 'paper', }: { value: ReactNode; label: string; tone?: 'paper' | 'yellow' | 'green'; }) { return (
{value}
{label}
); } /** * Petit repère « ? » : au survol (ou au focus clavier/tactile), affiche * `text` dans une bulle. Sert à sortir les indications d'usage du flux de la * page plutôt que de les y afficher en permanence. */ export function HelpTip({ text, side = 'top', className, }: { text: string; side?: 'top' | 'bottom'; className?: string; }) { return ( {text} ); } export function FieldLabel({ children }: { children: ReactNode }) { return ( {children} ); } export function TextInput({ value, onChange, mono = false, className, }: { value: string; onChange: (value: string) => void; mono?: boolean; className?: string; }) { return ( onChange(e.target.value)} className={cx( 'w-full border-2 border-ink bg-cream p-[9px] text-[13px]', mono ? 'font-mono' : 'font-display font-bold', className, )} /> ); }