HAUSE

Variants

Physically present variants of one identity — and a designed refusal for the absent one.

OPERATE THE FORM
01 / THE ENCOUNTERAN INSTRUMENT — THE READER OPERATES

A STUDY IN VARIANTS

One identity. Only the forms that exist.

The archive holds a text edition and a diagram edition of the same object. Ask for audio and the boundary becomes visible.

OBJECT 07 / THE SAME IDENTITY IN EVERY EDITION

Arrival.
Attention.
Understanding.

Illustrative local editions. An absent variant is refused, never manufactured by blending the available ones.

INSPECT THE REUSABLE LIBRARY COMPONENT

ONE PHOTOGRAPH — THREE PRINTS

The photograph never changes. The print is chosen.

contact-print · baseline

fidelity  faithful

The refusal gets more design attention than the success path. That is the point.

The photograph never changes. The print is chosen.2 physically present variants (contact-print, half-tone); baseline contact-print. Selecting an absent variant fails closed. A catalogue never lies about its holdings.

02 / THE DECISION

An act.
Not a container.

YOU ARE DECLINING, OR LEAVING IT OPEN

Showing which alternatives exist, and refusing the absent one.

Are these physically present forms of one identity — and does asking for a missing one deserve a designed refusal?

EXPLORE THE SELECTION GRAMMAR ↗

What is the Variants form in HAUSE, and when do you use it?

The Variants form is a HAUSE instrument — physically present variants of one identity — and a designed refusal for the absent one. The object's identity line is rendered once and never re-keyed — the thing stays the same while its physical form is chosen. Switching between present variants is a staged swap (key remount + .swap-in): the old form is removed instantly, a held beat, then the new form enters at --motion-cinematic. Never a crossfade — a blend between two representations would depict a conversion, and these are forms for systems where conversion is forbidden.

origin — vindex3

THE LIBRARY’S OWN ACCOUNT

Behind the form.

components/forms/Variants.tsx

The object's identity line is rendered once and never re-keyed — the thing stays the same while its physical form is chosen. Switching between present variants is a staged swap (key remount + .swap-in): the old form is removed instantly, a held beat, then the new form enters at --motion-cinematic. Never a crossfade — a blend between two representations would depict a conversion, and these are forms for systems where conversion is forbidden.

Selecting an absent variant renders a Refusal readout instead of an object: the structured fields (requested, present) before any byte is read. The refusal is the most designed moment in the form.

prefers-reduced-motion gets a designed static state: every variant drawn side by side, the baseline ruled in accent, absent variants as dashed empty frames with the refusal beneath.

THE INSTRUMENT’S DISCIPLINE

Every instrument carries an always-present text fallback, so the point survives with the interaction removed — for reduced motion, for no-JS, for a crawler, and for anyone in a hurry. ARIA state is part of the form, because an agent browser reads aria-pressed and aria-expanded to understand what it is looking at.

03 / MAKE SOMETHINGINSTALL HAUSE ↗

Give it your subject.

The opening study is an authored demonstration, not an additional component API. Expand the library specimen above to inspect the reusable form. Its props below come directly from the source.

REACT · Variants

import { Variants } from "@chrishayuk/hause/components/forms/Variants";

export type Variant = {
	id: string;
	fidelity: string;
	bytes?: string;
	storage?: string;
	present: boolean;
	/** Relative physical size of this form, 0..1 — drives the drawn area. */
	scale?: number;
	/** Hatch pitch in px — tighter reads as denser packing / lower precision. */
	density?: number;
};

export type VariantsProps = {
	kicker: string;
	/** The identity that never changes and never re-renders. */
	objectLabel: string;
	variants: Variant[];
	baseline: string;
	refusalTitle: string;
	refusalPrinciple: string;
	caption?: string;
};

export function Variants({
	kicker,
	objectLabel,
	variants,
	baseline,
	refusalTitle,
	refusalPrinciple,
	caption,
}: VariantsProps)

The import and the complete props contract. For installation and composition, follow the Build guide.

NOT INVENTED IN ISOLATION

A page needed this.

Entered the library from vindex3.

02 / THE PROBLEMINTERFACES THAT CANNOT REFUSERefusal arrives as a red toast, an apology and a retry — the vocabulary of a fault. So products are built to avoid producing one, and the reliable way to avoid refusing is to guess.

PUBLISHED 31 AUG 2026 · REVISED 9 SEP 2026 · VERSION 0.1.0

CITE

source components/forms/Variants.tsx · origin vindex3 · site build 3ee5339 · built 2026-09-09

CITE THIS

Web page · 0.1.0

Hay, C. (2026). Variants — a HAUSE instrument. In HAUSE — a design system for AI (Version 0.1.0). hause.design. https://hause.design/forms/variants

The specimen, the source account and the props share one form record. Cite this page or follow its source identifier to inspect the implementation.