/**
 * A trait for Node that mixes functionality to support visual highlights that appear on hover with a pointer.
 *
 * @author Jesse Greenberg (PhET Interactive Simulations)
 */
import '../../../../globals.js';
import TEmitter from '../../../../axon/js/TEmitter.js';
import TReadOnlyProperty from '../../../../axon/js/TReadOnlyProperty.js';
import Constructor from '../../../../phet-core/js/types/Constructor.js';
import type Display from '../../display/Display.js';
import type Instance from '../../display/Instance.js';
import type SceneryEvent from '../../input/SceneryEvent.js';
import type { PressListenerEvent } from '../../listeners/PressListener.js';
import type Node from '../../nodes/Node.js';
import Trail from '../../util/Trail.js';
import { Highlight } from '../Highlight.js';
type SelfOptions = {
    interactiveHighlight?: Highlight;
    interactiveHighlightLayerable?: boolean;
    interactiveHighlightEnabled?: boolean;
};
export type InteractiveHighlightingOptions = SelfOptions;
export interface TInteractiveHighlighting<SuperType extends Node = Node> {
    displays: Record<string, Display>;
    interactiveHighlightChangedEmitter: TEmitter;
    readonly isInteractiveHighlightActiveProperty: TReadOnlyProperty<boolean>;
    readonly _isInteractiveHighlighting: true;
    setInteractiveHighlight(interactiveHighlight: Highlight): void;
    interactiveHighlight: Highlight;
    getInteractiveHighlight(): Highlight;
    setInteractiveHighlightLayerable(interactiveHighlightLayerable: boolean): void;
    interactiveHighlightLayerable: boolean;
    getInteractiveHighlightLayerable(): boolean;
    setInteractiveHighlightEnabled(enabled: boolean): void;
    getInteractiveHighlightEnabled(): boolean;
    interactiveHighlightEnabled: boolean;
    handleHighlightActiveChange(): void;
    onChangedInstance(instance: Instance, added: boolean): void;
    getDescendantsUseHighlighting(trail: Trail): boolean;
    unlockHighlight(): void;
    forwardInteractiveHighlight(event: SceneryEvent): void;
    mutate(options?: SelfOptions & Parameters<SuperType['mutate']>[0]): this;
}
declare const InteractiveHighlighting: {
    <SuperType extends Constructor<Node>>(Type: SuperType): SuperType & Constructor<TInteractiveHighlighting<InstanceType<SuperType>>>;
    forwardInteractiveHighlightFromPress(targetNode: Node, event: PressListenerEvent): void;
};
export type InteractiveHighlightingNodeType = Node & TInteractiveHighlighting;
export default InteractiveHighlighting;
