shadcn.io is not affiliated with official shadcn/ui
Feature Tour Login Block for Ark UI
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.
Installation
Overview
Give the sign-in a tour of the product with this feature showcase login block for React with Ark UI. It's the sign-in of Gridfinch, a spreadsheet that works like a database: the page's two side rails run its full height and one band crosses the screen between two rules. The form takes five twelfths of the band at its end: 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 start, behind a divider that meets both rules at a plus mark, seven twelfths of the band hold a three-tab Tabs tour: Boards, Timeline and Reports are each a drawn greyscale view of one table with a sentence about it, and the arrow keys move between the tabs. Every drawing has the same height, so switching never moves the page. On a phone the tour is gone and the form takes the screen. It's built from Tabs, Field, Input, Password Input, Shine Button and Guides, with a CSS entrance only. For a sign-in that shows what's inside.
FAQ
What happens when I sign in, and what stays in the page?
Nothing leaves the page. 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 tour is drawn from typed data (the lanes and cards, the tasks and the eight days of rows are all made up) and nothing in it is a real table. To wire the form for real, post the email and password to your auth endpoint where the code says so, keep the busy state until it answers, then redirect, or show its error under the field it concerns.
How do the tabs work with a keyboard?
It's a real tab list: Tab moves focus onto the selected tab, and the arrow keys move between Boards, Timeline and Reports, with Home and End jumping to the first and last; the panel under the list changes with the selected tab. A tab is selected as soon as it gets focus. The drawings are hidden from assistive technology and the sentence under each is real text, so a screen reader hears what the tab shows.
Why doesn't the page move when I switch tabs?
Every drawing sits in a box of the same height (15 rem) and each sentence reserves two lines, so whichever tab is selected, the panel is the same size. A panel that varied would need an unseen copy of each panel in one grid cell; fixed sizes make that unnecessary.
How are the drawings made, and can I use my own?
They're built from plain boxes and bars in greyscale, with lane and task data typed at the top of the file: the Boards lanes hold cards with literal width classes, the Timeline rows have literal column classes on a twelve-column week grid, and the Reports bars take their height from the eight values, with the total worked out from them. Replace a drawing with a real screenshot of your own, or an image you have the rights to use, and keep its alt text empty if the sentence says what it shows.
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 when the side comes first on screen?
The form comes first in the markup, so Tab order and the reading order for a screen reader start with the sign-in and the heading, and on a phone, where the side is gone, nothing has to be reordered. The side is placed at the start of the band with two grid classes (lg:col-start-1 lg:row-start-1) and the divider is its end border. It follows the page direction, so in a right-to-left layout the side sits at the right.