 	}
 
 
+
 	public enum HorizontalAlignment {
+
 		case center
 		case fill
 		case left




private struct Layout {

	fileprivate var activityIndicatorFrame: CGRect?
	fileprivate var imageViewFrame: CGRect?
	fileprivate var textLabelFrame: CGRect?
}



private final class ButtonImageView: ImageView {

	fileprivate weak var button: Button?


	fileprivate init(button: Button) {
		self.button = button

		super.init()
	}


	fileprivate required init?(coder: NSCoder) {
		fatalError("init(coder:) has not been implemented")
	}


	fileprivate override var source: Source? {
		didSet {
			button?.imageViewDidChangeSource()
		}
	}
}



private final class ButtonLabel: Label {

	fileprivate weak var button: Button?


	fileprivate init(button: Button) {
		self.button = button

		super.init(highPrecision: false)
	}


	fileprivate override var attributedText: NSAttributedString {
		didSet {
		guard attributedText != oldValue else {
			return
		}

		button?.textLabelDidChangeAttributedText()
		}
	}


	fileprivate required init?(coder: NSCoder) {
		fatalError("init(coder:) has not been implemented")
	}
}

	}



	private struct Layout {

		var activityIndicatorFrame: CGRect?
		var imageViewFrame: CGRect?
		var textLabelFrame: CGRect?
	}



	public enum VerticalAlignment {

		case bottom
		case center
		case fill
