 //
 
 import UIKit
+
+// Libs
+import SnapKit
 
 class PunchcardView: UIView {
     

    }
    
    private func initialize() {
        // Will trigger a setNeedsDisplay whenever bounds changes (i.e. orientation change)
        contentMode = .Redraw
        
        setNeedsDisplay()
        backgroundColor = UIColor.whiteColor()
    }
    
    // MARK: View
    
    override func drawRect(rect: CGRect) {
        guard let context = UIGraphicsGetCurrentContext(),
            let lineColor = state.punchNumberColor else {
                return
        }
        
        CGContextSaveGState(context)
        
        let insetRect = CGRectInset(rect, 10, 10)
        
        let path = CGPathCreateWithRect(insetRect, nil)
        CGContextSetLineWidth(context, 1)
        UIColor.clearColor().setFill()
        lineColor.setStroke()
        CGContextAddPath(context, path)
        CGContextDrawPath(context, .FillStroke)
        
        CGContextRestoreGState(context)
    }
    
    // MARK: State
    
    func update(oldState: State) {
        backgroundColor = state.backgroundColor
        setNeedsDisplay()
    }
}

        }
    }
    
    /**
     The content view area for the punches.
     Slightly inset from the edges of the `PunchcardView`, and has a
     border around it.
     */
    private var punchesContentView = UIView()
    
    // MARK: Init
    
    init(state: State) {
