         guard let scrollBarView = scrollBarView,
             let scrollView = scrollView else { return }
         guard isScrollBarActive ||
-            (speed >= Constants.minStartSpeedInPoints) else { return }
+            (speed >= attributes.minStartSpeedInPoints) else { return }
         isScrollBarActive = true
         scrollBarView.alpha = 1.0
-        let rightOffset = dataSource?.rightOffset?(for: scrollBarView, for: self) ?? Constants.rightOffset
+        let rightOffset = dataSource?.rightOffset?(for: scrollBarView, for: self) ?? attributes.rightOffset
         let x = scrollView.bounds.maxX - scrollBarView.bounds.width - rightOffset
         let insets = scrollView.contentInset.top + scrollView.contentInset.bottom
         let scrollableHeight = scrollView.bounds.height - scrollBarView.bounds.height - insets

    init(scrollView: UIScrollView) {
        super.init()
        self.scrollView = scrollView
        self.startObservingScrollView()
        self.reload()
    }
    
    deinit {
        stopObservingScrollView()
    }
    
    private func startObservingScrollView() {
        scrollView?.addObserver(self, forKeyPath: contentOffsetKeyPath, options: [.new, .old], context: nil)
    }
    
    private func stopObservingScrollView() {
        scrollView?.removeObserver(self, forKeyPath: contentOffsetKeyPath)
    }
    

    }
    private(set) var isFastScrollInProgress = false
    var showsHintView = true
    var hintViewAttributes = HintViewAttributes() {
        didSet { updateHintViewAttributes() }
    }
    var attributes = ScrollBarAttributes()
    
    // MARK: - Private properties
    
    weak private var scrollView: UIScrollView?
    private var scrollBarView: UIView?
    private var hintView: UILabel? {
        didSet { updateHintViewAttributes() }
    }
    private var panGestureRecognizer: UIPanGestureRecognizer?
    private let contentOffsetKeyPath = #keyPath(UIScrollView.contentOffset)
    private var fadeOutWorkItem: DispatchWorkItem?
