'use strict'; Object.defineProperty(exports, '__esModule', { value: true }); exports.default = void 0; function _constants() { const data = require('../constants'); _constants = function () { return data; }; return data; } function _defineProperty(obj, key, value) { if (key in obj) { Object.defineProperty(obj, key, { value: value, enumerable: true, configurable: true, writable: true }); } else { obj[key] = value; } return obj; } class Prompt { constructor() { _defineProperty(this, '_entering', void 0); _defineProperty(this, '_value', void 0); _defineProperty(this, '_onChange', void 0); _defineProperty(this, '_onSuccess', void 0); _defineProperty(this, '_onCancel', void 0); _defineProperty(this, '_offset', void 0); _defineProperty(this, '_promptLength', void 0); _defineProperty(this, '_selection', void 0); _defineProperty(this, '_onResize', () => { this._onChange(); }); // Copied from `enter` to satisfy TS this._entering = true; this._value = ''; this._selection = null; this._offset = -1; this._promptLength = 0; this._onChange = () => {}; this._onSuccess = () => {}; this._onCancel = () => {}; } enter(onChange, onSuccess, onCancel) { this._entering = true; this._value = ''; this._onSuccess = onSuccess; this._onCancel = onCancel; this._selection = null; this._offset = -1; this._promptLength = 0; this._onChange = () => onChange(this._value, { max: 10, offset: this._offset }); this._onChange(); process.stdout.on('resize', this._onResize); } setPromptLength(length) { this._promptLength = length; } setPromptSelection(selected) { this._selection = selected; } put(key) { switch (key) { case _constants().KEYS.ENTER: this._entering = false; this._onSuccess(this._selection || this._value); this.abort(); break; case _constants().KEYS.ESCAPE: this._entering = false; this._onCancel(this._value); this.abort(); break; case _constants().KEYS.ARROW_DOWN: this._offset = Math.min(this._offset + 1, this._promptLength - 1); this._onChange(); break; case _constants().KEYS.ARROW_UP: this._offset = Math.max(this._offset - 1, -1); this._onChange(); break; case _constants().KEYS.ARROW_LEFT: case _constants().KEYS.ARROW_RIGHT: break; case _constants().KEYS.CONTROL_U: this._value = ''; this._offset = -1; this._selection = null; this._onChange(); break; default: this._value = key === _constants().KEYS.BACKSPACE ? this._value.slice(0, -1) : this._value + key; this._offset = -1; this._selection = null; this._onChange(); break; } } abort() { this._entering = false; this._value = ''; process.stdout.removeListener('resize', this._onResize); } isEntering() { return this._entering; } } exports.default = Prompt;