code: function Tooltip(options, components) {
    this.inputter = components.inputter;
    this.requisition = components.requisition;
    this.focusManager = components.focusManager;
  
    this.element = components.element;
    this.element.classList.add(options.tooltipClass || 'gcli-tooltip');
    this.document = this.element.ownerDocument;
  
    this.panelElement = components.panelElement;
    if (this.panelElement) {
      this.panelElement.classList.add('gcli-panel-hide');
      this.focusManager.onVisibilityChange.add(this.visibilityChanged, this);
    }
    this.focusManager.addMonitoredElement(this.element, 'tooltip');
  
    // We cache the fields we create so we can destroy them later
    this.fields = [];
  
    // Pull the HTML into the DOM, but don't add it to the document
    if (tooltipCss != null) {
      this.style = util.importCss(tooltipCss, this.document, 'gcli-tooltip');
    }
  
    this.template = util.toDom(this.document, tooltipHtml);
    this.templateOptions = { blankNullUndefined: true, stack: 'tooltip.html' };
  
    this.inputter.onChoiceChange.add(this.choiceChanged, this);
    this.inputter.onAssignmentChange.add(this.assignmentChanged, this);
  
    // We keep a track of which assignment the cursor is in
    this.assignment = undefined;
    this.assignmentChanged({ assignment: this.inputter.assignment });
  }
docs: A widget to display an inline dialog which allows the user to fill out
  the arguments to a command.
  @param options Object containing user customization properties, including:
  - tooltipClass (default='gcli-tooltip'): Custom class name when generating
  the top level element which allows different layout systems
  @param components Object that links to other UI components. GCLI provided:
  - requisition: The Requisition to fill out
  - inputter: An instance of Inputter
  - focusManager: Component to manage hiding/showing this element
  - panelElement (optional): The element to show/hide on visibility events
  - element: The root element to populate