---
name: interactive-states
description: Interactive states for UI elements - hover, active, focus, disabled, loading. Use when implementing button states, form field states, or interactive feedback.
allowed-tools: Read, Write, Edit, Glob, Grep
user-invocable: true
---
# Interactive States
Complete state system for interactive elements.
## Agent Workflow (MANDATORY)
Before implementation:
1. **fuse-ai-pilot:explore-codebase** - Check existing state patterns
2. **fuse-ai-pilot:research-expert** - Framer Motion state animations
After: Run **fuse-ai-pilot:sniper** for validation.
## State Flow
```
Default → Hover → Pressed/Active → Focus → Disabled → Loading
```
## Button States
```tsx
import { motion } from "framer-motion";
export function Button({ children, disabled, isLoading }) {
return (
{isLoading ? : children}
);
}
```
## State Timing Guide
| State | Duration | Easing |
|-------|----------|--------|
| Hover in | 50-100ms | ease-out |
| Hover out | 150ms | ease-in |
| Press | 100-150ms | ease-out |
| Focus | instant | - |
| Loading | - | linear (spin) |
## Card Hover States
```tsx
{children}
```
## Input Field States
```tsx
const inputStates = {
default: "border-border bg-surface",
focus: "border-primary ring-2 ring-primary/20",
valid: "border-success bg-success/5",
error: "border-destructive bg-destructive/5",
disabled: "border-muted bg-muted/50 cursor-not-allowed",
};
```
## Focus States (Accessibility)
```tsx
/* Visible focus ring */
className="focus:outline-none focus-visible:ring-2 focus-visible:ring-primary focus-visible:ring-offset-2"
/* Focus within (for groups) */
className="focus-within:ring-2 focus-within:ring-primary"
```
## Loading States
```tsx
/* Spinner button */
/* Skeleton loading */
/* Progress state */
```
## Interactive Feedback Patterns
```tsx
/* Ripple effect on click */
const [ripple, setRipple] = useState(null);
/* Checkbox toggle */
```
## State Composition with CVA
```tsx
const buttonVariants = cva("...", {
variants: {
state: {
default: "",
loading: "opacity-80 pointer-events-none",
success: "bg-success text-success-foreground",
error: "bg-destructive text-destructive-foreground",
},
},
});
```
## Validation
```
[ ] All 5 states defined (default, hover, active, focus, disabled)
[ ] Loading state with spinner/skeleton
[ ] Hover timing 50-100ms
[ ] Focus visible for keyboard users
[ ] Disabled prevents all interaction
[ ] Motion respects prefers-reduced-motion
```
## References
- `../../references/buttons-guide.md` - Button states detail
- `../../references/forms-guide.md` - Form field states
- `../../references/motion-patterns.md` - Animation timings