Skip to content

Inputs & flows

The generic primitives an experience audit found missing β€” the building blocks for the lead-magnet calculators, multi-step wizards, list bulk-ops, and impersonation. (Experience-specific compositions β€” the quiz engine, calculators, pricing table, flag console β€” stay app-level, built from these.)

Loaded labor rate$32/hr
Lines / order
  1. 1ERP
  2. 2Credentials
  3. 3Verify

Step 1 β€” pick your ERP.

  • Slider (@repo/ui/form) β€” native range tinted to the brand; min/max/step, format. Powers the calculator inputs.
  • NumberStepper β€” number input with βˆ’/+ steppers, clamped to min/max.
  • SegmentedControl β€” exclusive view/option toggle (radiogroup); the β€œby status / by assignee” pattern.
import { Slider, NumberStepper, SegmentedControl } from '@repo/ui/form';
<Slider label="Rate" value={rate} onChange={setRate} min={20} max={80} format={(v) => `$${v}/hr`} />
<NumberStepper value={qty} onChange={setQty} min={1} max={50} />
<SegmentedControl value={view} onChange={setView} options={[{value:'status',label:'By status'},…]} />
import WizardShell, { type WizardStep } from '@repo/ui/WizardShell';
<WizardShell steps={steps} canAdvance={(i) => validate(i)} onComplete={save} onCancel={close} />

Multi-step container: Stepper indicator + active step content + Back/Next/Finish footer, with canAdvance validation gating. The ERP-connection, provision, and onboarding wizards build on this (Stepper alone was indicator-only).

<BulkActionToolbar count={n} onClear={…} noun={['order','orders']}>…actions…</BulkActionToolbar> β€” appears when rows are selected; shows the count + clear and hosts bulk actions. For inbox / action-items list ops.

<Banner variant="info|warning|danger|brand|impersonation" action={…} onDismiss={…}> β€” full-width page banner (vs the inline Alert). The impersonation variant is the hazard-tape overlay for β€œacting as another org”.