import { type LayoutWindowSplitterProps } from "./LayoutWindowSplitter.js";
import { type ExpandableLayoutImplementation, type ExpandableLayoutOptions, type ProvidedLayoutNavProps } from "./useExpandableLayout.js";
import { type LayoutWindowSplitterOptions } from "./useLayoutWindowSplitter.js";
/**
 * @since 6.0.0
 */
export interface ResizableLayoutOptions extends ExpandableLayoutOptions, LayoutWindowSplitterOptions {
    /**
     * This id will be used as the `aria-controls` prop for the
     * `LayoutWindowSplitter` and should be applied to the `LayoutNav` as an `id`.
     *
     * @defaultValue `"layout-nav" + useId()`
     */
    navId?: string;
}
/**
 * @since 6.0.0
 */
export interface ProvidedResizableLayoutNavProps extends ProvidedLayoutNavProps {
    id: string;
}
/**
 * @since 6.0.0
 */
export interface ResizableLayoutImplementation extends ExpandableLayoutImplementation {
    expandableNavProps: ProvidedResizableLayoutNavProps;
    windowSplitterProps: LayoutWindowSplitterProps;
}
/**
 * @example Main Usage
 * ```tsx
 * import {
 *   AppBarTitle,
 *   Button,
 *   LayoutAppBar,
 *   LayoutNav,
 *   LayoutWindowSplitter,
 *   Main,
 *   Sheet,
 *   useResizableLayout,
 * } from "@react-md/core";
 * import type { ReactElement, ReactNode } from "react";
 *
 * import { CustomNavigation } from "./CustomNavigation";
 *
 * export interface LayoutProps {
 *   children: ReactNode;
 * }
 *
 * export function Layout(props: LayoutProps): ReactElement {
 *   const { children } = props;
 *
 *   // choose whichever one for your app
 *   // nextjs app dir
 *   const pathname = usePathname();
 *   // nextjs pages
 *   const { pathname } = useRouter();
 *   // react router
 *   const { pathname } = useHistory();
 *
 *   const {
 *     temporary,
 *     appBarProps,
 *     expandableNavProps,
 *     mainProps,
 *     navToggleProps,
 *     temporaryNavProps,
 *     windowSplitterProps,
 *   } = useResizableLayout({ pathname });
 *
 *   return {
 *     <>
 *       <LayoutAppBar {...appBarProps}>
 *         <Button {...navToggleProps} />
 *         <AppBarTitle>Hello, world!</AppBarTitle>
 *       </LayoutAppBar>
 *       <LayoutNav {...expandableNavProps}>
 *         <CustomNavigation />
 *       </LayoutNav>
 *       <LayoutWindowSplitter {...windowSplitterProps} />
 *       {temporary && (
 *         <Sheet {...temporaryNavProps}>
 *           <CustomNavigation />
 *         </Sheet>
 *       )}
 *       <Main {...mainProps}>{children}</Main>
 *     </>
 *   }
 * }
 * ```
 *
 * If you have a large navigation panel, you can conditionally render the
 * `LayoutNav` with the `persistent` boolean returned by the hook which will
 * ensure that the DOM has rehydrated before unmounting to prevent SSR errors.
 *
 * @example Conditionally Rendering
 * ```diff
 *   const {
 *     temporary,
 * +   persistent,
 *     appBarProps,
 *     expandableNavProps,
 *     mainProps,
 *     navToggleProps,
 *     temporaryNavProps,
 *     windowSplitterProps,
 *   } = useResizableLayout({ pathname });
 *
 *   return {
 *     <>
 *       <LayoutAppBar {...appBarProps}>
 *         <Button {...navToggleProps} />
 *         <AppBarTitle>Hello, world!</AppBarTitle>
 *       </LayoutAppBar>
 * -     <LayoutNav {...expandableNavProps}>
 * -       <CustomNavigation />
 * -     </LayoutNav>
 * -     <LayoutWindowSplitter {...windowSplitterProps} />
 * +     {persistent && (
 * +       <>
 * +         <LayoutNav {...expandableNavProps}>
 * +           <CustomNavigation />
 * +         </LayoutNav>
 * +         <LayoutWindowSplitter {...windowSplitterProps} />
 * +       </>
 * +     )}
 *       {temporary && (
 *         <Sheet {...temporaryNavProps}>
 *           <CustomNavigation />
 *         </Sheet>
 *       )}
 *       <Main {...mainProps}>{children}</Main>
 *     </>
 *   }
 *
 * ```
 *
 * @since 6.0.0
 */
export declare function useResizableLayout(options: ResizableLayoutOptions): ResizableLayoutImplementation;
