import React, { ComponentProps, MutableRefObject, ReactNode } from 'react'; import { Box, Header, Line, Scroll, Text, as } from 'folds'; import classNames from 'classnames'; import { ContainerColor } from '../../styles/ContainerColor.css'; import * as css from './style.css'; import * as swipeCss from '../mobile/mobile-gestures.css'; import { ScreenSize, useScreenSizeContext } from '../../hooks/useScreenSize'; import { SidebarDockedCallPanel } from '../../features/call/SidebarDockedCallPanel'; import { useShowCompactMasterView } from '../../hooks/useCompactNav'; import { isStationeryTheme, useTheme } from '../../hooks/useTheme'; type PageRootProps = { nav: ReactNode; children: ReactNode; }; export function PageRoot({ nav, children }: PageRootProps) { const screenSize = useScreenSizeContext(); const showCompactMaster = useShowCompactMasterView(); const compact = screenSize === ScreenSize.Mobile; // Master list routes: only the channel/space list is interactive. // Never mount the detail/underlay stack here — an empty detail layer would // sit above the list with pointer-events and freeze taps (DM → space bug). if (compact && showCompactMaster) { return ( {nav} ); } if (compact && !showCompactMaster) { return ( {nav && ( {nav} )} {children} ); } return ( {nav} {screenSize !== ScreenSize.Mobile && ( )} {children} ); } type ClientDrawerLayoutProps = { children: ReactNode; }; export function PageNav({ size, children, className, }: ClientDrawerLayoutProps & css.PageNavVariants & { className?: string }) { const screenSize = useScreenSizeContext(); const isMobile = screenSize === ScreenSize.Mobile; return ( {children} ); } export const PageNavHeader = as<'header', css.PageNavHeaderVariants>( ({ className, outlined, ...props }, ref) => (
) ); export function PageNavContent({ scrollRef, scrollProps, children, }: { children: ReactNode; scrollRef?: MutableRefObject; scrollProps?: React.ComponentProps; }) { const theme = useTheme(); const hideScrollbar = isStationeryTheme(theme); return (
{children}
); } export const Page = as<'div'>(({ className, ...props }, ref) => ( )); export const PageHeader = as<'div', css.PageHeaderVariants>( ({ className, outlined, balance, ...props }, ref) => (
) ); export const PageContent = as<'div'>(({ className, ...props }, ref) => (
)); export function PageHeroEmpty({ children }: { children: ReactNode }) { return ( {children} ); } export const PageHeroSection = as<'div', ComponentProps>( ({ className, ...props }, ref) => ( ) ); export function PageHero({ icon, title, subTitle, children, }: { icon: ReactNode; title: ReactNode; subTitle: ReactNode; children?: ReactNode; }) { return ( {icon} {title} {subTitle} {children} ); } export const PageContentCenter = as<'div'>(({ className, ...props }, ref) => (
));