import { AfterViewInit, OnDestroy, ChangeDetectorRef } from '@angular/core';
import { BaseResourceComponent, NavigationService, RecentAccessService, RecentAccessItem } from '@memberjunction/ng-shared';
import { ResourceData, MJUserFavoriteEntity, MJUserNotificationEntity } from '@memberjunction/core-entities';
import { ApplicationManager, BaseApplication } from '@memberjunction/ng-base-application';
import { UserAppConfigComponent } from '@memberjunction/ng-explorer-settings';
import * as i0 from "@angular/core";
/**
 * Cached app data with pre-computed values for optimal rendering performance
 */
interface AppDisplayData {
    app: BaseApplication;
    color: string;
    icon: string;
    navItemsCount: number;
    navItemsPreview: {
        Label: string;
        Icon: string;
    }[];
    showMoreItems: boolean;
    moreItemsCount: number;
}
/**
 * Home Dashboard - Personalized home screen showing all available applications
 * with quick access navigation and configuration options.
 *
 * Uses OnPush change detection and cached computed values for optimal performance.
 * Registered as a BaseResourceComponent so it can be used as a Custom resource type
 * in nav items, allowing users to return to the Home dashboard after viewing orphan resources.
 */
export declare class HomeDashboardComponent extends BaseResourceComponent implements AfterViewInit, OnDestroy {
    private appManager;
    private navigationService;
    private recentAccessService;
    private cdr;
    private destroy$;
    private metadata;
    appConfigDialog: UserAppConfigComponent;
    isLoading: boolean;
    apps: BaseApplication[];
    appsDisplayData: AppDisplayData[];
    currentUser: {
        Name: string;
        Email: string;
    } | null;
    showConfigDialog: boolean;
    favorites: MJUserFavoriteEntity[];
    favoritesLoading: boolean;
    recentItems: RecentAccessItem[];
    recentsLoading: boolean;
    unreadNotifications: MJUserNotificationEntity[];
    notificationsLoading: boolean;
    sidebarOpen: boolean;
    private favoriteIconCache;
    private resourceIconCache;
    favoriteDisplayNames: Map<string, string>;
    /**
     * Check if sidebar has any content to show
     */
    get hasSidebarContent(): boolean;
    /**
     * Toggle sidebar visibility
     */
    toggleSidebar(): void;
    /**
     * Check if current device is mobile (width <= 768px)
     */
    private isMobileDevice;
    constructor(appManager: ApplicationManager, navigationService: NavigationService, recentAccessService: RecentAccessService, cdr: ChangeDetectorRef);
    GetResourceDisplayName(data: ResourceData): Promise<string>;
    GetResourceIconClass(data: ResourceData): Promise<string>;
    ngAfterViewInit(): Promise<void>;
    ngOnDestroy(): void;
    /**
     * Get a greeting based on time of day
     */
    get greeting(): string;
    /**
     * Get formatted date string
     */
    get formattedDate(): string;
    /**
     * Navigate to an application
     */
    onAppClick(app: BaseApplication): Promise<void>;
    /**
     * Open app configuration dialog
     */
    openConfigDialog(): void;
    /**
     * Handle when config is saved
     */
    onConfigSaved(): void;
    /**
     * Pre-compute display data for all apps to avoid repeated calculations during change detection
     */
    private computeAppsDisplayData;
    /**
     * Track function for apps loop
     */
    trackByApp(_index: number, item: AppDisplayData): string;
    /**
     * Track function for nav items preview
     */
    trackByNavItem(_index: number, item: {
        Label: string;
        Icon: string;
    }): string;
    /**
     * Load user favorites from UserInfoEngine (cached) and resolve record display names
     */
    private loadFavorites;
    /**
     * Batch-resolve record display names for favorites using GetEntityRecordNames()
     */
    private resolveFavoriteNames;
    /**
     * Build a CompositeKey for a record. RecordID may be stored as either:
     * - Concatenated format: "FieldName|Value" or "Field1|Val1||Field2|Val2"
     * - Plain value: just the raw value (e.g. a GUID)
     */
    private buildCompositeKeyForRecord;
    /**
     * Get the display name for a favorite (resolved name or entity name fallback)
     */
    getFavoriteDisplayName(favorite: MJUserFavoriteEntity): string;
    /**
     * Load recent items via the RecentAccessService
     */
    private loadRecents;
    /**
     * Navigate to a favorite item using NavigationService
     */
    onFavoriteClick(favorite: MJUserFavoriteEntity): void;
    /**
     * Navigate to a recent item using NavigationService
     */
    onRecentClick(item: RecentAccessItem): void;
    /**
     * Navigate to a notification using NavigationService
     */
    onNotificationClick(notification: MJUserNotificationEntity): void;
    /**
     * Get icon for an entity by name, using entity metadata Icon field (cached)
     */
    getEntityIconByName(entityName: string): string;
    /**
     * Resolve an entity's Icon field to a full Font Awesome class string
     */
    private resolveEntityIcon;
    /**
     * Format a date for display (pure function, safe to call in template)
     */
    formatDate(date: Date): string;
    /**
     * Track function for favorites
     */
    trackByFavorite(_index: number, item: MJUserFavoriteEntity): string;
    /**
     * Remove duplicate recent items (same entity + recordId). Keeps the first occurrence.
     */
    private deduplicateRecents;
    /**
     * Track function for recent items
     */
    trackByRecent(_index: number, item: RecentAccessItem): string;
    /**
     * Track function for notifications
     */
    trackByNotification(_index: number, item: MJUserNotificationEntity): string;
    static ɵfac: i0.ɵɵFactoryDeclaration<HomeDashboardComponent, never>;
    static ɵcmp: i0.ɵɵComponentDeclaration<HomeDashboardComponent, "mj-home-dashboard", never, {}, {}, never, never, false, never>;
}
export {};
//# sourceMappingURL=home-dashboard.component.d.ts.map