import { type HTMLAttributes, type ReactNode } from 'react';
import { type VariantProps } from 'class-variance-authority';
/**
* Provides rail-injected actions that every descendant `PanelHeader`
* appends to its action cluster, after the panel's own `actions`. The
* rail (or any host) wraps the panel subtree once; standalone panels
* render without a provider and inject nothing.
*/
export declare function PanelHeaderActionsProvider({ actions, children, }: {
actions: ReactNode;
children: ReactNode;
}): import("react/jsx-runtime").JSX.Element;
/** Reads the rail-injected actions for the current subtree (default `null`). */
export declare function usePanelHeaderActions(): ReactNode;
declare const headerVariants: (props?: ({
sticky?: boolean | null | undefined;
divider?: boolean | null | undefined;
} & import("class-variance-authority/types").ClassProp) | undefined) => string;
export interface PanelHeaderProps extends Omit, 'title'>, VariantProps {
/** Heading content. Already translated upstream. */
title: ReactNode;
/** Optional leading glyph — auto `aria-hidden` and sized to `--spacing` 4. */
icon?: ReactNode;
/** `id` applied to the heading so panels can wire `aria-labelledby`. */
headingId?: string;
/** Semantic heading level. Default `2`. */
headingLevel?: 2 | 3;
/** Panel-owned actions, rendered inline-end of the title row. */
actions?: ReactNode;
/** Optional second row, typically filter controls. */
filters?: ReactNode;
/** Pin to the top of the scroll region. Default `false`. */
sticky?: boolean;
/** Bottom hairline. Default `true`. */
divider?: boolean;
/** Type scale of the heading. Default `'card'`. */
titleScale?: 'card' | 'section';
/**
* Full title for the overflow tooltip when `title` is not a plain string.
* A string `title` is used as-is and needs nothing here. Pass this when
* the title is composed (a name plus a badge, say) and there is still a
* plain-text form worth showing.
*/
titleTooltip?: string;
/**
* Move the action cluster to its own line, under the title, when the
* full title and the cluster do not fit side by side. Default `false`:
* the title clips with an ellipsis instead, which suits a rail panel
* with a few icon buttons. Set it when the cluster is wide (a rating
* summary, a text button), where clipping would leave only a letter or
* two of the title. With it the title never clips: a title wider than
* the row by itself wraps onto more lines.
*/
wrapActions?: boolean;
}
export declare const PanelHeader: import("react").ForwardRefExoticComponent>;
export {};
//# sourceMappingURL=panel-header.d.ts.map