41 lines
		
	
	
		
			1.1 KiB
		
	
	
	
		
			JavaScript
		
	
	
	
	
	
			
		
		
	
	
			41 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
 | |
| };
 |