CoolFace
Datasetpublic

basant307/AI_Governance_Project

sourceHugging Faceapache-2.0updated 2mo agoView on Hugging Face
0likes48downloads
readme.md883 linesDownload Raw Back to prompts
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 39![split](https://github.com/terkelg/prompts/raw/master/media/split.png)40 41 42## ❯ Install43 44```45$ npm install --save prompts46```47 48> This package supports Node 6 and above49 50![split](https://github.com/terkelg/prompts/raw/master/media/split.png)51 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 74![split](https://github.com/terkelg/prompts/raw/master/media/split.png)75 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 158![split](https://github.com/terkelg/prompts/raw/master/media/split.png)159 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 302![split](https://github.com/terkelg/prompts/raw/master/media/split.png)303 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 430![split](https://github.com/terkelg/prompts/raw/master/media/split.png)431 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 870![split](https://github.com/terkelg/prompts/raw/master/media/split.png)871 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 
basant307/AI_Governance_Project · CoolFace