 import UIKit
 
 
-// MARK: // Internal
+// MARK: // Public
 // MARK: - PopoverPresentationDelegate
-@objc protocol PopoverPresentationDelegate: class {
+@objc public protocol PopoverPresentationDelegate: class {
     @objc optional func prepareToPresent(_ popover: PopoverVC)
     @objc optional func shouldDismiss(_ popover: PopoverVC) -> Bool
     @objc optional func didDismiss(_ popover: PopoverVC)

// MARK: Computed Variables
private extension PopoverVC {
    var _contentView: UIView? {
        get {
            return self.__contentView
        }
        set(newContentView) {
            guard newContentView != self.__contentView else { return }
            self.__contentView?.removeFromSuperview()

// MARK: Delegates / DataSources
// MARK: UIPopoverPresentationControllerDelegate
extension PopoverVC: UIPopoverPresentationControllerDelegate {
    public func prepareForPopoverPresentation(_ popoverPresentationController: UIPopoverPresentationController) {
        self.presentationDelegate?.prepareToPresent?(self)
    }
    
    public func popoverPresentationControllerShouldDismissPopover(_ popoverPresentationController: UIPopoverPresentationController) -> Bool {
        return self.presentationDelegate?.shouldDismiss?(self) ?? true
    }
    
    public func popoverPresentationControllerDidDismissPopover(_ popoverPresentationController: UIPopoverPresentationController) {
        self.presentationDelegate?.didDismiss?(self)
    }
}
