Skip to content
shadcn.io

shadcn.io is not affiliated with official shadcn/ui

Terminal Side Panel Login Block for React

A split sign-in page for a command-line deploy tool: the form beside a terminal showing the command-line sign-in, with a Copy button on the command. The terminal follows the page theme.

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

Show the other way in beside the sign-in with this terminal side panel login block for React with Base UI. It's the sign-in of Termwright, a command-line deploy tool: the page's two side rails run its full height and one band crosses the screen between two rules. The form sits at the start of the band: a Field with the email Input, another with the Password Input and a "Forgot password?" link, and the Shine Button, the only colored control. At the end, behind a divider that meets both rules at a plus mark, a terminal shows the command-line sign-in: the command with a Copy Button, the address to open, the code to enter and "Waiting for approval…". Despite the slug, the terminal isn't dark by force: it follows your theme, light in a light theme and dark in a dark one. Nothing runs here; Copy only puts the command on the clipboard and a polite status message says so. On a phone the terminal is gone and the form takes the screen. It's built from Copy Button, Field, Input, Password Input, Shine Button and Guides, with a CSS entrance only. For a developer tool with a device sign-in.

FAQ

What happens when I sign in, and what stays in the page?

Nothing leaves the page, and nothing runs. Sign in waits under a spinner for less than a second, then shows "You're signed in" with the address you typed, and a polite status message says nothing was sent; Sign out brings the form back with your email still filled in. The terminal is typed text: the command, the address and the code ABCD-4821 are made up, and nothing waits for approval. To wire it for real, post the email and password to your auth endpoint where the code says so, and for the device flow have your CLI print the verification address and the one-time code your server issued for it.

Why isn't the terminal dark?

The block follows the page theme, so the terminal is a card in whatever your theme uses: light in a light theme, dark in a dark one, with the same border and text tokens as everything else. Nothing forces a dark scope, which also keeps the contrast of the text correct in every preset. If your product's terminal is dark in both themes, put dark on that one box and mark it with a comment.

What does the Copy button do, and how is it announced?

It copies termwright login, without the prompt, to the clipboard and swaps its icon for a check for three seconds. A polite status message, which the page already has for the sign-in, reads "Copied the command" so screen reader users hear it, and if the clipboard refuses (no permission, or a page that isn't served over HTTPS) it says "Couldn't copy" and tells you to select the text. The button is named "Copy the sign-in command" and the text is real text you can also select by hand.

Why is the Sign in button never disabled?

A disabled button can't explain itself, and keyboard users can't reach it. Here it stays enabled: pressing it with an empty or malformed email, or no password, marks those fields invalid, writes one sentence under each and moves focus to the first, which reads its problem out. Typing clears that field's problem. The browser's own validation bubbles are turned off with noValidate, so the messages look the same in every browser, and each field keeps a line for its problem even when there is none, so a problem never pushes the page.

Why is the form first in the page and the terminal second?

The form comes first in the markup, so Tab order and the reading order start with the sign-in and its heading; the terminal follows, and on a phone, where it's gone, nothing has to be reordered. It's at the end of the band, behind a divider, in a left-to-right layout and at the start side's mirror in right-to-left. The terminal's text is set dir="ltr" so the command and the address read correctly in a right-to-left page.

What do phone visitors see?

The terminal is hidden below 1024 px (max-lg:hidden), so a phone shows the product's mark, the heading, the form and the Sign in button, which ends on the first screen. A visitor on a phone isn't signing in from a terminal, so nothing is lost.

  • Pro

    Split Product Sketch Login

    Split with a panel

    A split sign-in page for a grocery delivery service: the form at the end beside a drawn sketch of the product (a basket, a delivery slot and a total in an inset frame), with Remember me and a simulated sign-in.

  • Pro

    A split sign-in page for a product analytics tool: the form beside a What's new list of three releases with a slanted edge, each release a disclosure that opens its detail, and one GitHub row.

  • Pro

    Feature Tour Login

    Split with a panel

    A split sign-in page for a spreadsheet that works like a database: the form beside a wide three-tab tour (Boards, Timeline, Reports), each tab a drawn greyscale view of one table and a sentence.

  • Pro

    Expandable Code Banner

    Disclosures and tabs

    An install notice for a CLI toolkit as a disclosure: a header with a version badge opens package-manager tabs and the command in a mono box with a Copy button.

  • Pro

    App Download Login

    Split with a panel

    A reverse split sign-in page for a running tracker: a real QR code of a download link with an iOS and Android switch that re-encodes it, a copyable link, and the sign-in form beside it. On a phone the code gives way to a Get the app link.

  • Pro

    Benefits Accordion Login

    Split with a panel

    A split sign-in page for a freelancer back office: the form with Remember me beside five benefits as an accordion, one open at a time and the first open to start, with ruled rows.