constructor(opts={}) {
    super(opts);
    this.msg = opts.message;
    this.cursor = opts.cursor || 0;
    this.scrollIndex = opts.cursor || 0;
    this.hint = opts.hint || '';
    this.warn = opts.warn || '- This option is disabled -';
    this.minSelected = opts.min;
    this.showMinError = false;
    this.maxChoices = opts.max;
    this.instructions = opts.instructions;
    this.optionsPerPage = opts.optionsPerPage || 10;
    this.value = opts.choices.map((ch, idx) => {
      if (typeof ch === 'string')
        ch = {title: ch, value: idx};
      return {
        title: ch && (ch.title || ch.value || ch),
        description: ch && ch.description,
        value: ch && (ch.value === undefined ? idx : ch.value),
        selected: ch && ch.selected,
        disabled: ch && ch.disabled
      };
    });
    this.clear = clear('', this.out.columns);
    if (!opts.overrideRender) {
      this.render();
    }
  }
MultiselectPrompt Base Element
@param {Object} opts Options
@param {String} opts.message Message
@param {Array} opts.choices Array of choice objects
@param {String} [opts.hint] Hint to display
@param {String} [opts.warn] Hint shown for disabled choices
@param {Number} [opts.max] Max choices
@param {Number} [opts.cursor=0] Cursor start position
@param {Number} [opts.optionsPerPage=10] Max options to display at once
@param {Stream} [opts.stdin] The Readable stream to listen to
@param {Stream} [opts.stdout] The Writable stream to write readline data to