KQ-529 · SHARE/TRAY
Share Tray
A share sheet whose tray raises on glide while the targets rise from distances.step on recoil in a cascade, so each arrival gets its own two bounces inside the 600ms budget. Copy writes the clipboard and stamps: the link mark cross-fades to a check that draws on flick and the label lands from 1.15x, and where the browser has a native sheet a More target hands off to it. It is a modal dialog with a focus trap, a labelled backdrop, and Escape closing back to the trigger.
What the third sweep tells you
A vane that reads long on every third pass is not broken. It is telling you where the stop sits, and the tape is the only witness the next shift will accept.
Open the tray to share
Install
One command — the source lands in your repo. Or copy it from the Code tab.
$ pnpm dlx shadcn@latest add @kinetiq/share-tray
Props
- url
- string
- default —
- What is shared: written to the clipboard by the copy target and handed to the native sheet.
- title
- string
- default —
- Share title, shown in the tray and passed to the native sheet.
- targets
- ShareTarget[]
- default —
- Custom destinations, each with an icon from the built-in set; the built-in copy target is always first.
- open / defaultOpen
- boolean
- default false
- Controlled or initial tray state.
- onOpenChange
- (open: boolean) => void
- default —
- Fires whenever the tray opens or closes.
- onAction
- (id: string) => void
- default —
- Fires with the id of whichever target was used, the built-in copy and more included.
| Prop | Type | Default | Description |
|---|---|---|---|
| url | string | — | What is shared: written to the clipboard by the copy target and handed to the native sheet. |
| title | string | — | Share title, shown in the tray and passed to the native sheet. |
| targets | ShareTarget[] | — | Custom destinations, each with an icon from the built-in set; the built-in copy target is always first. |
| open / defaultOpen | boolean | false | Controlled or initial tray state. |
| onOpenChange | (open: boolean) => void | — | Fires whenever the tray opens or closes. |
| onAction | (id: string) => void | — | Fires with the id of whichever target was used, the built-in copy and more included. |