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.
Installation
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.
Related
- Pro
Linear Detail Integration
Scopes and stepsAn 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 previewsAn 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
Linear Setup Integration
Guided stepsAn 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
Linear Stats Integration
Lines and dotsAn 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
AWS List Integration
Synced tablesAn 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
Email Triage Inbox Features
App screensA 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.