'use strict'; const { define, width } = require('./utils'); class State { constructor(prompt) { let options = prompt.options; define(this, '_prompt', prompt); this.type = prompt.type; this.name = prompt.name; this.message = ''; this.header = ''; this.footer = ''; this.error = ''; this.hint = ''; this.input = ''; this.cursor = 0; this.index = 0; this.lines = 0; this.tick = 0; this.prompt = ''; this.buffer = ''; this.width = width(options.stdout || process.stdout); Object.assign(this, options); this.name = this.name || this.message; this.message = this.message || this.name; this.symbols = prompt.symbols; this.styles = prompt.styles; this.required = new Set(); this.cancelled = false; this.submitted = false; } clone() { let state = { ...this }; state.status = this.status; state.buffer = Buffer.from(state.buffer); delete state.clone; return state; } set color(val) { this._color = val; } get color() { let styles = this.prompt.styles; if (this.cancelled) return styles.cancelled; if (this.submitted) return styles.submitted; let color = this._color || styles[this.status]; return typeof color === 'function' ? color : styles.pending; } set loading(value) { this._loading = value; } get loading() { if (typeof this._loading === 'boolean') return this._loading; if (this.loadingChoices) return 'choices'; return false; } get status() { if (this.cancelled) return 'cancelled'; if (this.submitted) return 'submitted'; return 'pending'; } } module.exports = State;