Communitygithub.com

Système de Revue et Refactor UI Chakra UI v3

Revoyez, convertissez et améliorez du code UI avec Chakra UI v3. Utilisez cette compétence lorsqu'un utilisateur souhaite revoir du code Chakra UI, convertir du HTML/CSS simple, Tailwind, CSS Modules ou styled-components vers Chakra UI, nettoyer des composants Chakra désordonnés, ou poser des questions comme « est-ce que c'est correct », « qu'est-ce qui ne va pas », « refactorise ceci », etc.

Qu'est-ce que Système de Revue et Refactor UI Chakra UI v3 ?

Cette compétence permet à un agent IA (comme Claude Code, Cursor, etc.) de passer en revue, convertir et améliorer du code d'interface utilisateur en utilisant Chakra UI v3. Elle couvre à la fois les demandes de revue pure (critique sans réécriture) et les demandes de refactorisation ou conversion (à partir de HTML/CSS simple, Tailwind CSS, CSS Modules, styled-components ou d'anciennes versions de Chakra UI). L'agent analyse le code selon plusieurs dimensions : accessibilité (labels ARIA, navigation clavier, hiérarchie des titres), réactivité (points de rupture, valeurs en pixels), correction de l'API Chakra v3 (noms de props, composants composés, tokens sémantiques), structure des composants (imbrication, primitives de layout) et maintenabilité (répétitions, types TypeScript). Le résultat peut être soit une critique structurée avec des correctifs ciblés, soit une version refactorisée complète avec imports, explications et suggestions d'amélioration. La compétence s'appuie sur un guide détaillé figurant dans SKILL.md et fonctionne avec n'importe quel framework React (Next.js App Router, Pages Router, Vite, etc.).

Compatible avec~Claude Code~Codex CLI~Cursor
npx skills add https://github.com/0xAlchemist-cs/personal-ui-system/tree/HEAD/.agents/skills/chakra-ui-refactor

Demander à votre IA préférée

Ouvre une nouvelle conversation avec cette compétence d'agent déjà préchargée.

Documentation

Revue et Refactor Chakra UI

Vous passez en revue et améliorez du code d'interface utilisateur avec Chakra UI v3. Selon les besoins du développeur, vous produisez une critique structurée, une version refactorisée du code, ou les deux. Lisez entièrement le code et le contexte du projet avant de produire une sortie.


Étape 1 — Orientez-vous et déterminez l'intention

Avant toute sortie, établissez :

  • Version de Chakra UI — vérifiez package.json ; utilisez v3 par défaut
  • Framework — Next.js App Router, Pages Router, Vite, React simple
  • Type de source — Chakra existant, HTML/CSS simple, Tailwind, CSS Modules, styled-components
  • Ce que demande l'utilisateur :
    • Revue uniquement — « vérifie ceci », « est-ce correct/idiomatique », « qu'est-ce qui ne va pas », « revois mon code » → produisez une critique avec des correctifs ciblés, pas de réécriture complète
    • Refactorisation / conversion — « refactorise ceci », « convertis depuis Tailwind », « nettoie ceci » → produisez une version refactorisée du code
    • Les deux — « revois et corrige » → critique d'abord, puis code refactorisé

Indiquez votre lecture en haut de la réponse (ex. « Revue en tant que code Chakra v3 existant. En supposant Next.js App Router. »).

Si le code n'est pas encore partagé, demandez-le. Ne passez pas en revue une description de code.


Étape 2 — Analysez le code

Parcourez le code selon ces dimensions, quel que soit le mode de sortie. Pour une revue, elles deviennent des constats. Pour un refactor, elles deviennent la liste de contrôle de ce qui doit être corrigé.

Accessibilité

  • Tous les éléments interactifs ont-ils des libellés accessibles ? (aria-label sur les boutons icônes, htmlFor/id sur les paires libellé+champ, alt sur les images)
  • La navigation au clavier est-elle possible ? (anneaux de focus non supprimés, éléments interactifs réellement focusables)
  • La hiérarchie des titres a-t-elle du sens ? (pas de niveaux sautés, pas de h1 utilisé comme raccourci de style)
  • Les champs de formulaire sont-ils enveloppés dans Field.Root avec Field.Label et Field.ErrorText ?
  • Le composant fonctionne-t-il sans que la couleur soit le seul signal ?

Réactivité (Responsive)

  • Les composants de mise en page spécifient-ils un comportement à plusieurs points de rupture ?
  • Y a-t-il des valeurs en pixels codées en dur là où des tokens responsifs fonctionneraient mieux ?
  • Cela casserait-il sur mobile ? (largeurs fixes, overflow: hidden sur les petits écrans)

Correction de l'API Chakra

  • Les noms de props v3 sont-ils utilisés ? (disabled pas isDisabled, colorPalette pas colorScheme, gap pas spacing, open pas isOpen)
  • Les composants composés sont-ils utilisés correctement ? (Field.Root/Field.Label, Dialog.Root/Dialog.Content, etc.)
  • "use client" est-il placé correctement dans Next.js App Router ?
  • Y a-t-il encore des motifs v2 ? (extendTheme, ColorModeScript, useColorModeValue, prop sx)

Utilisation des tokens et du style

  • Des couleurs codées en dur sont-elles utilisées là où des tokens sémantiques fonctionneraient ? (bg="#f9fafb" → bg="bg.subtle")
  • Des valeurs hexadécimales brutes ou des valeurs de palette sont-elles utilisées à la place des tokens sémantiques ? Celles-ci ne respecteront pas le mode sombre.
  • Y a-t-il des props style={{}} en ligne qui devraient être des props de style Chakra ?

Structure des composants

  • Y a-t-il des imbrications inutiles ? (Box > Box > Box quand un seul suffirait)
  • Un espacement manuel (mt={4} sur chaque enfant) est-il utilisé là où Stack gap={4} serait plus propre ?
  • Les bonnes primitives de mise en page sont-elles utilisées ? (Flex vs Stack vs Grid vs SimpleGrid)

Maintenabilité

  • Le même motif visuel se répète-t-il 3 fois ou plus ? (candidat pour un composant ou une « recipe »)
  • Y a-t-il des surcharges de style ponctuelles qui suggèrent une recipe ou une slot recipe ?
  • Les types de props / types TypeScript sont-ils présents et exacts ?

Étape 3a — Sortie de revue

Utilisez ceci lorsque l'utilisateur veut une critique, pas une réécriture.

Catégorisez les constats par impact :

Critique — bogues et échecs d'accessibilité qui cassent le comportement ou excluent des utilisateurs

  • aria-label manquant sur un bouton avec seulement une icône
  • Champ de formulaire sans association de libellé
  • Box interactive avec onClick mais sans accès clavier
  • Mauvais nom de prop v3 qui ne fait rien silencieusement (isDisabled ne désactive pas en v3)
  • "use client" manquant sur un composant qui utilise des hooks dans App Router

Améliorations — problèmes de correction et de qualité qui ne sont pas urgents

  • Couleurs codées en dur qui cassent le mode sombre
  • Points de rupture responsifs manquants
  • Imbrication inutile ou mauvaise primitive de mise en page
  • Motifs v2 qui fonctionnent encore mais devraient être mis à jour

Suggestions optionnelles — idées non bloquantes

  • Extraire un motif répété dans un composant
  • Remplacer un style ponctuel par une variante de recipe
  • Ajouter un type TypeScript manquant

Pour chaque problème critique et amélioration significative, montrez un correctif minimal :

**aria-label manquant sur le bouton de fermeture** (Critique)
L'IconButton pour fermer la boîte de dialogue n'a pas de libellé accessible.

// Avant
<IconButton icon={<CloseIcon />} onClick={onClose} />
// Après
<IconButton aria-label="Fermer la boîte de dialogue" icon={<CloseIcon />} onClick={onClose} />

Sautez les sections sans rien à signaler. Calibrez la longueur du code — un composant de 20 lignes nécessite une revue concise, pas exhaustive.


Étape 3b — Sortie de refactorisation / conversion

Utilisez ceci lorsque l'utilisateur souhaite du code réécrit.

Stratégie de conversion par source

Depuis HTML/CSS simple

HTMLÉquivalent Chakra
<div> conteneur de mise en pageBox, Flex, Stack, Grid
<section>, <article>Box as="section", Box as="article"
<nav>Box as="nav"
<ul> / <li>Box as="ul" / Box as="li", ou Stack
<button>Button ou IconButton
<a>Link
<img>Image (conservez alt)
<input>, <select>Input, NativeSelect dans Field.Root
CSSProp de style Chakra
display: flexFlex ou display="flex"
flex-direction: columnStack ou flexDir="column"
gap: 16pxgap={4} (1 unité = 4px)
padding: 16px 24pxpy={4} px={6}
border-radius: 8pxrounded="md"
color: #6b7280color="fg.muted"
background: #f9fafbbg="bg.subtle"

Depuis Tailwind CSS

TailwindChakra
flex, flex-col, flex-rowFlex, flexDir
gap-4gap={4}
p-4, px-6, py-2p={4}, px={6}, py={2}
text-sm, font-boldfontSize="sm", fontWeight="bold"
rounded-lg, shadow-mdrounded="lg", shadow="md"
w-full, max-w-lgw="full", maxW="lg"
hidden md:flexdisplay={{ base: "none", md: "flex" }}
grid grid-cols-3SimpleGrid columns={3}
text-gray-500, bg-gray-100color="fg.muted", bg="bg.subtle"
hover:bg-gray-100_hover={{ bg: "bg.subtle" }}

Remplacez les préfixes responsifs de Tailwind par la syntaxe d'objet de points de rupture de Chakra :

// Tailwind : text-sm md:base lg:text-lg
<Text fontSize={{ base: "sm", md: "md", lg: "lg" }} />

Depuis CSS Modules — convertissez ce qui peut l'être en props Chakra ; conservez className pour les styles qui ne peuvent pas être exprimés en props (animations, sélecteurs complexes) :

// Avant
<div className={styles.card}>...</div>
// Après — converti en props ; className conservé uniquement pour les styles non convertibles
<Box p={4} rounded="lg" shadow="sm" className={styles.fadeIn}>...</Box>

Une fois tous les noms de classe éliminés, supprimez complètement l'import.

Depuis styled-components / @emotion/styled — mappez à Box avec des props de style équivalentes, puis supprimez l'import et désinstallez si non utilisé ailleurs :

// Avant
const Card = styled.div`padding: 1rem; &:hover { background: #f3f4f6; }`
// Après
<Box p={4} _hover={{ bg: "bg.muted" }} />

Depuis Chakra UI existant (nettoyage)

  • Aplatissez l'imbrication Box > Box > Box ; remplacez mt/mb sur chaque enfant par Stack gap={N}
  • Remplacez sx par css (renommage v3) ; mettez à jour les sélecteurs &:hover à l'intérieur
  • Remplacez bg="gray.50" → bg="bg.subtle" et autres équivalents de tokens sémantiques
  • Mettez à jour les noms de props v2 : isDisabled→disabled, colorScheme→colorPalette, spacing→gap
  • Mettez à jour les composants composés : FormControl→Field.Root, Modal→Dialog, Select→NativeSelect

Préservez le comportement — non négociable

  • Conservez tous les gestionnaires d'événements, variables d'état et rendus conditionnels exactement tels quels
  • Conservez les attributs aria-* ; ajoutez ceux qui manquent clairement lorsque nécessaire
  • Conservez l'intention HTML sémantique (<nav> → Box as="nav", pas juste Box)
  • Conservez "use client" là où il existe ; ajoutez-le uniquement lorsque le composant en a véritablement besoin
  • N'ajoutez pas "use client" simplement parce qu'un composant utilise Chakra UI
  • Un composant partiellement converti qui fonctionne est meilleur qu'un composant entièrement converti qui ne fonctionne pas

asChild pour Link et Image de Next.js

import NextLink from "next/link"
<ChakraLink asChild><NextLink href="/about">À propos</NextLink></ChakraLink>

import NextImage from "next/image"
<ChakraImage asChild><NextImage src="/hero.png" alt="Héros" width={800} height={400} /></ChakraImage>

Format de sortie du refactor

1. Code refactorisé — complet, exécutable, avec les imports corrects

2. Ce qui a changé — liste concise axée sur les décisions non évidentes :

- Remplacé <div className="flex gap-4"> par <Flex gap={4}>
- Remplacé bg="#f9fafb" par bg="bg.subtle" pour la compatibilité du mode sombre
- Gestionnaire de soumission de formulaire et logique de validation conservés inchangés
- aria-label ajouté au bouton icône de fermeture (était manquant)

3. Suggestions (optionnelles) — améliorations significatives au-delà de ce refactor : extraire un composant réutilisable, adopter une recipe, migrer un motif v2.


Quand demander vs procéder

Procédez si le code et l'intention sont clairs. Demandez quand :

  • Le code n'est pas encore partagé
  • Le composant est très volumineux et le périmètre n'est pas clair
  • Il y a un contexte ou un état que vous ne pouvez pas voir et qui changerait la revue
  • Il y a un comportement ambigu qui pourrait être interprété de plusieurs façons

Indiquez les hypothèses en haut de la réponse lorsque vous procédez sans demander.

Individual skills in this repo

This repo contains 4 individual skills — each has its own dedicated page.

0xAlchemist-cs/personal-ui-system

Use when the user's task involves Ant Design (antd) — writing antd components, debugging antd issues, querying antd APIs/props/tokens/demos, migrating between antd versions, or analyzing antd usage in a project. Triggers on antd-related code, imports from 'antd', or explicit antd questions.

0xAlchemist-cs/personal-ui-system

Build responsive, accessible UI components and layouts using Chakra UI v3, install or configure Chakra UI in new and existing projects, and design scalable themes using tokens, semantic tokens, recipes, and slot recipes. Use this skill whenever a user asks to build, create, or generate any UI component, page, form, dashboard, navbar, card, landing section, pricing table, or layout using Chakra UI; wants to add Chakra UI to a project, set up ChakraProvider, run CLI snippets, configure color mode, or fix provider wrapping; or asks about theming — defining brand colors, design tokens, semantic tokens, dark mode values, component recipes, slot recipes, typegen, or ejecting the default theme. Trigger on any Chakra UI building, setup, or theming or charts request, however casually phrased — "add my brand colors", "make a reusable card style", "build a bar chart", "show me a line chart", "make me a login form", "build a sidebar", "add Chakra to my app".

0xAlchemist-cs/personal-ui-system

Migrate Chakra UI projects from v2 to v3, covering package changes, codemods, provider setup, color mode, prop renaming, compound components, theming, recipes, and Next.js updates. Use this skill whenever a user is upgrading Chakra UI versions, encountering breaking changes after an upgrade, converting old v2 patterns (ColorModeScript, useColorModeValue, styleConfig, extendTheme, isDisabled, colorScheme, @chakra-ui/icons, framer-motion dependency), fixing compound component patterns, or asking about differences between Chakra UI v2 and v3 — even if they don't say "migrate" or "upgrade" explicitly.

0xAlchemist-cs/personal-ui-system

Integrates Material UI with Next.js App and Pages routers using @mui/material-nextjs, Emotion cache providers, next/font, CSS layers with Tailwind/CSS Modules, Link component prop patterns, CSS theme variables SSR notes, and App Router useSearchParams + Suspense. Use when setting up or debugging MUI in a Next.js app.

Skills associés