import { AXRange, NXNativeEvent, NXComponent, NXEvent, AXValueChangedEvent } from '@acorex/cdk/common';
import { AXDateTime, AXHolidayDate } from '@acorex/core/date-time';
import * as _angular_core from '@angular/core';
import { OnInit, AfterViewInit, TemplateRef, OnDestroy, ElementRef } from '@angular/core';
import { AXDropZoneDropEvent } from '@acorex/cdk/drag-drop';

type AXSchedulerView = 'day' | 'week' | 'month' | 'timeline-day' | 'timeline-multi-day' | 'timeline-month' | 'timeline-year' | 'agenda';
type AXDayOfWeekName = 'sunday' | 'monday' | 'tuesday' | 'wednesday' | 'thursday' | 'friday' | 'saturday';
type AXSchedulerBlockIdentifier = {
    dayIndex: number;
    blockIndex: number;
};
type AXSchedulerAppointment = {
    id: any;
    endDate: Date;
    title?: string;
    startDate: Date;
    resourceId?: any;
    allDay?: boolean;
    cssClass?: string;
    readonly?: boolean;
    description?: string;
    priority?: 'highest' | 'high' | 'medium' | 'low' | 'lowest';
};
type AXSchedulerAppointmentSegment = AXSchedulerAppointment & {
    isContinuationFromPreviousDay: boolean;
    isContinuationToNextDay: boolean;
    originalStartDate: Date;
    originalEndDate: Date;
    originalAppointmentRef?: AXSchedulerAppointment;
};
type AXSchedulerDayAppointmentLayout = {
    columnIndex: number;
    effectiveTotalColumns: number;
};
type AXSchedulerBlockOccupancyMap = Map<string, any>;
type AXSchedulerActiveAppointmentsInBlock = Record<number, Record<number, AXSchedulerAppointmentSegment[]>>;
type AXSchedulerOverflowBadge = {
    key: any;
    count: number;
    badgeTop: string;
    badgeLeft: string;
};
type AXSchedulerAllDaySlotData = {
    day: AXDateTime;
    appointments: AXSchedulerAppointment[];
};
type AXSchedulerAppointmentLayout = {
    appointment: AXSchedulerAppointmentSegment;
    layoutLeft: string;
    layoutWidth: string;
    layoutTop: string;
    layoutHeight: string;
};
type AXSchedulerMultiDayViewAppointment = {
    appointments: AXSchedulerAppointment[];
    date: AXDateTime;
};
type AXSchedulerDateRange = AXRange<Date>;
type AXSchedulerAppointmentDataSourceFilter = {
    range?: AXSchedulerDateRange;
};
type AXSchedulerAppointmentLoader = (filter?: AXSchedulerAppointmentDataSourceFilter) => AXSchedulerAppointment[];
type AXSchedulerAppointmentLoaderAsync = (filter?: AXSchedulerAppointmentDataSourceFilter) => Promise<AXSchedulerAppointment[]>;
type AXSchedulerAppointmentDataSource = AXSchedulerAppointment[] | AXSchedulerAppointmentLoader | AXSchedulerAppointmentLoaderAsync;
type AXSchedulerResource = {
    id: any;
    title: string;
    description?: string;
};
/**
 * Result of calculating updated appointment data after a drag-and-drop operation.
 */
type AXSchedulerAppointmentDropResult = {
    /** The new start date for the appointment */
    startDate: Date;
    /** The new end date for the appointment */
    endDate: Date;
    /** Whether the appointment should be marked as all-day */
    allDay: boolean;
    /** The new resource ID (if applicable) */
    resourceId?: unknown;
    /** Whether the drop was on the same slot (no change needed) */
    isSameSlotDrop: boolean;
};

interface AXSchedulerAppointmentMouseEvent extends NXNativeEvent<AXSchedulerComponent, MouseEvent> {
    appointment: AXSchedulerAppointment;
}
interface AXSchedulerSlotMouseEvent extends NXNativeEvent<AXSchedulerComponent, MouseEvent> {
    slot: {
        endDate: AXDateTime;
        startDate: AXDateTime;
        view: AXSchedulerView;
    };
}
interface AXSchedulerSlotDropEvent extends NXEvent<AXSchedulerComponent> {
    dropEvent: AXDropZoneDropEvent;
    appointment: AXSchedulerAppointment;
    slot: {
        endDate: AXDateTime;
        startDate: AXDateTime;
        view: AXSchedulerView;
        resourceId?: any;
    };
    isSameSlotDrop: boolean;
}
declare class AXSchedulerComponent extends NXComponent implements OnInit, AfterViewInit {
    #private;
    private platformId;
    private unsubscriber;
    private formatService;
    private localeService;
    private calendarService;
    private schedulerService;
    private translationService;
    private viewModeSelectbox;
    private calendarPopover;
    private displayViews;
    calendar: _angular_core.InputSignal<string>;
    protected calendarType: _angular_core.WritableSignal<string>;
    startingDate: _angular_core.InputSignal<Date>;
    currentDate: _angular_core.WritableSignal<AXDateTime>;
    private _appointments;
    appointments: _angular_core.Signal<AXSchedulerAppointment[]>;
    protected rtl: _angular_core.WritableSignal<boolean>;
    protected isFullScreen: _angular_core.WritableSignal<boolean>;
    protected viewsDataSource: _angular_core.WritableSignal<{
        id: string;
        text: string;
    }[]>;
    private prevDate;
    protected selectedAppointmentId: _angular_core.WritableSignal<string | number>;
    endDayHour: _angular_core.InputSignal<number>;
    startDayHour: _angular_core.InputSignal<number>;
    hasHeader: _angular_core.InputSignal<boolean>;
    readonly: _angular_core.InputSignal<boolean>;
    draggable: _angular_core.InputSignal<boolean>;
    hasActions: _angular_core.InputSignal<boolean>;
    dragStartDelay: _angular_core.InputSignal<number>;
    weekend: _angular_core.InputSignal<number[]>;
    allowFullScreen: _angular_core.InputSignal<boolean>;
    multiDayViewDaysCount: _angular_core.InputSignal<number>;
    showResourceHeaders: _angular_core.InputSignal<boolean>;
    showCurrentTimeIndicator: _angular_core.InputSignal<boolean>;
    showUnassignedAppointments: _angular_core.InputSignal<boolean>;
    resources: _angular_core.InputSignal<AXSchedulerResource[]>;
    resourceTemplate: _angular_core.InputSignal<TemplateRef<unknown>>;
    firstDayOfWeek: _angular_core.InputSignal<AXDayOfWeekName>;
    tooltipTemplate: _angular_core.InputSignal<string | TemplateRef<unknown>>;
    dataSource: _angular_core.InputSignal<AXSchedulerAppointmentDataSource>;
    holidays: _angular_core.InputSignal<(range: AXSchedulerDateRange) => Promise<AXHolidayDate[]>>;
    views: _angular_core.InputSignal<AXSchedulerView[]>;
    selectedView: _angular_core.ModelSignal<AXSchedulerView>;
    private prevView;
    onDataLoaded: _angular_core.OutputEmitterRef<void>;
    onRangeChanged: _angular_core.OutputEmitterRef<AXSchedulerDateRange>;
    onSlotClicked: _angular_core.OutputEmitterRef<AXSchedulerSlotMouseEvent>;
    onSlotDblClicked: _angular_core.OutputEmitterRef<AXSchedulerSlotMouseEvent>;
    onSlotRightClick: _angular_core.OutputEmitterRef<AXSchedulerSlotMouseEvent>;
    onAppointmentDrop: _angular_core.OutputEmitterRef<AXSchedulerSlotDropEvent>;
    onActionClick: _angular_core.OutputEmitterRef<AXSchedulerAppointmentMouseEvent>;
    onAppointmentClicked: _angular_core.OutputEmitterRef<AXSchedulerAppointmentMouseEvent>;
    onAppointmentDblClicked: _angular_core.OutputEmitterRef<AXSchedulerAppointmentMouseEvent>;
    onAppointmentRightClick: _angular_core.OutputEmitterRef<AXSchedulerAppointmentMouseEvent>;
    protected handleSlotClickInternal(eventData: AXSchedulerSlotMouseEvent): void;
    protected handleSlotDblClickInternal(eventData: AXSchedulerSlotMouseEvent): void;
    protected handleSlotRightClickInternal(eventData: AXSchedulerSlotMouseEvent): void;
    protected handleAppointmentClickInternal(eventData: AXSchedulerAppointmentMouseEvent): void;
    protected handleAppointmentDblClickInternal(eventData: AXSchedulerAppointmentMouseEvent): void;
    protected handleAppointmentRightClickInternal(eventData: AXSchedulerAppointmentMouseEvent): void;
    protected handleAppointmentDropInternal(eventData: AXSchedulerSlotDropEvent): void;
    ngOnInit(): void;
    ngAfterViewInit(): void;
    private fillDataSource;
    private getGridDateRange;
    currentDateText: _angular_core.Signal<string>;
    calendarDepth: _angular_core.Signal<"day" | "month" | "year">;
    private mappedAppointments;
    range: _angular_core.Signal<AXSchedulerDateRange>;
    viewAppointments: _angular_core.Signal<AXSchedulerAppointment[]>;
    /**
     * Handles view change events.
     *
     * @param e - The value changed event containing old and new view values.
     */
    viewChanged(e: AXValueChangedEvent<AXSchedulerView>): void;
    private handleViewChanged;
    /**
     * Navigates to the next time period based on current view.
     */
    nextClick(): void;
    /**
     * Navigates to the previous time period based on current view.
     */
    prevClick(): void;
    /**
     * Handles calendar date change events.
     *
     * @param e - The value changed event containing the new date.
     */
    calendarDateChanged(e: AXValueChangedEvent<Date>): void;
    /**
     * Toggles fullscreen mode for the scheduler.
     */
    handleFullScreen(): void;
    /**
     * Refreshes the scheduler data.
     *
     * @param appointments - Optional array of appointments to refresh with.
     */
    refresh(appointments?: AXSchedulerAppointment[]): Promise<void>;
    static ɵfac: _angular_core.ɵɵFactoryDeclaration<AXSchedulerComponent, never>;
    static ɵcmp: _angular_core.ɵɵComponentDeclaration<AXSchedulerComponent, "ax-scheduler", never, { "calendar": { "alias": "calendar"; "required": false; "isSignal": true; }; "startingDate": { "alias": "startingDate"; "required": false; "isSignal": true; }; "endDayHour": { "alias": "endDayHour"; "required": false; "isSignal": true; }; "startDayHour": { "alias": "startDayHour"; "required": false; "isSignal": true; }; "hasHeader": { "alias": "hasHeader"; "required": false; "isSignal": true; }; "readonly": { "alias": "readonly"; "required": false; "isSignal": true; }; "draggable": { "alias": "draggable"; "required": false; "isSignal": true; }; "hasActions": { "alias": "hasActions"; "required": false; "isSignal": true; }; "dragStartDelay": { "alias": "dragStartDelay"; "required": false; "isSignal": true; }; "weekend": { "alias": "weekend"; "required": false; "isSignal": true; }; "allowFullScreen": { "alias": "allowFullScreen"; "required": false; "isSignal": true; }; "multiDayViewDaysCount": { "alias": "multiDayViewDaysCount"; "required": false; "isSignal": true; }; "showResourceHeaders": { "alias": "showResourceHeaders"; "required": false; "isSignal": true; }; "showCurrentTimeIndicator": { "alias": "showCurrentTimeIndicator"; "required": false; "isSignal": true; }; "showUnassignedAppointments": { "alias": "showUnassignedAppointments"; "required": false; "isSignal": true; }; "resources": { "alias": "resources"; "required": false; "isSignal": true; }; "resourceTemplate": { "alias": "resourceTemplate"; "required": false; "isSignal": true; }; "firstDayOfWeek": { "alias": "firstDayOfWeek"; "required": false; "isSignal": true; }; "tooltipTemplate": { "alias": "tooltipTemplate"; "required": false; "isSignal": true; }; "dataSource": { "alias": "dataSource"; "required": false; "isSignal": true; }; "holidays": { "alias": "holidays"; "required": false; "isSignal": true; }; "views": { "alias": "views"; "required": false; "isSignal": true; }; "selectedView": { "alias": "selectedView"; "required": false; "isSignal": true; }; }, { "selectedView": "selectedViewChange"; "onDataLoaded": "onDataLoaded"; "onRangeChanged": "onRangeChanged"; "onSlotClicked": "onSlotClicked"; "onSlotDblClicked": "onSlotDblClicked"; "onSlotRightClick": "onSlotRightClick"; "onAppointmentDrop": "onAppointmentDrop"; "onActionClick": "onActionClick"; "onAppointmentClicked": "onAppointmentClicked"; "onAppointmentDblClicked": "onAppointmentDblClicked"; "onAppointmentRightClick": "onAppointmentRightClick"; }, never, never, true, never>;
}

declare class AXSchedulerDayViewComponent extends NXComponent implements AfterViewInit, OnDestroy {
    private document;
    private destroyRef;
    private scheduler;
    private calendarService;
    private schedulerService;
    readonly GAP_PX = 1;
    private resizeObserverCleanup;
    rtl: _angular_core.InputSignal<boolean>;
    readonly: _angular_core.InputSignal<boolean>;
    draggable: _angular_core.InputSignal<boolean>;
    hasActions: _angular_core.InputSignal<boolean>;
    dragStartDelay: _angular_core.InputSignal<number>;
    calendar: _angular_core.InputSignal<string>;
    date: _angular_core.InputSignal<AXDateTime>;
    endDayHour: _angular_core.InputSignal<number>;
    startDayHour: _angular_core.InputSignal<number>;
    showCurrentTimeIndicator: _angular_core.InputSignal<boolean>;
    appointments: _angular_core.InputSignal<AXSchedulerAppointment[]>;
    tooltipTemplate: _angular_core.InputSignal<string | TemplateRef<unknown>>;
    selectedAppointmentId: _angular_core.InputSignal<string | number>;
    protected isActive(appointmentId: string | number): boolean;
    currentTimeLineElement: _angular_core.Signal<ElementRef<HTMLElement>>;
    private dragStartSlotId;
    private processedAppointmentsForLayout;
    protected allDayAppointments: _angular_core.Signal<AXSchedulerAppointmentSegment[]>;
    protected singleDayAppointments: _angular_core.Signal<AXSchedulerAppointmentSegment[]>;
    slotClickedInternal: _angular_core.OutputEmitterRef<AXSchedulerSlotMouseEvent>;
    slotDblClickedInternal: _angular_core.OutputEmitterRef<AXSchedulerSlotMouseEvent>;
    slotRightClickedInternal: _angular_core.OutputEmitterRef<AXSchedulerSlotMouseEvent>;
    appointmentClickedInternal: _angular_core.OutputEmitterRef<AXSchedulerAppointmentMouseEvent>;
    appointmentDblClickedInternal: _angular_core.OutputEmitterRef<AXSchedulerAppointmentMouseEvent>;
    appointmentRightClickedInternal: _angular_core.OutputEmitterRef<AXSchedulerAppointmentMouseEvent>;
    onActionClickInternal: _angular_core.OutputEmitterRef<AXSchedulerAppointmentMouseEvent>;
    onAppointmentDropInternal: _angular_core.OutputEmitterRef<AXSchedulerSlotDropEvent>;
    private readonly eventOutputMap;
    protected handleAppointmentEvent(mouseEvent: MouseEvent, appointment: AXSchedulerAppointment): void;
    protected handleSingleSlotEvent(mouseEvent: MouseEvent, startDate: AXDateTime): void;
    protected handleAllDaySlotEvent(mouseEvent: MouseEvent): void;
    protected handleAllDayDrop(e: AXDropZoneDropEvent): void;
    protected handleSingleDayDrop(e: AXDropZoneDropEvent, startDate: AXDateTime): void;
    protected handleActionClick(event: MouseEvent, appointmentItem: AXSchedulerAppointment): void;
    protected hoursArray: _angular_core.Signal<AXDateTime[]>;
    private appointmentLayouts;
    private getAppointmentLayout;
    protected getAppointmentLeft(key: any): string;
    protected getAppointmentWidth(key: any): string;
    protected getAppointmentTop(key: any): string;
    protected getAppointmentHeight(key: any): string;
    protected getCurrentTimePosition(): number | null;
    protected getCurrentTimePositionWithOffset(): string | null;
    ngAfterViewInit(): void;
    ngOnDestroy(): void;
    private setupCurrentTimeScroll;
    protected getSlotId(e: PointerEvent): void;
    static ɵfac: _angular_core.ɵɵFactoryDeclaration<AXSchedulerDayViewComponent, never>;
    static ɵcmp: _angular_core.ɵɵComponentDeclaration<AXSchedulerDayViewComponent, "ax-scheduler-day-view", never, { "rtl": { "alias": "rtl"; "required": false; "isSignal": true; }; "readonly": { "alias": "readonly"; "required": false; "isSignal": true; }; "draggable": { "alias": "draggable"; "required": false; "isSignal": true; }; "hasActions": { "alias": "hasActions"; "required": false; "isSignal": true; }; "dragStartDelay": { "alias": "dragStartDelay"; "required": false; "isSignal": true; }; "calendar": { "alias": "calendar"; "required": false; "isSignal": true; }; "date": { "alias": "date"; "required": true; "isSignal": true; }; "endDayHour": { "alias": "endDayHour"; "required": true; "isSignal": true; }; "startDayHour": { "alias": "startDayHour"; "required": true; "isSignal": true; }; "showCurrentTimeIndicator": { "alias": "showCurrentTimeIndicator"; "required": false; "isSignal": true; }; "appointments": { "alias": "appointments"; "required": false; "isSignal": true; }; "tooltipTemplate": { "alias": "tooltipTemplate"; "required": false; "isSignal": true; }; "selectedAppointmentId": { "alias": "selectedAppointmentId"; "required": false; "isSignal": true; }; }, { "slotClickedInternal": "slotClickedInternal"; "slotDblClickedInternal": "slotDblClickedInternal"; "slotRightClickedInternal": "slotRightClickedInternal"; "appointmentClickedInternal": "appointmentClickedInternal"; "appointmentDblClickedInternal": "appointmentDblClickedInternal"; "appointmentRightClickedInternal": "appointmentRightClickedInternal"; "onActionClickInternal": "onActionClickInternal"; "onAppointmentDropInternal": "onAppointmentDropInternal"; }, never, never, true, never>;
}

type AXSchedulerGridBadgeInfo = AXSchedulerOverflowBadge & {
    hiddenAppointments: AXSchedulerAppointmentSegment[];
};
type AXSchedulerWeekSpanningAppointment = {
    appointment: AXSchedulerAppointment;
    startDayIndex: number;
    spanCount: number;
    rowIndex: number;
    isStartClipped: boolean;
    isEndClipped: boolean;
};
declare class AXSchedulerWeekViewComponent extends NXComponent implements AfterViewInit, OnDestroy {
    private readonly document;
    private readonly destroyRef;
    private readonly scheduler;
    private readonly calendarService;
    private readonly schedulerService;
    private readonly dragStartSlotId;
    private readonly GAP_PX;
    private readonly BADGE_SPACE_REM;
    private resizeObserverCleanup;
    readonly: _angular_core.InputSignal<boolean>;
    draggable: _angular_core.InputSignal<boolean>;
    hasActions: _angular_core.InputSignal<boolean>;
    dragStartDelay: _angular_core.InputSignal<number>;
    calendar: _angular_core.InputSignal<string>;
    date: _angular_core.InputSignal<AXDateTime>;
    endDayHour: _angular_core.InputSignal<number>;
    startDayHour: _angular_core.InputSignal<number>;
    showCurrentTimeIndicator: _angular_core.InputSignal<boolean>;
    appointments: _angular_core.InputSignal<AXSchedulerAppointment[]>;
    tooltipTemplate: _angular_core.InputSignal<string | TemplateRef<unknown>>;
    selectedAppointmentId: _angular_core.InputSignal<string | number>;
    protected isActive(appointmentId: string | number): boolean;
    currentTimeLineElement: _angular_core.Signal<ElementRef<HTMLElement>>;
    protected readonly slotClickedInternal: _angular_core.OutputEmitterRef<AXSchedulerSlotMouseEvent>;
    protected readonly slotDblClickedInternal: _angular_core.OutputEmitterRef<AXSchedulerSlotMouseEvent>;
    protected readonly slotRightClickedInternal: _angular_core.OutputEmitterRef<AXSchedulerSlotMouseEvent>;
    protected readonly appointmentClickedInternal: _angular_core.OutputEmitterRef<AXSchedulerAppointmentMouseEvent>;
    protected readonly appointmentDblClickedInternal: _angular_core.OutputEmitterRef<AXSchedulerAppointmentMouseEvent>;
    protected readonly appointmentRightClickedInternal: _angular_core.OutputEmitterRef<AXSchedulerAppointmentMouseEvent>;
    protected readonly onActionClickInternal: _angular_core.OutputEmitterRef<AXSchedulerAppointmentMouseEvent>;
    protected readonly onAppointmentDropInternal: _angular_core.OutputEmitterRef<AXSchedulerSlotDropEvent>;
    /**
     * @protected
     * Generates an array of AXDateTime objects for the hours displayed in the view's time ruler.
     * This is used for rendering the `HH:mm` labels on the side.
     */
    protected hoursArray: _angular_core.Signal<AXDateTime[]>;
    /**
     * @protected
     * Generates an array of day data objects for the 7 days in the view, including holiday info.
     * This is used for rendering the day headers (e.g., "Monday 10").
     */
    protected daysArray: _angular_core.Signal<{
        date: AXDateTime;
        holiday?: {
            state: "holiday" | "weekend" | "none";
            holiday?: AXHolidayDate;
        };
    }[]>;
    /**
     * @protected
     * Calculates the total number of 30-minute blocks within the visible hours of a single day.
     */
    protected totalBlocksPerViewDay: _angular_core.Signal<number>;
    private isMultiDayAppointment;
    protected spanningAppointments: _angular_core.Signal<AXSchedulerWeekSpanningAppointment[]>;
    private multiDayAppointmentIds;
    protected maxSpanningRowIndex: _angular_core.Signal<number>;
    /**
     * @protected
     * Filters processed segments to get only single-day all-day appointments for the all-day header.
     * Multi-day appointments are rendered separately as spanning bars.
     */
    protected allDayAppointmentsPerDay: _angular_core.Signal<AXSchedulerAllDaySlotData[]>;
    /**
     * [STEP 1 - Private] Calculate a full multi-column layout for each day, as if it were a Day View.
     * This becomes the single source of truth for what overlaps with what.
     */
    private dayViewLayoutsByDay;
    /**
     * @protected
     * [STEP 2] From the full layout, select ONLY appointments in the first column (`columnIndex: 0`)
     * to be visible. Calculate their width based on whether they have siblings in other columns.
     */
    protected visibleAppointmentsLayout: _angular_core.Signal<AXSchedulerAppointmentLayout[]>;
    /**
     * @protected
     * [STEP 3] Create badges for all appointments NOT in the first column (`columnIndex > 0`).
     */
    protected overflowBadgesWithData: _angular_core.Signal<AXSchedulerGridBadgeInfo[]>;
    private readonly eventOutputMap;
    /**
     * Handles click, dblclick, and contextmenu events on an appointment and emits them to the parent.
     * @param mouseEvent The native DOM event.
     * @param appointmentSegment The appointment data segment that was interacted with.
     * @protected
     */
    protected handleAppointmentEvent(mouseEvent: MouseEvent, appointmentSegment: AXSchedulerAppointment): void;
    /**
     * Handles click, dblclick, and contextmenu events on an empty time slot and emits them to the parent.
     * @param mouseEvent The native DOM event.
     * @param hour The starting hour of the slot.
     * @param day The day of the slot.
     * @param minuteIndex The half-hour index (0 or 1).
     * @protected
     */
    protected handleSingleSlotEvent(mouseEvent: MouseEvent, hour: AXDateTime, day: AXDateTime, minuteIndex: number): void;
    /**
     * Handles interaction events on the all-day slot.
     * @param mouseEvent The native DOM event.
     * @param day The corresponding day for the all-day slot.
     * @protected
     */
    protected handleAllDaySlotEvent(mouseEvent: MouseEvent, day: AXDateTime): void;
    /**
     * Handles dropping an appointment onto the all-day slot.
     * @param e The drop event from the CDK.
     * @param day The corresponding day for the all-day slot.
     * @protected
     */
    protected handleAllDayDrop(e: AXDropZoneDropEvent, day: AXDateTime): void;
    /**
     * Handles dropping an appointment onto a timed grid slot.
     * @param e The drop event from the CDK.
     * @param hour The starting hour of the drop target.
     * @param day The day of the drop target.
     * @param minuteIndex The half-hour index (0 or 1) of the drop target.
     * @protected
     */
    protected handleSingleDayDrop(e: AXDropZoneDropEvent, hour: AXDateTime, day: AXDateTime, minuteIndex: number): void;
    /**
     * Handles clicks on the "more" action icon on an appointment.
     * @param event The native mouse event.
     * @param appointmentItem The appointment associated with the action.
     * @protected
     */
    protected handleActionClick(event: MouseEvent, appointmentItem: AXSchedulerAppointment): void;
    /**
     * @protected
     * Checks if a given date is the current day.
     * @param date The date to check.
     * @returns `true` if the date is today.
     */
    protected isToday(date: AXDateTime): boolean;
    /**
     * @protected
     * Checks if a given date is a holiday or weekend.
     * @param date The date to check.
     * @returns An object describing the day's status (holiday, weekend, or none).
     */
    protected isHoliday(date: AXDateTime): {
        state: 'holiday' | 'weekend' | 'none';
        holiday?: AXHolidayDate;
    };
    /**
     * @protected
     * Captures the data-slot-id attribute when a drag operation starts on an appointment.
     * @param e The pointer event that initiates the drag.
     */
    protected getSlotId(e: PointerEvent): void;
    protected getCurrentTimePosition(): number | null;
    protected getCurrentTimePositionWithOffset(): string | null;
    protected getCurrentDayColumnPosition(): string | null;
    protected getCurrentDayColumnWidth(): string;
    ngAfterViewInit(): void;
    ngOnDestroy(): void;
    private setupCurrentTimeScroll;
    protected shouldShowCurrentTimeForToday(): boolean;
    private processedAppointmentsForLayout;
    private timedGridSegments;
    static ɵfac: _angular_core.ɵɵFactoryDeclaration<AXSchedulerWeekViewComponent, never>;
    static ɵcmp: _angular_core.ɵɵComponentDeclaration<AXSchedulerWeekViewComponent, "ax-scheduler-week-view", never, { "readonly": { "alias": "readonly"; "required": false; "isSignal": true; }; "draggable": { "alias": "draggable"; "required": false; "isSignal": true; }; "hasActions": { "alias": "hasActions"; "required": false; "isSignal": true; }; "dragStartDelay": { "alias": "dragStartDelay"; "required": false; "isSignal": true; }; "calendar": { "alias": "calendar"; "required": false; "isSignal": true; }; "date": { "alias": "date"; "required": true; "isSignal": true; }; "endDayHour": { "alias": "endDayHour"; "required": true; "isSignal": true; }; "startDayHour": { "alias": "startDayHour"; "required": true; "isSignal": true; }; "showCurrentTimeIndicator": { "alias": "showCurrentTimeIndicator"; "required": false; "isSignal": true; }; "appointments": { "alias": "appointments"; "required": false; "isSignal": true; }; "tooltipTemplate": { "alias": "tooltipTemplate"; "required": false; "isSignal": true; }; "selectedAppointmentId": { "alias": "selectedAppointmentId"; "required": false; "isSignal": true; }; }, { "slotClickedInternal": "slotClickedInternal"; "slotDblClickedInternal": "slotDblClickedInternal"; "slotRightClickedInternal": "slotRightClickedInternal"; "appointmentClickedInternal": "appointmentClickedInternal"; "appointmentDblClickedInternal": "appointmentDblClickedInternal"; "appointmentRightClickedInternal": "appointmentRightClickedInternal"; "onActionClickInternal": "onActionClickInternal"; "onAppointmentDropInternal": "onAppointmentDropInternal"; }, never, never, true, never>;
}

type AXSchedulerMonthDayCell = {
    date: AXDateTime;
    isCurrentMonth: boolean;
    isToday: boolean;
    isHoliday: boolean;
    holidayTitle?: string;
    holidayCssClass?: string;
    appointments: AXSchedulerAppointmentSegment[];
    visibleAppointments: AXSchedulerAppointmentSegment[];
    hiddenAppointments: AXSchedulerAppointmentSegment[];
    overflowCount: number;
    gridIndex: number;
};
type AXSchedulerSpanningAppointment = {
    appointment: AXSchedulerAppointment;
    gridStartIndex: number;
    spanCount: number;
    rowIndex: number;
    isStartClipped: boolean;
    isEndClipped: boolean;
};
declare class AXSchedulerMonthViewComponent extends NXComponent {
    private document;
    private scheduler;
    private calendarService;
    private schedulerService;
    readonly: _angular_core.InputSignal<boolean>;
    draggable: _angular_core.InputSignal<boolean>;
    hasActions: _angular_core.InputSignal<boolean>;
    dragStartDelay: _angular_core.InputSignal<number>;
    calendar: _angular_core.InputSignal<string>;
    date: _angular_core.InputSignal<AXDateTime>;
    appointments: _angular_core.InputSignal<AXSchedulerAppointment[]>;
    firstDayOfWeek: _angular_core.InputSignal<AXDayOfWeekName>;
    selectedAppointmentId: _angular_core.InputSignal<string | number>;
    protected isActive(appointmentId: string | number): boolean;
    tooltipTemplate: _angular_core.InputSignal<string | TemplateRef<unknown>>;
    readonly DAYS_IN_WEEK = 7;
    readonly MAX_VISIBLE_APPOINTMENTS_PER_DAY = 2;
    private dragStartSlotId;
    slotClickedInternal: _angular_core.OutputEmitterRef<AXSchedulerSlotMouseEvent>;
    slotDblClickedInternal: _angular_core.OutputEmitterRef<AXSchedulerSlotMouseEvent>;
    slotRightClickedInternal: _angular_core.OutputEmitterRef<AXSchedulerSlotMouseEvent>;
    appointmentClickedInternal: _angular_core.OutputEmitterRef<AXSchedulerAppointmentMouseEvent>;
    appointmentDblClickedInternal: _angular_core.OutputEmitterRef<AXSchedulerAppointmentMouseEvent>;
    appointmentRightClickedInternal: _angular_core.OutputEmitterRef<AXSchedulerAppointmentMouseEvent>;
    onActionClickInternal: _angular_core.OutputEmitterRef<AXSchedulerAppointmentMouseEvent>;
    onAppointmentDropInternal: _angular_core.OutputEmitterRef<AXSchedulerSlotDropEvent>;
    private readonly eventOutputMap;
    protected handleAppointmentEvent(mouseEvent: MouseEvent, appointmentSegmentOrOriginal: AXSchedulerAppointment): void;
    protected handleSlotEvent(mouseEvent: MouseEvent, date: AXDateTime): void;
    protected handleDrop(e: AXDropZoneDropEvent, date: AXDateTime): void;
    protected handleActionClick(event: MouseEvent, appointmentItem: AXSchedulerAppointment): void;
    private monthStartDate;
    protected daysArray: _angular_core.Signal<AXDateTime[]>;
    private calendarDaysInfo;
    private isMultiDayAppointment;
    protected spanningAppointments: _angular_core.Signal<AXSchedulerSpanningAppointment[]>;
    private multiDayAppointmentIds;
    protected dayCellLayouts: _angular_core.Signal<AXSchedulerMonthDayCell[]>;
    protected gridTemplateRowsStyle: _angular_core.Signal<string>;
    protected getSlotId(e: PointerEvent): void;
    protected getSpanningAppointmentStyle(spanning: AXSchedulerSpanningAppointment): Record<string, string>;
    protected spanningAppointmentsByWeekRow: _angular_core.Signal<Map<number, AXSchedulerSpanningAppointment[]>>;
    protected weekRowsArray: _angular_core.Signal<number[]>;
    protected getSpanningAppointmentsForWeekRow(weekRowIndex: number): AXSchedulerSpanningAppointment[];
    protected maxSpanningRowsPerWeek: _angular_core.Signal<Map<number, number>>;
    protected getSpanningRowsCountForDayCell(gridIndex: number): number;
    static ɵfac: _angular_core.ɵɵFactoryDeclaration<AXSchedulerMonthViewComponent, never>;
    static ɵcmp: _angular_core.ɵɵComponentDeclaration<AXSchedulerMonthViewComponent, "ax-scheduler-month-view", never, { "readonly": { "alias": "readonly"; "required": false; "isSignal": true; }; "draggable": { "alias": "draggable"; "required": false; "isSignal": true; }; "hasActions": { "alias": "hasActions"; "required": false; "isSignal": true; }; "dragStartDelay": { "alias": "dragStartDelay"; "required": false; "isSignal": true; }; "calendar": { "alias": "calendar"; "required": false; "isSignal": true; }; "date": { "alias": "date"; "required": true; "isSignal": true; }; "appointments": { "alias": "appointments"; "required": false; "isSignal": true; }; "firstDayOfWeek": { "alias": "firstDayOfWeek"; "required": false; "isSignal": true; }; "selectedAppointmentId": { "alias": "selectedAppointmentId"; "required": false; "isSignal": true; }; "tooltipTemplate": { "alias": "tooltipTemplate"; "required": false; "isSignal": true; }; }, { "slotClickedInternal": "slotClickedInternal"; "slotDblClickedInternal": "slotDblClickedInternal"; "slotRightClickedInternal": "slotRightClickedInternal"; "appointmentClickedInternal": "appointmentClickedInternal"; "appointmentDblClickedInternal": "appointmentDblClickedInternal"; "appointmentRightClickedInternal": "appointmentRightClickedInternal"; "onActionClickInternal": "onActionClickInternal"; "onAppointmentDropInternal": "onAppointmentDropInternal"; }, never, never, true, never>;
}

interface AgendaDayData {
    date: AXDateTime;
    appointments: AXSchedulerAppointmentSegment[];
    holiday?: {
        state: 'holiday' | 'weekend' | 'none';
        holiday?: AXHolidayDate;
    };
}
declare class AXSchedulerAgendaViewComponent extends NXComponent {
    private document;
    private scheduler;
    private calendarService;
    private schedulerService;
    daysCount: _angular_core.InputSignal<number>;
    readonly: _angular_core.InputSignal<boolean>;
    draggable: _angular_core.InputSignal<boolean>;
    hasActions: _angular_core.InputSignal<boolean>;
    dragStartDelay: _angular_core.InputSignal<number>;
    calendar: _angular_core.InputSignal<string>;
    date: _angular_core.InputSignal<AXDateTime>;
    appointments: _angular_core.InputSignal<AXSchedulerAppointment[]>;
    tooltipTemplate: _angular_core.InputSignal<string | TemplateRef<unknown>>;
    selectedAppointmentId: _angular_core.InputSignal<string | number>;
    protected isActive(appointmentId: string | number): boolean;
    private dragStartSlotId;
    protected agendaDaysLayout: _angular_core.Signal<AgendaDayData[]>;
    slotClickedInternal: _angular_core.OutputEmitterRef<AXSchedulerSlotMouseEvent>;
    slotDblClickedInternal: _angular_core.OutputEmitterRef<AXSchedulerSlotMouseEvent>;
    slotRightClickedInternal: _angular_core.OutputEmitterRef<AXSchedulerSlotMouseEvent>;
    appointmentClickedInternal: _angular_core.OutputEmitterRef<AXSchedulerAppointmentMouseEvent>;
    appointmentDblClickedInternal: _angular_core.OutputEmitterRef<AXSchedulerAppointmentMouseEvent>;
    appointmentRightClickedInternal: _angular_core.OutputEmitterRef<AXSchedulerAppointmentMouseEvent>;
    onActionClickInternal: _angular_core.OutputEmitterRef<AXSchedulerAppointmentMouseEvent>;
    onAppointmentDropInternal: _angular_core.OutputEmitterRef<AXSchedulerSlotDropEvent>;
    private readonly eventOutputMap;
    protected handleAppointmentEvent(mouseEvent: MouseEvent, appointmentItem: AXSchedulerAppointment): void;
    protected handleSlotEvent(mouseEvent: MouseEvent, date: AXDateTime): void;
    protected handleDrop(e: AXDropZoneDropEvent, date: AXDateTime): void;
    protected handleActionClick(event: MouseEvent, appointmentItem: AXSchedulerAppointment): void;
    protected isToday(date: AXDateTime): boolean;
    protected isHoliday(date: AXDateTime): {
        state: 'holiday' | 'weekend' | 'none';
        holiday?: AXHolidayDate;
    };
    protected getSlotId(e: PointerEvent): void;
    /**
     * Checks if an appointment spans multiple days.
     * Returns true if the appointment covers more than one calendar day.
     */
    protected isMultiDayAppointment(segment: AXSchedulerAppointmentSegment): boolean;
    /**
     * Gets the formatted date range for multi-day appointments.
     * Returns the start and end dates formatted for display (e.g., "7 Dec", "21 Dec").
     * Supports Persian calendar through the calendar input.
     */
    protected getMultiDayStartDate(segment: AXSchedulerAppointmentSegment): Date;
    protected getMultiDayEndDate(segment: AXSchedulerAppointmentSegment): Date;
    static ɵfac: _angular_core.ɵɵFactoryDeclaration<AXSchedulerAgendaViewComponent, never>;
    static ɵcmp: _angular_core.ɵɵComponentDeclaration<AXSchedulerAgendaViewComponent, "ax-scheduler-agenda-view", never, { "daysCount": { "alias": "daysCount"; "required": false; "isSignal": true; }; "readonly": { "alias": "readonly"; "required": false; "isSignal": true; }; "draggable": { "alias": "draggable"; "required": false; "isSignal": true; }; "hasActions": { "alias": "hasActions"; "required": false; "isSignal": true; }; "dragStartDelay": { "alias": "dragStartDelay"; "required": false; "isSignal": true; }; "calendar": { "alias": "calendar"; "required": false; "isSignal": true; }; "date": { "alias": "date"; "required": true; "isSignal": true; }; "appointments": { "alias": "appointments"; "required": false; "isSignal": true; }; "tooltipTemplate": { "alias": "tooltipTemplate"; "required": false; "isSignal": true; }; "selectedAppointmentId": { "alias": "selectedAppointmentId"; "required": false; "isSignal": true; }; }, { "slotClickedInternal": "slotClickedInternal"; "slotDblClickedInternal": "slotDblClickedInternal"; "slotRightClickedInternal": "slotRightClickedInternal"; "appointmentClickedInternal": "appointmentClickedInternal"; "appointmentDblClickedInternal": "appointmentDblClickedInternal"; "appointmentRightClickedInternal": "appointmentRightClickedInternal"; "onActionClickInternal": "onActionClickInternal"; "onAppointmentDropInternal": "onAppointmentDropInternal"; }, never, never, true, never>;
}

declare class AXSchedulerTimelineDayViewComponent extends NXComponent implements AfterViewInit, OnDestroy {
    private document;
    private destroyRef;
    private scheduler;
    private calendarService;
    private schedulerService;
    private resizeObserverCleanup?;
    readonly GAP_PX = 1;
    readonly: _angular_core.InputSignal<boolean>;
    draggable: _angular_core.InputSignal<boolean>;
    hasActions: _angular_core.InputSignal<boolean>;
    dragStartDelay: _angular_core.InputSignal<number>;
    calendar: _angular_core.InputSignal<string>;
    showResourceHeaders: _angular_core.InputSignal<boolean>;
    date: _angular_core.InputSignal<AXDateTime>;
    endDayHour: _angular_core.InputSignal<number>;
    selectedAppointmentId: _angular_core.InputSignal<string | number>;
    protected isActive(appointmentId: string | number): boolean;
    startDayHour: _angular_core.InputSignal<number>;
    showUnassignedAppointments: _angular_core.InputSignal<boolean>;
    resources: _angular_core.InputSignal<AXSchedulerResource[]>;
    showCurrentTimeIndicator: _angular_core.InputSignal<boolean>;
    resourceTemplate: _angular_core.InputSignal<TemplateRef<unknown>>;
    appointments: _angular_core.InputSignal<AXSchedulerAppointment[]>;
    tooltipTemplate: _angular_core.InputSignal<string | TemplateRef<unknown>>;
    private dragStartSlotId;
    private dragStartSlotResourceId;
    currentTimeLineElement: _angular_core.Signal<ElementRef<HTMLElement>>;
    /**
     * Gets appointments grouped by resources for timeline view.
     */
    protected appointmentsByResource: _angular_core.Signal<Map<any, AXSchedulerAppointment[]>>;
    /**
     * Gets all resource IDs including unassigned if applicable.
     */
    protected resourceIds: _angular_core.Signal<any[]>;
    /**
     * Processes original appointments to get segments relevant to this specific day and its viewable hours.
     * Filters out original all-day events.
     */
    private processedSegmentsForLayout;
    slotClickedInternal: _angular_core.OutputEmitterRef<AXSchedulerSlotMouseEvent>;
    slotDblClickedInternal: _angular_core.OutputEmitterRef<AXSchedulerSlotMouseEvent>;
    slotRightClickedInternal: _angular_core.OutputEmitterRef<AXSchedulerSlotMouseEvent>;
    appointmentClickedInternal: _angular_core.OutputEmitterRef<AXSchedulerAppointmentMouseEvent>;
    appointmentDblClickedInternal: _angular_core.OutputEmitterRef<AXSchedulerAppointmentMouseEvent>;
    appointmentRightClickedInternal: _angular_core.OutputEmitterRef<AXSchedulerAppointmentMouseEvent>;
    onActionClickInternal: _angular_core.OutputEmitterRef<AXSchedulerAppointmentMouseEvent>;
    onAppointmentDropInternal: _angular_core.OutputEmitterRef<AXSchedulerSlotDropEvent>;
    private readonly eventOutputMap;
    protected handleAppointmentEvent(mouseEvent: MouseEvent, appointmentItem: AXSchedulerAppointment): void;
    protected handleSlotEvent(mouseEvent: MouseEvent, startDate: AXDateTime): void;
    protected handleDrop(e: AXDropZoneDropEvent, startDate: AXDateTime, resourceId?: any): void;
    protected handleActionClick(event: MouseEvent, appointmentItem: AXSchedulerAppointment): void;
    protected hoursArray: _angular_core.Signal<AXDateTime[]>;
    protected appointmentLayouts: _angular_core.Signal<AXSchedulerAppointmentLayout[]>;
    /**
     * Gets appointments for a specific resource.
     */
    protected getAppointmentsForResource(resourceId: any): AXSchedulerAppointment[];
    /**
     * Gets resource title by ID.
     */
    protected getResourceTitle(resourceId: any): string;
    protected getResourceContext(resourceId: any): AXSchedulerResource;
    protected getCurrentTimePosition(): number | null;
    protected getCurrentTimePositionWithOffset(): string | null;
    ngAfterViewInit(): void;
    ngOnDestroy(): void;
    private setupCurrentTimeScroll;
    /**
     * Gets appointment layouts for a specific resource with proper positioning.
     */
    protected getAppointmentLayoutsForResource(resourceId: any): AXSchedulerAppointmentLayout[];
    /**
     * Calculates the height for a resource row based on its appointments.
     */
    protected getResourceRowHeight(resourceId: any): string;
    /**
     * Calculates the maximum number of overlapping appointment rows needed.
     */
    private calculateMaxOverlappingRows;
    protected getSlotId(e: PointerEvent): void;
    static ɵfac: _angular_core.ɵɵFactoryDeclaration<AXSchedulerTimelineDayViewComponent, never>;
    static ɵcmp: _angular_core.ɵɵComponentDeclaration<AXSchedulerTimelineDayViewComponent, "ax-scheduler-timeline-day-view", never, { "readonly": { "alias": "readonly"; "required": false; "isSignal": true; }; "draggable": { "alias": "draggable"; "required": false; "isSignal": true; }; "hasActions": { "alias": "hasActions"; "required": false; "isSignal": true; }; "dragStartDelay": { "alias": "dragStartDelay"; "required": false; "isSignal": true; }; "calendar": { "alias": "calendar"; "required": false; "isSignal": true; }; "showResourceHeaders": { "alias": "showResourceHeaders"; "required": false; "isSignal": true; }; "date": { "alias": "date"; "required": true; "isSignal": true; }; "endDayHour": { "alias": "endDayHour"; "required": true; "isSignal": true; }; "selectedAppointmentId": { "alias": "selectedAppointmentId"; "required": false; "isSignal": true; }; "startDayHour": { "alias": "startDayHour"; "required": true; "isSignal": true; }; "showUnassignedAppointments": { "alias": "showUnassignedAppointments"; "required": false; "isSignal": true; }; "resources": { "alias": "resources"; "required": false; "isSignal": true; }; "showCurrentTimeIndicator": { "alias": "showCurrentTimeIndicator"; "required": false; "isSignal": true; }; "resourceTemplate": { "alias": "resourceTemplate"; "required": false; "isSignal": true; }; "appointments": { "alias": "appointments"; "required": false; "isSignal": true; }; "tooltipTemplate": { "alias": "tooltipTemplate"; "required": false; "isSignal": true; }; }, { "slotClickedInternal": "slotClickedInternal"; "slotDblClickedInternal": "slotDblClickedInternal"; "slotRightClickedInternal": "slotRightClickedInternal"; "appointmentClickedInternal": "appointmentClickedInternal"; "appointmentDblClickedInternal": "appointmentDblClickedInternal"; "appointmentRightClickedInternal": "appointmentRightClickedInternal"; "onActionClickInternal": "onActionClickInternal"; "onAppointmentDropInternal": "onAppointmentDropInternal"; }, never, never, true, never>;
}

interface TimelineMonthViewDayData {
    date: AXDateTime;
    dayIndex: number;
    visibleAppointments: AXSchedulerAppointmentSegment[];
    hiddenAppointments: AXSchedulerAppointmentSegment[];
    moreCount: number;
    holiday?: {
        state: 'holiday' | 'weekend' | 'none';
        holiday?: AXHolidayDate;
    };
    appointmentsByResource?: Map<string, {
        visible: AXSchedulerAppointmentSegment[];
        hidden: AXSchedulerAppointmentSegment[];
        moreCount: number;
    }>;
}
type AXSchedulerTimelineSpanningAppointment = {
    appointment: AXSchedulerAppointment;
    startDayIndex: number;
    spanCount: number;
    rowIndex: number;
    isStartClipped: boolean;
    isEndClipped: boolean;
};
declare class AXSchedulerTimelineMonthViewComponent extends NXComponent implements AfterViewInit, OnDestroy {
    private document;
    private destroyRef;
    private scheduler;
    private calendarService;
    private schedulerService;
    private resizeObserverCleanup?;
    private readonly MAX_VISIBLE_APPOINTMENTS_PER_DAY;
    private isMultiDayAppointment;
    protected spanningAppointments: _angular_core.Signal<AXSchedulerTimelineSpanningAppointment[]>;
    private multiDayAppointmentIds;
    protected getSpanningAppointmentsForResource(resourceId: any): AXSchedulerTimelineSpanningAppointment[];
    protected maxSpanningRows: _angular_core.Signal<number>;
    protected getMaxSpanningRowsForResource(resourceId: any): number;
    readonly: _angular_core.InputSignal<boolean>;
    draggable: _angular_core.InputSignal<boolean>;
    hasActions: _angular_core.InputSignal<boolean>;
    dragStartDelay: _angular_core.InputSignal<number>;
    calendar: _angular_core.InputSignal<string>;
    showResourceHeaders: _angular_core.InputSignal<boolean>;
    date: _angular_core.InputSignal<AXDateTime>;
    showUnassignedAppointments: _angular_core.InputSignal<boolean>;
    selectedAppointmentId: _angular_core.InputSignal<string | number>;
    protected isActive(appointmentId: string | number): boolean;
    resources: _angular_core.InputSignal<AXSchedulerResource[]>;
    showCurrentTimeIndicator: _angular_core.InputSignal<boolean>;
    resourceTemplate: _angular_core.InputSignal<TemplateRef<unknown>>;
    appointments: _angular_core.InputSignal<AXSchedulerAppointment[]>;
    tooltipTemplate: _angular_core.InputSignal<string | TemplateRef<unknown>>;
    private dragStartSlotId;
    private dragStartSlotResourceId;
    currentTimeLineElement: _angular_core.Signal<ElementRef<HTMLElement>>;
    protected processedDayData: _angular_core.Signal<TimelineMonthViewDayData[]>;
    slotClickedInternal: _angular_core.OutputEmitterRef<AXSchedulerSlotMouseEvent>;
    slotDblClickedInternal: _angular_core.OutputEmitterRef<AXSchedulerSlotMouseEvent>;
    slotRightClickedInternal: _angular_core.OutputEmitterRef<AXSchedulerSlotMouseEvent>;
    appointmentClickedInternal: _angular_core.OutputEmitterRef<AXSchedulerAppointmentMouseEvent>;
    appointmentDblClickedInternal: _angular_core.OutputEmitterRef<AXSchedulerAppointmentMouseEvent>;
    appointmentRightClickedInternal: _angular_core.OutputEmitterRef<AXSchedulerAppointmentMouseEvent>;
    onActionClickInternal: _angular_core.OutputEmitterRef<AXSchedulerAppointmentMouseEvent>;
    onAppointmentDropInternal: _angular_core.OutputEmitterRef<AXSchedulerSlotDropEvent>;
    private readonly eventOutputMap;
    protected handleAppointmentEvent(mouseEvent: MouseEvent, appointmentItem: AXSchedulerAppointment): void;
    protected handleSlotEvent(mouseEvent: MouseEvent, date: AXDateTime): void;
    protected handleDrop(e: AXDropZoneDropEvent, date: AXDateTime, resourceId?: any): void;
    protected handleActionClick(event: MouseEvent, appointmentItem: AXSchedulerAppointment): void;
    protected isToday(date: AXDateTime): boolean;
    protected isHoliday(date: AXDateTime): {
        state: 'holiday' | 'weekend' | 'none';
        holiday?: AXHolidayDate;
    };
    /**
     * Gets appointments grouped by resources for timeline view.
     */
    protected appointmentsByResource: _angular_core.Signal<Map<any, AXSchedulerAppointment[]>>;
    /**
     * Gets all resource IDs including unassigned if applicable.
     */
    protected resourceIds: _angular_core.Signal<any[]>;
    /**
     * Gets appointments for a specific resource.
     */
    protected getAppointmentsForResource(resourceId: any): AXSchedulerAppointment[];
    /**
     * Gets resource title by ID.
     */
    protected getResourceTitle(resourceId: any): string;
    protected getResourceContext(resourceId: any): AXSchedulerResource;
    protected getCurrentTimePosition(): number | null;
    ngAfterViewInit(): void;
    ngOnDestroy(): void;
    private setupCurrentTimeScroll;
    /**
     * Gets appointments for a specific resource and day.
     */
    protected getAppointmentsForResourceAndDay(resourceId: any, dayData: TimelineMonthViewDayData): {
        visible: AXSchedulerAppointmentSegment[];
        hidden: AXSchedulerAppointmentSegment[];
        moreCount: number;
    };
    protected getSlotId(e: PointerEvent): void;
    /**
     * Gets the height for a specific resource row based on appointments.
     */
    protected getResourceRowHeight(resourceId: any): string;
    /**
     * Calculates the maximum number of overlapping appointment rows needed.
     * This is a simplified version for timeline month view.
     */
    protected calculateMaxOverlappingRows(appointments: AXSchedulerAppointmentSegment[]): number;
    protected shouldShowCurrentTimeForDay(dayDate: AXDateTime): boolean;
    static ɵfac: _angular_core.ɵɵFactoryDeclaration<AXSchedulerTimelineMonthViewComponent, never>;
    static ɵcmp: _angular_core.ɵɵComponentDeclaration<AXSchedulerTimelineMonthViewComponent, "ax-scheduler-timeline-month-view", never, { "readonly": { "alias": "readonly"; "required": false; "isSignal": true; }; "draggable": { "alias": "draggable"; "required": false; "isSignal": true; }; "hasActions": { "alias": "hasActions"; "required": false; "isSignal": true; }; "dragStartDelay": { "alias": "dragStartDelay"; "required": false; "isSignal": true; }; "calendar": { "alias": "calendar"; "required": false; "isSignal": true; }; "showResourceHeaders": { "alias": "showResourceHeaders"; "required": false; "isSignal": true; }; "date": { "alias": "date"; "required": true; "isSignal": true; }; "showUnassignedAppointments": { "alias": "showUnassignedAppointments"; "required": false; "isSignal": true; }; "selectedAppointmentId": { "alias": "selectedAppointmentId"; "required": false; "isSignal": true; }; "resources": { "alias": "resources"; "required": false; "isSignal": true; }; "showCurrentTimeIndicator": { "alias": "showCurrentTimeIndicator"; "required": false; "isSignal": true; }; "resourceTemplate": { "alias": "resourceTemplate"; "required": false; "isSignal": true; }; "appointments": { "alias": "appointments"; "required": false; "isSignal": true; }; "tooltipTemplate": { "alias": "tooltipTemplate"; "required": false; "isSignal": true; }; }, { "slotClickedInternal": "slotClickedInternal"; "slotDblClickedInternal": "slotDblClickedInternal"; "slotRightClickedInternal": "slotRightClickedInternal"; "appointmentClickedInternal": "appointmentClickedInternal"; "appointmentDblClickedInternal": "appointmentDblClickedInternal"; "appointmentRightClickedInternal": "appointmentRightClickedInternal"; "onActionClickInternal": "onActionClickInternal"; "onAppointmentDropInternal": "onAppointmentDropInternal"; }, never, never, true, never>;
}

/**
 * Represents a spanning appointment in the timeline-multi-day view.
 */
interface AXSchedulerTimelineMultiDaySpanningAppointment {
    appointment: AXSchedulerAppointment;
    startDayIndex: number;
    spanCount: number;
    rowIndex: number;
    isStartClipped: boolean;
    isEndClipped: boolean;
    resourceId?: unknown;
}
interface TimelineMultiDayDaySlot {
    date: AXDateTime;
    originalAppointmentsForThisDay: AXSchedulerAppointment[];
    holiday?: {
        state: 'holiday' | 'weekend' | 'none';
        holiday?: AXHolidayDate;
    };
}
declare class AXSchedulerTimelineMultiDayViewComponent extends NXComponent implements AfterViewInit, OnDestroy {
    private destroyRef;
    private scheduler;
    private calendarService;
    private schedulerService;
    private resizeObserverCleanup?;
    daysCount: _angular_core.InputSignal<number>;
    readonly: _angular_core.InputSignal<boolean>;
    draggable: _angular_core.InputSignal<boolean>;
    hasActions: _angular_core.InputSignal<boolean>;
    dragStartDelay: _angular_core.InputSignal<number>;
    calendar: _angular_core.InputSignal<string>;
    showResourceHeaders: _angular_core.InputSignal<boolean>;
    date: _angular_core.InputSignal<AXDateTime>;
    endDayHour: _angular_core.InputSignal<number>;
    selectedAppointmentId: _angular_core.InputSignal<string | number>;
    protected isActive(appointmentId: string | number): boolean;
    showCurrentTimeIndicator: _angular_core.InputSignal<boolean>;
    startDayHour: _angular_core.InputSignal<number>;
    showUnassignedAppointments: _angular_core.InputSignal<boolean>;
    resources: _angular_core.InputSignal<AXSchedulerResource[]>;
    resourceTemplate: _angular_core.InputSignal<TemplateRef<unknown>>;
    appointments: _angular_core.InputSignal<AXSchedulerAppointment[]>;
    tooltipTemplate: _angular_core.InputSignal<string | TemplateRef<unknown>>;
    currentTimeLineElement: _angular_core.Signal<ElementRef<HTMLElement>>;
    protected daysDataForTimelineViews: _angular_core.Signal<TimelineMultiDayDaySlot[]>;
    /**
     * Checks if an appointment spans multiple days.
     */
    private isMultiDayAppointment;
    /**
     * Computes spanning appointments for multi-day events across the view.
     */
    protected spanningAppointments: _angular_core.Signal<AXSchedulerTimelineMultiDaySpanningAppointment[]>;
    /**
     * Gets the set of multi-day appointment IDs to exclude from individual day views.
     */
    protected multiDayAppointmentIds: _angular_core.Signal<Set<unknown>>;
    /**
     * Gets spanning appointments filtered for a specific resource.
     */
    protected getSpanningAppointmentsForResource(resourceId: unknown): AXSchedulerTimelineMultiDaySpanningAppointment[];
    /**
     * Gets the maximum number of spanning rows for a resource.
     */
    protected getMaxSpanningRowsForResource(resourceId: unknown): number;
    /**
     * Gets the maximum number of spanning rows across all appointments (for non-resource layouts).
     */
    protected maxSpanningRows: _angular_core.Signal<number>;
    /**
     * Filters appointments for a day, excluding multi-day appointments.
     */
    protected getFilteredAppointmentsForDay(originalAppointments: AXSchedulerAppointment[]): AXSchedulerAppointment[];
    /**
     * Handles clicking on a spanning appointment.
     */
    protected handleSpanningAppointmentEvent(event: MouseEvent, appointment: AXSchedulerAppointment): void;
    /**
     * Handles action click on spanning appointment.
     */
    protected handleSpanningActionClick(event: MouseEvent, appointment: AXSchedulerAppointment): void;
    slotClickedInternal: _angular_core.OutputEmitterRef<AXSchedulerSlotMouseEvent>;
    slotDblClickedInternal: _angular_core.OutputEmitterRef<AXSchedulerSlotMouseEvent>;
    slotRightClickedInternal: _angular_core.OutputEmitterRef<AXSchedulerSlotMouseEvent>;
    appointmentClickedInternal: _angular_core.OutputEmitterRef<AXSchedulerAppointmentMouseEvent>;
    appointmentDblClickedInternal: _angular_core.OutputEmitterRef<AXSchedulerAppointmentMouseEvent>;
    appointmentRightClickedInternal: _angular_core.OutputEmitterRef<AXSchedulerAppointmentMouseEvent>;
    onActionClickInternal: _angular_core.OutputEmitterRef<AXSchedulerAppointmentMouseEvent>;
    onAppointmentDropInternal: _angular_core.OutputEmitterRef<AXSchedulerSlotDropEvent>;
    protected handleDrop(event: AXSchedulerSlotDropEvent, resourceId: any): void;
    protected isToday(date: AXDateTime): boolean;
    /**
     * Gets appointments grouped by resources for timeline view.
     */
    protected appointmentsByResource: _angular_core.Signal<Map<any, AXSchedulerAppointment[]>>;
    /**
     * Gets all resource IDs including unassigned if applicable.
     */
    protected resourceIds: _angular_core.Signal<any[]>;
    /**
     * Gets appointments for a specific resource.
     */
    protected getAppointmentsForResource(resourceId: any): AXSchedulerAppointment[];
    /**
     * Gets resource title by ID.
     */
    protected getResourceTitle(resourceId: any): string;
    protected getResourceContext(resourceId: any): AXSchedulerResource;
    protected getCurrentTimePosition(): number | null;
    protected shouldShowCurrentTimeForDay(dayDate: AXDateTime): boolean;
    ngAfterViewInit(): void;
    ngOnDestroy(): void;
    private setupCurrentTimeScroll;
    /**
     * Gets appointments for a specific resource and day.
     */
    protected getAppointmentsForResourceAndDay(resourceId: any, dayAppointments: AXSchedulerAppointment[]): AXSchedulerAppointment[];
    /**
     * Gets the height for a specific resource across all days.
     */
    protected getResourceRowHeight(resourceId: unknown): string;
    /**
     * Calculates the maximum number of overlapping rows for a set of appointments.
     * Uses the actual segmented times that will be displayed in the timeline view.
     */
    private calculateMaxOverlappingRowsForAppointments;
    /**
     * Gets the hours array for time slots display.
     */
    protected getHoursArray(): AXDateTime[];
    /**
     * Gets the number of hours for CSS calculations.
     */
    protected getHoursCount(): number;
    protected isHoliday(date: AXDateTime): {
        state: 'holiday' | 'weekend' | 'none';
        holiday?: AXHolidayDate;
    };
    static ɵfac: _angular_core.ɵɵFactoryDeclaration<AXSchedulerTimelineMultiDayViewComponent, never>;
    static ɵcmp: _angular_core.ɵɵComponentDeclaration<AXSchedulerTimelineMultiDayViewComponent, "ax-scheduler-timeline-multi-day-view", never, { "daysCount": { "alias": "daysCount"; "required": false; "isSignal": true; }; "readonly": { "alias": "readonly"; "required": false; "isSignal": true; }; "draggable": { "alias": "draggable"; "required": false; "isSignal": true; }; "hasActions": { "alias": "hasActions"; "required": false; "isSignal": true; }; "dragStartDelay": { "alias": "dragStartDelay"; "required": false; "isSignal": true; }; "calendar": { "alias": "calendar"; "required": false; "isSignal": true; }; "showResourceHeaders": { "alias": "showResourceHeaders"; "required": false; "isSignal": true; }; "date": { "alias": "date"; "required": true; "isSignal": true; }; "endDayHour": { "alias": "endDayHour"; "required": true; "isSignal": true; }; "selectedAppointmentId": { "alias": "selectedAppointmentId"; "required": false; "isSignal": true; }; "showCurrentTimeIndicator": { "alias": "showCurrentTimeIndicator"; "required": false; "isSignal": true; }; "startDayHour": { "alias": "startDayHour"; "required": true; "isSignal": true; }; "showUnassignedAppointments": { "alias": "showUnassignedAppointments"; "required": false; "isSignal": true; }; "resources": { "alias": "resources"; "required": false; "isSignal": true; }; "resourceTemplate": { "alias": "resourceTemplate"; "required": false; "isSignal": true; }; "appointments": { "alias": "appointments"; "required": false; "isSignal": true; }; "tooltipTemplate": { "alias": "tooltipTemplate"; "required": false; "isSignal": true; }; }, { "slotClickedInternal": "slotClickedInternal"; "slotDblClickedInternal": "slotDblClickedInternal"; "slotRightClickedInternal": "slotRightClickedInternal"; "appointmentClickedInternal": "appointmentClickedInternal"; "appointmentDblClickedInternal": "appointmentDblClickedInternal"; "appointmentRightClickedInternal": "appointmentRightClickedInternal"; "onActionClickInternal": "onActionClickInternal"; "onAppointmentDropInternal": "onAppointmentDropInternal"; }, never, never, true, never>;
}

interface TimelineYearViewDayData {
    date: AXDateTime;
    dayIndex: number;
    visibleAppointments: AXSchedulerAppointmentSegment[];
    hiddenAppointments: AXSchedulerAppointmentSegment[];
    moreCount: number;
    holiday?: {
        state: 'holiday' | 'weekend' | 'none';
        holiday?: AXHolidayDate;
    };
    appointmentsByResource?: Map<string, {
        visible: AXSchedulerAppointmentSegment[];
        hidden: AXSchedulerAppointmentSegment[];
        moreCount: number;
    }>;
}
type AXSchedulerTimelineYearSpanningAppointment = {
    appointment: AXSchedulerAppointment;
    startDayIndex: number;
    spanCount: number;
    rowIndex: number;
    isStartClipped: boolean;
    isEndClipped: boolean;
};
declare class AXSchedulerTimelineYearViewComponent extends NXComponent implements AfterViewInit, OnDestroy {
    private document;
    private destroyRef;
    private scheduler;
    private calendarService;
    private schedulerService;
    private resizeObserverCleanup?;
    private readonly MAX_VISIBLE_APPOINTMENTS_PER_DAY;
    private isMultiDayAppointment;
    protected spanningAppointments: _angular_core.Signal<AXSchedulerTimelineYearSpanningAppointment[]>;
    private multiDayAppointmentIds;
    protected getSpanningAppointmentsForResource(resourceId: any): AXSchedulerTimelineYearSpanningAppointment[];
    protected maxSpanningRows: _angular_core.Signal<number>;
    protected getMaxSpanningRowsForResource(resourceId: any): number;
    readonly: _angular_core.InputSignal<boolean>;
    draggable: _angular_core.InputSignal<boolean>;
    hasActions: _angular_core.InputSignal<boolean>;
    dragStartDelay: _angular_core.InputSignal<number>;
    calendar: _angular_core.InputSignal<string>;
    showResourceHeaders: _angular_core.InputSignal<boolean>;
    date: _angular_core.InputSignal<AXDateTime>;
    showUnassignedAppointments: _angular_core.InputSignal<boolean>;
    selectedAppointmentId: _angular_core.InputSignal<string | number>;
    protected isActive(appointmentId: string | number): boolean;
    resources: _angular_core.InputSignal<AXSchedulerResource[]>;
    showCurrentTimeIndicator: _angular_core.InputSignal<boolean>;
    resourceTemplate: _angular_core.InputSignal<TemplateRef<unknown>>;
    appointments: _angular_core.InputSignal<AXSchedulerAppointment[]>;
    tooltipTemplate: _angular_core.InputSignal<string | TemplateRef<unknown>>;
    private dragStartSlotId;
    private dragStartSlotResourceId;
    currentTimeLineElement: _angular_core.Signal<ElementRef<HTMLElement>>;
    protected optimizedDragStartDelay: _angular_core.Signal<number>;
    protected processedDayData: _angular_core.Signal<TimelineYearViewDayData[]>;
    protected resourceIds: _angular_core.Signal<any[]>;
    private getHolidayInfo;
    protected isToday(date: AXDateTime): boolean;
    protected getResourceTitle(resourceId: any): string;
    protected getAppointmentsForResourceAndDay(resourceId: any, dayData: TimelineYearViewDayData): {
        visible: AXSchedulerAppointmentSegment[];
        hidden: AXSchedulerAppointmentSegment[];
        moreCount: number;
    };
    protected getResourceContext(resourceId: any): AXSchedulerResource;
    protected getCurrentTimePosition(): number | null;
    ngAfterViewInit(): void;
    ngOnDestroy(): void;
    private setupCurrentTimeScroll;
    slotClickedInternal: _angular_core.OutputEmitterRef<AXSchedulerSlotMouseEvent>;
    slotDblClickedInternal: _angular_core.OutputEmitterRef<AXSchedulerSlotMouseEvent>;
    slotRightClickedInternal: _angular_core.OutputEmitterRef<AXSchedulerSlotMouseEvent>;
    appointmentClickedInternal: _angular_core.OutputEmitterRef<AXSchedulerAppointmentMouseEvent>;
    appointmentDblClickedInternal: _angular_core.OutputEmitterRef<AXSchedulerAppointmentMouseEvent>;
    appointmentRightClickedInternal: _angular_core.OutputEmitterRef<AXSchedulerAppointmentMouseEvent>;
    onActionClickInternal: _angular_core.OutputEmitterRef<AXSchedulerAppointmentMouseEvent>;
    onAppointmentDropInternal: _angular_core.OutputEmitterRef<AXSchedulerSlotDropEvent>;
    private readonly eventOutputMap;
    protected handleAppointmentEvent(mouseEvent: MouseEvent, appointmentItem: AXSchedulerAppointment): void;
    protected handleSlotEvent(mouseEvent: MouseEvent, date: AXDateTime): void;
    protected handleDrop(e: AXDropZoneDropEvent, date: AXDateTime, resourceId?: any): void;
    protected handleActionClick(event: MouseEvent, appointmentItem: AXSchedulerAppointment): void;
    protected shouldShowCurrentTimeForDay(dayDate: AXDateTime): boolean;
    protected getSlotId(e: PointerEvent): void;
    static ɵfac: _angular_core.ɵɵFactoryDeclaration<AXSchedulerTimelineYearViewComponent, never>;
    static ɵcmp: _angular_core.ɵɵComponentDeclaration<AXSchedulerTimelineYearViewComponent, "ax-scheduler-timeline-year-view", never, { "readonly": { "alias": "readonly"; "required": false; "isSignal": true; }; "draggable": { "alias": "draggable"; "required": false; "isSignal": true; }; "hasActions": { "alias": "hasActions"; "required": false; "isSignal": true; }; "dragStartDelay": { "alias": "dragStartDelay"; "required": false; "isSignal": true; }; "calendar": { "alias": "calendar"; "required": false; "isSignal": true; }; "showResourceHeaders": { "alias": "showResourceHeaders"; "required": false; "isSignal": true; }; "date": { "alias": "date"; "required": true; "isSignal": true; }; "showUnassignedAppointments": { "alias": "showUnassignedAppointments"; "required": false; "isSignal": true; }; "selectedAppointmentId": { "alias": "selectedAppointmentId"; "required": false; "isSignal": true; }; "resources": { "alias": "resources"; "required": false; "isSignal": true; }; "showCurrentTimeIndicator": { "alias": "showCurrentTimeIndicator"; "required": false; "isSignal": true; }; "resourceTemplate": { "alias": "resourceTemplate"; "required": false; "isSignal": true; }; "appointments": { "alias": "appointments"; "required": false; "isSignal": true; }; "tooltipTemplate": { "alias": "tooltipTemplate"; "required": false; "isSignal": true; }; }, { "slotClickedInternal": "slotClickedInternal"; "slotDblClickedInternal": "slotDblClickedInternal"; "slotRightClickedInternal": "slotRightClickedInternal"; "appointmentClickedInternal": "appointmentClickedInternal"; "appointmentDblClickedInternal": "appointmentDblClickedInternal"; "appointmentRightClickedInternal": "appointmentRightClickedInternal"; "onActionClickInternal": "onActionClickInternal"; "onAppointmentDropInternal": "onAppointmentDropInternal"; }, never, never, true, never>;
}

declare class AXSchedulerModule {
    static ɵfac: _angular_core.ɵɵFactoryDeclaration<AXSchedulerModule, never>;
    static ɵmod: _angular_core.ɵɵNgModuleDeclaration<AXSchedulerModule, never, [typeof AXSchedulerComponent, typeof AXSchedulerDayViewComponent, typeof AXSchedulerWeekViewComponent, typeof AXSchedulerMonthViewComponent, typeof AXSchedulerAgendaViewComponent, typeof AXSchedulerTimelineDayViewComponent, typeof AXSchedulerTimelineMonthViewComponent, typeof AXSchedulerTimelineMultiDayViewComponent, typeof AXSchedulerTimelineYearViewComponent], [typeof AXSchedulerComponent, typeof AXSchedulerDayViewComponent, typeof AXSchedulerWeekViewComponent, typeof AXSchedulerMonthViewComponent, typeof AXSchedulerAgendaViewComponent, typeof AXSchedulerTimelineDayViewComponent, typeof AXSchedulerTimelineMonthViewComponent, typeof AXSchedulerTimelineMultiDayViewComponent, typeof AXSchedulerTimelineYearViewComponent]>;
    static ɵinj: _angular_core.ɵɵInjectorDeclaration<AXSchedulerModule>;
}

declare class AXSchedulerService {
    private formatService;
    private calendarService;
    readonly HOURS_PER_DAY = 24;
    readonly MINUTES_PER_HOUR = 60;
    readonly BLOCK_DURATION_MINUTES = 30;
    readonly MILLISECONDS_PER_MINUTE: number;
    readonly MILLISECONDS_PER_DAY: number;
    internalWeekend: _angular_core.WritableSignal<number[]>;
    internalHoliday: _angular_core.WritableSignal<AXHolidayDate[]>;
    /**
     * Checks if two appointments overlap in time.
     *
     * @param appointmentA - First appointment to check.
     * @param appointmentB - Second appointment to check.
     * @returns boolean - True if appointments overlap, false otherwise.
     */
    doAppointmentsOverlap(appointmentA: AXSchedulerAppointment, appointmentB: AXSchedulerAppointment): boolean;
    /**
     * Calculates appointment duration in minutes.
     *
     * @param Appointment - The appointment to calculate duration for.
     * @returns number - Duration in minutes.
     */
    calculateDurationInMinutes(Appointment: AXSchedulerAppointment): number;
    /**
     * Gets the day index and block index for a given date time within the view context.
     *
     * @param dateTime - The date time to get block identifier for.
     * @param viewStartDate - Start date of the view.
     * @param startHour - Start hour of the view.
     * @param endHour - End hour of the view (exclusive).
     * @param viewTotalDays - Total days in the view (default: 1).
     * @returns AXSchedulerBlockIdentifier | null - Block identifier or null if outside view.
     */
    getBlockIdentifier(dateTime: AXDateTime, viewStartDate: AXDateTime, startHour: number, endHour: number, // Exclusive end hour
    viewTotalDays?: number): AXSchedulerBlockIdentifier | null;
    /**
     * Groups appointments by the blocks they are ACTIVE in for a given view.
     *
     * @param singleDayAppointments - Array of appointment segments.
     * @param viewStartDate - Start date of the view.
     * @param startHour - Start hour of the view.
     * @param endHour - End hour of the view.
     * @param viewTotalDays - Total days in the view.
     * @returns AXSchedulerActiveAppointmentsInBlock - Active appointments grouped by blocks.
     */
    private calculateActiveAppointmentsInBlock;
    /**
     * Calculates day view concurrency information for appointments.
     *
     * @param singleDayAppointments - Array of appointment segments.
     * @param viewStartDate - Start date of the view.
     * @param startHour - Start hour of the view.
     * @param endHour - End hour of the view.
     * @returns Map<any, { maxConcurrency: number; effectiveTotalColumns: number }> - Concurrency information map.
     */
    calculateDayViewConcurrencyInfo(singleDayAppointments: AXSchedulerAppointmentSegment[], // These are segments for the current day
    viewStartDate: AXDateTime, startHour: number, endHour: number): Map<any, {
        maxConcurrency: number;
        effectiveTotalColumns: number;
    }>;
    /**
     * Groups appointments by day within a date range.
     *
     * @param appointments - Array of appointments.
     * @param viewStartDate - Start date of the view.
     * @param viewEndDate - End date of the view.
     * @returns Map<string, AXSchedulerAppointment[]> - Appointments grouped by day.
     */
    groupAppointmentsByDay(appointments: AXSchedulerAppointment[], viewStartDate: AXDateTime, // First day visible in the grid
    viewEndDate: AXDateTime): Map<string, AXSchedulerAppointment[]>;
    /**
     * Gets the day of week number for a given day name.
     *
     * @param dayName - The day name to get number for.
     * @returns number - Day number (1-7, where 1 is Sunday).
     */
    getDayOfWeekNumber(dayName: AXDayOfWeekName): number;
    /**
     * Gets slot data for a given start date and view.
     *
     * @param startDate - Start date for the slot.
     * @param view - View type.
     * @returns { startDate: AXDateTime; endDate: AXDateTime; view: AXSchedulerView } - Slot data.
     */
    getSlotData(startDate: AXDateTime, view: AXSchedulerView): {
        startDate: AXDateTime;
        endDate: AXDateTime;
        view: AXSchedulerView;
    };
    /**
     * Handles events for appointments and slots.
     *
     * @param event - The event to handle.
     * @param eventOutputMap - Map of event outputs.
     * @param eventType - Type of event ('appointment' or 'slot').
     */
    handleEvent(event: AXSchedulerSlotMouseEvent | AXSchedulerAppointmentMouseEvent, eventOutputMap: any, eventType: 'appointment' | 'slot'): void;
    /**
     * Calculates timeline layout for appointments.
     *
     * @param appt - The appointment to calculate layout for.
     * @param viewStartHour - Start hour of the view.
     * @param viewEndHour - End hour of the view.
     * @returns { left: string; width: string } | null - Layout information or null.
     */
    calculateTimelineLayout(appt: AXSchedulerAppointment, viewStartHour: number, // e.g., 8 for 8 AM
    viewEndHour: number): {
        left: string;
        width: string;
    } | null;
    /**
     * Gets cloned appointment segment for a specific day.
     *
     * @param appointment - The appointment to clone.
     * @param day - The day to get segment for.
     * @param viewStartHour - Start hour of the view.
     * @param viewEndHour - End hour of the view.
     * @param isFullDayCellContext - Whether this is for full day cell context.
     * @returns AXSchedulerAppointmentSegment | null - Cloned segment or null.
     */
    getClonedAppointmentSegmentOnDay(appointment: AXSchedulerAppointment, // This is the ORIGINAL appointment
    day: AXDateTime, viewStartHour: number, viewEndHour: number, isFullDayCellContext?: boolean): AXSchedulerAppointmentSegment | null;
    /**
     * Gets the original appointment from a segment.
     *
     * @param item - Appointment or appointment segment.
     * @returns AXSchedulerAppointment - The original appointment.
     */
    getOriginalAppointment(item: AXSchedulerAppointment | AXSchedulerAppointmentSegment): AXSchedulerAppointment;
    /**
     * Checks if a date is a holiday.
     *
     * @param date - The date to check.
     * @returns boolean - True if the date is a holiday.
     */
    isHoliday(date: AXDateTime): boolean;
    /**
     * Checks if a date is a weekend.
     *
     * @param date - The date to check.
     * @param calendar - The calendar type to use.
     * @returns boolean - True if the date is a weekend.
     */
    isWeekend(date: AXDateTime, calendar: string): boolean;
    /**
     * Filters appointments by resources and unassigned appointments.
     *
     * @param appointments - Array of appointments to filter.
     * @param resources - Array of resources.
     * @param showUnassignedAppointments - Whether to show appointments without resources.
     * @returns Map<any, AXSchedulerAppointment[]> - Appointments grouped by resource ID.
     */
    filterAppointmentsByResources(appointments: AXSchedulerAppointment[], resources: AXSchedulerResource[], showUnassignedAppointments?: boolean): Map<any, AXSchedulerAppointment[]>;
    /**
     * Gets appointments for a specific resource.
     *
     * @param appointments - Array of appointments.
     * @param resourceId - The resource ID to filter by.
     * @returns AXSchedulerAppointment[] - Filtered appointments.
     */
    getAppointmentsForResource(appointments: AXSchedulerAppointment[], resourceId: any): AXSchedulerAppointment[];
    /**
     * Gets all resource IDs including unassigned if applicable.
     *
     * @param resources - Array of resources.
     * @param showUnassignedAppointments - Whether to include unassigned appointments.
     * @returns string[] - Array of resource IDs.
     */
    getAllResourceIds(resources: AXSchedulerResource[], showUnassignedAppointments?: boolean): any[];
    /**
     * Calculates the updated appointment data after a drag-and-drop operation.
     *
     * This utility method handles the complex logic of preserving appointment duration
     * when dropping an appointment on a new slot. It correctly handles:
     * - Single-day timed events (preserves exact duration in milliseconds)
     * - All-day events (preserves the day span)
     * - Multi-day events (preserves the number of days spanned)
     * - Day-based views (agenda, month): preserves original time of day
     * - Time-slot views (day, week, timeline): uses the slot's time
     * - Resource ID changes
     *
     * @param event - The drop event from the scheduler's onAppointmentDrop output.
     * @returns AXSchedulerAppointmentDropResult - The calculated new appointment data,
     *          or null if the drop was on the same slot (no change needed).
     *
     * @example
     * ```typescript
     * // In your component:
     * handleAppointmentDrop(event: AXSchedulerSlotDropEvent) {
     *   const result = this.schedulerService.calculateAppointmentDropResult(event);
     *
     *   if (result.isSameSlotDrop) {
     *     return; // No change needed
     *   }
     *
     *   // Update your data
     *   this.appointments.update(appointments =>
     *     appointments.map(appt =>
     *       appt.id === event.appointment.id
     *         ? { ...appt, ...result }
     *         : appt
     *     )
     *   );
     * }
     * ```
     */
    calculateAppointmentDropResult(event: {
        appointment: AXSchedulerAppointment;
        slot: {
            startDate: {
                date: Date;
            };
            endDate?: {
                date: Date;
            };
            view?: AXSchedulerView;
            resourceId?: unknown;
        };
        isSameSlotDrop: boolean;
    }): AXSchedulerAppointmentDropResult;
    /**
     * Determines if a slot represents a day-based drop (entire day slot).
     * Day-based views (agenda, month, timeline-month, timeline-year) have slots
     * that start at 00:00:00 and span the entire day.
     *
     * @param slot - The slot to check.
     * @returns boolean - True if this is a day-based slot.
     */
    private isDayBasedSlotDrop;
    /**
     * Applies the drop result to an appointment, returning a new updated appointment object.
     *
     * This is a convenience method that combines the drop result with the original appointment.
     *
     * @param appointment - The original appointment to update.
     * @param dropResult - The result from calculateAppointmentDropResult.
     * @returns AXSchedulerAppointment - A new appointment object with updated fields.
     *
     * @example
     * ```typescript
     * handleAppointmentDrop(event: AXSchedulerSlotDropEvent) {
     *   const result = this.schedulerService.calculateAppointmentDropResult(event);
     *
     *   if (result.isSameSlotDrop) return;
     *
     *   this.appointments.update(appointments =>
     *     appointments.map(appt =>
     *       appt.id === event.appointment.id
     *         ? this.schedulerService.applyDropResult(appt, result)
     *         : appt
     *     )
     *   );
     * }
     * ```
     */
    applyDropResult(appointment: AXSchedulerAppointment, dropResult: AXSchedulerAppointmentDropResult): AXSchedulerAppointment;
    static ɵfac: _angular_core.ɵɵFactoryDeclaration<AXSchedulerService, never>;
    static ɵprov: _angular_core.ɵɵInjectableDeclaration<AXSchedulerService>;
}

export { AXSchedulerAgendaViewComponent, AXSchedulerComponent, AXSchedulerDayViewComponent, AXSchedulerModule, AXSchedulerMonthViewComponent, AXSchedulerService, AXSchedulerTimelineDayViewComponent, AXSchedulerTimelineMonthViewComponent, AXSchedulerTimelineMultiDayViewComponent, AXSchedulerTimelineYearViewComponent, AXSchedulerWeekViewComponent };
export type { AXDayOfWeekName, AXSchedulerActiveAppointmentsInBlock, AXSchedulerAllDaySlotData, AXSchedulerAppointment, AXSchedulerAppointmentDataSource, AXSchedulerAppointmentDataSourceFilter, AXSchedulerAppointmentDropResult, AXSchedulerAppointmentLayout, AXSchedulerAppointmentLoader, AXSchedulerAppointmentLoaderAsync, AXSchedulerAppointmentMouseEvent, AXSchedulerAppointmentSegment, AXSchedulerBlockIdentifier, AXSchedulerBlockOccupancyMap, AXSchedulerDateRange, AXSchedulerDayAppointmentLayout, AXSchedulerMonthDayCell, AXSchedulerMultiDayViewAppointment, AXSchedulerOverflowBadge, AXSchedulerResource, AXSchedulerSlotDropEvent, AXSchedulerSlotMouseEvent, AXSchedulerSpanningAppointment, AXSchedulerTimelineSpanningAppointment, AXSchedulerTimelineYearSpanningAppointment, AXSchedulerView, AgendaDayData, TimelineMonthViewDayData, TimelineMultiDayDaySlot, TimelineYearViewDayData };
