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