shadcn.io is not affiliated with official shadcn/ui
Linear Detail Integration Block for React
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.
Installation
Overview
An integration detail section for React with Base UI, written for Cyclemoor, a fictional cycle-planning tool, and its Linear connection. A centred header names both ("Cyclemoor for Linear") with one sentence. One framed panel holds a segmented level (Read only, Comment, Create issues) over a checklist of six permissions: each level adds rows, and the rows it doesn't have are tinted and read "Not at this level". Three scope chips (read, comments:create, issues:create) show what the chosen level would request, and a note says Cyclemoor never asks for admin. The panel's foot has the mark pair (Cyclemoor's own tile and Linear's neutral lettermark tile), the Connect Linear Shine Button and a View docs link. Under a band rule, three install steps sit in a row between hairlines, and the block ends on them, so no rule closes it. Choosing a level changes this page only, and a polite status line, present from the first paint, says so. It's built from Guides, Frame, Segment Group, Shine Button and Button, with your theme's tokens for every colour. Linear is named in text only: no Linear logo, colour or wordmark ships with the block. The product and its permission list are example data.
FAQ
Which Linear scopes does each level request?
read is the default and Linear always includes it. Comment adds comments:create, which lets an app create issue comments. Create issues adds issues:create, which lets it create issues and their attachments. These are the targeted scopes Linear documents as alternatives to the broad write scope, and admin is never requested. Scopes go in the authorize request as one comma-separated list, for example scope=read,comments:create. Edit SCOPES and PERMISSIONS at the top of the file to match what your app really asks for.
How do I change what a level includes?
Each permission in PERMISSIONS has a rank: 0 appears from Read only up, 1 from Comment up, 2 only at Create issues. The checklist, the chips and the count ("4 of 6 permissions") all derive from those ranks and the selected level, so adding a permission is one object. LEVELS holds each level's label and the sentence read out by the status line.
Does Connect Linear connect anything?
No. Both buttons are links (href="#"): point Connect Linear at your Linear OAuth authorize address with the scope list the chosen level produces, and View docs at your setup guide. The level control changes this page only, and the status line says "Nothing is sent to Linear". Connect Linear is a Shine Button, the block's one primary action; View docs is an outline button.
Both buttons render the link they're given with render, with nativeButton={false}.
Can I show Linear's logo?
The block names Linear in text, the way any integration page says what it works with, and ships no Linear logo, colour or wordmark. Its tile is a neutral lettermark, Li in a muted square, in an icon slot that a code comment marks: drop in the official logo only if you have the rights to use it, under the owner's brand guidelines, and never redraw it. The pair is hidden from assistive technology because the heading already names both products.
How does it work with a keyboard and a screen reader?
The level control is a real segmented radio group named by its heading: arrow keys move between the three levels and the choice is announced. A locked permission is marked in words ("Not at this level") as well as by its tint and lock icon, and each scope chip carries a hidden "requested" or "not requested". The status line is a polite live region that is in the page from load, so a change of level is spoken once.
How does it fit on a phone, in right-to-left layouts and with reduced motion?
On a phone the level control fills the panel, the steps stack between rules and the scope chips wrap. The panel holds one height across levels because every permission row is always drawn, locked or not. Scopes stay left to right inside a right-to-left layout while the rows flip. The header and panel fade up once on load; with reduced motion they simply appear.
Related
- 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 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 List Integration
Grouped and triagedAn 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.
- 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
Slack Detail Integration
Scopes and stepsAn integration detail section for a spend tool connecting to Slack: a header with the mark pair and Add to Slack, then what it does, the Slack scopes it reads and writes, three steps to install and the listing's facts.
- Pro
Depth Table Integrations About
Security and platformAn integration depth table for a data-sync service: seven systems in plain type with direction, sync frequency, sign-in method and a state dot, in a framed, scrolling table.