import { Nullable } from '@bimeister/utilities';
import { BehaviorSubject, Observable } from 'rxjs';
import { ScrollableComponent } from '../../../components/scrollable/components/scrollable/scrollable.component';
export declare abstract class TabsServiceBase<T> {
    protected readonly tabNameToHtmlElementMap: Map<string, HTMLElement>;
    private readonly activeTabNameState$;
    readonly activeTabName$: Observable<Nullable<T>>;
    protected readonly hostElement$: BehaviorSubject<Nullable<HTMLElement>>;
    protected readonly scrollable$: BehaviorSubject<Nullable<ScrollableComponent>>;
    protected readonly tabsHtmlElement$: BehaviorSubject<Nullable<HTMLElement>>;
    private readonly activeHtmlElement$;
    private readonly tabsContainerResize$;
    private readonly refresh$;
    readonly railHighlighterOffsetLeftPx$: Observable<number>;
    readonly railHighlighterWidthPx$: Observable<number>;
    private tabNames;
    private readonly isContentDraggingState$;
    readonly isContentDragging$: Observable<boolean>;
    registerTab(tabName: T): void;
    unregisterTab(tabName: T): void;
    setInitialTab(): void;
    setActiveTab(tabName: T): void;
    registerTabsHtmlElement(htmlElement: HTMLElement): void;
    registerHostHtmlElement(htmlElement: HTMLElement): void;
    registerScrollable(scrollable: ScrollableComponent): void;
    registerTabHtmlElement(tabName: T, htmlElement: HTMLElement): void;
    setContentDraggingStateState(isContentDragging: boolean): void;
    private correctScrollLeftByTargetTab;
    private resetActiveTabIfUnregisteredTabIsActive;
}
