import type { ElementType, ReactNode } from "react";
/**
* PageShell — page-level scaffold composite.
*
* Renders title + optional description + optional ActionBar, then
* one of four mutually-exclusive content states:
* 1. loading (highest precedence)
* 2. error
* 3. empty
* 4. children (default)
*
* Scope-narrowed per Brief #5 D3: PageShell does NOT manage
* `document.title`. Use the optional `onTitleChange` callback to
* wire your own hook (e.g. useSetPageTitle, react-helmet,
* next/head).
*
* @example
*
*
*
*/
export interface PageShellProps {
title: string;
description?: ReactNode;
/** Optional callback invoked when `title` changes — wire to your own document.title hook. */
onTitleChange?: (title: string) => void;
primaryAction?: {
label: ReactNode;
icon?: ElementType;
onClick: () => void;
loading?: boolean;
};
search?: {
placeholder: string;
value: string;
onChange: (v: string) => void;
};
onFilterClick?: () => void;
loading?: boolean;
/** Custom loading UI. Defaults to a centered spinner card. */
loadingNode?: ReactNode;
error?: {
message: string;
onRetry?: () => void;
docsHref?: string;
};
empty?: {
icon?: ElementType;
title: string;
description?: ReactNode;
action?: {
label: string;
onClick: () => void;
};
};
children?: ReactNode;
className?: string;
}
declare const PageShell: import("react").ForwardRefExoticComponent>;
export { PageShell };