import { type ReactNode } from "react";
export interface CategoryDockMenu {
/** Trigger icon — string src (via `renderImage`) or a node. Falls back to the item's own icon when used inline. */
triggerIcon?: ReactNode | string;
triggerLabel?: string;
contentClassName?: string;
/** Full control over the dropdown body. Compose `` here for the theme switcher. */
renderContent: (ctx: {
side: "top" | "bottom";
close: () => void;
}) => ReactNode;
}
export interface DockNavItem {
/** Stable identity for the item (also used for React keys). */
key: string;
label: string;
/** A string is treated as an image src (rendered via `renderImage`); a node is rendered as-is. */
icon: ReactNode | string;
active?: boolean;
onClick?: () => void;
/** Optional inline dropdown menu. When set, the item renders as a dropdown trigger instead of a nav button. */
menu?: CategoryDockMenu;
}
export interface CategoryDockProps {
items: DockNavItem[];
/** Renders string icons. Defaults to a plain `
`; pass next/image for Next apps. */
renderImage?: (src: string, alt: string, size: number) => ReactNode;
/** Alt+1..n triggers the matching item's `onClick`. Default false. */
enableKeyboardShortcuts?: boolean;
className?: string;
/** Which fixed placements to render. Defaults to both. */
placements?: {
desktop?: boolean;
mobile?: boolean;
};
/**
* Horizontal alignment of the mobile dock at `sm:` widths and up (it stays
* centered below that). `"end"` shifts it to the right, freeing the rest
* of the bottom row for other fixed bottom chrome (e.g. a chat input bar)
* to share the same row. Defaults to `"center"`.
*/
mobileAlign?: "center" | "end";
}
export declare function CategoryDock({ items, renderImage, enableKeyboardShortcuts, className, placements, mobileAlign, }: CategoryDockProps): import("react").JSX.Element;