import React from 'react'; import { useStyles } from '../../core/hooks/useStyles'; import { useTheme } from '../../core/theme/ThemeProvider'; import { Text } from '../Text/Text'; import { Image as ImageComponent, ImageProps } from '../Image/Image'; import { Stack } from '../Stack/Stack'; import { Button, ButtonProps } from '../Button/Button'; // Main Card Component interface CardProps extends React.HTMLAttributes { children: React.ReactNode; variant?: 'default' | 'glass'; onClick?: (event: React.MouseEvent | React.KeyboardEvent) => void; } const CardRoot: React.FC & { Header: React.FC>; Body: React.FC>; Footer: React.FC>; Title: React.FC>>; Subtitle: React.FC>>; Description: React.FC>>; Text: React.FC>>; Image: React.FC; Actions: React.FC>; Action: React.FC; Item: React.FC>; } = ({ children, className = '', variant = 'default', onClick, ...props }) => { const { theme } = useTheme(); const createStyle = useStyles('card'); const cardClass = createStyle({ borderRadius: '8px', backgroundColor: variant === 'glass' ? 'rgba(28, 28, 28, 0.75)' : theme.colors.backgroundSecondary, border: `1px solid ${theme.colors.border}`, height: '100%', transition: 'all 0.3s ease', cursor: onClick ? 'pointer' : 'default', overflow: 'hidden', display: 'flex', flexDirection: 'column', '@supports (backdrop-filter: none) or (-webkit-backdrop-filter: none)': { backdropFilter: variant === 'glass' ? 'blur(16px)' : undefined, }, '&:hover': onClick ? { transform: 'translateY(-4px)', borderColor: 'rgba(255, 255, 255, 0.25)', boxShadow: `0 8px 24px rgba(0, 0, 0, 0.5)`, } : {}, '&:focus-visible': onClick ? { outline: `2px solid ${theme.colors.primary}`, outlineOffset: '2px', } : {}, }); const handleKeyDown = (event: React.KeyboardEvent) => { if (onClick && (event.key === 'Enter' || event.key === ' ')) { event.preventDefault(); onClick(event); } }; const interactiveProps = onClick ? { role: 'button', tabIndex: 0, onKeyDown: handleKeyDown, } : {}; return (
onClick(e) : undefined} {...interactiveProps} {...props} > {children}
); }; const CardHeader: React.FC> = ({ className, ...props }) => { const { theme } = useTheme(); const createStyle = useStyles('card-header'); const headerClass = createStyle({ padding: theme.spacing.md, borderBottom: `1px solid ${theme.colors.border}`, }); return
; }; CardHeader.displayName = 'Card.Header'; const CardBody: React.FC> = ({ className, ...props }) => { const { theme } = useTheme(); const createStyle = useStyles('card-body'); const bodyClass = createStyle({ padding: theme.spacing.md, flex: '1 1 auto', }); return
; }; CardBody.displayName = 'Card.Body'; const CardFooter: React.FC> = ({ className, ...props }) => { const { theme } = useTheme(); const createStyle = useStyles('card-footer'); const footerClass = createStyle({ padding: theme.spacing.md, borderTop: `1px solid ${theme.colors.border}`, marginTop: 'auto', }); return
; }; CardFooter.displayName = 'Card.Footer'; const CardTitle: React.FC>> = (props) => { const { theme } = useTheme(); return ; }; CardTitle.displayName = 'Card.Title'; const CardSubtitle: React.FC>> = ({style, ...props}) => { const { theme } = useTheme(); return ; }; CardSubtitle.displayName = 'Card.Subtitle'; const CardDescription: React.FC>> = (props) => { const { theme } = useTheme(); return ; }; CardDescription.displayName = 'Card.Description'; const CardText: React.FC>> = (props) => { return ; }; CardText.displayName = 'Card.Text'; const CardImage: React.FC = ({ className, ...props }) => { return ; }; CardImage.displayName = 'Card.Image'; const CardActions: React.FC> = ({ className, ...props }) => { return ; }; CardActions.displayName = 'Card.Actions'; const CardAction: React.FC = (props) => { return