40 lines
		
	
	
		
			1.0 KiB
		
	
	
	
		
			JavaScript
		
	
	
	
	
	
		
		
			
		
	
	
			40 lines
		
	
	
		
			1.0 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 | ||
|  | }; |