Ledger Line Input
Boxless fields on a ledger line: spaced-capital labels, a text serif entry, and a gold rule that draws out from the centre on focus. With a validating two-column form.
- Category
- Patterns
- Added
- 2026-09-26
- Deps
- none
- Updated
- 2026-09-26
This is a viberdy Pro component
The live preview, the props panel and the write-up are open to everyone. The full source, the AI prompt and CLI install are part of Pro.
Request a valuation
Tell us about the piece and a specialist in the department will reply with an opinion on its value at auction.
Props
"use client";
import { useEffect, useId, useRef, useState } from "react";
import type { FormEvent } from "react";
/**
* LedgerLineInput — boxless fields written on a ledger line, and the form
* that holds them.
*
* Each field is a label in spaced capitals, the entry in a text serif, and
* one quiet rule underneath, like a line in a register. Focus draws a
* second rule in the metal outward from the centre over 600ms. An error
* holds that rule in oxblood and says what is wrong, in italic, in words.
*
* LedgerField is the field on its own: text, email, tel, a native select or
* a textarea, controlled or not. LedgerLineForm lays fields out on a two
* column grid beside an optional heading, checks them when you leave a field
* and again on submit (required, email, telephone), moves focus to the first
// ---------------------------------------------------------------
// Full source available with a viberdy Pro subscription.
// https://viberdy.dev/pricing
// ---------------------------------------------------------------
}About this pattern
Boxed inputs look like software; a heritage house's forms read like a register. Each field here is a label in spaced capitals, the entry in a text serif, and one quiet rule underneath, like a line in a ledger. Focus draws a second rule in the metal outward from the centre. A mistake holds that rule in oxblood and says what is wrong in plain words, in italic, under the line. LedgerField is the field alone, for text, email, telephone, a native select or a longer note. LedgerLineForm lays fields out on two columns beside an optional heading, checks each one when you leave it and all of them on submit, moves focus to the first field that needs attention, and runs your own async handler with a sending state. If it fails, everything typed stays and the form says so; a later submit always wins over an earlier one still in flight. On success it gives way to your thank-you note. Nothing is sent anywhere by the component itself.
Curator’s note
Part of the Neoclassical kit, drop 3, phase 8: the form pattern. Pro by the tier rule (1.5): a stateful multi-part system of two exports, field validation, focus management and an async submit guarded against stale results. The text effect moved to Free in its place, so the phase stays 2/2.
Pairs well with
Matched on shared tags and category — the entries most likely to be used alongside this one.
Glass Focus Field
patternsA liquid-glass input that shows focus by thickening its glass outward from where you clicked, with a floating label and a warm-tinted error state.
Form Error Summary
patternsThe error pattern that actually works with a screen reader: focus the summary, link to the fields, punish late.
Floating Label Input
componentsA text input whose label floats from placeholder position into a caption on focus.