···8888Clack provides several high-level components that make it easy to build interactive CLIs:
89899090- `text()` - For text input with validation
9191+- `multiline()` - For multi-line text input
9192- `password()` - For secure password input with masking
9293- `select()` - For selection menus
9394- `selectKey()` - For choosing an option by pressing its key
+2-1
src/content/docs/clack/packages/core.mdx
···177177 - Character masking
178178 - Validation support
179179 - `clearOnError` option to reset on validation failure
180180+ - Empty submit resolves to `""`, matching `TextPrompt` and `Promise<string | symbol>` (v1.4.2)
1801811811826. **MultiSelectPrompt**: For multiple selections
182183 - Checkbox interface
···201202 - Optional `separator` override for display
202203 - `minDate` / `maxDate` bounds and `DateParts` segment values
203204204204-10. **Multi-line input**: v1.2.0 does not include a dedicated multi-line prompt in `@clack/core` or `@clack/prompts`. Use `text()` for a single line, an external editor or stdin for paragraphs, or extend `Prompt` for custom multi-line TTY behavior.
205205+10. **Multi-line input**: Use [`multiline()`](/docs/clack/packages/prompts#multi-line-text) from `@clack/prompts` for multi-line text entry (since v1.3.0). `@clack/core` provides the underlying prompt primitive; extend `Prompt` directly only when you need custom multi-line TTY behavior.
205206206207## Layout utilities
207208
+22-2
src/content/docs/clack/packages/prompts.mdx
···165165- `mask`: Character to use for masking input. Default: `'▪/•'`.
166166- `validate`: A function or a [Standard Schema](https://github.com/standard-schema/standard-schema) that validates user input. If a custom function is given, you should return a `string` or `Error` to show as a validation error, or `undefined` to accept the result.
167167- `clearOnError`: When enabled it causes the input to be cleared if/when validation fails. Default: `false`.
168168+- Submitting with no input resolves to `""`, matching `text()` and the documented `Promise<string | symbol>` return type (v1.4.2).
168169- All [Common Options](#common-options)
169170170171Common options (`withGuide`, `signal`, `input`, `output`) are also supported.
171172172173### Multi-line Text
173174174174-The multi-line component accepts multiple lines of text input. By default, pressing Enter twice submits the input.
175175+The multi-line component accepts multiple lines of text input. By default, pressing Enter twice **at the end of the input** submits; a double Enter elsewhere in the text adds a blank line instead (v1.4.2).
175176176177```ts twoslash
177178import { multiline } from '@clack/prompts';
···191192192193Options:
193194194194-- `showSubmit`: When enabled it shows a `[ submit ]` button that can be focused with tab. By default, pressing Enter twice submits the input. Default: `false`.
195195+- `showSubmit`: When enabled it shows a `[ submit ]` button that can be focused with tab. By default, pressing Enter twice at the end of the input submits. Default: `false`.
196196+- `initialValue`: Pre-fills editable content when the prompt opens; the cursor is placed at the end (v1.4.2). See also [Text Options](#text-input).
195197- All [Text Options](#text-input)
196198197199### Selection
198200201201+`select`, `multiselect`, and `groupMultiselect` show persistent keyboard hint footers while active (v1.6.0), matching `autocomplete`. There is no option to disable them.
202202+199203#### Simple value
200204201205```ts twoslash
···217221<font color="#06989A">│</font> <font color="#4E9A06">●</font> Next.js (React framework)
218222<font color="#06989A">│</font> ○ Astro (Content-focused)
219223<font color="#06989A">│</font> ○ SvelteKit (Compile-time framework)
224224+<font color="#06989A">│</font> <font color="#AAAAAA">↑/↓ to navigate • Enter: confirm</font>
220225<font color="#06989A">└</font></pre>
221226222227#### Complex value
···290295<font color="#06989A">│</font> <font color="#4E9A06">◼</font> Next.js (React framework)
291296<font color="#06989A">│</font> <font color="#06989A">◻</font> Astro (Content-focused)
292297<font color="#06989A">│</font> ◻ SvelteKit (Compile-time framework)
298298+<font color="#06989A">│</font> <font color="#AAAAAA">↑/↓ to navigate • Space: select • Enter: confirm</font>
293299<font color="#06989A">└</font></pre>
294300295301### Select by key
···588594<font color="#06989A">│</font> │ ◻ Prettier (Code formatter)
589595<font color="#06989A">│</font> │ ◻ ESLint (Linter)
590596<font color="#06989A">│</font> └ <font color="#4E9A06">◼</font> Biome.js (Formatter and linter)
597597+<font color="#06989A">│</font> <font color="#AAAAAA">↑/↓ to navigate • Space: select • Enter: confirm</font>
591598<font color="#06989A">└</font></pre>
592599593600Options:
···916923<font color="#555753">│</font> You can edit the file src/index.jsx <font color="#555753">│</font>
917924<font color="#555753">│</font> <font color="#555753">│</font>
918925<font color="#555753">├───────────────────────────────────────╯</font></pre>
926926+927927+<Aside type="note">As of v1.6.0, body lines in `note()` are no longer dimmed by default. To restore the previous styling, pass a `format` function—for example, using `styleText` from `node:util`:</Aside>
928928+929929+```ts twoslash
930930+import { note } from '@clack/prompts';
931931+import { styleText } from 'node:util';
932932+933933+note(
934934+ 'You can edit the file src/index.jsx',
935935+ 'Next steps.',
936936+ { format: (text) => styleText('dim', text) }
937937+);
938938+```
919939920940The second parameter (the title) is optional. You can also provide a format function to customize how each line is displayed:
921941