copper-ui
Version:
Modern React UI components library with TypeScript support, built on top of Ant Design
75 lines • 2.77 kB
TypeScript
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