docs: function () {
              var state = this.state,
                  pages = state.pages,
                  viewportHeight = state.viewportDimensions.clientHeight,
                  viewportWidth = state.viewportDimensions.clientWidth;
  
              // no pages are visible, but this case breaks the logic below,
              // becasue page widths/heights will also be 0
              if (viewportWidth === 0 || viewportHeight === 0) {
                  return {
                      min: -1,
                      max: -1
                  };
              }
  
              var viewportY0 = state.scrollTop,
                  viewportY1 = viewportY0 + viewportHeight,
                  viewportX0 = state.scrollLeft,
                  viewportX1 = viewportX0 + viewportWidth,
                  lowY = util.bisectLeft(pages, viewportY0, 'y1'),
                  highY = util.bisectRight(pages, viewportY1, 'y0') - 1,
                  lowX = util.bisectLeft(pages, viewportX0, 'x1'),
                  highX = util.bisectRight(pages, viewportX1, 'x0') - 1,
                  low = Math.max(lowX, lowY),
                  high = Math.min(highX, highY);
  
              return util.constrainRange(low, high, this.numPages - 1);
          }