"use client" /** * Responsive Sheet * * Dialog on desktop, Drawer (pull-down) on mobile. * Automatically switches based on screen width using useIsMobile hook. */ import * as React from 'react'; import { useIsMobile } from '../../../hooks'; import { Dialog, DialogContent, DialogDescription, DialogFooter, DialogHeader, DialogTitle, } from '../../overlay/dialog'; import { Drawer, DrawerContent, DrawerDescription, DrawerFooter, DrawerHeader, DrawerTitle, } from '../../overlay/drawer'; // ───────────────────────────────────────────────────────────────────────────── // Context // ───────────────────────────────────────────────────────────────────────────── const ResponsiveSheetContext = React.createContext<{ isMobile: boolean }>({ isMobile: false, }); // ───────────────────────────────────────────────────────────────────────────── // Root // ───────────────────────────────────────────────────────────────────────────── interface ResponsiveSheetProps { open: boolean; onOpenChange: (open: boolean) => void; children: React.ReactNode; } function ResponsiveSheet({ open, onOpenChange, children }: ResponsiveSheetProps) { const isMobile = useIsMobile(); if (isMobile) { return ( {children} ); } return ( {children} ); } ResponsiveSheet.displayName = "ResponsiveSheet" // ───────────────────────────────────────────────────────────────────────────── // Content // ───────────────────────────────────────────────────────────────────────────── interface ResponsiveSheetContentProps { children: React.ReactNode; className?: string; } function ResponsiveSheetContent({ children, className }: ResponsiveSheetContentProps) { const { isMobile } = React.useContext(ResponsiveSheetContext); if (isMobile) { // Preserve legacy content-hugging behavior; new Drawer default is `md`. return {children}; } return {children}; } ResponsiveSheetContent.displayName = "ResponsiveSheetContent" // ───────────────────────────────────────────────────────────────────────────── // Header // ───────────────────────────────────────────────────────────────────────────── interface ResponsiveSheetHeaderProps extends React.HTMLAttributes {} function ResponsiveSheetHeader({ className, ...props }: ResponsiveSheetHeaderProps) { const { isMobile } = React.useContext(ResponsiveSheetContext); if (isMobile) { return ; } return ; } ResponsiveSheetHeader.displayName = "ResponsiveSheetHeader" // ───────────────────────────────────────────────────────────────────────────── // Title // ───────────────────────────────────────────────────────────────────────────── interface ResponsiveSheetTitleProps extends React.HTMLAttributes {} function ResponsiveSheetTitle({ className, ...props }: ResponsiveSheetTitleProps) { const { isMobile } = React.useContext(ResponsiveSheetContext); if (isMobile) { return ; } return ; } ResponsiveSheetTitle.displayName = "ResponsiveSheetTitle" // ───────────────────────────────────────────────────────────────────────────── // Description // ───────────────────────────────────────────────────────────────────────────── interface ResponsiveSheetDescriptionProps extends React.HTMLAttributes {} function ResponsiveSheetDescription({ className, ...props }: ResponsiveSheetDescriptionProps) { const { isMobile } = React.useContext(ResponsiveSheetContext); if (isMobile) { return ; } return ; } ResponsiveSheetDescription.displayName = "ResponsiveSheetDescription" // ───────────────────────────────────────────────────────────────────────────── // Footer // ───────────────────────────────────────────────────────────────────────────── interface ResponsiveSheetFooterProps extends React.HTMLAttributes {} function ResponsiveSheetFooter({ className, ...props }: ResponsiveSheetFooterProps) { const { isMobile } = React.useContext(ResponsiveSheetContext); if (isMobile) { return ; } return ; } ResponsiveSheetFooter.displayName = "ResponsiveSheetFooter" // ───────────────────────────────────────────────────────────────────────────── // Exports // ───────────────────────────────────────────────────────────────────────────── export { ResponsiveSheet, ResponsiveSheetContent, ResponsiveSheetHeader, ResponsiveSheetTitle, ResponsiveSheetDescription, ResponsiveSheetFooter, };