/** @packageDocumentation
 * @module Tools
 */
import { BeEvent } from "@itwin/core-bentley";
import type { ScreenViewport, Viewport } from "@itwin/core-frontend";
/** Supported Hide, Isolate, and Emphasize Actions. These also serve as FeatureTracking Ids.
 * @public
 */
export declare enum HideIsolateEmphasizeAction {
    EmphasizeSelectedElements = "EmphasizeSelectedElements",
    IsolateSelectedElements = "IsolateSelectedElements",
    IsolateSelectedCategories = "IsolateSelectedCategories",
    IsolateSelectedModels = "IsolateSelectedModels",
    HideSelectedElements = "HideSelectedElements",
    HideSelectedModels = "HideSelectedModels",
    HideSelectedCategories = "HideSelectedCategories",
    ClearHiddenIsolatedEmphasized = "ClearHiddenIsolatedEmphasized",
    ClearOverrideModels = "ClearOverrideModels",
    ClearOverrideCategories = "ClearOverrideCategories"
}
/** Selection Context Action Event Argument
 * @public
 */
export interface EmphasizeElementsChangedArgs {
    /** viewport where action was performed */
    readonly viewport: ScreenViewport;
    /** action being performed */
    readonly action: HideIsolateEmphasizeAction;
}
/**
 * Interface for class that handles Hide, Isolate, and Emphasize Actions
 * @public
 */
export declare abstract class HideIsolateEmphasizeActionHandler {
    static emphasizeElementsChanged: BeEvent<(args: EmphasizeElementsChangedArgs) => void>;
    /** String Id sent to allow UI to refresh its display state.  */
    static get hideIsolateEmphasizeUiSyncId(): string;
    /**
     * Function run when `IsolateSelectedElementsModel` tool button is pressed
     */
    abstract processIsolateSelectedElementsModel(): Promise<void>;
    /**
     * Function run when `IsolateSelectedElementsModel` tool button is pressed
     */
    abstract processIsolateSelectedElementsCategory(): Promise<void>;
    /**
     * Function run when `HideSelectedElementsModel` tool button is pressed
     */
    abstract processIsolateSelected(clearSelection?: boolean): Promise<void>;
    /**
     * Function run when `HideSelectedElementsModel` tool button is pressed
     */
    abstract processHideSelectedElementsModel(): Promise<void>;
    /**
     * Function that is run when `HideSelectedElementsCategory` tool button is pressed
     */
    abstract processHideSelectedElementsCategory(): Promise<void>;
    /**
     * Function that is run when `HideSelected` tool button is pressed
     */
    abstract processHideSelected(): Promise<void>;
    /**
     * Function that is run when `EmphasizeSelected` tool button is pressed
     */
    abstract processEmphasizeSelected(): Promise<void>;
    /**
     * Function that is run when `ClearEmphasize` tool button is pressed
     */
    abstract processClearEmphasize(): Promise<void>;
    /**
     * Function that informs called if Hide, Isolate, or Emphasize of elements is active.
     */
    abstract areFeatureOverridesActive(vp: Viewport): boolean;
    /**
     * Function run when `ClearOverrideCategories` tool button is pressed
     */
    abstract processClearOverrideCategories(): Promise<void>;
    /**
     * Function run when `ClearOverrideModels` tool button is pressed
     */
    abstract processClearOverrideModels(): Promise<void>;
}
/** Provides helper functions for doing commands on logical selection like categories and subjects.
 * @public
 */
export declare class HideIsolateEmphasizeManager extends HideIsolateEmphasizeActionHandler {
    private static _overrideCategoryIds;
    private static _overrideModelIds;
    /** Returns true if there is only a category hilited. */
    private static categorySelected;
    /** Returns true if only a model is hilited. */
    private static modelSelected;
    /**
     * Hide the hilited categories.
     * @param vp Viewport to affect
     */
    private static hideSelectedCategory;
    /** Get sub categories that relate to the category Id */
    private static _getSubCategories;
    /**
     * Emphasize hilited categories.
     * @param vp Viewport to affect
     */
    static emphasizeSelectedCategory(vp: Viewport): Promise<void>;
    /**
     * Hide the selected model
     * @param vp Viewport to affect
     */
    private static hideSelectedModel;
    /**
     * Isolate the selected model
     * @param vp Viewport to affect
     */
    private static emphasizeSelectedModel;
    /**
     * Isolate the selected elements
     * @param vp Viewport to affect
     */
    static isolateSelected(vp: Viewport): void;
    /**
     * Hide the selected elements
     * @param vp Viewport to affect
     */
    static hideSelected(vp: Viewport): void;
    /**
     * Clear Hidden,Isolated, or Emphasized elements in specified view
     * @param vp Viewport to affect
     *
     */
    static clearEmphasize(vp: Viewport | undefined): void;
    /**
     * Emphasize the selected elements from either presentation layer's logical selection or selected graphics
     * @param vp Viewport to affect
     * @param emphasisSilhouette defaults to true
     */
    static emphasizeSelected(vp: Viewport, emphasisSilhouette?: boolean): Promise<void>;
    /**
     * Isolate hilited models.
     * @param vp Viewport to affect
     */
    static isolateSelectedModel(vp: Viewport): Promise<void>;
    /**
     * Isolate hilited categories.
     * @param vp Viewport to affect
     */
    private static isolateSelectedCategory;
    private static getSelectionSetElementModels;
    private static getSelectionSetElementCategories;
    /**
     * Isolate either based on Presentation selection, if defined, else the selected graphic elements
     * @param vp Viewport to affect
     */
    static isolateCommand(vp: Viewport): Promise<void>;
    /**
     * Isolate model from selected elements
     * @param vp Viewport to affect
     */
    static isolateSelectedElementsModel(vp: Viewport): Promise<void>;
    /**
     * Isolate the selected category found in SelectionSet elements
     * @param vp Viewport to affect
     */
    static isolateSelectedElementsCategory(vp: Viewport): Promise<void>;
    /**
     * Hide either based on Presentation selection, if defined, else the selected graphic elements
     * @param vp Viewport to affect
     */
    static hideCommand(vp: Viewport): Promise<void>;
    /**
     * Hide the models defined by the elements in the current SelectionSet
     * @param vp Viewport to affect
     */
    static hideSelectedElementsModel(vp: Viewport): Promise<void>;
    /**
     * Clear (restore) the previously hidden/isolated models hidden by hideSelectedElementsModel
     * @param vp Viewport to affect
     */
    static clearOverrideModels(vp: Viewport): void;
    /**
     * Determine if models are hidden by hideSelectedElementsModel or isolateSelectedElementsModel
     * @param vp Viewport to affect
     */
    static isOverrideModels(vp: Viewport): boolean;
    /**
     * Determine if categories are hidden by hideSelectedElementsCategory or isolateSelectedElementsCategory
     * @param vp Viewport to affect
     */
    static isOverrideCategories(vp: Viewport): boolean;
    /**
     * Hide the categories defined by the elements in the current SelectionSet
     * @param vp Viewport to affect
     */
    static hideSelectedElementsCategory(vp: Viewport): Promise<void>;
    /**
     * Clear (restore) the previously hidden categories hidden by hideSelectedElementsCategory
     * @param vp Viewport to affect
     */
    static clearOverrideCategories(vp: Viewport): void;
    /** Checks to see if any featureOverrideProviders are active */
    areFeatureOverridesActive(vp: Viewport): boolean;
    /**
     * Function that is run when `IsolateSelectedElementsModel` tool button is pressed
     */
    processIsolateSelectedElementsModel(): Promise<void>;
    /**
     * Function that is run when `IsolateSelectedElementsCategory` tool button is pressed
     */
    processIsolateSelectedElementsCategory(): Promise<void>;
    /**
     * Function that is run when `IsolateSelected` tool button is pressed
     */
    processIsolateSelected(clearSelection?: boolean): Promise<void>;
    /**
     * Function that is run when `HideSelectedElementsModel` tool button is pressed
     */
    processHideSelectedElementsModel(): Promise<void>;
    /**
     * Function that is run when `HideSelectedElementsCategory` tool button is pressed
     */
    processHideSelectedElementsCategory(): Promise<void>;
    /**
     * Function that is run when `HideSelected` tool button is pressed
     */
    processHideSelected(): Promise<void>;
    /**
     * Function that is run when `EmphasizeSelected` tool button is pressed
     */
    processEmphasizeSelected(): Promise<void>;
    /**
     * Function that is run when `ClearEmphasize` tool button is pressed
     */
    processClearEmphasize(): Promise<void>;
    /**
     * Function that is run when `ClearOverrideModels` tool button is pressed
     */
    processClearOverrideModels(): Promise<void>;
    /**
     * Function that is run when `ClearOverrideCategories` tool button is pressed
     */
    processClearOverrideCategories(): Promise<void>;
    /**
     * Add category ids to the category override cache (hidden or isolated categories)
     */
    static updateCategoryOverride(vp: Viewport, ids: string[]): void;
    /**
     * Add model ids to the model override cache (hidden or isolated models)
     */
    static updateModelOverride(vp: Viewport, ids: string[]): void;
    /**
     * Return the list of category overrides (hidden or isolated categories)
     */
    static getCategoryOverrides(vp: Viewport): Set<string> | undefined;
    /**
     * Return the list of model overrides (hidden or isolated models)
     */
    static getModelOverrides(vp: Viewport): Set<string> | undefined;
    /**
     * Clear the category override cache (hidden or isolated categories)
     */
    private static clearCategoryOverride;
    /**
     * Clear the model override cache (hidden or isolated models)
     */
    private static clearModelOverride;
}
//# sourceMappingURL=HideIsolateEmphasizeManager.d.ts.map