La seule bibliothèque de raccourcis clavier qu'il vous faut (TanStack Hotkeys)

BBetter Stack
컴퓨터/소프트웨어AI/미래기술

Transcript

00:00:00TanStack vient de sortir un nouveau paquet dans sa quête pour améliorer l'écosystème JavaScript,
00:00:03et cette fois, ils s'attaquent aux raccourcis clavier. Si vous pensez que c'est un sujet
00:00:07simple que l'IA pourrait coder pour vous, détrompez-vous. TanStack Hotkeys
00:00:11gère tous les cas particuliers que l'IA oublie souvent, comme les dispositions de touches multiples,
00:00:16les différents systèmes d'exploitation, les conflits de raccourcis ou de contextes, et bien plus encore.
00:00:20Il propose même des séquences de touches et l'enregistrement de raccourcis, tout en étant type-safe et agnostique.
00:00:26Croyez-moi, si vous avez besoin de raccourcis, utilisez ce paquet ou demandez à votre agent IA de le faire.
00:00:30C'est du TanStack, donc l'expérience développeur sera excellente. Plongeons maintenant
00:00:35dans le vif du sujet pour voir ça en action.
00:00:41Je vais commencer directement par le code car c'est assez simple. Ici,
00:00:45je travaille sur une application React, j'utilise donc le paquet TanStack React Hotkeys.
00:00:49Ils proposent aussi une version JavaScript pur, et d'autres frameworks
00:00:52arriveront bientôt. C'est actuellement en version alpha, il peut donc y avoir quelques
00:00:56bugs, mais pour mes besoins, c'est déjà parfait. Commençons par
00:01:01le cas d'utilisation le plus basique : le hook "useHotkey". Comme vous le voyez,
00:01:05on l'importe du paquet et il suffit de définir notre raccourci ainsi que
00:01:09la fonction à exécuter lors de l'appui. Dans mon exemple, j'ai configuré
00:01:13l'ouverture d'une palette de commandes, un cas très classique.
00:01:17J'ai ajouté une notification en bas pour que vous puissiez voir mes pressions de touches
00:01:20et le résultat obtenu. Ce hook est incroyablement simple, il fait
00:01:24exactement ce qu'on lui demande. Mais la magie de TanStack réside souvent dans
00:01:28l'expérience développeur et la sécurité du typage, et c'est le cas ici.
00:01:32D'abord, les raccourcis : partout où ils sont utilisés dans ce paquet,
00:01:37ils sont typés, ce qui est assez fou. Il connaît toutes les touches possibles
00:01:41ainsi que leurs combinaisons. Je pourrais changer cela en "meta+s",
00:01:46ce qui correspond à "Cmd+S" sur macOS, pour créer un raccourci de sauvegarde.
00:01:50Il reconnaît la validité de la combinaison, et si je fais une faute de frappe, l'erreur de type
00:01:54me signalera que le raccourci est invalide. Autre point intéressant sur la définition :
00:01:58actuellement, j'ai mis "meta+k", soit "Cmd+K" sur mon Mac,
00:02:02et cela fonctionne très bien. Cependant, ce raccourci ne fonctionnerait pas
00:02:06sur Windows ou d'autres plateformes puisque la touche "meta" n'y existe pas.
00:02:11À la place, nous pouvons utiliser la touche "modifier".
00:02:15Cela signifie qu'automatiquement sur macOS, ce sera "Cmd", alors que sur
00:02:19les autres plateformes, ce sera "Ctrl". Vous obtenez ainsi un raccourci multiplateforme.
00:02:24Enfin, toujours concernant la définition des touches dans ce paquet,
00:02:27si vous n'aimez pas le format chaîne de caractères, vous pouvez utiliser un objet.
00:02:31C'est exactement la même commande que précédemment ("Cmd+K" ou "Ctrl+K").
00:02:35Il suffit de préciser la touche principale et de mettre "modifier" à "true",
00:02:38ou d'autres touches modificatrices si besoin. Après la définition des touches,
00:02:42le deuxième argument du hook est la fonction qui s'exécute lors de l'appui.
00:02:46C'est très simple, vous y mettez ce que vous voulez.
00:02:50Sachez que vous avez aussi accès à l'événement clavier brut si nécessaire,
00:02:54ainsi qu'à un contexte. Dans ce cas, le contexte vous donne simplement
00:02:58le raccourci sous forme de chaîne, ou vous pouvez récupérer
00:03:02la définition sous forme d'objet. Pour finir avec "useHotkey",
00:03:05il y a plein d'autres fonctionnalités, notamment le troisième argument
00:03:09qui permet de passer des options pour contrôler le comportement du raccourci.
00:03:13La plupart sont explicites et je les ai laissées par défaut. Il y a "enabled"
00:03:17pour l'activer par programmation, ou "eventType" pour choisir
00:03:21entre "keydown" ou "keyup". L'option "requireReset" signifie que
00:03:25si elle est à "false", maintenir "Cmd+K" déclenchera
00:03:29le raccourci en boucle. Si je la passe à "true",
00:03:33il faut relâcher les touches avant de pouvoir le déclencher à nouveau.
00:03:37On peut voir que même en restant appuyé, ça ne s'est déclenché qu'une fois. Ensuite, "ignoreInputs" :
00:03:41si je suis dans un champ de saisie et que je fais "Cmd+K", pour l'instant,
00:03:45le raccourci est ignoré. On peut changer cela en le passant à "false"
00:03:49si l'on souhaite que les raccourcis fonctionnent même dans les champs de texte.
00:03:53Enfin, la dernière option que je vais aborder est "target".
00:03:57Elle permet de créer des raccourcis contextualisés. Par défaut, elle cible tout le document,
00:04:00donc "Cmd+K" fonctionne n'importe où sur la page pour ouvrir la palette.
00:04:04Mais je peux cibler un élément précis ou une référence React (ref).
00:04:09Si je choisis la référence de mon badge par exemple, faire "Cmd+K" sur la page
00:04:13ne fonctionnera plus. Par contre, si je mets le focus sur l'élément du badge,
00:04:17le raccourci s'active. On a donc un raccourci à portée limitée.
00:04:21Vous comprenez pourquoi j'aime ce paquet : le souci du détail est incroyable,
00:04:25l'expérience est top et le typage est complet. Et je n'ai montré
00:04:30qu'un seul hook ! Voyons les autres. Voici "useHotkeySequences"
00:04:34qui permet des séquences de touches, idéal pour une navigation de type Vim.
00:04:38Le fonctionnement est similaire : on définit la séquence de touches,
00:04:43la fonction à exécuter une fois la séquence saisie,
00:04:47et quelques options. Notez que "timeout" est le délai maximal
00:04:51entre chaque touche pour qu'elle soit comptabilisée dans la séquence.
00:04:54Ici, j'ai configuré "gg" pour remonter en haut de la liste.
00:04:59Si je tape "gg", ça fonctionne. J'en ai aussi fait un
00:05:04avec "sub" pour aller en bas. Coïncidence : ça épèle "subscribe" (abonnez-vous),
00:05:09ce que vous devriez d'ailleurs faire. Passons à des hooks encore plus simples.
00:05:12D'abord "useKeyHold" : indiquez la touche à surveiller,
00:05:16et vous obtenez un booléen indiquant si elle est pressée ou non.
00:05:20J'en surveille plusieurs ici. Si je maintiens "Shift" et "Alt",
00:05:24l'état sur la page change en fonction de ce booléen.
00:05:28Vous remarquerez aussi en bas la liste des touches actuellement pressées.
00:05:32Cela vient du deuxième hook, "useHeldKeys", qui renvoie simplement
00:05:36un tableau des touches enfoncées. Si je tape "sub", elles apparaissent
00:05:40dans le tableau. Le dernier hook avant de passer aux fonctions utilitaires
00:05:43est "useHotkeyRecorder". Il permet de créer des interfaces
00:05:47de personnalisation de raccourcis clavier. C'est une aide précieuse.
00:05:52C'est très simple à utiliser : on récupère des valeurs comme
00:05:56l'état de l'enregistrement, le raccourci enregistré, et les fonctions pour démarrer
00:06:00ou annuler l'enregistrement. Dans les options du hook,
00:06:05on peut définir ce qu'il se passe quand un raccourci est validé.
00:06:09Ici, je mets simplement à jour le raccourci de la palette avec celui choisi par l'utilisateur.
00:06:14En reliant cela à un bouton, on obtient une interface comme celle-ci. Actuellement, "Cmd+K"
00:06:17ouvre ma palette. Si je clique sur enregistrer, le hook écoute
00:06:21mon clavier. Si je fais "Cmd+Backspace", c'est mon nouveau raccourci
00:06:26pour ouvrir la palette. En situation réelle, vous le sauvegarderiez en base de données
00:06:29pour que ce soit persistant. C'est un helper super pratique et,
00:06:33comme les autres, il est facile à utiliser avec de bons réglages par défaut.
00:06:37Par exemple, si l'utilisateur enregistre sur Mac avec la touche "Cmd",
00:06:42elle sera automatiquement convertie en "modifier" pour devenir "Ctrl" sur Windows ou Linux.
00:06:46En plus des hooks, il y a d'autres choses à voir,
00:06:49notamment des fonctions pour aider au formatage.
00:06:53La fonction "formatForDisplay", importée de TanStack Hotkeys,
00:06:57permet de transformer un raccourci comme "modifier+backspace"
00:07:02pour l'adapter à la plateforme et utiliser des icônes. Ici, ça affiche "Cmd+⌫".
00:07:06Sur Windows, ce serait "Ctrl+Backspace". Il y a aussi "formatWithLabels"
00:07:10qui fait la même chose, mais en convertissant la touche
00:07:14en texte plutôt qu'en icône. On obtient donc "Command Backspace",
00:07:18ou "Control Backspace" sur Windows. Enfin, une des raisons pour lesquelles
00:07:22j'adore TanStack, ce sont les DevTools, et ce paquet n'y échappe pas.
00:07:27En ouvrant les DevTools, on voit tous les raccourcis enregistrés sur la page
00:07:30ainsi que les séquences. On peut voir leur état et combien de fois ils ont été déclenchés.
00:07:33On voit s'ils s'activent sur "keydown" ou "keyup", s'ils écoutent
00:07:37le document ou un élément spécifique. On peut même voir plus de détails,
00:07:41comme les options configurées, et même forcer un déclenchement manuel.
00:07:45En haut, on voit aussi les touches actuellement pressées.
00:07:49Si vous ne connaissez pas le nom d'une touche lors de la configuration,
00:07:52appuyez dessus ici et vous verrez sa valeur exacte. Je me répète peut-être,
00:07:56mais TanStack comprend vraiment l'expérience développeur,
00:08:00et je suis ravi d'avoir ça dans un monde de code par IA. Je vous recommande
00:08:05vivement de tester ce paquet si vous en avez besoin. Dites-moi ce que vous en pensez
00:08:08en commentaire, abonnez-vous, et à la prochaine !

Key Takeaway

TanStack Hotkeys simplifie radicalement l'implémentation des raccourcis clavier en offrant une solution robuste, typée et multiplateforme qui surpasse les capacités de génération de code par l'IA.

Highlights

TanStack Hotkeys est une bibliothèque agnostique et "type-safe" qui gère les complexités des raccourcis clavier.

Le paquet supporte nativement les configurations multiplateformes grâce à la touche virtuelle "modifier".

Une gestion avancée des séquences de touches permet de créer des navigations complexes de type Vim.

L'outil inclut un enregistreur de raccourcis (Hotkey Recorder) pour permettre aux utilisateurs de personnaliser leur interface.

Les DevTools intégrés offrent une visibilité complète sur les raccourcis actifs et l'état des touches en temps réel.

Timeline

Introduction à TanStack Hotkeys

L'auteur présente le nouveau paquet de l'écosystème TanStack dédié à la gestion des raccourcis clavier. Contrairement aux solutions simples générées par l'IA, cette bibliothèque traite les cas particuliers complexes comme les dispositions de touches multiples et les conflits de contextes. Elle se distingue par son approche agnostique, sa sécurité de typage et sa capacité à gérer des séquences de touches. L'objectif est d'offrir une expérience développeur supérieure pour des fonctionnalités souvent sous-estimées. Ce segment souligne l'importance d'utiliser des outils robustes pour garantir une compatibilité entre les différents systèmes d'exploitation.

Le Hook useHotkey et la Sécurité du Typage

Cette section explore l'utilisation concrète du hook "useHotkey" au sein d'une application React. L'auteur démontre comment la bibliothèque utilise TypeScript pour valider les combinaisons de touches et éviter les erreurs de frappe. Un point majeur est l'utilisation de la touche "modifier" qui adapte automatiquement le raccourci entre macOS (Cmd) et Windows/Linux (Ctrl). On y voit aussi la flexibilité de définition, permettant d'utiliser soit des chaînes de caractères, soit des objets pour plus de précision. Cette approche garantit que l'application reste fonctionnelle et cohérente peu importe la plateforme de l'utilisateur final.

Options Avancées et Contextualisation

Le haut niveau de contrôle de TanStack est illustré ici à travers les diverses options de configuration du hook. L'auteur explique comment des paramètres comme "requireReset" permettent d'éviter le déclenchement en boucle lors d'un appui prolongé. L'option "ignoreInputs" est également cruciale pour décider si un raccourci doit rester actif pendant la saisie de texte dans un formulaire. Enfin, la notion de "target" permet de limiter la portée d'un raccourci à un élément spécifique via une référence React. Cette granularité permet de créer des interfaces utilisateur riches où les raccourcis ne s'activent que dans des contextes précis.

Séquences de Touches et États du Clavier

L'analyse se poursuit avec le hook "useHotkeySequences", idéal pour implémenter une navigation complexe inspirée de l'éditeur Vim. L'auteur montre comment définir une suite de touches, comme "gg", avec un délai maximal (timeout) entre chaque pression. En complément, les hooks "useKeyHold" et "useHeldKeys" permettent de surveiller en temps réel si une touche est enfoncée ou d'obtenir la liste complète des touches actives. Ces outils sont essentiels pour créer des interactions dynamiques basées sur l'état instantané du clavier. L'exemple humoristique de la séquence "sub" pour encourager l'abonnement illustre parfaitement la simplicité de mise en œuvre.

Personnalisation et Utilitaires de Formatage

Ce segment présente "useHotkeyRecorder", un outil puissant pour créer des interfaces permettant aux utilisateurs d'enregistrer leurs propres raccourcis. Ce hook gère automatiquement la conversion des touches pressées en format standardisé, facilitant ainsi la persistance en base de données. L'auteur introduit également des fonctions utilitaires comme "formatForDisplay" et "formatWithLabels" pour l'affichage côté client. Ces fonctions adaptent visuellement les noms des touches selon la plateforme, utilisant des icônes comme le symbole de retour arrière ou des libellés textuels. Cela permet d'offrir une interface professionnelle et accessible sans effort de développement supplémentaire significatif.

DevTools et Conclusion

La vidéo se termine par une démonstration des DevTools spécifiques à TanStack Hotkeys, un atout majeur pour le débogage. Ces outils permettent de visualiser tous les raccourcis enregistrés sur la page, de voir leur fréquence de déclenchement et de tester manuellement leur exécution. Ils affichent également les touches pressées en temps réel, aidant le développeur à identifier les codes de touches exacts. L'auteur réitère son enthousiasme pour la qualité de l'expérience développeur offerte par TanStack. En conclusion, il recommande vivement l'adoption de ce paquet pour tout projet nécessitant une gestion sérieuse des interactions clavier.

Community Posts

View all posts