     }
     
     //MARK: - public properties redirected to underlying UILabel
-    public var font: UIFont {
+    open var font: UIFont {
         set { label.font = newValue }
         get { return label.font }
     }
     
-    public var numberOfLines: Int {
+    open var numberOfLines: Int {
         set { label.numberOfLines = newValue }
         get { return label.numberOfLines }
     }
     
-    public var textAlignment: NSTextAlignment {
+    open var textAlignment: NSTextAlignment {
         set { label.textAlignment = newValue }
         get { return label.textAlignment }
     }
     
-    public var lineBreakMode: NSLineBreakMode {
+    open var lineBreakMode: NSLineBreakMode {
         set { label.lineBreakMode = newValue }
         get { return label.lineBreakMode }
     }
     
-    public var textColor: UIColor {
+    open var textColor: UIColor {
         set { label.textColor = newValue }
         get { return label.textColor }
     }
     
-    public var shadowColor: UIColor? {
+    open var shadowColor: UIColor? {
         set { label.shadowColor = newValue }
         get { return label.shadowColor }
     }
     
-    public var shadowOffset: CGSize {
+    open var shadowOffset: CGSize {
         set { label.shadowOffset = newValue }
         get { return label.shadowOffset }
     }

    }
    
    //MARK: - overrides
    public override func layoutSubviews() {
        super.layoutSubviews()
        
        detectionAreaButtons.forEach {

        }
    }
    
    open var attributedText: AttributedText? {
        set {
            state.attributedTextAndString = newValue.map { ($0, $0.attributedString) }
            setNeedsLayout()
