# Status Blocks Components A sophisticated composition-based architecture for displaying system status information. This collection provides flexible, accessible, and beautifully designed components for building status pages, incident reports, and uptime dashboards. ## Overview The blocks components are built on a **composition pattern** where simple primitives can be combined to create complex status displays. Rather than monolithic components with dozens of props, you compose smaller focused components together to achieve your desired layout and behavior. ### Key Features - **Composition-First**: Build complex UIs from simple, focused primitives - **Type-Safe**: Full TypeScript support with discriminated unions - **Accessible**: ARIA roles, keyboard navigation, screen reader support - **Themeable**: CSS variables for colors, dark mode support - **Responsive**: Mobile-first design with adaptive layouts - **Interactive**: Keyboard navigation, hover cards, collapsible groups - **Localizable**: Optional i18n provider for translated labels and locale-aware date formatters; sensible English defaults out of the box ## Architecture ### Design Principles 1. **Separation of Concerns**: Each component has a single, clear purpose 2. **Data Attributes**: Components use `data-*` attributes for status-based styling 3. **CSS Group Patterns**: Parent components establish context via `group` classes 4. **Headless Hooks**: Complex interactions separated from presentation (e.g., `useStatusBar`) 5. **Composition over Configuration**: Combine components rather than configure via props ### Component Layers ``` ┌──────────────────────────────────────────────────────────┐ │ Layout Components (Status, StatusComponent, StatusEvent) │ │ └─ Establish context via data-variant/data-status │ ├──────────────────────────────────────────────────────────┤ │ Display Components (StatusIcon, StatusMessage, etc.) │ │ └─ Respond to parent context via CSS selectors │ ├──────────────────────────────────────────────────────────┤ │ Interactive Components (StatusBar, StatusComponentGroup) │ │ └─ Manage state and interactions via hooks │ ├──────────────────────────────────────────────────────────┤ │ Utility Components (StatusTimestamp, StatusBlank, etc.) │ │ └─ Provide specialized functionality │ ├──────────────────────────────────────────────────────────┤ │ i18n (StatusBlocksI18nProvider, useStatusBlocksLabels) │ │ └─ Supply translated labels + locale-aware date │ │ formatters; English defaults when unmounted │ └──────────────────────────────────────────────────────────┘ ``` ## Core Concepts ### Status Types All components work with a unified `StatusType`: - **success**: All systems operational (green) - **degraded**: Partial performance issues (yellow) - **error**: Outage or major issue (red) - **info**: Maintenance or informational (blue) - **empty**: No data available (muted gray) ### Data Attributes Components use `data-variant` or `data-status` attributes to establish status context: ```tsx {/* Child components automatically style for degraded status */} ``` Child components use CSS selectors to respond: ```css .group-data-[variant=degraded]/component:text-warning ``` ### Composition Pattern Rather than: ```tsx ``` We compose: ```tsx API 99.9% ``` ## Component Categories ### 1. Layout Components Primary containers that establish page structure and status context. #### Status Components - **Status**: Root container for status pages - **StatusHeader**: Header with brand and title - **StatusTitle**: Page title - **StatusDescription**: Subtitle text - **StatusContent**: Main content area - **StatusBrand**: Logo/brand image - **StatusIcon**: Status indicator icon #### Monitor Components - **StatusComponent**: Individual monitor/service container - **StatusComponentHeader**: Monitor header layout - **StatusComponentHeaderLeft**: Left-aligned header content - **StatusComponentHeaderRight**: Right-aligned header content - **StatusComponentBody**: Monitor content area ### 2. Status Display Components Components for showing monitor status, uptime, and metrics. - **StatusComponentIcon**: Status indicator for monitors - **StatusComponentTitle**: Monitor/service name - **StatusComponentDescription**: Info tooltip for monitors - **StatusComponentUptime**: Uptime percentage display - **StatusComponentStatus**: Automatic status label - **StatusComponentFooter**: Date range footer ### 3. Status Banner Components Prominent banner for displaying system-wide status. - **StatusBanner**: Complete banner with icon/message/timestamp - **StatusBannerContainer**: Base container for custom banners - **StatusBannerMessage**: Automatic status message - **StatusBannerTitle**: Colored title bar - **StatusBannerContent**: Main content area - **StatusBannerIcon**: Banner status icon - **StatusBannerTabs**: Tab container for multi-section banners - **StatusBannerTabsList**: Tab navigation - **StatusBannerTabsTrigger**: Individual tab button - **StatusBannerTabsContent**: Tab panel content ### 4. Status Bar Components Interactive uptime timeline with hover cards. - **StatusBar**: Main timeline component - **useStatusBar**: Headless hook for custom implementations - **StatusBarEvent**: Event badge in hover cards - **StatusBarSkeleton**: Loading skeleton ### 5. Event Components Components for displaying incident reports and maintenance. #### Container Components - **StatusEventGroup**: Feed container - **StatusEvent**: Individual event container - **StatusEventContent**: Event content wrapper #### Content Components - **StatusEventTitle**: Event title - **StatusEventTitleCheck**: Resolved indicator - **StatusEventAffected**: Affected services container - **StatusEventAffectedBadge**: Single service badge #### Date/Time Components - **StatusEventDate**: Date with relative time - **StatusEventAside**: Sidebar date (desktop) #### Timeline Components - **StatusEventTimelineReport**: Incident updates timeline - **StatusEventTimelineReportUpdate**: Single update entry - **StatusEventTimelineMaintenance**: Maintenance entry - **StatusEventTimelineTitle**: Timeline entry title - **StatusEventTimelineMessage**: Timeline entry message - **StatusEventTimelineDot**: Colored status dot - **StatusEventTimelineSeparator**: Connecting line ### 6. Empty State Components Visualizations for empty states. - **StatusBlankEvents**: Empty state for incidents - **StatusBlankMonitors**: Empty state for monitors - **StatusBlankContainer**: Generic empty state container - **StatusBlankTitle**: Empty state title - **StatusBlankDescription**: Empty state description ### 7. Utility Components Specialized functionality components. - **StatusTimestamp**: Timezone-aware timestamp with hover details - **StatusFeed**: Unified feed of reports and maintenance - **StatusComponentGroup**: Collapsible monitor grouping - **StatusBlankAction**: Styled chrome wrapper for empty-state CTAs (links/buttons) ### 8. i18n / Localization - **StatusBlocksI18nProvider**: React context that supplies translated labels + locale-aware date formatters to all blocks - **useStatusBlocksLabels**: Hook blocks read from; falls back to `defaultStatusBlocksLabels` when no provider is mounted - **defaultStatusBlocksLabels**: English (`en-US`) defaults exported from `status.utils.ts` ### 9. Page Chrome (Header / Footer / Switchers) Presentation-only chrome blocks for assembling a complete status page around the body components above. All routing-, theme-, and locale-agnostic — caller wires their own `next/link`, `next-themes`, `next-intl`, etc. #### Shell - **StatusPageShell**: Outer `
` wrapper (full-height column with gap) - **StatusPageMain**: Inner `
` content column with embed-aware Tailwind classes that activate only when an ancestor sets `data-embed=true` on a `group/embed` element #### Header - **StatusPageHeader**: `
` wrapper - **StatusPageHeaderContent**: Inner `