"use client" import * as ModalPrimitive from "@radix-ui/react-dialog" import React, { ComponentProps, ElementRef, forwardRef } from "react" import { Close } from "../../icons/material-symbols/outlined/Close" import { borderVariants } from "../../styles" import { overlayVariants } from "../../styles/utils/overlay" import { classNames, tv, VariantProps } from "../../utils" import { Button } from "../Button" import { Container } from "../Container" import { FlexCenterProps } from "../FlexCenter" import { VisuallyHidden } from "../VisuallyHidden" export type TakeoverModalProps = Pick< ComponentProps, "open" | "defaultOpen" | "onOpenChange" | "modal" > & Omit, "content"> & { content: React.ReactNode withCloseIcon?: boolean transparent?: boolean overrides?: { Overlay: ComponentProps } } & VariantProps const fadeInAnimation = classNames( "data-[state=open]:duration-300 data-[state=open]:animate-in data-[state=open]:fade-in-0 data-[state=open]:zoom-in-95", ) const fadeOutAnimation = classNames( "data-[state=closed]:duration-300 data-[state=closed]:animate-out data-[state=closed]:fade-out-0", ) export const takeoverModalContentVariants = tv({ base: classNames( "fixed inset-0 z-takeover-modal overflow-y-auto bg-bg-app ease-out-quint focus-visible:outline-hidden lg:m-4 lg:rounded-xl 2xl:m-6", borderVariants({ border: "border-1" }), ), variants: { animation: { in: fadeInAnimation, out: fadeOutAnimation, "in-and-out": classNames(fadeInAnimation, fadeOutAnimation), }, }, }) const TakeoverModalBase = forwardRef< ElementRef, TakeoverModalProps >(function TakeoverModal( { open, defaultOpen, onOpenChange, content, children, className, modal, overrides, withCloseIcon = true, animation = "in-and-out", ...props }, ref, ) { return ( <> {children} {content} {withCloseIcon ? (