import FeatureGrid from "../app/components/FeatureGrid"; export default { title: "Components/FeatureGrid", component: FeatureGrid, parameters: { layout: "fullscreen", docs: { description: { component: ` A responsive component that displays a collection of organizational tools and services in a clean card-based grid layout with supportive messaging and categorized feature highlights. ## Features - **Three grid variants**: 1x4, 2x2, and 2x4 configurations - **Responsive design**: Adapts from single column to multi-column grid - **Color coding**: Purple, green, pink, and blue brand colors for categorization - **Interactive elements**: Hover states and keyboard navigation - **Accessibility**: WCAG 2.1 AA compliant with proper ARIA labels - **Design system integration**: Uses design tokens for consistent styling ## Usage \`\`\`jsx \`\`\` `, }, }, }, argTypes: { variant: { control: { type: "select" }, options: ["1x4", "2x2", "2x4"], description: "Grid layout variant", }, headline: { control: { type: "text" }, description: "Main headline text", }, description: { control: { type: "text" }, description: "Supporting description text", }, ctaText: { control: { type: "text" }, description: "Call-to-action button text", }, ctaHref: { control: { type: "text" }, description: "Call-to-action link URL", }, features: { control: { type: "object" }, description: "Array of feature objects", }, onFeatureClick: { action: "feature-click", description: "Callback when feature card is clicked", }, onCtaClick: { action: "cta-click", description: "Callback when CTA is clicked", }, }, }; // Sample feature data const sampleFeatures = [ { id: "consensus", label: "Consensus Decision Making", description: "Build agreement through collaborative processes", icon: "assets/Icon_Consensus.svg", color: "purple", }, { id: "governance", label: "Governance Structures", description: "Create clear roles and responsibilities", icon: "assets/Icon_ElectedBoard.svg", color: "green", }, { id: "communication", label: "Communication Tools", description: "Facilitate transparent information sharing", icon: "assets/Icon_Sociocracy.svg", color: "pink", }, { id: "resources", label: "Resource Management", description: "Efficiently allocate and track resources", icon: "assets/Icon_Petition.svg", color: "blue", }, ]; // Default story export const Default = { args: { variant: "2x2", headline: "Everything you need to build better communities", description: "Our comprehensive toolkit provides the tools, resources, and guidance to help your organization thrive.", ctaText: "Learn more", ctaHref: "#", features: sampleFeatures, }, }; // 1x4 Grid Variant export const OneByFour = { args: { variant: "1x4", headline: "Core organizational tools", description: "Essential features for effective community governance and decision-making.", ctaText: "Explore tools", ctaHref: "#", features: sampleFeatures, }, parameters: { docs: { description: { story: "1x4 grid layout optimized for showcasing four key features in a single row on desktop.", }, }, }, }; // 2x4 Grid Variant export const TwoByFour = { args: { variant: "2x4", headline: "Complete toolkit for organizations", description: "Eight essential tools and services to support your community's growth and success.", ctaText: "Get started", ctaHref: "#", features: [ ...sampleFeatures, { id: "analytics", label: "Analytics & Insights", description: "Track progress and measure impact", icon: "assets/Icon_Consensus.svg", color: "purple", }, { id: "training", label: "Training & Education", description: "Build skills and knowledge", icon: "assets/Icon_ElectedBoard.svg", color: "green", }, { id: "support", label: "Community Support", description: "Connect with peers and experts", icon: "assets/Icon_Sociocracy.svg", color: "pink", }, { id: "integration", label: "System Integration", description: "Connect with existing tools", icon: "assets/Icon_Petition.svg", color: "blue", }, ], }, parameters: { docs: { description: { story: "2x4 grid layout for comprehensive feature showcases with eight tools.", }, }, }, }; // All Variants Comparison export const AllVariants = { render: () => (

1x4 Grid Variant

2x2 Grid Variant

2x4 Grid Variant

), parameters: { docs: { description: { story: "Side-by-side comparison of all three grid variants to show the differences in layout and content density.", }, }, }, }; // Interactive States export const InteractiveStates = { args: { variant: "2x2", headline: "Interactive feature showcase", description: "Hover over cards and use keyboard navigation to test interactive states.", ctaText: "Try it out", ctaHref: "#", features: sampleFeatures, }, parameters: { docs: { description: { story: "Test hover states, focus indicators, and keyboard navigation for accessibility compliance.", }, }, }, }; // Empty State export const EmptyState = { args: { variant: "2x2", headline: "No features available", description: "This is how the component looks when no features are provided.", ctaText: "Add features", ctaHref: "#", features: [], }, parameters: { docs: { description: { story: "Empty state when no features are provided, showing graceful fallback messaging.", }, }, }, };