About this animation
A market list that resolves skeletons into asset names and rolling prices, with configurable assets, labels, colors, and fonts.
How it works
- Each pill uses a left-weighted horizontal gradient and a narrow light sweep, staggered down its column.
- Rows reveal in sequence with a spring as identity, price, and performance data arrive.
- Prices receive occasional live updates and a short directional row flash.
- Search filters assets, while the top tabs switch between a market grid, insight rows, and category tiles.
- Selecting a fictional asset opens a black detail view with overview, financials, news, and a purchase action. News preserves five fixed-height rows, crossfading each skeleton into its content with a 70 ms stagger. Insights reveal each complete row together; reduced motion uses a simultaneous 220 ms crossfade.
Install
npx expo install @expo/vector-icons expo-linear-gradient react-native-reanimated react-native-workletsUsage
const marketRef = useRef<MarketListSkeletonRef>(null);
<MarketListSkeleton
ref={marketRef}
assets={assets}
liveUpdates
onOpenAsset={(id) => console.info('Selected', id)}
/><MarketListSkeleton
loading={false}
colors={{ background: '#10131A', accent: '#61B8FF' }}
labels={{ searchAssets: 'Find an asset' }}
fontFamily="Geist_400Regular"
monoFontFamily="GeistMono_400Regular"
/>Props
| Name | Type | Default | Description |
|---|---|---|---|
assets | MarketAsset[] | Fictional Nova–Tidal set | Rows, colors, values, and normalized sparkline history. |
labels | Partial<MarketListLabels> | English labels | Visible tab, search, detail, and purchase text. |
colors | Partial<MarketListColors> | Navy list and black detail palette | Complete list and detail surfaces and accents. |
loading | boolean | undefined | Controlled loading state; otherwise the demo resolves after about 1.5 seconds. |
liveUpdates | boolean | true | Updates a random price every 1.5–3 seconds after reveal. |
onOpenAsset | (id: string) => void | undefined | Called when an asset is selected. |
autoplay | boolean | false | Runs the showcase sequence through the same imperative controls. |
fontFamily | string | System font | Interface font family. |
monoFontFamily | string | System font | Monospaced rolling price font family. |
style | StyleProp<ViewStyle> | undefined | Root container style. |
testID | string | market-list-skeleton | Root and detail test identifiers. |
The ref exposes setTab(index), setQuery(text), openAsset(id), close(), and reload().
Compatibility
Expo SDK 58, React Native 0.88, and Reanimated 4.7. Supports iOS, Android, and web. The component fills its parent; the host screen applies safe-area insets.
Accessibility
Tabs, rows, search, and detail controls expose native roles and labels. Reduced motion removes the extended shimmer sweep and row cascade.
Icons: Feather from Lucide (ISC), via @expo/vector-icons.
Why this one
The loading state preserves the measured three-column market rhythm, then gives each data column a distinct arrival: geometric identity, changing price, and directional performance.




