import { AfterContentInit, AfterViewChecked, ElementRef, OnChanges, OnDestroy, OnInit, SimpleChanges } from '@angular/core';
import { Subscription } from 'rxjs';
import { LocaleService, LocaleState } from '@eui/core';
import { EuiTimebarItem } from './eui-timebar-item.model';
import * as i0 from "@angular/core";
export declare class EuiTimebarItemUI {
    perc: number;
    /**
     * info success warning danger
     */
    stepTypeClass: 'info' | 'success' | 'warning' | 'danger' | string;
    tooltipColor: string;
    isGrouped?: boolean;
    groupIndex?: number;
    groupLabel?: string;
    groupEndDate?: Date;
    item: EuiTimebarItem;
}
/**
 * @description
 * A component for displaying chronological events or milestones on a horizontal timeline.
 *
 * The EuiTimebarComponent renders a horizontal timeline with customizable items, labels,
 * markers, and optional grouping for overlapping items. It supports responsive behavior,
 * current date indication, and multiple display options.
 *
 */
export declare class EuiTimebarComponent implements OnInit, AfterContentInit, AfterViewChecked, OnChanges, OnDestroy {
    itemsUI: EuiTimebarItemUI[];
    currentDate: Date;
    currentPerc: number;
    markedPerc: number;
    /**
     * The class to be applied to the timebar column.
     *
     * @deprecated Calculation of it happens internally and will be removed in the future
     */
    timebarColumnClass: string;
    subscription: Subscription;
    isShowLegendGenerated: boolean;
    isShowLegendAsIndexGenerated: boolean;
    isGroupOverlappingLabelsGenerated: boolean;
    isMobile: boolean;
    isSomeStepsAreGrouped: boolean;
    extraTimelineLabelSpace: number;
    container: ElementRef<HTMLDivElement>;
    e2eAttr: string;
    /**
     * Date to be highlighted on the timeline.
     * Separate from currentDateMarker, which shows today's date.
     */
    markedDate: Date;
    /**
     * Collection of items to be displayed on the timeline.
     */
    items: EuiTimebarItem[];
    /**
     * Label displayed at the beginning of the timeline.
     */
    startLabel: string;
    /**
     * Label displayed at the end of the timeline.
     */
    endLabel: string;
    /**
     * Format for displaying dates in the timeline.
     * @default 'yyyy-MM-dd'
     */
    dateFormat: 'short' | 'medium' | 'long' | 'full' | 'shortDate' | 'mediumDate' | 'longDate' | 'fullDate' | 'shortTime' | 'mediumTime' | 'longTime' | 'fullTime' | string;
    /**
     * Whether to show a legend with timeline item labels.
     * @default false
     */
    isShowLegend: boolean;
    /**
     * Whether to display indices instead of colors in the legend.
     * @default true
     */
    isShowLegendAsIndex: boolean;
    /**
     * Whether to display a marker for the current date on the timeline.
     * @default false
     */
    isShowCurrentDateMarker: boolean;
    /**
     * When true, keeps the current date marker visible even if the current date
     * is outside the timeline range by placing it at the edge of the timeline.
     * @default false
     */
    isCurrentDateMarkerAlwaysInRange: boolean;
    /**
     * Whether to group timeline items with overlapping labels to improve readability.
     * @default false
     */
    isGroupOverlappingLabels: boolean;
    protected maxStepWidth: number;
    protected locale: LocaleService<LocaleState>;
    private asService;
    private cd;
    ngOnInit(): void;
    ngAfterContentInit(): void;
    ngAfterViewChecked(): void;
    ngOnDestroy(): void;
    ngOnChanges(changes: SimpleChanges): void;
    onBreakpointChange(bkps: any): void;
    trackByFn(index: number, item: EuiTimebarItemUI): string;
    /**
     * Removes null and undefined items from the timeline collection.
     */
    protected removeNullItems(): void;
    /**
     * Sorts the timeline items chronologically by their dates in ascending order.
     * Items with invalid or missing dates are treated as equal during comparison.
     */
    protected sortItems(): void;
    protected groupOverlappingLabels(): void;
    protected clearGrouping(): void;
    /**
     * @deprecated it's not used anymore
     */
    protected calculateExtraTimelineLabelSpace(): void;
    /**
     * Calculates the percentage position of a date within a given date range.
     *
     * @param date - The target date to calculate the position for
     * @param startDate - The beginning of the date range
     * @param endDate - The end of the date range
     * @param compensateForRange - When true, adjusts out-of-range values to maintain visualization constraints
     * @param alwaysInRange - When true, clamps the percentage to the 0-100 range
     * @returns The calculated percentage (0-100), or adjusted values (-3 or 103) if compensating for out-of-range dates
     *
     * @example
     * // Basic usage within range
     * calculatePercentage(new Date('2024-02-15'), new Date('2024-01-01'), new Date('2024-12-31'))
     *
     * // With range compensation
     * calculatePercentage(new Date('2025-01-01'), new Date('2024-01-01'), new Date('2024-12-31'), true)
     */
    protected calculatePercentage(date: Date, startDate: Date, endDate: Date, compensateForRange?: boolean, alwaysInRange?: boolean): number;
    private processGroup;
    private generateGroupLabels;
    /**
     * Verifies that all required dates are valid Date objects.
     *
     * @param dates - The dates to validate
     * @returns True if all dates are valid, otherwise false
     */
    private areValidDates;
    /**
     * Calculates the raw percentage position of a date within the range.
     *
     * @param date - The target date to calculate the position for
     * @param startDate - The beginning of the date range
     * @param endDate - The end of the date range
     *
     * @returns The calculated percentage (0-100) position on the range
     */
    private calculateBasePercentage;
    /**
     * Handles date positions that fall outside the specified range by applying boundary adjustments.
     *
     * For dates beyond the range boundaries, this method adjusts their position values
     * to maintain consistent TimeBar visualization. When isCurrentDateMarkerAlwaysInRange
     * is enabled, positions are clamped to the boundaries (0-100). Otherwise, they extend
     * slightly beyond (-3 or 103) to indicate out-of-range status.
     *
     * @param percentage - The calculated percentage position
     * @param alwaysInRange - When true, clamps the percentage to the 0-100 range
     *
     * @returns The adjusted percentage value
     */
    private adjustPercentageForRange;
    /**
     * Compares two timeline items by their dates for sorting.
     *
     * @param firstItem - The first item to compare
     * @param secondItem - The second item to compare
     * @returns Negative if first date is earlier, positive if later, zero if equal
     */
    private compareTimebarDates;
    static ɵfac: i0.ɵɵFactoryDeclaration<EuiTimebarComponent, never>;
    static ɵcmp: i0.ɵɵComponentDeclaration<EuiTimebarComponent, "eui-timebar", never, { "e2eAttr": { "alias": "e2eAttr"; "required": false; }; "markedDate": { "alias": "markedDate"; "required": false; }; "items": { "alias": "items"; "required": false; }; "startLabel": { "alias": "startLabel"; "required": false; }; "endLabel": { "alias": "endLabel"; "required": false; }; "dateFormat": { "alias": "dateFormat"; "required": false; }; "isShowLegend": { "alias": "isShowLegend"; "required": false; }; "isShowLegendAsIndex": { "alias": "isShowLegendAsIndex"; "required": false; }; "isShowCurrentDateMarker": { "alias": "isShowCurrentDateMarker"; "required": false; }; "isCurrentDateMarkerAlwaysInRange": { "alias": "isCurrentDateMarkerAlwaysInRange"; "required": false; }; "isGroupOverlappingLabels": { "alias": "isGroupOverlappingLabels"; "required": false; }; }, {}, never, never, true, never>;
    static ngAcceptInputType_isShowLegend: unknown;
    static ngAcceptInputType_isShowLegendAsIndex: unknown;
    static ngAcceptInputType_isShowCurrentDateMarker: unknown;
    static ngAcceptInputType_isCurrentDateMarkerAlwaysInRange: unknown;
    static ngAcceptInputType_isGroupOverlappingLabels: unknown;
}
/**
 * @description
 * Angular module that provides the EuiTimebarComponent.
 *
 * @deprecated this component will be discontinued as of eUI 21 (end of 2025)
 */
export declare class EuiTimebarModule {
    static ɵfac: i0.ɵɵFactoryDeclaration<EuiTimebarModule, never>;
    static ɵmod: i0.ɵɵNgModuleDeclaration<EuiTimebarModule, never, [typeof EuiTimebarComponent], [typeof EuiTimebarComponent]>;
    static ɵinj: i0.ɵɵInjectorDeclaration<EuiTimebarModule>;
}
//# sourceMappingURL=eui-timebar.component.d.ts.map