import { type StoreApi } from "zustand/vanilla";
import type { ColorRepresentation } from "three";
import type { BmtModelProps, BmtModelStructure } from "../Loaders/BmtLoader";
import type { ViewerApi } from "../api/ViewerApi";
export type UserDevice = "pc" | "mobile";
export type ViewerGridAxisSide = "bottom" | "left" | "right" | "top";
export type ViewerGridAxesVisibility = Record<ViewerGridAxisSide, boolean> & {
    visible: boolean;
};
export interface SelectedStore {
    [modelID: number]: Set<number>;
}
export type ViewerModelPropsStore = Record<number, BmtModelProps>;
export type ViewerModelStructureStore = Record<number, BmtModelStructure>;
export type ViewerModelNamesStore = Record<number, string>;
export declare const DEFAULT_SELECTION_COLOR = "rgb(17, 148, 189)";
export declare const DEFAULT_PRESELECTION_COLOR = "rgb(104, 198, 227)";
export type ViewerStore = {
    api: ViewerApi | null;
    defaultHotkeysEnabled: boolean;
    modelNames: ViewerModelNamesStore;
    modelProps: ViewerModelPropsStore;
    modelStructure: ViewerModelStructureStore;
    gridAxesVisibility: ViewerGridAxesVisibility;
    preselectionColor: ColorRepresentation;
    selected: SelectedStore;
    selectionColor: ColorRepresentation;
    selectionInteractionDisabled: boolean;
    showNavCube: boolean;
    showStats: boolean;
    userDevice: UserDevice;
    setApi: (api: ViewerApi | null) => void;
    setDefaultHotkeysEnabled: (enabled: boolean) => void;
    setGridAxesVisibility: (gridAxesVisibility: Partial<ViewerGridAxesVisibility>) => void;
    setGridAxisVisibility: (side: ViewerGridAxisSide, visible: boolean) => void;
    setShowGridAxes: (visible: boolean) => void;
    setModelNames: (modelNames: ViewerModelNamesStore) => void;
    setModelProps: (modelProps: ViewerModelPropsStore) => void;
    setModelStructure: (modelStructure: ViewerModelStructureStore) => void;
    setPreselectionColor: (color: ColorRepresentation) => void;
    setSelectionColor: (color: ColorRepresentation) => void;
    setSelectionInteractionDisabled: (disabled: boolean) => void;
    setShowNavCube: (showNavCube: boolean) => void;
    setShowStats: (showStats: boolean) => void;
    setSelection: (selected: SelectedStore) => void;
    setSelected: (modelID: number, ids: number[], reset?: boolean) => void;
    addSelected: (modelID: number, ids: number[]) => void;
    removeSelected: (modelID: number, ids: number[]) => void;
    resetSelected: (modelID?: number) => void;
    setUserDevice: (userDevice: UserDevice) => void;
};
export type ViewerStoreApi = StoreApi<ViewerStore>;
export declare function createViewerStore(): StoreApi<ViewerStore>;
