/** * @file Preview of NodeCard variants for design verification */ import * as React from "react"; import type { NodeDefinition } from "../../../../types/NodeDefinition"; import { NodeCard, type NodeCardVariant } from "../../../../components/node/cards/NodeCard"; import { H2 } from "../../../../components/elements/Heading"; import { PropertySection } from "../../../../components/inspector/parts/PropertySection"; import styles from "./NodeCardsExample.module.css"; /** * Sample node definitions for preview */ const sampleNodes: NodeDefinition[] = [ { type: "data-source", displayName: "Data Source", description: "Load data from external sources like APIs, databases, or files", category: "Data", icon: "📥", }, { type: "logic-if", displayName: "If/Else", description: "Conditional branching based on boolean expression", category: "Logic", icon: "❓", }, { type: "math-add", displayName: "Add", description: "Add two numbers together", category: "Math", icon: "➕", }, { type: "output-display", displayName: "Display", description: "Display data on screen", category: "Output", icon: "🖥️", }, ]; const variants: NodeCardVariant[] = ["list", "grid", "menu", "compact"]; /** * Preview of all NodeCard variants and states */ export function NodeCardsExample(): React.ReactElement { return (

Node Card Variants

Preview of NodeCard component in different variants and states. Switch themes to see how they adapt.

{/* Variant comparison */} {variants.map((variant) => (
{sampleNodes.map((node) => ( ))}
))} {/* State comparison */}
Normal
Selected
Disabled
Non-Matching
Normal
Selected
Disabled
Non-Matching
{/* Options comparison */}
With Description
Without Description
With Type Badge
Without Type Badge
With Title Suffix NEW} />
{/* Draggable demonstration */}

Try dragging these cards:

{sampleNodes.slice(0, 3).map((node) => ( { e.dataTransfer.setData("text/plain", node.type); }} /> ))}
); }