51 lines
		
	
	
		
			1.1 KiB
		
	
	
	
		
			JavaScript
		
	
	
	
	
	
			
		
		
	
	
			51 lines
		
	
	
		
			1.1 KiB
		
	
	
	
		
			JavaScript
		
	
	
	
	
	
| 'use strict';
 | |
| 
 | |
| const c = require('kleur');
 | |
| 
 | |
| const figures = require('./figures'); // rendering user input.
 | |
| 
 | |
| 
 | |
| const styles = Object.freeze({
 | |
|   password: {
 | |
|     scale: 1,
 | |
|     render: input => '*'.repeat(input.length)
 | |
|   },
 | |
|   emoji: {
 | |
|     scale: 2,
 | |
|     render: input => '😃'.repeat(input.length)
 | |
|   },
 | |
|   invisible: {
 | |
|     scale: 0,
 | |
|     render: input => ''
 | |
|   },
 | |
|   default: {
 | |
|     scale: 1,
 | |
|     render: input => `${input}`
 | |
|   }
 | |
| });
 | |
| 
 | |
| const render = type => styles[type] || styles.default; // icon to signalize a prompt.
 | |
| 
 | |
| 
 | |
| const symbols = Object.freeze({
 | |
|   aborted: c.red(figures.cross),
 | |
|   done: c.green(figures.tick),
 | |
|   exited: c.yellow(figures.cross),
 | |
|   default: c.cyan('?')
 | |
| });
 | |
| 
 | |
| const symbol = (done, aborted, exited) => aborted ? symbols.aborted : exited ? symbols.exited : done ? symbols.done : symbols.default; // between the question and the user's input.
 | |
| 
 | |
| 
 | |
| const delimiter = completing => c.gray(completing ? figures.ellipsis : figures.pointerSmall);
 | |
| 
 | |
| const item = (expandable, expanded) => c.gray(expandable ? expanded ? figures.pointerSmall : '+' : figures.line);
 | |
| 
 | |
| module.exports = {
 | |
|   styles,
 | |
|   render,
 | |
|   symbols,
 | |
|   symbol,
 | |
|   delimiter,
 | |
|   item
 | |
| }; |