Skip to content
shadcn.io

shadcn.io is not affiliated with official shadcn/ui

No Incidents Empty State Block for React

An incident tracker's quiet log: a calendar of 13 weeks of 7 quiet dots, a 30, 60 or 90 day range that re-slices the grid and the line 0 incidents in 60 days, and a Run a drill button that marks one day with a tooltip.

Framework
UI library

Preview

Preview width

Installation

Part of Pro
Pro unlocks the code and one-line install of every Pro button and text effect, plus the MCP for your AI editor.
Have Pro already? Sign in to open it.Opens here as soon as you're Pro.

Overview

Make a calm record look earned, not blank, with this no incidents empty state for React with Base UI. A header over a hairline frame with a plus mark on each corner holds the incident log of Lulltide, an incident tracker. The first band says "0 incidents in 60 days" beside a Toggle Group for the range (30, 60 or 90 days). Under it a calendar of the 91 days up to a typed day is drawn as 13 weeks of 7 quiet dots: the last 30, 60 or 90 days are filled in and the older ones dimmed, so the range re-slices the grid and the line above it. The foot holds the Shine Button, the only colored control, Run a drill, which marks one typed day with a diamond that carries a Tooltip of its date and says "A drill marker, not an incident". The frame is ruled by Guides, and everything moves with CSS only. For the incidents page of any status, on-call or reliability tool.

FAQ

What stays in the page, and how do I make it real?

Nothing is logged. The 91 days are computed from one typed last day, the list of incidents is an empty typed array, and every count is derived from it, so "0 incidents in 60 days" is a count and not a sentence somebody typed. To wire it for real, fill INCIDENTS with your incidents' ISO dates and mark their cells; the same helpers will count them in each range.

What does the range do?

It chooses how many of the last days count: the dots inside the range are filled in and the older ones are dimmed, never hidden, so the calendar keeps its shape. The line over the grid and the sentence under it follow ("0 incidents in 30 days", "...in 90 days"). The group always keeps one choice, and 60 days is the one it starts on.

How does the calendar work for a screen reader?

The grid is drawn and hidden from assistive technology, because 91 dots would be 91 stops. The words are in the line over it and the caption under it, which names the first and last day and how many are filled in, and the drill marker is the only focusable part. It is a real button named "Drill on Wed 7 Oct. A drill marker, not an incident." with a tooltip that shows the same date on hover and focus.

What does Run a drill do?

It marks one typed day (two days before the last) with a diamond, says "A drill marker, not an incident." in the foot's polite status line and moves focus to the marker, so its tooltip shows. The drill does not change the incident count. Clear drill takes the marker away and returns focus to Run a drill; both stay in the tab order and say what is true when pressed too early.

Is it usable with a keyboard?

Tab reaches the range, Run a drill, Clear drill and, once marked, the drill marker. Nothing is announced on load; the status line speaks only after you act.

How does it look on a phone?

The 13 columns narrow to fit the screen, the weekday names drop, the range fills the width, and the foot is pinned to the bottom of the screen while the panel is in view. The panel keeps its height whichever range is chosen, and nothing scrolls sideways, even at 320 px wide.

  • Pro

    An ops status board's quiet alerts page: a bell under a glass dome, four systems that each say Operational with a drawn 30-day strip, and a Send a test alert button that fills a dashed slot with a typed row you can dismiss.

  • Pro

    An error monitor's empty list as an install guide: a code window with npm, pnpm and bun tabs and a copy button, an initialise snippet, a Send a test error button that lists one simulated row, and a calm lake whose ring turns solid.

  • Pro

    A code scanner's clean results page as a scan scope: four areas with an Include switch each, a Run scan that walks through them in a simulated scan and ends on 0 found, and a shield whose dashed check turns solid.

  • Pro

    An uptime monitor's empty list as a setup form: an address, a check interval, three regions and a derived checks-a-day line, a flat heartbeat line with a dashed first spike, and one Add monitor button with a simulated check.

  • Pro

    No Tickets Empty State

    Projects and tasks

    A support desk's empty queue in a fixed-height window: a rail with Queue and Solved, a drawn conveyor of four dashed stations, and a Create ticket dialog whose tickets move one stage at a time along the lane.

  • Pro

    Connect Tools Empty State

    Apps and integrations

    A full-height first-run screen for an integration hub: six tool cards with checkboxes at the end, and at the start a drawn hub whose spokes turn from dashed to solid, and whose sockets take a lettermark, as each tool is ticked.