Status: Public Preview — behaviour may change.
What it does
A modern-theme control that shows one person or entity: an avatar, up to three lines of text and an optional presence badge. It shows the Image when there is one and falls back to initials derived from Name. It only becomes clickable when OnSelect contains a formula.
Key facts
- Preview, and a new control. Studio offers no upgrade action from another control, so you place it and rewire by hand.
- Text lines: Name (defaults to
User().FullName), Caption (defaults toUser().Email) and Details (blank). Image defaults toUser().Image. - Presence takes
PresenceBadgevalues (Available, Away, Busy, Do not disturb, Offline, Out of office, Blocked, Unknown, None). OutOfOffice adds an out-of-office indicator and does nothing while Presence isNone. - Layout: TextPosition (After, Before, Below), TextAlignment, Align, VerticalAlign, Shape (circular or square) and Appearance (a fixed
AvatarColorpalette used for the initials). - With an active OnSelect it uses button semantics and responds to Enter and Space. Without one it's display-only.
- It has no output property: no selected person, no edit state.
When to use / skip
Use it for a single person in a header, a record card or a "owned by" slot where you want the standard Fluent look and sensible accessibility for free. Skip it for lists of people (use a gallery or an Avatar Group) and for anything in a production app that can't carry preview risk.
Configuration decisions
- Where Name, Caption and Details come from: the signed-in user, a Dataverse or Entra lookup, or a static value.
- How you drive Presence, given the control won't fetch it.
- Whether it's display-only or interactive, and if interactive, what OnSelect does and what AccessibleLabel says.
- Appearance per person (a hard-coded colour, or a formula keyed off something stable) so the same person doesn't change colour between screens.
Gotchas
- Presence is not live. It's a value you supply. The control doesn't call Teams or Microsoft Graph, so a green badge is only as current as your formula.
- Defaults point at the signed-in user. Drop it into a gallery template and forget to override Name, Caption and Image, and every row shows you.
- Image fallback is silent. A blank or failed image gives initials with no error, which hides a broken photo lookup until someone notices.
- Interactive needs a real label. The derived accessible label describes the person, not the action, so set AccessibleLabel when OnSelect does something.
- Presence changes aren't announced to screen readers as live updates, by design.
Consultant notes
- Be clear with the business that presence here is decoration you feed, not a Teams status feed. It comes up in demos.
- Pull photos and presence through one agreed pattern for the app, and test the no-photo path with a real user who has none.
- If a screen needs more than one or two people, a gallery of Persona controls gets heavy and awkward to maintain; settle the layout early.
- Preview means no production commitment, so list it as a risk item if it lands in go-live scope.
Revisit when Persona leaves preview or gains a live presence option.