import type { Model, Attributes } from '../model/index';
export type ComponentRef = Model.ElementRef;
export type CreateComponentFunction = (element: HTMLElement) => ComponentRef;
export type ComponentRegistration = () => void;
export interface SlotConfig {
    required?: boolean;
    allowedElements?: string[];
    deprecated?: string;
}
export type SlotConfiguration = Record<string, SlotConfig>;
export interface ThemeProps {
    isThemeLight?: boolean;
    isThemeDark?: boolean;
    isThemeMaryland?: boolean;
}
export interface VisualStateProps {
    isVisualOpen?: boolean;
    isShowIcon?: boolean;
    isTransparent?: boolean;
    isBordered?: boolean;
}
export interface LayoutProps {
    isFixed?: boolean;
    isHidden?: boolean;
    isAlignmentRight?: boolean;
    isFullImage?: boolean;
}
export interface BaseContentProps {
    headline?: HTMLElement | null;
    text?: HTMLElement | null;
    actions?: HTMLElement | null;
}
export interface ExtendedContentProps extends BaseContentProps {
    eyebrow?: HTMLElement | null;
    image?: HTMLElement | null;
    content?: HTMLElement | null;
}
export interface ComponentConfiguration {
    tagName: string;
    slots?: SlotConfiguration;
    createComponent: CreateComponentFunction;
    attributes?: Attributes.AttributeHandlerTypes.Config | Attributes.AttributeHandlerTypes.Config[];
    beforeConnect?: (ref: ComponentRef, shadow: ShadowRoot) => void;
    afterConnect?: (ref: ComponentRef, shadow?: ShadowRoot) => void;
    onReady?: (ref: ComponentRef) => void;
}
export type AttributeElementRef = Parameters<Parameters<typeof Attributes.handler.observe.resize>[0]['callback']>[0];
export type ComponentFactory<TProps, TReturn = ComponentRef> = (props: TProps) => TReturn;
export interface ComponentEvents {
    callback?: (shadow?: ShadowRoot) => void;
    close?: (options?: {
        hasAnimation?: boolean;
    }) => void;
    hide?: () => void;
    load?: () => void;
    loadAnimation?: () => void;
    open?: (options?: {
        hasAnimation?: boolean;
    }) => void;
    resize?: () => void;
    setPosition?: (options?: {
        value?: number | null;
    }) => void;
    show?: () => void;
    size?: () => void;
}
export interface TypedComponentRef extends Omit<ComponentRef, 'events'> {
    events?: ComponentEvents & Record<string, Function>;
}
export interface ComponentEventDetail {
    tagName: string;
    element: HTMLElement;
    timestamp: number;
}
export interface ComponentReadyDetail extends ComponentEventDetail {
    shadowRoot: ShadowRoot;
    componentRef: ComponentRef;
}
export interface ComponentErrorDetail extends ComponentEventDetail {
    type: 'validation' | 'initialization' | 'runtime';
    message: string;
    details?: unknown;
}
export interface ComponentResizeDetail extends ComponentEventDetail {
    previousSize?: {
        width: number;
        height: number;
    };
    currentSize: {
        width: number;
        height: number;
    };
    source: 'attribute' | 'window' | 'manual';
}
declare global {
    interface HTMLElementEventMap {
        'component:ready': CustomEvent<ComponentReadyDetail>;
        'component:error': CustomEvent<ComponentErrorDetail>;
        'component:resize': CustomEvent<ComponentResizeDetail>;
    }
}
//# sourceMappingURL=_types.d.ts.map