DST Shift Notice

Lists who sees a recurring meeting move by an hour when daylight saving changes on different dates, so part of the team doesn't miss it.

StopsMeeting moves an hour after daylight saving

Installation

pnpm dlx shadcn@latest add https://bollard-ui.vercel.app/r/dst-shift-notice.json

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

Usage

dst-shift-notice-usage.tsx
import { DstShiftNotice, type DstAttendee } from "@/components/ui/dst-shift-notice"

<DstShiftNotice
  series={{ start: "2026-09-01T09:00", timeZone: "America/New_York", repeat: "weekly", count: 26 }}
  attendees={attendees}
  now={NOW}
  locale="en-IN"
  onApply={() => new Promise((resolve) => setTimeout(resolve, 600))}
/>

What it catches

  • Recurring meetings that shift by an hour for some attendees
  • Weeks where US and EU clock changes differ
  • New local times that fall outside working hours
  • How many people move under each anchor zone

Props

DstShiftNotice props
PropTypeDefault
series* (required)

The recurring meeting: first start as wall time, its zone, repeat rule and how many meetings to check.

DstSeries—
attendees* (required)

Who attends and from which zone.

DstAttendee[]—
value

Controlled anchor zone ("UTC" or IANA).

string—
defaultValue

Initial anchor when uncontrolled. Defaults to the series' own zone.

string—
onValueChange

Called when another anchor is picked.

(anchor: string) => void—
anchors

Anchors to offer. Defaults to the series' zone and UTC.

string[]—
zoneLabels

Place names for zones when the city in the IANA name isn't right, e.g. { "Asia/Kolkata": "India" }.

Record<string, string>—
onApply

Saves the chosen anchor for the whole series. May return a Promise.

(anchor: string) => void | Promise<void>—
now

"Now" in epoch ms, for deterministic rendering. Past meetings are skipped.

number—
workingHours

Working hours in local time, as whole hours. Moves outside them are flagged.

[number, number][8, 19]
locale

Locale for dates and times.

string—
messages

Any visible string.

Partial<DstShiftMessages>—

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

Accessibility

  • Section labelled by its heading; zone choices are labelled radio options
  • Apply result is aria-live="polite"; failures use role="alert"
  • Icons are aria-hidden; times are written in text

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

Limitations

  • Uses the browser's time zone data (Intl), which can lag behind recent government changes
  • Attendee zones and working hours come from your props

What it stops

Meeting moves an hour after daylight saving

Also known as

daylight saving · dst · recurring meeting · time zone · standup · calendar · utc · ist

Field type

Dependencies

Pairs well with