import { ReactNode } from '../../../../node_modules/.pnpm/react@19.1.1/node_modules/react';
export type NavigationMatchMode = "exact" | "prefix";
export type NavigationVisibilityContext = unknown;
export type NavigationMatchInput<TMeta = unknown, TContext = NavigationVisibilityContext> = {
    pathname: string;
    item: NavigationItem<TMeta>;
    context?: TContext;
};
export type NavigationMatch<TMeta = unknown, TContext = NavigationVisibilityContext> = NavigationMatchMode | ((input: NavigationMatchInput<TMeta, TContext>) => boolean);
export type NavigationItemBadgeTone = "neutral" | "attention" | "danger" | "warning" | "success";
export type NavigationItemBadgeConfig = {
    value: ReactNode;
    tone?: NavigationItemBadgeTone;
    label?: string;
    ariaLabel?: string;
    hideWhenZero?: boolean;
};
export type NavigationItem<TMeta = unknown> = {
    id: string;
    label: ReactNode;
    href?: string;
    icon?: ReactNode;
    children?: NavigationItem<TMeta>[];
    disabled?: boolean;
    badge?: ReactNode | NavigationItemBadgeConfig;
    tooltip?: ReactNode;
    meta?: TMeta;
    match?: NavigationMatch<TMeta>;
};
export type NavigationGuardInput<TMeta = unknown, TContext = NavigationVisibilityContext> = {
    item: NavigationItem<TMeta>;
    context?: TContext;
    depth: number;
    parentId: string | null;
    parentIds: string[];
};
export type NavigationGuard<TMeta = unknown, TContext = NavigationVisibilityContext> = (input: NavigationGuardInput<TMeta, TContext>) => boolean;
export type FilterNavigationItemsOptions<TMeta = unknown, TContext = NavigationVisibilityContext> = {
    context?: TContext;
    guard?: NavigationGuard<TMeta, TContext>;
};
export type FlatNavigationItem<TMeta = unknown> = {
    item: NavigationItem<TMeta>;
    depth: number;
    parentId: string | null;
    parentIds: string[];
};
export type NavigationItemActiveState<TMeta = unknown> = FlatNavigationItem<TMeta> & {
    id: string;
    isActive: boolean;
    isAncestorActive: boolean;
    matchedBy: NavigationMatchMode | "custom" | null;
};
export type ActiveNavigationState<TMeta = unknown> = {
    activeItemId: string | null;
    activeItemIds: string[];
    ancestorItemIds: string[];
    expandedItemIds: string[];
    itemsById: Record<string, NavigationItemActiveState<TMeta>>;
};
export type NavigationValidationIssueCode = "duplicate-id" | "missing-id";
export type NavigationValidationIssue = {
    code: NavigationValidationIssueCode;
    itemId: string;
    message: string;
    parentIds: string[];
};
export type ValidateNavigationItemsOptions = {
    throwOnError?: boolean;
};
export type NavigationValidationResult = {
    valid: boolean;
    issues: NavigationValidationIssue[];
};
//# sourceMappingURL=navigation.types.d.ts.map