     ///   - component: Component to update.
     ///   - action: Action closure with Component relevant context.
     func update(component: TMTransitionStyleable, action: @escaping (Context) -> Void) {
-        let animationStyle = component.transitionStyle
-        let context = generateContext(from: self.context, animationStyle: animationStyle)
+        let transitionStyle = component.transitionStyle
+        let animation = makeAnimation(for: transitionStyle, expected: self.animation)
+
+        let update = {
+            let context = self.generateContext(for: transitionStyle)
+            action(context)
+        }
         
-        if context.animation.isEnabled {
-            UIView.animate(withDuration: context.animation.duration) {
-                action(context)
+        if animation.isEnabled {
+            UIView.animate(withDuration: animation.duration) {
+                update()
             }
         } else {
-            action(context)
+            update()
         }
     }
     

    ///   - capacity: Capacity.
    /// - Returns: Focus area.
    private func makeFocusArea(for position: CGFloat, capacity: Int) -> CGRect {
        return barView.grid.convert(barView.layout.focusArea(for: position, capacity: capacity),
                                    from: barView.layout.view)
    }
}

    /// Generate a new context from an existing one, that takes account of animation style.
    ///
    /// - Parameters:
    ///   - transitionStyle: Animation style.
    /// - Returns: Context relevant for animation style.
    private func generateContext(for transitionStyle: TMTransitionStyle) -> Context {
        let focusArea = self.focusArea ?? makeFocusArea(for: position, capacity: capacity)
        return Context(position: makePosition(from: position, for: transitionStyle),
                       capacity: capacity,
                       direction: direction,
                       focusArea: focusArea)
    }
    
    /// Generate a new position dependending on animation style.
