import * as i0 from '@angular/core';
import { OnDestroy, TemplateRef, Type, ElementRef, Injector } from '@angular/core';
import { TranslatableString } from '@siemens/element-translate-ng/translate';
import { OverlayRef } from '@angular/cdk/overlay';
import { positions } from '@siemens/element-ng/common';

declare class SiTooltipDirective implements OnDestroy {
    private static idCounter;
    /**
     * The tooltip text to be displayed
     *
     * @defaultValue ''
     */
    readonly siTooltip: i0.InputSignal<TemplateRef<any> | TranslatableString>;
    /**
     * The placement of the tooltip. One of 'top', 'start', end', 'bottom'
     *
     * @defaultValue 'auto'
     */
    readonly placement: i0.InputSignal<"auto" | "top" | "start" | "end" | "bottom">;
    /**
     * Allows the tooltip to be disabled
     *
     * @defaultValue false
     */
    readonly isDisabled: i0.InputSignalWithTransform<boolean, unknown>;
    /**
     * The context for the attached template
     */
    readonly tooltipContext: i0.InputSignal<unknown>;
    protected describedBy: string;
    private tooltipRef?;
    private showTimeout?;
    private tooltipService;
    private elementRef;
    private isBrowser;
    ngOnDestroy(): void;
    private clearShowTimeout;
    private showTooltip;
    protected focusIn(event: FocusEvent): void;
    protected show(): void;
    protected hide(): void;
    static ɵfac: i0.ɵɵFactoryDeclaration<SiTooltipDirective, never>;
    static ɵdir: i0.ɵɵDirectiveDeclaration<SiTooltipDirective, "[siTooltip]", never, { "siTooltip": { "alias": "siTooltip"; "required": false; "isSignal": true; }; "placement": { "alias": "placement"; "required": false; "isSignal": true; }; "isDisabled": { "alias": "isDisabled"; "required": false; "isSignal": true; }; "tooltipContext": { "alias": "tooltipContext"; "required": false; "isSignal": true; }; }, {}, never, never, true, never>;
}

declare class SiTooltipModule {
    static ɵfac: i0.ɵɵFactoryDeclaration<SiTooltipModule, never>;
    static ɵmod: i0.ɵɵNgModuleDeclaration<SiTooltipModule, never, [typeof SiTooltipDirective], [typeof SiTooltipDirective]>;
    static ɵinj: i0.ɵɵInjectorDeclaration<SiTooltipModule>;
}

/**
 * Copyright (c) Siemens 2016 - 2026
 * SPDX-License-Identifier: MIT
 */

type SiTooltipContent = TranslatableString | TemplateRef<any> | Type<any> | null | undefined;

/**
 * Copyright (c) Siemens 2016 - 2026
 * SPDX-License-Identifier: MIT
 */

/**
 * TooltipRef is attached to a specific element.
 * Use it to show or hide a tooltip for that element.
 *
 * @internal
 */
declare class TooltipRef {
    private overlayRef;
    private element;
    private injector?;
    constructor(overlayRef: OverlayRef, element: ElementRef, injector?: Injector | undefined);
    private subscription?;
    show(): void;
    hide(): void;
    destroy(): void;
}
/**
 * A service to create tooltips for specific elements.
 * Use this if the tooltip directive is not suitable.
 * Must not be used outside element-ng.
 *
 * @internal
 */
declare class SiTooltipService {
    private overlay;
    createTooltip(config: {
        describedBy: string;
        element: ElementRef;
        placement: keyof typeof positions;
        injector?: Injector;
        tooltip: () => SiTooltipContent;
        tooltipContext: () => unknown;
    }): TooltipRef;
    static ɵfac: i0.ɵɵFactoryDeclaration<SiTooltipService, never>;
    static ɵprov: i0.ɵɵInjectableDeclaration<SiTooltipService>;
}

export { SiTooltipDirective, SiTooltipModule, SiTooltipService, TooltipRef };
