import * as SheetPrimitive from '@radix-ui/react-dialog' import { cva, type VariantProps } from 'class-variance-authority' import type * as React from 'react' import { SvgDelete1 } from '@chainlink/blocks-icons' import { cn } from '../../utils' import { ButtonIcon, type ButtonIconProps } from '../Button' import { Sheet, SheetClose, SheetFooter, SheetOverlay, SheetPortal, SheetTitle, SheetTrigger, SheetHeader, } from '../Sheet/sheet' const SidePanel = Sheet SidePanel.displayName = 'SidePanel' const SidePanelTrigger = SheetTrigger SidePanelTrigger.displayName = 'SidePanelTrigger' const SidePanelFooter = SheetFooter SidePanelFooter.displayName = 'SidePanelFooter' const SidePanelClose = SheetClose SidePanelClose.displayName = 'SidePanelClose' type SidePanelCloseMobileProps = ButtonIconProps & { ref?: React.Ref } const SidePanelCloseMobile = ({ className, ref, ...props }: SidePanelCloseMobileProps) => ( ) SidePanelCloseMobile.displayName = 'SidePanelCloseMobile' const SidePanelCloseDesktop = () => (
Esc
) export const SidePanelVariants = cva( 'w-full md:w-[calc(100%-80px)] fixed z-[17] bg-background-alt shadow-lg ease-in-out data-[state=open]:animate-in data-[state=closed]:animate-out data-[state=closed]:duration-300 data-[state=open]:duration-500 flex flex-col transition-all', { variants: { side: { right: 'inset-y-0 right-0 h-full border-l border-border data-[state=closed]:slide-out-to-right data-[state=open]:slide-in-from-right', }, variant: { narrow: 'sm:max-w-screen-lg', wide: 'sm:max-w-screen-xl', }, }, defaultVariants: { side: 'right', variant: 'narrow', }, }, ) export interface SidePanelContentProps extends React.ComponentPropsWithoutRef, VariantProps { ref?: React.Ref> } const SidePanelContent = ({ side, variant, className, children, ref, ...props }: SidePanelContentProps) => ( {children} ) SidePanelContent.displayName = 'SidePanelContent' const SidePanelScrollArea = ({ children }: { children: React.ReactNode }) => (
{children}
) type SidePanelTitleProps = React.ComponentPropsWithoutRef & { ref?: React.Ref> } const SidePanelTitle = ({ className, ref, ...props }: SidePanelTitleProps) => ( ) SidePanelTitle.displayName = 'SidePanelTitle' // SidePanelHeader composes SheetHeader with built-in close button // Uses grid on mobile: content wrapper on left, close on right // Desktop: flex row const SidePanelHeader = ({ className, children, ...props }: React.ComponentPropsWithoutRef) => { return ( {/* Content wrapper - contains all children (title, left items, right items) */}
{children}
{/* Close button always on right - override absolute positioning to make it flow */}
) } SidePanelHeader.displayName = 'SidePanelHeader' export { SidePanel, SidePanelTrigger, SidePanelContent, SidePanelScrollArea, SidePanelCloseMobile, SidePanelTitle, SidePanelFooter, SidePanelClose, SidePanelHeader, }