export interface SubModule {
    sub_module_name: string;
}
export interface ModuleAccess {
    module_name: string;
    sub_modules?: SubModule[];
}
export interface UserData {
    module_access?: ModuleAccess[];
}
export interface MenuItem {
    bacSubModuleName?: string | string[];
    submenu?: MenuItem[];
    [key: string]: any;
}
export interface Permission {
    [key: string]: any;
}
export declare class StorageUtils {
    /**
     * Retrieves and parses user data from localStorage
     * @returns Parsed user data or null if not found
     */
    static getUserData(): UserData | null;
    /**
     * Retrieves and parses role permissions from localStorage
     * @returns Parsed permissions object
     */
    static getRolePermissions(): Permission;
}
export declare class ModuleAccessService {
    /**
     * Filters modules by allowed module names and adds dashboard sub-module
     * @param moduleNames - Array of allowed module names
     * @param userData - User data containing module access
     * @returns Filtered modules with dashboard added
     */
    static getAccessibleSubModules(moduleNames: string[], userData: UserData | null, permissions: Permission): ModuleAccess[];
    /**
     * Extracts unique sub-module names from modules
     * @param modules - Array of module access objects
     * @returns Set of unique sub-module names
     */
    static extractSubModuleNames(modules: ModuleAccess[]): Set<string>;
    /**
     * Matches sub-module names with permission keys
     * @param subModuleNames - Set of sub-module names
     * @param permissions - Permission object
     * @returns Set of matching sub-module names
     */
    static getMatchingSubModules(subModuleNames: Set<string>, permissions: Permission): Set<string>;
}
export declare class MenuFilterService {
    private static checkSubModuleAccess;
    private static filterHrmsSubmenu;
    /**
     * Recursively filters menu items based on accessible sub-modules
     * @param menu - Array of menu items
     * @param accessibleSubModules - Set of accessible sub-module names
     * @returns Filtered menu array
     */
    static filterMenuByAccess(menu: MenuItem[], accessibleSubModules: Set<string>): MenuItem[];
}
export declare class MenuFilter {
    /**
     * Filters menu based on user permissions and module access
     * @param menu - Menu items to filter
     * @param allowedModules - Array of allowed module names
     * @returns Filtered menu items
     */
    static filterByModuleAccess(menu: MenuItem[], allowedModules: string[]): MenuItem[];
}
