import { Color, Texture } from 'three';
import { WorldTree } from '../tree/WorldTree';
import { NodeRenderView } from '../tree/NodeRenderView';
import { PropertyInfo } from './PropertyManager';
import SpeckleRenderer from '../SpeckleRenderer';
import EventEmitter from '../EventEmitter';
import SpeckleStandardMaterial from '../materials/SpeckleStandardMaterial';
import SpecklePointMaterial from '../materials/SpecklePointMaterial';
export type FilteringState = {
    selectedObjects?: string[];
    hiddenObjects?: string[];
    isolatedObjects?: string[];
    colorGroups?: Record<string, string>[];
    userColorGroups?: {
        ids: string[];
        color: string;
    }[];
    activePropFilterKey?: string;
    passMin?: number | null;
    passMax?: number | null;
};
export declare enum FilterMaterialType {
    SELECT = 0,
    GHOST = 1,
    GRADIENT = 2,
    COLORED = 3,
    OVERLAY = 4,
    HIDDEN = 5
}
/** This needs to be rethunked */
export interface FilterMaterial {
    filterType: FilterMaterialType;
    userMaterial?: SpeckleStandardMaterial;
    rampIndex?: number;
    rampIndexColor?: Color;
    rampTexture?: Texture;
}
export declare class FilteringManager extends EventEmitter {
    WTI: WorldTree;
    private Renderer;
    private StateKey;
    private VisibilityState;
    private ColorStringFilterState;
    private ColorNumericFilterState;
    private SelectionState;
    private HighlightState;
    private UserspaceColorState;
    private ColorStringFilterState2;
    private UserMaterialState;
    private CurrentFilteringState;
    constructor(renderer: SpeckleRenderer, tree: WorldTree);
    hideObjects(objectIds: string[], stateKey?: string, includeDescendants?: boolean, ghost?: boolean): FilteringState;
    showObjects(objectIds: string[], stateKey?: string, includeDescendants?: boolean): FilteringState;
    isolateObjects(objectIds: string[], stateKey?: string, includeDescendants?: boolean, ghost?: boolean): FilteringState;
    unIsolateObjects(objectIds: string[], stateKey?: string, includeDescendants?: boolean, ghost?: boolean): FilteringState;
    private setVisibilityState;
    private visibilityWalk;
    private isolationWalk;
    setColorFilter(prop: PropertyInfo, ghost?: boolean): FilteringState;
    private setNumericColorFilter;
    private setStringColorFilter;
    removeColorFilter(): FilteringState;
    selectObjects(objectIds: string[]): FilteringState;
    highlightObjects(objectIds: string[], ghost?: boolean): FilteringState;
    setUserObjectColors(groups: {
        objectIds: string[];
        color: string;
    }[]): FilteringState;
    removeUserObjectColors(): FilteringState;
    setUserMaterials(groups: {
        objectIds: string[];
        material: SpeckleStandardMaterial | SpecklePointMaterial;
        rvs?: NodeRenderView[];
    }[]): FilteringState;
    removeUserMaterials(): FilteringState;
    private populateGenericState;
    resetSelection(): FilteringState;
    resetHighlight(): FilteringState;
    reset(): FilteringState;
    private setFilters;
    private idCache;
    private getDescendantIds;
}
