Not sure if this is up to your library but I'll try nevertheless.
I'm using CardsCollectionViewLayout in my code via Swift Bridging for my CollectionView.
Objective-C (Not Working)
My issue is that IndexPath is returning wrong Item index. Here is the minimal code:
- (void)viewDidLoad
{
    [super viewDidLoad];
    self.collectionViewEvents.collectionViewLayout = [[CardsCollectionViewLayout alloc] init];
    self.collectionViewEvents.dataSource = self;
    self.collectionViewEvents.delegate = self;
    self.collectionViewEvents.pagingEnabled = YES;
    self.collectionViewEvents.showsHorizontalScrollIndicator = NO;
    [self load];
}
// Issue visible here, the indexPath.item is not correct
- (void)scrollViewDidEndDecelerating:(UIScrollView *)scrollView
{
    for (UICollectionViewCell *cell in self.collectionViewEvents.visibleCells) {
        NSIndexPath *indexPath = [[self collectionViewEvents] indexPathForCell:cell];
        NSLog(@"Visible Cell IndexPath Item %ld", indexPath.item);
        return;
    }
}
- (void)load
{
    // self.eventData is declares as: @property (nonatomic) NSArray *eventData;
    self.eventData = [[NSArray alloc] initWithObjects:UIColor.blackColor, UIColor.whiteColor, UIColor.brownColor, nil];
    [[self collectionViewEvents] reloadData];
}
- (UICollectionViewCell *)collectionView:(UICollectionView *)collectionView cellForItemAtIndexPath:(NSIndexPath *)indexPath
{
    UICollectionViewCell *cell = [collectionView dequeueReusableCellWithReuseIdentifier:@"CollectionViewCellReuseIdentifier"
                                                                           forIndexPath:indexPath];
    cell.layer.cornerRadius = 7.0;
    cell.backgroundColor = UIColor.blackColor;
    return cell;
}
- (NSInteger)collectionView:(UICollectionView *)collectionView numberOfItemsInSection:(NSInteger)section
{
    return self.eventData.count;
}
Result (notice how both 1st and 2nd cell has same IndexPath Item):
2020-03-19 14:48:05.334905+0100 App[7422:2617858] Visible Cell IndexPath Item 2 # => 3rd cell
2020-03-19 14:48:05.741805+0100 App[7422:2617858] Visible Cell IndexPath Item 1 # => 2nd cell
2020-03-19 14:48:06.184932+0100 App[7422:2617858] Visible Cell IndexPath Item 1 # => 1st cell
Swift (Working)
I tried your Example from this code Repository, which has declared colors statically:
  var colors: [UIColor]  = [
    UIColor(red: 237, green: 37, blue: 78),
    UIColor(red: 249, green: 220, blue: 92),
    UIColor(red: 194, green: 234, blue: 189),
    UIColor(red: 1, green: 25, blue: 54),
    UIColor(red: 255, green: 184, blue: 209)
  ]
...
    func collectionView(_ collectionView: UICollectionView, cellForItemAt indexPath: IndexPath) -> UICollectionViewCell {
        let cell = collectionView.dequeueReusableCell(withReuseIdentifier: "CollectionViewCellReuseIdentifier", for: indexPath)
        cell.layer.cornerRadius = 7.0
        cell.backgroundColor = .black
        return cell
    }
And after implementing this code below, it returns proper IndexPath.
    // Issue NOT visible here, the indexPath.item IS correct
    func scrollViewDidEndDecelerating(_ scrollView: UIScrollView) {
        for cell in collectionView.visibleCells {
            let indexPath = collectionView.indexPath(for: cell)
            print(indexPath?.item)
            return
        }
    }
Result:
2020-03-19 14:48:05.334905+0100 App[7422:2617858] Visible Cell IndexPath Item 2 # => 3rd cell
2020-03-19 14:48:05.741805+0100 App[7422:2617858] Visible Cell IndexPath Item 1 # => 2nd cell
2020-03-19 14:48:06.184932+0100 App[7422:2617858] Visible Cell IndexPath Item 0 # => 1st cell
What am I doing wrong in my Objective-C code?
Things I've tried
// 1st cell has index 1, instead of 0
- (void)scrollViewDidEndDecelerating:(UIScrollView *)scrollView
{
    for (UICollectionViewCell *cell in [[self collectionViewEvents] visibleCells]) {
        NSIndexPath *indexPath = [[self collectionViewEvents] indexPathForCell:cell];
        NSLog(@"Visible Cell IndexPath Item %ld", indexPath.item);
        return;
    }
// 1st cell has index 1, instead of 0
- (void)scrollViewDidEndDecelerating:(UIScrollView *)scrollView
{
    NSArray *visible = [self.collectionViewEvents indexPathsForVisibleItems];
    NSIndexPath *indexPath = [visible firstObject];
    NSLog(@"Visible Cell IndexPath Item %ld", indexPath.item);
    return;
// Calling it in main thread, same result
- (void)scrollViewDidEndDecelerating:(UIScrollView *)scrollView
{
    dispatch_async(dispatch_get_main_queue(), ^{
        for (UICollectionViewCell *cell in [[self collectionViewEvents] visibleCells]) {
            NSIndexPath *indexPath = [[self collectionViewEvents] indexPathForCell:cell];
            NSLog(@"Visible Cell IndexPath Item %ld", indexPath.item);
            return;
        }
    });
		                                  
		                                    help wanted