--- name: ai-elements-workflow description: This skill provides guidance for building workflow visualizations using Vercel AI Elements and React Flow. It should be used when implementing interactive node-based interfaces, workflow diagrams, or process flow visualizations in Next.js applications. Covers Canvas, Node, Edge, Connection, Controls, Panel, and Toolbar components. --- # AI Elements Workflow This skill provides comprehensive guidance for building workflow visualizations using Vercel AI Elements with React Flow. ## When to Use - Building interactive node-based workflow interfaces - Creating process flow visualizations - Implementing diagram editors with custom nodes and edges - Adding workflow visualization to AI applications ## Setup ### 1. Create Next.js Project ```bash npx create-next-app@latest ai-workflow && cd ai-workflow ``` Choose to use Tailwind in the project setup. ### 2. Install AI Elements ```bash npx ai-elements@latest ``` This also sets up shadcn/ui if not configured. ### 3. Install React Flow ```bash npm i @xyflow/react ``` ### 4. Add Components Install the workflow components as needed: ```bash npx ai-elements@latest add canvas npx ai-elements@latest add node npx ai-elements@latest add edge npx ai-elements@latest add connection npx ai-elements@latest add controls npx ai-elements@latest add panel npx ai-elements@latest add toolbar ``` ## Building a Workflow ### Import Components ```tsx 'use client'; import { Canvas } from '@/components/ai-elements/canvas'; import { Connection } from '@/components/ai-elements/connection'; import { Controls } from '@/components/ai-elements/controls'; import { Edge } from '@/components/ai-elements/edge'; import { Node, NodeContent, NodeDescription, NodeFooter, NodeHeader, NodeTitle, } from '@/components/ai-elements/node'; import { Panel } from '@/components/ai-elements/panel'; import { Toolbar } from '@/components/ai-elements/toolbar'; import { Button } from '@/components/ui/button'; ``` ### Define Node IDs ```tsx const nodeIds = { start: 'start', process1: 'process1', decision: 'decision', output1: 'output1', output2: 'output2', complete: 'complete', }; ``` ### Create Nodes ```tsx const nodes = [ { id: nodeIds.start, type: 'workflow', position: { x: 0, y: 0 }, data: { label: 'Start', description: 'Initialize workflow', handles: { target: false, source: true }, content: 'Triggered by user action', footer: 'Status: Ready', }, }, // Add more nodes... ]; ``` ### Create Edges Use `animated` for active paths and `temporary` for conditional/error paths: ```tsx const edges = [ { id: 'edge1', source: nodeIds.start, target: nodeIds.process1, type: 'animated', }, { id: 'edge2', source: nodeIds.decision, target: nodeIds.output2, type: 'temporary', // For error/conditional paths }, ]; ``` ### Define Node Types ```tsx const nodeTypes = { workflow: ({ data, }: { data: { label: string; description: string; handles: { target: boolean; source: boolean }; content: string; footer: string; }; }) => ( {data.label} {data.description}

{data.content}

{data.footer}

), }; ``` ### Define Edge Types ```tsx const edgeTypes = { animated: Edge.Animated, temporary: Edge.Temporary, }; ``` ### Render the Canvas ```tsx const App = () => ( ); export default App; ``` ## Key Features | Feature | Description | |---------|-------------| | Custom Node Components | Use NodeHeader, NodeTitle, NodeDescription, NodeContent, NodeFooter for structured layouts | | Node Toolbars | Attach contextual actions to nodes via Toolbar component | | Handle Configuration | Control connections with `handles: { target: boolean, source: boolean }` | | Edge Types | `Edge.Animated` for active flow, `Edge.Temporary` for conditional paths | | Connection Lines | Styled bezier curves when dragging new connections | | Controls | Zoom in/out and fit view buttons | | Panels | Position custom UI anywhere on the canvas | ## Component Reference For detailed props and API documentation for each component, see `references/components.md`.