import require$$0 from 'node:readline';
import { __require as requireUtil } from '../util/index.mjs';
import require$$2 from 'node:events';
import { __require as requireSrc } from '../../../../../sisteransi@1.0.5/node_modules/sisteransi/src/index.mjs';
import { __require as requireKleur } from '../../../../../kleur@3.0.3/node_modules/kleur/index.mjs';

var prompt;
var hasRequiredPrompt;
function requirePrompt() {
  if (hasRequiredPrompt) return prompt;
  hasRequiredPrompt = 1;
  const readline = require$$0;
  const {
    action
  } = requireUtil();
  const EventEmitter = require$$2;
  const {
    beep,
    cursor
  } = requireSrc();
  const color = requireKleur();

  /**
   * Base prompt skeleton
   * @param {Stream} [opts.stdin] The Readable stream to listen to
   * @param {Stream} [opts.stdout] The Writable stream to write readline data to
   */
  class Prompt extends EventEmitter {
    constructor(opts = {}) {
      super();
      this.firstRender = true;
      this.in = opts.stdin || process.stdin;
      this.out = opts.stdout || process.stdout;
      this.onRender = (opts.onRender || (() => void 0)).bind(this);
      const rl = readline.createInterface({
        input: this.in,
        escapeCodeTimeout: 50
      });
      readline.emitKeypressEvents(this.in, rl);
      if (this.in.isTTY) this.in.setRawMode(true);
      const isSelect = ['SelectPrompt', 'MultiselectPrompt'].indexOf(this.constructor.name) > -1;
      const keypress = (str, key) => {
        let a = action(key, isSelect);
        if (a === false) {
          this._ && this._(str, key);
        } else if (typeof this[a] === 'function') {
          this[a](key);
        } else {
          this.bell();
        }
      };
      this.close = () => {
        this.out.write(cursor.show);
        this.in.removeListener('keypress', keypress);
        if (this.in.isTTY) this.in.setRawMode(false);
        rl.close();
        this.emit(this.aborted ? 'abort' : this.exited ? 'exit' : 'submit', this.value);
        this.closed = true;
      };
      this.in.on('keypress', keypress);
    }
    fire() {
      this.emit('state', {
        value: this.value,
        aborted: !!this.aborted,
        exited: !!this.exited
      });
    }
    bell() {
      this.out.write(beep);
    }
    render() {
      this.onRender(color);
      if (this.firstRender) this.firstRender = false;
    }
  }
  prompt = Prompt;
  return prompt;
}

export { requirePrompt as __require };
