import { LitElement } from 'lit';
type Constructor<T = object> = new (...args: any[]) => T;
type UnpackCustomEvent<T> = T extends CustomEvent<infer U> ? U : never;
/**
 * Map of custom events emitted by Brightspot UI components.
 * All events use CustomEvent and bubble through the DOM with composed: true.
 */
export interface CustomEventMap {
    'btu-element-connected': CustomEvent<unknown>;
    'btu-element-disconnected': CustomEvent<unknown>;
    'btu-element-error': CustomEvent<{
        error: Error;
    }>;
    'btu-avatar-ready': CustomEvent<unknown>;
    'btu-avatar-image-loaded': CustomEvent<{
        src: string;
    }>;
    'btu-avatar-image-error': CustomEvent<{
        src: string;
        error: Event;
    }>;
    'btu-avatar-group-ready': CustomEvent<unknown>;
    'btu-avatar-group-overflow': CustomEvent<{
        hidden: number;
    }>;
    'btu-badge-ready': CustomEvent<unknown>;
    'btu-copy-to-clipboard-ready': CustomEvent<unknown>;
    'btu-copy-to-clipboard-copied': CustomEvent<unknown>;
    'btu-icon-ready': CustomEvent<unknown>;
    'btu-linear-progress-ready': CustomEvent<unknown>;
    'btu-linear-progress-complete': CustomEvent<unknown>;
    'btu-circular-progress-ready': CustomEvent<unknown>;
    'btu-circular-progress-complete': CustomEvent<unknown>;
    'btu-popover-show': CustomEvent<unknown>;
    'btu-popover-hide': CustomEvent<unknown>;
    'btu-tooltip-show': CustomEvent<unknown>;
    'btu-tooltip-hide': CustomEvent<unknown>;
    'btu-widget-ready': CustomEvent<unknown>;
    'btu-widget-collapse-changed': CustomEvent<{
        collapsed: boolean;
    }>;
    'btu-widget-fullscreen-changed': CustomEvent<{
        fullscreen: boolean;
    }>;
    'btu-pagination-ready': CustomEvent<unknown>;
    'btu-pagination-change': CustomEvent<{
        page: number;
        pageSize: number;
    }>;
    'btu-pagination-page-size-change': CustomEvent<{
        page: number;
        pageSize: number;
    }>;
    'btu-icon-button-ready': CustomEvent<unknown>;
    'btu-icon-button-click': CustomEvent<{
        name: string | undefined;
    }>;
    'btu-dropdown-ready': CustomEvent<unknown>;
    'btu-dropdown-show': CustomEvent<unknown>;
    'btu-dropdown-hide': CustomEvent<unknown>;
    'btu-dropdown-menu-ready': CustomEvent<unknown>;
    'btu-dropdown-item-ready': CustomEvent<unknown>;
    'btu-dropdown-item-select': CustomEvent<{
        label: string;
        value: string;
        selected: boolean;
    }>;
    'btu-dropdown-item-favorite': CustomEvent<{
        label: string;
        favorited: boolean;
    }>;
    'btu-empty-state-ready': CustomEvent<unknown>;
    'btu-tabs-ready': CustomEvent<unknown>;
    'btu-tab-ready': CustomEvent<unknown>;
    'btu-tab-change': CustomEvent<{
        name: string;
    }>;
    'btu-tabs-show': CustomEvent<{
        name: string;
    }>;
    'btu-tabs-hide': CustomEvent<{
        name: string;
    }>;
    'btu-switch-ready': CustomEvent<unknown>;
    'btu-switch-change': CustomEvent<{
        checked: boolean;
    }>;
    'btu-switch-focus': CustomEvent<unknown>;
    'btu-checkbox-ready': CustomEvent<unknown>;
    'btu-checkbox-change': CustomEvent<{
        checked: boolean;
    }>;
    'btu-action-bar-ready': CustomEvent<unknown>;
    'btu-action-item-click': CustomEvent<{
        label: string;
    }>;
    'btu-button-group-ready': CustomEvent<unknown>;
    'btu-button-group-change': CustomEvent<{
        value: string;
    }>;
    'btu-upload-file-added': CustomEvent<{
        id: string;
        file: File;
    }>;
    'btu-upload-file-removed': CustomEvent<{
        id: string;
        file: File;
    }>;
    'btu-upload-file-retry': CustomEvent<{
        id: string;
        file: File;
    }>;
    'btu-upload-file-rejected': CustomEvent<{
        file: File;
        reason: 'type' | 'size' | 'count';
    }>;
    'btu-upload-file-completed': CustomEvent<{
        id: string;
        file: File;
    }>;
    'btu-upload-api-error': CustomEvent<{
        method: 'setFileProgress' | 'setFileStatus' | 'setFileSymbol' | 'removeFile';
        id: string;
        reason: 'unknown-id' | 'invalid-transition';
        message: string;
    }>;
    'btu-upload-ready': CustomEvent<unknown>;
}
interface CombinedEventMap extends HTMLElementEventMap, CustomEventMap {
}
/**
 * Interface for components using EventEmitterMixin.
 * Provides type-safe event emission and listener management.
 */
export declare class EventEmitterMixinInterface {
    emit: <K extends keyof CustomEventMap>(type: K, detail?: UnpackCustomEvent<CustomEventMap[K]>) => void;
    addEventListener<K extends keyof CombinedEventMap>(type: K, listener: (this: HTMLElement, ev: CombinedEventMap[K]) => void, options?: boolean | AddEventListenerOptions): void;
    removeEventListener<K extends keyof CombinedEventMap>(type: K, listener: (this: HTMLElement, ev: CombinedEventMap[K]) => void, options?: boolean | EventListenerOptions): void;
}
/**
 * Mixin that adds standardized event emission capabilities to LitElement components.
 *
 * Automatically emits lifecycle events when components connect/disconnect from the DOM.
 * Provides a type-safe `emit()` method for dispatching custom events with consistent
 * configuration (bubbles, composed, cancelable).
 *
 * @mixin
 *
 * @fires {CustomEvent} btu-element-connected - Fired when element connects to DOM
 * @fires {CustomEvent} btu-element-disconnected - Fired when element disconnects from DOM
 * @fires {CustomEvent<{error: Error}>} btu-element-error - Fired on connection error
 *
 * @example
 * ```typescript
 * import { EventEmitterMixin } from './EventEmitterMixin'
 *
 * class MyComponent extends EventEmitterMixin(LitElement) {
 *   handleClick() {
 *     this.emit('my-custom-event', { data: 'value' })
 *   }
 * }
 * ```
 */
export declare const EventEmitterMixin: <T extends Constructor<LitElement>>(superClass: T) => Constructor<EventEmitterMixinInterface> & T;
export {};
//# sourceMappingURL=EventEmitterMixin.d.ts.map