# 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.