Skip to content

EmptyState

EmptyState provides a consistent visual for screens or sections with no content. It includes an icon, title, subtitle, and optional action button.

No Readings YetCast your first hexagram to begin your journey

Takes full available space, centered vertically.

📚Nothing SavedYour saved readings will appear here

For inline empty states within lists or sections.

🔎No ResultsTry a different search term

Start Your PracticeLearn the ancient wisdom of the I Ching
<EmptyState
icon=""
title="Start Your Practice"
subtitle="Learn the ancient wisdom of the I Ching"
actionLabel="Begin Learning"
onAction={handleStartLearning}
/>

📋No History
🔍No Results
No Favorites

PropTypeDefaultDescription
iconstring'☯'Emoji or symbol to display
titlestring-Main message
subtitlestring-Supporting text
actionLabelstring-Button text
onAction() => void-Button press handler
compactbooleanfalseUse compact variant
// Typography
theme.typography.fontFamily.serif // Title font
theme.typography.fontSize.headlineS // Title size (full)
theme.typography.fontSize.bodyL // Title size (compact)
// Colors
theme.colors.gray300 // Title color
theme.colors.gray500 // Subtitle color
theme.colors.goldPrimary // Action button

  • Role: Container uses accessibilityRole="text"
  • Title: Uses accessibilityRole="header"
  • Action: Button has proper accessibilityRole="button" and accessibilityLabel
<EmptyState
icon="📚"
title="No Readings"
subtitle="Your reading history will appear here"
actionLabel="Cast First Reading"
onAction={handleCast}
/>

import { EmptyState } from '@synchronicity/react-native';
import { View } from 'react-native';
function HistoryScreen({ readings }) {
if (readings.length === 0) {
return (
<ScreenContainer>
<EmptyState
icon=""
title="No Readings Yet"
subtitle="Cast your first hexagram to begin your journey of self-discovery"
actionLabel="Cast Hexagram"
onAction={() => navigation.navigate('Cast')}
/>
</ScreenContainer>
);
}
return (
<ScreenContainer>
<FlatList
data={readings}
renderItem={({ item }) => <ReadingListItem reading={item} />}
/>
</ScreenContainer>
);
}