import { forwardRef, useCallback, useId } from 'react' import { createPortal } from 'react-dom' import { X } from 'lucide-react' import styled from 'styled-components' import Block from '../Primitives/Block/Block' import type { ModalProps } from './types' import { FOUNDATION_THEME } from '../../tokens' import type { ModalTokensType } from './modal.tokens' import Text from '../Text/Text' import { ButtonSubType, ButtonType, Button } from '../Button' import { useResponsiveTokens } from '../../hooks/useResponsiveTokens' import { useBreakpoints } from '../../hooks/useBreakPoints' import MobileModal from './MobileModal' import { modalBackdropAnimations, modalContentAnimations, } from './modal.animations' import { useModal } from './useModal' import { type SkeletonVariant } from '../Skeleton' import ModalSkeleton from './ModalSkeleton' const AnimatedBackdrop = styled(Block)<{ $isAnimatingIn: boolean }>` ${({ $isAnimatingIn }) => modalBackdropAnimations($isAnimatingIn)} ` const AnimatedModalContent = styled(Block)<{ $isAnimatingIn: boolean }>` ${({ $isAnimatingIn }) => modalContentAnimations($isAnimatingIn)} ` const ModalHeader = ({ title, subtitle, onClose, showCloseButton, headerRightSlot, showDivider, showSkeleton, skeletonVariant, titleId, subtitleId, }: { title?: string subtitle?: string onClose: () => void showCloseButton?: boolean headerRightSlot?: React.ReactNode showDivider?: boolean showSkeleton?: boolean skeletonVariant?: SkeletonVariant titleId?: string subtitleId?: string }) => { const modalTokens = useResponsiveTokens('MODAL') if (showSkeleton) { return ( ) } if (!title && !subtitle) return null return ( {title && ( {title} )} {headerRightSlot} {subtitle && ( {subtitle} )} {showCloseButton && (