import React, { type HTMLAttributes } from 'react'
import classnames from 'classnames'
import { type OverrideClassName } from '~components/types/OverrideClassName'
import { useExitingAnimation } from '~components/utils/useExitingAnimation'
import sharedAiStyles from '../../styles/utils/AIMoment.module.css'
import styles from './Card.module.css'
export type CardColors =
| 'blue'
| 'green'
| 'gray'
| 'orange'
| 'purple'
| 'red'
| 'white'
| 'yellow'
export type CardProps = {
children?: React.ReactNode
/**
* HTML elements that are allowed on Card.
*/
tag?: 'div' | 'article' | 'header' | 'main' | 'section' | 'li'
/**
* Adds a larger box shadow to to the card container.
*/
isElevated?: boolean
color?: CardColors
/** Set the loading state for Card AI Moments. If `true` this will animate, if `false` this will render the static loaded state. */
isAiLoading?: boolean
} & OverrideClassName, 'color'>>
/**
* {@link https://cultureamp.atlassian.net/wiki/spaces/DesignSystem/pages/3082094938/Card Guidance} |
* {@link https://cultureamp.design/?path=/docs/components-card-api-specification--docs Storybook}
*/
export const Card = ({
children,
tag = 'div',
color = 'white',
isElevated = false,
classNameOverride,
isAiLoading,
...props
}: CardProps): JSX.Element => {
const Element = tag
const animationClass = useExitingAnimation(
isAiLoading,
sharedAiStyles.aiMomentLoading,
sharedAiStyles.aiMomentExiting,
500,
)
return (
{isAiLoading !== undefined && (
)}
{children}
)
}
Card.displayName = 'Card'