Kinetik UI

Balance Stack

.md

A dark balance card with payment cards stacked along its edge: tap one to pull it forward as the figure counts.

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

Installation

Kinetik CLI
npx kinetik-ui add balance-stack

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/balance-stack.json

Install manually

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

Usage

import { BalanceStack } from '@/components/kinetik/balance-stack';

<BalanceStack
  label="Savings Vault"
  status="Earning"
  currency="€"
  accounts={[
    { id: 'travel', balance: 6240.18, digits: '2048', network: 'NOVA' },
    { id: 'daily', balance: 18904.6, digits: '6190', network: 'NOVA' },
  ]}
/>;

When to use

  • A home screen or wallet summary for one person with two or three accounts.
  • Switching between accounts where the balance is the thing people came to read.

When not to use

  • More than three accounts: only three fit, so use a list.
  • When every account must be read at once. Only the front one shows its balance.

Notes

  • Pass selected and onSelect to control which account is at the front.
  • network is plain text, so use your own wordmark. Check the rules before showing a real card network's name.
  • The card stays dark in the light theme so the coloured cards keep their contrast.

Props

BalanceStackProps

PropTypeDefaultDescription
accountsrequiredBalanceAccount[]—One to three accounts. The last one starts at the front.
labelrequiredstring—
statusstring—Pill beside the label, e.g. "Earning".
currencystring'$'Symbol before the figure. Defaults to "$".
selectedstring—Id of the account at the front, if you control it.
onSelect(id: string) => void—Called when a card is tapped.
hapticsbooleantrueVibrate on tap. Defaults to true.
styleStyleProp<ViewStyle>—

Performance and accessibility

Performance

Budget
Cards move on short UI-thread springs; the figure re-renders only while it counts. Nothing animates at rest.
Measured

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

Accessibility

Reduced motion
Cards take their places and the figure changes without moving or counting.
Screen readers
The header reads as one line ("Savings Vault, €18,904.60, Earning") and each card as a button ("NOVA card ending 6190") with its selected state.
Touch target
At least 61 pt of each card stays exposed and tappable.

Source files

components/kinetik/balance-stack.tsx is in the Code tab of the preview above.