Skip to content
shadcn.io

shadcn.io is not affiliated with official shadcn/ui

Linear List Integration Block for React

An integration list section for a cycle-planning tool reading issues from Linear's Triage: three real tabs, five issue rows with Accept and Decline always visible, a roving keyboard set (J, K, A, D) that only acts inside the list, and a working Retry.

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

An integration list section for React with Base UI, written for Cyclemoor, a fictional cycle-planning tool, and the issues it reads from Linear's Triage. A compact header ("Triage the queue from the keyboard") has the mark pair at its end. A band under a rule holds a polite status line that says what stays local, and on larger screens the key hints. Real tabs (Triage, Accepted, Declined) carry counts worked out from the rows. Five issues start in Triage as rail-to-rail rows: the issue key in code, a priority mark with its word (never colour), the title and the estimate, with Accept and Decline always visible. Deciding an issue moves its row to the matching tab and focus to the next row. One estimate didn't sync and shows a Retry that runs for about a second and then succeeds. Every panel holds the height of the longest list, so switching tabs or deciding never moves the page. The rows are a roving set of real buttons: only the current row's buttons are tab stops, and J, K, A and D work only while focus is on one of them. It's built from Guides, Tabs, Button and Kbd, with your theme's tokens for every colour. Linear is named in text only: no Linear logo, colour or wordmark ships with the block. In Linear, accepting an issue in Triage moves it to its team's default status and declining sets it to a Canceled status; here nothing is sent, and the issues are example data.

FAQ

How does the keyboard work, and does it fire outside the list?

Tab enters the list once, at the current row (its Accept, Decline and, when needed, Retry buttons are the only ones in the tab order). With focus on any of them, J or the Down arrow moves to the next row and K or the Up arrow to the previous one, A accepts and D declines (in Triage), and focus follows to the next row. The handlers sit on those buttons, not on the document, so typing anywhere else on the page never triggers them. These are this block's keys, not Linear's own shortcuts.

How do I change the issues?

Edit START at the top of the file: each issue has an id, its code (team key and number, like WEB-214), a title, a priority (urgent, high, medium or low), an estimate, a starting place and a sync of ok or failed. The tab counts, the rows and the unseen copy that holds the height all derive from that list. In a real product, replace the local decide, back and retry functions with your calls.

Does Accept or Decline change anything in Linear?

No. A decision moves the row between tabs on this page and the status line says what would happen in Linear: an accepted issue moves to its team's default status, a declined one gets a Canceled status. The line is in the page from the first paint and always ends with "Nothing was sent". Retry shows the row as syncing for about 900 milliseconds and then fine. Back to Triage returns a decided row.

How is it named for keyboards and screen readers?

The tabs are real tabs with panels. Each button names its issue ("Accept WEB-214", "Retry the estimate of WEB-219"). The priority mark is decorative; its word is in the text. The status line is polite and announces each decision, and when the last row of a list is decided focus returns to the selected tab. Tab counts are in the tab names.

How does it fit on a phone, in right-to-left layouts and with reduced motion?

On a phone the buttons wrap under each title and the key hints are hidden (the buttons stay). Issue keys keep their reading order in a right-to-left layout while the rows flip. The header fades up once on load and nothing else is animated; with reduced motion it simply appears.

  • Pro

    An integration detail section for a cycle-planning tool connecting to Linear: one framed panel with a three-way access level over a checklist of six permissions that grows with the level, the OAuth scopes it requests, and three install steps.

  • Pro

    Linear Grid Integration

    Cards and previews

    An integration grid section for a cycle-planning tool syncing with Linear: six issue fields on shared hairlines, each with a drawing of its two sides whose arrow flips and a three-button direction control, plus a derived tally.

  • Pro

    An integration setup flow for a cycle-planning tool connecting to Linear in three steps: who comments and creates issues (an app or you, each with a drawn sample comment), the OAuth scopes to ask for, and a test issue with its draft card.

  • Pro

    An integration stats section for a cycle-planning tool reading finished issues from Linear: a framed strip plot of days to done on one 0 to 14 day axis, four team lanes with a dot per issue and a median tick, and a headline that names the slowest issue.

  • Pro

    An integration list section for a cloud cost tool reading from AWS: six cost-allocation tags as rows with a coverage bar, a state word and an Activate switch, a segmented filter with counts, and a working Retry on the one row that timed out.

  • Pro

    A working triage list for an email app: seven conversations with checkboxes, where ticking rows swaps the toolbar for a bulk bar in the same space, with E and Z shortcuts and per-row buttons on hover.