import { type Key, type ReactNode } from 'react'; import { type LayoutAreaMode } from './layout-area-sizing-context'; export type PanelResizeEnd = { initialWidth: number; finalWidth: number; mode: LayoutAreaMode; }; export type PanelLayoutProps = { /** * Main content. Mount PanelLayout inside navigation's Main, alongside ChatPanel in Root. */ children: ReactNode; /** * Caller-owned panel content; no Panel System provider or renderer is required. */ panel: ReactNode; isPanelOpen: boolean; /** * Optional content identity, used to reset scrolling and animate content replacement. */ panelKey?: Key; /** * Controlled preferred width in pixels. Allocation may constrain it without changing the request. */ panelWidth?: number; /** * Initial preferred width in pixels; subsequent changes are ignored. * Defaults to 365, or 400 with chat layout enabled. * After a user resize, one preferred width is retained across inline and overlay modes. * Available space can constrain the rendered width without overwriting that preference. */ defaultPanelWidth?: number; /** * Default at compact viewport sizes. Defaults to 320, or an explicitly supplied defaultPanelWidth. * Used only until a controlled width or user resize supplies a preference. */ compactDefaultPanelWidth?: number; /** * Minimum width in pixels. Defaults to 320; overlays can be smaller in a narrower container. */ panelMinWidth?: number; /** * Optional maximum width in pixels. */ panelMaxWidth?: number; /** * Called after user resizing, with the effective width. Accept this value to control panelWidth. */ onPanelWidthChange?: (width: number) => void; /** * One callback per completed pointer/keyboard resize, for persistence and analytics. */ onResizeEnd?: (event: PanelResizeEnd) => void; /** * Accessible region and splitter labels; pass localized values in products. */ panelLabel?: string; resizeLabel?: string; testId?: string; }; /** * A coordinated local panel with caller-owned content and state. Keep this host mounted * while closed to retain resized widths. Unmount it to reset its width preferences. * * Mount only one local-panel host per navigation Root/sizing coordinator, including * closed hosts and panel-system's LayoutWithPanel. Switch content through the same host; * separate Roots may each own a local panel. * * With chat layout enabled it shares Root's sizing coordinator. Otherwise it measures * its own Main region, leaving existing navigation/chat behavior unchanged. * Local-panel placement and resize constraints use this layout in both cases; disabling * the chat-layout gate does not restore the previous panel-system layout engine. */ export declare function PanelLayout(props: PanelLayoutProps): JSX.Element;