import * as i0 from '@angular/core';
import { AfterViewInit, OnChanges, Type, OnInit, ChangeDetectorRef, ElementRef, DestroyRef, EventEmitter, ViewContainerRef, Renderer2, SimpleChanges, TemplateRef } from '@angular/core';
import { NzPresetColor } from 'ng-zorro-antd/core/color';
import { NzTSType, NgStyleInterface, NzSafeAny, NgClassInterface } from 'ng-zorro-antd/core/types';
import { Directionality, Direction } from '@angular/cdk/bidi';
import { CdkConnectedOverlay, ConnectionPositionPair, ConnectedOverlayPositionChange } from '@angular/cdk/overlay';
import { Subject } from 'rxjs';
import { PopoverConfig, PopConfirmConfig, NzConfigService } from 'ng-zorro-antd/core/config';
import { NzNoAnimationDirective } from 'ng-zorro-antd/core/no-animation';
import { POSITION_TYPE } from 'ng-zorro-antd/core/overlay';

/**
 * Use of this source code is governed by an MIT-style license that can be
 * found in the LICENSE file at https://github.com/NG-ZORRO/ng-zorro-antd/blob/master/LICENSE
 */

interface PropertyMapping {
    [key: string]: [string, () => unknown];
}
type NzTooltipTrigger = 'click' | 'focus' | 'hover' | null;
declare abstract class NzTooltipBaseDirective implements AfterViewInit, OnChanges {
    protected componentType: Type<NzTooltipBaseComponent>;
    config?: Required<PopoverConfig | PopConfirmConfig>;
    abstract arrowPointAtCenter?: boolean;
    abstract directiveTitle?: NzTSType | null;
    abstract directiveContent?: NzTSType | null;
    abstract title?: NzTSType | null;
    abstract content?: NzTSType | null;
    abstract trigger?: NzTooltipTrigger;
    abstract placement?: string | string[];
    abstract origin?: ElementRef<HTMLElement>;
    abstract visible?: boolean;
    abstract mouseEnterDelay?: number;
    abstract mouseLeaveDelay?: number;
    abstract overlayClassName?: string;
    abstract overlayStyle?: NgStyleInterface;
    abstract overlayClickable?: boolean;
    cdkConnectedOverlayPush?: boolean;
    visibleChange: EventEmitter<boolean>;
    /**
     * This true title that would be used in other parts on this component.
     */
    protected get _title(): NzTSType | null;
    protected get _content(): NzTSType | null;
    protected get _trigger(): NzTooltipTrigger;
    protected get _placement(): string[];
    protected get _visible(): boolean;
    protected get _mouseEnterDelay(): number;
    protected get _mouseLeaveDelay(): number;
    protected get _overlayClassName(): string | null;
    protected get _overlayStyle(): NgStyleInterface | null;
    protected get _overlayClickable(): boolean;
    private internalVisible;
    protected getProxyPropertyMap(): PropertyMapping;
    component?: NzTooltipBaseComponent;
    protected readonly destroy$: Subject<void>;
    protected readonly triggerDisposables: VoidFunction[];
    private delayTimer?;
    elementRef: ElementRef<any>;
    protected hostView: ViewContainerRef;
    protected renderer: Renderer2;
    protected noAnimation: NzNoAnimationDirective | null;
    protected nzConfigService: NzConfigService;
    protected destroyRef: DestroyRef;
    protected platformId: Object;
    constructor(componentType: Type<NzTooltipBaseComponent>);
    ngAfterViewInit(): void;
    ngOnChanges(changes: SimpleChanges): void;
    show(): void;
    hide(): void;
    /**
     * Force the component to update its position.
     */
    updatePosition(): void;
    /**
     * Create a dynamic tooltip component. This method can be overridden.
     */
    protected createComponent(): void;
    protected registerTriggers(): void;
    private updatePropertiesByChanges;
    private updatePropertiesByKeys;
    private initProperties;
    private updateComponentValue;
    private delayEnterLeave;
    private removeTriggerListeners;
    private clearTogglingTimer;
    static ɵfac: i0.ɵɵFactoryDeclaration<NzTooltipBaseDirective, never>;
    static ɵdir: i0.ɵɵDirectiveDeclaration<NzTooltipBaseDirective, never, never, {}, {}, never, never, true, never>;
}
declare abstract class NzTooltipBaseComponent implements OnInit {
    overlay: CdkConnectedOverlay;
    noAnimation: NzNoAnimationDirective | null;
    protected directionality: Directionality;
    protected cdr: ChangeDetectorRef;
    protected elementRef: ElementRef<any>;
    protected destroyRef: DestroyRef;
    nzTitle: NzTSType | null;
    nzContent: NzTSType | null;
    nzArrowPointAtCenter: boolean;
    nzOverlayClassName: string;
    nzOverlayStyle: NgStyleInterface;
    nzOverlayClickable: boolean;
    nzBackdrop: boolean;
    nzMouseEnterDelay?: number;
    nzMouseLeaveDelay?: number;
    cdkConnectedOverlayPush?: boolean;
    nzVisibleChange: Subject<boolean>;
    set nzVisible(value: boolean);
    get nzVisible(): boolean;
    _visible: boolean;
    set nzTrigger(value: NzTooltipTrigger);
    get nzTrigger(): NzTooltipTrigger;
    protected _trigger: NzTooltipTrigger;
    set nzPlacement(value: POSITION_TYPE[]);
    preferredPlacement: string;
    origin: ElementRef<NzSafeAny>;
    dir: Direction;
    _classMap: NgClassInterface;
    _prefix: string;
    _positions: ConnectionPositionPair[];
    constructor();
    ngOnInit(): void;
    show(): void;
    hide(): void;
    updateByDirective(): void;
    /**
     * Force the component to update its position.
     */
    updatePosition(): void;
    onPositionChange(position: ConnectedOverlayPositionChange): void;
    setOverlayOrigin(origin: ElementRef<HTMLElement>): void;
    onClickOutside(event: MouseEvent): void;
    /**
     * Hide the component while the content is empty.
     */
    private updateVisibilityByTitle;
    protected updateStyles(): void;
    protected transformClassListToMap(klass: string): Record<string, boolean>;
    /**
     * Empty component cannot be opened.
     */
    protected abstract isEmpty(): boolean;
    static ɵfac: i0.ɵɵFactoryDeclaration<NzTooltipBaseComponent, never>;
    static ɵdir: i0.ɵɵDirectiveDeclaration<NzTooltipBaseComponent, never, never, {}, {}, never, never, true, never>;
}
declare function isTooltipEmpty(value: string | TemplateRef<void> | null): boolean;

declare class NzTooltipDirective extends NzTooltipBaseDirective {
    title?: NzTSType | null;
    titleContext?: object | null;
    directiveTitle?: NzTSType | null;
    trigger?: NzTooltipTrigger;
    placement?: string | string[];
    origin?: ElementRef<HTMLElement>;
    visible?: boolean;
    mouseEnterDelay?: number;
    mouseLeaveDelay?: number;
    overlayClassName?: string;
    overlayStyle?: NgStyleInterface;
    arrowPointAtCenter?: boolean;
    cdkConnectedOverlayPush?: boolean;
    nzTooltipColor?: string;
    directiveContent?: NzTSType | null;
    content?: NzTSType | null;
    overlayClickable?: boolean;
    readonly visibleChange: EventEmitter<boolean>;
    constructor();
    protected getProxyPropertyMap(): PropertyMapping;
    static ɵfac: i0.ɵɵFactoryDeclaration<NzTooltipDirective, never>;
    static ɵdir: i0.ɵɵDirectiveDeclaration<NzTooltipDirective, "[nz-tooltip]", ["nzTooltip"], { "title": { "alias": "nzTooltipTitle"; "required": false; }; "titleContext": { "alias": "nzTooltipTitleContext"; "required": false; }; "directiveTitle": { "alias": "nz-tooltip"; "required": false; }; "trigger": { "alias": "nzTooltipTrigger"; "required": false; }; "placement": { "alias": "nzTooltipPlacement"; "required": false; }; "origin": { "alias": "nzTooltipOrigin"; "required": false; }; "visible": { "alias": "nzTooltipVisible"; "required": false; }; "mouseEnterDelay": { "alias": "nzTooltipMouseEnterDelay"; "required": false; }; "mouseLeaveDelay": { "alias": "nzTooltipMouseLeaveDelay"; "required": false; }; "overlayClassName": { "alias": "nzTooltipOverlayClassName"; "required": false; }; "overlayStyle": { "alias": "nzTooltipOverlayStyle"; "required": false; }; "arrowPointAtCenter": { "alias": "nzTooltipArrowPointAtCenter"; "required": false; }; "cdkConnectedOverlayPush": { "alias": "cdkConnectedOverlayPush"; "required": false; }; "nzTooltipColor": { "alias": "nzTooltipColor"; "required": false; }; }, { "visibleChange": "nzTooltipVisibleChange"; }, never, never, true, never>;
    static ngAcceptInputType_arrowPointAtCenter: unknown;
    static ngAcceptInputType_cdkConnectedOverlayPush: unknown;
}
declare class NzTooltipComponent extends NzTooltipBaseComponent {
    nzTitle: NzTSType | null;
    nzTitleContext: object | null;
    nzColor?: string | NzPresetColor;
    _contentStyleMap: NgStyleInterface;
    protected isEmpty(): boolean;
    protected updateStyles(): void;
    static ɵfac: i0.ɵɵFactoryDeclaration<NzTooltipComponent, never>;
    static ɵcmp: i0.ɵɵComponentDeclaration<NzTooltipComponent, "nz-tooltip", ["nzTooltipComponent"], {}, {}, never, never, true, never>;
}
/**
 * @deprecated Use {@link NzTooltipComponent} instead.
 * This will be removed in v21.0.0.
 */
declare const NzToolTipComponent: typeof NzTooltipComponent;

declare class NzTooltipModule {
    static ɵfac: i0.ɵɵFactoryDeclaration<NzTooltipModule, never>;
    static ɵmod: i0.ɵɵNgModuleDeclaration<NzTooltipModule, never, [typeof NzTooltipComponent, typeof NzTooltipDirective], [typeof NzTooltipComponent, typeof NzTooltipDirective]>;
    static ɵinj: i0.ɵɵInjectorDeclaration<NzTooltipModule>;
}
/**
 * @deprecated Use {@link NzTooltipModule} instead.
 * This will be removed in v21.0.0.
 */
declare const NzToolTipModule: typeof NzTooltipModule;

export { NzToolTipComponent, NzToolTipModule, NzTooltipBaseComponent, NzTooltipBaseDirective, NzTooltipComponent, NzTooltipDirective, NzTooltipModule, isTooltipEmpty };
export type { NzTooltipTrigger, PropertyMapping };
