BlockDex

Components

Registries

Free blocks

Method

BlockDex

Components

Registries

Free blocks

Method

Open API

BlockDex

Components

Registries

Free blocks

Method

Open API

Components/openstatus/status-bar

Status Bar

openstatus/status-bar
FreeBlock

Interactive status timeline with hover, keyboard navigation, and event display

Install it

npx shadcn@latest add https://openstatus.dev/r/status-bar.json

Source

src/components/blocks/status-bar.tsxopenstatus.dev/r/status-bar.json · first 6 KB
1"use client";
2
3import { useStatusBlocksLabels } from "@/components/blocks/status-i18n";
4import type {
5 StatusBarData,
6 StatusEventType,
7 StatusReportImpact,
8 StatusType,
9} from "@/components/blocks/status.types";
10import { statusColors } from "@/components/blocks/status.utils";
11import {
12 HoverCard,
13 HoverCardContent,
14 HoverCardTrigger,
15} from "@/components/ui/hover-card";
16import { Separator } from "@/components/ui/separator";
17import { Skeleton } from "@/components/ui/skeleton";
18import { useMediaQuery } from "@/hooks/use-media-query";
19import { cn } from "@/lib/utils";
20import { formatDistanceStrict } from "date-fns";
21import { forwardRef, useCallback, useEffect, useRef, useState } from "react";
22
23interface StatusBarProps {
24 data: StatusBarData[];
25 renderCard?: (
26 data: StatusBarData["card"][number],
27 index: number,
28 ) => React.ReactNode;
29 renderBar?: (
30 data: StatusBarData["bar"][number],
31 index: number,
32 ) => React.ReactNode;
33 renderEvent?: (
34 data: StatusBarData["events"][number],
35 index: number,
36 ) => React.ReactNode;
37 /**
38 * Optional Radix Portal container for the day hover-card. Defaults to
39 * `document.body`. Pass a ref when the bar is rendered inside a scoped
40 * subtree (e.g. a status-page preview that overrides `--radius` and other
41 * CSS vars on a wrapper) so the portaled card inherits the same context.
42 */
43 container?: HTMLElement | null;
44}
45
46interface UseStatusBarProps {
47 dataLength: number;
48 isTouch: boolean;
49}
50
51type InteractionType = "pin" | "hover" | "focus" | null;
52
53/**
54 * useStatusBar - Headless hook for managing status bar interactions and keyboard navigation
55 *
56 * This hook provides the core logic for StatusBar interactions, implementing a
57 * headless UI pattern that separates state management from presentation. It handles:
58 *
59 * **Interaction Modes**:
60 * - **hover**: Desktop hover state (shows card on mouse hover, auto-hides on leave)
61 * - **pin**: Pinned state (click to pin card open, click again or Esc to close)
62 * - **focus**: Keyboard focus state (shows card while focused, hides on blur)
63 *
64 * **Keyboard Navigation**:
65 * - **Arrow Left/Right**: Navigate between bars in the same timeline
66 * - **Arrow Up/Down**: Navigate between timelines (different monitors)
67 * - **Enter/Space**: Pin/unpin the active bar
68 * - **Escape**: Close pinned card and remove focus
69 *
70 * **Touch Device Support**:
71 * - Disables hover state on touch devices (detected via `(hover: none)` media query)
72// … truncated

What it pulls in

npm packages

  • date-fns

Other registry items

  • https://openstatus.dev/r/status-types.json
  • https://openstatus.dev/r/status-utils.json
  • https://openstatus.dev/r/status-i18n.json
  • hover-card
  • separator
  • skeleton
  • https://openstatus.dev/r/use-media-query.json

Files it writes

  • src/components/blocks/status-bar.tsx

Facts

Registry
openstatus
Type
registry:block
Access
Free
Files written
1
Licence
AGPL-3.0
First indexed
2026-08-01
Last confirmed
yesterday

Go to the source

openstatus.dev openstatusHQ/openstatus on GitHub Raw registry item This item as JSON

More from openstatus

All 26 items
Same registry, same kind — the ones you would have found next
ComponentRegistryKindAccessInstallsCommand
Status Bannerstatus-banneropenstatusBlocksFreeno deps
Status Blank Statesstatus-blankopenstatusBlocksFreeno deps
Status Calendarstatus-calendaropenstatusBlocksFree3 deps
Status Page Chromestatus-chromeopenstatusBlocksFreeno deps
Status Page (Complete)status-completeopenstatusBlocksFreeno deps
Status Componentstatus-componentopenstatusBlocksFree2 deps
Status Component Groupstatus-component-groupopenstatusBlocksFreeno deps
Status Page (Essentials)status-essentialsopenstatusBlocksFreeno deps
BlockDex

Built by

Kynth Studio

Index

Components
Registries
Method
Open API

Guides

shadcn component libraries
Best shadcn registries
Free shadcn blocks

Reference

Corpus counts
Crawl health
hello@kynth.studio
Privacy
Terms

BlockDex

BlockDex

Built by

Kynth Studio

Index

Components
Registries
Method
Open API

Guides

shadcn component libraries
Best shadcn registries
Free shadcn blocks

Reference

Corpus counts
Crawl health
hello@kynth.studio
Privacy
Terms

BlockDex

BlockDex

Built by

Kynth Studio

Index

Components
Registries
Method
Open API

Guides

shadcn component libraries
Best shadcn registries
Free shadcn blocks

Reference

Corpus counts
Crawl health
hello@kynth.studio
Privacy
Terms

BlockDex