> ## Documentation Index
> Fetch the complete documentation index at: https://code.claude.com/docs/llms.txt
> Use this file to discover all available pages before exploring further.

# Galerie d'interface pour les mods

> Découvrez les éléments d'interface qu'un mod Claude Code peut dessiner, comme du texte, des boutons, des champs, du Markdown, du code et des diffs, avec des exemples de code et des captures d'écran du terminal.

Un mod dessine son interface à partir d'éléments : du texte, des boîtes, des boutons, des champs, et quelques éléments qui mettent en forme le contenu pour vous. Les exemples présentés ici montrent le code qui dessine un élément, et la plupart sont accompagnés d'une capture d'écran du résultat dans un panneau du terminal, afin que vous puissiez choisir un élément selon son apparence.

Pour 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.

<h2 id="try-a-sample">
  Essayer un exemple
</h2>

Les 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é.

Pour 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.

<Steps>
  <Step title="Créer le mod">
    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.

    Enregistrez le manifeste sous `gallery/.claude-plugin/plugin.json` :

    ```json gallery/.claude-plugin/plugin.json theme={null}
    {
      "name": "gallery",
      "version": "0.1.0",
      "description": "Opens a pane that draws one sample",
      "author": { "name": "Your Name" }
    }
    ```

    Indiquez votre point d'entrée dans `gallery/hooks/hooks.json` :

    ```json gallery/hooks/hooks.json theme={null}
    {
      "modules": ["./register.js"]
    }
    ```

    Enregistrez le code sous `gallery/hooks/register.js`. Il ajoute une commande `/gallery` qui ouvre un panneau, et dessine `Plain text` dans ce panneau :

    ```javascript gallery/hooks/register.js theme={null}
    // Stands in for your own callback in the samples that take one
    const noop = () => {}
    // The Select sample keeps its choice here
    let picked = 'md'

    // The Raster sample packs its cells with this function
    const DEFAULT_COLOR = 0x01000000
    function cellsOf(rows) {
      const numbers = rows.flat().flatMap(([char, color]) => [char.codePointAt(0), color, DEFAULT_COLOR])
      return new Uint8Array(Uint32Array.from(numbers).buffer).toBase64()
    }

    export function register(on) {
      on('session.start', async ($, e, next) => {
        await $.command.register({ name: 'gallery', description: 'Open the sample pane' })
        return next(e)
      })

      on('command.run', { command: 'gallery' }, async ($) => {
        await $.ui.open({ id: 'gallery', focus: true, closeOnEscape: true })
        return {}
      })

      on('ui.render', { component: 'Pane' }, async ($, e, next) => {
        if (e.requestId !== 'gallery') return next(e)
        const { Box, Text, Button, Input, Select, Link, Markdown, Code, Raster, Svg } = $.ui.resolve(e)
        // Replace the element after return with a sample
        return Text({ children: ['Plain text'] })
      })
    }
    ```
  </Step>

  <Step title="Exécuter le mod">
    Dans votre shell, démarrez Claude Code depuis le répertoire qui contient `gallery` :

    ```bash theme={null}
    claude --plugin-dir ./gallery
    ```

    Dans le prompt de Claude Code, exécutez `/gallery`. Un panneau s'ouvre et affiche `Plain text`.
  </Step>

  <Step title="Remplacer par un exemple">
    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.
  </Step>
</Steps>

<h2 id="pick-an-element">
  Choisir un élément
</h2>

Les exemples sont regroupés selon ce que vous souhaitez afficher à l'écran :

* **[Afficher du texte](#show-text)** : `Text`, `Markdown` et `Link`
* **[Afficher du code et des modifications](#show-code-and-changes)** : `Code`
* **[Disposer des éléments](#arrange-elements)** : `Box`
* **[Recueillir une saisie](#take-input)** : `Button`, `Input` et `Select`
* **[Dessiner des images](#draw-pictures)** : `Raster`, `Svg`, `Image` et `Client`

<h2 id="show-text">
  Afficher du texte
</h2>

Trois é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.

<h3 id="text">
  `Text`
</h3>

`Text` dessine une chaîne avec les styles que vous lui donnez. Cet exemple affiche une ligne pour chaque style :

```javascript theme={null}
Box({
  flexDirection: 'column',
  children: [
    Text({ children: ['Plain text'] }),
    Text({ bold: true, children: ['bold'] }),
    Text({ italic: true, children: ['italic'] }),
    Text({ underline: true, children: ['underline'] }),
    Text({ strikethrough: true, children: ['strikethrough'] }),
    Text({ dimColor: true, children: ['dimColor'] }),
    Text({ inverse: true, children: ['inverse'] }),
    Text({ color: 'red', children: ["color: 'red'"] }),
    Text({ backgroundColor: 'blue', children: ["backgroundColor: 'blue'"] }),
  ],
})
```

<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" />

<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" />

`dimColor` dessine le texte en gris. `backgroundColor` ne remplit que la largeur du texte.

<h3 id="markdown">
  `Markdown`
</h3>

`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` :

```javascript theme={null}
Markdown({
  text: '## Release notes\n\nThis build has **two** fixes and one `flag`:\n\n- Faster start\n- Fewer prompts\n\n> Quoted text',
})
```

<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" />

<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" />

Un 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.

<h3 id="link">
  `Link`
</h3>

`Link` dessine un libellé suivi de son URL :

```javascript theme={null}
Link({ href: 'https://code.claude.com/docs', label: 'Claude Code docs' })
```

<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" />

<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" />

Le 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.

<h2 id="show-code-and-changes">
  Afficher du code et des modifications
</h2>

`Code` dessine du texte source avec les couleurs syntaxiques propres à Claude Code, ou un diff.

<h3 id="code">
  `Code`
</h3>

Indiquez 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 :

```javascript theme={null}
Code({
  language: 'javascript',
  startLine: 1,
  source: "const name = 'mods'\nconsole.log('hello ' + name)",
})
```

<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" />

<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" />

Les couleurs proviennent du thème de l'utilisateur.

<h3 id="code-as-a-diff">
  `Code` sous forme de diff
</h3>

Avec `format: 'diff'`, `source` contient un ou plusieurs blocs de diff unifié :

```javascript theme={null}
Code({
  format: 'diff',
  source: '@@ -1,3 +1,3 @@\n # Mods\n-A mod is a plugin.\n+A mod is a plugin that runs code.\n Read on.',
})
```

<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" />

<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" />

Claude 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.

<h2 id="arrange-elements">
  Disposer des éléments
</h2>

<h3 id="box">
  `Box`
</h3>

`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 :

```javascript theme={null}
Box({
  flexDirection: 'column',
  gap: 1,
  children: [
    Box({
      flexDirection: 'row',
      columnGap: 4,
      children: [Text({ children: ['a row'] }), Text({ children: ['of three'] }), Text({ children: ['items'] })],
    }),
    Box({
      borderStyle: 'round',
      paddingX: 1,
      children: [Text({ children: ["borderStyle: 'round'"] })],
    }),
  ],
})
```

<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" />

<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" />

La bordure s'étend sur toute la largeur du panneau.

<h2 id="take-input">
  Recueillir une saisie
</h2>

`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.

Ouvrir un panneau avec `focus: true` donne le focus clavier au panneau. Les lettres saisies parviennent à un `Input` une fois qu'il a le focus : ajoutez donc `autoFocus: true` à un champ qui doit recevoir la saisie dès l'ouverture du panneau.

<h3 id="button">
  `Button`
</h3>

Un bouton exécute `onPress`. Cet exemple montre la forme par défaut, un bouton `plain` avec un raccourci, et un bouton atténué :

```javascript theme={null}
Box({
  flexDirection: 'column',
  children: [
    Button({ key: 'save', label: 'Save', onPress: noop }),
    Button({ key: 'next', label: 'Next', hotkey: 'n', plain: true, onPress: noop }),
    Button({ key: 'skip', label: 'Skip', dimColor: true, onPress: noop }),
  ],
})
```

<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" />

<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" />

Un bouton qui a le focus s'affiche en vidéo inverse. Ici, l'utilisateur a appuyé deux fois sur Tab :

<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" />

<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" />

<h3 id="input">
  `Input`
</h3>

Un `Input` est un champ de texte sur une ligne qui exécute `onSubmit` lorsque l'utilisateur appuie sur Entrée :

```javascript theme={null}
Input({
  key: 'title',
  label: 'Title',
  placeholder: 'Type a title and press Enter',
  value: '',
  submitLabel: 'save',
  onSubmit: noop,
})
```

Sans le focus, le champ affiche son libellé et son texte indicatif :

<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" />

<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" />

Avec le focus, le libellé passe en gras, un curseur apparaît et le `submitLabel` s'affiche après `⏎` :

<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" />

<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" />

La saisie remplace le texte indicatif :

<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" />

<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" />

<h3 id="select">
  `Select`
</h3>

Un `Select` permet à l'utilisateur de choisir une option parmi plusieurs, et exécute `onSelect` avec la `value` de l'option :

```javascript theme={null}
Select({
  key: 'format',
  label: 'Format',
  value: picked,
  options: [
    { value: 'md', label: 'Markdown' },
    { value: 'html', label: 'HTML' },
    { value: 'txt', label: 'Plain text' },
  ],
  onSelect: (value) => {
    picked = value
  },
})
```

Fermé, il affiche son libellé et l'option actuelle :

<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" />

<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" />

Ouvert, il liste ses options et en met une en évidence :

<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" />

<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" />

Une fois que l'utilisateur a choisi une option, la liste se ferme :

<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" />

<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" />

<h2 id="draw-pictures">
  Dessiner des images
</h2>

<h3 id="raster">
  `Raster`
</h3>

Un `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 :

```javascript theme={null}
Raster({
  key: 'grid',
  columns: 3,
  rows: 2,
  cells: cellsOf([
    [['█', 0x2e7d32], ['█', 0xf9a825], ['█', 0xc62828]],
    [['█', 0x2e7d32], ['█', 0x2e7d32], ['█', 0xf9a825]],
  ]),
})
```

<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" />

<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" />

Un `Raster` arrondit chaque couleur à une palette plus restreinte : `0x2e7d32` s'affiche donc en `#337733`.

<h3 id="svg">
  `Svg`
</h3>

Un `Svg` dessine un document SVG dans l'application Desktop :

```javascript theme={null}
Svg({
  alt: 'Three bars of rising height',
  width: 120,
  height: 60,
  source:
    '<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 120 60"><rect x="10" y="40" width="20" height="20" fill="#2e7d32"/><rect x="50" y="25" width="20" height="35" fill="#f9a825"/><rect x="90" y="5" width="20" height="55" fill="#c62828"/></svg>',
})
```

Dans 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.

<h3 id="image-and-client">
  `Image` et `Client`
</h3>

Deux 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.

<h2 id="see-where-a-mod-can-draw">
  Voir où un mod peut dessiner
</h2>

Tous les exemples dessinent dans un panneau. Un mod peut aussi dessiner à d'autres endroits, et appeler Claude Code pour afficher quelque chose à sa place :

* **Panneau et bandeau** : [Choisir où dessiner](/docs/fr/plugins/mods/interface#pick-where-to-draw)
* **Les lignes propres à Claude Code, comme le spinner** : [Modifier ce que Claude Code dessine déjà](/docs/fr/plugins/mods/interface#change-what-claude-code-already-draws)
* **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)
* **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)

<h2 id="next-steps">
  Étapes suivantes
</h2>

* [Dessiner dans l'interface](/docs/fr/plugins/mods/interface) : créer un panneau avec des onglets, étape par étape
* [Tester un dessin](/docs/fr/plugins/mods/test#test-a-drawing) : appuyer sur vos boutons depuis un test
* [Référence des éléments](/docs/fr/plugins/mods/reference#elements) : les principales props de chaque élément et les applications qui le dessinent
