basant307/AI_Governance_Project
048
1<p align="center">2 <img src="https://github.com/terkelg/prompts/raw/master/prompts.png" alt="Prompts" width="500" />3</p>4 5<h1 align="center">❯ Prompts</h1>6 7<p align="center">8 <a href="https://npmjs.org/package/prompts">9 <img src="https://img.shields.io/npm/v/prompts.svg" alt="version" />10 </a>11 <a href="https://travis-ci.org/terkelg/prompts">12 <img src="https://img.shields.io/travis/terkelg/prompts.svg" alt="travis" />13 </a>14 <a href="https://npmjs.org/package/prompts">15 <img src="https://img.shields.io/npm/dm/prompts.svg" alt="downloads" />16 </a>17 <!---18 <a href="https://packagephobia.now.sh/result?p=prompts">19 <img src="https://packagephobia.now.sh/badge?p=prompts" alt="install size" />20 </a>21 --->22</p>23 24<p align="center">25 <b>Lightweight, beautiful and user-friendly interactive prompts</b><br />26 <sub>>_ Easy to use CLI prompts to enquire users for information▌</sub>27</p>28 29<br />30 31* **Simple**: prompts has [no big dependencies](http://npm.anvaka.com/#/view/2d/prompts) nor is it broken into a [dozen](http://npm.anvaka.com/#/view/2d/inquirer) tiny modules that only work well together.32* **User friendly**: prompt uses layout and colors to create beautiful cli interfaces.33* **Promised**: uses promises and `async`/`await`. No callback hell.34* **Flexible**: all prompts are independent and can be used on their own.35* **Testable**: provides a way to submit answers programmatically.36* **Unified**: consistent experience across all [prompts](#-types).37 38 3940 41 42## ❯ Install43 44```45$ npm install --save prompts46```47 48> This package supports Node 6 and above49 5051 52## ❯ Usage53 54<img src="https://github.com/terkelg/prompts/raw/master/media/example.gif" alt="example prompt" width="499" height="103" />55 56```js57const prompts = require('prompts');58 59(async () => {60 const response = await prompts({61 type: 'number',62 name: 'value',63 message: 'How old are you?',64 validate: value => value < 18 ? `Nightclub is 18+ only` : true65 });66 67 console.log(response); // => { value: 24 }68})();69```70 71> See [`example.js`](https://github.com/terkelg/prompts/blob/master/example.js) for more options.72 73 7475 76 77## ❯ Examples78 79### Single Prompt80 81Prompt with a single prompt object. Returns an object with the response.82 83```js84const prompts = require('prompts');85 86(async () => {87 const response = await prompts({88 type: 'text',89 name: 'meaning',90 message: 'What is the meaning of life?'91 });92 93 console.log(response.meaning);94})();95```96 97### Prompt Chain98 99Prompt with a list of prompt objects. Returns an object with the responses.100Make sure to give each prompt a unique `name` property to prevent overwriting values.101 102```js103const prompts = require('prompts');104 105const questions = [106 {107 type: 'text',108 name: 'username',109 message: 'What is your GitHub username?'110 },111 {112 type: 'number',113 name: 'age',114 message: 'How old are you?'115 },116 {117 type: 'text',118 name: 'about',119 message: 'Tell something about yourself',120 initial: 'Why should I?'121 }122];123 124(async () => {125 const response = await prompts(questions);126 127 // => response => { username, age, about }128})();129```130 131### Dynamic Prompts132 133Prompt properties can be functions too.134Prompt Objects with `type` set to `falsy` values are skipped.135 136```js137const prompts = require('prompts');138 139const questions = [140 {141 type: 'text',142 name: 'dish',143 message: 'Do you like pizza?'144 },145 {146 type: prev => prev == 'pizza' ? 'text' : null,147 name: 'topping',148 message: 'Name a topping'149 }150];151 152(async () => {153 const response = await prompts(questions);154})();155```156 157 158159 160 161## ❯ API162 163### prompts(prompts, options)164 165Type: `Function`<br>166Returns: `Object`167 168Prompter function which takes your [prompt objects](#-prompt-objects) and returns an object with responses.169 170 171#### prompts172 173Type: `Array|Object`<br>174 175Array of [prompt objects](#-prompt-objects).176 These are the questions the user will be prompted. You can see the list of supported [prompt types here](#-types).177 178Prompts can be submitted (<kbd>return</kbd>, <kbd>enter</kbd>) or canceled (<kbd>esc</kbd>, <kbd>abort</kbd>, <kbd>ctrl</kbd>+<kbd>c</kbd>, <kbd>ctrl</kbd>+<kbd>d</kbd>). No property is being defined on the returned response object when a prompt is canceled.179 180#### options.onSubmit181 182Type: `Function`<br>183Default: `() => {}`184 185Callback that's invoked after each prompt submission.186Its signature is `(prompt, answer, answers)` where `prompt` is the current prompt object, `answer` the user answer to the current question and `answers` the user answers so far. Async functions are supported.187 188Return `true` to quit the prompt chain and return all collected responses so far, otherwise continue to iterate prompt objects.189 190**Example:**191```js192(async () => {193 const questions = [{ ... }];194 const onSubmit = (prompt, answer) => console.log(`Thanks I got ${answer} from ${prompt.name}`);195 const response = await prompts(questions, { onSubmit });196})();197```198 199#### options.onCancel200 201Type: `Function`<br>202Default: `() => {}`203 204Callback that's invoked when the user cancels/exits the prompt.205Its signature is `(prompt, answers)` where `prompt` is the current prompt object and `answers` the user answers so far. Async functions are supported.206 207Return `true` to continue and prevent the prompt loop from aborting.208On cancel responses collected so far are returned.209 210**Example:**211```js212(async () => {213 const questions = [{ ... }];214 const onCancel = prompt => {215 console.log('Never stop prompting!');216 return true;217 }218 const response = await prompts(questions, { onCancel });219})();220```221 222### override223 224Type: `Function`225 226Preanswer questions by passing an object with answers to `prompts.override`.227Powerful when combined with arguments of process.228 229**Example**230```js231const prompts = require('prompts');232prompts.override(require('yargs').argv);233 234(async () => {235 const response = await prompts([236 {237 type: 'text',238 name: 'twitter',239 message: `What's your twitter handle?`240 },241 {242 type: 'multiselect',243 name: 'color',244 message: 'Pick colors',245 choices: [246 { title: 'Red', value: '#ff0000' },247 { title: 'Green', value: '#00ff00' },248 { title: 'Blue', value: '#0000ff' }249 ],250 }251 ]);252 253 console.log(response);254})();255```256 257### inject(values)258 259Type: `Function`<br>260 261Programmatically inject responses. This enables you to prepare the responses ahead of time.262If any injected value is found the prompt is immediately resolved with the injected value.263This feature is intended for testing only.264 265#### values266 267Type: `Array`268 269Array with values to inject. Resolved values are removed from the internal inject array.270Each value can be an array of values in order to provide answers for a question asked multiple times.271If a value is an instance of `Error` it will simulate the user cancelling/exiting the prompt.272 273**Example:**274```js275const prompts = require('prompts');276 277prompts.inject([ '@terkelg', ['#ff0000', '#0000ff'] ]);278 279(async () => {280 const response = await prompts([281 {282 type: 'text',283 name: 'twitter',284 message: `What's your twitter handle?`285 },286 {287 type: 'multiselect',288 name: 'color',289 message: 'Pick colors',290 choices: [291 { title: 'Red', value: '#ff0000' },292 { title: 'Green', value: '#00ff00' },293 { title: 'Blue', value: '#0000ff' }294 ],295 }296 ]);297 298 // => { twitter: 'terkelg', color: [ '#ff0000', '#0000ff' ] }299})();300```301 302303 304 305## ❯ Prompt Objects306 307Prompts Objects are JavaScript objects that define the "questions" and the [type of prompt](#-types).308Almost all prompt objects have the following properties:309 310```js311{312 type: String | Function,313 name: String | Function,314 message: String | Function,315 initial: String | Function | Async Function316 format: Function | Async Function,317 onRender: Function318 onState: Function319 stdin: Readable320 stdout: Writeable321}322```323 324Each property be of type `function` and will be invoked right before prompting the user.325 326The function signature is `(prev, values, prompt)`, where `prev` is the value from the previous prompt,327`values` is the response object with all values collected so far and `prompt` is the previous prompt object.328 329**Function example:**330```js331{332 type: prev => prev > 3 ? 'confirm' : null,333 name: 'confirm',334 message: (prev, values) => `Please confirm that you eat ${values.dish} times ${prev} a day?`335}336```337 338The above prompt will be skipped if the value of the previous prompt is less than 3.339 340### type341 342Type: `String|Function`343 344Defines the type of prompt to display. See the list of [prompt types](#-types) for valid values.345 346If `type` is a falsy value the prompter will skip that question.347```js348{349 type: null,350 name: 'forgetme',351 message: `I'll never be shown anyway`,352}353```354 355### name356 357Type: `String|Function`358 359The response will be saved under this key/property in the returned response object.360In case you have multiple prompts with the same name only the latest response will be stored.361 362> Make sure to give prompts unique names if you don't want to overwrite previous values.363 364### message365 366Type: `String|Function`367 368The message to be displayed to the user.369 370### initial371 372Type: `String|Function`373 374Optional default prompt value. Async functions are supported too.375 376### format377 378Type: `Function`379 380Receive the user input and return the formatted value to be used inside the program.381The value returned will be added to the response object.382 383The function signature is `(val, values)`, where `val` is the value from the current prompt and384`values` is the current response object in case you need to format based on previous responses.385 386**Example:**387```js388{389 type: 'number',390 name: 'price',391 message: 'Enter price',392 format: val => Intl.NumberFormat(undefined, { style: 'currency', currency: 'USD' }).format(val);393}394```395 396### onRender397 398Type: `Function`399 400Callback for when the prompt is rendered.401The function receives [kleur](https://github.com/lukeed/kleur) as its first argument and `this` refers to the current prompt.402 403**Example:**404```js405{406 type: 'number',407 message: 'This message will be overridden',408 onRender(kleur) {409 this.msg = kleur.cyan('Enter a number');410 }411}412```413 414### onState415 416Type: `Function`417 418Callback for when the state of the current prompt changes.419The function signature is `(state)` where `state` is an object with a snapshot of the current state.420The state object has two properties `value` and `aborted`. E.g `{ value: 'This is ', aborted: false }`421 422### stdin and stdout423 424Type: `Stream`425 426By default, prompts uses `process.stdin` for receiving input and `process.stdout` for writing output.427If you need to use different streams, for instance `process.stderr`, you can set these with the `stdin` and `stdout` properties.428 429 430431 432 433## ❯ Types434 435* [text](#textmessage-initial-style)436* [password](#passwordmessage-initial)437* [invisible](#invisiblemessage-initial)438* [number](#numbermessage-initial-max-min-style)439* [confirm](#confirmmessage-initial)440* [list](#listmessage-initial)441* [toggle](#togglemessage-initial-active-inactive)442* [select](#selectmessage-choices-initial-hint-warn)443* [multiselect](#multiselectmessage-choices-initial-max-hint-warn)444* [autocompleteMultiselect](#multiselectmessage-choices-initial-max-hint-warn)445* [autocomplete](#autocompletemessage-choices-initial-suggest-limit-style)446* [date](#datemessage-initial-warn)447 448***449 450### text(message, [initial], [style])451> Text prompt for free text input.452 453Hit <kbd>tab</kbd> to autocomplete to `initial` value when provided.454 455#### Example456<img src="https://github.com/terkelg/prompts/raw/master/media/text.gif" alt="text prompt" width="499" height="103" />457 458```js459{460 type: 'text',461 name: 'value',462 message: `What's your twitter handle?`463}464```465 466#### Options467| Param | Type | Description |468| ----- | :--: | ----------- |469| message | `string` | Prompt message to display |470| initial | `string` | Default string value |471| style | `string` | Render style (`default`, `password`, `invisible`, `emoji`). Defaults to `default` |472| format | `function` | Receive user input. The returned value will be added to the response object |473| validate | `function` | Receive user input. Should return `true` if the value is valid, and an error message `String` otherwise. If `false` is returned, a default error message is shown |474| onRender | `function` | On render callback. Keyword `this` refers to the current prompt |475| onState | `function` | On state change callback. Function signature is an `object` with two properties: `value` and `aborted` |476 477**↑ back to:** [Prompt types](#-types)478 479***480 481### password(message, [initial])482> Password prompt with masked input.483 484This prompt is a similar to a prompt of type `'text'` with `style` set to `'password'`.485 486#### Example487<img src="https://github.com/terkelg/prompts/raw/master/media/password.gif" alt="password prompt" width="499" height="103" />488 489```js490{491 type: 'password',492 name: 'value',493 message: 'Tell me a secret'494}495```496 497#### Options498| Param | Type | Description |499| ----- | :--: | ----------- |500| message | `string` | Prompt message to display |501| initial | `string` | Default string value |502| format | `function` | Receive user input. The returned value will be added to the response object |503| validate | `function` | Receive user input. Should return `true` if the value is valid, and an error message `String` otherwise. If `false` is returned, a default error message is shown |504| onRender | `function` | On render callback. Keyword `this` refers to the current prompt |505| onState | `function` | On state change callback. Function signature is an `object` with two properties: `value` and `aborted` |506 507**↑ back to:** [Prompt types](#-types)508 509***510 511### invisible(message, [initial])512> Prompts user for invisible text input.513 514This prompt is working like `sudo` where the input is invisible.515This prompt is a similar to a prompt of type `'text'` with style set to `'invisible'`.516 517#### Example518<img src="https://github.com/terkelg/prompts/raw/master/media/invisible.gif" alt="invisible prompt" width="499" height="103" />519 520```js521{522 type: 'invisible',523 name: 'value',524 message: 'Enter password'525}526```527 528#### Options529| Param | Type | Description |530| ----- | :--: | ----------- |531| message | `string` | Prompt message to display |532| initial | `string` | Default string value |533| format | `function` | Receive user input. The returned value will be added to the response object |534| validate | `function` | Receive user input. Should return `true` if the value is valid, and an error message `String` otherwise. If `false` is returned, a default error message is shown |535| onRender | `function` | On render callback. Keyword `this` refers to the current prompt |536| onState | `function` | On state change callback. Function signature is an `object` with two properties: `value` and `aborted` |537 538**↑ back to:** [Prompt types](#-types)539 540***541 542### number(message, initial, [max], [min], [style])543> Prompts user for number input.544 545You can type in numbers and use <kbd>up</kbd>/<kbd>down</kbd> to increase/decrease the value. Only numbers are allowed as input. Hit <kbd>tab</kbd> to autocomplete to `initial` value when provided.546 547#### Example548<img src="https://github.com/terkelg/prompts/raw/master/media/number.gif" alt="number prompt" width="499" height="103" />549 550```js551{552 type: 'number',553 name: 'value',554 message: 'How old are you?',555 initial: 0,556 style: 'default',557 min: 2,558 max: 10559}560```561 562#### Options563| Param | Type | Description |564| ----- | :--: | ----------- |565| message | `string` | Prompt message to display |566| initial | `number` | Default number value |567| format | `function` | Receive user input. The returned value will be added to the response object |568| validate | `function` | Receive user input. Should return `true` if the value is valid, and an error message `String` otherwise. If `false` is returned, a default error message is shown |569| max | `number` | Max value. Defaults to `Infinity` |570| min | `number` | Min value. Defaults to `-infinity` |571| float | `boolean` | Allow floating point inputs. Defaults to `false` |572| round | `number` | Round `float` values to x decimals. Defaults to `2` |573| increment | `number` | Increment step when using <kbd>arrow</kbd> keys. Defaults to `1` |574| style | `string` | Render style (`default`, `password`, `invisible`, `emoji`). Defaults to `default` |575| onRender | `function` | On render callback. Keyword `this` refers to the current prompt |576| onState | `function` | On state change callback. Function signature is an `object` with two properties: `value` and `aborted` |577 578**↑ back to:** [Prompt types](#-types)579 580***581 582### confirm(message, [initial])583> Classic yes/no prompt.584 585Hit <kbd>y</kbd> or <kbd>n</kbd> to confirm/reject.586 587#### Example588<img src="https://github.com/terkelg/prompts/raw/master/media/confirm.gif" alt="confirm prompt" width="499" height="103" />589 590```js591{592 type: 'confirm',593 name: 'value',594 message: 'Can you confirm?',595 initial: true596}597```598 599 600#### Options601| Param | Type | Description |602| ----- | :--: | ----------- |603| message | `string` | Prompt message to display |604| initial | `boolean` | Default value. Default is `false` |605| format | `function` | Receive user input. The returned value will be added to the response object |606| onRender | `function` | On render callback. Keyword `this` refers to the current prompt |607| onState | `function` | On state change callback. Function signature is an `object` with two properties: `value` and `aborted` |608 609**↑ back to:** [Prompt types](#-types)610 611***612 613### list(message, [initial])614> List prompt that return an array.615 616Similar to the `text` prompt, but the output is an `Array` containing the617string separated by `separator`.618 619```js620{621 type: 'list',622 name: 'value',623 message: 'Enter keywords',624 initial: '',625 separator: ','626}627```628 629<img src="https://github.com/terkelg/prompts/raw/master/media/list.gif" alt="list prompt" width="499" height="103" />630 631 632| Param | Type | Description |633| ----- | :--: | ----------- |634| message | `string` | Prompt message to display |635| initial | `boolean` | Default value |636| format | `function` | Receive user input. The returned value will be added to the response object |637| separator | `string` | String separator. Will trim all white-spaces from start and end of string. Defaults to `','` |638| onRender | `function` | On render callback. Keyword `this` refers to the current prompt |639| onState | `function` | On state change callback. Function signature is an `object` with two properties: `value` and `aborted` |640 641**↑ back to:** [Prompt types](#-types)642 643***644 645### toggle(message, [initial], [active], [inactive])646> Interactive toggle/switch prompt.647 648Use tab or <kbd>arrow keys</kbd>/<kbd>tab</kbd>/<kbd>space</kbd> to switch between options.649 650#### Example651<img src="https://github.com/terkelg/prompts/raw/master/media/toggle.gif" alt="toggle prompt" width="499" height="103" />652 653```js654{655 type: 'toggle',656 name: 'value',657 message: 'Can you confirm?',658 initial: true,659 active: 'yes',660 inactive: 'no'661}662```663 664#### Options665| Param | Type | Description |666| ----- | :--: | ----------- |667| message | `string` | Prompt message to display |668| initial | `boolean` | Default value. Defaults to `false` |669| format | `function` | Receive user input. The returned value will be added to the response object |670| active | `string` | Text for `active` state. Defaults to `'on'` |671| inactive | `string` | Text for `inactive` state. Defaults to `'off'` |672| onRender | `function` | On render callback. Keyword `this` refers to the current prompt |673| onState | `function` | On state change callback. Function signature is an `object` with two properties: `value` and `aborted` |674 675**↑ back to:** [Prompt types](#-types)676 677***678 679### select(message, choices, [initial], [hint], [warn])680> Interactive select prompt.681 682Use <kbd>up</kbd>/<kbd>down</kbd> to navigate. Use <kbd>tab</kbd> to cycle the list.683 684#### Example685<img src="https://github.com/terkelg/prompts/raw/master/media/select.gif" alt="select prompt" width="499" height="130" />686 687```js688{689 type: 'select',690 name: 'value',691 message: 'Pick a color',692 choices: [693 { title: 'Red', description: 'This option has a description', value: '#ff0000' },694 { title: 'Green', value: '#00ff00', disabled: true },695 { title: 'Blue', value: '#0000ff' }696 ],697 initial: 1698}699```700 701#### Options702| Param | Type | Description |703| ----- | :--: | ----------- |704| message | `string` | Prompt message to display |705| initial | `number` | Index of default value |706| format | `function` | Receive user input. The returned value will be added to the response object |707| hint | `string` | Hint to display to the user |708| warn | `string` | Message to display when selecting a disabled option |709| choices | `Array` | Array of strings or choices objects `[{ title, description, value, disabled }, ...]`. The choice's index in the array will be used as its value if it is not specified. |710| onRender | `function` | On render callback. Keyword `this` refers to the current prompt |711| onState | `function` | On state change callback. Function signature is an `object` with two properties: `value` and `aborted` |712 713**↑ back to:** [Prompt types](#-types)714 715***716 717### multiselect(message, choices, [initial], [max], [hint], [warn])718### autocompleteMultiselect(same)719> Interactive multi-select prompt. 720> Autocomplete is a searchable multiselect prompt with the same options. Useful for long lists.721 722Use <kbd>space</kbd> to toggle select/unselect and <kbd>up</kbd>/<kbd>down</kbd> to navigate. Use <kbd>tab</kbd> to cycle the list. You can also use <kbd>right</kbd> to select and <kbd>left</kbd> to deselect.723By default this prompt returns an `array` containing the **values** of the selected items - not their display title.724 725#### Example726<img src="https://github.com/terkelg/prompts/raw/master/media/multiselect.gif" alt="multiselect prompt" width="499" height="130" />727 728```js729{730 type: 'multiselect',731 name: 'value',732 message: 'Pick colors',733 choices: [734 { title: 'Red', value: '#ff0000' },735 { title: 'Green', value: '#00ff00', disabled: true },736 { title: 'Blue', value: '#0000ff', selected: true }737 ],738 max: 2,739 hint: '- Space to select. Return to submit'740}741```742 743#### Options744| Param | Type | Description |745| ----- | :--: | ----------- |746| message | `string` | Prompt message to display |747| format | `function` | Receive user input. The returned value will be added to the response object |748| instructions | `string` or `boolean` | Prompt instructions to display |749| choices | `Array` | Array of strings or choices objects `[{ title, value, disabled }, ...]`. The choice's index in the array will be used as its value if it is not specified. |750| optionsPerPage | `number` | Number of options displayed per page (default: 10) |751| min | `number` | Min select - will display error |752| max | `number` | Max select |753| hint | `string` | Hint to display to the user |754| warn | `string` | Message to display when selecting a disabled option |755| onRender | `function` | On render callback. Keyword `this` refers to the current prompt |756| onState | `function` | On state change callback. Function signature is an `object` with two properties: `value` and `aborted` |757 758This is one of the few prompts that don't take a initial value.759If you want to predefine selected values, give the choice object an `selected` property of `true`.760 761**↑ back to:** [Prompt types](#-types)762 763***764 765### autocomplete(message, choices, [initial], [suggest], [limit], [style])766> Interactive auto complete prompt.767 768The prompt will list options based on user input. Type to filter the list.769Use <kbd>⇧</kbd>/<kbd>⇩</kbd> to navigate. Use <kbd>tab</kbd> to cycle the result. Use <kbd>Page Up</kbd>/<kbd>Page Down</kbd> (on Mac: <kbd>fn</kbd> + <kbd>⇧</kbd> / <kbd>⇩</kbd>) to change page. Hit <kbd>enter</kbd> to select the highlighted item below the prompt.770 771The default suggests function is sorting based on the `title` property of the choices.772You can overwrite how choices are being filtered by passing your own suggest function.773 774#### Example775<img src="https://github.com/terkelg/prompts/raw/master/media/autocomplete.gif" alt="auto complete prompt" width="499" height="163" />776 777```js778{779 type: 'autocomplete',780 name: 'value',781 message: 'Pick your favorite actor',782 choices: [783 { title: 'Cage' },784 { title: 'Clooney', value: 'silver-fox' },785 { title: 'Gyllenhaal' },786 { title: 'Gibson' },787 { title: 'Grant' }788 ]789}790```791 792#### Options793| Param | Type | Description |794| ----- | :--: | ----------- |795| message | `string` | Prompt message to display |796| format | `function` | Receive user input. The returned value will be added to the response object |797| choices | `Array` | Array of auto-complete choices objects `[{ title, value }, ...]` |798| suggest | `function` | Filter function. Defaults to sort by `title` property. `suggest` should always return a promise. Filters using `title` by default |799| limit | `number` | Max number of results to show. Defaults to `10` |800| style | `string` | Render style (`default`, `password`, `invisible`, `emoji`). Defaults to `'default'` |801| initial | `string \| number` | Default initial value |802| clearFirst | `boolean` | The first ESCAPE keypress will clear the input |803| fallback | `string` | Fallback message when no match is found. Defaults to `initial` value if provided |804| onRender | `function` | On render callback. Keyword `this` refers to the current prompt |805| onState | `function` | On state change callback. Function signature is an `object` with three properties: `value`, `aborted` and `exited` |806 807Example on what a `suggest` function might look like:808```js809const suggestByTitle = (input, choices) =>810 Promise.resolve(choices.filter(i => i.title.slice(0, input.length) === input))811```812 813**↑ back to:** [Prompt types](#-types)814 815***816 817### date(message, [initial], [warn])818> Interactive date prompt.819 820Use <kbd>left</kbd>/<kbd>right</kbd>/<kbd>tab</kbd> to navigate. Use <kbd>up</kbd>/<kbd>down</kbd> to change date.821 822#### Example823<img src="https://github.com/terkelg/prompts/raw/master/media/date.gif" alt="date prompt" width="499" height="103" />824 825```js826{827 type: 'date',828 name: 'value',829 message: 'Pick a date',830 initial: new Date(1997, 09, 12),831 validate: date => date > Date.now() ? 'Not in the future' : true832}833```834 835#### Options836| Param | Type | Description |837| ----- | :--: | ----------- |838| message | `string` | Prompt message to display |839| initial | `date` | Default date |840| locales | `object` | Use to define custom locales. See below for an example. |841| mask | `string` | The format mask of the date. See below for more information.<br />Default: `YYYY-MM-DD HH:mm:ss` |842| validate | `function` | Receive user input. Should return `true` if the value is valid, and an error message `String` otherwise. If `false` is returned, a default error message is shown |843| onRender | `function` | On render callback. Keyword `this` refers to the current prompt |844| onState | `function` | On state change callback. Function signature is an `object` with two properties: `value` and `aborted` |845 846Default locales:847 848```javascript849{850 months: [851 'January', 'February', 'March', 'April',852 'May', 'June', 'July', 'August',853 'September', 'October', 'November', 'December'854 ],855 monthsShort: [856 'Jan', 'Feb', 'Mar', 'Apr', 'May', 'Jun',857 'Jul', 'Aug', 'Sep', 'Oct', 'Nov', 'Dec'858 ],859 weekdays: [860 'Sunday', 'Monday', 'Tuesday', 'Wednesday',861 'Thursday', 'Friday', 'Saturday'862 ],863 weekdaysShort: [864 'Sun', 'Mon', 'Tue', 'Wed', 'Thu', 'Fri', 'Sat'865 ]866}867```868>**Formatting**: See full list of formatting options in the [wiki](https://github.com/terkelg/prompts/wiki/Date-Time-Formatting)869 870871 872**↑ back to:** [Prompt types](#-types)873 874***875 876## ❯ Credit877Many of the prompts are based on the work of [derhuerst](https://github.com/derhuerst).878 879 880## ❯ License881 882MIT © [Terkel Gjervig](https://terkel.com)883 