 // MARK: // Public
 // MARK: Interface
 public extension TextButton {
+    public var highlightedAlpha: CGFloat {
+        get {
+            return self._highlightedAlpha
+        }
+        set(newHighlightedAlpha) {
+            self._highlightedAlpha = newHighlightedAlpha
+        }
+    }
+    
     public var underlined: Bool {
         get {
             return self._underlined

// MARK: setTitle Override Implementation
private extension TextButton {
    func _setTitle(_ title: String?, for state: UIControlState) {
        if title?.isEmpty ?? true {
            self.setAttributedTitle(nil, for: state)
            return
        }
        
        let titleColor: UIColor = self.titleColor(for: state) ?? .black
        let underlineStyle: NSUnderlineStyle = self.underlined ? .styleSingle : .styleNone
        let attributes: [NSAttributedStringKey : Any] = [
            .foregroundColor: titleColor,
            .underlineStyle: underlineStyle.rawValue
        ]
        
        let attributedTitle: NSAttributedString = NSAttributedString(
            string: title!,
            attributes: attributes
        )
        
        super.setTitle(title, for: state)
        self.setAttributedTitle(attributedTitle, for: state)
    }
}




// MARK: // Private
// MARK: Computed Variables
private extension TextButton {
    var _highlightedAlpha: CGFloat {
        get {
            return self.__highlightedAlpha
        }
        set(newHighlightedAlpha) {
            guard newHighlightedAlpha != self.__highlightedAlpha else { return }
            self.__highlightedAlpha = newHighlightedAlpha
            let titleColor: UIColor = self.titleColor(for: .highlighted) ?? .black
            let highlightedTitleColor: UIColor = titleColor.withAlpha(self.highlightedAlpha)
            self.setTitleColor(highlightedTitleColor, for: .highlighted)
        }
    }
    
    var _underlined: Bool {
        get {
            return self.__underlined
        }
        set(newUnderlined) {
            guard newUnderlined != self.__underlined else { return }
            self.__underlined = newUnderlined
            self._updateAttributedTitle(for: state)
        }
    }
}


// MARK: Setup Override Implementation
private extension TextButton {
    func _setup() {
        super.setup()
        self.xPadding = 0
        self.yPadding = 0
    }
}

