import * as React from 'react';
export type PanelPosition = 'only' | 'first' | 'last';
export interface AppShellContextValue {
    /** Whether the shell is in connected (joined-edge) mode */
    connected: boolean;
    /** Number of visible Panel children */
    panelCount: number;
    /** Get the position of a panel by its index among visible panels */
    getPanelPosition: (index: number) => PanelPosition;
}
declare const AppShellContext: React.Context<AppShellContextValue | null>;
/**
 * Read AppShell layout context. Returns null when used outside AppShell.Root.
 */
declare function useAppShell(): AppShellContextValue | null;
declare const AppShellProvider: React.Provider<AppShellContextValue | null>;
/**
 * Internal context for passing the panel index from Panel to Content.
 * Content reads this to determine its position in connected mode.
 */
declare const PanelIndexContext: React.Context<number>;
/**
 * Per-panel layout state provided by Root. Replaces cloneElement style injection.
 * Panel reads this to self-manage visibility, mobile sizing, and ARIA attributes.
 */
export interface PanelLayoutInfo {
    /** Whether this panel is visible (false = hidden overflow panel or non-expanded sibling) */
    visible: boolean;
    /** Whether we're in mobile viewport */
    isMobile: boolean;
    /** ARIA tab ID for tabpanel association (set when mobile tab bar is active) */
    tabId?: string;
    /** ARIA panel ID for tabpanel role (set when mobile tab bar is active) */
    panelId?: string;
}
declare const PanelLayoutContext: React.Context<PanelLayoutInfo>;
export interface PanelExpansionInfo {
    expanded: boolean;
    onExpandedChange?: (expanded: boolean) => void;
}
declare const PanelExpansionContext: React.Context<PanelExpansionInfo | null>;
declare function usePanelExpansion(): PanelExpansionInfo | null;
export { AppShellContext, AppShellProvider, PanelExpansionContext, PanelIndexContext, PanelLayoutContext, useAppShell, usePanelExpansion, };
