Clicks & taps
Every click on web, every tap on React Native, captured with the element and position.
What's captured
| Field | Example |
|---|---|
| Target element path | body > main > form > button.primary |
| Element text | "Buy now" |
| Position | { x: 412, y: 280 } |
| Timestamp | 1700000000000 |
| Button / finger | left on web, touch index on RN |
| Rage click flag | true if 3+ clicks in the same spot within 1s |
On web
Automatic. The SDK attaches a global click listener at init and captures every bubbling click. Use captureClicks: false to turn off — but you rarely want to, since clicks are the core replay signal.
<GalachaProvider projectKey="..." captureClicks={false} />On React Native
Automatic as long as your tree is wrapped in <TouchCaptureView>:
import Galacha, { TouchCaptureView } from "@galacha/react-native";
<TouchCaptureView buffer={Galacha.getBuffer()!}>
<App />
</TouchCaptureView>Without the wrapper, you still get screen frames, but taps and swipes won't render in the replay.
Rage clicks
If a user clicks the same spot 3 or more times within 1 second, the SDK emits a rage_click event in addition to the individual clicks. Rage clicks show up as red markers in the dashboard timeline — classic signal of a broken button.
Rendering in the replay
The dashboard overlays a purple ripple at the click position, synced to the timeline. On RN with <TouchCaptureView>, swipes render as fading purple strokes with direction arrows. See Touch trails for the detailed behavior.
Privacy
Clicks on elements inside a <PrivateBlock> are captured as positions but with no element text. You see where the user clicked, not what they clicked. Full masking: wrap in <PrivateBlock block> — the element is dropped from the DOM snapshot entirely, so the click event has no target path.
Related
- Touch trails — swipe/gesture capture on RN
- Screen replay
- PrivateBlock