You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
40 lines
1.1 KiB
40 lines
1.1 KiB
'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 |
|
};
|
|
|