These examples use translated settings from Infinipose: paper format, page groups, creep, target dimensions, thread
sewing and processing profiles. The standalone controls demonstrate layout and interaction. Document planning, file
processing and persistence remain the app's responsibility.
Labels, group titles, and headings
A field label names one input and focuses it when clicked. A legend names a group of related controls. Headings
describe sections of the page. The h5 class only styles a heading; it does not label an input. Top labels and
group titles share font weight 600. A label or single-level group title has a 0.25em gap before its controls.
Toggle side labels and radio option names stay at 500.
When a fieldset contains fields with their own labels, its legend automatically gains a thin divider after the
title and help icon, with 0.5em before the fields below. Paper format uses this distinction above Width and
Height. A group starting with radio or toggle choices keeps its plain title, even if labeled fields follow
later. No extra class or hr is needed, and the fields retain their natural widths.
NumberInput includes its own Field. Use Field around native inputs, ComboBox, and boxed Toggle, and spread the
supplied control attributes to connect the label and hint. Help appears beside the label as a separate button.
Fields size to their control, label and hint. Related Width and Height values use fields equal, so both grow to
fit the wider hint while independent settings keep their own widths. NumberInput starts at 8em; the group does
not fill the parent's spare width.
Match adjacent controls
When controls sit beside a text or number input, box the neighboring toggles and radio groups too. Use Toggle
boxed for a switch and one input-group boxed around the whole radio group. Keep their natural widths. Matching
surfaces does not mean stretching every control across the parent.
Infinipose's page-group controls pair Horizontal and Vertical with their columns and rows units, followed by
Duplex. The toggle needs no extra heading and sits in a field-accessory so its box centers on the inputs. The
related number fields share equal columns and Duplex has a compact auto column. Link and lock icons are compact
accessories between fields and keep their existing icon treatment.
2columns
1rows
Boxed toggles
Add boxed to Toggle for the same surface and height as a text or number input. Field supplies the top label;
Toggle's label supplies the text beside the switch. The entire box is clickable.
For changing text, pass an object with off and on labels. This example sizes itself to the longer text even
while the shorter text is visible. Both labels reserve space, so switching states does not resize the box. A
field grid or an explicit width can control the width instead.
Enabling this disables all other paper formats.
Boxed radios
Place related Radio options together in one input-group boxed container, with a shared title above it. Use a
named group with the shared field rows when aligning choices beside inputs. The shared box matches the adjacent
input's height, border, and resting background. Its options wrap when space is limited. Shading and glow stay on
the radio indicators; the outer box stays flat, including on focus.
Infinipose places Sheet thickness beside Creep when compensation is enabled. The fields layout keeps each
control at its natural width: the number input starts at 8em and the radio box fits its options. A wider label
or hint grows only its own field. Each direction's optional explanation belongs on that radio.
Creep
0.1mm
Align the controls
The fields grid shares label, control, and hint rows using CSS subgrid. Wrapped labels and optional hints keep
the input boxes aligned. A field-accessory places a toggle, link, lock, or action on the control row.
Use fields equal when related inputs should have the same width. This excerpt of Infinipose's Target dimensions
keeps Width and Height at their default 8em width, with the link compact in its auto column. A wider label or
hint on either field would grow both. The link's optional explanation uses the long delay.
Buttons beside inputs
Use fields when controls need to align independently of their labels and hints. A row or flex-hrz centers each
whole item, including its label. For buttons without a title, put one button or a btn-group inside a
field-accessory, as in the spinner button demo.
Infinipose's page settings place Copies and read-only Rotation beside three rotation actions. The action group
has an accessible name without an extra visible heading. Its icons use long-delay tooltips. No fixed heights,
empty labels, or vertical offsets are needed. Explicit columns keep the icon group compact. The container query
stacks these controls at narrow widths.
0°
Units and changing hints
NumberInput starts at 8em. A longer suffix, including a calculated result, grows its natural width only as far
as the number and suffix require. Explicit wrapper widths still apply. Keep calculations in the app and pass
their result as the unit, without measuring text or estimating a width. Infinipose's Thread sewing toggle is
boxed beside Sheets per section. Each sheet contributes four pages.
4→ 16 pages
Short hints normally contribute to field width. For longer explanations that change with a setting, use
hint-wrap on Field or NumberInput. The control and label determine the width and the hint wraps below them. A
toggle with a complete side label needs no repeated heading.
Speed and force are embedded in the file and cannot be changed at the machine.
Separators
Use one hr between sections or columns. It follows the parent layout: horizontal in a stack, vertical between
columns, with one 1px line in cDL20 and no default inset. The vertical line stretches to the full flex or grid
row, independently of which column is taller. The parent owns the space around it.
Infinipose's grouping dialog separates the booklet controls from Sections in binding order. This example shows a
64-page booklet in four sections of four sheets. The columns fit their contents, and the section cards share the
same size. At narrow widths, the layout stacks and the same hr becomes horizontal automatically. The two sides
are imported demo components, so the source below only shows the separator layout.
Use stack for vertical groups and row for wrapping inline content. Containers own gaps; fields own their
internal spacing. Override gap directly with a spacing token when needed.
Token
Value
Use
--space-1
0.25em
Label/control and help spacing
--space-2
0.5em
Closely related items
--space-3
1em
Groups and panel padding
--space-4
1.5em
Separate settings sections
The panel below combines the Binding edge, Creep and Section division controls from Infinipose's booklet
settings in a standalone scrolling form. The header and actions stay visible while its body scrolls. Body
padding leaves room for focus and hover glows. Change the font size to try proportional UI scaling, as used by
Print Meter.
Use cDark behind a form containing cDL05 input surfaces. Giving both the panel and its inputs the same cDL05
background hides the controls' resting surfaces. A card's default background is useful for passive content and
selectable cards, but a form container should preserve this distinction.
The complete contracts and migration recipes ship in @leon8ix/jhana-ui/docs/foundations.md.
Existing layout helpers remain available.