Popover
Standalone non-modal component with CDK Overlay/Portal, positioning, dismiss, and focus return.
Design
Anatomy
Popover title
Concise contextual content.
- Trigger — Button controlling open state and
aria-expanded. - Panel — elevated surface with
role="dialog". - Header — optional title and absolutely positioned close control.
- Body — independent Content Text and Content Slot.
- Actions — up to two independently replaceable and hideable Buttons.
- Arrow — closed Shape pointing to the trigger.
Interactive example · Angular
Running with the native Angular component and @angular/cdk/overlay + portal + a11y.
Loading functional preview…
Additional Content Slot · Angular
Executed by the native Angular component with CDK Overlay/Portal and content projection.
Loading functional preview…
Placements
| Modifier | Panel position |
|---|---|
ds-popover--bottom | Below the trigger |
ds-popover--top | Above the trigger |
ds-popover--left | To the trigger's left |
ds-popover--right | To the trigger's right |
Token mapping
| Part | Component tokens |
|---|---|
| Panel | component.popover.panel.{bg,border-color,border-width,gap,max-width,padding-x,padding-y,radius,shadow}.default |
| Title / Body | component.popover.title.color.default, component.popover.body.{color,gap,padding-bottom}.default |
| Close | component.popover.close.{size,icon-size,padding,color}.default, component.popover.close.icon.stroke-width.default |
| Content Slot | component.popover.content-slot.gap.default |
| Actions | component.popover.actions.{gap,padding-top}.default |
| Arrow | component.popover.arrow.{base,fill}.default |
Usage
When to use
Use Popover when
Contextual content needs actions, links, a simple field, or richer guidance than a Tooltip without blocking the rest of the page.
Do not use Popover when
Content is only a short label (use Tooltip), requires a blocking decision or long flow (use Modal), or represents a command list (use Menu).
Related
When to choose this output
Choose this native Angular output when the application already uses Angular. It consumes the same DS CSS and has no dependency on the Web runtime or React adapters.
Implementation
- Status
- Beta
- Distribution
- Validated Angular tarball
Installation
npm install ./dist/tis-angular-0.0.0-beta.0.tgz ds-tispnpm add ./dist/tis-angular-0.0.0-beta.0.tgz ds-tisyarn add ./dist/tis-angular-0.0.0-beta.0.tgz ds-tisbun add ./dist/tis-angular-0.0.0-beta.0.tgz ds-tisDS styles
@import "ds-tis/css";Angular imports
import {
TisPopover,
TisPopoverActions,
TisPopoverContent,
} from '@tis/angular/popover'Template
<tis-popover
#popover
title="Preferências do projeto"
triggerLabel="Abrir preferências"
placement="bottom"
>
<div tisPopoverContent>Conteúdo contextual breve.</div>
<div tisPopoverActions>
<button type="button" (click)="popover.close('api')">Aplicar</button>
</div>
</tis-popover>Public contract
- Package
@tis/angular- Entrypoint
@tis/angular/popover- Primitive
@angular/cdk/overlay + portal + a11y- Status
- Beta
Accessibility
Accessibility and keyboard
| Input | Behavior |
|---|---|
| Enter / Space | The Button trigger opens or closes through native click behavior. |
| Escape | Closes the Popover and returns focus to the trigger. |
| Tab | Follows natural order; there is no focus trap. |
role="dialog" | Use aria-labelledby for a visible title or aria-label when there is no header. |
Output responsibility
Preserve the non-modal dialog contract and validate Escape, outside interaction, ARIA relationships, and focus return.
Validation evidence
Covered by its independent Storybook output plus browser, responsive, keyboard, Axe, and bundle checks.