Call

Pro

Everything a video call needs, as six parts you add one at a time: the card that rings, the lobby, the stage, the bar under it, the people in it and the invite.

Ana Romero
Liam Dixon
Speaking
1Hand raised
Maya Chen
MR
Marcus Reyes
Evelyn Molina

Incoming#

The card that rings. A halo breathes behind the caller and the accept glyph rings every couple of seconds, the one place in a call where motion asks for attention. Decline is the handset turned down, the same glyph as leaving a call.

MC

Maya Chen

Video call · Design review

Installation#

# One-time setup (tokens + lib helpers)npx koalaui-cli@latest init# Activate your Pro license (once per machine)npx koalaui-cli@latest login <key># Add this component (its dependencies come along)npx koalaui-cli@latest add call-incoming

Usage#

This example is part of Koala UI Pro

The preview is yours to explore. Its code comes with a Pro license, paid once and used in every project.

Have a license? Unlock it here

Anatomy#

import {  CallIncoming,  CallIncomingAccept,  CallIncomingActions,  CallIncomingAvatar,  CallIncomingContent,  CallIncomingDecline,  CallIncomingDescription,  CallIncomingTitle,} from "@/components/ui/call-incoming"<CallIncoming>  <CallIncomingAvatar />  <CallIncomingContent>    <CallIncomingTitle />    <CallIncomingDescription />  </CallIncomingContent>  <CallIncomingActions>    <CallIncomingDecline />    <CallIncomingAccept />  </CallIncomingActions></CallIncoming>

Audio and missed#

Without video the accept button draws a handset. A missed call keeps the card but sets ringing={false}: the halo and the ring stop, and a single call-back button is enough.

LD

Liam Dixon

Audio call

EM

Evelyn Molina

Missed video call · 2 min ago

API reference#

CallIncoming

The card, a <section> named by labels.incoming and announced politely. It slides in from above. Position it yourself (a corner, a toast region). Forwards every section prop; className is accepted by every part and merged last.

PropTypeDefaultDescription
ringingbooleantrueRuns the halo behind the avatar and the accept glyph's ring. Turn it off for a missed call.
labelsPartial<Labels["call"]>-Overrides the words the card says itself. Falls back to the nearest LabelsProvider, then English.
Data attributeDescription
data-ringingPresent while ringing.

CallIncomingAvatar

A Koala Avatar, 40px by default, with a soft halo pulsing behind it while ringing. Takes every Avatar prop.

CallIncomingContent

The text column, a <div>.

CallIncomingTitle

Who is calling, a <p>. Ends in an ellipsis.

CallIncomingDescription

What kind of call, a <p>: audio or video, the meeting's name, when it was missed.

CallIncomingActions

The buttons, a <div>.

CallIncomingDecline

An icon-only destructive Button with the handset turned down. Takes every Button prop but variant and iconOnly.

PropTypeDefaultDescription
labelstringlabels.declineThe accessible name and tooltip.

CallIncomingAccept

An icon-only primary Button. Its glyph rings while the card is ringing. Takes every Button prop but variant and iconOnly.

PropTypeDefaultDescription
videobooleanfalseDraws a camera instead of a handset.
labelstringlabels.acceptThe accessible name and tooltip.

callIncomingVariants

The tv recipe behind every part.

Lobby#

The moment before a call, where people check how they look and sound. The preview is the same tile they will appear in once inside, the microphone level moves as they talk, and who is already there sits beside Join.

Design review

Check how you look and sound before you go in.

LMME

Liam and 3 others are in

Installation#

# One-time setup (tokens + lib helpers)npx koalaui-cli@latest init# Activate your Pro license (once per machine)npx koalaui-cli@latest login <key># Add this component (its dependencies come along)npx koalaui-cli@latest add call-lobby

Usage#

This example is part of Koala UI Pro

The preview is yours to explore. Its code comes with a Pro license, paid once and used in every project.

Have a license? Unlock it here

Anatomy#

import {  CallLobby,  CallLobbyActions,  CallLobbyContent,  CallLobbyDescription,  CallLobbyDevices,  CallLobbyHeader,  CallLobbyLevel,  CallLobbyPreview,  CallLobbyPreviewControls,  CallLobbyTitle,} from "@/components/ui/call-lobby"<CallLobby>  <CallLobbyPreview>    <CallTile />    <CallLobbyPreviewControls />  </CallLobbyPreview>  <CallLobbyContent>    <CallLobbyHeader>      <CallLobbyTitle />      <CallLobbyDescription />    </CallLobbyHeader>    <CallLobbyDevices>      <CallLobbyLevel />    </CallLobbyDevices>    <CallLobbyActions />  </CallLobbyContent></CallLobby>

Level#

CallLobbyLevel lights segments in ink as the microphone picks up sound, so a person can see it working before anyone hears them. It reads a level from 0 to 1 and eases each segment on and off.

0%
30%
65%
100%

API reference#

CallLobby

The layout, a <div>: the preview beside the content from md, stacked below it. Forwards every div prop; className is accepted by every part and merged last.

CallLobbyPreview

The preview's frame, a <div>. Put a CallTile inside: it works outside a stage.

CallLobbyPreviewControls

A slot centred along the preview's bottom edge, for a small CallControls.

CallLobbyContent

The column beside the preview, a <div>.

CallLobbyHeader

Groups the title and the description.

CallLobbyTitle

The call's name, an <h2> in the heading face.

CallLobbyDescription

A line of reading copy, a <p>.

CallLobbyDevices

The device pickers, a <div>. Fill it with Koala Field, FieldLabel and Select.

CallLobbyLevel

The microphone's level, a segmented role="meter".

PropTypeDefaultDescription
level*number-From 0 to 1. Feed it from an AnalyserNode a few times a second.
segmentsnumber16How many segments make the bar.
labelstringlabels.levelThe meter's accessible name.
Data attributeDescription
data-litOn each lit segment.

CallLobbyActions

Join and whatever goes beside it, a <div> that wraps.

callLobbyVariants

The tv recipe behind every part.

Stage#

The video grid of a call, the room at the top of this page. Tiles stay the same element as the layout changes, so a pinned tile grows into the stage instead of being swapped for a bigger copy. Speaking, muted, hand raised, poor connection, camera off and screen share are parts you drop in.

Installation#

# One-time setup (tokens + lib helpers)npx koalaui-cli@latest init# Activate your Pro license (once per machine)npx koalaui-cli@latest login <key># Add this component (its dependencies come along)npx koalaui-cli@latest add call-stage

Usage#

This example is part of Koala UI Pro

The preview is yours to explore. Its code comes with a Pro license, paid once and used in every project.

Have a license? Unlock it here

Anatomy#

import {  CallStage,  CallStageReactions,  CallTile,  CallTileActions,  CallTileAvatar,  CallTileHand,  CallTileLevel,  CallTileMedia,  CallTileMuted,  CallTileName,  CallTilePin,  CallTileSignal,} from "@/components/ui/call-stage"<CallStage>  <CallTile>    <CallTileMedia />    <CallTileAvatar />    <CallTileHand />    <CallTileActions>      <CallTilePin />    </CallTileActions>    <CallTileName>      <CallTileMuted />      <CallTileLevel />      <CallTileSignal />    </CallTileName>  </CallTile>  <CallStageReactions /></CallStage>

Layouts#

gallery gives every tile the same size and centres a short last row, so three people read as two and one, not as a ragged grid. spotlight hands the width to one tile and lines the others up below it. Pin a tile, follow the active speaker or show a screen share by pointing spotlight at a tile's value. Every tile keeps its element through the change and travels from where it was to where it lands, on the settle curve a container uses, so the eye can follow the one that grew.

Liam Dixon
Maya Chen
Speaking
Marcus Reyes
Evelyn Molina
Tariq Okafor

Pin several#

Pass an array to spotlight and the pinned tiles share the top of the stage as their own grid, in the order they were pinned: two side by side, three in a row, four as two by two. Everyone else waits in the strip below, and pinning or unpinning moves each tile from where it was instead of rebuilding the grid.

Liam Dixon
Maya Chen
Marcus Reyes
Evelyn Molina
Tariq Okafor
Ana Romero

Tile states#

Each state is a part, so a tile only shows what is true. speaking rings the tile in green and runs the level bars; a muted microphone takes the bars' place. With the camera off, CallTileAvatar takes the middle and its halo grows while the person talks. A raised hand carries its place in the queue, and a screen share (kind="screen") is fitted on black instead of cropped.

Liam Dixon
Speaking
1Hand raised
Maya Chen
MR
Marcus Reyes
Speaking
Evelyn Molina
A shared dashboard
Ana Romero is presenting

Connection#

CallTileSignal has three levels. Most calls only render it when the line is fair or poor, so a healthy tile stays quiet; the colour is the only hue in the chip, and the glyph is named for screen readers.

JB
Jonas Berg
SL
Sofia Laine
TO
Tariq Okafor

Reactions#

CallStageReactions floats each reaction up from the bottom of the stage with the sender's name, then hands it back through onReactionEnd. It is the one playful moment of the call, so it stays short and never covers a face for long. Under reduced motion the reaction fades in place.

Liam Dixon
Sofia Laine

Minimized#

A call that keeps going while the person works elsewhere is a CallTile inside a Floating Window, with a small CallControls under it. Drag it by its bar, resize it from the corner, fold it to its title.

API reference#

CallStage

The grid, a <div role="group">. Lays its CallTile children out and morphs them when the layout or the spotlight changes. Forwards every div prop; className is accepted by every part and merged last.

PropTypeDefaultDescription
layout"gallery" | "spotlight""gallery"gallery gives every tile the same size, centring a short last row. spotlight gives the pinned tiles the top of the stage and lines the rest up below them.
spotlightstring | string[]-The value of the tile that takes the stage (a pinned tile, the active speaker or a screen share), or several, in the order they were pinned. Without it, spotlight falls back to gallery.
labelsPartial<Labels["call"]>-Overrides the words the part says itself. Falls back to the nearest LabelsProvider, then English.
Data attributeDescription
data-slot="call-stage"On the root.
data-layoutThe resolved layout, gallery or spotlight.
CSS variableDescription
--call-colsColumns, set from the tile count and the layout: 1 to 4 in a gallery, 3 to 5 under a spotlight.
--call-pinsColumns of the pinned grid: 2 side by side, 3 in a row, 4 as two by two, 5 or 6 in rows of three. Narrow stages stack them.
--call-gapThe gap between tiles. 8px.

CallTile

One participant or one shared screen, a 16:9 <div>. Works outside a stage too (a lobby preview, a floating window). Any subset of the parts below goes inside.

PropTypeDefaultDescription
valuestring-Identifies the tile: what spotlight points at, and what the stage follows when the tile moves.
speakingbooleanfalseRings the tile in green, runs CallTileLevel and grows the avatar's halo. Adds labels.speaking for screen readers.
kind"camera" | "screen""camera"screen paints a black ground and fits the media inside it instead of cropping it.
labelsPartial<Labels["call"]>-Overrides the words the part says itself. Falls back to the nearest LabelsProvider, then English.
Data attributeDescription
data-valueThe value.
data-kindcamera or screen.
data-speakingPresent while speaking.
data-spotlightPresent while this tile has the stage.

CallTileMedia

The picture, a <div> behind everything else: put the <video> (or an <img>) inside. Its presence turns the name into a dark scrim chip.

CallTileAvatar

The camera-off face: a Koala Avatar centred and sized from the tile's height. Takes every Avatar prop.

PropTypeDefaultDescription
size"xs" | "sm" | "md" | "lg" | "xl""xl"The base size; the tile's height scales it from there.

CallTileName

The chip in the bottom-left corner, a <div>. Text children truncate; glyph parts (CallTileMuted, CallTileLevel, CallTileSignal) sit beside them.

CallTileLevel

Three bars that run while the tile is speaking, hidden from assistive tech. Takes no children.

CallTileMuted

The muted microphone, a <span role="img"> named by labels.muted.

CallTileSignal

The connection quality, a <span role="img"> named by labels.connection.

PropTypeDefaultDescription
quality*"good" | "fair" | "poor"-fair draws in the warning colour, poor in the destructive one.
Data attributeDescription
data-qualityThe quality.

CallTileHand

The raised hand chip in the top-left corner, a <span>. Children are its place in the queue. The hand waves once when it goes up.

CallTileActions

The top-right slot, a <div>. It rests hidden and slides in on hover or focus; it stays while a control in it is pressed, and always shows on touch.

CallTilePin

The pin toggle, an icon-only overlay Button with aria-pressed. Takes every Button prop.

PropTypeDefaultDescription
pinnedbooleanfalseWhether the tile is pinned.
onPinnedChange(pinned: boolean) => void-Called with the next value. Point the stage's spotlight at the tile to pin it.

CallStageReactions

Emoji that float up from the bottom of the stage, a layer hidden from assistive tech. Render it inside CallStage.

PropTypeDefaultDescription
reactions*readonly CallReaction[]-{ id, emoji, name? }. Append to it as people react; each one floats for about two and a half seconds.
onReactionEnd(id: string) => void-Called when a reaction has finished, to drop it from the array.

callStageVariants

The tv recipe behind every part.

Controls#

The bar under a call. Each toggle keeps its glyph and draws the slash on when it turns off, a muted microphone turns into an ink chip you cannot miss, and every shortcut lives in its control's tooltip.

In the call

Installation#

# One-time setup (tokens + lib helpers)npx koalaui-cli@latest init# Activate your Pro license (once per machine)npx koalaui-cli@latest login <key># Add this component (its dependencies come along)npx koalaui-cli@latest add call-controls

Usage#

This example is part of Koala UI Pro

The preview is yours to explore. Its code comes with a Pro license, paid once and used in every project.

Have a license? Unlock it here

Anatomy#

import {  CallControl,  CallControls,  CallControlsGroup,  CallControlsSeparator,  CallDeviceMenu,  CallLeave,  CallReactionPicker,  CallToggle,} from "@/components/ui/call-controls"<CallControls>  <CallControlsGroup>    <CallToggle />    <CallDeviceMenu />  </CallControlsGroup>  <CallControlsSeparator />  <CallReactionPicker />  <CallControl />  <CallLeave /></CallControls>

Toggles#

Four presets, each shown live and off. Microphone and camera are device toggles: off is the state to notice, so the control turns into an inverted ink chip and the glyph takes its slash. Screen and hand are feature toggles: on is the exception, so a faint chip sits under a filled glyph. No colour is spent on either; red is kept for leaving.

microphone
camera
screen
hand

Variants#

floating is the raised capsule that sits over a stage. plain drops it, for a bar inside a window, a lobby or a page.

floating
plain

Sizes#

md for the call itself; sm for a minimized call or a lobby preview, where 16px glyphs sit better. Both keep a 40px hit area.

md
sm

Leave#

The handset turned down, on a soft red, wider than its neighbours so it is never the control hit by mistake. Give it a visible label when leaving means more than hanging up, like ending the call for everyone.

API reference#

CallControls

The bar, a Radix Toolbar: arrow keys move between controls. It never wraps: on a narrow screen, hide the secondary controls (layout, invite) and keep them in More. Forwards every Toolbar prop; className is accepted by every part and merged last.

PropTypeDefaultDescription
variant"floating" | "plain""floating"floating is a raised capsule for over a stage; plain drops the capsule for a bar that sits in a page or a window.
size"sm" | "md""md"md controls are 36px with 20px glyphs, a step above the Toolbar; sm are 32px with 16px glyphs, for a minimized call. Both keep a 40px hit area.
labelsPartial<Labels["call"]>-Overrides the words the bar says itself. Falls back to the nearest LabelsProvider, then English.
Data attributeDescription
data-slot="call-controls"On the root.
data-variantfloating or plain.

CallControlsGroup

A cluster of controls, a <div role="group">.

PropTypeDefaultDescription
attachedbooleanfalseCloses the gap, so a control and the CallDeviceMenu after it read as one piece.
Data attributeDescription
data-attachedPresent while attached.

CallControlsSeparator

A short vertical rule between clusters.

CallToggle

A control with two states and aria-pressed. Both glyphs stay mounted and cross-fade, so the slash draws onto the microphone instead of replacing it.

PropTypeDefaultDescription
kind"microphone" | "camera" | "screen" | "hand" | "custom""custom"Presets the glyphs, the name, the tooltip words and the tone.
activebooleanfalseThe thing is live: the microphone open, the camera on, the screen shared, the hand up.
onActiveChange(active: boolean) => void-Called with the next value on press.
tone"device" | "feature"-device (microphone, camera) turns the control into an inverted ink chip while it is off. feature (screen, hand) lays a faint chip under it while it is on.
iconReact.ReactNode-The glyph while active. Required for custom.
offIconReact.ReactNode-The glyph while not active. Defaults to icon.
labelstring-The accessible name. Stays the same in both states; aria-pressed tells which.
tooltipReact.ReactNode | false-The hover and focus hint. Defaults to the state's action (Mute, Unmute…); false drops it. Off on touch.
shortcutstring-Shown as a Kbd inside the tooltip, never on the bar. Wiring the key is yours.
tooltipPlacementTooltipProps["placement"]"top"Where the tooltip opens.
Data attributeDescription
data-kindThe kind.
data-tonedevice or feature.
data-activetrue or false.

CallControl

A one-shot control (More, Invite, Chat). Wrap it in a DropdownMenuTrigger or PopoverTrigger with asChild to open something.

PropTypeDefaultDescription
label*string-The accessible name and default tooltip.
tooltipReact.ReactNode | false-The hover and focus hint. Defaults to the state's action (Mute, Unmute…); false drops it. Off on touch.
shortcutstring-Shown as a Kbd inside the tooltip, never on the bar. Wiring the key is yours.
tooltipPlacementTooltipProps["placement"]"top"Where the tooltip opens.

CallDeviceMenu

The caret after a control that opens a device picker: a DropdownMenu that opens upward. Its children are the menu's contents, usually a labelled DropdownMenuRadioGroup per device.

PropTypeDefaultDescription
labelstringlabels.devicesThe caret's accessible name and tooltip.
triggerClassNamestring-Merged onto the caret; className and the other props go to the DropdownMenuContent.

CallReactionPicker

A control that opens a row of emoji. It stays open, so several can be sent in a row.

PropTypeDefaultDescription
reactionsreadonly string[]["👍", "👏", "😂", "❤️", "🎉", "😮"]The emoji offered.
onReact(emoji: string) => void-Called with the picked emoji. Hand it to CallStageReactions.
labelstringlabels.reactionsThe accessible name and tooltip.

CallLeave

Hang up: a soft red control with the handset turned down. Wider than the others so it is never hit by mistake.

PropTypeDefaultDescription
childrenReact.ReactNode-A visible label (Leave). With one, the tooltip drops.
labelstringlabels.leaveThe accessible name while there is no visible label.
tooltipReact.ReactNode | false-The hover and focus hint. Defaults to the state's action (Mute, Unmute…); false drops it. Off on touch.
shortcutstring-Shown as a Kbd inside the tooltip, never on the bar. Wiring the key is yours.
tooltipPlacementTooltipProps["placement"]"top"Where the tooltip opens.

callControlsVariants

The tv recipe behind every part.

Participants#

Who is in the call and how they are doing: speaking, muted, hand up. A host's mute, pin and remove sit under each row and rise into the status's place on hover, so the list stays calm until someone reaches for it.

In the call 5

  • A
    Ana RomeroYou, host
  • L
    Liam DixonEngineering
    Speaking
  • M
    Maya ChenProduct
  • M
    Marcus ReyesEngineering
  • E
    Evelyn MolinaResearch

Installation#

# One-time setup (tokens + lib helpers)npx koalaui-cli@latest init# Activate your Pro license (once per machine)npx koalaui-cli@latest login <key># Add this component (its dependencies come along)npx koalaui-cli@latest add call-participants

Usage#

This example is part of Koala UI Pro

The preview is yours to explore. Its code comes with a Pro license, paid once and used in every project.

Have a license? Unlock it here

Anatomy#

import {  CallParticipant,  CallParticipantAction,  CallParticipantActions,  CallParticipantAvatar,  CallParticipantContent,  CallParticipantMeta,  CallParticipantName,  CallParticipants,  CallParticipantStatus,} from "@/components/ui/call-participants"<CallParticipants>  <CallParticipant>    <CallParticipantAvatar />    <CallParticipantContent>      <CallParticipantName />      <CallParticipantMeta />    </CallParticipantContent>    <CallParticipantStatus />    <CallParticipantActions>      <CallParticipantAction />    </CallParticipantActions>  </CallParticipant></CallParticipants>

States#

A quiet row shows nothing at its end. speaking rings the avatar and runs three green bars, the only hue in the list; muted puts the slashed microphone in their place, and a raised hand sits before it in ink.

  • T
    Tariq OkaforIdle
  • S
    Sofia LaineSpeaking
    Speaking
  • J
    Jonas BergMuted
  • P
    Priya NairHand raised

API reference#

CallParticipants

The list, a <ul> named by labels.participants unless you name it. Forwards every ul prop; className is accepted by every part and merged last.

PropTypeDefaultDescription
labelsPartial<Labels["call"]>-Overrides the words the list says itself. Falls back to the nearest LabelsProvider, then English.

CallParticipant

A row, an <li> with a soft fill on hover and focus. Any subset of the parts below goes inside.

PropTypeDefaultDescription
speakingbooleanfalseRings the avatar in green, runs the level bars in CallParticipantStatus and adds labels.speaking for screen readers.
Data attributeDescription
data-speakingPresent while speaking.

CallParticipantAvatar

A Koala Avatar, 32px by default. Takes every Avatar prop.

CallParticipantContent

The text column, a <div>.

CallParticipantName

The name, a <span>. Ends in an ellipsis.

CallParticipantMeta

The line under the name, a <span>: a role, You, Host.

CallParticipantStatus

The resting glyphs at the end of the row, a <div>. It rolls up and away when the row's actions arrive, and is hidden on touch, where the actions always show. Children go before the built-in glyphs.

PropTypeDefaultDescription
mutedbooleanfalseShows the muted microphone, named by labels.muted. Otherwise the level bars run while the row is speaking.
handRaisedbooleanfalseShows the raised hand, named by labels.handRaised.

CallParticipantActions

The row's controls, a <div> laid over the status. It rises into place on hover or focus within the row, so revealing it never moves anything.

CallParticipantAction

An icon-only Button (subtle, sm, 16px glyph) with its label as the tooltip. Takes every Button prop but variant, size and iconOnly.

PropTypeDefaultDescription
label*string-The accessible name and tooltip. Name the person: Mute Liam Dixon.
destructivebooleanfalseUses the destructiveGhost look, for remove.

callParticipantsVariants

The tv recipe behind every part.

Invite#

Bring someone into the call in the fewest steps: copy the link, type a name or email, or invite a suggested person with one press. The copy glyph turns into a check and an invite's label grows from Invite into Invited, so each action confirms itself in place.

Invite to the design review

LMME

Liam, Maya and 2 others are here

  • T
    Tariq Okafortariq@koalaui.com
  • S
    Sofia Lainesofia@koalaui.com
  • P
    Priya Nairpriya@koalaui.com

Installation#

# One-time setup (tokens + lib helpers)npx koalaui-cli@latest init# Activate your Pro license (once per machine)npx koalaui-cli@latest login <key># Add this component (its dependencies come along)npx koalaui-cli@latest add call-invite

Usage#

This example is part of Koala UI Pro

The preview is yours to explore. Its code comes with a Pro license, paid once and used in every project.

Have a license? Unlock it here

Anatomy#

import {  CallInvite,  CallInviteForm,  CallInviteLink,  CallInvitePeople,  CallInvitePerson,  CallInvitePersonAction,  CallInvitePersonContent,  CallInvitePersonDetail,  CallInvitePersonName,} from "@/components/ui/call-invite"<CallInvite>  <CallInviteLink />  <CallInviteForm />  <CallInvitePeople>    <CallInvitePerson>      <CallInvitePersonContent>        <CallInvitePersonName />        <CallInvitePersonDetail />      </CallInvitePersonContent>      <CallInvitePersonAction />    </CallInvitePerson>  </CallInvitePeople></CallInvite>

The field selects the whole link on focus. The copy button's glyph cross-fades to a check for a couple of seconds and back; the two mean different things, so they swap rather than morph.

Invited#

Before and after. invited steps the button back from outline to ghost and keeps it in place, so the row does not jump and the person can see who already has the invite.

  • J
    Jonas Bergjonas@koalaui.com
  • P
    Priya Nairpriya@koalaui.com

API reference#

CallInvite

The panel, a <div> that stacks its parts. Put it in a Popover, a Dialog or a side panel. Forwards every div prop; className is accepted by every part and merged last.

PropTypeDefaultDescription
labelsPartial<Labels["call"]>-Overrides the words the panel says itself. Falls back to the nearest LabelsProvider, then English.

CallInviteLink

The call's link in a read-only Koala Input, with a copy button whose glyph turns into a check. A status region announces labels.linkCopied.

PropTypeDefaultDescription
value*string-The link.
onCopy(value: string) => void-Called after the link was written to the clipboard.

CallInviteForm

A <form> with a field and a primary Button. Submitting clears the field.

PropTypeDefaultDescription
onInvite(value: string) => void-Called with the trimmed name or email.
placeholderstringlabels.invitePlaceholderThe field's placeholder and accessible name.
submitLabelReact.ReactNodelabels.inviteThe button's label.

CallInvitePeople

A list of people to invite, a <ul>.

CallInvitePerson

A row, an <li>: an Avatar, CallInvitePersonContent and CallInvitePersonAction.

CallInvitePersonContent

The text column, a <div>.

CallInvitePersonName

The name, a <span>. Ends in an ellipsis.

CallInvitePersonDetail

The line under the name, a <span>: an email, a team.

CallInvitePersonAction

The row's Button, with aria-pressed. Its label morphs from Invite to Invited keeping the shared letters.

PropTypeDefaultDescription
invitedbooleanfalseThe invite has gone out: the button steps back to ghost and stops calling onInvite.
onInvite() => void-Called on press while not invited.
Data attributeDescription
data-invitedPresent while invited.

callInviteVariants

The tv recipe behind every part.