| '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; |