10 10
11Para aprender cómo funciona el dibujo, comienza con [Dibujar en la interfaz](/docs/es/plugins/mods/interface). Para las props principales y qué aplicaciones dibujan cada elemento, consulta la [referencia de elementos](/docs/es/plugins/mods/reference#elements). Las [declaraciones de tipos](/docs/es/plugins/mods/create#get-the-types-for-your-build) enumeran todas las props.11Para aprender cómo funciona el dibujo, comienza con [Dibujar en la interfaz](/docs/es/plugins/mods/interface). Para las props principales y qué aplicaciones dibujan cada elemento, consulta la [referencia de elementos](/docs/es/plugins/mods/reference#elements). Las [declaraciones de tipos](/docs/es/plugins/mods/create#get-the-types-for-your-build) enumeran todas las props.
12 12
13<h2 id="try-a-sample">13## Prueba un ejemplo
14 Prueba un ejemplo
15</h2>
16 14
17Los ejemplos de esta página son fragmentos, no mods completos. Cada uno es el código de un elemento y de todo lo que está anidado dentro de él.15Los ejemplos de esta página son fragmentos, no mods completos. Cada uno es el código de un elemento y de todo lo que está anidado dentro de él.
18 16
19Para ver un ejemplo en tu propia terminal, crea el pequeño mod de estos pasos y pega el ejemplo en él. El mod agrega un comando `/gallery` que abre un panel y dibuja el ejemplo allí. Un [panel](/docs/es/plugins/mods/interface#pick-where-to-draw) es una barra lateral junto a la transcripción en una terminal ancha de pantalla completa, o una región enmarcada encima del prompt en caso contrario.17Para ver un ejemplo en tu propia terminal, crea el pequeño mod de estos pasos y pega el ejemplo en él. El mod agrega un comando `/gallery` que abre un panel y dibuja el ejemplo allí. Un [panel](/docs/es/plugins/mods/interface#pick-where-to-draw) es una barra lateral junto a la transcripción en una terminal ancha de pantalla completa, o una región enmarcada encima del prompt en caso contrario.
20 18
21<Steps>19**1. Crea el mod**
22 <Step title="Crea el mod">
23 Crea un directorio llamado `gallery` con los directorios `.claude-plugin` y `hooks` dentro. [Crear un mod](/docs/es/plugins/mods/create#write-a-mod-yourself) explica los archivos.
24 20
25 Guarda el manifiesto como `gallery/.claude-plugin/plugin.json`:21Crea un directorio llamado `gallery` con los directorios `.claude-plugin` y `hooks` dentro. [Crear un mod](/docs/es/plugins/mods/create#write-a-mod-yourself) explica los archivos.
26 22
27 ```json gallery/.claude-plugin/plugin.json theme={null}23Guarda el manifiesto 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 Indica tu punto de entrada en `gallery/hooks/hooks.json`:34Indica tu punto de entrada en `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 Guarda el código como `gallery/hooks/register.js`. Agrega un comando `/gallery` que abre un panel y dibuja `Plain text` en ese panel:42Guarda el código como `gallery/hooks/register.js`. Agrega un comando `/gallery` que abre un panel y dibuja `Plain text` en ese panel:
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. Ejecuta el mod**
79 78
80 <Step title="Ejecuta el mod">79En tu shell, inicia Claude Code desde el directorio que contiene `gallery`:
81 En tu shell, inicia Claude Code desde el directorio que contiene `gallery`:
82 80
83 ```bash theme={null}81```bash theme={null}
84 claude --plugin-dir ./gallery82claude --plugin-dir ./gallery
85 ```83```
86 84
87 En el prompt de Claude Code, ejecuta `/gallery`. Se abre un panel con `Plain text`.85En el prompt de Claude Code, ejecuta `/gallery`. Se abre un panel con `Plain text`.
88 </Step>
89 86
90 <Step title="Sustituye por un ejemplo">87**3. Sustituye por un ejemplo**
91 Copia un ejemplo de esta página. En `register.js`, pégalo sobre `Text({ children: ['Plain text'] })`, de modo que quede después de `return`, y guarda el archivo. Claude Code recarga el módulo cada vez que guardas, así que ejecuta `/gallery` de nuevo para ver el nuevo ejemplo.
92 </Step>
93</Steps>
94 88
95<h2 id="pick-an-element">89Copia un ejemplo de esta página. En `register.js`, pégalo sobre `Text({ children: ['Plain text'] })`, de modo que quede después de `return`, y guarda el archivo. Claude Code recarga el módulo cada vez que guardas, así que ejecuta `/gallery` de nuevo para ver el nuevo ejemplo.
96 Elige un elemento90
97</h2>91## Elige un elemento
98 92
99Los ejemplos están agrupados según lo que quieras mostrar en pantalla:93Los ejemplos están agrupados según lo que quieras mostrar en pantalla:
100 94
104* **[Recibir entrada](#take-input)**: `Button`, `Input` y `Select`98* **[Recibir entrada](#take-input)**: `Button`, `Input` y `Select`
105* **[Dibujar imágenes](#draw-pictures)**: `Raster`, `Svg`, `Image` y `Client`99* **[Dibujar imágenes](#draw-pictures)**: `Raster`, `Svg`, `Image` y `Client`
106 100
107<h2 id="show-text">101## Mostrar texto
108 Mostrar texto
109</h2>
110 102
111Tres elementos ponen palabras en la pantalla: `Text` para tu propio estilo, `Markdown` para contenido que ya tiene formato y `Link` para una URL.103Tres elementos ponen palabras en la pantalla: `Text` para tu propio estilo, `Markdown` para contenido que ya tiene formato y `Link` para una URL.
112 104
113<h3 id="text">105### `Text`
114 `Text`
115</h3>
116 106
117`Text` dibuja una cadena con los estilos que le indiques. Este ejemplo muestra texto sin formato y ocho estilos, uno en cada línea:107`Text` dibuja una cadena con los estilos que le indiques. Este ejemplo muestra texto sin formato y ocho estilos, uno en cada línea:
118 108
133})123})
134```124```
135 125
136<img src="https://mintcdn.com/claude-code/EXkwf0kKMewZsyod/images/mods-el-text-light.png?fit=max&auto=format&n=EXkwf0kKMewZsyod&q=85&s=90724ce3953d9347b61b6a9266fda451" className="dark:hidden" alt="Un panel con nueve líneas de texto, cada una nombrada según su estilo: plain, bold, italic, underline, strikethrough, dimColor en gris, inverse, color red y backgroundColor blue." width="1872" height="490" data-path="images/mods-el-text-light.png" />126
137
138<img src="https://mintcdn.com/claude-code/EXkwf0kKMewZsyod/images/mods-el-text-dark.png?fit=max&auto=format&n=EXkwf0kKMewZsyod&q=85&s=790dd3465e06db0842639d0d8fcbbc96" className="hidden dark:block" alt="Un panel con nueve líneas de texto, cada una nombrada según su estilo: plain, bold, italic, underline, strikethrough, dimColor en gris, inverse, color red y backgroundColor blue." width="1872" height="490" data-path="images/mods-el-text-dark.png" />
139 127
140`dimColor` dibuja el texto en gris. `backgroundColor` rellena solo el ancho del texto.128`dimColor` dibuja el texto en gris. `backgroundColor` rellena solo el ancho del texto.
141 129
142<h3 id="markdown">130### `Markdown`
143 `Markdown`
144</h3>
145 131
146`Markdown` da formato al texto de la misma manera en que se formatean las respuestas de Claude. Pasa el contenido en `text`, no en `children`:132`Markdown` da formato al texto de la misma manera en que se formatean las respuestas de Claude. Pasa el contenido en `text`, no en `children`:
147 133
151})137})
152```138```
153 139
154<img src="https://mintcdn.com/claude-code/EXkwf0kKMewZsyod/images/mods-el-markdown-light.png?fit=max&auto=format&n=EXkwf0kKMewZsyod&q=85&s=e40eacc4e3fbe06eb003f4463f552ec1" className="dark:hidden" alt="Un panel con un encabezado en negrita, Release notes, seguido de una oración con una palabra en negrita y una palabra de código en color, una lista de dos elementos y una cita dibujada en cursiva con una barra a su izquierda." width="1872" height="452" data-path="images/mods-el-markdown-light.png" />140
155
156<img src="https://mintcdn.com/claude-code/EXkwf0kKMewZsyod/images/mods-el-markdown-dark.png?fit=max&auto=format&n=EXkwf0kKMewZsyod&q=85&s=2cc342ed0c58e752c425fff3c95a33a6" className="hidden dark:block" alt="Un panel con un encabezado en negrita, Release notes, seguido de una oración con una palabra en negrita y una palabra de código en color, una lista de dos elementos y una cita dibujada en cursiva con una barra a su izquierda." width="1872" height="452" data-path="images/mods-el-markdown-dark.png" />
157 141
158Un encabezado se dibuja en negrita sin sus marcas `#`. El código en línea se dibuja en color sin sus comillas invertidas. Una cita se dibuja en cursiva con una barra a su izquierda.142Un encabezado se dibuja en negrita sin sus marcas `#`. El código en línea se dibuja en color sin sus comillas invertidas. Una cita se dibuja en cursiva con una barra a su izquierda.
159 143
160<h3 id="link">144### `Link`
161 `Link`
162</h3>
163 145
164`Link` dibuja una etiqueta seguida de su URL:146`Link` dibuja una etiqueta seguida de su URL:
165 147
167Link({ href: 'https://code.claude.com/docs', label: 'Claude Code docs' })149Link({ href: 'https://code.claude.com/docs', label: 'Claude Code docs' })
168```150```
169 151
170<img src="https://mintcdn.com/claude-code/EXkwf0kKMewZsyod/images/mods-el-link-light.png?fit=max&auto=format&n=EXkwf0kKMewZsyod&q=85&s=8217bd2dfb561a8ba57023c6d89ea977" className="dark:hidden" alt="Un panel con una línea: la etiqueta Claude Code docs, seguida de la URL en gris." width="1872" height="186" data-path="images/mods-el-link-light.png" />152
171
172<img src="https://mintcdn.com/claude-code/EXkwf0kKMewZsyod/images/mods-el-link-dark.png?fit=max&auto=format&n=EXkwf0kKMewZsyod&q=85&s=cd32f222a7d3530b070f58f5f189a1f8" className="hidden dark:block" alt="Un panel con una línea: la etiqueta Claude Code docs, seguida de la URL en gris." width="1872" height="186" data-path="images/mods-el-link-dark.png" />
173 153
174La terminal dibuja la URL como texto después de la etiqueta. Que un clic la abra o no depende de la terminal del usuario.154La terminal dibuja la URL como texto después de la etiqueta. Que un clic la abra o no depende de la terminal del usuario.
175 155
176<h2 id="show-code-and-changes">156## Mostrar código y cambios
177 Mostrar código y cambios
178</h2>
179 157
180`Code` dibuja texto fuente con los propios colores de sintaxis de Claude Code, o un diff. En la extensión de VS Code, `Code` muestra su `source` como texto plano, sin los colores, los números de línea ni el sombreado de diff de estas capturas de pantalla.158`Code` dibuja texto fuente con los propios colores de sintaxis de Claude Code, o un diff. En la extensión de VS Code, `Code` muestra su `source` como texto plano, sin los colores, los números de línea ni el sombreado de diff de estas capturas de pantalla.
181 159
182<h3 id="code">160### `Code`
183 `Code`
184</h3>
185 161
186Indica el `language`, o pasa un `path` para que Claude Code lo infiera a partir de él. Con `startLine`, las líneas se numeran a partir de ese número:162Indica el `language`, o pasa un `path` para que Claude Code lo infiera a partir de él. Con `startLine`, las líneas se numeran a partir de ese 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="Un panel con dos líneas numeradas de JavaScript con colores de sintaxis." width="1872" height="224" data-path="images/mods-el-code-light.png" />172
197
198<img src="https://mintcdn.com/claude-code/EXkwf0kKMewZsyod/images/mods-el-code-dark.png?fit=max&auto=format&n=EXkwf0kKMewZsyod&q=85&s=59f797371dd91b16b874a382b784b668" className="hidden dark:block" alt="Un panel con dos líneas numeradas de JavaScript con colores de sintaxis." width="1872" height="224" data-path="images/mods-el-code-dark.png" />
199 173
200Los colores provienen del tema del usuario.174Los colores provienen del tema del usuario.
201 175
202<h3 id="code-as-a-diff">176### `Code` como diff
203 `Code` como diff
204</h3>
205 177
206Con `format: 'diff'`, `source` es uno o más fragmentos (hunks) de diff unificado:178Con `format: 'diff'`, `source` es uno o más fragmentos (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="Un panel con un diff de cuatro líneas. La línea eliminada está sombreada en rojo y la línea añadida en verde, cada una con su número de línea. En la línea añadida, las palabras that runs code tienen un sombreado más intenso." width="1872" height="300" data-path="images/mods-el-diff-light.png" />187
216
217<img src="https://mintcdn.com/claude-code/EXkwf0kKMewZsyod/images/mods-el-diff-dark.png?fit=max&auto=format&n=EXkwf0kKMewZsyod&q=85&s=9db96f34381bac8bebc32d41859b8808" className="hidden dark:block" alt="Un panel con un diff de cuatro líneas. La línea eliminada está sombreada en rojo y la línea añadida en verde, cada una con su número de línea. En la línea añadida, las palabras that runs code tienen un sombreado más intenso." width="1872" height="300" data-path="images/mods-el-diff-dark.png" />
218 188
219Claude Code dibuja números de línea en lugar de la línea `@@`. Cuando una línea eliminada y una línea añadida se parecen, las palabras que cambiaron reciben un sombreado más intenso.189Claude Code dibuja números de línea en lugar de la línea `@@`. Cuando una línea eliminada y una línea añadida se parecen, las palabras que cambiaron reciben un sombreado más intenso.
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` distribuye lo que contiene en una fila o una columna, y puede dibujar un borde. Este ejemplo coloca una fila de palabras sobre un cuadro con borde:195`Box` distribuye lo que contiene en una fila o una columna, y puede dibujar un borde. Este ejemplo coloca una fila de palabras sobre un cuadro con borde:
230 196
247})213})
248```214```
249 215
250<img src="https://mintcdn.com/claude-code/EXkwf0kKMewZsyod/images/mods-el-box-light.png?fit=max&auto=format&n=EXkwf0kKMewZsyod&q=85&s=cb9263bb02f5c8afb6e5b8450e0cdadc" className="dark:hidden" alt="Un panel con tres palabras en una fila, separadas por cuatro columnas, luego una fila en blanco y después un borde redondeado alrededor de una línea de texto. El borde abarca todo el ancho del panel." width="1872" height="338" data-path="images/mods-el-box-light.png" />216
251
252<img src="https://mintcdn.com/claude-code/EXkwf0kKMewZsyod/images/mods-el-box-dark.png?fit=max&auto=format&n=EXkwf0kKMewZsyod&q=85&s=dae83407af4d667a58717f68f13848e2" className="hidden dark:block" alt="Un panel con tres palabras en una fila, separadas por cuatro columnas, luego una fila en blanco y después un borde redondeado alrededor de una línea de texto. El borde abarca todo el ancho del panel." width="1872" height="338" data-path="images/mods-el-box-dark.png" />
253 217
254El borde se extiende hasta el ancho del panel.218El borde se extiende hasta el ancho del panel.
255 219
256<h2 id="take-input">220## Recibir entrada
257 Recibir entrada
258</h2>
259 221
260`Button`, `Input` y `Select` son controles: el usuario se mueve entre ellos con Tab y usa el que tiene el foco. [Foco del teclado y teclas de acceso rápido](/docs/es/plugins/mods/interface#know-which-keys-your-mod-can-receive) explica qué teclas llegan a ellos.222`Button`, `Input` y `Select` son controles: el usuario se mueve entre ellos con Tab y usa el que tiene el foco. [Foco del teclado y teclas de acceso rápido](/docs/es/plugins/mods/interface#know-which-keys-your-mod-can-receive) explica qué teclas llegan a ellos.
261 223
262Abre un panel con `focus: true` para solicitar el foco del teclado para ese panel. Las letras que escribes llegan a un `Input` una vez que tiene el foco. Para elegir qué campo tiene el foco cuando se abre el panel, consulta [Establecer una tecla de acceso rápido y el primer foco](/docs/es/plugins/mods/interface#set-a-hotkey-and-the-first-focus).224Abre un panel con `focus: true` para solicitar el foco del teclado para ese panel. Las letras que escribes llegan a un `Input` una vez que tiene el foco. Para elegir qué campo tiene el foco cuando se abre el panel, consulta [Establecer una tecla de acceso rápido y el primer foco](/docs/es/plugins/mods/interface#set-a-hotkey-and-the-first-focus).
263 225
264<h3 id="button">226### `Button`
265 `Button`
266</h3>
267 227
268Un botón ejecuta `onPress`. Este ejemplo muestra la forma predeterminada, un botón `plain` con una tecla de acceso rápido y uno atenuado:228Un botón ejecuta `onPress`. Este ejemplo muestra la forma predeterminada, un botón `plain` con una tecla de acceso rápido y uno atenuado:
269 229
278})238})
279```239```
280 240
281<img src="https://mintcdn.com/claude-code/EXkwf0kKMewZsyod/images/mods-el-button-light.png?fit=max&auto=format&n=EXkwf0kKMewZsyod&q=85&s=8c638c15e12d9736f327dfcaa797b512" className="dark:hidden" alt="Un panel con tres botones, uno por línea: Save entre corchetes, n: Next sin corchetes y con la n en color, y Skip entre corchetes en gris." width="1872" height="262" data-path="images/mods-el-button-light.png" />241
282
283<img src="https://mintcdn.com/claude-code/EXkwf0kKMewZsyod/images/mods-el-button-dark.png?fit=max&auto=format&n=EXkwf0kKMewZsyod&q=85&s=6a88a1fe18ba63b050366dcfab14be45" className="hidden dark:block" alt="Un panel con tres botones, uno por línea: Save entre corchetes, n: Next sin corchetes y con la n en color, y Skip entre corchetes en gris." width="1872" height="262" data-path="images/mods-el-button-dark.png" />
284 242
285Un botón que tiene el foco se dibuja en video inverso. Aquí el usuario presionó Tab dos veces:243Un botón que tiene el foco se dibuja en video inverso. Aquí el usuario presionó Tab dos veces:
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="Los mismos tres botones, con el segundo, n: Next, dibujado en video 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="Los mismos tres botones, con el segundo, n: Next, dibujado en video 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
295Un `Input` es un campo de texto de una línea que ejecuta `onSubmit` cuando el usuario presiona Enter:249Un `Input` es un campo de texto de una línea que ejecuta `onSubmit` cuando el usuario presiona Enter:
296 250
307 261
308Sin el foco, el campo muestra su etiqueta y su texto de marcador de posición:262Sin el foco, el campo muestra su etiqueta y su texto de marcador de posición:
309 263
310<img src="https://mintcdn.com/claude-code/EXkwf0kKMewZsyod/images/mods-el-input-light.png?fit=max&auto=format&n=EXkwf0kKMewZsyod&q=85&s=7d580be1aaf5507032e1962b9167d725" className="dark:hidden" alt="Un panel con una línea: la etiqueta Title y luego el marcador de posición Type a title and press Enter en gris." width="1872" height="186" data-path="images/mods-el-input-light.png" />264
311
312<img src="https://mintcdn.com/claude-code/EXkwf0kKMewZsyod/images/mods-el-input-dark.png?fit=max&auto=format&n=EXkwf0kKMewZsyod&q=85&s=9d254a8adc5959ba173717fb45eabd52" className="hidden dark:block" alt="Un panel con una línea: la etiqueta Title y luego el marcador de posición Type a title and press Enter en gris." width="1872" height="186" data-path="images/mods-el-input-dark.png" />
313 265
314Con el foco, la etiqueta se pone en negrita, aparece un cursor y el `submitLabel` se muestra después de `⏎`:266Con el foco, la etiqueta se pone en negrita, aparece un cursor y el `submitLabel` se muestra después de `⏎`:
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="El mismo campo con su etiqueta en negrita, un cursor de bloque sobre la primera letra del marcador de posición y un signo de retorno seguido de la palabra 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="El mismo campo con su etiqueta en negrita, un cursor de bloque sobre la primera letra del marcador de posición y un signo de retorno seguido de la palabra save." width="1872" height="186" data-path="images/mods-el-input-focused-dark.png" />
319 269
320Al escribir, se reemplaza el marcador de posición:270Al escribir, se reemplaza el marcador de posición:
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="El mismo campo con las letras escritas Rel, seguidas del signo de retorno y la palabra 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="El mismo campo con las letras escritas Rel, seguidas del signo de retorno y la palabra save." width="1872" height="186" data-path="images/mods-el-input-typed-dark.png" />274### `Select`
325
326<h3 id="select">
327 `Select`
328</h3>
329 275
330Un `Select` permite al usuario elegir una de varias opciones y ejecuta `onSelect` con el `value` de la opción:276Un `Select` permite al usuario elegir una de varias opciones y ejecuta `onSelect` con el `value` de la opción:
331 277
347 293
348Cerrado, muestra su etiqueta y la opción actual:294Cerrado, muestra su etiqueta y la opción actual:
349 295
350<img src="https://mintcdn.com/claude-code/EXkwf0kKMewZsyod/images/mods-el-select-light.png?fit=max&auto=format&n=EXkwf0kKMewZsyod&q=85&s=4e3b18268ffd87d2cad06442e6d661a9" className="dark:hidden" alt="Un panel con una línea: la etiqueta Format, la opción actual Markdown y una pequeña flecha hacia abajo." width="1872" height="186" data-path="images/mods-el-select-light.png" />296
351
352<img src="https://mintcdn.com/claude-code/EXkwf0kKMewZsyod/images/mods-el-select-dark.png?fit=max&auto=format&n=EXkwf0kKMewZsyod&q=85&s=1e329e6aee748c2dd70e92dbe4960de0" className="hidden dark:block" alt="Un panel con una línea: la etiqueta Format, la opción actual Markdown y una pequeña flecha hacia abajo." width="1872" height="186" data-path="images/mods-el-select-dark.png" />
353 297
354Abierto, enumera sus opciones y marca una:298Abierto, enumera sus opciones y marca una:
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="El selector abierto, con sus tres opciones enumeradas debajo de la etiqueta. La segunda opción, HTML, está dibujada en video 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="El selector abierto, con sus tres opciones enumeradas debajo de la etiqueta. La segunda opción, HTML, está dibujada en video inverso." width="1872" height="300" data-path="images/mods-el-select-moved-dark.png" />
359 301
360Después de que el usuario elige una opción, la lista se cierra:302Después de que el usuario elige una opción, la lista se cierra:
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="El selector cerrado de nuevo, que ahora muestra HTML como la opción actual." 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="El selector cerrado de nuevo, que ahora muestra HTML como la opción actual." width="1872" height="186" data-path="images/mods-el-select-picked-dark.png" />306## Dibujar imágenes
365 307
366<h2 id="draw-pictures">308### `Raster`
367 Dibujar imágenes
368</h2>
369
370<h3 id="raster">
371 `Raster`
372</h3>
373 309
374Un `Raster` es una cuadrícula de celdas de caracteres de colores, para un mapa de calor, un sparkline o un tablero de juego. La terminal lo dibuja. Este ejemplo usa la función `cellsOf` del módulo inicial, que empaqueta las celdas en la cadena que recibe un `Raster`. [Dibujar una cuadrícula de celdas de colores](/docs/es/plugins/mods/interface#draw-a-grid-of-colored-cells) lo explica:310Un `Raster` es una cuadrícula de celdas de caracteres de colores, para un mapa de calor, un sparkline o un tablero de juego. La terminal lo dibuja. Este ejemplo usa la función `cellsOf` del módulo inicial, que empaqueta las celdas en la cadena que recibe un `Raster`. [Dibujar una cuadrícula de celdas de colores](/docs/es/plugins/mods/interface#draw-a-grid-of-colored-cells) lo explica:
375 311
385})321})
386```322```
387 323
388<img src="https://mintcdn.com/claude-code/EXkwf0kKMewZsyod/images/mods-el-raster-light.png?fit=max&auto=format&n=EXkwf0kKMewZsyod&q=85&s=5ed719481d3dd45b568bab696e57bf16" className="dark:hidden" alt="Un panel con una pequeña cuadrícula de bloques de colores, dos filas de tres: verde, ámbar y rojo, luego verde, verde y á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="Un panel con una pequeña cuadrícula de bloques de colores, dos filas de tres: verde, ámbar y rojo, luego verde, verde y ámbar." width="1872" height="224" data-path="images/mods-el-raster-dark.png" />
391 325
392Un `Raster` redondea cada color a una paleta más pequeña, por lo que `0x2e7d32` se dibuja como `#337733`.326Un `Raster` redondea cada color a una paleta más pequeña, por lo que `0x2e7d32` se dibuja como `#337733`.
393 327
394<h3 id="svg">328### `Svg`
395 `Svg`
396</h3>
397 329
398Un `Svg` dibuja un documento SVG en la aplicación Desktop y en la extensión de VS Code:330Un `Svg` dibuja un documento SVG en la aplicación Desktop y en la extensión de VS Code:
399 331
409 341
410En la terminal, un panel que devuelve solo un `Svg` se abre vacío. Para dibujar otra cosa allí, comprueba [`e.surface`](/docs/es/plugins/mods/interface#pick-where-to-draw) y devuelve un árbol diferente.342En la terminal, un panel que devuelve solo un `Svg` se abre vacío. Para dibujar otra cosa allí, comprueba [`e.surface`](/docs/es/plugins/mods/interface#pick-where-to-draw) y devuelve un árbol diferente.
411 343
412<h3 id="image-and-client">344### `Image` y `Client`
413 `Image` y `Client`
414</h3>
415 345
416Hay dos elementos más que no tienen ejemplo aquí. `Image` dibuja un PNG o píxeles sin procesar en la terminal. `Client` es una región que dibuja un segundo archivo tuyo, para animación y entrada de puntero. La [referencia de elementos](/docs/es/plugins/mods/reference#elements) enumera sus props.346Hay dos elementos más que no tienen ejemplo aquí. `Image` dibuja un PNG o píxeles sin procesar en la terminal. `Client` es una región que dibuja un segundo archivo tuyo, para animación y entrada de puntero. La [referencia de elementos](/docs/es/plugins/mods/reference#elements) enumera sus props.
417 347
423 353
424Si los usuarios de tu mod ven el texto atenuado en una terminal que sí dibuja esas imágenes de marcador de posición, pueden establecer [`CLAUDE_CODE_FORCE_TERMINAL_IMAGES`](/docs/es/env-vars) en `1`, lo que omite la detección. Dentro de tmux o screen eso no ayuda: el texto `alt` desaparece y Claude Code envía la imagen sin envolverla para el paso directo (passthrough) de tmux o screen.354Si los usuarios de tu mod ven el texto atenuado en una terminal que sí dibuja esas imágenes de marcador de posición, pueden establecer [`CLAUDE_CODE_FORCE_TERMINAL_IMAGES`](/docs/es/env-vars) en `1`, lo que omite la detección. Dentro de tmux o screen eso no ayuda: el texto `alt` desaparece y Claude Code envía la imagen sin envolverla para el paso directo (passthrough) de tmux o screen.
425 355
426<h2 id="see-where-a-mod-can-draw">356## Ve dónde puede dibujar un mod
427 Ve dónde puede dibujar un mod
428</h2>
429 357
430Todos los ejemplos dibujan en un panel. Un mod también puede dibujar en otros lugares y llamar a Claude Code para que muestre algo por él:358Todos los ejemplos dibujan en un panel. Un mod también puede dibujar en otros lugares y llamar a Claude Code para que muestre algo por él:
431 359
434* **Toast, línea de estado y línea de registro**: [Muestra algo sin iniciar un turno](/docs/es/plugins/mods/api#show-something-without-starting-a-turn)362* **Toast, línea de estado y línea de registro**: [Muestra algo sin iniciar un turno](/docs/es/plugins/mods/api#show-something-without-starting-a-turn)
435* **Diálogo de pregunta**: [Retén una llamada a herramienta hasta que el usuario decida](/docs/es/plugins/mods/events#hold-a-tool-call-until-the-user-decides)363* **Diálogo de pregunta**: [Retén una llamada a herramienta hasta que el usuario decida](/docs/es/plugins/mods/events#hold-a-tool-call-until-the-user-decides)
436 364
437<h2 id="next-steps">365## Próximos pasos
438 Próximos pasos
439</h2>
440 366
441* [Dibuja en la interfaz](/docs/es/plugins/mods/interface): crea un panel con pestañas, paso a paso367* [Dibuja en la interfaz](/docs/es/plugins/mods/interface): crea un panel con pestañas, paso a paso
442* [Prueba un dibujo](/docs/es/plugins/mods/test#test-a-drawing): presiona tus botones desde una prueba368* [Prueba un dibujo](/docs/es/plugins/mods/test#test-a-drawing): presiona tus botones desde una prueba