       }
    }
    
+   fileprivate struct TransitionState {
+      var nextViewController: UIViewController?
+      var direction: UIPageViewControllerNavigationDirection = .forward
+   }
+   
    // MARK: - Private Properties
    private var _dataSource: DataSource! = nil
+   fileprivate var _transitionState: TransitionState = TransitionState()
    
    // MARK: - Public Properties
    public fileprivate(set) var pages: [UIViewController] = [] {

      } else {
         _transitionContexts[previousPage] = transitionContext
      }
   }
   
   // MARK: - Init


public protocol ElementalPage {
   func willAppear(inPageViewController pageViewController: ElementalPageViewController)
   func cancelAppear(inPageViewController pageViewController: ElementalPageViewController)
   func didAppear(inPageViewController pageViewController: ElementalPageViewController)
   func willDisappear(fromPageViewController pageViewController: ElementalPageViewController)
   func cancelDisappear(fromPageViewController pageViewController: ElementalPageViewController)
   func didDisappear(fromPageViewController pageViewController: ElementalPageViewController)
}

public extension ElementalPage {
   func willAppear(inPageViewController pageViewController: ElementalPageViewController) {}
   func cancelAppear(inPageViewController pageViewController: ElementalPageViewController) {}
   func didAppear(inPageViewController pageViewController: ElementalPageViewController) {}
   func willDisappear(fromPageViewController pageViewController: ElementalPageViewController) {}
   func cancelDisappear(fromPageViewController pageViewController: ElementalPageViewController) {}
   func didDisappear(fromPageViewController pageViewController: ElementalPageViewController) {}
}

