$npx -y skills add skilld-dev/skilld --skill bombshell-dev-clackALWAYS use when writing code importing \"@clack/prompts\". Consult for debugging, best practices, or modifying @clack/prompts, clack/prompts, clack prompts, clack.
| 1 | # bombshell-dev/clack `@clack/prompts` |
| 2 | |
| 3 | **Version:** 1.0.1 (yesterday) |
| 4 | **Deps:** picocolors@^1.0.0, sisteransi@^1.0.5, @clack/core@1.0.1 |
| 5 | **Tags:** alpha: 1.0.0-alpha.10 (2 weeks ago), latest: 1.0.1 (yesterday) |
| 6 | |
| 7 | **References:** [package.json](./.skilld/pkg/package.json) • [README](./.skilld/pkg/README.md) • [GitHub Issues](./.skilld/issues/_INDEX.md) • [Releases](./.skilld/releases/_INDEX.md) |
| 8 | |
| 9 | ## Search |
| 10 | |
| 11 | Use `npx -y skilld search` instead of grepping `.skilld/` directories — hybrid semantic + keyword search across all indexed docs, issues, and releases. |
| 12 | |
| 13 | ```bash |
| 14 | npx -y skilld search "query" -p @clack/prompts |
| 15 | npx -y skilld search "issues:error handling" -p @clack/prompts |
| 16 | npx -y skilld search "releases:deprecated" -p @clack/prompts |
| 17 | ``` |
| 18 | |
| 19 | Filters: `docs:`, `issues:`, `releases:` prefix narrows by source type. |
| 20 | |
| 21 | ## API Changes |
| 22 | |
| 23 | ⚠️ **ESM-only** — v1.0 dropped CJS dual-publish, `require('@clack/prompts')` no longer works [source](./.skilld/releases/@clack/prompts@1.0.0.md) |
| 24 | |
| 25 | ⚠️ `spinner.stop(msg, 1)` / `spinner.stop(msg, 2)` — v1.0 replaced numeric codes with `spinner.cancel(msg)` and `spinner.error(msg)` [source](./.skilld/releases/@clack/prompts@1.0.0.md) |
| 26 | |
| 27 | ⚠️ `suggestion` prompt — added then removed in v1.0, use `path` prompt (autocomplete-based) instead [source](./.skilld/releases/@clack/prompts@1.0.0.md) |
| 28 | |
| 29 | ⚠️ `placeholder` in `text()` — v1.0 changed to visual-only hint, no longer used as tabbable/return value [source](./.skilld/releases/@clack/prompts@1.0.0.md) |
| 30 | |
| 31 | ✨ `autocomplete()` / `autocompleteMultiselect()` — new in v1.0, searchable select with `filter` option for custom/fuzzy matching [source](./.skilld/releases/@clack/prompts@1.0.0.md) |
| 32 | |
| 33 | ✨ `progress()` — new in v1.0, displays a progress bar with `start()`, `stop()`, `cancel()`, `error()` methods [source](./.skilld/releases/@clack/prompts@1.0.0.md) |
| 34 | |
| 35 | ✨ `taskLog()` — new in v1.0, scrolling log output cleared on success; supports `group()` for nested log sections [source](./.skilld/releases/@clack/prompts@1.0.0.md) |
| 36 | |
| 37 | ✨ `box()` — new in v1.0, renders boxed text similar to `note` [source](./.skilld/releases/@clack/prompts@1.0.0.md) |
| 38 | |
| 39 | ✨ `path()` — new in v1.0, autocomplete-based file path prompt [source](./.skilld/releases/@clack/prompts@1.0.0.md) |
| 40 | |
| 41 | ✨ `stream.step()` — new in v0.10, renders async iterable message streams (useful for LLM output) [source](./.skilld/releases/@clack/prompts@0.10.0.md) |
| 42 | |
| 43 | ✨ `spinner({ indicator: 'timer' })` — new in v0.10, shows elapsed time instead of dots animation [source](./.skilld/releases/@clack/prompts@0.10.0.md) |
| 44 | |
| 45 | ✨ `updateSettings({ aliases, messages })` — new in v0.9, configures global keybindings and i18n cancel/error messages [source](./.skilld/releases/@clack/prompts@0.9.0.md) |
| 46 | |
| 47 | ✨ `signal` option — new in v0.9, all prompts accept `AbortSignal` for programmatic cancellation [source](./.skilld/releases/@clack/prompts@0.9.0.md) |
| 48 | |
| 49 | ✨ `withGuide` option — new in v1.0, disables the default clack border on any prompt [source](./.skilld/releases/@clack/prompts@1.0.0.md) |
| 50 | |
| 51 | ✨ `spinner.clear()` — new in v1.0, stops and clears spinner output entirely [source](./.skilld/releases/@clack/prompts@1.0.0.md) |
| 52 | |
| 53 | ✨ `confirm({ vertical: true })` — new in v1.0.1, arranges yes/no options vertically [source](./.skilld/releases/@clack/prompts@1.0.1.md) |
| 54 | |
| 55 | ## Best Practices |
| 56 | |
| 57 | ✅ Use `spinner.cancel()` and `spinner.error()` instead of stop codes — v1.0 replaced `stop(msg, code)` with distinct methods [source](./.skilld/releases/@clack/prompts@1.0.0.md) |
| 58 | |
| 59 | ```ts |
| 60 | const s = spinner() |
| 61 | s.start('Deploying') |
| 62 | // s.stop('Done') // success |
| 63 | // s.cancel('Aborted') // user cancelled (CTRL+C) |
| 64 | // s.error('Failed') // error occurred |
| 65 | // s.clear() // stop and clear all output |
| 66 | |
| 67 | ``` |
| 68 | ✅ Pass `signal` to prompts for programmatic cancellation — all prompts accept `AbortSignal` since v0.9.0 [source](./.skilld/releases/@clack/prompts@0.9.0.md) |
| 69 | |
| 70 | ```ts |
| 71 | const answer = await confirm({ |
| 72 | message: 'Continue?', |
| 73 | signal: AbortSignal.timeout(5000), |
| 74 | }) |
| 75 | ``` |
| 76 | |
| 77 | ✅ Use `group()` with `onCancel` instead of checking `isCancel` after every prompt — centralizes cancellation handling for multi-step flows [source](./.skilld/pkg/README.md) |
| 78 | |
| 79 | ```ts |
| 80 | const result = await p.group({ |
| 81 | name: () => p.text({ message: 'Name?' }), |
| 82 | lang: () => p.select({ message: 'Language?', options }), |
| 83 | }, { |
| 84 | onCancel: () => { p.cancel('Cancelled.'); process.exit(0) }, |
| 85 | }) |
| 86 | ``` |
| 87 | |
| 88 | ✅ Use `updateSettings` for global i18n messages and key aliases — per-instance options override globals [source](./.skilld/releases/@clack/prompts@1.0.0.md) |
| 89 | |
| 90 | ```ts |
| 91 | import { updateSettings } from '@clack/prompts' |
| 92 | updateSettings({ |
| 93 | aliases: { w: 'up', s: 'down' }, |
| 94 | messages: { cancel: 'Cancelado', error: 'Error' }, |
| 95 | }) |
| 96 | ``` |
| 97 | |
| 98 | ✅ Use `stream` instead of `log` for LLM/async output — accepts sync and async iterables, r |