# Bundles ## `PointerBundle` ```rust pub struct PointerBundle { /// The pointer's unique [`PointerId`](pointer::PointerId). pub id: pointer::PointerId, /// Tracks the pointer's location. pub location: pointer::PointerLocation, /// Tracks the pointer's button press state. pub click: pointer::PointerPress, /// The interaction state of any hovered entities. pub interaction: pointer::PointerInteraction, } // Notably, this has no Default impl and is intended to be constructed with this pub fn new(id: pointer::PointerId) -> Self { PointerBundle { id, location: pointer::PointerLocation::default(), click: pointer::PointerPress::default(), interaction: pointer::PointerInteraction::default(), } } ``` ### Proposal 1 (Selected) ```rust #[derive(Component)] #[require(PointerLocation, PointerPress, PointerInteraction)] struct PointerId; ``` This API has not shipped yet, and we are likely to want to tweak this a few times, especially if/when `winit` ships their new pointer api. So this is just a translation of the current semantics.