10 10
11Para aprender como o desenho funciona, comece com [Desenhar na interface](/docs/pt/plugins/mods/interface). Para as principais props e quais aplicativos desenham cada elemento, consulte a [referência de elementos](/docs/pt/plugins/mods/reference#elements). As [declarações de tipo](/docs/pt/plugins/mods/create#get-the-types-for-your-build) listam todas as props.11Para aprender como o desenho funciona, comece com [Desenhar na interface](/docs/pt/plugins/mods/interface). Para as principais props e quais aplicativos desenham cada elemento, consulte a [referência de elementos](/docs/pt/plugins/mods/reference#elements). As [declarações de tipo](/docs/pt/plugins/mods/create#get-the-types-for-your-build) listam todas as props.
12 12
13<h2 id="try-a-sample">13## Experimentar um exemplo
14 Experimentar um exemplo
15</h2>
16 14
17Os exemplos nesta página são trechos, não mods inteiros. Cada um é o código de um elemento e de tudo o que está aninhado dentro dele.15Os exemplos nesta página são trechos, não mods inteiros. Cada um é o código de um elemento e de tudo o que está aninhado dentro dele.
18 16
19Para ver um exemplo no seu próprio terminal, crie o pequeno mod destas etapas e cole o exemplo nele. O mod adiciona um comando `/gallery` que abre um painel e desenha o exemplo ali. Um [painel](/docs/pt/plugins/mods/interface#pick-where-to-draw) é uma barra lateral ao lado da transcrição em um terminal largo em tela cheia, ou, caso contrário, uma região emoldurada acima do prompt.17Para ver um exemplo no seu próprio terminal, crie o pequeno mod destas etapas e cole o exemplo nele. O mod adiciona um comando `/gallery` que abre um painel e desenha o exemplo ali. Um [painel](/docs/pt/plugins/mods/interface#pick-where-to-draw) é uma barra lateral ao lado da transcrição em um terminal largo em tela cheia, ou, caso contrário, uma região emoldurada acima do prompt.
20 18
21<Steps>19**1. Criar o mod**
22 <Step title="Criar o mod">
23 Crie um diretório chamado `gallery` com os diretórios `.claude-plugin` e `hooks` dentro dele. [Criar um mod](/docs/pt/plugins/mods/create#write-a-mod-yourself) explica os arquivos.
24 20
25 Salve o manifesto como `gallery/.claude-plugin/plugin.json`:21Crie um diretório chamado `gallery` com os diretórios `.claude-plugin` e `hooks` dentro dele. [Criar um mod](/docs/pt/plugins/mods/create#write-a-mod-yourself) explica os arquivos.
26 22
27 ```json gallery/.claude-plugin/plugin.json theme={null}23Salve o manifesto como `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 Indique seu ponto de entrada em `gallery/hooks/hooks.json`:34Indique seu ponto de entrada em `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 Salve o código como `gallery/hooks/register.js`. Ele adiciona um comando `/gallery` que abre um painel e desenha `Plain text` nesse painel:42Salve o código como `gallery/hooks/register.js`. Ele adiciona um comando `/gallery` que abre um painel e desenha `Plain text` nesse painel:
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. Executar o mod**
79 78
80 <Step title="Executar o mod">79No seu shell, inicie o Claude Code a partir do diretório que contém `gallery`:
81 No seu shell, inicie o Claude Code a partir do diretório que contém `gallery`:
82 80
83 ```bash theme={null}81```bash theme={null}
84 claude --plugin-dir ./gallery82claude --plugin-dir ./gallery
85 ```83```
86 84
87 No prompt do Claude Code, execute `/gallery`. Um painel é aberto com `Plain text` nele.85No prompt do Claude Code, execute `/gallery`. Um painel é aberto com `Plain text` nele.
88 </Step>
89 86
90 <Step title="Trocar por um exemplo">87**3. Trocar por um exemplo**
91 Copie um exemplo desta página. Em `register.js`, cole-o sobre `Text({ children: ['Plain text'] })`, de modo que ele venha depois de `return`, e salve o arquivo. O Claude Code recarrega o módulo cada vez que você salva, então execute `/gallery` novamente para ver o novo exemplo.
92 </Step>
93</Steps>
94 88
95<h2 id="pick-an-element">89Copie um exemplo desta página. Em `register.js`, cole-o sobre `Text({ children: ['Plain text'] })`, de modo que ele venha depois de `return`, e salve o arquivo. O Claude Code recarrega o módulo cada vez que você salva, então execute `/gallery` novamente para ver o novo exemplo.
96 Escolher um elemento90
97</h2>91## Escolher um elemento
98 92
99Os exemplos estão agrupados pelo que você quer colocar na tela:93Os exemplos estão agrupados pelo que você quer colocar na tela:
100 94
104* **[Receber entrada](#take-input)**: `Button`, `Input` e `Select`98* **[Receber entrada](#take-input)**: `Button`, `Input` e `Select`
105* **[Desenhar imagens](#draw-pictures)**: `Raster`, `Svg`, `Image` e `Client`99* **[Desenhar imagens](#draw-pictures)**: `Raster`, `Svg`, `Image` e `Client`
106 100
107<h2 id="show-text">101## Mostrar texto
108 Mostrar texto
109</h2>
110 102
111Três elementos colocam palavras na tela: `Text` para o seu próprio estilo, `Markdown` para conteúdo já formatado e `Link` para uma URL.103Três elementos colocam palavras na tela: `Text` para o seu próprio estilo, `Markdown` para conteúdo já formatado e `Link` para uma URL.
112 104
113<h3 id="text">105### `Text`
114 `Text`
115</h3>
116 106
117`Text` desenha uma string com os estilos que você fornece. Este exemplo mostra texto simples e oito estilos, um em cada linha:107`Text` desenha uma string com os estilos que você fornece. Este exemplo mostra texto simples e oito estilos, um em cada linha:
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="Um painel com nove linhas de texto, cada uma nomeada pelo seu estilo: simples, negrito, itálico, sublinhado, tachado, dimColor em cinza, inverso, cor vermelha e backgroundColor azul." 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="Um painel com nove linhas de texto, cada uma nomeada pelo seu estilo: simples, negrito, itálico, sublinhado, tachado, dimColor em cinza, inverso, cor vermelha e backgroundColor azul." width="1872" height="490" data-path="images/mods-el-text-dark.png" />
139 127
140`dimColor` desenha o texto em cinza. `backgroundColor` preenche apenas a largura do texto.128`dimColor` desenha o texto em cinza. `backgroundColor` preenche apenas a largura do texto.
141 129
142<h3 id="markdown">130### `Markdown`
143 `Markdown`
144</h3>
145 131
146`Markdown` formata o texto da mesma forma que as respostas do Claude são formatadas. Passe o conteúdo em `text`, não em `children`:132`Markdown` formata o texto da mesma forma que as respostas do Claude são formatadas. Passe o conteúdo em `text`, não em `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="Um painel com um título em negrito, Release notes, depois uma frase com uma palavra em negrito e uma palavra de código colorida, uma lista de dois itens e uma citação desenhada em itálico com uma barra à esquerda." 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="Um painel com um título em negrito, Release notes, depois uma frase com uma palavra em negrito e uma palavra de código colorida, uma lista de dois itens e uma citação desenhada em itálico com uma barra à esquerda." width="1872" height="452" data-path="images/mods-el-markdown-dark.png" />
157 141
158Um título é desenhado em negrito sem suas marcas `#`. O código inline é desenhado em cor sem seus acentos graves. Uma citação é desenhada em itálico com uma barra à esquerda.142Um título é desenhado em negrito sem suas marcas `#`. O código inline é desenhado em cor sem seus acentos graves. Uma citação é desenhada em itálico com uma barra à esquerda.
159 143
160<h3 id="link">144### `Link`
161 `Link`
162</h3>
163 145
164`Link` desenha um rótulo seguido de sua URL:146`Link` desenha um rótulo seguido de sua 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="Um painel com uma linha: o rótulo Claude Code docs, depois a URL em cinza." 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="Um painel com uma linha: o rótulo Claude Code docs, depois a URL em cinza." width="1872" height="186" data-path="images/mods-el-link-dark.png" />
173 153
174O terminal desenha a URL como texto após o rótulo. Se um clique a abre ou não depende do terminal do usuário.154O terminal desenha a URL como texto após o rótulo. Se um clique a abre ou não depende do terminal do usuário.
175 155
176<h2 id="show-code-and-changes">156## Mostrar código e alterações
177 Mostrar código e alterações
178</h2>
179 157
180`Code` desenha texto-fonte com as próprias cores de sintaxe do Claude Code, ou um diff. Na extensão do VS Code, `Code` mostra seu `source` como texto simples, sem nenhuma das cores, números de linha ou sombreamento de diff destas capturas de tela.158`Code` desenha texto-fonte com as próprias cores de sintaxe do Claude Code, ou um diff. Na extensão do VS Code, `Code` mostra seu `source` como texto simples, sem nenhuma das cores, números de linha ou sombreamento de diff destas capturas de tela.
181 159
182<h3 id="code">160### `Code`
183 `Code`
184</h3>
185 161
186Indique a `language`, ou passe um `path` para que o Claude Code a deduza. Com `startLine`, as linhas são numeradas a partir desse número:162Indique a `language`, ou passe um `path` para que o Claude Code a deduza. Com `startLine`, as linhas são numeradas a partir desse número:
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="Um painel com duas linhas numeradas de JavaScript em cores de sintaxe." 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="Um painel com duas linhas numeradas de JavaScript em cores de sintaxe." width="1872" height="224" data-path="images/mods-el-code-dark.png" />
199 173
200As cores vêm do tema do usuário.174As cores vêm do tema do usuário.
201 175
202<h3 id="code-as-a-diff">176### `Code` como diff
203 `Code` como diff
204</h3>
205 177
206Com `format: 'diff'`, `source` é um ou mais hunks de diff unificado:178Com `format: 'diff'`, `source` é um ou mais hunks de diff unificado:
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="Um painel com um diff de quatro linhas. A linha removida está sombreada em vermelho e a linha adicionada em verde, cada uma com seu número de linha. Na linha adicionada, as palavras that runs code têm uma sombra mais forte." 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="Um painel com um diff de quatro linhas. A linha removida está sombreada em vermelho e a linha adicionada em verde, cada uma com seu número de linha. Na linha adicionada, as palavras that runs code têm uma sombra mais forte." width="1872" height="300" data-path="images/mods-el-diff-dark.png" />
218 188
219O Claude Code desenha números de linha no lugar da linha `@@`. Onde uma linha removida e uma linha adicionada são parecidas, as palavras que mudaram recebem uma sombra mais forte.189O Claude Code desenha números de linha no lugar da linha `@@`. Onde uma linha removida e uma linha adicionada são parecidas, as palavras que mudaram recebem uma sombra mais forte.
220 190
221<h2 id="arrange-elements">191## Organizar elementos
222 Organizar elementos
223</h2>
224 192
225<h3 id="box">193### `Box`
226 `Box`
227</h3>
228 194
229`Box` dispõe o que está dentro dele em uma linha ou em uma coluna, e pode desenhar uma borda. Este exemplo coloca uma linha de palavras acima de uma caixa com borda:195`Box` dispõe o que está dentro dele em uma linha ou em uma coluna, e pode desenhar uma borda. Este exemplo coloca uma linha de palavras acima de uma caixa com borda:
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="Um painel com três palavras em uma linha, separadas por quatro colunas, depois uma linha em branco, depois uma borda arredondada em torno de uma linha de texto. A borda ocupa toda a largura do painel." 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="Um painel com três palavras em uma linha, separadas por quatro colunas, depois uma linha em branco, depois uma borda arredondada em torno de uma linha de texto. A borda ocupa toda a largura do painel." width="1872" height="338" data-path="images/mods-el-box-dark.png" />
253 217
254A borda se estende até a largura do painel.218A borda se estende até a largura do painel.
255 219
256<h2 id="take-input">220## Receber entrada
257 Receber entrada
258</h2>
259 221
260`Button`, `Input` e `Select` são controles: o usuário se move entre eles com Tab e usa aquele que tem o foco. [Foco do teclado e teclas de atalho](/docs/pt/plugins/mods/interface#know-which-keys-your-mod-can-receive) explica quais teclas chegam até eles.222`Button`, `Input` e `Select` são controles: o usuário se move entre eles com Tab e usa aquele que tem o foco. [Foco do teclado e teclas de atalho](/docs/pt/plugins/mods/interface#know-which-keys-your-mod-can-receive) explica quais teclas chegam até eles.
261 223
262Abra um painel com `focus: true` para solicitar o foco do teclado para ele. As letras digitadas chegam a um `Input` assim que ele tem o foco. Para escolher qual campo tem o foco quando o painel abre, consulte [Definir uma tecla de atalho e o primeiro foco](/docs/pt/plugins/mods/interface#set-a-hotkey-and-the-first-focus).224Abra um painel com `focus: true` para solicitar o foco do teclado para ele. As letras digitadas chegam a um `Input` assim que ele tem o foco. Para escolher qual campo tem o foco quando o painel abre, consulte [Definir uma tecla de atalho e o primeiro foco](/docs/pt/plugins/mods/interface#set-a-hotkey-and-the-first-focus).
263 225
264<h3 id="button">226### `Button`
265 `Button`
266</h3>
267 227
268Um botão executa `onPress`. Este exemplo mostra a forma padrão, um botão `plain` com uma tecla de atalho e um esmaecido:228Um botão executa `onPress`. Este exemplo mostra a forma padrão, um botão `plain` com uma tecla de atalho e um esmaecido:
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="Um painel com três botões, um por linha: Save entre colchetes, n: Next sem colchetes e com o n em cor, e Skip entre colchetes em cinza." 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="Um painel com três botões, um por linha: Save entre colchetes, n: Next sem colchetes e com o n em cor, e Skip entre colchetes em cinza." width="1872" height="262" data-path="images/mods-el-button-dark.png" />
284 242
285Um botão que tem o foco é desenhado em vídeo inverso. Aqui o usuário pressionou Tab duas vezes:243Um botão que tem o foco é desenhado em vídeo inverso. Aqui o usuário pressionou Tab duas vezes:
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="Os mesmos três botões, com o segundo, n: Next, desenhado em vídeo inverso." 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="Os mesmos três botões, com o segundo, n: Next, desenhado em vídeo inverso." 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
295Um `Input` é um campo de texto de uma linha que executa `onSubmit` quando o usuário pressiona Enter:249Um `Input` é um campo de texto de uma linha que executa `onSubmit` quando o usuário pressiona Enter:
296 250
307 261
308Sem o foco, o campo mostra seu rótulo e seu placeholder:262Sem o foco, o campo mostra seu rótulo e seu placeholder:
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="Um painel com uma linha: o rótulo Title, depois o placeholder Type a title and press Enter em cinza." 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="Um painel com uma linha: o rótulo Title, depois o placeholder Type a title and press Enter em cinza." width="1872" height="186" data-path="images/mods-el-input-dark.png" />
313 265
314Com o foco, o rótulo fica em negrito, um cursor aparece e o `submitLabel` é exibido após `⏎`:266Com o foco, o rótulo fica em negrito, um cursor aparece e o `submitLabel` é exibido apó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="O mesmo campo com seu rótulo em negrito, um cursor de bloco na primeira letra do placeholder e um sinal de retorno seguido da palavra 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="O mesmo campo com seu rótulo em negrito, um cursor de bloco na primeira letra do placeholder e um sinal de retorno seguido da palavra save." width="1872" height="186" data-path="images/mods-el-input-focused-dark.png" />
319 269
320Digitar substitui o placeholder:270Digitar substitui o placeholder:
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="O mesmo campo contendo as letras digitadas Rel, seguidas do sinal de retorno e da palavra 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="O mesmo campo contendo as letras digitadas Rel, seguidas do sinal de retorno e da palavra 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
330Um `Select` permite que o usuário escolha uma entre várias opções e executa `onSelect` com o `value` da opção:276Um `Select` permite que o usuário escolha uma entre várias opções e executa `onSelect` com o `value` da opção:
331 277
347 293
348Fechado, ele mostra seu rótulo e a opção atual:294Fechado, ele mostra seu rótulo e a opção atual:
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="Um painel com uma linha: o rótulo Format, a opção atual Markdown e uma pequena seta para baixo." 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="Um painel com uma linha: o rótulo Format, a opção atual Markdown e uma pequena seta para baixo." width="1872" height="186" data-path="images/mods-el-select-dark.png" />
353 297
354Aberto, ele lista suas opções e marca uma:298Aberto, ele lista suas opções e marca uma:
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="O seletor aberto, com suas três opções listadas abaixo do rótulo. A segunda opção, HTML, é desenhada em vídeo inverso." 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="O seletor aberto, com suas três opções listadas abaixo do rótulo. A segunda opção, HTML, é desenhada em vídeo inverso." width="1872" height="300" data-path="images/mods-el-select-moved-dark.png" />
359 301
360Depois que o usuário escolhe uma opção, a lista se fecha:302Depois que o usuário escolhe uma opção, a lista se fecha:
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="O seletor fechado novamente, agora mostrando HTML como a opção atual." 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="O seletor fechado novamente, agora mostrando HTML como a opção atual." width="1872" height="186" data-path="images/mods-el-select-picked-dark.png" />306## Desenhar imagens
365 307
366<h2 id="draw-pictures">308### `Raster`
367 Desenhar imagens
368</h2>
369
370<h3 id="raster">
371 `Raster`
372</h3>
373 309
374Um `Raster` é uma grade de células de caracteres coloridas, para um mapa de calor, um sparkline ou um tabuleiro de jogo. O terminal o desenha. Este exemplo usa a função `cellsOf` do módulo inicial, que empacota as células na string que um `Raster` recebe. [Desenhar uma grade de células coloridas](/docs/pt/plugins/mods/interface#draw-a-grid-of-colored-cells) explica isso:310Um `Raster` é uma grade de células de caracteres coloridas, para um mapa de calor, um sparkline ou um tabuleiro de jogo. O terminal o desenha. Este exemplo usa a função `cellsOf` do módulo inicial, que empacota as células na string que um `Raster` recebe. [Desenhar uma grade de células coloridas](/docs/pt/plugins/mods/interface#draw-a-grid-of-colored-cells) explica isso:
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="Um painel com uma pequena grade de blocos coloridos, duas linhas de três: verde, âmbar e vermelho, depois verde, verde e âmbar." 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="Um painel com uma pequena grade de blocos coloridos, duas linhas de três: verde, âmbar e vermelho, depois verde, verde e âmbar." width="1872" height="224" data-path="images/mods-el-raster-dark.png" />
391 325
392Um `Raster` arredonda cada cor para uma paleta menor, então `0x2e7d32` é desenhado como `#337733`.326Um `Raster` arredonda cada cor para uma paleta menor, então `0x2e7d32` é desenhado como `#337733`.
393 327
394<h3 id="svg">328### `Svg`
395 `Svg`
396</h3>
397 329
398Um `Svg` desenha um documento SVG no aplicativo Desktop e na extensão do VS Code:330Um `Svg` desenha um documento SVG no aplicativo Desktop e na extensão do VS Code:
399 331
409 341
410No terminal, um painel que retorna apenas um `Svg` abre vazio. Para desenhar outra coisa ali, verifique [`e.surface`](/docs/pt/plugins/mods/interface#pick-where-to-draw) e retorne uma árvore diferente.342No terminal, um painel que retorna apenas um `Svg` abre vazio. Para desenhar outra coisa ali, verifique [`e.surface`](/docs/pt/plugins/mods/interface#pick-where-to-draw) e retorne uma árvore diferente.
411 343
412<h3 id="image-and-client">344### `Image` e `Client`
413 `Image` e `Client`
414</h3>
415 345
416Mais dois elementos não têm exemplo aqui. `Image` desenha um PNG ou pixels brutos no terminal. `Client` é uma região que um segundo arquivo seu desenha, para animação e entrada de ponteiro. A [referência de elementos](/docs/pt/plugins/mods/reference#elements) lista suas props.346Mais dois elementos não têm exemplo aqui. `Image` desenha um PNG ou pixels brutos no terminal. `Client` é uma região que um segundo arquivo seu desenha, para animação e entrada de ponteiro. A [referência de elementos](/docs/pt/plugins/mods/reference#elements) lista suas props.
417 347
423 353
424Se os usuários do seu mod virem o texto esmaecido em um terminal que de fato desenha essas imagens com placeholders, eles podem definir [`CLAUDE_CODE_FORCE_TERMINAL_IMAGES`](/docs/pt/env-vars) como `1`, o que ignora a detecção. Dentro do tmux ou do screen isso não ajuda: o texto `alt` desaparece, e o Claude Code envia a imagem sem encapsulá-la para o passthrough do tmux ou do screen.354Se os usuários do seu mod virem o texto esmaecido em um terminal que de fato desenha essas imagens com placeholders, eles podem definir [`CLAUDE_CODE_FORCE_TERMINAL_IMAGES`](/docs/pt/env-vars) como `1`, o que ignora a detecção. Dentro do tmux ou do screen isso não ajuda: o texto `alt` desaparece, e o Claude Code envia a imagem sem encapsulá-la para o passthrough do tmux ou do screen.
425 355
426<h2 id="see-where-a-mod-can-draw">356## Ver onde um mod pode desenhar
427 Ver onde um mod pode desenhar
428</h2>
429 357
430Todos os exemplos desenham em um painel. Um mod também pode desenhar em outros lugares e chamar o Claude Code para mostrar algo por ele:358Todos os exemplos desenham em um painel. Um mod também pode desenhar em outros lugares e chamar o Claude Code para mostrar algo por ele:
431 359
434* **Toast, linha de status e linha de log**: [Mostrar algo sem iniciar um turno](/docs/pt/plugins/mods/api#show-something-without-starting-a-turn)362* **Toast, linha de status e linha de log**: [Mostrar algo sem iniciar um turno](/docs/pt/plugins/mods/api#show-something-without-starting-a-turn)
435* **Diálogo de pergunta**: [Reter uma chamada de ferramenta até que o usuário decida](/docs/pt/plugins/mods/events#hold-a-tool-call-until-the-user-decides)363* **Diálogo de pergunta**: [Reter uma chamada de ferramenta até que o usuário decida](/docs/pt/plugins/mods/events#hold-a-tool-call-until-the-user-decides)
436 364
437<h2 id="next-steps">365## Próximos passos
438 Próximos passos
439</h2>
440 366
441* [Desenhar na interface](/docs/pt/plugins/mods/interface): construa um painel com abas, passo a passo367* [Desenhar na interface](/docs/pt/plugins/mods/interface): construa um painel com abas, passo a passo
442* [Testar um desenho](/docs/pt/plugins/mods/test#test-a-drawing): pressione seus botões a partir de um teste368* [Testar um desenho](/docs/pt/plugins/mods/test#test-a-drawing): pressione seus botões a partir de um teste