Files
gridpilot.gg/apps/website/ui/Section.tsx
2026-01-15 17:12:24 +01:00

54 lines
1.3 KiB
TypeScript

import { ReactNode } from 'react';
import { Box } from './Box';
import { Heading } from './Heading';
import { Text } from './Text';
interface SectionProps {
children: ReactNode;
className?: string;
title?: string;
description?: string;
variant?: 'default' | 'card' | 'highlight' | 'dark' | 'light';
id?: string;
py?: number;
}
export function Section({
children,
className = '',
title,
description,
variant = 'default',
id,
py = 16
}: SectionProps) {
const variantClasses = {
default: '',
card: 'bg-iron-gray rounded-lg p-6 border border-charcoal-outline',
highlight: 'bg-gradient-to-r from-blue-900/20 to-blue-700/10 rounded-lg p-6 border border-blue-500/30',
dark: 'bg-iron-gray',
light: 'bg-charcoal-outline'
};
const classes = [
variantClasses[variant],
className
].filter(Boolean).join(' ');
return (
<Box as="section" id={id} className={classes} py={py as 0} px={4}>
<Box className="mx-auto max-w-7xl">
{(title || description) && (
<Box mb={8}>
{title && <Heading level={2}>{title}</Heading>}
{description && <Text color="text-gray-400" block mt={2}>{description}</Text>}
</Box>
)}
{children}
</Box>
</Box>
);
}