import React from "react";
import { LucideIcon } from "lucide-react";
import type { EventEmit } from "@almadar/core";
export interface NavItem {
    label: string;
    href: string;
    /** Lucide icon component or string icon name (resolved by @almadar/ui Icon) */
    icon?: LucideIcon | string;
    badge?: string | number;
    children?: NavItem[];
}
export interface NotificationItem {
    id: string;
    /** Short label shown in the dropdown row. */
    message: string;
    /** Optional secondary text. */
    description?: string;
    /** Optional ISO timestamp string. */
    createdAt?: string;
    /** Optional flag — bell badge counts items where read !== true. */
    read?: boolean;
}
export interface DashboardLayoutProps {
    /** App name shown in sidebar */
    appName?: string;
    /** Logo component or URL */
    logo?: React.ReactNode;
    /** Navigation items. Apps that need a Settings page should add it
     *  as a navItems entry, not depend on baked-in chrome. */
    navItems?: NavItem[];
    /** Current user info (optional - auto-populated from auth context if not provided) */
    user?: {
        name: string;
        email: string;
        avatar?: string;
    };
    /** Header actions (extra slots beyond bell/search/theme). */
    headerActions?: React.ReactNode;
    /** Show the top-bar search box. Default `false` — opt in by setting
     *  `searchEvent` (any truthy value implies showSearch) or this flag. */
    showSearch?: boolean;
    /** Declarative search event — fires `UI:{searchEvent}` on the bus
     *  when the user submits the search box (Enter key). Setting this
     *  implies `showSearch=true`. Use `onSearchSubmit` for direct React
     *  usage instead. */
    searchEvent?: EventEmit<{
        value: string;
    }>;
    /** React-side search submit callback. Used when the host wires the
     *  layout directly (not via render-ui pattern resolution). */
    onSearchSubmit?: (value: string) => void;
    /** Notification list. Pass an empty array to show the bell with no
     *  badge; omit / pass null to hide the bell entirely. */
    notifications?: NotificationItem[] | null;
    /** Declarative bell click event — fires `UI:{notificationClickEvent}`
     *  on the bus with an empty payload when the user clicks the bell. */
    notificationClickEvent?: EventEmit<Record<string, never>>;
    /** React-side bell click callback. */
    onNotificationClick?: () => void;
    /** Show the theme toggle button in the header. Default `true` —
     *  universally useful for a11y / dark mode. */
    showThemeToggle?: boolean;
    /** Custom sidebar footer (optional). When omitted, the sidebar has
     *  no footer — apps that need Settings/etc. add them via navItems. */
    sidebarFooter?: React.ReactNode;
    /** Callback when user clicks sign out (optional - uses auth context signOut if not provided) */
    onSignOut?: () => void;
    /** Page content rendered inside the main area */
    children?: React.ReactNode;
}
export declare const DashboardLayout: React.FC<DashboardLayoutProps>;
