import type { HTMLAttributes, RefAttributes } from 'react'; import React from 'react'; import { Heading } from '@shoptet/ui-core-web'; import type { SafeOmit } from '@shoptet/utils'; export interface InheritedDivProps extends SafeOmit, 'children' | 'style'>, RefAttributes {} export interface InheritedTitleProps extends SafeOmit, 'children' | 'style'>, RefAttributes {} // Card props export interface CardOwnProps { /** * Content of the card. */ children: React.ReactNode; /** * Controls whether the card has a border. * @default false */ border?: boolean; } export interface CardProps extends CardOwnProps, InheritedDivProps {} // Card.Subcomponent props export interface CardSubcomponentsOwnProps { children: React.ReactNode; } export interface CardHeaderProps extends CardSubcomponentsOwnProps, InheritedDivProps {} export interface CardFooterProps extends CardSubcomponentsOwnProps, InheritedDivProps {} export interface CardContentProps extends CardSubcomponentsOwnProps, InheritedDivProps {} export interface CardTitleProps extends CardSubcomponentsOwnProps, InheritedTitleProps {} const CardHeader: React.FC = ({ children, ...rest }) => { return (
{children}
); }; const CardContent: React.FC = ({ children, ...rest }) => { return (
{children}
); }; const CardFooter: React.FC = ({ children, ...rest }) => { return (
{children}
); }; const CardTitle: React.FC = ({ children, ...rest }) => { return ( {children} ); }; export const Card = Object.assign( function Card({ children, border = false, ...rest }: CardProps) { return (
{children}
); }, { Header: Object.assign(CardHeader, { displayName: 'Card.Header', }), Content: Object.assign(CardContent, { displayName: 'Card.Content', }), Footer: Object.assign(CardFooter, { displayName: 'Card.Footer', }), Title: Object.assign(CardTitle, { displayName: 'Card.Title', }), } );