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# Galeri antarmuka untuk mod
6
7> Lihat elemen antarmuka yang dapat digambar oleh mod Claude Code, seperti teks, tombol, kolom, Markdown, kode, dan diff, beserta contoh kode dan tangkapan layar terminal.
8
9Sebuah mod menggambar antarmukanya dari elemen: teks, kotak, tombol, kolom, dan beberapa elemen yang memformat konten untuk Anda. Contoh-contoh di sini menunjukkan kode yang menggambar sebuah elemen, dan sebagian besar disertai tangkapan layar hasilnya di panel terminal, sehingga Anda dapat memilih elemen berdasarkan tampilannya.
10
11Untuk mempelajari cara kerja penggambaran, mulailah dengan [Menggambar di antarmuka](/docs/id/plugins/mods/interface). Untuk props utama dan aplikasi mana yang menggambar setiap elemen, lihat [referensi elemen](/docs/id/plugins/mods/reference#elements). [Deklarasi tipe](/docs/id/plugins/mods/create#get-the-types-for-your-build) mencantumkan setiap prop.
12
13<h2 id="try-a-sample">
14 Mencoba contoh
15</h2>
16
17Contoh-contoh di halaman ini adalah cuplikan, bukan mod utuh. Masing-masing adalah kode untuk satu elemen dan apa pun yang bersarang di dalamnya.
18
19Untuk melihat contoh di terminal Anda sendiri, buat mod kecil dengan langkah-langkah berikut dan tempelkan contoh ke dalamnya. Mod ini menambahkan perintah `/gallery` yang membuka panel dan menggambar contoh di sana. [Panel](/docs/id/plugins/mods/interface#pick-where-to-draw) adalah bilah samping di sebelah transkrip pada terminal layar penuh yang lebar, atau wilayah berbingkai di atas prompt jika tidak.
20
21<Steps>
22 <Step title="Buat mod">
23 Buat direktori bernama `gallery` dengan direktori `.claude-plugin` dan `hooks` di dalamnya. [Membuat mod](/docs/id/plugins/mods/create#write-a-mod-yourself) menjelaskan file-filenya.
24
25 Simpan manifes sebagai `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 Tentukan titik masuk Anda di `gallery/hooks/hooks.json`:
37
38 ```json gallery/hooks/hooks.json theme={null}
39 {
40 "modules": ["./register.js"]
41 }
42 ```
43
44 Simpan kode sebagai `gallery/hooks/register.js`. Kode ini menambahkan perintah `/gallery` yang membuka panel, dan menggambar `Plain text` di panel tersebut:
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="Jalankan mod">
81 Di shell Anda, jalankan Claude Code dari direktori yang berisi `gallery`:
82
83 ```bash theme={null}
84 claude --plugin-dir ./gallery
85 ```
86
87 Di prompt Claude Code, jalankan `/gallery`. Sebuah panel terbuka dengan `Plain text` di dalamnya.
88 </Step>
89
90 <Step title="Ganti dengan contoh">
91 Salin contoh dari halaman ini. Di `register.js`, tempelkan contoh tersebut menggantikan `Text({ children: ['Plain text'] })`, sehingga berada setelah `return`, lalu simpan file. Claude Code memuat ulang modul setiap kali Anda menyimpan, jadi jalankan `/gallery` lagi untuk melihat contoh yang baru.
92 </Step>
93</Steps>
94
95<h2 id="pick-an-element">
96 Memilih elemen
97</h2>
98
99Contoh-contoh dikelompokkan berdasarkan apa yang ingin Anda tampilkan di layar:
100
101* **[Menampilkan teks](#show-text)**: `Text`, `Markdown`, dan `Link`
102* **[Menampilkan kode dan perubahan](#show-code-and-changes)**: `Code`
103* **[Mengatur elemen](#arrange-elements)**: `Box`
104* **[Menerima input](#take-input)**: `Button`, `Input`, dan `Select`
105* **[Menggambar gambar](#draw-pictures)**: `Raster`, `Svg`, `Image`, dan `Client`
106
107<h2 id="show-text">
108 Menampilkan teks
109</h2>
110
111Tiga elemen menampilkan kata-kata di layar: `Text` untuk gaya Anda sendiri, `Markdown` untuk konten yang sudah diformat, dan `Link` untuk URL.
112
113<h3 id="text">
114 `Text`
115</h3>
116
117`Text` menggambar string dengan gaya yang Anda berikan. Contoh ini menampilkan satu baris untuk setiap gaya:
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="Panel dengan sembilan baris teks, masing-masing dinamai sesuai gayanya: plain, bold, italic, underline, strikethrough, dimColor berwarna abu-abu, inverse, color merah, dan backgroundColor biru." 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="Panel dengan sembilan baris teks, masing-masing dinamai sesuai gayanya: plain, bold, italic, underline, strikethrough, dimColor berwarna abu-abu, inverse, color merah, dan backgroundColor biru." width="1872" height="490" data-path="images/mods-el-text-dark.png" />
139
140`dimColor` menggambar teks berwarna abu-abu. `backgroundColor` hanya mengisi selebar teks.
141
142<h3 id="markdown">
143 `Markdown`
144</h3>
145
146`Markdown` memformat teks dengan cara yang sama seperti balasan Claude diformat. Berikan konten di `text`, bukan di `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="Panel dengan judul tebal, Release notes, lalu sebuah kalimat dengan satu kata tebal dan satu kata kode berwarna, daftar dua item, dan kutipan yang digambar miring dengan bilah di sebelah kirinya." 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="Panel dengan judul tebal, Release notes, lalu sebuah kalimat dengan satu kata tebal dan satu kata kode berwarna, daftar dua item, dan kutipan yang digambar miring dengan bilah di sebelah kirinya." width="1872" height="452" data-path="images/mods-el-markdown-dark.png" />
157
158Judul digambar tebal tanpa tanda `#`. Kode inline digambar berwarna tanpa backtick. Kutipan digambar miring dengan bilah di sebelah kirinya.
159
160<h3 id="link">
161 `Link`
162</h3>
163
164`Link` menggambar label diikuti URL-nya:
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="Panel dengan satu baris: label Claude Code docs, lalu URL berwarna abu-abu." 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="Panel dengan satu baris: label Claude Code docs, lalu URL berwarna abu-abu." width="1872" height="186" data-path="images/mods-el-link-dark.png" />
173
174Terminal menggambar URL sebagai teks setelah label. Apakah klik akan membukanya bergantung pada terminal pengguna.
175
176<h2 id="show-code-and-changes">
177 Menampilkan kode dan perubahan
178</h2>
179
180`Code` menggambar teks sumber dengan warna sintaks milik Claude Code sendiri, atau sebuah diff.
181
182<h3 id="code">
183 `Code`
184</h3>
185
186Sebutkan `language`, atau berikan `path` agar Claude Code menyimpulkannya. Dengan `startLine`, baris-baris diberi nomor mulai dari angka tersebut:
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="Panel dengan dua baris JavaScript bernomor dalam warna sintaks." 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="Panel dengan dua baris JavaScript bernomor dalam warna sintaks." width="1872" height="224" data-path="images/mods-el-code-dark.png" />
199
200Warnanya berasal dari tema pengguna.
201
202<h3 id="code-as-a-diff">
203 `Code` sebagai diff
204</h3>
205
206Dengan `format: 'diff'`, `source` adalah satu atau beberapa hunk 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="Panel dengan diff empat baris. Baris yang dihapus diberi bayangan merah dan baris yang ditambahkan hijau, masing-masing dengan nomor barisnya. Pada baris yang ditambahkan, kata-kata that runs code memiliki bayangan yang lebih kuat." 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="Panel dengan diff empat baris. Baris yang dihapus diberi bayangan merah dan baris yang ditambahkan hijau, masing-masing dengan nomor barisnya. Pada baris yang ditambahkan, kata-kata that runs code memiliki bayangan yang lebih kuat." width="1872" height="300" data-path="images/mods-el-diff-dark.png" />
218
219Claude Code menggambar nomor baris sebagai pengganti baris `@@`. Jika baris yang dihapus dan baris yang ditambahkan mirip, kata-kata yang berubah mendapat bayangan yang lebih kuat.
220
221<h2 id="arrange-elements">
222 Mengatur elemen
223</h2>
224
225<h3 id="box">
226 `Box`
227</h3>
228
229`Box` menata isinya dalam baris atau kolom, dan dapat menggambar bingkai. Contoh ini menempatkan sebaris kata di atas kotak berbingkai:
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="Panel dengan tiga kata dalam satu baris, berjarak empat kolom, lalu satu baris kosong, lalu bingkai membulat di sekitar satu baris teks. Bingkai membentang selebar panel." 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="Panel dengan tiga kata dalam satu baris, berjarak empat kolom, lalu satu baris kosong, lalu bingkai membulat di sekitar satu baris teks. Bingkai membentang selebar panel." width="1872" height="338" data-path="images/mods-el-box-dark.png" />
253
254Bingkai membentang selebar panel.
255
256<h2 id="take-input">
257 Menerima input
258</h2>
259
260`Button`, `Input`, dan `Select` adalah kontrol: pengguna berpindah di antaranya dengan Tab dan menggunakan kontrol yang sedang memiliki fokus. [Fokus keyboard dan hotkey](/docs/id/plugins/mods/interface#know-which-keys-your-mod-can-receive) menjelaskan tombol mana yang mencapainya.
261
262Membuka panel dengan `focus: true` memberikan fokus keyboard ke panel tersebut. Huruf yang diketik mencapai `Input` setelah kontrol itu memiliki fokus, jadi tambahkan `autoFocus: true` pada kolom yang harus menerima ketikan segera setelah panel terbuka.
263
264<h3 id="button">
265 `Button`
266</h3>
267
268Sebuah tombol menjalankan `onPress`. Contoh ini menampilkan bentuk default, tombol `plain` dengan hotkey, dan tombol redup:
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="Panel dengan tiga tombol, satu per baris: Save dalam kurung siku, n: Next tanpa kurung siku dengan huruf n berwarna, dan Skip dalam kurung siku berwarna abu-abu." 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="Panel dengan tiga tombol, satu per baris: Save dalam kurung siku, n: Next tanpa kurung siku dengan huruf n berwarna, dan Skip dalam kurung siku berwarna abu-abu." width="1872" height="262" data-path="images/mods-el-button-dark.png" />
284
285Tombol yang memiliki fokus digambar dalam video terbalik. Di sini pengguna telah menekan Tab dua kali:
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="Tiga tombol yang sama, dengan tombol kedua, n: Next, digambar dalam video terbalik." 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="Tiga tombol yang sama, dengan tombol kedua, n: Next, digambar dalam video terbalik." width="1872" height="262" data-path="images/mods-el-button-plain-focused-dark.png" />
290
291<h3 id="input">
292 `Input`
293</h3>
294
295`Input` adalah kolom teks satu baris yang menjalankan `onSubmit` saat pengguna menekan Enter:
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
308Tanpa fokus, kolom menampilkan label dan placeholder-nya:
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="Panel dengan satu baris: label Title, lalu placeholder Type a title and press Enter berwarna abu-abu." 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="Panel dengan satu baris: label Title, lalu placeholder Type a title and press Enter berwarna abu-abu." width="1872" height="186" data-path="images/mods-el-input-dark.png" />
313
314Dengan fokus, label menjadi tebal, kursor muncul, dan `submitLabel` ditampilkan setelah `⏎`:
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="Kolom yang sama dengan label tebal, kursor blok pada huruf pertama placeholder, dan tanda return diikuti kata 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="Kolom yang sama dengan label tebal, kursor blok pada huruf pertama placeholder, dan tanda return diikuti kata save." width="1872" height="186" data-path="images/mods-el-input-focused-dark.png" />
319
320Mengetik menggantikan 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="Kolom yang sama berisi huruf yang diketik Rel, diikuti tanda return dan kata 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="Kolom yang sama berisi huruf yang diketik Rel, diikuti tanda return dan kata save." width="1872" height="186" data-path="images/mods-el-input-typed-dark.png" />
325
326<h3 id="select">
327 `Select`
328</h3>
329
330`Select` memungkinkan pengguna memilih salah satu dari beberapa opsi, dan menjalankan `onSelect` dengan `value` dari opsi tersebut:
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
348Dalam keadaan tertutup, kontrol ini menampilkan label dan opsi saat ini:
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="Panel dengan satu baris: label Format, opsi saat ini Markdown, dan panah bawah kecil." 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="Panel dengan satu baris: label Format, opsi saat ini Markdown, dan panah bawah kecil." width="1872" height="186" data-path="images/mods-el-select-dark.png" />
353
354Dalam keadaan terbuka, kontrol ini mencantumkan opsinya dan menandai salah satunya:
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="Pemilih terbuka, dengan tiga opsinya tercantum di bawah label. Opsi kedua, HTML, digambar dalam video terbalik." 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="Pemilih terbuka, dengan tiga opsinya tercantum di bawah label. Opsi kedua, HTML, digambar dalam video terbalik." width="1872" height="300" data-path="images/mods-el-select-moved-dark.png" />
359
360Setelah pengguna memilih opsi, daftar tertutup:
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="Pemilih tertutup kembali, kini menampilkan HTML sebagai opsi saat ini." 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="Pemilih tertutup kembali, kini menampilkan HTML sebagai opsi saat ini." width="1872" height="186" data-path="images/mods-el-select-picked-dark.png" />
365
366<h2 id="draw-pictures">
367 Menggambar gambar
368</h2>
369
370<h3 id="raster">
371 `Raster`
372</h3>
373
374`Raster` adalah kisi sel karakter berwarna, untuk peta panas, sparkline, atau papan permainan. Terminal yang menggambarnya. Contoh ini menggunakan fungsi `cellsOf` di modul awal, yang mengemas sel-sel ke dalam string yang diterima `Raster`. [Menggambar kisi sel berwarna](/docs/id/plugins/mods/interface#draw-a-grid-of-colored-cells) menjelaskannya:
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="Panel dengan kisi kecil blok berwarna, dua baris berisi tiga: hijau, kuning tua, dan merah, lalu hijau, hijau, dan kuning tua." 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="Panel dengan kisi kecil blok berwarna, dua baris berisi tiga: hijau, kuning tua, dan merah, lalu hijau, hijau, dan kuning tua." width="1872" height="224" data-path="images/mods-el-raster-dark.png" />
391
392`Raster` membulatkan setiap warna ke palet yang lebih kecil, sehingga `0x2e7d32` digambar sebagai `#337733`.
393
394<h3 id="svg">
395 `Svg`
396</h3>
397
398`Svg` menggambar dokumen SVG di aplikasi 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
410Di terminal, panel yang hanya mengembalikan `Svg` akan terbuka kosong. Untuk menggambar sesuatu yang lain di sana, periksa [`e.surface`](/docs/id/plugins/mods/interface#pick-where-to-draw) dan kembalikan tree yang berbeda.
411
412<h3 id="image-and-client">
413 `Image` dan `Client`
414</h3>
415
416Dua elemen lagi tidak memiliki contoh di sini. `Image` menggambar PNG atau piksel mentah di terminal. `Client` adalah wilayah yang digambar oleh file kedua milik Anda, untuk animasi dan input penunjuk. [Referensi elemen](/docs/id/plugins/mods/reference#elements) mencantumkan props-nya.
417
418<h2 id="see-where-a-mod-can-draw">
419 Melihat di mana mod dapat menggambar
420</h2>
421
422Semua contoh menggambar di panel. Mod juga dapat menggambar di tempat lain, dan memanggil Claude Code untuk menampilkan sesuatu untuknya:
423
424* **Panel dan band**: [Memilih tempat menggambar](/docs/id/plugins/mods/interface#pick-where-to-draw)
425* **Baris milik Claude Code sendiri, seperti spinner**: [Mengubah apa yang sudah digambar Claude Code](/docs/id/plugins/mods/interface#change-what-claude-code-already-draws)
426* **Toast, baris status, dan baris log**: [Menampilkan sesuatu tanpa memulai giliran](/docs/id/plugins/mods/api#show-something-without-starting-a-turn)
427* **Dialog pertanyaan**: [Menahan panggilan tool hingga pengguna memutuskan](/docs/id/plugins/mods/events#hold-a-tool-call-until-the-user-decides)
428
429<h2 id="next-steps">
430 Langkah selanjutnya
431</h2>
432
433* [Menggambar di antarmuka](/docs/id/plugins/mods/interface): membangun panel dengan tab, langkah demi langkah
434* [Menguji gambar](/docs/id/plugins/mods/test#test-a-drawing): menekan tombol Anda dari sebuah pengujian
435* [Referensi elemen](/docs/id/plugins/mods/reference#elements): props utama setiap elemen dan aplikasi yang menggambarnya