|
|
|
import chalk from 'chalk'
|
|
|
|
import chalkAnimation from 'chalk-animation'
|
|
|
|
import gradient from 'gradient-string'
|
|
|
|
import figlet from 'figlet'
|
|
|
|
import { createSpinner } from 'nanospinner'
|
|
|
|
import { delay as sleep, selectRandom } from '../ao-lib/util.js'
|
|
|
|
import { centerLines } from './strings.js'
|
|
|
|
|
|
|
|
// Displays a brief randomly-selected rainbow-animated phrase
|
|
|
|
const greetingMessages = ['Portaling!', 'You are a Unicorn!', "Here we go!", "Wow!", "AO Loading...", "Powering Up!", "Unicorn Portal", "Don't Panic!"]
|
|
|
|
export async function unicornPortal(ms) {
|
|
|
|
const randomGreetingMessage = selectRandom(greetingMessages)
|
|
|
|
const rainbowTitle = chalkAnimation.rainbow(randomGreetingMessage + '\n')
|
|
|
|
await sleep(ms)
|
|
|
|
rainbowTitle.stop()
|
|
|
|
}
|
|
|
|
|
|
|
|
// Prints the given message to the screen in the given ASCII art style. Here is a list of decent styles:
|
|
|
|
const asciiFonts = ['Standard', 'Digital', 'Bubble', 'Script', 'Mini', 'Banner', 'Alphabet', 'Avatar', 'Chunky', 'Computer', 'Contessa', 'Gothic', 'Invita', 'Lockergnome', 'Madrid', 'Morse', 'Moscow', 'Pawp', 'Pepper', 'Pyramid', 'Rectangles', 'Shadow', 'Short', 'Slant', 'Small', 'Stampatello', 'Stop', 'Straight', 'Thick', 'Thin', 'Weird']
|
|
|
|
export async function asciiArt(message, style) {
|
|
|
|
if(!style) style = selectRandom(asciiFonts)
|
|
|
|
let art = figlet.textSync(message || 'Autonomous Organization', { font: style })
|
|
|
|
art = centerLines(art)
|
|
|
|
console.log(gradient.pastel.multiline(art))
|
|
|
|
}
|
|
|
|
|
|
|
|
// Clears the console
|
|
|
|
export function clearScreen() {
|
|
|
|
console.clear()
|
|
|
|
}
|
|
|
|
|
|
|
|
// Displays a spinner for 1.2 secconds with the given messages during and after the timer completes
|
|
|
|
export async function spinnerWait(waitingMessage, doneMessage, ms = 1200) {
|
|
|
|
const spinner = createSpinner(waitingMessage || 'Please wait...').start()
|
|
|
|
await sleep(ms)
|
|
|
|
spinner.success({ text: doneMessage || 'Done.' })
|
|
|
|
}
|
|
|
|
|
|
|
|
// Starts a new spinner and returns a function that, when called, will stop it
|
|
|
|
export function spinner(waitingMessage = 'Please wait...', doneMessage = 'Done.') {
|
|
|
|
const spinner = createSpinner(waitingMessage).start()
|
|
|
|
return (doneMessageOverwrite = null) => {
|
|
|
|
spinner.success({text: doneMessageOverwrite || doneMessage})
|
|
|
|
}
|
|
|
|
}
|