diff --git a/src/features/simulations/components/SpecialCharsKeyboard.tsx b/src/features/simulations/components/SpecialCharsKeyboard.tsx new file mode 100644 index 0000000..adf3aa0 --- /dev/null +++ b/src/features/simulations/components/SpecialCharsKeyboard.tsx @@ -0,0 +1,47 @@ +/** + * 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 ( +