Something went wrong. Try again.
[READ-ONLY] Mirror of https://github.com/openstatusHQ/openstatus. ๐ซ Status page with uptime monitoring & API monitoring as code ๐ซ openstatus.dev
bun drizzle-orm monitoring monitoring-as-code nextjs observability on-call open-source shadcn-ui status-page statuspage synthetic-monitoring tinybird turso uptime uptime-checker uptime-monitor
Something went wrong. Try again.
16 kB ยท 518 lines
JSON
123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519{ "$schema": "https://ui.shadcn.com/schema/registry.json", "name": "openstatus", "homepage": "https://openstatus.dev", "version": "0.2.0", "style": "default", "cssVars": { "theme": { "color-success": "var(--success)", "color-warning": "var(--warning)", "color-info": "var(--info)" }, "light": { "success": "oklch(0.72 0.19 150)", "warning": "oklch(0.77 0.16 70)", "info": "oklch(0.62 0.19 260)" }, "dark": { "success": "oklch(0.72 0.19 150)", "warning": "oklch(0.77 0.16 70)", "info": "oklch(0.62 0.19 260)" } }, "items": [ { "name": "use-media-query", "type": "registry:hook", "title": "Use Media Query", "description": "React hook for responsive media query detection", "files": [ { "path": "src/hooks/use-media-query.ts", "type": "registry:hook", "target": "hooks/use-media-query.ts" } ] }, { "name": "use-copy-to-clipboard", "type": "registry:hook", "title": "Use Copy to Clipboard", "description": "React hook for copying text to clipboard with toast notifications", "registryDependencies": ["sonner"], "files": [ { "path": "src/hooks/use-copy-to-clipboard.ts", "type": "registry:hook", "target": "hooks/use-copy-to-clipboard.ts" } ] }, { "name": "status-types", "type": "registry:lib", "title": "Status Types", "description": "TypeScript type definitions for status components", "files": [ { "path": "src/components/blocks/status.types.ts", "type": "registry:lib", "target": "components/blocks/status.types.ts" } ] }, { "name": "status-utils", "type": "registry:lib", "title": "Status Utilities", "description": "Utility functions for status formatting and display", "dependencies": ["date-fns"], "cssVars": { "theme": { "color-success": "var(--success)", "color-warning": "var(--warning)", "color-info": "var(--info)" }, "light": { "success": "oklch(0.72 0.19 150)", "warning": "oklch(0.77 0.16 70)", "info": "oklch(0.62 0.19 260)" }, "dark": { "success": "oklch(0.72 0.19 150)", "warning": "oklch(0.77 0.16 70)", "info": "oklch(0.62 0.19 260)" } }, "files": [ { "path": "src/components/blocks/status.utils.ts", "type": "registry:lib", "target": "components/blocks/status.utils.ts" } ] }, { "name": "status-icon", "type": "registry:block", "title": "Status Icon", "description": "Unified status icon component with variants for different contexts", "registryDependencies": ["status-types"], "dependencies": ["lucide-react"], "cssVars": { "theme": { "color-success": "var(--success)", "color-warning": "var(--warning)", "color-info": "var(--info)" }, "light": { "success": "oklch(0.72 0.19 150)", "warning": "oklch(0.77 0.16 70)", "info": "oklch(0.62 0.19 260)" }, "dark": { "success": "oklch(0.72 0.19 150)", "warning": "oklch(0.77 0.16 70)", "info": "oklch(0.62 0.19 260)" } }, "files": [ { "path": "src/components/blocks/status-icon.tsx", "type": "registry:ui", "target": "components/blocks/status-icon.tsx" } ] }, { "name": "status-layout", "type": "registry:block", "title": "Status Layout", "description": "Layout primitives for composing status displays (Status, StatusHeader, StatusTitle, etc.)", "registryDependencies": ["status-icon"], "files": [ { "path": "src/components/blocks/status-layout.tsx", "type": "registry:ui", "target": "components/blocks/status-layout.tsx" } ] }, { "name": "status-blank", "type": "registry:block", "title": "Status Blank States", "description": "Empty and skeleton state components for loading and no-data scenarios", "files": [ { "path": "src/components/blocks/status-blank.tsx", "type": "registry:ui", "target": "components/blocks/status-blank.tsx" } ] }, { "name": "status-i18n", "type": "registry:block", "title": "Status Blocks i18n Provider", "description": "React context for supplying translated labels and locale-aware date formatters to status blocks. Optional โ blocks fall back to defaultStatusBlocksLabels (en-US) when no provider is mounted.", "registryDependencies": ["status-types", "status-utils"], "files": [ { "path": "src/components/blocks/status-i18n.tsx", "type": "registry:ui", "target": "components/blocks/status-i18n.tsx" } ] }, { "name": "status-timestamp", "type": "registry:block", "title": "Status Timestamp", "description": "Interactive timestamp display with tooltip (simple) or hover-card (rich) variants showing multiple timezone formats", "registryDependencies": [ "hover-card", "tooltip", "use-copy-to-clipboard", "use-media-query" ], "dependencies": [ "@radix-ui/react-hover-card", "date-fns", "@date-fns/utc@2.1.0", "lucide-react" ], "files": [ { "path": "src/components/blocks/status-timestamp.tsx", "type": "registry:ui", "target": "components/blocks/status-timestamp.tsx" } ] }, { "name": "status-banner", "type": "registry:block", "title": "Status Banner", "description": "Alert-style status banner with tabs support and timestamp display", "registryDependencies": [ "status-icon", "status-types", "status-utils", "status-timestamp", "status-i18n", "tabs" ], "files": [ { "path": "src/components/blocks/status-banner.tsx", "type": "registry:ui", "target": "components/blocks/status-banner.tsx" } ] }, { "name": "status-component", "type": "registry:block", "title": "Status Component", "description": "Monitor component primitives for building status displays", "registryDependencies": [ "status-icon", "status-types", "status-utils", "status-i18n", "skeleton", "tooltip", "use-media-query" ], "dependencies": ["date-fns", "lucide-react"], "files": [ { "path": "src/components/blocks/status-component.tsx", "type": "registry:ui", "target": "components/blocks/status-component.tsx" } ] }, { "name": "status-component-group", "type": "registry:block", "title": "Status Component Group", "description": "Collapsible group wrapper for status components", "registryDependencies": [ "status-component", "status-types", "collapsible" ], "files": [ { "path": "src/components/blocks/status-component-group.tsx", "type": "registry:ui", "target": "components/blocks/status-component-group.tsx" } ] }, { "name": "status-events", "type": "registry:block", "title": "Status Events", "description": "Event timeline components for displaying status reports and maintenance updates", "registryDependencies": [ "status-types", "status-utils", "status-timestamp", "status-i18n", "badge", "hover-card", "separator", "tooltip" ], "dependencies": ["@radix-ui/react-slot", "date-fns", "lucide-react"], "files": [ { "path": "src/components/blocks/status-events.tsx", "type": "registry:ui", "target": "components/blocks/status-events.tsx" } ] }, { "name": "status-bar", "type": "registry:block", "title": "Status Bar", "description": "Interactive status timeline with hover, keyboard navigation, and event display", "registryDependencies": [ "status-types", "status-utils", "status-i18n", "hover-card", "separator", "skeleton", "use-media-query" ], "dependencies": ["date-fns"], "files": [ { "path": "src/components/blocks/status-bar.tsx", "type": "registry:ui", "target": "components/blocks/status-bar.tsx" } ] }, { "name": "status-calendar", "type": "registry:block", "title": "Status Calendar", "description": "Monthly calendar view of status history with per-day markers and event hover cards", "registryDependencies": [ "status-types", "status-i18n", "status-bar", "button", "hover-card", "separator", "skeleton", "use-media-query" ], "dependencies": ["date-fns", "lucide-react", "react-day-picker@8"], "files": [ { "path": "src/components/blocks/status-calendar.tsx", "type": "registry:ui", "target": "components/blocks/status-calendar.tsx" } ] }, { "name": "status-feed", "type": "registry:block", "title": "Status Feed", "description": "Unified feed component combining status reports and maintenance events", "registryDependencies": [ "status-blank", "status-events", "status-types", "status-i18n" ], "files": [ { "path": "src/components/blocks/status-feed.tsx", "type": "registry:ui", "target": "components/blocks/status-feed.tsx" } ] }, { "name": "status-theme-switcher", "type": "registry:block", "title": "Status Theme Switcher", "description": "Agnostic light/dark/system theme switcher. Caller owns the value and onValueChange wiring (next-themes, form state, etc.)", "registryDependencies": [ "status-i18n", "status-types", "button", "dropdown-menu", "skeleton" ], "dependencies": ["lucide-react"], "files": [ { "path": "src/components/blocks/status-theme-switcher.tsx", "type": "registry:ui", "target": "components/blocks/status-theme-switcher.tsx" } ] }, { "name": "status-locale-switcher", "type": "registry:block", "title": "Status Locale Switcher", "description": "Agnostic locale picker. Caller owns value, onValueChange, and label resolution โ no next-intl, router, or locale detection", "registryDependencies": ["button", "dropdown-menu", "skeleton"], "files": [ { "path": "src/components/blocks/status-locale-switcher.tsx", "type": "registry:ui", "target": "components/blocks/status-locale-switcher.tsx" } ] }, { "name": "status-updates", "type": "registry:block", "title": "Status Updates", "description": "Popover with copy-link primitives for RSS, Atom, JSON, Slack, and SSH subscription channels. Flat exports โ caller composes layout (tabs, sections, etc.)", "registryDependencies": [ "status-i18n", "use-copy-to-clipboard", "button", "input", "popover", "separator" ], "dependencies": ["lucide-react"], "files": [ { "path": "src/components/blocks/status-updates.tsx", "type": "registry:ui", "target": "components/blocks/status-updates.tsx" } ] }, { "name": "status-page-get-in-touch", "type": "registry:block", "title": "Status Page Get-in-Touch", "description": "Two flat button primitives (icon + text) with tooltip chrome for the contact link in a status page header", "registryDependencies": ["status-i18n", "button", "tooltip"], "files": [ { "path": "src/components/blocks/status-page-get-in-touch.tsx", "type": "registry:ui", "target": "components/blocks/status-page-get-in-touch.tsx" } ] }, { "name": "status-page-header", "type": "registry:block", "title": "Status Page Header", "description": "Presentation-only header chrome (brand, nav, actions). Routing-agnostic โ apps inject their own Link component via asChild", "registryDependencies": ["button"], "files": [ { "path": "src/components/blocks/status-page-header.tsx", "type": "registry:ui", "target": "components/blocks/status-page-header.tsx" } ] }, { "name": "status-page-footer", "type": "registry:block", "title": "Status Page Footer", "description": "Presentation-only footer chrome (powered-by, action cluster). Embed/white-label gating, switchers, and tRPC fetch stay in the wrapping app", "registryDependencies": ["status-i18n"], "files": [ { "path": "src/components/blocks/status-page-footer.tsx", "type": "registry:ui", "target": "components/blocks/status-page-footer.tsx" } ] }, { "name": "status-page-shell", "type": "registry:block", "title": "Status Page Shell", "description": "Outer chrome wrappers (StatusPageShell + StatusPageMain) around header / main / footer. Routing-agnostic with embed-aware Tailwind classes that activate only when an ancestor sets data-embed", "files": [ { "path": "src/components/blocks/status-page-shell.tsx", "type": "registry:ui", "target": "components/blocks/status-page-shell.tsx" } ] }, { "name": "status-chrome", "type": "registry:block", "title": "Status Page Chrome", "description": "Full status page chrome โ shell, header, footer, get-in-touch, status-updates, theme + locale switchers. Combine with status-essentials or status-complete for the body", "registryDependencies": [ "status-i18n", "status-page-shell", "status-page-header", "status-page-footer", "status-page-get-in-touch", "status-updates", "status-theme-switcher", "status-locale-switcher" ] }, { "name": "status-complete", "type": "registry:block", "title": "Status Page (Complete)", "description": "Complete status page components including all primitives, displays, interactive elements, and chrome (header / footer / switchers)", "registryDependencies": [ "status-types", "status-utils", "status-i18n", "status-icon", "status-layout", "status-blank", "status-banner", "status-component", "status-component-group", "status-events", "status-bar", "status-calendar", "status-feed", "status-page-shell", "status-page-header", "status-page-footer", "status-page-get-in-touch", "status-updates", "status-theme-switcher", "status-locale-switcher" ] }, { "name": "status-essentials", "type": "registry:block", "title": "Status Page (Essentials)", "description": "Essential status page components for basic status displays", "registryDependencies": [ "status-types", "status-utils", "status-i18n", "status-icon", "status-layout", "status-banner", "status-blank" ] } ]}