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

# Galleria dell'interfaccia per le mod

> Scopri gli elementi dell'interfaccia che una mod di Claude Code può disegnare, come testo, pulsanti, campi, Markdown, codice e diff, con codice di esempio e screenshot del terminale.

Una mod disegna la sua interfaccia a partire da elementi: testo, riquadri, pulsanti, campi e alcuni che formattano il contenuto per te. Gli esempi qui mostrano il codice che disegna un elemento e la maggior parte include uno screenshot del risultato in un pannello del terminale, così puoi scegliere un elemento in base al suo aspetto.

Per capire come funziona il disegno, inizia da [Disegnare nell'interfaccia](/docs/it/plugins/mods/interface). Per le prop principali e per sapere quali app disegnano ciascun elemento, consulta il [riferimento degli elementi](/docs/it/plugins/mods/reference#elements). Le [dichiarazioni di tipo](/docs/it/plugins/mods/create#get-the-types-for-your-build) elencano tutte le prop.

<h2 id="try-a-sample">
  Provare un esempio
</h2>

Gli esempi in questa pagina sono frammenti, non mod complete. Ciascuno è il codice di un elemento e di tutto ciò che vi è annidato.

Per vedere un esempio nel tuo terminale, crea la piccola mod descritta in questi passaggi e incollaci l'esempio. La mod aggiunge un comando `/gallery` che apre un pannello e vi disegna l'esempio. Un [pannello](/docs/it/plugins/mods/interface#pick-where-to-draw) è una barra laterale accanto alla trascrizione in un terminale a schermo intero sufficientemente largo, altrimenti è un'area incorniciata sopra il prompt.

<Steps>
  <Step title="Creare la mod">
    Crea una directory chiamata `gallery` con al suo interno le directory `.claude-plugin` e `hooks`. [Creare una mod](/docs/it/plugins/mods/create#write-a-mod-yourself) spiega i file.

    Salva il manifest come `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" }
    }
    ```

    Indica il tuo entry point in `gallery/hooks/hooks.json`:

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

    Salva il codice come `gallery/hooks/register.js`. Aggiunge un comando `/gallery` che apre un pannello e disegna `Plain text` in quel pannello:

    ```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="Eseguire la mod">
    Nella tua shell, avvia Claude Code dalla directory che contiene `gallery`:

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

    Al prompt di Claude Code, esegui `/gallery`. Si apre un pannello con `Plain text` al suo interno.
  </Step>

  <Step title="Sostituire con un esempio">
    Copia un esempio da questa pagina. In `register.js`, incollalo al posto di `Text({ children: ['Plain text'] })`, in modo che segua `return`, e salva il file. Claude Code ricarica il modulo ogni volta che salvi, quindi esegui di nuovo `/gallery` per vedere il nuovo esempio.
  </Step>
</Steps>

<h2 id="pick-an-element">
  Scegliere un elemento
</h2>

Gli esempi sono raggruppati in base a ciò che vuoi mostrare sullo schermo:

* **[Mostrare testo](#show-text)**: `Text`, `Markdown` e `Link`
* **[Mostrare codice e modifiche](#show-code-and-changes)**: `Code`
* **[Disporre gli elementi](#arrange-elements)**: `Box`
* **[Ricevere input](#take-input)**: `Button`, `Input` e `Select`
* **[Disegnare immagini](#draw-pictures)**: `Raster`, `Svg`, `Image` e `Client`

<h2 id="show-text">
  Mostrare testo
</h2>

Tre elementi mostrano parole sullo schermo: `Text` per uno stile personalizzato, `Markdown` per contenuti già formattati e `Link` per un URL.

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

`Text` disegna una stringa con gli stili che gli assegni. Questo esempio mostra una riga per ogni stile:

```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 pannello con nove righe di testo, ciascuna con il nome del proprio stile: normale, grassetto, corsivo, sottolineato, barrato, dimColor in grigio, inverse, color rosso e backgroundColor blu." 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 pannello con nove righe di testo, ciascuna con il nome del proprio stile: normale, grassetto, corsivo, sottolineato, barrato, dimColor in grigio, inverse, color rosso e backgroundColor blu." width="1872" height="490" data-path="images/mods-el-text-dark.png" />

`dimColor` disegna il testo in grigio. `backgroundColor` riempie solo la larghezza del testo.

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

`Markdown` formatta il testo nello stesso modo in cui sono formattate le risposte di Claude. Passa il contenuto in `text`, non in `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 pannello con un'intestazione in grassetto, Release notes, seguita da una frase con una parola in grassetto e una parola di codice colorata, un elenco di due voci e una citazione in corsivo con una barra sulla sinistra." 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 pannello con un'intestazione in grassetto, Release notes, seguita da una frase con una parola in grassetto e una parola di codice colorata, un elenco di due voci e una citazione in corsivo con una barra sulla sinistra." width="1872" height="452" data-path="images/mods-el-markdown-dark.png" />

Un'intestazione viene disegnata in grassetto senza i segni `#`. Il codice inline viene disegnato a colori senza i backtick. Una citazione viene disegnata in corsivo con una barra sulla sinistra.

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

`Link` disegna un'etichetta seguita dal suo 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 pannello con una riga: l'etichetta Claude Code docs, seguita dall'URL in grigio." 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 pannello con una riga: l'etichetta Claude Code docs, seguita dall'URL in grigio." width="1872" height="186" data-path="images/mods-el-link-dark.png" />

Il terminale disegna l'URL come testo dopo l'etichetta. Che un clic lo apra o meno dipende dal terminale dell'utente.

<h2 id="show-code-and-changes">
  Mostrare codice e modifiche
</h2>

`Code` disegna il codice sorgente con i colori di sintassi di Claude Code, oppure un diff.

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

Indica il `language`, oppure passa un `path` da cui Claude Code possa dedurlo. Con `startLine`, le righe vengono numerate a partire da quel numero:

```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 pannello con due righe numerate di JavaScript con i colori di sintassi." 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 pannello con due righe numerate di JavaScript con i colori di sintassi." width="1872" height="224" data-path="images/mods-el-code-dark.png" />

I colori provengono dal tema dell'utente.

<h3 id="code-as-a-diff">
  `Code` come diff
</h3>

Con `format: 'diff'`, `source` è costituito da uno o più hunk di unified diff:

```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 pannello con un diff di quattro righe. La riga rimossa è ombreggiata in rosso e quella aggiunta in verde, ciascuna con il proprio numero di riga. Nella riga aggiunta, le parole that runs code hanno un'ombreggiatura più intensa." 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 pannello con un diff di quattro righe. La riga rimossa è ombreggiata in rosso e quella aggiunta in verde, ciascuna con il proprio numero di riga. Nella riga aggiunta, le parole that runs code hanno un'ombreggiatura più intensa." width="1872" height="300" data-path="images/mods-el-diff-dark.png" />

Claude Code disegna i numeri di riga al posto della riga `@@`. Quando una riga rimossa e una riga aggiunta sono simili, le parole modificate ricevono un'ombreggiatura più intensa.

<h2 id="arrange-elements">
  Disporre gli elementi
</h2>

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

`Box` dispone il suo contenuto in una riga o in una colonna e può disegnare un bordo. Questo esempio mette una riga di parole sopra un riquadro con bordo:

```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 pannello con tre parole in una riga, distanziate di quattro colonne, poi una riga vuota, poi un bordo arrotondato attorno a una riga di testo. Il bordo occupa l'intera larghezza del pannello." 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 pannello con tre parole in una riga, distanziate di quattro colonne, poi una riga vuota, poi un bordo arrotondato attorno a una riga di testo. Il bordo occupa l'intera larghezza del pannello." width="1872" height="338" data-path="images/mods-el-box-dark.png" />

Il bordo si estende fino alla larghezza del pannello.

<h2 id="take-input">
  Ricevere input
</h2>

`Button`, `Input` e `Select` sono controlli: l'utente si sposta tra di essi con Tab e usa quello che ha il focus. [Focus della tastiera e tasti di scelta rapida](/docs/it/plugins/mods/interface#know-which-keys-your-mod-can-receive) spiega quali tasti li raggiungono.

Aprire un pannello con `focus: true` assegna al pannello il focus della tastiera. Le lettere digitate raggiungono un `Input` solo quando ha il focus, quindi aggiungi `autoFocus: true` a un campo che deve ricevere la digitazione non appena si apre il pannello.

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

Un pulsante esegue `onPress`. Questo esempio mostra la forma predefinita, un pulsante `plain` con un tasto di scelta rapida e uno attenuato:

```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 pannello con tre pulsanti, uno per riga: Save tra parentesi quadre, n: Next senza parentesi e con la n a colori, e Skip tra parentesi quadre in grigio." 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 pannello con tre pulsanti, uno per riga: Save tra parentesi quadre, n: Next senza parentesi e con la n a colori, e Skip tra parentesi quadre in grigio." width="1872" height="262" data-path="images/mods-el-button-dark.png" />

Un pulsante che ha il focus viene disegnato in video inverso. Qui l'utente ha premuto Tab due volte:

<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="Gli stessi tre pulsanti, con il secondo, n: Next, disegnato in video inverso." 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="Gli stessi tre pulsanti, con il secondo, n: Next, disegnato in video inverso." width="1872" height="262" data-path="images/mods-el-button-plain-focused-dark.png" />

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

Un `Input` è un campo di testo su una riga che esegue `onSubmit` quando l'utente preme Invio:

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

Senza il focus, il campo mostra la sua etichetta e il suo placeholder:

<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 pannello con una riga: l'etichetta Title, seguita dal placeholder Type a title and press Enter in grigio." 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 pannello con una riga: l'etichetta Title, seguita dal placeholder Type a title and press Enter in grigio." width="1872" height="186" data-path="images/mods-el-input-dark.png" />

Con il focus, l'etichetta diventa in grassetto, compare un cursore e il `submitLabel` viene mostrato dopo `⏎`:

<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="Lo stesso campo con l'etichetta in grassetto, un cursore a blocco sulla prima lettera del placeholder e un simbolo di invio seguito dalla parola 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="Lo stesso campo con l'etichetta in grassetto, un cursore a blocco sulla prima lettera del placeholder e un simbolo di invio seguito dalla parola save." width="1872" height="186" data-path="images/mods-el-input-focused-dark.png" />

La digitazione sostituisce il placeholder:

<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="Lo stesso campo contenente le lettere digitate Rel, seguite dal simbolo di invio e dalla parola 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="Lo stesso campo contenente le lettere digitate Rel, seguite dal simbolo di invio e dalla parola save." width="1872" height="186" data-path="images/mods-el-input-typed-dark.png" />

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

Un `Select` permette all'utente di scegliere una tra diverse opzioni ed esegue `onSelect` con il `value` dell'opzione:

```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
  },
})
```

Chiuso, mostra la sua etichetta e l'opzione corrente:

<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 pannello con una riga: l'etichetta Format, l'opzione corrente Markdown e una piccola freccia verso il basso." 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 pannello con una riga: l'etichetta Format, l'opzione corrente Markdown e una piccola freccia verso il basso." width="1872" height="186" data-path="images/mods-el-select-dark.png" />

Aperto, elenca le sue opzioni e ne evidenzia una:

<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="Il selettore aperto, con le sue tre opzioni elencate sotto l'etichetta. La seconda opzione, HTML, è disegnata in video inverso." 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="Il selettore aperto, con le sue tre opzioni elencate sotto l'etichetta. La seconda opzione, HTML, è disegnata in video inverso." width="1872" height="300" data-path="images/mods-el-select-moved-dark.png" />

Dopo che l'utente ha scelto un'opzione, l'elenco si chiude:

<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="Il selettore di nuovo chiuso, che ora mostra HTML come opzione corrente." 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="Il selettore di nuovo chiuso, che ora mostra HTML come opzione corrente." width="1872" height="186" data-path="images/mods-el-select-picked-dark.png" />

<h2 id="draw-pictures">
  Disegnare immagini
</h2>

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

Un `Raster` è una griglia di celle di caratteri colorate, per una mappa di calore, una sparkline o una scacchiera di gioco. Lo disegna il terminale. Questo esempio usa la funzione `cellsOf` del modulo iniziale, che comprime le celle nella stringa accettata da un `Raster`. [Disegnare una griglia di celle colorate](/docs/it/plugins/mods/interface#draw-a-grid-of-colored-cells) la spiega:

```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 pannello con una piccola griglia di blocchi colorati, due righe da tre: verde, ambra e rosso, poi verde, verde e ambra." 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 pannello con una piccola griglia di blocchi colorati, due righe da tre: verde, ambra e rosso, poi verde, verde e ambra." width="1872" height="224" data-path="images/mods-el-raster-dark.png" />

Un `Raster` arrotonda ogni colore a una tavolozza più ridotta, quindi `0x2e7d32` viene disegnato come `#337733`.

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

Un `Svg` disegna un documento SVG nell'app 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>',
})
```

Nel terminale, un pannello che restituisce solo un `Svg` si apre vuoto. Per disegnare qualcos'altro lì, controlla [`e.surface`](/docs/it/plugins/mods/interface#pick-where-to-draw) e restituisci un albero diverso.

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

Altri due elementi non hanno un esempio qui. `Image` disegna un PNG o pixel grezzi nel terminale. `Client` è un'area disegnata da un tuo secondo file, per animazioni e input del puntatore. Il [riferimento degli elementi](/docs/it/plugins/mods/reference#elements) elenca le loro prop.

<h2 id="see-where-a-mod-can-draw">
  Vedere dove può disegnare una mod
</h2>

Tutti gli esempi disegnano in un pannello. Una mod può disegnare anche in altri punti e chiedere a Claude Code di mostrare qualcosa per suo conto:

* **Pannello e banda**: [Scegliere dove disegnare](/docs/it/plugins/mods/interface#pick-where-to-draw)
* **Le righe proprie di Claude Code, come lo spinner**: [Modificare ciò che Claude Code già disegna](/docs/it/plugins/mods/interface#change-what-claude-code-already-draws)
* **Toast, riga di stato e riga di log**: [Mostrare qualcosa senza avviare un turno](/docs/it/plugins/mods/api#show-something-without-starting-a-turn)
* **Finestra di domanda**: [Sospendere una chiamata a uno strumento finché l'utente non decide](/docs/it/plugins/mods/events#hold-a-tool-call-until-the-user-decides)

<h2 id="next-steps">
  Passaggi successivi
</h2>

* [Disegnare nell'interfaccia](/docs/it/plugins/mods/interface): crea un pannello con schede, passo dopo passo
* [Testare un disegno](/docs/it/plugins/mods/test#test-a-drawing): premi i tuoi pulsanti da un test
* [Riferimento degli elementi](/docs/it/plugins/mods/reference#elements): le prop principali di ogni elemento e le app che lo disegnano
