import type * as React from 'react';
import type { UIMatch } from "react-router";
/**
 * 导航栏配置
 */
export interface NavbarConfig {
    /** 是否固定在顶部 */
    sticky?: boolean;
    /** 背景透明度 */
    transparent?: boolean;
    /** 高度 */
    height?: string;
}
/**
 * 侧边栏配置
 */
export interface SidebarConfig {
    /** 侧边栏宽度 */
    width?: string;
    /** 是否可折叠 */
    collapsible?: boolean;
    /** 默认是否折叠 */
    defaultCollapsed?: boolean;
}
/**
 * 页脚配置
 */
export interface FooterConfig {
    /** 是否固定在底部 */
    sticky?: boolean;
    /** 高度 */
    height?: string;
}
/**
 * 主题配置
 */
export interface ThemeConfig {
    /** 主题模式 */
    mode?: 'light' | 'dark' | 'auto';
    /** 主色调 */
    primaryColor?: string;
}
/**
 * 响应式配置
 */
export interface ResponsiveConfig {
    /** 移动端是否隐藏侧边栏 */
    hideSidebarOnMobile?: boolean;
    /** 移动端断点 */
    mobileBreakpoint?: string;
}
/**
 * 布局设置 - 与 VGrove 布局配置兼容
 */
export interface LayoutSettings {
    /** 是否显示侧边栏 */
    sidebar?: boolean;
    /** 是否显示导航栏/头部 */
    header?: boolean;
    /** 是否显示页脚 */
    footer?: boolean;
    /** 导航栏配置 */
    navbar?: NavbarConfig;
    /** 侧边栏配置 */
    sidebarConfig?: SidebarConfig;
    /** 页脚配置 */
    footerConfig?: FooterConfig;
    /** 主题相关配置 */
    theme?: ThemeConfig;
    /** 响应式配置 */
    responsive?: ResponsiveConfig;
}
export interface LayoutFeatures {
    hasSidebar: boolean;
    hasHeader: boolean;
    hasFooter: boolean;
    isSidebarCollapsible: boolean;
    isNavbarSticky: boolean;
    isFooterSticky: boolean;
    shouldHideSidebarOnMobile: boolean;
}
/**
 * 本地化类型，可以是任何字符串
 */
export type LocalizedType<Keys extends string = string> = Keys | (string & {});
/**
 * 本地化对象，包含本地化ID
 */
export type Localized<Keys extends string = string> = {
    localizedId: LocalizedType<Keys>;
};
/**
 * 本地化对象或React节点
 */
export type LocalizedOrNode<Keys extends string = string> = Localized<Keys> | React.ReactNode;
/**
 * 页面元数据
 */
export type PageMeta<Keys extends string = string> = {
    /** 页面标题 */
    title?: LocalizedOrNode<Keys>;
    /** 页面描述 */
    description?: string;
};
export type PageHeaderMeta<Keys extends string = string> = {
    /** 页面标题 */
    title?: LocalizedOrNode<Keys>;
    /** 页面描述 */
    description?: LocalizedOrNode<Keys>;
};
/**
 * 面包屑项属性
 */
export interface PageBreadcrumbItemProps {
    /** 链接地址 */
    href?: string;
    /** 是否禁用 */
    isDisabled?: boolean;
    /** 是否为当前页 */
    isCurrent?: boolean;
    /** CSS 类名 */
    className?: string;
    /** 起始内容 */
    startContent?: React.ReactNode;
    /** 结尾内容 */
    endContent?: React.ReactNode;
    /** 子内容 */
    children?: React.ReactNode;
}
/**
 * 页面处理配置
 */
export type PageHandle<Keys extends string = string> = {
    /** 元数据 */
    meta?: PageMeta<Keys>;
    /** 页面元数据 */
    pageMeta?: PageHeaderMeta<Keys>;
    /** 额外内容 */
    extras?: React.ReactNode;
    /** 布局设置 */
    layoutSettings?: LayoutSettings;
    /** 面包屑配置 */
    breadcrumbs?: Omit<PageBreadcrumbItemProps, "children">;
    /** 路由匹配 */
    matches?: UIMatch[];
    /** 其他自定义属性 */
    [x: string]: any;
};
/**
 * 守卫执行上下文
 */
export interface GuardContext {
    /** 当前路由路径 */
    path: string;
    /** 路由参数 */
    params: Record<string, string>;
    /** 查询参数 */
    query: Record<string, string>;
    /** 用户信息 */
    user?: any;
    /** 用户权限 */
    permissions?: string[];
    /** 用户角色 */
    roles?: string[];
    /** 自定义数据 */
    data: Record<string, any>;
}
/**
 * 中间件上下文
 */
export interface MiddlewareContext {
    /** 当前路由路径 */
    path: string;
    /** 路由参数 */
    params: Record<string, string>;
    /** 查询参数 */
    query: Record<string, string>;
    /** 请求头 */
    headers?: Record<string, string>;
    /** 用户数据 */
    user?: any;
    /** 自定义数据 */
    data: Record<string, any>;
}
/**
 * 认证上下文
 */
export interface AuthContext {
    /** 当前路由路径 */
    path: string;
    /** 路由参数 */
    params: Record<string, string>;
    /** 查询参数 */
    query: Record<string, string>;
    /** 用户信息 */
    user?: any;
    /** 用户权限 */
    permissions?: string[];
    /** 用户角色 */
    roles?: string[];
    /** 自定义数据 */
    data: Record<string, any>;
}
/**
 * 认证状态
 */
export interface AuthState<TUser = any> {
    user: TUser | null;
    token: string | null;
    refreshToken: string | null;
    isAuthenticated: boolean;
    isLoading: boolean;
    error: string | null;
}
/**
 * 认证操作
 */
export interface AuthActions<TUser = any, TCredentials = any> {
    login: (credentials: TCredentials) => Promise<void>;
    logout: () => void;
    refreshUser: () => Promise<void>;
    refreshTokenAction: () => Promise<void>;
    updateUser: (userData: Partial<TUser>) => void;
    setToken: (token: string) => void;
    setRefreshToken: (refreshToken: string) => void;
    clearError: () => void;
}
/**
 * API 字段映射
 */
export interface FieldMapping {
    /** 用户数据字段名，默认 'user' */
    userField?: string;
    /** Token字段名，默认 'token' */
    tokenField?: string;
    /** RefreshToken字段名，默认 'refreshToken' */
    refreshTokenField?: string;
}
/**
 * 数据转换器
 */
export interface DataTransformers<TUser = any, TCredentials = any> {
    /** 登录前转换凭据 */
    transformCredentials?: (credentials: TCredentials) => any;
    /** 登录后转换用户数据 */
    transformUser?: (userData: any) => TUser;
    /** 存储前转换用户数据 */
    beforeStore?: (userData: TUser) => any;
    /** 读取后转换用户数据 */
    afterRestore?: (userData: any) => TUser;
}
/**
 * useUser 配置
 */
export interface UseUserOptions<TUser = any, TCredentials = any> {
    /** 存储键前缀 */
    storagePrefix?: string;
    /** 是否使用 sessionStorage（默认使用 localStorage） */
    useSessionStorage?: boolean;
    /** 获取用户信息的函数 */
    fetchUser?: (token: string) => Promise<TUser>;
    /** 登录API */
    loginApi?: (credentials: TCredentials) => Promise<{
        user: TUser;
        token: string;
        refreshToken?: string;
    }>;
    /** 刷新Token API */
    refreshTokenApi?: (refreshToken: string) => Promise<{
        token: string;
        refreshToken?: string;
        user?: TUser;
    }>;
    /** 自动刷新间隔（毫秒，0表示禁用） */
    autoRefreshInterval?: number;
    /** Token过期检查函数 */
    isTokenExpired?: (token: string) => boolean;
    /** RefreshToken过期检查函数 */
    isRefreshTokenExpired?: (refreshToken: string) => boolean;
    /** API字段映射 */
    fieldMapping?: FieldMapping;
    /** 数据转换器 */
    transformers?: DataTransformers<TUser, TCredentials>;
}
/**
 * 中间件选项
 */
export interface MiddlewareOptions {
    /** 中间件名称 */
    name?: string;
    /** 执行优先级（数字越小越先执行）*/
    priority?: number;
    /** 是否仅在开发环境执行 */
    devOnly?: boolean;
    /** 中间件处理函数 */
    handler: (context: MiddlewareContext, next: () => Promise<void> | void) => Promise<void> | void;
}
/**
 * 守卫选项
 */
export interface GuardOptions {
    /** 守卫名称 */
    name?: string;
    /** 守卫类型 */
    type?: 'auth' | 'role' | 'permission' | 'custom';
    /** 访问被拒绝时的重定向路径 */
    redirectTo?: string;
    /** 错误信息 */
    errorMessage?: string;
    /** 守卫条件函数 */
    condition: (context: GuardContext) => boolean | Promise<boolean>;
}
/**
 * 认证选项
 */
export interface AuthOptions {
    /** 认证名称 */
    name?: string;
    /** 认证失败时的重定向路径 */
    redirectTo?: string;
    /** 错误信息 */
    errorMessage?: string;
    /** 自定义认证检查函数 */
    check?: (context: AuthContext) => boolean | Promise<boolean>;
    /** 所需的角色 */
    roles?: string[];
    /** 所需的权限 */
    permissions?: string[];
}
//# sourceMappingURL=types.d.ts.map