import * as i0 from '@angular/core';
import { InjectionToken, ElementRef } from '@angular/core';

/**
 * Valid HTML heading sizes for the title component.
 * Corresponds to h1 through h6 HTML elements.
 */
type HeaderSizes = 1 | 2 | 3 | 4 | 5 | 6;
/**
 * Injection token for providing a default header size to title components.
 *
 * **How it works:**
 * 1. A parent component (like dialog-header) provides this token with a value (e.g., 5)
 * 2. Child title components automatically receive that value through dependency injection
 * 3. The title uses this default only if no explicit `headerSize` input is provided
 *
 * **Example:**
 * ```typescript
 * // Parent provides the default
 * @Component({
 *   providers: [{ provide: DEFAULT_TITLE_SIZE, useValue: 5 }]
 * })
 * export class DialogHeaderComponent { }
 *
 * // Child receives the default automatically
 * <fd-dialog-header>
 *   <h1 fd-title>Title</h1>  <!-- Will be size 5 -->
 * </fd-dialog-header>
 * ```
 */
declare const DEFAULT_TITLE_SIZE: InjectionToken<HeaderSizes>;
/**
 * Abstract token for providing access to the title component's element reference.
 * Used for dependency injection when components need to access the title element.
 */
declare abstract class TitleToken {
    abstract elementRef: ElementRef;
}
/**
 * Title component for rendering semantic headings with Fundamental styles.
 *
 * Applied as an attribute directive to heading elements (h1-h6).
 * Automatically detects heading level from the tag name or can be explicitly set via `headerSize`.
 */
declare class TitleComponent extends TitleToken {
    /**
     * Explicit header size (1-6) for the title styling.
     * If not provided, uses the injected DEFAULT_TITLE_SIZE or automatically detected from the host element's tag name.
     * @default null
     */
    readonly headerSize: i0.InputSignal<HeaderSizes | null>;
    /**
     * Enables text wrapping. When `false`, text truncates with ellipsis.
     * @default false
     */
    readonly wrap: i0.InputSignal<boolean>;
    /**
     * Default header size provided by parent component via DI.
     * Will be `null` if no parent provides DEFAULT_TITLE_SIZE.
     * @hidden
     */
    private readonly _defaultHeaderSize;
    /**
     * Element reference to the host element.
     * @hidden
     */
    private readonly _elementRef;
    /**
     * Tracks the currently applied header size to avoid unnecessary DOM updates.
     * @hidden
     */
    private _appliedHeaderSize;
    /**
     * Returns the element reference for external access via TitleToken.
     */
    get elementRef(): ElementRef;
    /**
     * @hidden
     * Effect that reactively updates the header size class when headerSize input changes.
     * Runs on initialization and whenever the headerSize signal updates.
     */
    constructor();
    /**
     * Applies the appropriate header size class to the host element.
     * Priority: explicit headerSize > injected default > element tag name.
     * @hidden
     */
    private _setHeaderSize;
    static ɵfac: i0.ɵɵFactoryDeclaration<TitleComponent, never>;
    static ɵcmp: i0.ɵɵComponentDeclaration<TitleComponent, "[fd-title], [fdTitle]", ["fd-title"], { "headerSize": { "alias": "headerSize"; "required": false; "isSignal": true; }; "wrap": { "alias": "wrap"; "required": false; "isSignal": true; }; }, {}, never, ["*"], true, never>;
}

/**
 * @deprecated Use the standalone `TitleComponent` directly instead. Import `TitleComponent` in your component's imports array.
 * This module will be removed in a future version.
 */
declare class TitleModule {
    static ɵfac: i0.ɵɵFactoryDeclaration<TitleModule, never>;
    static ɵmod: i0.ɵɵNgModuleDeclaration<TitleModule, never, [typeof TitleComponent], [typeof TitleComponent]>;
    static ɵinj: i0.ɵɵInjectorDeclaration<TitleModule>;
}

export { DEFAULT_TITLE_SIZE, TitleComponent, TitleModule, TitleToken };
export type { HeaderSizes };
