/**-----------------------------------------------------------------------------------------
* Copyright © 2025 Progress Software Corporation. All rights reserved.
* Licensed under commercial license. See LICENSE.md in the project root for more information
*-------------------------------------------------------------------------------------------*/
import { Renderer2, ElementRef } from '@angular/core';
import { BehaviorSubject } from 'rxjs';
import { DateInputComponent } from '../dateinput/dateinput.component';
import type { DateRangePopupComponent } from './date-range-popup.component';
import { SelectionRangeEnd } from '../calendar/models/selection-range-end.type';
import { SelectionRange } from '../calendar/models/selection-range.interface';
import * as i0 from "@angular/core";
/**
 * Manages communication between components inside the DateRangeComponent.
 * For example, handles interactions between the start and end DateInput components and the DateRangePopup component.
 */
export declare class DateRangeService {
    private renderer?;
    /**
     * Notifies when the `activeRangeEnd` state changes.
     */
    activeRangeEnd$: BehaviorSubject<SelectionRangeEnd>;
    /**
     * Notifies when the `focusedDate` changes.
     */
    focusedDate$: BehaviorSubject<Date>;
    /**
     * Notifies when the end DateInput component changes.
     * For example, when you attach a new end `DateInput` or detach the old one.
     */
    endInput$: BehaviorSubject<DateInputComponent>;
    /**
     * Notifies when the start DateInput component changes.
     * For example, when you attach a new start `DateInput` or detach the old one.
     */
    startInput$: BehaviorSubject<DateInputComponent>;
    /**
     * Notifies when the `DateRangePopup` component changes.
     */
    dateRangePopup$: BehaviorSubject<DateRangePopupComponent>;
    /**
     * Notifies when the selection range state changes.
     */
    range$: BehaviorSubject<SelectionRange>;
    /**
     * Gets the current `activeRangeEnd` value.
     */
    get activeRangeEnd(): SelectionRangeEnd;
    /**
     * Gets the current `focusedDate` value.
     */
    get focusedDate(): Date;
    /**
     * Gets the minimum range value.
     * Takes the `min` value from the start DateInput component or the `min` value of the calendar.
     */
    get min(): Date;
    /**
     * Gets the maximum range value.
     * Takes the `max` value from the end DateInput component or the `max` value of the calendar.
     */
    get max(): Date;
    /**
     * Gets the current `selectionRange` value.
     */
    get selectionRange(): SelectionRange;
    /**
     * @hidden
     * Gets the start input element.
     */
    get inputStartElement(): ElementRef;
    /**
     * @hidden
     * Gets the end input element.
     */
    get inputEndElement(): ElementRef;
    /** @hidden */
    constructor(renderer?: Renderer2);
    /**
     * Opens the registered DateRangePopup component.
     * Opens the popup and focuses the calendar.
     */
    activatePopup(): void;
    /**
     * Deactivates the registered `DateRangePopup` component.
     * The method closes the popup.
     */
    deactivatePopup(): void;
    /**
     * @hidden
     */
    setActiveDescendent(id: string): void;
    /**
     * @hidden
     *
     * Deactivates the registered `DateRangePopup` component and fires the `cancel` event.
     * The method closes the popup.
     */
    cancelPopup(): void;
    /**
     * Completes all observables to prevent memory leaks.
     * Call this method when you destroy a component that uses the service.
     */
    destroy(): void;
    /**
     * Checks if any component inside the DateRangeComponent is active.
     * For example, detects an open popup or a focused DateInput component.
     *
     * @returns {boolean} Returns `true` if an active component is present.
     */
    hasActiveComponent(): boolean;
    /**
     * Registers a new start DateInput component and notifies all `startInput$` listeners.
     */
    registerStartInput(startInput: DateInputComponent): void;
    /**
     * Registers a new end `DateInput` component and notifies all `endInput$` listeners.
     */
    registerEndInput(endInput: DateInputComponent): void;
    /**
     * Registers a new `DateRangePopup` component and notifies all `dateRangePopup$` listeners.
     */
    registerPopup(dateRangePopup: DateRangePopupComponent): void;
    /**
     * Updates the `activeRangeEnd` value and notifies all `activeRangeEnd$` listeners.
     */
    setActiveRangeEnd(activeRange: SelectionRangeEnd): void;
    /**
     * Updates the focused date and notifies all `focusedDate$` listeners.
     */
    setFocusedDate(value: Date): void;
    /**
     * Updates the selection range and notifies all `range$` listeners.
     */
    setRange(range?: SelectionRange): void;
    static ɵfac: i0.ɵɵFactoryDeclaration<DateRangeService, [{ optional: true; }]>;
    static ɵprov: i0.ɵɵInjectableDeclaration<DateRangeService>;
}
