1> ## Documentation Index
2> Fetch the complete documentation index at: https://code.claude.com/docs/llms.txt
3> Use this file to discover all available pages before exploring further.
4
5# Galleria dell'interfaccia per le mod
6
7> 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.
8
9Una 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.
10
11Per 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.
12
13<h2 id="try-a-sample">
14 Provare un esempio
15</h2>
16
17Gli esempi in questa pagina sono frammenti, non mod complete. Ciascuno è il codice di un elemento e di tutto ciò che vi è annidato.
18
19Per 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.
20
21<Steps>
22 <Step title="Creare la mod">
23 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.
24
25 Salva il manifest come `gallery/.claude-plugin/plugin.json`:
26
27 ```json gallery/.claude-plugin/plugin.json theme={null}
28 {
29 "name": "gallery",
30 "version": "0.1.0",
31 "description": "Opens a pane that draws one sample",
32 "author": { "name": "Your Name" }
33 }
34 ```
35
36 Indica il tuo entry point in `gallery/hooks/hooks.json`:
37
38 ```json gallery/hooks/hooks.json theme={null}
39 {
40 "modules": ["./register.js"]
41 }
42 ```
43
44 Salva il codice come `gallery/hooks/register.js`. Aggiunge un comando `/gallery` che apre un pannello e disegna `Plain text` in quel pannello:
45
46 ```javascript gallery/hooks/register.js theme={null}
47 // Stands in for your own callback in the samples that take one
48 const noop = () => {}
49 // The Select sample keeps its choice here
50 let picked = 'md'
51
52 // The Raster sample packs its cells with this function
53 const DEFAULT_COLOR = 0x01000000
54 function cellsOf(rows) {
55 const numbers = rows.flat().flatMap(([char, color]) => [char.codePointAt(0), color, DEFAULT_COLOR])
56 return new Uint8Array(Uint32Array.from(numbers).buffer).toBase64()
57 }
58
59 export function register(on) {
60 on('session.start', async ($, e, next) => {
61 await $.command.register({ name: 'gallery', description: 'Open the sample pane' })
62 return next(e)
63 })
64
65 on('command.run', { command: 'gallery' }, async ($) => {
66 await $.ui.open({ id: 'gallery', focus: true, closeOnEscape: true })
67 return {}
68 })
69
70 on('ui.render', { component: 'Pane' }, async ($, e, next) => {
71 if (e.requestId !== 'gallery') return next(e)
72 const { Box, Text, Button, Input, Select, Link, Markdown, Code, Raster, Svg } = $.ui.resolve(e)
73 // Replace the element after return with a sample
74 return Text({ children: ['Plain text'] })
75 })
76 }
77 ```
78 </Step>
79
80 <Step title="Eseguire la mod">
81 Nella tua shell, avvia Claude Code dalla directory che contiene `gallery`:
82
83 ```bash theme={null}
84 claude --plugin-dir ./gallery
85 ```
86
87 Al prompt di Claude Code, esegui `/gallery`. Si apre un pannello con `Plain text` al suo interno.
88 </Step>
89
90 <Step title="Sostituire con un esempio">
91 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.
92 </Step>
93</Steps>
94
95<h2 id="pick-an-element">
96 Scegliere un elemento
97</h2>
98
99Gli esempi sono raggruppati in base a ciò che vuoi mostrare sullo schermo:
100
101* **[Mostrare testo](#show-text)**: `Text`, `Markdown` e `Link`
102* **[Mostrare codice e modifiche](#show-code-and-changes)**: `Code`
103* **[Disporre gli elementi](#arrange-elements)**: `Box`
104* **[Ricevere input](#take-input)**: `Button`, `Input` e `Select`
105* **[Disegnare immagini](#draw-pictures)**: `Raster`, `Svg`, `Image` e `Client`
106
107<h2 id="show-text">
108 Mostrare testo
109</h2>
110
111Tre elementi mostrano parole sullo schermo: `Text` per uno stile personalizzato, `Markdown` per contenuti già formattati e `Link` per un URL.
112
113<h3 id="text">
114 `Text`
115</h3>
116
117`Text` disegna una stringa con gli stili che gli assegni. Questo esempio mostra una riga per ogni stile:
118
119```javascript theme={null}
120Box({
121 flexDirection: 'column',
122 children: [
123 Text({ children: ['Plain text'] }),
124 Text({ bold: true, children: ['bold'] }),
125 Text({ italic: true, children: ['italic'] }),
126 Text({ underline: true, children: ['underline'] }),
127 Text({ strikethrough: true, children: ['strikethrough'] }),
128 Text({ dimColor: true, children: ['dimColor'] }),
129 Text({ inverse: true, children: ['inverse'] }),
130 Text({ color: 'red', children: ["color: 'red'"] }),
131 Text({ backgroundColor: 'blue', children: ["backgroundColor: 'blue'"] }),
132 ],
133})
134```
135
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 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" />
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 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" />
139
140`dimColor` disegna il testo in grigio. `backgroundColor` riempie solo la larghezza del testo.
141
142<h3 id="markdown">
143 `Markdown`
144</h3>
145
146`Markdown` formatta il testo nello stesso modo in cui sono formattate le risposte di Claude. Passa il contenuto in `text`, non in `children`:
147
148```javascript theme={null}
149Markdown({
150 text: '## Release notes\n\nThis build has **two** fixes and one `flag`:\n\n- Faster start\n- Fewer prompts\n\n> Quoted text',
151})
152```
153
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 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" />
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 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" />
157
158Un'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.
159
160<h3 id="link">
161 `Link`
162</h3>
163
164`Link` disegna un'etichetta seguita dal suo URL:
165
166```javascript theme={null}
167Link({ href: 'https://code.claude.com/docs', label: 'Claude Code docs' })
168```
169
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 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" />
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 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" />
173
174Il terminale disegna l'URL come testo dopo l'etichetta. Che un clic lo apra o meno dipende dal terminale dell'utente.
175
176<h2 id="show-code-and-changes">
177 Mostrare codice e modifiche
178</h2>
179
180`Code` disegna il codice sorgente con i colori di sintassi di Claude Code, oppure un diff.
181
182<h3 id="code">
183 `Code`
184</h3>
185
186Indica il `language`, oppure passa un `path` da cui Claude Code possa dedurlo. Con `startLine`, le righe vengono numerate a partire da quel numero:
187
188```javascript theme={null}
189Code({
190 language: 'javascript',
191 startLine: 1,
192 source: "const name = 'mods'\nconsole.log('hello ' + name)",
193})
194```
195
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 pannello con due righe numerate di JavaScript con i colori di sintassi." width="1872" height="224" data-path="images/mods-el-code-light.png" />
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 pannello con due righe numerate di JavaScript con i colori di sintassi." width="1872" height="224" data-path="images/mods-el-code-dark.png" />
199
200I colori provengono dal tema dell'utente.
201
202<h3 id="code-as-a-diff">
203 `Code` come diff
204</h3>
205
206Con `format: 'diff'`, `source` è costituito da uno o più hunk di unified diff:
207
208```javascript theme={null}
209Code({
210 format: 'diff',
211 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.',
212})
213```
214
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 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" />
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 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" />
218
219Claude 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.
220
221<h2 id="arrange-elements">
222 Disporre gli elementi
223</h2>
224
225<h3 id="box">
226 `Box`
227</h3>
228
229`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:
230
231```javascript theme={null}
232Box({
233 flexDirection: 'column',
234 gap: 1,
235 children: [
236 Box({
237 flexDirection: 'row',
238 columnGap: 4,
239 children: [Text({ children: ['a row'] }), Text({ children: ['of three'] }), Text({ children: ['items'] })],
240 }),
241 Box({
242 borderStyle: 'round',
243 paddingX: 1,
244 children: [Text({ children: ["borderStyle: 'round'"] })],
245 }),
246 ],
247})
248```
249
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 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" />
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 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" />
253
254Il bordo si estende fino alla larghezza del pannello.
255
256<h2 id="take-input">
257 Ricevere input
258</h2>
259
260`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.
261
262Aprire 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.
263
264<h3 id="button">
265 `Button`
266</h3>
267
268Un pulsante esegue `onPress`. Questo esempio mostra la forma predefinita, un pulsante `plain` con un tasto di scelta rapida e uno attenuato:
269
270```javascript theme={null}
271Box({
272 flexDirection: 'column',
273 children: [
274 Button({ key: 'save', label: 'Save', onPress: noop }),
275 Button({ key: 'next', label: 'Next', hotkey: 'n', plain: true, onPress: noop }),
276 Button({ key: 'skip', label: 'Skip', dimColor: true, onPress: noop }),
277 ],
278})
279```
280
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 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" />
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 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" />
284
285Un pulsante che ha il focus viene disegnato in video inverso. Qui l'utente ha premuto Tab due volte:
286
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="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" />
288
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="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" />
290
291<h3 id="input">
292 `Input`
293</h3>
294
295Un `Input` è un campo di testo su una riga che esegue `onSubmit` quando l'utente preme Invio:
296
297```javascript theme={null}
298Input({
299 key: 'title',
300 label: 'Title',
301 placeholder: 'Type a title and press Enter',
302 value: '',
303 submitLabel: 'save',
304 onSubmit: noop,
305})
306```
307
308Senza il focus, il campo mostra la sua etichetta e il suo placeholder:
309
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 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" />
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 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" />
313
314Con il focus, l'etichetta diventa in grassetto, compare un cursore e il `submitLabel` viene mostrato dopo `⏎`:
315
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="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" />
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="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" />
319
320La digitazione sostituisce il placeholder:
321
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="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" />
323
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="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" />
325
326<h3 id="select">
327 `Select`
328</h3>
329
330Un `Select` permette all'utente di scegliere una tra diverse opzioni ed esegue `onSelect` con il `value` dell'opzione:
331
332```javascript theme={null}
333Select({
334 key: 'format',
335 label: 'Format',
336 value: picked,
337 options: [
338 { value: 'md', label: 'Markdown' },
339 { value: 'html', label: 'HTML' },
340 { value: 'txt', label: 'Plain text' },
341 ],
342 onSelect: (value) => {
343 picked = value
344 },
345})
346```
347
348Chiuso, mostra la sua etichetta e l'opzione corrente:
349
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 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" />
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 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" />
353
354Aperto, elenca le sue opzioni e ne evidenzia una:
355
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="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" />
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="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" />
359
360Dopo che l'utente ha scelto un'opzione, l'elenco si chiude:
361
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="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" />
363
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="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" />
365
366<h2 id="draw-pictures">
367 Disegnare immagini
368</h2>
369
370<h3 id="raster">
371 `Raster`
372</h3>
373
374Un `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:
375
376```javascript theme={null}
377Raster({
378 key: 'grid',
379 columns: 3,
380 rows: 2,
381 cells: cellsOf([
382 [['█', 0x2e7d32], ['█', 0xf9a825], ['█', 0xc62828]],
383 [['█', 0x2e7d32], ['█', 0x2e7d32], ['█', 0xf9a825]],
384 ]),
385})
386```
387
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 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" />
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 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" />
391
392Un `Raster` arrotonda ogni colore a una tavolozza più ridotta, quindi `0x2e7d32` viene disegnato come `#337733`.
393
394<h3 id="svg">
395 `Svg`
396</h3>
397
398Un `Svg` disegna un documento SVG nell'app Desktop:
399
400```javascript theme={null}
401Svg({
402 alt: 'Three bars of rising height',
403 width: 120,
404 height: 60,
405 source:
406 '<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>',
407})
408```
409
410Nel 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.
411
412<h3 id="image-and-client">
413 `Image` e `Client`
414</h3>
415
416Altri 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.
417
418<h2 id="see-where-a-mod-can-draw">
419 Vedere dove può disegnare una mod
420</h2>
421
422Tutti 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:
423
424* **Pannello e banda**: [Scegliere dove disegnare](/docs/it/plugins/mods/interface#pick-where-to-draw)
425* **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)
426* **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)
427* **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)
428
429<h2 id="next-steps">
430 Passaggi successivi
431</h2>
432
433* [Disegnare nell'interfaccia](/docs/it/plugins/mods/interface): crea un pannello con schede, passo dopo passo
434* [Testare un disegno](/docs/it/plugins/mods/test#test-a-drawing): premi i tuoi pulsanti da un test
435* [Riferimento degli elementi](/docs/it/plugins/mods/reference#elements): le prop principali di ogni elemento e le app che lo disegnano