import * as i0 from '@angular/core';
import { OnDestroy, AfterViewInit, QueryList, OnInit, Signal, EventEmitter } from '@angular/core';
import { UserState } from '@eui/core';
import { EuiDropdownComponent } from '@eui/components/eui-dropdown';
import { BehaviorSubject } from 'rxjs';
import * as i1 from '@eui/components/shared';
import { BaseStatesDirective } from '@eui/components/shared';
import { FocusableOption } from '@angular/cdk/a11y';

/**
 * @description
 * Individual menu item component for user profile menus. Implements FocusableOption
 * for keyboard navigation support. Used within eui-user-profile-menu to create
 * actionable menu entries.
 *
 * @usageNotes
 * ### Basic Usage
 * ```html
 * <eui-user-profile-menu>
 *   <eui-user-profile-menu-item (click)="viewProfile()">
 *     <eui-icon-svg icon="eui-user" size="s" />
 *     My Profile
 *   </eui-user-profile-menu-item>
 *
 *   <eui-user-profile-menu-item (click)="changePassword()">
 *     <eui-icon-svg icon="eui-lock" size="s" />
 *     Change Password
 *   </eui-user-profile-menu-item>
 *
 *   <eui-user-profile-menu-item (click)="logout()">
 *     <eui-icon-svg icon="eui-logout" size="s" />
 *     Logout
 *   </eui-user-profile-menu-item>
 * </eui-user-profile-menu>
 * ```
 *
 * ### Accessibility
 * - Implements ARIA menuitem role
 * - Keyboard focusable with proper tabindex management
 * - Supports focus() method for programmatic focus
 * - Works with parent menu's keyboard navigation
 *
 * ### Notes
 * - Must be used within eui-user-profile-menu
 * - Supports any content (text, icons, badges)
 * - Click events handled through standard Angular event binding
 * - Focus managed by parent menu's FocusKeyManager
 */
declare class EuiUserProfileMenuItemComponent implements FocusableOption {
    class: string;
    tabindex: string;
    role: string;
    private element;
    focus(): void;
    static ɵfac: i0.ɵɵFactoryDeclaration<EuiUserProfileMenuItemComponent, never>;
    static ɵcmp: i0.ɵɵComponentDeclaration<EuiUserProfileMenuItemComponent, "eui-user-profile-menu-item", never, {}, {}, never, ["*"], true, never>;
}

/**
 * @description
 * Container component for user profile menu items. Provides keyboard navigation
 * and focus management for menu items within a user profile dropdown.
 * Uses CDK FocusKeyManager for accessible keyboard interaction.
 *
 * @usageNotes
 * ### Basic Usage
 * ```html
 * <eui-user-profile [hasMenu]="true">
 *   <eui-user-profile-menu>
 *     <eui-user-profile-menu-item (click)="viewProfile()">
 *       My Profile
 *     </eui-user-profile-menu-item>
 *     <eui-user-profile-menu-item (click)="settings()">
 *       Settings
 *     </eui-user-profile-menu-item>
 *     <eui-user-profile-menu-item (click)="logout()">
 *       Logout
 *     </eui-user-profile-menu-item>
 *   </eui-user-profile-menu>
 * </eui-user-profile>
 * ```
 *
 * ### Accessibility
 * - Implements ARIA menu role for proper semantics
 * - Keyboard navigation with arrow keys (up/down)
 * - Focus wraps from last to first item
 * - Automatically focuses first item when menu opens
 * - Integrates with CDK FocusKeyManager for standard behavior
 *
 * ### Notes
 * - Must be used within eui-user-profile component
 * - Automatically manages focus state of child menu items
 * - Keyboard navigation activates on dropdown open
 * - Use eui-user-profile-menu-item for menu entries
 */
declare class EuiUserProfileMenuComponent implements OnDestroy, AfterViewInit {
    class: string;
    role: string;
    items: QueryList<EuiUserProfileMenuItemComponent>;
    parent: EuiUserProfileComponent;
    private focusKeyManager;
    private destroy$;
    onKeydown(event: any): void;
    ngAfterViewInit(): void;
    ngOnDestroy(): void;
    subscribeToParent(): void;
    static ɵfac: i0.ɵɵFactoryDeclaration<EuiUserProfileMenuComponent, never>;
    static ɵcmp: i0.ɵɵComponentDeclaration<EuiUserProfileMenuComponent, "eui-user-profile-menu", never, {}, {}, ["items"], ["*"], true, never>;
}

/**
 * Represents an extended user profile that includes impersonation capabilities
 * and organizational information.
 * @extends {UserState}
 *
 * When using this interface with UserService, specify it as the generic type parameter:
 * Example: private userService: UserService<UserProfile>
 */
interface UserProfile extends UserState {
    /** The profile of another user being impersonated, if applicable */
    impersonatingUser?: UserProfile;
    /** The user's function or role within the system */
    function?: string;
    /** The organization details associated with the user */
    organisation?: {
        /** The unique code identifying the organization */
        code: string;
    };
}
/**
 * @description
 * User profile component that displays user information with avatar, name, and optional dropdown menu.
 * Integrates with UserService to display current user state and supports impersonation indicators.
 * Provides customizable layouts for header, toolbar, or standalone usage.
 * Supports avatar display with initials, status indicators, and optional menu with navigation items.
 *
 * @usageNotes
 * ### Basic Usage
 * ```html
 * <!-- Simple user profile -->
 * <eui-user-profile
 *   [hasMenu]="true"
 *   [isShowAvatarInitials]="true">
 *   <eui-user-profile-menu>
 *     <eui-user-profile-menu-item (click)="viewProfile()">
 *       Profile
 *     </eui-user-profile-menu-item>
 *     <eui-user-profile-menu-item (click)="logout()">
 *       Logout
 *     </eui-user-profile-menu-item>
 *   </eui-user-profile-menu>
 * </eui-user-profile>
 *
 * <!-- Header user profile -->
 * <eui-user-profile
 *   [isHeaderUserProfile]="true"
 *   [avatarUrl]="user.avatarUrl"
 *   [subInfos]="user.email" />
 * ```
 *
 * ### Accessibility
 * - Avatar has appropriate alt text with user name
 * - Dropdown menu is keyboard accessible
 * - Status indicators have aria-label describing state
 * - Focus management for menu navigation
 *
 * ### Notes
 * - Automatically fetches user data from UserService
 * - Supports impersonation mode with visual indicator
 * - Avatar initials generated from user name when no image provided
 * - Status variants: success, secondary, danger
 * - Reverse layout option for right-to-left designs
 */ declare class EuiUserProfileComponent implements OnInit, OnDestroy, AfterViewInit {
    get cssClasses(): string;
    userState: Signal<UserProfile>;
    avatarInitials: Signal<string>;
    welcomeLabel: string;
    impersonateLabel: string;
    avatarUrl: string;
    subInfos: string;
    statusVariant: string;
    hasMenu: boolean;
    hasWelcomeLabel: boolean;
    isShowAvatarInitials: boolean;
    hasTabNavigation: boolean;
    isReverse: boolean;
    hasToggle: boolean;
    isHeaderUserProfile: boolean;
    isToolbarUserProfile: boolean;
    isShowUserInfos: boolean;
    isMobileOnly: boolean;
    euiStatusSecondary: boolean;
    euiStatusSuccess: boolean;
    euiStatusDanger: boolean;
    dropContentWidth: string;
    /**
     * If true, the name will be displayed in reverse order (first name, first)
     */
    reverseNameOrder: boolean;
    dropdown: EuiDropdownComponent;
    hasMenuContent: QueryList<EuiUserProfileMenuComponent>;
    isDropdownOpen: boolean;
    baseStatesDirective: BaseStatesDirective;
    $isDropdownOpen: BehaviorSubject<boolean>;
    private unsubscribeSubject$;
    private elRef;
    private cd;
    private userService;
    ngOnInit(): void;
    ngAfterViewInit(): void;
    ngOnDestroy(): void;
    closeDropdown(): void;
    onDropdownExpand(isOpen: boolean): void;
    onOpenChange(open: boolean): void;
    static ɵfac: i0.ɵɵFactoryDeclaration<EuiUserProfileComponent, never>;
    static ɵcmp: i0.ɵɵComponentDeclaration<EuiUserProfileComponent, "eui-user-profile", never, { "welcomeLabel": { "alias": "welcomeLabel"; "required": false; }; "impersonateLabel": { "alias": "impersonateLabel"; "required": false; }; "avatarUrl": { "alias": "avatarUrl"; "required": false; }; "subInfos": { "alias": "subInfos"; "required": false; }; "statusVariant": { "alias": "statusVariant"; "required": false; }; "hasMenu": { "alias": "hasMenu"; "required": false; }; "hasWelcomeLabel": { "alias": "hasWelcomeLabel"; "required": false; }; "isShowAvatarInitials": { "alias": "isShowAvatarInitials"; "required": false; }; "hasTabNavigation": { "alias": "hasTabNavigation"; "required": false; }; "isReverse": { "alias": "isReverse"; "required": false; }; "hasToggle": { "alias": "hasToggle"; "required": false; }; "isHeaderUserProfile": { "alias": "isHeaderUserProfile"; "required": false; }; "isToolbarUserProfile": { "alias": "isToolbarUserProfile"; "required": false; }; "isShowUserInfos": { "alias": "isShowUserInfos"; "required": false; }; "isMobileOnly": { "alias": "isMobileOnly"; "required": false; }; "euiStatusSecondary": { "alias": "euiStatusSecondary"; "required": false; }; "euiStatusSuccess": { "alias": "euiStatusSuccess"; "required": false; }; "euiStatusDanger": { "alias": "euiStatusDanger"; "required": false; }; "dropContentWidth": { "alias": "dropContentWidth"; "required": false; }; "reverseNameOrder": { "alias": "reverseNameOrder"; "required": false; }; }, {}, ["hasMenuContent"], ["*"], true, [{ directive: typeof i1.BaseStatesDirective; inputs: { "euiSizeS": "euiSizeS"; "euiSecondary": "euiSecondary"; "euiPrimary": "euiPrimary"; }; outputs: {}; }]>;
    static ngAcceptInputType_hasMenu: unknown;
    static ngAcceptInputType_hasWelcomeLabel: unknown;
    static ngAcceptInputType_isShowAvatarInitials: unknown;
    static ngAcceptInputType_hasTabNavigation: unknown;
    static ngAcceptInputType_isReverse: unknown;
    static ngAcceptInputType_hasToggle: unknown;
    static ngAcceptInputType_isHeaderUserProfile: unknown;
    static ngAcceptInputType_isToolbarUserProfile: unknown;
    static ngAcceptInputType_isShowUserInfos: unknown;
    static ngAcceptInputType_isMobileOnly: unknown;
    static ngAcceptInputType_euiStatusSecondary: unknown;
    static ngAcceptInputType_euiStatusSuccess: unknown;
    static ngAcceptInputType_euiStatusDanger: unknown;
}

/**
 * @description
 * User profile card component that displays detailed user information including avatar, name,
 * function, and organization. Designed for use within dropdown menus or profile panels.
 * Automatically fetches user data from UserService and supports impersonation display.
 *
 * @usageNotes
 * ### Basic Usage
 * ```html
 * <!-- Simple profile card -->
 * <eui-user-profile-card
 *   [isShowAvatarInitials]="true"
 *   (showProfileInfo)="onShowProfile()"
 *   (closeProfileMenu)="onClose()" />
 *
 * <!-- With custom avatar -->
 * <eui-user-profile-card
 *   [avatarUrl]="user.avatarUrl"
 *   [reverseNameOrder]="true"
 *   showDetailsLabel="View Details" />
 * ```
 *
 * ```typescript
 * onShowProfile(): void {
 *   this.router.navigate(['/profile']);
 * }
 * ```
 *
 * ### Accessibility
 * - Avatar has semantic meaning with user initials or image
 * - Profile details link is keyboard accessible with tabindex
 * - User information structured with proper heading hierarchy
 * - Impersonation status clearly indicated for screen readers
 *
 * ### Notes
 * - Automatically displays user function and organization if available
 * - Impersonation mode shows both impersonated and actual user
 * - Avatar initials computed from user name (configurable order)
 * - Integrates seamlessly with eui-user-profile dropdown
 */
declare class EuiUserProfileCardComponent implements OnInit {
    get cssClasses(): string;
    avatarInitials: Signal<string>;
    /**
     * Holds the full name of the user and the impersonated user
     */
    fullName: Signal<{
        user: string;
        impersonated: string;
    }>;
    userState: Signal<UserProfile>;
    /**
     * If true, the user is online
     * @deprecated This property is not used anymore
     */
    isOnline: boolean;
    impersonateLabel: string;
    showDetailsLabel: string;
    avatarUrl: string;
    isShowAvatarInitials: boolean;
    /**
     * If true, the name will be displayed in reverse order (first name, first)
     */
    reverseNameOrder: boolean;
    showProfileInfo: EventEmitter<void>;
    closeProfileMenu: EventEmitter<void>;
    ngOnInit(): void;
    onShowInfoClick(): void;
    onClose(): void;
    static ɵfac: i0.ɵɵFactoryDeclaration<EuiUserProfileCardComponent, never>;
    static ɵcmp: i0.ɵɵComponentDeclaration<EuiUserProfileCardComponent, "eui-user-profile-card", never, { "impersonateLabel": { "alias": "impersonateLabel"; "required": false; }; "showDetailsLabel": { "alias": "showDetailsLabel"; "required": false; }; "avatarUrl": { "alias": "avatarUrl"; "required": false; }; "isShowAvatarInitials": { "alias": "isShowAvatarInitials"; "required": false; }; "reverseNameOrder": { "alias": "reverseNameOrder"; "required": false; }; }, { "showProfileInfo": "showProfileInfo"; "closeProfileMenu": "closeProfileMenu"; }, never, never, true, never>;
    static ngAcceptInputType_isShowAvatarInitials: unknown;
}

declare const EUI_USER_PROFILE: readonly [typeof EuiUserProfileComponent, typeof EuiUserProfileMenuComponent, typeof EuiUserProfileMenuItemComponent, typeof EuiUserProfileCardComponent];

export { EUI_USER_PROFILE, EuiUserProfileCardComponent, EuiUserProfileComponent, EuiUserProfileMenuComponent, EuiUserProfileMenuItemComponent };
export type { UserProfile };
//# sourceMappingURL=eui-components-eui-user-profile.d.ts.map
