function SearchPad(canvas, eventBus, selection, translate) {
  this._open = false;
  this._results = {};
  this._eventMaps = [];

  this._cachedRootElement = null;
  this._cachedSelection = null;
  this._cachedViewbox = null;

  this._canvas = canvas;
  this._eventBus = eventBus;
  this._selection = selection;
  this._translate = translate;

  // setup elements
  this._container = this._getBoxHtml();
  this._searchInput = domQuery(SearchPad.INPUT_SELECTOR, this._container);
  this._resultsContainer = domQuery(SearchPad.RESULTS_CONTAINER_SELECTOR, this._container);

  // attach search pad
  this._canvas.getContainer().appendChild(this._container);

  // cleanup whenever appropriate
  eventBus.on([
    'canvas.destroy',
    'diagram.destroy',
    'drag.init',
    'elements.changed'
  ], this.close, this);
}
Provides searching infrastructure.

@param {Canvas} canvas
@param {EventBus} eventBus
@param {Selection} selection
@param {Translate} translate