/** * Clavier de caractères spéciaux français pour la zone de saisie. * * Affiche une rangée horizontale scrollable de 30 caractères accentués * (15 minuscules + 15 majuscules). Un clic insère le caractère à la * position du curseur via le callback `onInsert`. * * Règle H : purement présentationnel, la logique d'insertion est dans le parent. * Règle L : tokens Direction H exclusivement. * * `onMouseDown preventDefault` empêche le textarea de perdre le focus au clic, * ce qui permet de conserver la position du curseur lors de l'insertion. */ const SPECIAL_CHARS = [ 'à', 'â', 'é', 'è', 'ê', 'ë', 'î', 'ï', 'ô', 'ù', 'û', 'ü', 'ç', 'œ', 'æ', 'À', 'Â', 'É', 'È', 'Ê', 'Ë', 'Î', 'Ï', 'Ô', 'Ù', 'Û', 'Ü', 'Ç', 'Œ', 'Æ', ] as const interface Props { onInsert: (char: string) => void disabled?: boolean } export function SpecialCharsKeyboard({ onInsert, disabled = false }: Props) { return (