Kinetik UI

Pulse Range

.md

The day's heart rate as a glowing range: a capsule slides to the latest reading, its heart beating at that rate.

v1.0.0Live on webreact-native-reanimatedreact-native-svgreact-native-worklets
Component preview

Installation

Kinetik CLI
npx kinetik-ui add pulse-range

The CLI copies the source and installs native dependencies with npx expo install, so versions match your Expo SDK. With shadcn: npx shadcn@latest add https://kinetik-ui.dev/r/pulse-range.json

Install manually

  1. Install dependencies
    npx expo install react-native-reanimated react-native-svg react-native-worklets
  2. Copy the source files
    • components/kinetik/pulse-range.tsx
    View source files

Usage

import { PulseRange } from '@/components/kinetik/pulse-range';

<PulseRange bpm={112} min={52} max={168} average={74} ago="JUST NOW" />;

When to use

  • A heart rate summary in a health or workout app.
  • Any reading best shown between today's low and high.

When not to use

  • Medical decisions: this is a summary, not a monitor.
  • Readings with no meaningful range.

Notes

  • The heart beats at bpm, kept between 30 and 200 so odd readings cannot make it flicker.

Props

PulseRangeProps

PropTypeDefaultDescription
bpmrequirednumber—The latest reading. The heart beats at this rate.
minrequirednumber—Lowest reading today.
maxrequirednumber—Highest reading today.
averagerequirednumber—Today's average.
agostring—When the reading was taken, e.g. "JUST NOW".
labelstring'TODAY'Label over the average. Defaults to "TODAY".
styleStyleProp<ViewStyle>—

Performance and accessibility

Performance

Budget
The capsule moves on a UI-thread spring on change. The heart is one view on a UI-thread loop, so it animates at rest.
Measured

Huawei P20 Lite (ANE-LX1), Android 9, release build · 15 ms median frame, 22 ms p90 · keeps drawing at rest · 125 MB app memory

Accessibility

Reduced motion
The capsule jumps to its place, the heart holds still and the number does not count.
Screen readers
One label ("Heart rate 112 beats per minute. TODAY average 74, low 52, high 168. JUST NOW.").
Touch target
Not interactive.

Source files

components/kinetik/pulse-range.tsx is in the Code tab of the preview above.