 import SnapKit
 
 
-protocol FollowButtonDelegate: class {
+public protocol FollowButtonDelegate: class {
   func didPressFollowButton(currentState: FollowButtonState)
 }
 
-internal enum FollowButtonState {
+public enum FollowButtonState {
   case NotFollowing
   case Following
   case Loading
 }
 
-internal class FollowButton: UIView {
-  
-  internal struct FollowButtonOptions {
-    internal let labelText: String
-    internal let textColor: UIColor
-    internal let backgroundColor: UIColor
-    internal let showSpinner: Bool
-    internal let showLabel: Bool
+public class FollowButton: UIView {
+  
+  private struct FollowButtonOptions {
+    private let labelText: String
+    private let textColor: UIColor
+    private let backgroundColor: UIColor
+    private let showSpinner: Bool
+    private let showLabel: Bool
   }
   
   private enum FollowButtonTransition {

  
  // MARK: - Variables
  // ------------------------------------------------------------
  internal var delegate: FollowButtonDelegate?
  
  private var adjustedWidthConstraints: (left: Constraint?, right: Constraint?)
  private var minButtonWidth: CGFloat?

  
  // MARK: - Initialization
  // ------------------------------------------------------------
  public convenience init(withState state: FollowButtonState) {
    self.init(frame: CGRectZero)
    self.updateButtonToState(state)
  }
  
  public override init(frame: CGRect) {
    super.init(frame: frame)
    
    self.setupViewHierarchy()
    self.configureConstraints()
  }
  
  public required init?(coder aDecoder: NSCoder) {
    super.init(coder: aDecoder)
  }
  
