code: function Menu(options) {
    options = options || {};
    this.document = options.document || document;
    this.maxPredictions = options.maxPredictions || 8;
  
    // Keep track of any highlighted items
    this._choice = null;
  
    // FF can be really hard to debug if doc is null, so we check early on
    if (!this.document) {
      throw new Error('No document');
    }
  
    this.element =  util.createElement(this.document, 'div');
    this.element.classList.add('gcli-menu');
  
    if (menuCssPromise == null) {
      menuCssPromise = host.staticRequire(module, './menu.css');
    }
    menuCssPromise.then(function(menuCss) {
      // Pull the HTML into the DOM, but don't add it to the document
      if (menuCss != null) {
        util.importCss(menuCss, this.document, 'gcli-menu');
      }
    }.bind(this), console.error);
  
    this.templateOptions = { blankNullUndefined: true, stack: 'menu.html' };
    if (menuHtmlPromise == null) {
      menuHtmlPromise = host.staticRequire(module, './menu.html');
    }
    menuHtmlPromise.then(function(menuHtml) {
      if (this.document == null) {
        return; // destroy() has been called
      }
  
      this.template = host.toDom(this.document, menuHtml);
    }.bind(this), console.error);
  
    // Contains the items that should be displayed
    this.items = [];
  
    this.onItemClick = util.createEvent('Menu.onItemClick');
  }
docs: Menu is a display of the commands that are possible given the state of a
  requisition.
  @param options A way to customize the menu display.
  - document: The document to use in creating widgets
  - maxPredictions (default=8): The maximum predictions to show at one time
  If more are requested, a message will be displayed asking the user to
  continue typing to narrow the list of options