--- 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