import { type AnchorHTMLAttributes, type ComponentPropsWithoutRef, type ReactNode } from 'react';
import { type VariantProps } from 'class-variance-authority';
export interface PublicHeaderHandle {
openMenu: () => void;
closeMenu: () => void;
getMenuOpen: () => boolean;
}
export interface PublicHeaderProps extends Omit, 'children'>, VariantProps {
/** Logo lockup, typically ``. */
logo: ReactNode;
/** Optional href for the logo link. Defaults to `/`. */
homeHref?: string;
/** Accessible label for the logo link (falls back to `t('publicHeader.homeLabel')`). */
homeLabel?: string;
/** Primary nav links rendered inline ≥ md, collapsed into the mobile sheet below md. */
navSlot?: ReactNode;
/** Right-side actions (sign-in / register / role-switch CTAs). */
actionsSlot?: ReactNode;
/** Sticky behaviour. Default `none`. */
sticky?: 'none' | 'top' | 'scroll-up';
/** Pixel offset above which `sticky="scroll-up"` engages and `transparent` fades to default. */
stickyOffset?: number;
/** Override the mobile menu trigger's accessible label (`t('publicHeader.openMenu')`). */
menuLabel?: string;
/** Override the navigation landmark label (`t('publicHeader.primaryNavLabel')`). */
navLabel?: string;
/**
* Keep `actionsSlot` visible inline at every breakpoint instead of
* collapsing it into the mobile menu. When there is no `navSlot`, the
* mobile menu trigger is omitted entirely (nothing left to collapse) — use
* this for a header whose only action is a single always-relevant control,
* e.g. a public signer's "Sign out". Default `false`.
*/
persistActions?: boolean;
/** Consumer-supplied instance id, surfaced as `data-component-id`. */
id?: string;
}
export interface PublicHeaderNavLinkProps extends Omit, 'children'> {
href: string;
active?: boolean;
children: ReactNode;
}
export interface PublicHeaderNavDropdownProps {
/** Trigger label (the visible nav item text). */
label: ReactNode;
/**
* `false` (default) renders a single-card dropdown anchored near the trigger
* (Settori-style). `true` renders a wide multi-card mega-menu spanning the
* pill's full inline width (Soluzioni-style).
*/
wide?: boolean;
/** Cards / content inside the dropdown panel. */
children: ReactNode;
/** Optional id; not required — used only for analytics / test selectors. */
id?: string;
}
export interface PublicHeaderDropdownCardProps {
/**
* Optional href — when provided the card title becomes a clickable
* anchor with a `→` arrow indicator. Without href, the title is
* a static heading (Settori-style).
*/
href?: string;
title: ReactNode;
/** Optional subtitle / muted helper text under the title. */
subtitle?: ReactNode;
/** Sub-list contents (typically PublicHeader.DropdownLink children). */
children?: ReactNode;
}
export interface PublicHeaderDropdownLinkProps extends Omit, 'children'> {
href: string;
active?: boolean;
children: ReactNode;
}
declare const rootVariants: (props?: ({
variant?: "dark" | "transparent" | "brand" | "pill" | null | undefined;
sticky?: "top" | "none" | "scroll-up" | null | undefined;
} & import("class-variance-authority/types").ClassProp) | undefined) => string;
export declare const PublicHeader: import("react").ForwardRefExoticComponent> & {
NavLink: import("react").ForwardRefExoticComponent>;
NavDropdown: import("react").ForwardRefExoticComponent>;
DropdownCard: import("react").ForwardRefExoticComponent>;
DropdownLink: import("react").ForwardRefExoticComponent>;
};
export {};
//# sourceMappingURL=public-header.d.ts.map