Kinetik UI

Time Split

.md

A total time on a raised panel, its split shown as coloured segments along the panel's curved bottom edge.

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

Installation

Kinetik CLI
npx kinetik-ui add time-split

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/time-split.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/time-split.tsx
    View source files

Usage

import { TimeSplit } from '@/components/kinetik/time-split';

<TimeSplit
  title="Studio Hours"
  items={[
    { label: 'Sketching', minutes: 38 },
    { label: 'Coding', minutes: 112 },
    { label: 'Reviews', minutes: 44 },
    { label: 'Reading', minutes: 26 },
  ]}
/>;

When to use

  • A daily total and what it was spent on: screen time, focus time, a timesheet.
  • Widgets, where the split matters as a shape more than as exact numbers.

When not to use

  • When people must compare exact amounts per item. The legend has no values, so use a bar chart.
  • More than about six items: the segments get too short to tell apart.

Notes

  • The total is the sum of minutes; 90 reads as 01 : 30.
  • Items are matched by label, so keep labels stable and each segment glides to its new length.
  • The first and third colours tint the card's soft glow.

Props

TimeSplitProps

PropTypeDefaultDescription
titlerequiredstring—
itemsrequiredTimeSplitItem[]—Up to about six items. The total is their sum.
hoursLabelstring'Hours'Label under the hours. Defaults to "Hours".
minutesLabelstring'Minutes'Label under the minutes. Defaults to "Minutes".
styleStyleProp<ViewStyle>—

Performance and accessibility

Performance

Budget
Segments trim one path on UI-thread springs on arrival and on change; the time re-renders only while it counts. Nothing animates at rest.
Measured

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

Accessibility

Reduced motion
Segments take their lengths and the time changes without gliding or counting.
Screen readers
One label with the total and every item ("Studio Hours: 4 hours 36 minutes. Coding 2 hours 30 minutes, Reading 1 hour 1 minute.").
Touch target
Not interactive.

Source files

components/kinetik/time-split.tsx is in the Code tab of the preview above.