Kinetik UI

Cruise Dial

.md

A numbered dial turns under a fixed needle and settles on the speed, while a small LCD counts to the same number.

v1.0.0Live on web@shopify/react-native-skiareact-native-reanimatedreact-native-worklets
Component preview

Installation

Kinetik CLI
npx kinetik-ui add cruise-dial

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/cruise-dial.json

Install manually

  1. Install dependencies
    npx expo install @shopify/react-native-skia react-native-reanimated react-native-worklets
  2. Copy the source files
    • components/kinetik/cruise-dial.tsx
    View source files

Usage

import { CruiseDial } from '@/components/kinetik/cruise-dial';

<CruiseDial speed={842} unit="/KMH" tag="KN204" label="CEILING:" reading="11,234 M" />;

When to use

  • One live speed with character: a flight, a car, a bike ride, a download.
  • Next to Route Card and Arrival Card on a trip screen.

When not to use

  • Readings people must compare or read closely. Use a plain number or a chart.
  • Values that jump around quickly: the dial needs a moment to settle.

Notes

  • The dial shows ten numbered marks from zero, step apart. With the default step it reads 0 to 900, and speed is clamped to that range.
  • Set step to fit your range, for example step={20} for 0 to 180.
  • The display shows up to four digits, with unlit eights behind them.

Props

CruiseDialProps

PropTypeDefaultDescription
speedrequirednumber—The speed the dial and the display settle on.
unitstring'/KMH'Unit beside the display, e.g. "/KMH".
stepnumber100Numbered marks on the dial are this far apart. Defaults to 100.
tagstring—Chip in the corner, e.g. the flight number.
labelstring—Label over the reading, e.g. "CEILING:".
readingstring—Figure in the corner, e.g. "11,234 M".
styleStyleProp<ViewStyle>—

Performance and accessibility

Performance

Budget
The dial is a still canvas turned as a view on the UI thread, so it does not redraw. The LCD re-renders only while it counts. Nothing animates at rest.
Measured

Huawei P20 Lite (ANE-LX1), Android 9, release build · 24 ms median frame, 34 ms p90 · no frames drawn at rest · 132 MB app memory

Accessibility

Reduced motion
The dial and the display jump to the speed.
Screen readers
One label ("KN204. CEILING: 11,234 M. 842 /KMH").
Touch target
Not interactive.

Source files

components/kinetik/cruise-dial.tsx is in the Code tab of the preview above.