Presenter Mode

Removes marked emails, amounts and keys from the page while presenting, so they don't leak on a screen share.

StopsLeaked a key on a screen share

Installation

pnpm dlx shadcn@latest add https://bollard-ui.vercel.app/r/presenter-mode.json

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

Usage

presenter-mode-usage.tsx
import { PresenterModeProvider, PresenterToggle, PresentingBar, Sensitive } from "@/components/ui/presenter-mode"

<PresenterToggle />

What it catches

  • Sensitive values visible during a screen share
  • Blur that can be reversed or read: values are removed, not blurred
  • Value length given away: masks are fixed-length
  • Screen share started in this tab: suggests presenting mode

Props

PresenterModeProvider props
PropTypeDefault
value

Controlled presenting state.

boolean—
defaultValue

Start in presenting mode when uncontrolled.

booleanfalse
onValueChange

Called when presenting mode turns on or off.

(presenting: boolean) => void—
detectScreenShare

Offer presenter mode when this tab starts sharing via `getDisplayMedia`.

booleantrue
children* (required)

Content to show; wrap values in <Sensitive>.

React.ReactNode—

* required.

Accessibility

  • Masked values are focusable buttons with an aria-label naming the kind of value
  • Peek works by holding Space or Enter
  • Presenting bar uses role=status; icons are aria-hidden

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

Limitations

  • Only hides values you wrap in <Sensitive>
  • Can detect only screen shares started from this tab with getDisplayMedia, not ones started in another app
  • Peeking shows the value to the audience too

What it stops

Leaked a key on a screen share

Also known as

screen share · presenter mode · streamer mode · zoom · google meet · demo mode · mask · privacy

Dependencies

Pairs well with