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# Galerie der Oberflächenelemente für Mods
6
7> Sehen Sie sich die Oberflächenelemente an, die ein Claude Code-Mod zeichnen kann, etwa Text, Schaltflächen, Felder, Markdown, Code und Diffs, mit Beispielcode und Terminal-Screenshots.
8
9Ein Mod zeichnet seine Oberfläche aus Elementen: Text, Boxen, Schaltflächen, Felder und einige Elemente, die Inhalte für Sie formatieren. Die Beispiele hier zeigen den Code, der ein Element zeichnet, und die meisten enthalten einen Screenshot des Ergebnisses in einem Terminal-Pane, sodass Sie ein Element anhand seines Aussehens auswählen können.
10
11Wie das Zeichnen funktioniert, erfahren Sie zunächst unter [In der Oberfläche zeichnen](/docs/de/plugins/mods/interface). Die wichtigsten Props und welche Apps die einzelnen Elemente zeichnen, finden Sie in der [Elementreferenz](/docs/de/plugins/mods/reference#elements). Die [Typdeklarationen](/docs/de/plugins/mods/create#get-the-types-for-your-build) listen alle Props auf.
12
13<h2 id="try-a-sample">
14 Ein Beispiel ausprobieren
15</h2>
16
17Die Beispiele auf dieser Seite sind Codeausschnitte, keine vollständigen Mods. Jedes Beispiel ist der Code für ein Element und alles, was darin verschachtelt ist.
18
19Um ein Beispiel in Ihrem eigenen Terminal zu sehen, erstellen Sie mit den folgenden Schritten den kleinen Mod und fügen Sie das Beispiel darin ein. Der Mod fügt einen Befehl `/gallery` hinzu, der ein Pane öffnet und das Beispiel dort zeichnet. Ein [Pane](/docs/de/plugins/mods/interface#pick-where-to-draw) ist in einem breiten Vollbild-Terminal eine Seitenleiste neben dem Transkript, andernfalls ein umrahmter Bereich über dem Prompt.
20
21<Steps>
22 <Step title="Den Mod erstellen">
23 Erstellen Sie ein Verzeichnis namens `gallery` mit den Verzeichnissen `.claude-plugin` und `hooks` darin. [Einen Mod erstellen](/docs/de/plugins/mods/create#write-a-mod-yourself) erklärt die Dateien.
24
25 Speichern Sie das Manifest als `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 Geben Sie Ihren Einstiegspunkt in `gallery/hooks/hooks.json` an:
37
38 ```json gallery/hooks/hooks.json theme={null}
39 {
40 "modules": ["./register.js"]
41 }
42 ```
43
44 Speichern Sie den Code als `gallery/hooks/register.js`. Er fügt einen Befehl `/gallery` hinzu, der ein Pane öffnet, und zeichnet `Plain text` in diesem Pane:
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="Den Mod ausführen">
81 Starten Sie Claude Code in Ihrer Shell aus dem Verzeichnis, das `gallery` enthält:
82
83 ```bash theme={null}
84 claude --plugin-dir ./gallery
85 ```
86
87 Führen Sie im Prompt von Claude Code `/gallery` aus. Ein Pane mit `Plain text` darin öffnet sich.
88 </Step>
89
90 <Step title="Ein Beispiel einsetzen">
91 Kopieren Sie ein Beispiel von dieser Seite. Fügen Sie es in `register.js` anstelle von `Text({ children: ['Plain text'] })` ein, sodass es auf `return` folgt, und speichern Sie die Datei. Claude Code lädt das Modul bei jedem Speichern neu, führen Sie also `/gallery` erneut aus, um das neue Beispiel zu sehen.
92 </Step>
93</Steps>
94
95<h2 id="pick-an-element">
96 Ein Element auswählen
97</h2>
98
99Die Beispiele sind danach gruppiert, was Sie auf dem Bildschirm darstellen möchten:
100
101* **[Text anzeigen](#show-text)**: `Text`, `Markdown` und `Link`
102* **[Code und Änderungen anzeigen](#show-code-and-changes)**: `Code`
103* **[Elemente anordnen](#arrange-elements)**: `Box`
104* **[Eingaben entgegennehmen](#take-input)**: `Button`, `Input` und `Select`
105* **[Bilder zeichnen](#draw-pictures)**: `Raster`, `Svg`, `Image` und `Client`
106
107<h2 id="show-text">
108 Text anzeigen
109</h2>
110
111Drei Elemente bringen Wörter auf den Bildschirm: `Text` für Ihre eigene Gestaltung, `Markdown` für bereits formatierte Inhalte und `Link` für eine URL.
112
113<h3 id="text">
114 `Text`
115</h3>
116
117`Text` zeichnet eine Zeichenkette mit den Stilen, die Sie angeben. Dieses Beispiel zeigt eine Zeile pro Stil:
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="Ein Pane mit neun Textzeilen, jeweils nach ihrem Stil benannt: plain, bold, italic, underline, strikethrough, dimColor in Grau, inverse, color red und 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="Ein Pane mit neun Textzeilen, jeweils nach ihrem Stil benannt: plain, bold, italic, underline, strikethrough, dimColor in Grau, inverse, color red und backgroundColor blue." width="1872" height="490" data-path="images/mods-el-text-dark.png" />
139
140`dimColor` zeichnet den Text in Grau. `backgroundColor` füllt nur die Breite des Texts aus.
141
142<h3 id="markdown">
143 `Markdown`
144</h3>
145
146`Markdown` formatiert Text so, wie die Antworten von Claude formatiert werden. Übergeben Sie den Inhalt in `text`, nicht in `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="Ein Pane mit einer fetten Überschrift, Release notes, dann ein Satz mit einem fetten Wort und einem farbigen Codewort, eine Liste mit zwei Einträgen und ein Zitat in Kursivschrift mit einem Balken links davon." 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="Ein Pane mit einer fetten Überschrift, Release notes, dann ein Satz mit einem fetten Wort und einem farbigen Codewort, eine Liste mit zwei Einträgen und ein Zitat in Kursivschrift mit einem Balken links davon." width="1872" height="452" data-path="images/mods-el-markdown-dark.png" />
157
158Eine Überschrift wird fett und ohne ihre `#`-Zeichen gezeichnet. Inline-Code wird farbig und ohne seine Backticks gezeichnet. Ein Zitat wird kursiv mit einem Balken links davon gezeichnet.
159
160<h3 id="link">
161 `Link`
162</h3>
163
164`Link` zeichnet eine Beschriftung, gefolgt von ihrer 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="Ein Pane mit einer Zeile: die Beschriftung Claude Code docs, dann die URL in Grau." 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="Ein Pane mit einer Zeile: die Beschriftung Claude Code docs, dann die URL in Grau." width="1872" height="186" data-path="images/mods-el-link-dark.png" />
173
174Das Terminal zeichnet die URL als Text nach der Beschriftung. Ob ein Klick sie öffnet, hängt vom Terminal des Benutzers ab.
175
176<h2 id="show-code-and-changes">
177 Code und Änderungen anzeigen
178</h2>
179
180`Code` zeichnet Quelltext mit den eigenen Syntaxfarben von Claude Code oder einen Diff.
181
182<h3 id="code">
183 `Code`
184</h3>
185
186Geben Sie die `language` an oder übergeben Sie einen `path`, aus dem Claude Code sie ableitet. Mit `startLine` werden die Zeilen ab dieser Nummer nummeriert:
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="Ein Pane mit zwei nummerierten Zeilen JavaScript in Syntaxfarben." 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="Ein Pane mit zwei nummerierten Zeilen JavaScript in Syntaxfarben." width="1872" height="224" data-path="images/mods-el-code-dark.png" />
199
200Die Farben stammen aus dem Theme des Benutzers.
201
202<h3 id="code-as-a-diff">
203 `Code` als Diff
204</h3>
205
206Mit `format: 'diff'` besteht `source` aus einem oder mehreren Unified-Diff-Hunks:
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="Ein Pane mit einem vierzeiligen Diff. Die entfernte Zeile ist rot und die hinzugefügte Zeile grün hinterlegt, jeweils mit ihrer Zeilennummer. In der hinzugefügten Zeile sind die Wörter that runs code stärker hinterlegt." 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="Ein Pane mit einem vierzeiligen Diff. Die entfernte Zeile ist rot und die hinzugefügte Zeile grün hinterlegt, jeweils mit ihrer Zeilennummer. In der hinzugefügten Zeile sind die Wörter that runs code stärker hinterlegt." width="1872" height="300" data-path="images/mods-el-diff-dark.png" />
218
219Claude Code zeichnet anstelle der `@@`-Zeile Zeilennummern. Wo sich eine entfernte und eine hinzugefügte Zeile ähneln, werden die geänderten Wörter stärker hinterlegt.
220
221<h2 id="arrange-elements">
222 Elemente anordnen
223</h2>
224
225<h3 id="box">
226 `Box`
227</h3>
228
229`Box` ordnet seinen Inhalt in einer Zeile oder Spalte an und kann einen Rahmen zeichnen. Dieses Beispiel setzt eine Reihe von Wörtern über eine umrahmte 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="Ein Pane mit drei Wörtern in einer Reihe im Abstand von vier Spalten, dann eine leere Zeile, dann ein abgerundeter Rahmen um eine Textzeile. Der Rahmen erstreckt sich über die gesamte Breite des Panes." 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="Ein Pane mit drei Wörtern in einer Reihe im Abstand von vier Spalten, dann eine leere Zeile, dann ein abgerundeter Rahmen um eine Textzeile. Der Rahmen erstreckt sich über die gesamte Breite des Panes." width="1872" height="338" data-path="images/mods-el-box-dark.png" />
253
254Der Rahmen dehnt sich auf die Breite des Panes aus.
255
256<h2 id="take-input">
257 Eingaben entgegennehmen
258</h2>
259
260`Button`, `Input` und `Select` sind Steuerelemente: Der Benutzer wechselt mit Tab zwischen ihnen und bedient dasjenige, das den Fokus hat. [Tastaturfokus und Hotkeys](/docs/de/plugins/mods/interface#know-which-keys-your-mod-can-receive) beschreibt, welche Tasten sie erreichen.
261
262Wenn Sie ein Pane mit `focus: true` öffnen, erhält das Pane den Tastaturfokus. Getippte Buchstaben erreichen ein `Input`, sobald es den Fokus hat. Fügen Sie daher `autoFocus: true` zu einem Feld hinzu, das Eingaben annehmen soll, sobald sich das Pane öffnet.
263
264<h3 id="button">
265 `Button`
266</h3>
267
268Eine Schaltfläche führt `onPress` aus. Dieses Beispiel zeigt die Standardform, eine `plain`-Schaltfläche mit einem Hotkey und eine abgeblendete Schaltfläche:
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="Ein Pane mit drei Schaltflächen, eine pro Zeile: Save in Klammern, n: Next ohne Klammern und mit farbigem n sowie Skip in Klammern in Grau." 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="Ein Pane mit drei Schaltflächen, eine pro Zeile: Save in Klammern, n: Next ohne Klammern und mit farbigem n sowie Skip in Klammern in Grau." width="1872" height="262" data-path="images/mods-el-button-dark.png" />
284
285Eine Schaltfläche mit Fokus wird invertiert gezeichnet. Hier hat der Benutzer zweimal Tab gedrückt:
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="Dieselben drei Schaltflächen, wobei die zweite, n: Next, invertiert gezeichnet ist." 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="Dieselben drei Schaltflächen, wobei die zweite, n: Next, invertiert gezeichnet ist." width="1872" height="262" data-path="images/mods-el-button-plain-focused-dark.png" />
290
291<h3 id="input">
292 `Input`
293</h3>
294
295Ein `Input` ist ein einzeiliges Textfeld, das `onSubmit` ausführt, wenn der Benutzer Enter drückt:
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
308Ohne Fokus zeigt das Feld seine Beschriftung und seinen Platzhalter:
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="Ein Pane mit einer Zeile: die Beschriftung Title, dann der Platzhalter Type a title and press Enter in Grau." 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="Ein Pane mit einer Zeile: die Beschriftung Title, dann der Platzhalter Type a title and press Enter in Grau." width="1872" height="186" data-path="images/mods-el-input-dark.png" />
313
314Mit Fokus wird die Beschriftung fett, ein Cursor erscheint und das `submitLabel` wird nach `⏎` angezeigt:
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="Dasselbe Feld mit fetter Beschriftung, einem Blockcursor auf dem ersten Buchstaben des Platzhalters und einem Eingabezeichen, gefolgt vom Wort 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="Dasselbe Feld mit fetter Beschriftung, einem Blockcursor auf dem ersten Buchstaben des Platzhalters und einem Eingabezeichen, gefolgt vom Wort save." width="1872" height="186" data-path="images/mods-el-input-focused-dark.png" />
319
320Durch Tippen wird der Platzhalter ersetzt:
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="Dasselbe Feld mit den getippten Buchstaben Rel, gefolgt vom Eingabezeichen und dem Wort 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="Dasselbe Feld mit den getippten Buchstaben Rel, gefolgt vom Eingabezeichen und dem Wort save." width="1872" height="186" data-path="images/mods-el-input-typed-dark.png" />
325
326<h3 id="select">
327 `Select`
328</h3>
329
330Mit einem `Select` kann der Benutzer eine von mehreren Optionen auswählen. Es führt `onSelect` mit dem `value` der Option aus:
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
348Geschlossen zeigt es seine Beschriftung und die aktuelle Option:
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="Ein Pane mit einer Zeile: die Beschriftung Format, die aktuelle Option Markdown und ein kleiner Pfeil nach unten." 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="Ein Pane mit einer Zeile: die Beschriftung Format, die aktuelle Option Markdown und ein kleiner Pfeil nach unten." width="1872" height="186" data-path="images/mods-el-select-dark.png" />
353
354Geöffnet listet es seine Optionen auf und markiert eine davon:
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="Die geöffnete Auswahl mit ihren drei Optionen unter der Beschriftung. Die zweite Option, HTML, ist invertiert gezeichnet." 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="Die geöffnete Auswahl mit ihren drei Optionen unter der Beschriftung. Die zweite Option, HTML, ist invertiert gezeichnet." width="1872" height="300" data-path="images/mods-el-select-moved-dark.png" />
359
360Nachdem der Benutzer eine Option ausgewählt hat, schließt sich die Liste:
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="Die wieder geschlossene Auswahl, die jetzt HTML als aktuelle Option anzeigt." 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="Die wieder geschlossene Auswahl, die jetzt HTML als aktuelle Option anzeigt." width="1872" height="186" data-path="images/mods-el-select-picked-dark.png" />
365
366<h2 id="draw-pictures">
367 Bilder zeichnen
368</h2>
369
370<h3 id="raster">
371 `Raster`
372</h3>
373
374Ein `Raster` ist ein Gitter aus farbigen Zeichenzellen, etwa für eine Heatmap, eine Sparkline oder ein Spielbrett. Das Terminal zeichnet es. Dieses Beispiel verwendet die Funktion `cellsOf` aus dem Startermodul, die die Zellen in die Zeichenkette packt, die ein `Raster` erwartet. [Ein Gitter aus farbigen Zellen zeichnen](/docs/de/plugins/mods/interface#draw-a-grid-of-colored-cells) erklärt sie:
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="Ein Pane mit einem kleinen Gitter aus farbigen Blöcken, zwei Reihen zu je drei: grün, bernsteinfarben und rot, dann grün, grün und bernsteinfarben." 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="Ein Pane mit einem kleinen Gitter aus farbigen Blöcken, zwei Reihen zu je drei: grün, bernsteinfarben und rot, dann grün, grün und bernsteinfarben." width="1872" height="224" data-path="images/mods-el-raster-dark.png" />
391
392Ein `Raster` rundet jede Farbe auf eine kleinere Palette, sodass `0x2e7d32` als `#337733` gezeichnet wird.
393
394<h3 id="svg">
395 `Svg`
396</h3>
397
398Ein `Svg` zeichnet ein SVG-Dokument in der Desktop-App:
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
410Im Terminal öffnet sich ein Pane, das nur ein `Svg` zurückgibt, leer. Um dort etwas anderes zu zeichnen, prüfen Sie [`e.surface`](/docs/de/plugins/mods/interface#pick-where-to-draw) und geben Sie einen anderen Baum zurück.
411
412<h3 id="image-and-client">
413 `Image` und `Client`
414</h3>
415
416Für zwei weitere Elemente gibt es hier kein Beispiel. `Image` zeichnet ein PNG oder Rohpixel im Terminal. `Client` ist ein Bereich, den eine zweite Datei von Ihnen zeichnet, für Animationen und Zeigereingaben. Die [Elementreferenz](/docs/de/plugins/mods/reference#elements) listet ihre Props auf.
417
418<h2 id="see-where-a-mod-can-draw">
419 Sehen, wo ein Mod zeichnen kann
420</h2>
421
422Alle Beispiele zeichnen in einem Pane. Ein Mod kann auch an anderen Stellen zeichnen und Claude Code aufrufen, um etwas für ihn anzuzeigen:
423
424* **Pane und Band**: [Auswählen, wo gezeichnet wird](/docs/de/plugins/mods/interface#pick-where-to-draw)
425* **Die eigenen Zeilen von Claude Code, etwa der Spinner**: [Ändern, was Claude Code bereits zeichnet](/docs/de/plugins/mods/interface#change-what-claude-code-already-draws)
426* **Toast, Statuszeile und Log-Zeile**: [Etwas anzeigen, ohne einen Turn zu starten](/docs/de/plugins/mods/api#show-something-without-starting-a-turn)
427* **Fragedialog**: [Einen Tool-Aufruf anhalten, bis der Benutzer entscheidet](/docs/de/plugins/mods/events#hold-a-tool-call-until-the-user-decides)
428
429<h2 id="next-steps">
430 Nächste Schritte
431</h2>
432
433* [In der Oberfläche zeichnen](/docs/de/plugins/mods/interface): Schritt für Schritt ein Pane mit Tabs erstellen
434* [Eine Zeichnung testen](/docs/de/plugins/mods/test#test-a-drawing): Ihre Schaltflächen aus einem Test heraus drücken
435* [Elementreferenz](/docs/de/plugins/mods/reference#elements): die wichtigsten Props jedes Elements und die Apps, die es zeichnen