--- name: react-flow-node description: Create React Flow node components with TypeScript types, handles, and Zustand integration. Use when building custom nodes for React Flow canvas, creating visual workflow editors, or implementing node-based UI components. --- # React Flow Node Create React Flow node components following established patterns with proper TypeScript types and store integration. ## Quick Start Copy templates from [assets/](assets/) and replace placeholders: - `{{NodeName}}` → PascalCase component name (e.g., `VideoNode`) - `{{nodeType}}` → kebab-case type identifier (e.g., `video-node`) - `{{NodeData}}` → Data interface name (e.g., `VideoNodeData`) ## Templates - [assets/template.tsx](assets/template.tsx) - Node component - [assets/types.template.ts](assets/types.template.ts) - TypeScript definitions ## Node Component Pattern ```tsx export const MyNode = memo(function MyNode({ id, data, selected, width, height, }: MyNodeProps) { const updateNode = useAppStore((state) => state.updateNode); const canvasMode = useAppStore((state) => state.canvasMode); return ( <>
{/* Node content */}
); }); ``` ## Type Definition Pattern ```typescript export interface MyNodeData extends Record { title: string; description?: string; } export type MyNode = Node; ``` ## Integration Steps 1. Add type to `src/frontend/src/types/index.ts` 2. Create component in `src/frontend/src/components/nodes/` 3. Export from `src/frontend/src/components/nodes/index.ts` 4. Add defaults in `src/frontend/src/store/app-store.ts` 5. Register in canvas `nodeTypes` 6. Add to AddBlockMenu and ConnectMenu