shadcn.io is not affiliated with official shadcn/ui
Split Quote Stepper Login Block for React
A split sign-in page for a project tool for makers: the form beside a narrow stepper of three customer quotes with Previous and Next buttons, a count and the arrow keys. It never turns by itself.
Installation
Overview
Let customers vouch for you beside the sign-in with this split login block for React with Base UI. It's the sign-in of Makerwick, a project tool for makers: the page's two side rails run its full height and one band crosses the screen between two rules. The form takes two thirds 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, a narrow stepper shows one customer quote at a time, with an Avatar of initials, the person's name and role, Previous and Next icon Buttons around "1 of 3", and the arrow keys while focus is inside it. The three quotes share one grid cell, so the tallest holds the height and nothing moves as you step. It never turns by itself and doesn't swipe; for that, see the carousel version. On a phone the stepper is gone and the form takes the screen. It's built from Avatar, Button, Field, Input, Password Input, Shine Button and Guides, with a CSS entrance only. For a sign-in that carries one proof.
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. To wire it 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. The three quotes are typed data and the people in them are made up: replace them with customers who agreed to be quoted.
How does stepping work, and what do the keys do?
Previous and Next wrap around, so a button is never disabled under your finger or focus. While focus is anywhere in the stepper, the arrow keys move it too: the end arrow goes to the next quote and the start arrow to the previous one, which is the right arrow in left-to-right and the left arrow in right-to-left. After you move it, a polite status message reads "Quote 2 of 3" and the person's name; nothing is read out on load. The listener is a capture listener on the stepper, so it works on every base, including React Aria, whose buttons stop keys from bubbling.
Why doesn't the page move when the quote changes?
All three quotes sit in one grid cell. The one on show is visible; the other two are invisible, out of the tab order and hidden from assistive technology, but they still take their space, so the cell is as tall as the longest quote and the controls under it stay put. The quote fades with a CSS transition, which is off under reduced motion.
Why doesn't it turn by itself or swipe?
A quote that changes under the cursor is hard to read and harder to quote back, so this one moves only when you ask. It has no swipe either: it is a stepper of three buttons and two keys. The carousel version of this page does swipe, and turns itself only after you press Play.
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.
Related
- Pro
Testimonial Carousel Login
Social proofA sign-in page for a video review tool with three customer quotes in a carousel under the form: swipe or pick a segment, and press Play to turn it over by itself, one quote every seven seconds. It starts paused.
- Pro
Testimonial Sidebar Login
Social proofA split sign-in page for a mentoring platform: the form with a Continue with Google row beside one pull-quote in an inset frame, with initials, a name and role, five stars and a Read the story link.
- Pro
Split Product Sketch Login
Split with a panelA 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
Benefits Accordion Login
Split with a panelA 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.
- Pro
Testimonials Centre-Mode Carousel
Carousels and decksA centre-mode quote carousel for a support inbox: a centred header with a Shine Button above one hairline band, where the active quote sits in the middle on a raised card with its neighbours peeking in, with previous and next buttons, a dot per quote and arrow-key control.
- Pro
Security Badges Login
Social proofA full-height sign-in page for a password manager with four hairline cells under the form, each a button whose hover card says what the safeguard is and where it stops.