50 lines
		
	
	
		
			1.1 KiB
		
	
	
	
		
			JavaScript
		
	
	
	
	
	
		
		
			
		
	
	
			50 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), | ||
|  |   default: c.cyan('?') | ||
|  | }); | ||
|  | 
 | ||
|  | const symbol = (done, aborted) => aborted ? symbols.aborted : 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 | ||
|  | }; |