| 'use strict'; | 
|   | 
| const Prompt = require('../prompt'); | 
| const { isPrimitive, hasColor } = require('../utils'); | 
|   | 
| class BooleanPrompt extends Prompt { | 
|   constructor(options) { | 
|     super(options); | 
|     this.cursorHide(); | 
|   } | 
|   | 
|   async initialize() { | 
|     let initial = await this.resolve(this.initial, this.state); | 
|     this.input = await this.cast(initial); | 
|     await super.initialize(); | 
|   } | 
|   | 
|   dispatch(ch) { | 
|     if (!this.isValue(ch)) return this.alert(); | 
|     this.input = ch; | 
|     return this.submit(); | 
|   } | 
|   | 
|   format(value) { | 
|     let { styles, state } = this; | 
|     return !state.submitted ? styles.primary(value) : styles.success(value); | 
|   } | 
|   | 
|   cast(input) { | 
|     return this.isTrue(input); | 
|   } | 
|   | 
|   isTrue(input) { | 
|     return /^[ty1]/i.test(input); | 
|   } | 
|   | 
|   isFalse(input) { | 
|     return /^[fn0]/i.test(input); | 
|   } | 
|   | 
|   isValue(value) { | 
|     return isPrimitive(value) && (this.isTrue(value) || this.isFalse(value)); | 
|   } | 
|   | 
|   async hint() { | 
|     if (this.state.status === 'pending') { | 
|       let hint = await this.element('hint'); | 
|       if (!hasColor(hint)) { | 
|         return this.styles.muted(hint); | 
|       } | 
|       return hint; | 
|     } | 
|   } | 
|   | 
|   async render() { | 
|     let { input, size } = this.state; | 
|   | 
|     let prefix = await this.prefix(); | 
|     let sep = await this.separator(); | 
|     let msg = await this.message(); | 
|     let hint = this.styles.muted(this.default); | 
|   | 
|     let promptLine = [prefix, msg, hint, sep].filter(Boolean).join(' '); | 
|     this.state.prompt = promptLine; | 
|   | 
|     let header = await this.header(); | 
|     let value = this.value = this.cast(input); | 
|     let output = await this.format(value); | 
|     let help = (await this.error()) || (await this.hint()); | 
|     let footer = await this.footer(); | 
|   | 
|     if (help && !promptLine.includes(help)) output += ' ' + help; | 
|     promptLine += ' ' + output; | 
|   | 
|     this.clear(size); | 
|     this.write([header, promptLine, footer].filter(Boolean).join('\n')); | 
|     this.restore(); | 
|   } | 
|   | 
|   set value(value) { | 
|     super.value = value; | 
|   } | 
|   get value() { | 
|     return this.cast(super.value); | 
|   } | 
| } | 
|   | 
| module.exports = BooleanPrompt; |