Docyrus

EmptyState

Placeholder display for empty content areas with variant-specific icons and actions.

iOSAndroid
Preview EmptyState on your device

Scan with Expo Go

Download Expo Go, then scan the QR code to preview native components.

Installation

pnpm dlx @docyrus/cli add @docyrus/rn-empty-state

Usage

import { EmptyState } from '@/components/docyrus-native/empty-state';

<EmptyState variant="search" />

<EmptyState
  variant="default"
  title="No projects yet"
  description="Create your first project to get started."
  action={{ label: 'Create Project', onPress: () => {} }}
/>

API Reference

PropTypeDefaultDescription
variant'default' | 'search' | 'filter' | 'error' | 'offline' | 'permission' | 'empty-inbox' | 'no-data''default'Preset variant with default icon, title, and description
iconReactNode—Custom icon to display (overrides variant emoji)
titlestring—Custom title (overrides variant default)
descriptionstring—Custom description (overrides variant default)
actionEmptyStateAction—Primary action button
secondaryActionEmptyStateAction—Secondary action button (outline style)
size'sm' | 'md' | 'lg''md'Component size
animatedbooleantrueEnable floating animation on the icon
classNamestring—Additional CSS classes
accessibilityLabelstring—Accessibility label override

EmptyStateAction

PropTypeDescription
labelstringButton text
onPress() => voidButton press handler

Translation Keys

Built-in copy is read through useUiTranslation() — provide these keys via <UiTranslationProvider>. Without a provider the English fallback is shown.

KeyEnglish fallbackUsed for
ui.emptyState.defaultTitleNo data availableTitle (title prop wins); no-data uses default
ui.emptyState.defaultDescriptionThere's no data to display at this time.Description (description prop wins)
ui.emptyState.searchTitleNo results foundTitle (title prop wins); no-data uses default
ui.emptyState.searchDescriptionTry adjusting your search terms or filters.Description (description prop wins)
ui.emptyState.filterTitleNo matchesTitle (title prop wins); no-data uses default
ui.emptyState.filterDescriptionNo items match your current filters.Description (description prop wins)
ui.emptyState.errorTitleSomething went wrongTitle (title prop wins); no-data uses default
ui.emptyState.errorDescriptionWe encountered an error loading this content.Description (description prop wins)
ui.emptyState.offlineTitleYou're offlineTitle (title prop wins); no-data uses default
ui.emptyState.offlineDescriptionCheck your connection and try again.Description (description prop wins)
ui.emptyState.permissionTitleAccess restrictedTitle (title prop wins); no-data uses default
ui.emptyState.permissionDescriptionYou don't have permission to view this content.Description (description prop wins)
ui.emptyState.emptyInboxTitleInbox zero!Title (title prop wins); no-data uses default
ui.emptyState.emptyInboxDescriptionYou're all caught up. Great job!Description (description prop wins)

Type Exports

TypeDescription
EmptyStatePropsProps for EmptyState component
EmptyStateVariant'default' | 'search' | 'filter' | 'error' | 'offline' | 'permission' | 'empty-inbox' | 'no-data'
EmptyStateSize'sm' | 'md' | 'lg'
EmptyStateActionAction button configuration object

On this page