import { default as React } from 'react';
import { LinkComponent } from '../../types/link-component';
export type SidebarState = 'default' | 'collapsed';
type MainSidebarContext = {
    state: SidebarState;
    desktopState: SidebarState;
    width: number;
    minWidth: number;
    maxWidth: number;
    collapseBelow: number;
    collapsedWidth: number;
    isMobile: boolean;
    openMobile: boolean;
    setOpenMobile: (open: boolean) => void;
    toggleSidebar: () => void;
    setWidth: (width: number) => void;
    collapse: () => void;
    expand: () => void;
    commit: () => void;
    setGestureActive: (active: boolean) => void;
    LinkComponent?: LinkComponent;
};
type MobileDrawerContext = {
    openMobile: boolean;
    setOpenMobile: (open: boolean) => void;
};
declare const MainSidebarContext: React.Context<Omit<MainSidebarContext, "openMobile" | "setOpenMobile"> | null>;
declare const MobileDrawerContext: React.Context<MobileDrawerContext | null>;
export declare function useMainSidebar(): MainSidebarContext;
export declare function useMaybeSidebar(): MainSidebarContext | null;
/** Reads only mobile drawer state. Cheap — no re-renders on sidebar resize. */
export declare function useMobileDrawer(): MobileDrawerContext;
export type MainSidebarProviderProps = {
    children: React.ReactNode;
    /** Initial state before localStorage hydrates. Defaults to `'default'`. */
    defaultState?: SidebarState;
    /** Default expanded width in px. Defaults to `240`. */
    defaultWidth?: number;
    /** Minimum draggable width in px. Defaults to `200`. */
    minWidth?: number;
    /** Maximum draggable width in px. Defaults to `480`. */
    maxWidth?: number;
    /** Drag below this value snaps the sidebar closed. Defaults to `minWidth` (snap to collapsed when dragged below the expanded minimum). Pass `0` to disable snap. */
    collapseBelow?: number;
    /** Width in px when collapsed. Defaults to `64`. Set to `0` for fully hidden. */
    collapsedWidth?: number;
    /** Disable the global ⌘B / Ctrl+B toggle shortcut. Defaults to `false`. */
    disableKeyboardShortcut?: boolean;
    /** Scope-key for localStorage. Allows multiple independent sidebars per app. */
    storageKey?: string;
    /** Mobile breakpoint in px (max-width). Below this, sidebar renders as a drawer. Defaults to `1024`. */
    mobileBreakpoint?: number;
    /** Drawer max-width on mobile in px. Actual width is `min(75vw, mobileWidth)`. Defaults to `360`. */
    mobileWidth?: number;
    /** Default LinkComponent injected into NavLink/NavHeader. Falls back to plain `<a>` if omitted. */
    LinkComponent?: LinkComponent;
};
export declare function MainSidebarProvider({ children, defaultState, defaultWidth, minWidth, maxWidth, collapseBelow, collapsedWidth, disableKeyboardShortcut, storageKey, mobileBreakpoint, mobileWidth, LinkComponent, }: MainSidebarProviderProps): import("react/jsx-runtime").JSX.Element;
export {};
