import { ReactNode } from 'react'; export interface NavItem { id: string; label: string; icon?: ReactNode; path: string; badge?: number; order?: number; group?: string; visible?: boolean; children?: NavItem[]; homePath?: string; exact?: boolean; /** Plugin that registered this item. Set automatically by the plugin runtime. */ pluginId?: string; /** * RBAC permission(s) required to see this item ("resource:action" form, * e.g. "healthybowl_farm:read"). An array means ANY match shows the item. * When the caller's effective permissions are loaded and none match, the * item is hard-hidden (no user toggle — the backend would reject the page * anyway). Omit for items visible to every authenticated user. * UI shaping only: the gateway `@rbac` layer stays the enforcement point. */ requiredPermission?: string | string[]; /** * Priority for the installed-app bottom tab bar (`MobileTabBar`). Items that * declare one are promoted into the visible tabs first, ascending (0 = most * important); items without it fall back to registry `order`. Optional — * the tab bar works without it. */ mobilePriority?: number; } interface NavRegistryStore { items: NavItem[]; register: (item: NavItem) => void; unregister: (id: string) => void; clear: () => void; } export declare const useNavRegistryStore: import('zustand').UseBoundStore>; export {}; //# sourceMappingURL=useNavRegistry.d.ts.map