 
 public protocol CalendarViewDelegate {
     
-    /* optional */ func calendar(_ calendar : CalendarView, canSelectDate date : Date) -> Bool
     func calendar(_ calendar : CalendarView, didScrollToMonth date : Date) -> Void
     func calendar(_ calendar : CalendarView, didSelectDate date : Date, withEvents events: [CalendarEvent]) -> Void
-    /* optional */ func calendar(_ calendar : CalendarView, didDeselectDate date : Date) -> Void
+    /* optional */
+    func calendar(_ calendar : CalendarView, canSelectDate date : Date) -> Bool
+    func calendar(_ calendar : CalendarView, didDeselectDate date : Date) -> Void
 }
 
 extension CalendarViewDelegate {

        
        var dateComponents = DateComponents()
        dateComponents.month = offset;
        
        guard let newDate = self.calendar.date(byAdding: dateComponents, to: displayDate) else { return }
        
        self.setDisplayDate(newDate, animated: true)
    }
    
    func goToNextMonth() {
        goToMonthWithOffet(1)
    }
    
    func goToPreviousMonth() {
        goToMonthWithOffet(-1)
    }
}

            let month = distanceFromStartDate.month,
            let (firstDayIndex, _) = monthInfoForSection[month] else { return nil }
        
        return IndexPath(item: day + firstDayIndex, section: month)
    }
    
    func dateFromIndexPath(_ indexPath: IndexPath) -> Date? {
