# Textual API Validation Checklist

## Before Using Textual APIs

### 1. Event Names
- DataTable events:
  - ✅ `RowHighlighted` - When cursor moves to a row
  - ✅ `RowSelected` - When row is selected (Enter key)
  - ✅ `CellHighlighted` - When cursor moves to a cell
  - ✅ `CellSelected` - When cell is selected
  - ✅ `ColumnHighlighted` - When column is highlighted
  - ✅ `HeaderSelected` - When header is clicked
  - ❌ `CursorMoved` - Does NOT exist
  - ❌ `SelectionChanged` - Does NOT exist

### 2. DataTable Methods
- ✅ `add_row()` - Add a row with optional key
- ✅ `clear()` - Clear all rows
- ✅ `move_cursor()` - Move cursor programmatically
- ❌ `set_row_style()` - Does NOT exist (use CSS classes)
- ✅ `add_column()` - Add a column
- ✅ `remove_row()` - Remove a row by key

### 3. Common Attribute Patterns
- Properties: `cursor_row`, `cursor_column`, `row_count`, `rows`
- Events: Always check with `dir(Widget)` or test imports
- Messages: Custom messages need `from textual.message import Message`

### 4. Model Attributes Checklist
When adding UI that accesses model attributes:
- [ ] Check if attribute exists in model class
- [ ] Add missing attributes with appropriate defaults
- [ ] Consider if attribute should be calculated or stored
- [ ] Update any related initialization code

### 5. Testing Strategy
```python
# Quick validation script
from textual.widgets import DataTable
print("Available events:", [attr for attr in dir(DataTable) if 'Selected' in attr or 'Highlighted' in attr])
```

### 6. Common Pitfalls
1. **Event naming**: Textual uses specific naming patterns
2. **Method availability**: Not all expected methods exist
3. **CSS vs API**: Some styling must be done via CSS
4. **Message inheritance**: Custom messages need proper base class

## Validation Commands

```bash
# Check available attributes
source venv/bin/activate
python -c "from textual.widgets import DataTable; print(dir(DataTable))"

# Check specific event
python -c "from textual.widgets import DataTable; print('EventName' in dir(DataTable))"

# Check imports
python -c "from textual.widgets import WidgetName"
```

## Model Validation

Before running the app, validate all model attributes are present:
```bash
# Run a quick attribute check
python -c "from analyzer.models.flow_stats import FlowStats, EnhancedAnalysisData; 
fs = FlowStats('', ''); 
print('Required attrs:', ['duration', 'first_seen', 'last_seen', 'jitter'])"
```