import { type HTMLAttributes, type ReactNode } from 'react';
import { type VariantProps } from 'class-variance-authority';
import { type ProductHubItem } from './product-hub-tray';
declare const productHubPanelVariants: (props?: ({
surface?: "elevated" | "flat" | null | undefined;
} & import("class-variance-authority/types").ClassProp) | undefined) => string;
/**
* Curated imperative handle for ProductHubPanel — read-only ids / counts
* plus a select delegation. See `product-hub-panel.agent.ts`.
*/
export interface ProductHubPanelHandle {
getItems: () => Array<{
id: string;
unseen: boolean;
}>;
getUnseenCount: () => number;
selectItem: (id: string) => void;
}
export interface ProductHubPanelProps extends Omit, 'onClick' | 'children' | 'id'>, VariantProps {
/**
* Stable instance id. Surfaced on the root as `data-component-id` so
* an agent / MCP UI bridge can address this specific panel.
*/
id?: string;
/** Releases rendered in the panel, newest first. */
items: ProductHubItem[];
/**
* Product-hub landing URL. When set (and safe) the panel renders an
* "Open in Product Hub" footer link that opens in a new tab.
*/
hubUrl?: string;
/** When true the panel shows skeleton placeholders. */
loading?: boolean;
/** Error-state slot — rendered instead of the list. */
error?: ReactNode;
/** Panel heading. Defaults to the localised "What's new". */
title?: string;
/** Optional sub-heading rendered under the title. */
description?: string;
/** Number of releases rendered before the rest are cut off. Default 5. */
maxVisible?: number;
/** Empty-state slot — replaces the built-in EmptyState. */
emptyState?: ReactNode;
/**
* Analytics hook — fires when a row is activated. Navigation itself is
* owned by the row anchor (new tab).
*/
onItemActivate?: (item: ProductHubItem) => void;
/** BCP-47 locale override for the per-row dates. */
locale?: string;
}
export declare const ProductHubPanel: import("react").ForwardRefExoticComponent>;
export {};
//# sourceMappingURL=product-hub-panel.d.ts.map