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# Mod 介面圖庫
6
7> 查看 Claude Code mod 可以繪製的介面元素,例如文字、按鈕、欄位、Markdown、程式碼和差異,並附有範例程式碼和終端機螢幕截圖。
8
9Mod 使用元素來繪製其介面:文字、方塊、按鈕、欄位,以及一些會替您格式化內容的元素。此處的範例展示了繪製元素的程式碼,大多數範例還附有在終端機窗格中呈現結果的螢幕截圖,讓您可以依外觀挑選元素。
10
11若要了解繪製的運作方式,請從[在介面中繪製](/docs/zh-TW/plugins/mods/interface)開始。如需主要 props 以及哪些應用程式會繪製各個元素,請參閱[元素參考](/docs/zh-TW/plugins/mods/reference#elements)。[型別宣告](/docs/zh-TW/plugins/mods/create#get-the-types-for-your-build)列出了所有 props。
12
13<h2 id="try-a-sample">
14 試用範例
15</h2>
16
17本頁的範例是程式碼片段,而非完整的 mod。每個範例都是一個元素及其內部巢狀內容的程式碼。
18
19若要在您自己的終端機中查看範例,請依照以下步驟建立小型 mod,並將範例貼入其中。此 mod 會新增一個 `/gallery` 命令,開啟一個窗格並在其中繪製範例。[窗格](/docs/zh-TW/plugins/mods/interface#pick-where-to-draw)在寬版全螢幕終端機中是逐字稿旁的側邊欄,否則則是提示詞上方的框線區域。
20
21<Steps>
22 <Step title="建立 mod">
23 建立一個名為 `gallery` 的目錄,並在其中建立 `.claude-plugin` 和 `hooks` 目錄。[建立 mod](/docs/zh-TW/plugins/mods/create#write-a-mod-yourself) 說明了這些檔案。
24
25 將 manifest 儲存為 `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 在 `gallery/hooks/hooks.json` 中指定您的進入點:
37
38 ```json gallery/hooks/hooks.json theme={null}
39 {
40 "modules": ["./register.js"]
41 }
42 ```
43
44 將程式碼儲存為 `gallery/hooks/register.js`。它會新增一個開啟窗格的 `/gallery` 命令,並在該窗格中繪製 `Plain text`:
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="執行 mod">
81 在您的 shell 中,從包含 `gallery` 的目錄啟動 Claude Code:
82
83 ```bash theme={null}
84 claude --plugin-dir ./gallery
85 ```
86
87 在 Claude Code 提示字元中,執行 `/gallery`。會開啟一個顯示 `Plain text` 的窗格。
88 </Step>
89
90 <Step title="換入範例">
91 從本頁複製一個範例。在 `register.js` 中,將其貼上以取代 `Text({ children: ['Plain text'] })`,使其接在 `return` 之後,然後儲存檔案。每次儲存時 Claude Code 都會重新載入模組,因此再次執行 `/gallery` 即可查看新範例。
92 </Step>
93</Steps>
94
95<h2 id="pick-an-element">
96 挑選元素
97</h2>
98
99範例依您想在螢幕上呈現的內容分組:
100
101* **[顯示文字](#show-text)**:`Text`、`Markdown` 和 `Link`
102* **[顯示程式碼與變更](#show-code-and-changes)**:`Code`
103* **[排列元素](#arrange-elements)**:`Box`
104* **[接收輸入](#take-input)**:`Button`、`Input` 和 `Select`
105* **[繪製圖片](#draw-pictures)**:`Raster`、`Svg`、`Image` 和 `Client`
106
107<h2 id="show-text">
108 顯示文字
109</h2>
110
111有三個元素可將文字呈現在螢幕上:`Text` 用於套用您自己的樣式,`Markdown` 用於已格式化的內容,`Link` 則用於 URL。
112
113<h3 id="text">
114 `Text`
115</h3>
116
117`Text` 會以您指定的樣式繪製字串。此範例為每種樣式各顯示一行:
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="一個包含九行文字的窗格,每行以其樣式命名:plain、bold、italic、underline、strikethrough、灰色的 dimColor、inverse、color red 以及 backgroundColor blue。" 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="一個包含九行文字的窗格,每行以其樣式命名:plain、bold、italic、underline、strikethrough、灰色的 dimColor、inverse、color red 以及 backgroundColor blue。" width="1872" height="490" data-path="images/mods-el-text-dark.png" />
139
140`dimColor` 會以灰色繪製文字。`backgroundColor` 只會填滿與文字等寬的範圍。
141
142<h3 id="markdown">
143 `Markdown`
144</h3>
145
146`Markdown` 會以 Claude 回覆的格式來格式化文字。請將內容傳入 `text`,而非 `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="一個窗格,包含粗體標題 Release notes,接著是一個含有一個粗體字和一個彩色程式碼字的句子、一個兩項的清單,以及一段以斜體繪製且左側有直線的引文。" 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="一個窗格,包含粗體標題 Release notes,接著是一個含有一個粗體字和一個彩色程式碼字的句子、一個兩項的清單,以及一段以斜體繪製且左側有直線的引文。" width="1872" height="452" data-path="images/mods-el-markdown-dark.png" />
157
158標題會以粗體繪製,不含其 `#` 符號。行內程式碼會以彩色繪製,不含其反引號。引文會以斜體繪製,左側有一條直線。
159
160<h3 id="link">
161 `Link`
162</h3>
163
164`Link` 會繪製一個標籤,後面接著其 URL:
165
166```javascript theme={null}
167Link({ href: 'https://code.claude.com/docs', label: 'Claude Code docs' })
168```
169
170<img src="https://mintcdn.com/claude-code/EXkwf0kKMewZsyod/images/mods-el-link-light.png?fit=max&auto=format&n=EXkwf0kKMewZsyod&q=85&s=8217bd2dfb561a8ba57023c6d89ea977" className="dark:hidden" alt="一個只有一行的窗格:標籤 Claude Code docs,接著是灰色的 URL。" 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="一個只有一行的窗格:標籤 Claude Code docs,接著是灰色的 URL。" width="1872" height="186" data-path="images/mods-el-link-dark.png" />
173
174終端機會在標籤之後以文字形式繪製 URL。點擊是否會開啟它取決於使用者的終端機。
175
176<h2 id="show-code-and-changes">
177 顯示程式碼與變更
178</h2>
179
180`Code` 會以 Claude Code 本身的語法色彩繪製原始碼文字,或繪製差異。
181
182<h3 id="code">
183 `Code`
184</h3>
185
186指定 `language`,或傳入 `path` 讓 Claude Code 據以推斷語言。使用 `startLine` 時,各行會從該數字開始編號:
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="一個窗格,包含兩行以語法色彩顯示且帶有行號的 JavaScript。" 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="一個窗格,包含兩行以語法色彩顯示且帶有行號的 JavaScript。" width="1872" height="224" data-path="images/mods-el-code-dark.png" />
199
200色彩來自使用者的佈景主題。
201
202<h3 id="code-as-a-diff">
203 以 `Code` 顯示差異
204</h3>
205
206使用 `format: 'diff'` 時,`source` 是一個或多個 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="一個包含四行差異的窗格。移除的行以紅色底色顯示,新增的行以綠色底色顯示,各自附有行號。在新增的行中,that runs code 這幾個字的底色較深。" 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="一個包含四行差異的窗格。移除的行以紅色底色顯示,新增的行以綠色底色顯示,各自附有行號。在新增的行中,that runs code 這幾個字的底色較深。" width="1872" height="300" data-path="images/mods-el-diff-dark.png" />
218
219Claude Code 會繪製行號來取代 `@@` 行。當移除的行與新增的行相似時,有變更的字詞會以較深的底色顯示。
220
221<h2 id="arrange-elements">
222 排列元素
223</h2>
224
225<h3 id="box">
226 `Box`
227</h3>
228
229`Box` 會將其內部的內容以列或欄的方式排列,並可繪製邊框。此範例在一個有邊框的方塊上方放置一列文字:
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="一個窗格,包含排成一列、彼此相隔四欄的三個字詞,接著是一列空白,然後是圍繞一行文字的圓角邊框。邊框延伸至窗格的完整寬度。" 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="一個窗格,包含排成一列、彼此相隔四欄的三個字詞,接著是一列空白,然後是圍繞一行文字的圓角邊框。邊框延伸至窗格的完整寬度。" width="1872" height="338" data-path="images/mods-el-box-dark.png" />
253
254邊框會延伸至窗格的寬度。
255
256<h2 id="take-input">
257 接收輸入
258</h2>
259
260`Button`、`Input` 和 `Select` 是控制項:使用者以 Tab 在它們之間移動,並使用取得焦點的那一個。[鍵盤焦點與快速鍵](/docs/zh-TW/plugins/mods/interface#know-which-keys-your-mod-can-receive)說明了哪些按鍵會傳送到它們。
261
262以 `focus: true` 開啟窗格會讓窗格取得鍵盤焦點。輸入的字母會在 `Input` 取得焦點後傳送給它,因此請為應在窗格開啟時立即接收輸入的欄位加上 `autoFocus: true`。
263
264<h3 id="button">
265 `Button`
266</h3>
267
268按鈕會執行 `onPress`。此範例顯示預設形式、帶有快速鍵的 `plain` 按鈕,以及一個暗淡的按鈕:
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="一個窗格,包含三個按鈕,每行一個:以方括號括住的 Save、沒有方括號且 n 為彩色的 n: Next,以及以方括號括住的灰色 Skip。" 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="一個窗格,包含三個按鈕,每行一個:以方括號括住的 Save、沒有方括號且 n 為彩色的 n: Next,以及以方括號括住的灰色 Skip。" width="1872" height="262" data-path="images/mods-el-button-dark.png" />
284
285取得焦點的按鈕會以反白顯示繪製。此處使用者已按了兩次 Tab:
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="相同的三個按鈕,其中第二個按鈕 n: Next 以反白顯示繪製。" 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="相同的三個按鈕,其中第二個按鈕 n: Next 以反白顯示繪製。" 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` 是單行文字欄位,會在使用者按下 Enter 時執行 `onSubmit`:
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
308未取得焦點時,欄位會顯示其標籤和預留位置文字:
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="一個只有一行的窗格:標籤 Title,接著是灰色的預留位置文字 Type a title and press Enter。" 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="一個只有一行的窗格:標籤 Title,接著是灰色的預留位置文字 Type a title and press Enter。" width="1872" height="186" data-path="images/mods-el-input-dark.png" />
313
314取得焦點時,標籤會變為粗體,出現游標,並在 `⏎` 之後顯示 `submitLabel`:
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="相同的欄位,其標籤為粗體,預留位置文字的第一個字母上有一個區塊游標,以及一個換行符號後接 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="相同的欄位,其標籤為粗體,預留位置文字的第一個字母上有一個區塊游標,以及一個換行符號後接 save 一字。" width="1872" height="186" data-path="images/mods-el-input-focused-dark.png" />
319
320輸入文字會取代預留位置文字:
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="相同的欄位,內含輸入的字母 Rel,後接換行符號和 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="相同的欄位,內含輸入的字母 Rel,後接換行符號和 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` 讓使用者從數個選項中挑選一個,並以該選項的 `value` 執行 `onSelect`:
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
348關閉時,它會顯示其標籤和目前的選項:
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="一個只有一行的窗格:標籤 Format、目前的選項 Markdown,以及一個小的向下箭頭。" 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="一個只有一行的窗格:標籤 Format、目前的選項 Markdown,以及一個小的向下箭頭。" width="1872" height="186" data-path="images/mods-el-select-dark.png" />
353
354開啟時,它會列出其選項並標示其中一個:
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="已開啟的選擇器,其三個選項列在標籤下方。第二個選項 HTML 以反白顯示繪製。" 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="已開啟的選擇器,其三個選項列在標籤下方。第二個選項 HTML 以反白顯示繪製。" width="1872" height="300" data-path="images/mods-el-select-moved-dark.png" />
359
360使用者挑選選項後,清單會關閉:
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="再次關閉的選擇器,現在顯示 HTML 為目前的選項。" 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="再次關閉的選擇器,現在顯示 HTML 為目前的選項。" width="1872" height="186" data-path="images/mods-el-select-picked-dark.png" />
365
366<h2 id="draw-pictures">
367 繪製圖片
368</h2>
369
370<h3 id="raster">
371 `Raster`
372</h3>
373
374`Raster` 是由彩色字元儲存格組成的網格,可用於熱度圖、迷你走勢圖或遊戲棋盤。由終端機負責繪製。此範例使用起始模組中的 `cellsOf` 函式,將儲存格打包成 `Raster` 接受的字串。[繪製彩色儲存格網格](/docs/zh-TW/plugins/mods/interface#draw-a-grid-of-colored-cells)對此有所說明:
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="一個窗格,包含由彩色方塊組成的小網格,共兩列、每列三個:綠色、琥珀色和紅色,接著是綠色、綠色和琥珀色。" 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="一個窗格,包含由彩色方塊組成的小網格,共兩列、每列三個:綠色、琥珀色和紅色,接著是綠色、綠色和琥珀色。" width="1872" height="224" data-path="images/mods-el-raster-dark.png" />
391
392`Raster` 會將每個色彩近似為較小調色盤中的顏色,因此 `0x2e7d32` 會繪製為 `#337733`。
393
394<h3 id="svg">
395 `Svg`
396</h3>
397
398`Svg` 會在 Desktop 應用程式中繪製 SVG 文件:
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
410在終端機中,只回傳 `Svg` 的窗格會以空白狀態開啟。若要在該處繪製其他內容,請檢查 [`e.surface`](/docs/zh-TW/plugins/mods/interface#pick-where-to-draw) 並回傳不同的樹狀結構。
411
412<h3 id="image-and-client">
413 `Image` 和 `Client`
414</h3>
415
416另有兩個元素在此沒有範例。`Image` 會在終端機中繪製 PNG 或原始像素。`Client` 是由您的第二個檔案負責繪製的區域,用於動畫和指標輸入。[元素參考](/docs/zh-TW/plugins/mods/reference#elements)列出了它們的 props。
417
418<h2 id="see-where-a-mod-can-draw">
419 了解 mod 可以繪製的位置
420</h2>
421
422這些範例都在窗格中繪製。Mod 也可以在其他位置繪製,並呼叫 Claude Code 替它顯示內容:
423
424* **窗格與橫帶**:[挑選繪製位置](/docs/zh-TW/plugins/mods/interface#pick-where-to-draw)
425* **Claude Code 本身的列,例如 spinner**:[變更 Claude Code 既有的繪製內容](/docs/zh-TW/plugins/mods/interface#change-what-claude-code-already-draws)
426* **Toast、狀態列與日誌行**:[在不開始回合的情況下顯示內容](/docs/zh-TW/plugins/mods/api#show-something-without-starting-a-turn)
427* **問題對話框**:[保留工具呼叫直到使用者做出決定](/docs/zh-TW/plugins/mods/events#hold-a-tool-call-until-the-user-decides)
428
429<h2 id="next-steps">
430 後續步驟
431</h2>
432
433* [在介面中繪製](/docs/zh-TW/plugins/mods/interface):逐步建立一個含有分頁的窗格
434* [測試繪製](/docs/zh-TW/plugins/mods/test#test-a-drawing):從測試中按下您的按鈕
435* [元素參考](/docs/zh-TW/plugins/mods/reference#elements):每個元素的主要 props 以及繪製它的應用程式