10 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.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 12
13<h2 id="try-a-sample">13## Mencoba contoh
14 Mencoba contoh
15</h2>
16 14
17Contoh-contoh di halaman ini adalah cuplikan, bukan mod utuh. Masing-masing adalah kode untuk satu elemen dan apa pun yang bersarang di dalamnya.15Contoh-contoh di halaman ini adalah cuplikan, bukan mod utuh. Masing-masing adalah kode untuk satu elemen dan apa pun yang bersarang di dalamnya.
18 16
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.17Untuk 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 18
21<Steps>19**1. Buat mod**
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 20
25 Simpan manifes sebagai `gallery/.claude-plugin/plugin.json`:21Buat 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.
26 22
27 ```json gallery/.claude-plugin/plugin.json theme={null}23Simpan manifes sebagai `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 Tentukan titik masuk Anda di `gallery/hooks/hooks.json`:34Tentukan titik masuk Anda di `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 Simpan kode sebagai `gallery/hooks/register.js`. Kode ini menambahkan perintah `/gallery` yang membuka panel, dan menggambar `Plain text` di panel tersebut:42Simpan kode sebagai `gallery/hooks/register.js`. Kode ini menambahkan perintah `/gallery` yang membuka panel, dan menggambar `Plain text` di panel tersebut:
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. Jalankan mod**
79 78
80 <Step title="Jalankan mod">79Di shell Anda, jalankan Claude Code dari direktori yang berisi `gallery`:
81 Di shell Anda, jalankan Claude Code dari direktori yang berisi `gallery`:
82 80
83 ```bash theme={null}81```bash theme={null}
84 claude --plugin-dir ./gallery82claude --plugin-dir ./gallery
85 ```83```
86 84
87 Di prompt Claude Code, jalankan `/gallery`. Sebuah panel terbuka dengan `Plain text` di dalamnya.85Di prompt Claude Code, jalankan `/gallery`. Sebuah panel terbuka dengan `Plain text` di dalamnya.
88 </Step>
89 86
90 <Step title="Ganti dengan contoh">87**3. 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 88
95<h2 id="pick-an-element">89Salin 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.
96 Memilih elemen90
97</h2>91## Memilih elemen
98 92
99Contoh-contoh dikelompokkan berdasarkan apa yang ingin Anda tampilkan di layar:93Contoh-contoh dikelompokkan berdasarkan apa yang ingin Anda tampilkan di layar:
100 94
104* **[Menerima input](#take-input)**: `Button`, `Input`, dan `Select`98* **[Menerima input](#take-input)**: `Button`, `Input`, dan `Select`
105* **[Menggambar gambar](#draw-pictures)**: `Raster`, `Svg`, `Image`, dan `Client`99* **[Menggambar gambar](#draw-pictures)**: `Raster`, `Svg`, `Image`, dan `Client`
106 100
107<h2 id="show-text">101## Menampilkan teks
108 Menampilkan teks
109</h2>
110 102
111Tiga elemen menampilkan kata-kata di layar: `Text` untuk gaya Anda sendiri, `Markdown` untuk konten yang sudah diformat, dan `Link` untuk URL.103Tiga elemen menampilkan kata-kata di layar: `Text` untuk gaya Anda sendiri, `Markdown` untuk konten yang sudah diformat, dan `Link` untuk URL.
112 104
113<h3 id="text">105### `Text`
114 `Text`
115</h3>
116 106
117`Text` menggambar string dengan gaya yang Anda berikan. Contoh ini menampilkan teks biasa dan delapan gaya, satu di setiap baris:107`Text` menggambar string dengan gaya yang Anda berikan. Contoh ini menampilkan teks biasa dan delapan gaya, satu di setiap baris:
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="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" />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="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 127
140`dimColor` menggambar teks berwarna abu-abu. `backgroundColor` hanya mengisi selebar teks.128`dimColor` menggambar teks berwarna abu-abu. `backgroundColor` hanya mengisi selebar teks.
141 129
142<h3 id="markdown">130### `Markdown`
143 `Markdown`
144</h3>
145 131
146`Markdown` memformat teks dengan cara yang sama seperti balasan Claude diformat. Berikan konten di `text`, bukan di `children`:132`Markdown` memformat teks dengan cara yang sama seperti balasan Claude diformat. Berikan konten di `text`, bukan di `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="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" />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="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 141
158Judul digambar tebal tanpa tanda `#`. Kode inline digambar berwarna tanpa backtick. Kutipan digambar miring dengan bilah di sebelah kirinya.142Judul digambar tebal tanpa tanda `#`. Kode inline digambar berwarna tanpa backtick. Kutipan digambar miring dengan bilah di sebelah kirinya.
159 143
160<h3 id="link">144### `Link`
161 `Link`
162</h3>
163 145
164`Link` menggambar label diikuti URL-nya:146`Link` menggambar label diikuti URL-nya:
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="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" />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="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 153
174Terminal menggambar URL sebagai teks setelah label. Apakah klik akan membukanya bergantung pada terminal pengguna.154Terminal menggambar URL sebagai teks setelah label. Apakah klik akan membukanya bergantung pada terminal pengguna.
175 155
176<h2 id="show-code-and-changes">156## Menampilkan kode dan perubahan
177 Menampilkan kode dan perubahan
178</h2>
179 157
180`Code` menggambar teks sumber dengan warna sintaks milik Claude Code sendiri, atau sebuah diff. Di ekstensi VS Code, `Code` menampilkan `source`-nya sebagai teks biasa, tanpa warna, nomor baris, atau bayangan diff seperti pada tangkapan layar ini.158`Code` menggambar teks sumber dengan warna sintaks milik Claude Code sendiri, atau sebuah diff. Di ekstensi VS Code, `Code` menampilkan `source`-nya sebagai teks biasa, tanpa warna, nomor baris, atau bayangan diff seperti pada tangkapan layar ini.
181 159
182<h3 id="code">160### `Code`
183 `Code`
184</h3>
185 161
186Sebutkan `language`, atau berikan `path` agar Claude Code menyimpulkannya. Dengan `startLine`, baris-baris diberi nomor mulai dari angka tersebut:162Sebutkan `language`, atau berikan `path` agar Claude Code menyimpulkannya. Dengan `startLine`, baris-baris diberi nomor mulai dari angka tersebut:
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="Panel dengan dua baris JavaScript bernomor dalam warna sintaks." 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="Panel dengan dua baris JavaScript bernomor dalam warna sintaks." width="1872" height="224" data-path="images/mods-el-code-dark.png" />
199 173
200Warnanya berasal dari tema pengguna.174Warnanya berasal dari tema pengguna.
201 175
202<h3 id="code-as-a-diff">176### `Code` sebagai diff
203 `Code` sebagai diff
204</h3>
205 177
206Dengan `format: 'diff'`, `source` adalah satu atau beberapa hunk unified diff:178Dengan `format: 'diff'`, `source` adalah satu atau beberapa hunk unified diff:
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="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" />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="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 188
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.189Claude 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 190
221<h2 id="arrange-elements">191## Mengatur elemen
222 Mengatur elemen
223</h2>
224 192
225<h3 id="box">193### `Box`
226 `Box`
227</h3>
228 194
229`Box` menata isinya dalam baris atau kolom, dan dapat menggambar bingkai. Contoh ini menempatkan sebaris kata di atas kotak berbingkai:195`Box` menata isinya dalam baris atau kolom, dan dapat menggambar bingkai. Contoh ini menempatkan sebaris kata di atas kotak berbingkai:
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="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" />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="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 217
254Bingkai membentang selebar panel.218Bingkai membentang selebar panel.
255 219
256<h2 id="take-input">220## Menerima input
257 Menerima input
258</h2>
259 221
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.222`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 223
262Buka panel dengan `focus: true` untuk mengajukan permintaan fokus keyboard bagi panel tersebut. Huruf yang diketik mencapai `Input` setelah kontrol itu memiliki fokus. Untuk memilih kolom mana yang memiliki fokus saat panel terbuka, lihat [Mengatur hotkey dan fokus pertama](/docs/id/plugins/mods/interface#set-a-hotkey-and-the-first-focus).224Buka panel dengan `focus: true` untuk mengajukan permintaan fokus keyboard bagi panel tersebut. Huruf yang diketik mencapai `Input` setelah kontrol itu memiliki fokus. Untuk memilih kolom mana yang memiliki fokus saat panel terbuka, lihat [Mengatur hotkey dan fokus pertama](/docs/id/plugins/mods/interface#set-a-hotkey-and-the-first-focus).
263 225
264<h3 id="button">226### `Button`
265 `Button`
266</h3>
267 227
268Sebuah tombol menjalankan `onPress`. Contoh ini menampilkan bentuk default, tombol `plain` dengan hotkey, dan tombol redup:228Sebuah tombol menjalankan `onPress`. Contoh ini menampilkan bentuk default, tombol `plain` dengan hotkey, dan tombol redup:
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="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" />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="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 242
285Tombol yang memiliki fokus digambar dalam video terbalik. Di sini pengguna telah menekan Tab dua kali:243Tombol yang memiliki fokus digambar dalam video terbalik. Di sini pengguna telah menekan Tab dua kali:
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="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" />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="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" />247### `Input`
290
291<h3 id="input">
292 `Input`
293</h3>
294 248
295`Input` adalah kolom teks satu baris yang menjalankan `onSubmit` saat pengguna menekan Enter:249`Input` adalah kolom teks satu baris yang menjalankan `onSubmit` saat pengguna menekan Enter:
296 250
307 261
308Tanpa fokus, kolom menampilkan label dan placeholder-nya:262Tanpa fokus, kolom menampilkan label dan placeholder-nya:
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="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" />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="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 265
314Dengan fokus, label menjadi tebal, kursor muncul, dan `submitLabel` ditampilkan setelah `⏎`:266Dengan fokus, label menjadi tebal, kursor muncul, dan `submitLabel` ditampilkan setelah `⏎`:
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="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" />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="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 269
320Mengetik menggantikan placeholder:270Mengetik menggantikan 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="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" />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="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" />274### `Select`
325
326<h3 id="select">
327 `Select`
328</h3>
329 275
330`Select` memungkinkan pengguna memilih salah satu dari beberapa opsi, dan menjalankan `onSelect` dengan `value` dari opsi tersebut:276`Select` memungkinkan pengguna memilih salah satu dari beberapa opsi, dan menjalankan `onSelect` dengan `value` dari opsi tersebut:
331 277
347 293
348Dalam keadaan tertutup, kontrol ini menampilkan label dan opsi saat ini:294Dalam keadaan tertutup, kontrol ini menampilkan label dan opsi saat ini:
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="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" />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="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 297
354Dalam keadaan terbuka, kontrol ini mencantumkan opsinya dan menandai salah satunya:298Dalam keadaan terbuka, kontrol ini mencantumkan opsinya dan menandai salah satunya:
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="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" />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="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 301
360Setelah pengguna memilih opsi, daftar tertutup:302Setelah pengguna memilih opsi, daftar tertutup:
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="Pemilih tertutup kembali, kini menampilkan HTML sebagai opsi saat ini." 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="Pemilih tertutup kembali, kini menampilkan HTML sebagai opsi saat ini." width="1872" height="186" data-path="images/mods-el-select-picked-dark.png" />306## Menggambar gambar
365 307
366<h2 id="draw-pictures">308### `Raster`
367 Menggambar gambar
368</h2>
369
370<h3 id="raster">
371 `Raster`
372</h3>
373 309
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:310`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 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="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" />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="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 325
392`Raster` membulatkan setiap warna ke palet yang lebih kecil, sehingga `0x2e7d32` digambar sebagai `#337733`.326`Raster` membulatkan setiap warna ke palet yang lebih kecil, sehingga `0x2e7d32` digambar sebagai `#337733`.
393 327
394<h3 id="svg">328### `Svg`
395 `Svg`
396</h3>
397 329
398`Svg` menggambar dokumen SVG di aplikasi Desktop dan ekstensi VS Code:330`Svg` menggambar dokumen SVG di aplikasi Desktop dan ekstensi VS Code:
399 331
409 341
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.342Di 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 343
412<h3 id="image-and-client">344### `Image` dan `Client`
413 `Image` dan `Client`
414</h3>
415 345
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.346Dua 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 347
423 353
424Jika pengguna mod Anda melihat teks redup di terminal yang sebenarnya menggambar gambar placeholder tersebut, mereka dapat mengatur [`CLAUDE_CODE_FORCE_TERMINAL_IMAGES`](/docs/id/env-vars) ke `1`, yang melewati deteksi. Di dalam tmux atau screen hal itu tidak membantu: teks `alt` hilang, dan Claude Code mengirim gambar tanpa membungkusnya untuk passthrough tmux atau screen.354Jika pengguna mod Anda melihat teks redup di terminal yang sebenarnya menggambar gambar placeholder tersebut, mereka dapat mengatur [`CLAUDE_CODE_FORCE_TERMINAL_IMAGES`](/docs/id/env-vars) ke `1`, yang melewati deteksi. Di dalam tmux atau screen hal itu tidak membantu: teks `alt` hilang, dan Claude Code mengirim gambar tanpa membungkusnya untuk passthrough tmux atau screen.
425 355
426<h2 id="see-where-a-mod-can-draw">356## Melihat di mana mod dapat menggambar
427 Melihat di mana mod dapat menggambar
428</h2>
429 357
430Semua contoh menggambar di panel. Mod juga dapat menggambar di tempat lain, dan memanggil Claude Code untuk menampilkan sesuatu untuknya:358Semua contoh menggambar di panel. Mod juga dapat menggambar di tempat lain, dan memanggil Claude Code untuk menampilkan sesuatu untuknya:
431 359
434* **Toast, baris status, dan baris log**: [Menampilkan sesuatu tanpa memulai giliran](/docs/id/plugins/mods/api#show-something-without-starting-a-turn)362* **Toast, baris status, dan baris log**: [Menampilkan sesuatu tanpa memulai giliran](/docs/id/plugins/mods/api#show-something-without-starting-a-turn)
435* **Dialog pertanyaan**: [Menahan panggilan tool hingga pengguna memutuskan](/docs/id/plugins/mods/events#hold-a-tool-call-until-the-user-decides)363* **Dialog pertanyaan**: [Menahan panggilan tool hingga pengguna memutuskan](/docs/id/plugins/mods/events#hold-a-tool-call-until-the-user-decides)
436 364
437<h2 id="next-steps">365## Langkah selanjutnya
438 Langkah selanjutnya
439</h2>
440 366
441* [Menggambar di antarmuka](/docs/id/plugins/mods/interface): membangun panel dengan tab, langkah demi langkah367* [Menggambar di antarmuka](/docs/id/plugins/mods/interface): membangun panel dengan tab, langkah demi langkah
442* [Menguji gambar](/docs/id/plugins/mods/test#test-a-drawing): menekan tombol Anda dari sebuah pengujian368* [Menguji gambar](/docs/id/plugins/mods/test#test-a-drawing): menekan tombol Anda dari sebuah pengujian