import { ElementRef, EventEmitter, OnDestroy, QueryList } from '@angular/core';
import { BehaviorSubject, Observable, Subject } from 'rxjs';
import { BsCalendarMonthService } from '@mintplayer/ng-bootstrap/calendar-month';
import { ESchedulerMode } from '../../enums/scheduler-mode';
import { DragOperation } from '../../interfaces/drag-operation';
import { PreviewEvent } from '../../interfaces/preview-event';
import { SchedulerEvent } from '../../interfaces/scheduler-event';
import { SchedulerEventPart } from '../../interfaces/scheduler-event-part';
import { SchedulerEventWithParts } from '../../interfaces/scheduler-event-with-parts';
import { TimeSlot } from '../../interfaces/time-slot';
import { BsTimelineService } from '../../services/timeline/timeline.service';
import { ResourceGroup } from '../../interfaces/resource-group';
import { Resource } from '../../interfaces/resource';
import { SchedulerStampWithSlots } from '../../interfaces/scheduler-stamp-with-slots';
import { WeekOptions } from '../../interfaces/week-options';
import { TimelineOptions } from '../../interfaces/timeline-options';
import * as i0 from "@angular/core";
export declare class BsSchedulerComponent implements OnDestroy {
    private calendarMonthService;
    private timelineService;
    constructor(calendarMonthService: BsCalendarMonthService, timelineService: BsTimelineService);
    resources$: BehaviorSubject<(Resource | ResourceGroup)[]>;
    events$: Observable<SchedulerEvent[]>;
    eventParts$: Observable<SchedulerEventWithParts[]>;
    eventPartsForThisWeek$: Observable<SchedulerEventPart[]>;
    timelinedEventPartsForThisWeek$: Observable<{
        total: number;
        parts: {
            part: SchedulerEventPart;
            index: number;
        }[];
    }>;
    weekOptions$: BehaviorSubject<WeekOptions>;
    timelineOptions$: BehaviorSubject<TimelineOptions>;
    previewEvent$: BehaviorSubject<PreviewEvent | null>;
    previewEventParts$: Observable<SchedulerEventWithParts | null>;
    previewEventPartsForThisWeek$: Observable<SchedulerEventPart[]>;
    currentWeekOrMonth$: BehaviorSubject<Date>;
    shownDays$: Observable<Date[]>;
    daysOfWeekWithTimestamps$: Observable<{
        start: number;
        end: number;
    }>;
    timeSlotDuration$: BehaviorSubject<number>;
    timeSlots$: BehaviorSubject<SchedulerStampWithSlots[]>;
    mouseState$: BehaviorSubject<boolean>;
    hoveredTimeSlot$: BehaviorSubject<TimeSlot | null>;
    hoveredEvent$: BehaviorSubject<SchedulerEvent | null>;
    destroyed$: Subject<unknown>;
    resourceGroupPresenterCounter: number;
    timeSlotElements: QueryList<ElementRef<HTMLDivElement>>;
    createTimeslot(date: Date, index: number, duration: number): TimeSlot;
    getResourcesForGroup(resourceOrGroup: Resource | ResourceGroup): Resource[];
    modes: typeof ESchedulerMode;
    mode$: BehaviorSubject<ESchedulerMode>;
    modeChange: EventEmitter<ESchedulerMode>;
    get mode(): ESchedulerMode;
    set mode(value: ESchedulerMode);
    weekOptionsChange: EventEmitter<WeekOptions>;
    get weekOptions(): WeekOptions;
    set weekOptions(value: WeekOptions);
    timelineOptionsChange: EventEmitter<TimelineOptions>;
    get timelineOptions(): TimelineOptions;
    set timelineOptions(value: TimelineOptions);
    maxInnerHeight: number | null;
    get resources(): (Resource | ResourceGroup)[];
    set resources(value: (Resource | ResourceGroup)[]);
    private addDays;
    onPreviousWeekOrMonth(): void;
    onNextWeekOrMonth(): void;
    private onChangeWeekOrMonth;
    onHoverEvent(ev: SchedulerEvent | null): void;
    onLeaveEvent(ev: SchedulerEvent | null): void;
    operation: DragOperation | null;
    dragStartTimeslot: TimeSlot | null;
    onCreateEvent(ev: MouseEvent, slot: TimeSlot): void;
    randomColor(): string;
    randomChannel(brightness: number): string;
    onStartDragEvent(eventPart: SchedulerEventPart, ev: MouseEvent): void;
    onStartResizeEvent(event: SchedulerEvent | null, position: 'top' | 'bottom'): void;
    private getHoveredTimeslot;
    onMousemove(ev: MouseEvent): void;
    onMouseUp(ev: MouseEvent): void;
    ngOnDestroy(): void;
    static ɵfac: i0.ɵɵFactoryDeclaration<BsSchedulerComponent, never>;
    static ɵcmp: i0.ɵɵComponentDeclaration<BsSchedulerComponent, "bs-scheduler", never, { "mode": "mode"; "weekOptions": "weekOptions"; "timelineOptions": "timelineOptions"; "maxInnerHeight": "maxInnerHeight"; "resources": "resources"; }, { "modeChange": "modeChange"; "weekOptionsChange": "weekOptionsChange"; "timelineOptionsChange": "timelineOptionsChange"; }, never, never, false, never>;
}
