Transit Visa Check

Flags layovers that may need a transit visa for the traveller's passport, and the itinerary traps that force them through the border.

StopsStranded at a layover without a visa

Installation

pnpm dlx shadcn@latest add https://bollard-ui.vercel.app/r/transit-visa-check.json

The files land in your project. They're yours to edit.

Usage

transit-visa-check-usage.tsx
import { TransitVisaCheck, type Layover } from "@/components/ui/transit-visa-check"

<TransitVisaCheck value={layover} onValueChange={setLayover} />

What it catches

  • Nationalities on a country's airport transit visa list
  • Documents that commonly exempt (e.g. valid US/CA/UK visas, EEA residence)
  • Self-transfers and separate tickets that mean collecting bags and entering
  • An onward flight to another Schengen country, which means entering here
  • UK to Ireland and leaving the airport during the layover
  • Airports with no airside transit (US)

Props

TransitVisaCheck props
PropTypeDefault
value

Controlled layover.

Partial<Layover>—
defaultValue

Initial layover when uncontrolled.

Partial<Layover>{}
onValueChange

Called on every change.

(value: Partial<Layover>) => void—
rules

Rules by airport IATA code. Defaults to a small, sourced starter set; replace with your own data.

Record<string, TransitRule & { airport?: string; hours?: string }>TRANSIT_RULES
countries

Countries offered for passport and onward flight, ISO alpha-2. Defaults to every country the rules mention.

string[]—
locale

Locale for country names and dates.

string"en-IN"
delay

Pause in ms before the verdict is read out after a change.

number700
messages

Any visible string; `verdict` and `docs` may be partial.

Partial<Omit<TransitVisaMessages, "verdict" | "docs">> & { verdict?: Partial<TransitVisaMessages["verdict"]>; docs?: Partial<TransitVisaM…—

* required. Also accepts the native props of <section> (className, aria-*, data-*…), passed through to it.

Accessibility

  • Section labelled by its heading; every input and document checkbox has a <label>
  • Verdict in a polite live region with icon and text
  • Official and Timatic links have visible text

Only what the source does. Test with your own screen reader and content before shipping.

Limitations

  • Starter rules for a few countries only; it is not a visa determination
  • Visa lists and exemptions change; each rule carries its own checked date
  • Airlines decide boarding: confirm with Timatic, the airline or the official source

Rules

Rules not yet verified against an official source.

Nationality lists carry a checked date of 2026-10-14 from a previous round but were not re-verified this round (official pages blocked automated fetches). GOV.UK confirms the DATV/Visitor in Transit split and the visitor-visa exemption. Informational; always confirm with Timatic or the official source. Copied components don't update themselves, so re-check after rule changes (see updating a component).

What it stops

Stranded at a layover without a visa

Also known as

airport transit visa · layover · self-transfer · flight booking · passport · schengen · timatic · indian passport

Field type

Dependencies

Pairs well with