code: function show(options) {
          options = options || {};
          var interimElement = new InterimElement(options || {});
  
          // When an interim element is currently showing, we have to cancel it.
          // Just hiding it, will resolve the InterimElement's promise, the promise should be
          // rejected instead.
          var hideAction = options.multiple ? $q.resolve() : $q.all(showPromises);
  
          if (!options.multiple) {
            // Wait for all opening interim's to finish their transition.
            hideAction = hideAction.then(function() {
              // Wait for all closing and showing interim's to be completely closed.
              var promiseArray = hidePromises.concat(showingInterims.map(service.cancel));
              return $q.all(promiseArray);
            });
          }
  
          var showAction = hideAction.then(function() {
  
            return interimElement
              .show()
              .catch(function(reason) { return reason; })
              .finally(function() {
                showPromises.splice(showPromises.indexOf(showAction), 1);
                showingInterims.push(interimElement);
              });
  
          });
  
          showPromises.push(showAction);
  
          // In AngularJS 1.6+, exceptions inside promises will cause a rejection. We need to handle
          // the rejection and only log it if it's an error.
          interimElement.deferred.promise.catch(function(fault) {
            if (fault instanceof Error) {
              $exceptionHandler(fault);
            }
  
            return fault;
          });
  
          // Return a promise that will be resolved when the interim
          // element is hidden or cancelled...
          return interimElement.deferred.promise;
        }
docs: /*
  @ngdoc method
  @name $$interimElement.$service#show
  @kind function
  
  @description
  Adds the `$interimElement` to the DOM and returns a special promise that will be resolved or rejected
  with hide or cancel, respectively. To external cancel/hide, developers should use the
  
  @param {*} options is hashMap of settings
  @returns a Promise