/** @internal */
export interface ManipulatorEvents {}

/**
 * An interface that must be implemented by the 2D and 3D implementations of manipulators
 * for them to be usable by the tool view manager.
 *
 * The general characteristics of a manipulator are that it:
 * - updates one or many parameters of an interactive tool
 * - follows the input pointer when you drag it, unless it's constrained along an axis
 * - does not change in size when you zoom in and out
 * - is visible and responsive even when occluded by other geometry in the scene
 * - is not affected by scene lighting and does not cast shadows
 * - causes updates to the mouse cursor (e.g. arrow -> hand icon) when hovered over or interacted with
 * - may change appearance when hovered over or interacted with
 * - may support being moved by one of multiple pointers (i.e. multi-touch)
 *
 * @internal
 */
export interface Manipulator<Events extends ManipulatorEvents = ManipulatorEvents> {}