# Keyboard Tap Behavior for SwiftUI Components (iOS)

### Overview

`FWSKeyboardTapBehavior` controls how Firework SwiftUI components handle taps while the software keyboard is visible.

It is useful when your screen contains both:

* text input fields
* tappable video widgets

### API

```swift
public enum FWSKeyboardTapBehavior {
    case disabled
    case passThrough
    case consumeTap
}
```

### Behavior Definitions

#### disabled

No keyboard-tap handling is added by the component.

* Keyboard dismissal: No
* Original tap action: Yes

#### passThrough

Dismiss keyboard and keep the original tap action.

* Keyboard dismissal: Yes (when keyboard is visible)
* Original tap action: Yes

#### consumeTap

Dismiss keyboard and block the original tap action.

* Keyboard dismissal: Yes (when keyboard is visible)
* Original tap action: No (for that tap)

### Supported Components

* `FWSVideoFeedSwiftUIView`
* `FWSStoryBlockSwiftUIView`
* `PlayerDeckSwiftUIView`
* `CircleStorySwiftUIView`

### Examples

#### 1. FWSVideoFeedSwiftUIView

```swift
FWSVideoFeedSwiftUIView(
    source: .discover,
    keyboardTapBehavior: .passThrough
)
.frame(height: 260)
```

#### 2. FWSStoryBlockSwiftUIView

```swift
FWSStoryBlockSwiftUIView(
    source: .discover,
    keyboardTapBehavior: .consumeTap
)
.frame(height: 320)
```

#### 3. PlayerDeckSwiftUIView

```swift
PlayerDeckSwiftUIView(
    source: .discover,
    keyboardTapBehavior: .passThrough
)
.frame(height: 320)
```

#### 4. CircleStorySwiftUIView

```swift
CircleStorySwiftUIView(
    source: .discover,
    keyboardTapBehavior: .disabled
)
.frame(height: 120)
```

### Behavior Matrix

| Keyboard Visible | Behavior    | Dismiss Keyboard | Tap Passed to Underlying View |
| ---------------- | ----------- | ---------------- | ----------------------------- |
| No               | disabled    | No               | Yes                           |
| No               | passThrough | No               | Yes                           |
| No               | consumeTap  | No               | Yes                           |
| Yes              | disabled    | No               | Yes                           |
| Yes              | passThrough | Yes              | Yes                           |
| Yes              | consumeTap  | Yes              | No                            |

### Notes

* `consumeTap` only blocks taps while keyboard is visible. After keyboard is dismissed, normal tap interaction should recover.
* In complex gesture hierarchies, verify behavior on real devices.
