implementing-drag-drop
npx skills add https://github.com/ancoleman/ai-design-components --skill implementing-drag-drop
Agent 安装分布
Skill 文档
Drag-and-Drop & Sortable Interfaces
Purpose
This skill helps implement drag-and-drop interactions and sortable interfaces using modern React/TypeScript libraries. It covers accessibility-first approaches, touch support, and performance optimization for creating intuitive direct manipulation UIs.
When to Use
Invoke this skill when:
- Building Trello-style kanban boards with draggable cards between columns
- Creating sortable lists with drag handles for priority ordering
- Implementing file upload zones with visual drag-and-drop feedback
- Building reorderable grids for dashboard widgets or galleries
- Creating visual builders with node-based interfaces
- Implementing any UI requiring spatial reorganization through direct manipulation
Core Patterns
Sortable Lists
Reference references/dnd-patterns.md for:
- Vertical lists with drag handles
- Horizontal lists for tab/carousel reordering
- Grid layouts with 2D dragging
- Auto-scrolling near edges
Kanban Boards
Reference references/kanban-implementation.md for:
- Multi-column boards with cards
- WIP limits and swimlanes
- Card preview on hover
- Column management (add/remove/collapse)
File Upload Zones
Reference references/file-dropzone.md for:
- Visual feedback states
- File type validation
- Multi-file handling
- Progress indicators
Accessibility
Reference references/accessibility-dnd.md for:
- Keyboard navigation patterns
- Screen reader announcements
- Alternative UI approaches
- ARIA attributes
Library Selection
Primary: dnd-kit
Modern, accessible, and performant drag-and-drop for React.
Reference references/library-guide.md for:
- Library comparison (dnd-kit vs alternatives)
- Installation and setup
- Core concepts and API
- Migration from react-beautiful-dnd
Key Features
- Built-in accessibility support
- Touch, mouse, and keyboard input
- Zero dependencies (~10KB core)
- Highly customizable
- TypeScript native
Implementation Workflow
Step 1: Analyze Requirements
Determine the drag-and-drop pattern needed:
- Simple list reordering â Sortable list pattern
- Multi-container movement â Kanban pattern
- File handling â Dropzone pattern
- Complex interactions â Visual builder pattern
Step 2: Set Up Library
Install required packages:
npm install @dnd-kit/core @dnd-kit/sortable @dnd-kit/utilities
Step 3: Implement Core Functionality
Use examples as starting points:
examples/sortable-list.tsxfor basic listsexamples/kanban-board.tsxfor multi-column boardsexamples/file-dropzone.tsxfor file uploadsexamples/grid-reorder.tsxfor grid layouts
Step 4: Add Accessibility
Reference references/accessibility-dnd.md to:
- Implement keyboard navigation
- Add screen reader announcements
- Provide alternative controls
- Test with assistive technologies
Run scripts/validate_accessibility.js to check implementation.
Step 5: Optimize Performance
For lists with >100 items:
- Reference
references/performance-optimization.md - Implement virtual scrolling
- Use
scripts/calculate_drop_position.jsfor efficient calculations
Step 6: Style with Design Tokens
Apply theming using the design-tokens skill:
- Reference design token variables
- Implement drag states (hovering, dragging, dropping)
- Add visual feedback and animations
Mobile & Touch Support
Reference references/touch-support.md for:
- Long press to initiate drag
- Preventing scroll during drag
- Touch-friendly hit areas (44px minimum)
- Gesture conflict resolution
State Management
Reference references/state-management.md for:
- Managing drag state in React
- Optimistic updates
- Undo/redo functionality
- Persisting order changes
Scripts
Calculate Drop Position
Run scripts/calculate_drop_position.js to:
- Determine valid drop zones
- Calculate insertion indices
- Handle edge cases
Generate Configuration
Run scripts/generate_dnd_config.js to:
- Create dnd-kit configuration
- Set up sensors and modifiers
- Configure animations
Validate Accessibility
Run scripts/validate_accessibility.js to:
- Check keyboard navigation
- Verify ARIA attributes
- Test screen reader compatibility
Examples
Each example includes complete TypeScript code with accessibility:
Sortable List
examples/sortable-list.tsx
- Vertical list with drag handles
- Keyboard navigation (Space/Enter to grab, arrows to move)
- Screen reader announcements
Kanban Board
examples/kanban-board.tsx
- Multiple columns with draggable cards
- Card movement between columns
- Column management features
- WIP limits
File Dropzone
examples/file-dropzone.tsx
- Drag files to upload
- Visual feedback states
- File type validation
- Upload progress
Grid Reorder
examples/grid-reorder.tsx
- 2D grid dragging
- Auto-layout on drop
- Responsive breakpoints
Assets
TypeScript Types
assets/drag-state-types.ts provides:
- Type definitions for drag state
- Event handler types
- Configuration interfaces
Configuration Schema
assets/dnd-config-schema.json defines:
- Valid configuration options
- Sensor settings
- Animation parameters
Best Practices
Visual Feedback
- Show drag handles (â®â®) to indicate draggability
- Change cursor (grab â grabbing)
- Display drop zone placeholders
- Make dragged items semi-transparent
- Highlight valid drop targets
Performance
- Use CSS transforms, not position properties
- Apply
will-change: transformfor animations - Throttle drag events for large lists
- Implement virtual scrolling when needed
Accessibility First
- Always provide keyboard alternatives
- Include screen reader announcements
- Test with NVDA/JAWS/VoiceOver
- Provide non-drag alternatives (buttons/forms)
Error Handling
- Show invalid drop feedback
- Implement undo functionality
- Auto-save after successful drops
- Handle network failures gracefully
Common Pitfalls
Avoid These Issues
- Forgetting keyboard navigation
- Missing touch support
- Not preventing scroll during drag
- Ignoring accessibility
- Poor performance with large lists
Solutions
Reference the appropriate guide for each issue:
- Accessibility â
references/accessibility-dnd.md - Touch â
references/touch-support.md - Performance â
references/performance-optimization.md - State â
references/state-management.md
Testing Checklist
Before deployment, verify:
- Keyboard navigation works completely
- Screen readers announce all actions
- Touch devices can drag smoothly
- Performance acceptable with expected data volume
- Visual feedback clear and responsive
- Undo/redo functionality works
- Alternative UI provided for accessibility
- Works across all target browsers
Next Steps
After implementing basic drag-and-drop:
- Add advanced features (auto-scroll, multi-select)
- Implement gesture support for mobile
- Add animation polish with Framer Motion
- Create custom drag preview components
- Build complex interactions (nested dragging)