Capture a handwritten or typed signature: delivery confirmations, consent forms, timesheet sign-off, customer approvals. Strokes are pressure-aware and smoothed, Undo and Clear are one click away, and Type is the keyboard path. Exports are SVG (and PNG on request) with dark ink in every theme, so they print correctly.
Sign with a finger, pen or mouse — or switch to Type.
Installation
The whole kit as one package — get updates by bumping the version. Add the styles to globals.css: @import "@vamos-ui/react/styles.css";
Usage
import { Field, SignaturePad } from "@vamos-ui/react";
<Field label="Customer signature" required>
<SignaturePad name="signature" exportPng onValueChange={(sig) => setSignature(sig)} />
</Field>Typed signatures use --font-signature (a cursive system stack by default) — point it at a handwriting font you load.
A drawn or typed image is not a qualified electronic signature (eIDAS, Turkey's Law 5070). The legal wording around it is your app's job.
Examples
Required in a consent form
Controlled value, accent ink on screen, PNG export. The Field error marks the pad invalid.
Read-only
A stored signature as an image (never injected as markup) with its localized timestamp.
Signed Nov 4, 2026, 9:32 AM
API
SignaturePad
| Prop | Type | Default |
|---|---|---|
value / defaultValue / onValueChange{ kind: drawn | typed, svg, png?, text?, strokes?, width?, height?, signedAt }. | SignatureValue | null | — |
modesType is the accessible alternative — keep it unless you provide another. | ("draw" | "type")[] | ["draw", "type"] |
heightPad height in px. | number | 176 |
penColorOn-screen ink. Exports always use dark ink (SIGNATURE_INK). | "fg" | "accent" | "fg" |
exportPngAdds a PNG data URL; the hidden input then carries the PNG instead of the SVG. | boolean | false |
nameHidden input name (falls back to the Field's name). | string | — |
readOnly · disabled · invalid · requiredRead from the surrounding Field when not set. | boolean | — |
labelsBuilt-in strings (signature namespace). | Partial<SignaturePadLabels> | — |
Helpers
| Prop | Type | Default |
|---|---|---|
strokesToSvg(strokes, w, h) · textToSvg(text, w, h)Standalone SVG documents. | string | — |
strokesToPng(strokes, w, h)PNG data URL (browser only). | string | undefined | — |
svgDataUrl(svg)For <img src>: safe display of stored SVG. | string | — |