[READ-ONLY] Mirror of https://github.com/bombshell-dev/clack. Effortlessly build beautiful command-line apps bomb.sh/docs/clack/basics/getting-started/
cli command-line command-line-app node prompt prompts
5

Configure Feed

Select the types of activity you want to include in your feed.

update package names, commands

Nate Moore (Feb 13, 2023, 10:42 AM -0600) 69e9bcf6 ca24168b

+13 -159
+1 -1
.changeset/config.json
··· 7 7 "access": "public", 8 8 "baseBranch": "main", 9 9 "updateInternalDependencies": "patch", 10 - "ignore": ["demo"] 10 + "ignore": ["@example/*"] 11 11 }
-63
examples/basic-demo/index.ts
··· 1 - import { PasswordPrompt, ConfirmPrompt, isCancel } from '@clack/core'; 2 - import c from 'picocolors'; 3 - import boxen from 'boxen'; 4 - 5 - async function run() { 6 - const text = new PasswordPrompt({ 7 - render() { 8 - const title = `What's your name?\n`; 9 - const boxOpts = { width: 48, padding: { left: 1, right: 1, top: 0, bottom: 0 }}; 10 - switch (this.state) { 11 - case 'initial': { 12 - const input = boxen((!this.value ? c.bgWhite(c.black('P')) + c.dim('assword') : this.valueWithCursor), boxOpts); 13 - return `🙋 ${title}${input}`; 14 - } 15 - case 'active': { 16 - const input = boxen((!this.value ? c.bgWhite(c.black('P')) + c.dim('assword') : this.valueWithCursor), boxOpts); 17 - return `💭 ${title}${input}`; 18 - } 19 - case 'error': { 20 - const input = boxen((!this.value ? c.bgWhite(c.black('P')) + c.dim('assword') : this.valueWithCursor), { ...boxOpts, borderColor: 'yellow' }); 21 - return `🚸 What's your name? ${c.yellow(this.error)}\n${input}`; 22 - } 23 - case 'submit': return `✅ ${title}${boxen(c.dim(this.valueWithCursor), { ...boxOpts, borderColor: 'gray' })}`; 24 - case 'cancel': return `❌ What's your name?`; 25 - } 26 - } 27 - }) 28 - 29 - const value = await text.prompt(); 30 - if (isCancel(value)) { 31 - console.log('See you later!'); 32 - return; 33 - } 34 - 35 - const Option = (label: string, active: boolean) => `${active ? c.cyan('🟦') : '⬜'} ${label}`; 36 - 37 - const select = new ConfirmPrompt({ 38 - active: 'yes', 39 - inactive: 'no', 40 - render() { 41 - const title = `Select an option!\n`; 42 - switch (this.state) { 43 - case 'submit': return `✅ ${title}${c.dim(this.value ? 'yes' : 'no')}`; 44 - case 'cancel': return `❌ ${title.trim()}`; 45 - default: { 46 - return `💭 ${title}${this.value ? c.cyan('yes') : 'yes'} / ${!this.value ? c.cyan('no') : 'no'}`; 47 - } 48 - } 49 - return '' 50 - } 51 - }) 52 - 53 - const choice = await select.prompt(); 54 - if (isCancel(choice)) { 55 - console.log('See you later!'); 56 - return; 57 - } 58 - 59 - console.log({ choice }); 60 - } 61 - 62 - run(); 63 -
+2 -4
examples/basic-demo/package.json examples/basic/package.json
··· 1 1 { 2 - "name": "basic-demo", 2 + "name": "@example/basic", 3 3 "private": true, 4 4 "version": "0.0.0", 5 5 "type": "module", 6 6 "dependencies": { 7 7 "@clack/core": "workspace:*", 8 8 "@clack/prompts": "workspace:*", 9 - "boxen": "^7.0.1", 10 9 "picocolors": "^1.0.0" 11 10 }, 12 11 "scripts": { 13 - "start": "jiti ./index.ts", 14 - "prompt": "jiti ./prompt.ts" 12 + "start": "jiti ./index.ts" 15 13 }, 16 14 "devDependencies": { 17 15 "jiti": "^1.17.0"
+2 -2
examples/basic-demo/prompt.ts examples/basic/index.ts
··· 1 - import { text, select, confirm, intro, outro, cancel, spinner, isCancel, multiSelect } from '@clack/prompts'; 1 + import { text, select, confirm, intro, outro, cancel, spinner, isCancel, multiselect } from '@clack/prompts'; 2 2 import color from 'picocolors'; 3 3 import { setTimeout } from 'node:timers/promises'; 4 4 ··· 43 43 process.exit(0); 44 44 } 45 45 46 - const d = await multiSelect({ 46 + const d = await multiselect({ 47 47 message: 'Select additional tools.', 48 48 options: [ 49 49 {value: 'eslint', label: 'ESLint', hint: 'recommended' },
+1 -1
package.json
··· 5 5 "scripts": { 6 6 "stub": "pnpm -r run prepack --stub", 7 7 "build": "pnpm -r run prepack", 8 - "start": "pnpm --filter basic-demo run start" 8 + "start": "pnpm --filter @example/basic run start" 9 9 }, 10 10 "devDependencies": { 11 11 "@changesets/cli": "^2.26.0",
+7 -88
pnpm-lock.yaml
··· 16 16 typescript: 4.9.5 17 17 unbuild: 1.1.1 18 18 19 - examples/basic-demo: 19 + examples/basic: 20 20 specifiers: 21 21 '@clack/core': workspace:* 22 22 '@clack/prompts': workspace:* 23 - boxen: ^7.0.1 24 23 jiti: ^1.17.0 25 24 picocolors: ^1.0.0 26 25 dependencies: 27 26 '@clack/core': link:../../packages/core 28 27 '@clack/prompts': link:../../packages/prompts 29 - boxen: 7.0.1 30 28 picocolors: 1.0.0 31 29 devDependencies: 32 30 jiti: 1.17.0 ··· 1061 1059 hasBin: true 1062 1060 dev: true 1063 1061 1064 - /ansi-align/3.0.1: 1065 - resolution: {integrity: sha512-IOfwwBF5iczOjp/WeY4YxyjqAFMQoZufdQWDd19SEExbVLNXqvpzSJ/M7Za4/sCPmQ0+GRquoA7bGcINcxew6w==} 1066 - dependencies: 1067 - string-width: 4.2.3 1068 - dev: false 1069 - 1070 1062 /ansi-colors/4.1.3: 1071 1063 resolution: {integrity: sha512-/6w/C21Pm1A7aZitlI5Ni/2J6FFQN8i1Cvz3kHABAAbw93v/NlvKdVOqz7CCWz/3iv/JplRSEEZ83XION15ovw==} 1072 1064 engines: {node: '>=6'} ··· 1075 1067 /ansi-regex/5.0.1: 1076 1068 resolution: {integrity: sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ==} 1077 1069 engines: {node: '>=8'} 1078 - 1079 - /ansi-regex/6.0.1: 1080 - resolution: {integrity: sha512-n5M855fKb2SsfMIiFFoVrABHJC8QtHwVx+mHWP3QcEqBHYienj5dHSgjbxtC0WEZXYt4wcD6zrQElDPhFuZgfA==} 1081 - engines: {node: '>=12'} 1082 - dev: false 1070 + dev: true 1083 1071 1084 1072 /ansi-styles/3.2.1: 1085 1073 resolution: {integrity: sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA==} ··· 1094 1082 dependencies: 1095 1083 color-convert: 2.0.1 1096 1084 dev: true 1097 - 1098 - /ansi-styles/6.2.1: 1099 - resolution: {integrity: sha512-bN798gFfQX+viw3R7yrGWRqnrN2oRkEkUjjl4JNn4E8GxxbjtG3FbrEIIY3l8/hrwUwIeCZvi4QuOTP4MErVug==} 1100 - engines: {node: '>=12'} 1101 - dev: false 1102 1085 1103 1086 /argparse/1.0.10: 1104 1087 resolution: {integrity: sha512-o5Roy6tNG4SL/FOkCAN6RzjiakZS25RLYFrcMttJqbdd8BWrnA+fGz57iN5Pb06pvBGvl5gQ0B48dJlslXvoTg==} ··· 1142 1125 is-windows: 1.0.2 1143 1126 dev: true 1144 1127 1145 - /boxen/7.0.1: 1146 - resolution: {integrity: sha512-8k2eH6SRAK00NDl1iX5q17RJ8rfl53TajdYxE3ssMLehbg487dEVgsad4pIsZb/QqBgYWIl6JOauMTLGX2Kpkw==} 1147 - engines: {node: '>=14.16'} 1148 - dependencies: 1149 - ansi-align: 3.0.1 1150 - camelcase: 7.0.1 1151 - chalk: 5.2.0 1152 - cli-boxes: 3.0.0 1153 - string-width: 5.1.2 1154 - type-fest: 2.19.0 1155 - widest-line: 4.0.1 1156 - wrap-ansi: 8.1.0 1157 - dev: false 1158 - 1159 1128 /brace-expansion/2.0.1: 1160 1129 resolution: {integrity: sha512-XnAIvQ8eM+kC6aULx6wuQiwVsnzsi9d3WxzV3FpWTGA19F621kwdbsAcFKXgKUHZWsy+mY6iL1sHTxWEFCytDA==} 1161 1130 dependencies: ··· 1212 1181 engines: {node: '>=6'} 1213 1182 dev: true 1214 1183 1215 - /camelcase/7.0.1: 1216 - resolution: {integrity: sha512-xlx1yCK2Oc1APsPXDL2LdlNP6+uu8OCDdhOBSVT279M/S+y75O30C2VuD8T2ogdePBBl7PfPF4504tnLgX3zfw==} 1217 - engines: {node: '>=14.16'} 1218 - dev: false 1219 - 1220 1184 /caniuse-lite/1.0.30001451: 1221 1185 resolution: {integrity: sha512-XY7UbUpGRatZzoRft//5xOa69/1iGJRBlrieH6QYrkKLIFn3m7OVEJ81dSrKoy2BnKsdbX5cLrOispZNYo9v2w==, registry: https://registry.yarnpkg.com/, tarball: https://registry.yarnpkg.com/caniuse-lite/-/caniuse-lite-1.0.30001451.tgz} 1222 1186 dev: true ··· 1241 1205 /chalk/5.2.0: 1242 1206 resolution: {integrity: sha512-ree3Gqw/nazQAPuJJEy+avdl7QfZMcUvmHIKgEZkGL+xOBzRvup5Hxo6LHuMceSxOabuJLJm5Yp/92R9eMmMvA==, registry: https://registry.yarnpkg.com/, tarball: https://registry.yarnpkg.com/chalk/-/chalk-5.2.0.tgz} 1243 1207 engines: {node: ^12.17.0 || ^14.13 || >=16.0.0} 1208 + dev: true 1244 1209 1245 1210 /chardet/0.7.0: 1246 1211 resolution: {integrity: sha512-mT8iDcrh03qDGRRmoA2hmBJnxpllMR+0/0qlzjqZES6NdiWDcZkCNAk4rPFZ9Q85r27unkiNNg8ZOiwZXBHwcA==} ··· 1250 1215 resolution: {integrity: sha512-eXTggHWSooYhq49F2opQhuHWgzucfF2YgODK4e1566GQs5BIfP30B0oenwBJHfWxAs2fyPB1s7Mg949zLf61Yw==} 1251 1216 engines: {node: '>=8'} 1252 1217 dev: true 1253 - 1254 - /cli-boxes/3.0.0: 1255 - resolution: {integrity: sha512-/lzGpEWL/8PfI0BmBOPRwp0c/wFNX1RdUML3jK/RcSBA9T8mZDdQpqYBKtCFTOfQbwPqWEOpjqW+Fnayc0969g==} 1256 - engines: {node: '>=10'} 1257 - dev: false 1258 1218 1259 1219 /cliui/6.0.0: 1260 1220 resolution: {integrity: sha512-t6wbgtoCXvAzst7QgXxJYqPt0usEfbgQdftEPbLL/cvv6HPE5VgvqCuAIDR0NgU52ds6rFwqrgakNLrHEjCbrQ==} ··· 1401 1361 path-type: 4.0.0 1402 1362 dev: true 1403 1363 1404 - /eastasianwidth/0.2.0: 1405 - resolution: {integrity: sha512-I88TYZWc9XiYHRQ4/3c5rjjfgkjhLyW2luGIheGERbNQ6OY7yTybanSpDXZa8y7VUP9YmDcYa+eyq4ca7iLqWA==} 1406 - dev: false 1407 - 1408 1364 /electron-to-chromium/1.4.295: 1409 1365 resolution: {integrity: sha512-lEO94zqf1bDA3aepxwnWoHUjA8sZ+2owgcSZjYQy0+uOSEclJX0VieZC+r+wLpSxUHRd6gG32znTWmr+5iGzFw==, registry: https://registry.yarnpkg.com/, tarball: https://registry.yarnpkg.com/electron-to-chromium/-/electron-to-chromium-1.4.295.tgz} 1410 1366 dev: true 1411 1367 1412 1368 /emoji-regex/8.0.0: 1413 1369 resolution: {integrity: sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A==} 1414 - 1415 - /emoji-regex/9.2.2: 1416 - resolution: {integrity: sha512-L18DaJsXSUk2+42pv8mLs5jJT2hqFkFE4j21wOmgbUqsZ2hL72NsUU785g9RXgo3s0ZNgVl42TiHp3ZtOv/Vyg==} 1417 - dev: false 1370 + dev: true 1418 1371 1419 1372 /enquirer/2.3.6: 1420 1373 resolution: {integrity: sha512-yjNnPr315/FjS4zIsUxYguYUPP2e1NK4d7E7ZOLiyYCcbFBiTMyID+2wvm2w6+pZ/odMA7cRkjhsPbltwBOrLg==} ··· 1952 1905 /is-fullwidth-code-point/3.0.0: 1953 1906 resolution: {integrity: sha512-zymm5+u+sCsSWyD9qNaejV3DFvhCKclKdizYaJUuHA83RLjb7nSuGnddCHGv0hk+KY7BMAlsWeK4Ueg6EV6XQg==} 1954 1907 engines: {node: '>=8'} 1908 + dev: true 1955 1909 1956 1910 /is-glob/4.0.3: 1957 1911 resolution: {integrity: sha512-xelSayHH36ZgE7ZWhli7pW34hNbNl8Ojv5KVmkJD4hBdD3th8Tfk9vYasLM+mXWOZhFkgZfxhLSnrwRr4elSSg==} ··· 2693 2647 emoji-regex: 8.0.0 2694 2648 is-fullwidth-code-point: 3.0.0 2695 2649 strip-ansi: 6.0.1 2696 - 2697 - /string-width/5.1.2: 2698 - resolution: {integrity: sha512-HnLOCR3vjcY8beoNLtcjZ5/nxn2afmME6lhrDrebokqMap+XbeW8n9TXpPDOqdGK5qcI3oT0GKTW6wC7EMiVqA==} 2699 - engines: {node: '>=12'} 2700 - dependencies: 2701 - eastasianwidth: 0.2.0 2702 - emoji-regex: 9.2.2 2703 - strip-ansi: 7.0.1 2704 - dev: false 2650 + dev: true 2705 2651 2706 2652 /string.prototype.trimend/1.0.6: 2707 2653 resolution: {integrity: sha512-JySq+4mrPf9EsDBEDYMOb/lM7XQLulwg5R/m1r0PXEFqrV0qHvl58sdTilSXtKOflCsK2E8jxf+GKC0T07RWwQ==} ··· 2724 2670 engines: {node: '>=8'} 2725 2671 dependencies: 2726 2672 ansi-regex: 5.0.1 2727 - 2728 - /strip-ansi/7.0.1: 2729 - resolution: {integrity: sha512-cXNxvT8dFNRVfhVME3JAe98mkXDYN2O1l7jmcwMnOslDeESg1rF/OZMtK0nRAhiari1unG5cD4jG3rapUAkLbw==} 2730 - engines: {node: '>=12'} 2731 - dependencies: 2732 - ansi-regex: 6.0.1 2733 - dev: false 2673 + dev: true 2734 2674 2735 2675 /strip-bom/3.0.0: 2736 2676 resolution: {integrity: sha512-vavAMRXOgBVNF6nyEEmL3DBK19iRpDcoIwW+swQ+CbGiu7lju6t+JklA1MHweoWtadgt4ISVUsXLyDq34ddcwA==} ··· 2820 2760 resolution: {integrity: sha512-4dbzIzqvjtgiM5rw1k5rEHtBANKmdudhGyBEajN01fEyhaAIhsoKNy6y7+IN93IfpFtwY9iqi7kD+xwKhQsNJA==} 2821 2761 engines: {node: '>=8'} 2822 2762 dev: true 2823 - 2824 - /type-fest/2.19.0: 2825 - resolution: {integrity: sha512-RAH822pAdBgcNMAfWnCBU3CFZcfZ/i1eZjwFU/dsLKumyuuP3niueg2UAukXYF0E2AAoc82ZSSf9J0WQBinzHA==} 2826 - engines: {node: '>=12.20'} 2827 - dev: false 2828 2763 2829 2764 /typed-array-length/1.0.4: 2830 2765 resolution: {integrity: sha512-KjZypGq+I/H7HI5HlOoGHkWUUGq+Q0TPhQurLbyrVrvnKTBgzLhIJ7j6J/XTQOi0d1RjyZ0wdas8bKs2p0x3Ng==} ··· 2974 2909 isexe: 2.0.0 2975 2910 dev: true 2976 2911 2977 - /widest-line/4.0.1: 2978 - resolution: {integrity: sha512-o0cyEG0e8GPzT4iGHphIOh0cJOV8fivsXxddQasHPHfoZf1ZexrfeA21w2NaEN1RHE+fXlfISmOE8R9N3u3Qig==} 2979 - engines: {node: '>=12'} 2980 - dependencies: 2981 - string-width: 5.1.2 2982 - dev: false 2983 - 2984 2912 /wrap-ansi/6.2.0: 2985 2913 resolution: {integrity: sha512-r6lPcBGxZXlIcymEu7InxDMhdW0KDxpLgoFLcguasxCaJ/SOIZwINatK9KY/tf+ZrlywOKU0UDj3ATXUBfxJXA==} 2986 2914 engines: {node: '>=8'} ··· 2998 2926 string-width: 4.2.3 2999 2927 strip-ansi: 6.0.1 3000 2928 dev: true 3001 - 3002 - /wrap-ansi/8.1.0: 3003 - resolution: {integrity: sha512-si7QWI6zUMq56bESFvagtmzMdGOtoxfR+Sez11Mobfc7tm+VkUckk9bW2UeffTGVUbOksxmSw0AA2gs8g71NCQ==} 3004 - engines: {node: '>=12'} 3005 - dependencies: 3006 - ansi-styles: 6.2.1 3007 - string-width: 5.1.2 3008 - strip-ansi: 7.0.1 3009 - dev: false 3010 2929 3011 2930 /wrappy/1.0.2: 3012 2931 resolution: {integrity: sha512-l4Sp/DRseor9wL6EvV2+TuQn63dMkPjZ/sp9XkghTEbV9KlPS1xUsZ3u7/IQO4wxtcFB4bgpQPRcR3QCvezPcQ==}