import { Injector, OnDestroy } from '@angular/core';
import { ActivatedRouteSnapshot, Router } from '@angular/router';
import { Commands, Facade } from '@w11k/tydux';
import { Observable } from 'rxjs';
import { KeyboardEventProcessor } from '../core/event.service';
import { PresentationService } from '../core/presentation.service';
import { Coordinates, Slide, Slides } from '../core/presentation.types';
export declare type Mode = 'slide' | 'presenter';
export declare class SlideBySlideState {
    coordinatesMaxDepth: number;
    slides: Slide[];
    slideMap: {
        [key: string]: Slide;
    };
    currentSlide: Slide | undefined;
    currentMode: Mode | undefined;
    constructor();
}
export declare class SlideBySlideMutator extends Commands<SlideBySlideState> {
    constructor();
    setCurrentSlide(slide: Slide): void;
    setCurrentMode(mode: Mode): void;
    setSlides(slides: Slides): void;
}
export declare class SlideBySlideService extends Facade<SlideBySlideState, SlideBySlideMutator> implements OnDestroy {
    private readonly presentation;
    private readonly router;
    constructor(injector: Injector, presentation: PresentationService, router: Router);
    navigateToNext(coordinatesToKeep: number | undefined, mode?: string): void;
    navigateToPrevious(coordinatesToKeep: number | undefined, mode?: string): void;
    previousSlide(coordinatesToKeep: number | undefined, prefix?: string): Observable<Slide | undefined>;
    nextSlide(coordinatesToKeep: number | undefined): Observable<Slide | undefined>;
    navigateToNextToc(mode?: string): void;
    navigateToPreviousToc(mode?: string): void;
    nextToc(direction: 'forward' | 'backward'): Observable<Slide | undefined>;
    navigateRelative(move: number, coordinatesToKeep: number | undefined): Observable<Slide | undefined>;
    navigateAbsolute(target: Coordinates | Slide | undefined, mode?: string): Promise<boolean> | undefined;
    navigateToFirst(prefix?: string): void;
    firstSlide(): Observable<Slide>;
    isValidCoordinate(coordinates: Coordinates): Observable<boolean>;
    private coordinatesToSlide;
    setCurrentModeAndSlide(route: ActivatedRouteSnapshot): void;
    private readonly onDestroy$;
    ngOnDestroy(): void;
}
export declare class NavigateSectionForward implements KeyboardEventProcessor {
    private readonly service;
    constructor(service: SlideBySlideService);
    init(events$: Observable<KeyboardEvent>): void;
}
export declare class NavigateSlideForward implements KeyboardEventProcessor {
    private readonly service;
    constructor(service: SlideBySlideService);
    init(events$: Observable<KeyboardEvent>): void;
}
export declare class NavigateSectionBackward implements KeyboardEventProcessor {
    private readonly service;
    constructor(service: SlideBySlideService);
    init(events$: Observable<KeyboardEvent>): void;
}
export declare class NavigateSlideBackward implements KeyboardEventProcessor {
    private readonly service;
    constructor(service: SlideBySlideService);
    init(events$: Observable<KeyboardEvent>): void;
}
export declare class NavigateToFirstSlide implements KeyboardEventProcessor {
    private readonly service;
    constructor(service: SlideBySlideService);
    init(events$: Observable<KeyboardEvent>): void;
}
export declare class NavigateToOverview implements KeyboardEventProcessor {
    private readonly service;
    private readonly presentation;
    constructor(service: SlideBySlideService, presentation: PresentationService);
    init(events$: Observable<KeyboardEvent>): void;
}
export declare class TogglePresenter implements KeyboardEventProcessor {
    private readonly service;
    private readonly router;
    constructor(service: SlideBySlideService, router: Router);
    init(events$: Observable<KeyboardEvent>): void;
}
