10 10
11Pour comprendre le fonctionnement du dessin, commencez par [Dessiner dans l'interface](/docs/fr/plugins/mods/interface). Pour les principales props et les applications qui dessinent chaque élément, consultez la [référence des éléments](/docs/fr/plugins/mods/reference#elements). Les [déclarations de types](/docs/fr/plugins/mods/create#get-the-types-for-your-build) répertorient toutes les props.11Pour comprendre le fonctionnement du dessin, commencez par [Dessiner dans l'interface](/docs/fr/plugins/mods/interface). Pour les principales props et les applications qui dessinent chaque élément, consultez la [référence des éléments](/docs/fr/plugins/mods/reference#elements). Les [déclarations de types](/docs/fr/plugins/mods/create#get-the-types-for-your-build) répertorient toutes les props.
12 12
13<h2 id="try-a-sample">13## Essayer un exemple
14 Essayer un exemple
15</h2>
16 14
17Les exemples de cette page sont des extraits, et non des mods complets. Chacun correspond au code d'un élément et de tout ce qui y est imbriqué.15Les exemples de cette page sont des extraits, et non des mods complets. Chacun correspond au code d'un élément et de tout ce qui y est imbriqué.
18 16
19Pour voir un exemple dans votre propre terminal, créez le petit mod décrit dans ces étapes et collez-y l'exemple. Le mod ajoute une commande `/gallery` qui ouvre un panneau et y dessine l'exemple. Un [panneau](/docs/fr/plugins/mods/interface#pick-where-to-draw) est une barre latérale à côté de la transcription dans un terminal large en plein écran, ou sinon une zone encadrée au-dessus du prompt.17Pour voir un exemple dans votre propre terminal, créez le petit mod décrit dans ces étapes et collez-y l'exemple. Le mod ajoute une commande `/gallery` qui ouvre un panneau et y dessine l'exemple. Un [panneau](/docs/fr/plugins/mods/interface#pick-where-to-draw) est une barre latérale à côté de la transcription dans un terminal large en plein écran, ou sinon une zone encadrée au-dessus du prompt.
20 18
21<Steps>19**1. Créer le mod**
22 <Step title="Créer le mod">
23 Créez un répertoire nommé `gallery` contenant les répertoires `.claude-plugin` et `hooks`. [Créer un mod](/docs/fr/plugins/mods/create#write-a-mod-yourself) explique les fichiers.
24 20
25 Enregistrez le manifeste sous `gallery/.claude-plugin/plugin.json` :21Créez un répertoire nommé `gallery` contenant les répertoires `.claude-plugin` et `hooks`. [Créer un mod](/docs/fr/plugins/mods/create#write-a-mod-yourself) explique les fichiers.
26 22
27 ```json gallery/.claude-plugin/plugin.json theme={null}23Enregistrez le manifeste sous `gallery/.claude-plugin/plugin.json` :
28 {24
25```json gallery/.claude-plugin/plugin.json theme={null}
26{
29 "name": "gallery",27 "name": "gallery",
30 "version": "0.1.0",28 "version": "0.1.0",
31 "description": "Opens a pane that draws one sample",29 "description": "Opens a pane that draws one sample",
32 "author": { "name": "Your Name" }30 "author": { "name": "Your Name" }
33 }31}
34 ```32```
35 33
36 Indiquez votre point d'entrée dans `gallery/hooks/hooks.json` :34Indiquez votre point d'entrée dans `gallery/hooks/hooks.json` :
37 35
38 ```json gallery/hooks/hooks.json theme={null}36```json gallery/hooks/hooks.json theme={null}
39 {37{
40 "modules": ["./register.js"]38 "modules": ["./register.js"]
41 }39}
42 ```40```
43 41
44 Enregistrez le code sous `gallery/hooks/register.js`. Il ajoute une commande `/gallery` qui ouvre un panneau, et dessine `Plain text` dans ce panneau :42Enregistrez le code sous `gallery/hooks/register.js`. Il ajoute une commande `/gallery` qui ouvre un panneau, et dessine `Plain text` dans ce panneau :
45 43
46 ```javascript gallery/hooks/register.js theme={null}44```javascript gallery/hooks/register.js theme={null}
47 // Stands in for your own callback in the samples that take one45// Stands in for your own callback in the samples that take one
48 const noop = () => {}46const noop = () => {}
49 // The Select sample keeps its choice here47// The Select sample keeps its choice here
50 let picked = 'md'48let picked = 'md'
51 49
52 // The Raster sample packs its cells with this function50// The Raster sample packs its cells with this function
53 const DEFAULT_COLOR = 0x0100000051const DEFAULT_COLOR = 0x01000000
54 function cellsOf(rows) {52function cellsOf(rows) {
55 const numbers = rows.flat().flatMap(([char, color]) => [char.codePointAt(0), color, DEFAULT_COLOR])53 const numbers = rows.flat().flatMap(([char, color]) => [char.codePointAt(0), color, DEFAULT_COLOR])
56 return new Uint8Array(Uint32Array.from(numbers).buffer).toBase64()54 return new Uint8Array(Uint32Array.from(numbers).buffer).toBase64()
57 }55}
58 56
59 export function register(on) {57export function register(on) {
60 on('session.start', async ($, e, next) => {58 on('session.start', async ($, e, next) => {
61 await $.command.register({ name: 'gallery', description: 'Open the sample pane' })59 await $.command.register({ name: 'gallery', description: 'Open the sample pane' })
62 return next(e)60 return next(e)
73 // Replace the element after return with a sample71 // Replace the element after return with a sample
74 return Text({ children: ['Plain text'] })72 return Text({ children: ['Plain text'] })
75 })73 })
76 }74}
77 ```75```
78 </Step>76
77**2. Exécuter le mod**
79 78
80 <Step title="Exécuter le mod">79Dans votre shell, démarrez Claude Code depuis le répertoire qui contient `gallery` :
81 Dans votre shell, démarrez Claude Code depuis le répertoire qui contient `gallery` :
82 80
83 ```bash theme={null}81```bash theme={null}
84 claude --plugin-dir ./gallery82claude --plugin-dir ./gallery
85 ```83```
86 84
87 Dans le prompt de Claude Code, exécutez `/gallery`. Un panneau s'ouvre et affiche `Plain text`.85Dans le prompt de Claude Code, exécutez `/gallery`. Un panneau s'ouvre et affiche `Plain text`.
88 </Step>
89 86
90 <Step title="Remplacer par un exemple">87**3. Remplacer par un exemple**
91 Copiez un exemple de cette page. Dans `register.js`, collez-le à la place de `Text({ children: ['Plain text'] })`, de sorte qu'il suive `return`, puis enregistrez le fichier. Claude Code recharge le module à chaque enregistrement : exécutez donc à nouveau `/gallery` pour voir le nouvel exemple.
92 </Step>
93</Steps>
94 88
95<h2 id="pick-an-element">89Copiez un exemple de cette page. Dans `register.js`, collez-le à la place de `Text({ children: ['Plain text'] })`, de sorte qu'il suive `return`, puis enregistrez le fichier. Claude Code recharge le module à chaque enregistrement : exécutez donc à nouveau `/gallery` pour voir le nouvel exemple.
96 Choisir un élément90
97</h2>91## Choisir un élément
98 92
99Les exemples sont regroupés selon ce que vous souhaitez afficher à l'écran :93Les exemples sont regroupés selon ce que vous souhaitez afficher à l'écran :
100 94
104* **[Recueillir une saisie](#take-input)** : `Button`, `Input` et `Select`98* **[Recueillir une saisie](#take-input)** : `Button`, `Input` et `Select`
105* **[Dessiner des images](#draw-pictures)** : `Raster`, `Svg`, `Image` et `Client`99* **[Dessiner des images](#draw-pictures)** : `Raster`, `Svg`, `Image` et `Client`
106 100
107<h2 id="show-text">101## Afficher du texte
108 Afficher du texte
109</h2>
110 102
111Trois éléments affichent des mots à l'écran : `Text` pour votre propre mise en forme, `Markdown` pour un contenu déjà formaté, et `Link` pour une URL.103Trois éléments affichent des mots à l'écran : `Text` pour votre propre mise en forme, `Markdown` pour un contenu déjà formaté, et `Link` pour une URL.
112 104
113<h3 id="text">105### `Text`
114 `Text`
115</h3>
116 106
117`Text` dessine une chaîne avec les styles que vous lui donnez. Cet exemple affiche du texte brut et huit styles, un par ligne :107`Text` dessine une chaîne avec les styles que vous lui donnez. Cet exemple affiche du texte brut et huit styles, un par ligne :
118 108
133})123})
134```124```
135 125
136<img src="https://mintcdn.com/claude-code/EXkwf0kKMewZsyod/images/mods-el-text-light.png?fit=max&auto=format&n=EXkwf0kKMewZsyod&q=85&s=90724ce3953d9347b61b6a9266fda451" className="dark:hidden" alt="Un panneau avec neuf lignes de texte, chacune nommée d'après son style : plain, bold, italic, underline, strikethrough, dimColor en gris, inverse, color red et backgroundColor blue." width="1872" height="490" data-path="images/mods-el-text-light.png" />126
137
138<img src="https://mintcdn.com/claude-code/EXkwf0kKMewZsyod/images/mods-el-text-dark.png?fit=max&auto=format&n=EXkwf0kKMewZsyod&q=85&s=790dd3465e06db0842639d0d8fcbbc96" className="hidden dark:block" alt="Un panneau avec neuf lignes de texte, chacune nommée d'après son style : plain, bold, italic, underline, strikethrough, dimColor en gris, inverse, color red et backgroundColor blue." width="1872" height="490" data-path="images/mods-el-text-dark.png" />
139 127
140`dimColor` dessine le texte en gris. `backgroundColor` ne remplit que la largeur du texte.128`dimColor` dessine le texte en gris. `backgroundColor` ne remplit que la largeur du texte.
141 129
142<h3 id="markdown">130### `Markdown`
143 `Markdown`
144</h3>
145 131
146`Markdown` met en forme le texte de la même manière que les réponses de Claude. Transmettez le contenu dans `text`, et non dans `children` :132`Markdown` met en forme le texte de la même manière que les réponses de Claude. Transmettez le contenu dans `text`, et non dans `children` :
147 133
151})137})
152```138```
153 139
154<img src="https://mintcdn.com/claude-code/EXkwf0kKMewZsyod/images/mods-el-markdown-light.png?fit=max&auto=format&n=EXkwf0kKMewZsyod&q=85&s=e40eacc4e3fbe06eb003f4463f552ec1" className="dark:hidden" alt="Un panneau avec un titre en gras, Release notes, puis une phrase contenant un mot en gras et un mot de code en couleur, une liste de deux éléments et une citation en italique avec une barre à sa gauche." width="1872" height="452" data-path="images/mods-el-markdown-light.png" />140
155
156<img src="https://mintcdn.com/claude-code/EXkwf0kKMewZsyod/images/mods-el-markdown-dark.png?fit=max&auto=format&n=EXkwf0kKMewZsyod&q=85&s=2cc342ed0c58e752c425fff3c95a33a6" className="hidden dark:block" alt="Un panneau avec un titre en gras, Release notes, puis une phrase contenant un mot en gras et un mot de code en couleur, une liste de deux éléments et une citation en italique avec une barre à sa gauche." width="1872" height="452" data-path="images/mods-el-markdown-dark.png" />
157 141
158Un titre s'affiche en gras sans ses marques `#`. Le code en ligne s'affiche en couleur sans ses backticks. Une citation s'affiche en italique avec une barre à sa gauche.142Un titre s'affiche en gras sans ses marques `#`. Le code en ligne s'affiche en couleur sans ses backticks. Une citation s'affiche en italique avec une barre à sa gauche.
159 143
160<h3 id="link">144### `Link`
161 `Link`
162</h3>
163 145
164`Link` dessine un libellé suivi de son URL :146`Link` dessine un libellé suivi de son URL :
165 147
167Link({ href: 'https://code.claude.com/docs', label: 'Claude Code docs' })149Link({ href: 'https://code.claude.com/docs', label: 'Claude Code docs' })
168```150```
169 151
170<img src="https://mintcdn.com/claude-code/EXkwf0kKMewZsyod/images/mods-el-link-light.png?fit=max&auto=format&n=EXkwf0kKMewZsyod&q=85&s=8217bd2dfb561a8ba57023c6d89ea977" className="dark:hidden" alt="Un panneau avec une seule ligne : le libellé Claude Code docs, puis l'URL en gris." width="1872" height="186" data-path="images/mods-el-link-light.png" />152
171
172<img src="https://mintcdn.com/claude-code/EXkwf0kKMewZsyod/images/mods-el-link-dark.png?fit=max&auto=format&n=EXkwf0kKMewZsyod&q=85&s=cd32f222a7d3530b070f58f5f189a1f8" className="hidden dark:block" alt="Un panneau avec une seule ligne : le libellé Claude Code docs, puis l'URL en gris." width="1872" height="186" data-path="images/mods-el-link-dark.png" />
173 153
174Le terminal dessine l'URL sous forme de texte après le libellé. La possibilité de l'ouvrir d'un clic dépend du terminal de l'utilisateur.154Le terminal dessine l'URL sous forme de texte après le libellé. La possibilité de l'ouvrir d'un clic dépend du terminal de l'utilisateur.
175 155
176<h2 id="show-code-and-changes">156## Afficher du code et des modifications
177 Afficher du code et des modifications
178</h2>
179 157
180`Code` dessine du texte source avec les couleurs syntaxiques propres à Claude Code, ou un diff. Dans l'extension VS Code, `Code` affiche son `source` en texte brut, sans les couleurs, les numéros de ligne ni l'ombrage de diff visibles sur ces captures d'écran.158`Code` dessine du texte source avec les couleurs syntaxiques propres à Claude Code, ou un diff. Dans l'extension VS Code, `Code` affiche son `source` en texte brut, sans les couleurs, les numéros de ligne ni l'ombrage de diff visibles sur ces captures d'écran.
181 159
182<h3 id="code">160### `Code`
183 `Code`
184</h3>
185 161
186Indiquez le `language`, ou transmettez un `path` à partir duquel Claude Code le déduira. Avec `startLine`, les lignes sont numérotées à partir de ce nombre :162Indiquez le `language`, ou transmettez un `path` à partir duquel Claude Code le déduira. Avec `startLine`, les lignes sont numérotées à partir de ce nombre :
187 163
193})169})
194```170```
195 171
196<img src="https://mintcdn.com/claude-code/EXkwf0kKMewZsyod/images/mods-el-code-light.png?fit=max&auto=format&n=EXkwf0kKMewZsyod&q=85&s=4e13f5d506d3fdcc59d6d9524f48d2a9" className="dark:hidden" alt="Un panneau avec deux lignes numérotées de JavaScript en couleurs syntaxiques." width="1872" height="224" data-path="images/mods-el-code-light.png" />172
197
198<img src="https://mintcdn.com/claude-code/EXkwf0kKMewZsyod/images/mods-el-code-dark.png?fit=max&auto=format&n=EXkwf0kKMewZsyod&q=85&s=59f797371dd91b16b874a382b784b668" className="hidden dark:block" alt="Un panneau avec deux lignes numérotées de JavaScript en couleurs syntaxiques." width="1872" height="224" data-path="images/mods-el-code-dark.png" />
199 173
200Les couleurs proviennent du thème de l'utilisateur.174Les couleurs proviennent du thème de l'utilisateur.
201 175
202<h3 id="code-as-a-diff">176### `Code` sous forme de diff
203 `Code` sous forme de diff
204</h3>
205 177
206Avec `format: 'diff'`, `source` contient un ou plusieurs blocs de diff unifié :178Avec `format: 'diff'`, `source` contient un ou plusieurs blocs de diff unifié :
207 179
212})184})
213```185```
214 186
215<img src="https://mintcdn.com/claude-code/EXkwf0kKMewZsyod/images/mods-el-diff-light.png?fit=max&auto=format&n=EXkwf0kKMewZsyod&q=85&s=4f12c9f7229ceccd9b4f47479a7235dd" className="dark:hidden" alt="Un panneau avec un diff de quatre lignes. La ligne supprimée est ombrée en rouge et la ligne ajoutée en vert, chacune avec son numéro de ligne. Dans la ligne ajoutée, les mots that runs code ont une teinte plus prononcée." width="1872" height="300" data-path="images/mods-el-diff-light.png" />187
216
217<img src="https://mintcdn.com/claude-code/EXkwf0kKMewZsyod/images/mods-el-diff-dark.png?fit=max&auto=format&n=EXkwf0kKMewZsyod&q=85&s=9db96f34381bac8bebc32d41859b8808" className="hidden dark:block" alt="Un panneau avec un diff de quatre lignes. La ligne supprimée est ombrée en rouge et la ligne ajoutée en vert, chacune avec son numéro de ligne. Dans la ligne ajoutée, les mots that runs code ont une teinte plus prononcée." width="1872" height="300" data-path="images/mods-el-diff-dark.png" />
218 188
219Claude Code dessine des numéros de ligne à la place de la ligne `@@`. Lorsqu'une ligne supprimée et une ligne ajoutée se ressemblent, les mots modifiés reçoivent une teinte plus prononcée.189Claude Code dessine des numéros de ligne à la place de la ligne `@@`. Lorsqu'une ligne supprimée et une ligne ajoutée se ressemblent, les mots modifiés reçoivent une teinte plus prononcée.
220 190
221<h2 id="arrange-elements">191## Disposer des éléments
222 Disposer des éléments
223</h2>
224 192
225<h3 id="box">193### `Box`
226 `Box`
227</h3>
228 194
229`Box` dispose son contenu en ligne ou en colonne, et peut dessiner une bordure. Cet exemple place une ligne de mots au-dessus d'une boîte avec bordure :195`Box` dispose son contenu en ligne ou en colonne, et peut dessiner une bordure. Cet exemple place une ligne de mots au-dessus d'une boîte avec bordure :
230 196
247})213})
248```214```
249 215
250<img src="https://mintcdn.com/claude-code/EXkwf0kKMewZsyod/images/mods-el-box-light.png?fit=max&auto=format&n=EXkwf0kKMewZsyod&q=85&s=cb9263bb02f5c8afb6e5b8450e0cdadc" className="dark:hidden" alt="Un panneau avec trois mots sur une ligne, espacés de quatre colonnes, puis une ligne vide, puis une bordure arrondie autour d'une ligne de texte. La bordure s'étend sur toute la largeur du panneau." width="1872" height="338" data-path="images/mods-el-box-light.png" />216
251
252<img src="https://mintcdn.com/claude-code/EXkwf0kKMewZsyod/images/mods-el-box-dark.png?fit=max&auto=format&n=EXkwf0kKMewZsyod&q=85&s=dae83407af4d667a58717f68f13848e2" className="hidden dark:block" alt="Un panneau avec trois mots sur une ligne, espacés de quatre colonnes, puis une ligne vide, puis une bordure arrondie autour d'une ligne de texte. La bordure s'étend sur toute la largeur du panneau." width="1872" height="338" data-path="images/mods-el-box-dark.png" />
253 217
254La bordure s'étend sur toute la largeur du panneau.218La bordure s'étend sur toute la largeur du panneau.
255 219
256<h2 id="take-input">220## Recueillir une saisie
257 Recueillir une saisie
258</h2>
259 221
260`Button`, `Input` et `Select` sont des contrôles : l'utilisateur passe de l'un à l'autre avec Tab et utilise celui qui a le focus. [Focus clavier et raccourcis](/docs/fr/plugins/mods/interface#know-which-keys-your-mod-can-receive) décrit les touches qui leur parviennent.222`Button`, `Input` et `Select` sont des contrôles : l'utilisateur passe de l'un à l'autre avec Tab et utilise celui qui a le focus. [Focus clavier et raccourcis](/docs/fr/plugins/mods/interface#know-which-keys-your-mod-can-receive) décrit les touches qui leur parviennent.
261 223
262Ouvrez un panneau avec `focus: true` pour demander le focus clavier pour celui-ci. Les lettres saisies parviennent à un `Input` une fois qu'il a le focus. Pour choisir le champ qui a le focus à l'ouverture du panneau, consultez [Définir un raccourci et le premier focus](/docs/fr/plugins/mods/interface#set-a-hotkey-and-the-first-focus).224Ouvrez un panneau avec `focus: true` pour demander le focus clavier pour celui-ci. Les lettres saisies parviennent à un `Input` une fois qu'il a le focus. Pour choisir le champ qui a le focus à l'ouverture du panneau, consultez [Définir un raccourci et le premier focus](/docs/fr/plugins/mods/interface#set-a-hotkey-and-the-first-focus).
263 225
264<h3 id="button">226### `Button`
265 `Button`
266</h3>
267 227
268Un bouton exécute `onPress`. Cet exemple montre la forme par défaut, un bouton `plain` avec un raccourci, et un bouton atténué :228Un bouton exécute `onPress`. Cet exemple montre la forme par défaut, un bouton `plain` avec un raccourci, et un bouton atténué :
269 229
278})238})
279```239```
280 240
281<img src="https://mintcdn.com/claude-code/EXkwf0kKMewZsyod/images/mods-el-button-light.png?fit=max&auto=format&n=EXkwf0kKMewZsyod&q=85&s=8c638c15e12d9736f327dfcaa797b512" className="dark:hidden" alt="Un panneau avec trois boutons, un par ligne : Save entre crochets, n: Next sans crochets avec le n en couleur, et Skip entre crochets en gris." width="1872" height="262" data-path="images/mods-el-button-light.png" />241
282
283<img src="https://mintcdn.com/claude-code/EXkwf0kKMewZsyod/images/mods-el-button-dark.png?fit=max&auto=format&n=EXkwf0kKMewZsyod&q=85&s=6a88a1fe18ba63b050366dcfab14be45" className="hidden dark:block" alt="Un panneau avec trois boutons, un par ligne : Save entre crochets, n: Next sans crochets avec le n en couleur, et Skip entre crochets en gris." width="1872" height="262" data-path="images/mods-el-button-dark.png" />
284 242
285Un bouton qui a le focus s'affiche en vidéo inverse. Ici, l'utilisateur a appuyé deux fois sur Tab :243Un bouton qui a le focus s'affiche en vidéo inverse. Ici, l'utilisateur a appuyé deux fois sur Tab :
286 244
287<img src="https://mintcdn.com/claude-code/EXkwf0kKMewZsyod/images/mods-el-button-plain-focused-light.png?fit=max&auto=format&n=EXkwf0kKMewZsyod&q=85&s=a6224e58d10752a894615047d9824ad9" className="dark:hidden" alt="Les trois mêmes boutons, le deuxième, n: Next, étant affiché en vidéo inverse." width="1872" height="262" data-path="images/mods-el-button-plain-focused-light.png" />245
288 246
289<img src="https://mintcdn.com/claude-code/EXkwf0kKMewZsyod/images/mods-el-button-plain-focused-dark.png?fit=max&auto=format&n=EXkwf0kKMewZsyod&q=85&s=9aeb7145615e77c84e7436180ed69e86" className="hidden dark:block" alt="Les trois mêmes boutons, le deuxième, n: Next, étant affiché en vidéo inverse." width="1872" height="262" data-path="images/mods-el-button-plain-focused-dark.png" />247### `Input`
290
291<h3 id="input">
292 `Input`
293</h3>
294 248
295Un `Input` est un champ de texte sur une ligne qui exécute `onSubmit` lorsque l'utilisateur appuie sur Entrée :249Un `Input` est un champ de texte sur une ligne qui exécute `onSubmit` lorsque l'utilisateur appuie sur Entrée :
296 250
307 261
308Sans le focus, le champ affiche son libellé et son texte indicatif :262Sans le focus, le champ affiche son libellé et son texte indicatif :
309 263
310<img src="https://mintcdn.com/claude-code/EXkwf0kKMewZsyod/images/mods-el-input-light.png?fit=max&auto=format&n=EXkwf0kKMewZsyod&q=85&s=7d580be1aaf5507032e1962b9167d725" className="dark:hidden" alt="Un panneau avec une seule ligne : le libellé Title, puis le texte indicatif Type a title and press Enter en gris." width="1872" height="186" data-path="images/mods-el-input-light.png" />264
311
312<img src="https://mintcdn.com/claude-code/EXkwf0kKMewZsyod/images/mods-el-input-dark.png?fit=max&auto=format&n=EXkwf0kKMewZsyod&q=85&s=9d254a8adc5959ba173717fb45eabd52" className="hidden dark:block" alt="Un panneau avec une seule ligne : le libellé Title, puis le texte indicatif Type a title and press Enter en gris." width="1872" height="186" data-path="images/mods-el-input-dark.png" />
313 265
314Avec le focus, le libellé passe en gras, un curseur apparaît et le `submitLabel` s'affiche après `⏎` :266Avec le focus, le libellé passe en gras, un curseur apparaît et le `submitLabel` s'affiche après `⏎` :
315 267
316<img src="https://mintcdn.com/claude-code/EXkwf0kKMewZsyod/images/mods-el-input-focused-light.png?fit=max&auto=format&n=EXkwf0kKMewZsyod&q=85&s=dcfcce0174480cc624d06c8521734fe7" className="dark:hidden" alt="Le même champ avec son libellé en gras, un curseur bloc sur la première lettre du texte indicatif, et un symbole de retour suivi du mot save." width="1872" height="186" data-path="images/mods-el-input-focused-light.png" />268
317
318<img src="https://mintcdn.com/claude-code/EXkwf0kKMewZsyod/images/mods-el-input-focused-dark.png?fit=max&auto=format&n=EXkwf0kKMewZsyod&q=85&s=2f5cf7d0e5f813983070e883009f528e" className="hidden dark:block" alt="Le même champ avec son libellé en gras, un curseur bloc sur la première lettre du texte indicatif, et un symbole de retour suivi du mot save." width="1872" height="186" data-path="images/mods-el-input-focused-dark.png" />
319 269
320La saisie remplace le texte indicatif :270La saisie remplace le texte indicatif :
321 271
322<img src="https://mintcdn.com/claude-code/EXkwf0kKMewZsyod/images/mods-el-input-typed-light.png?fit=max&auto=format&n=EXkwf0kKMewZsyod&q=85&s=4eb6d4443763a21415dad4e426bc747a" className="dark:hidden" alt="Le même champ contenant les lettres saisies Rel, suivies du symbole de retour et du mot save." width="1872" height="186" data-path="images/mods-el-input-typed-light.png" />272
323 273
324<img src="https://mintcdn.com/claude-code/EXkwf0kKMewZsyod/images/mods-el-input-typed-dark.png?fit=max&auto=format&n=EXkwf0kKMewZsyod&q=85&s=90fbac3c7a47ab26a4fb71401975eac6" className="hidden dark:block" alt="Le même champ contenant les lettres saisies Rel, suivies du symbole de retour et du mot save." width="1872" height="186" data-path="images/mods-el-input-typed-dark.png" />274### `Select`
325
326<h3 id="select">
327 `Select`
328</h3>
329 275
330Un `Select` permet à l'utilisateur de choisir une option parmi plusieurs, et exécute `onSelect` avec la `value` de l'option :276Un `Select` permet à l'utilisateur de choisir une option parmi plusieurs, et exécute `onSelect` avec la `value` de l'option :
331 277
347 293
348Fermé, il affiche son libellé et l'option actuelle :294Fermé, il affiche son libellé et l'option actuelle :
349 295
350<img src="https://mintcdn.com/claude-code/EXkwf0kKMewZsyod/images/mods-el-select-light.png?fit=max&auto=format&n=EXkwf0kKMewZsyod&q=85&s=4e3b18268ffd87d2cad06442e6d661a9" className="dark:hidden" alt="Un panneau avec une seule ligne : le libellé Format, l'option actuelle Markdown et une petite flèche vers le bas." width="1872" height="186" data-path="images/mods-el-select-light.png" />296
351
352<img src="https://mintcdn.com/claude-code/EXkwf0kKMewZsyod/images/mods-el-select-dark.png?fit=max&auto=format&n=EXkwf0kKMewZsyod&q=85&s=1e329e6aee748c2dd70e92dbe4960de0" className="hidden dark:block" alt="Un panneau avec une seule ligne : le libellé Format, l'option actuelle Markdown et une petite flèche vers le bas." width="1872" height="186" data-path="images/mods-el-select-dark.png" />
353 297
354Ouvert, il liste ses options et en met une en évidence :298Ouvert, il liste ses options et en met une en évidence :
355 299
356<img src="https://mintcdn.com/claude-code/EXkwf0kKMewZsyod/images/mods-el-select-moved-light.png?fit=max&auto=format&n=EXkwf0kKMewZsyod&q=85&s=deb6ce0a49d213235feedaa79ac658c0" className="dark:hidden" alt="Le sélecteur ouvert, avec ses trois options listées sous le libellé. La deuxième option, HTML, est affichée en vidéo inverse." width="1872" height="300" data-path="images/mods-el-select-moved-light.png" />300
357
358<img src="https://mintcdn.com/claude-code/EXkwf0kKMewZsyod/images/mods-el-select-moved-dark.png?fit=max&auto=format&n=EXkwf0kKMewZsyod&q=85&s=d69edeecd4f97dad4bdb39b908e3d98e" className="hidden dark:block" alt="Le sélecteur ouvert, avec ses trois options listées sous le libellé. La deuxième option, HTML, est affichée en vidéo inverse." width="1872" height="300" data-path="images/mods-el-select-moved-dark.png" />
359 301
360Une fois que l'utilisateur a choisi une option, la liste se ferme :302Une fois que l'utilisateur a choisi une option, la liste se ferme :
361 303
362<img src="https://mintcdn.com/claude-code/EXkwf0kKMewZsyod/images/mods-el-select-picked-light.png?fit=max&auto=format&n=EXkwf0kKMewZsyod&q=85&s=f065ab5bc479868f03088dc736f17097" className="dark:hidden" alt="Le sélecteur de nouveau fermé, affichant désormais HTML comme option actuelle." width="1872" height="186" data-path="images/mods-el-select-picked-light.png" />304
363 305
364<img src="https://mintcdn.com/claude-code/EXkwf0kKMewZsyod/images/mods-el-select-picked-dark.png?fit=max&auto=format&n=EXkwf0kKMewZsyod&q=85&s=f084630e325825f3831219215a6a595e" className="hidden dark:block" alt="Le sélecteur de nouveau fermé, affichant désormais HTML comme option actuelle." width="1872" height="186" data-path="images/mods-el-select-picked-dark.png" />306## Dessiner des images
365 307
366<h2 id="draw-pictures">308### `Raster`
367 Dessiner des images
368</h2>
369
370<h3 id="raster">
371 `Raster`
372</h3>
373 309
374Un `Raster` est une grille de cellules de caractères colorées, pour une carte de chaleur, une sparkline ou un plateau de jeu. Le terminal la dessine. Cet exemple utilise la fonction `cellsOf` du module de départ, qui regroupe les cellules dans la chaîne attendue par un `Raster`. [Dessiner une grille de cellules colorées](/docs/fr/plugins/mods/interface#draw-a-grid-of-colored-cells) l'explique :310Un `Raster` est une grille de cellules de caractères colorées, pour une carte de chaleur, une sparkline ou un plateau de jeu. Le terminal la dessine. Cet exemple utilise la fonction `cellsOf` du module de départ, qui regroupe les cellules dans la chaîne attendue par un `Raster`. [Dessiner une grille de cellules colorées](/docs/fr/plugins/mods/interface#draw-a-grid-of-colored-cells) l'explique :
375 311
385})321})
386```322```
387 323
388<img src="https://mintcdn.com/claude-code/EXkwf0kKMewZsyod/images/mods-el-raster-light.png?fit=max&auto=format&n=EXkwf0kKMewZsyod&q=85&s=5ed719481d3dd45b568bab696e57bf16" className="dark:hidden" alt="Un panneau avec une petite grille de blocs colorés, deux lignes de trois : vert, ambre et rouge, puis vert, vert et ambre." width="1872" height="224" data-path="images/mods-el-raster-light.png" />324
389
390<img src="https://mintcdn.com/claude-code/EXkwf0kKMewZsyod/images/mods-el-raster-dark.png?fit=max&auto=format&n=EXkwf0kKMewZsyod&q=85&s=b381f05d4cc99e2abfacb505c77b17f5" className="hidden dark:block" alt="Un panneau avec une petite grille de blocs colorés, deux lignes de trois : vert, ambre et rouge, puis vert, vert et ambre." width="1872" height="224" data-path="images/mods-el-raster-dark.png" />
391 325
392Un `Raster` arrondit chaque couleur à une palette plus restreinte : `0x2e7d32` s'affiche donc en `#337733`.326Un `Raster` arrondit chaque couleur à une palette plus restreinte : `0x2e7d32` s'affiche donc en `#337733`.
393 327
394<h3 id="svg">328### `Svg`
395 `Svg`
396</h3>
397 329
398Un `Svg` dessine un document SVG dans l'application Desktop et l'extension VS Code :330Un `Svg` dessine un document SVG dans l'application Desktop et l'extension VS Code :
399 331
409 341
410Dans le terminal, un panneau qui ne renvoie qu'un `Svg` s'ouvre vide. Pour y dessiner autre chose, vérifiez [`e.surface`](/docs/fr/plugins/mods/interface#pick-where-to-draw) et renvoyez une arborescence différente.342Dans le terminal, un panneau qui ne renvoie qu'un `Svg` s'ouvre vide. Pour y dessiner autre chose, vérifiez [`e.surface`](/docs/fr/plugins/mods/interface#pick-where-to-draw) et renvoyez une arborescence différente.
411 343
412<h3 id="image-and-client">344### `Image` et `Client`
413 `Image` et `Client`
414</h3>
415 345
416Deux autres éléments n'ont pas d'exemple ici. `Image` dessine un PNG ou des pixels bruts dans le terminal. `Client` est une zone dessinée par un second fichier de votre part, pour l'animation et la saisie au pointeur. La [référence des éléments](/docs/fr/plugins/mods/reference#elements) répertorie leurs props.346Deux autres éléments n'ont pas d'exemple ici. `Image` dessine un PNG ou des pixels bruts dans le terminal. `Client` est une zone dessinée par un second fichier de votre part, pour l'animation et la saisie au pointeur. La [référence des éléments](/docs/fr/plugins/mods/reference#elements) répertorie leurs props.
417 347
423 353
424Si les utilisateurs de votre mod voient le texte atténué dans un terminal qui affiche bien ces images à espaces réservés, ils peuvent définir [`CLAUDE_CODE_FORCE_TERMINAL_IMAGES`](/docs/fr/env-vars) sur `1`, ce qui ignore la détection. Dans tmux ou screen, cela n'aide pas : le texte `alt` disparaît, et Claude Code envoie l'image sans l'encapsuler pour le passthrough de tmux ou screen.354Si les utilisateurs de votre mod voient le texte atténué dans un terminal qui affiche bien ces images à espaces réservés, ils peuvent définir [`CLAUDE_CODE_FORCE_TERMINAL_IMAGES`](/docs/fr/env-vars) sur `1`, ce qui ignore la détection. Dans tmux ou screen, cela n'aide pas : le texte `alt` disparaît, et Claude Code envoie l'image sans l'encapsuler pour le passthrough de tmux ou screen.
425 355
426<h2 id="see-where-a-mod-can-draw">356## Voir où un mod peut dessiner
427 Voir où un mod peut dessiner
428</h2>
429 357
430Tous les exemples dessinent dans un panneau. Un mod peut aussi dessiner à d'autres endroits, et appeler Claude Code pour afficher quelque chose à sa place :358Tous les exemples dessinent dans un panneau. Un mod peut aussi dessiner à d'autres endroits, et appeler Claude Code pour afficher quelque chose à sa place :
431 359
434* **Toast, barre de statut et ligne de log** : [Afficher quelque chose sans démarrer un tour](/docs/fr/plugins/mods/api#show-something-without-starting-a-turn)362* **Toast, barre de statut et ligne de log** : [Afficher quelque chose sans démarrer un tour](/docs/fr/plugins/mods/api#show-something-without-starting-a-turn)
435* **Boîte de dialogue de question** : [Suspendre un appel d'outil jusqu'à la décision de l'utilisateur](/docs/fr/plugins/mods/events#hold-a-tool-call-until-the-user-decides)363* **Boîte de dialogue de question** : [Suspendre un appel d'outil jusqu'à la décision de l'utilisateur](/docs/fr/plugins/mods/events#hold-a-tool-call-until-the-user-decides)
436 364
437<h2 id="next-steps">365## Étapes suivantes
438 Étapes suivantes
439</h2>
440 366
441* [Dessiner dans l'interface](/docs/fr/plugins/mods/interface) : créer un panneau avec des onglets, étape par étape367* [Dessiner dans l'interface](/docs/fr/plugins/mods/interface) : créer un panneau avec des onglets, étape par étape
442* [Tester un dessin](/docs/fr/plugins/mods/test#test-a-drawing) : appuyer sur vos boutons depuis un test368* [Tester un dessin](/docs/fr/plugins/mods/test#test-a-drawing) : appuyer sur vos boutons depuis un test