Arena feedback components, the Angular layer

August 16, 2026 · View on GitHub

Every feedback component this layer ships, under the names it binds them to. This page is an index, not a manual. How to write one is its own prompt, linked in the last column.

The rules every component below answers to are stated in ../../../../skills/design/SKILL.md before any component here, and nothing on this page restates them.

Import from the package root, never from a path inside it:

import { ArenaButton, ArenaTag } from '@dravensoft/arena-angular';

Every component is standalone: put its class in the host component's imports, then write its arena- element. A member is a signal input, an event is an output under the name the contract gives it, and the main slot is content projection. A named slot is a marker directive, which goes in imports as well, because a component cannot tell an un-imported marker from an unfilled slot. An icon is a Phosphor class-name string, never an element.

  • Every other category this layer ships: ../../INDEX.md.
  • Installing the package, declaring your skin, and what it exports besides components: ../../PACKAGE.md.
  • Takes is the members the component's API contract declares, in contract order, under this layer's own names. A member marked * is required; the prompt gives its type and its default.
  • A member whose type is an object or an enum takes one this package exports. The prompt names the type and says what it is for; the fields it holds are in the type declaration itself, which import type { … } from '@dravensoft/arena-angular' brings in. That field list is in neither the prompt nor the contract, so the type is where you read it.
ComponentWhat it isTakesUsage
ArenaAlertA tone-coloured message with an optional icon, a single action, and optional dismissal.tone title content icon actionLabel action dismissible closeArenaAlert.prompt.md
ArenaConfirmDialogConfirmation of a high-consequence action. Never closes on click-outside. requireText locks the confirm button until a word is typed.open* title* eyebrow content confirmLabel cancelLabel destructive requireText cancel confirmArenaConfirmDialog.prompt.md
ArenaDialogModal dialog over a blurred scrim. Takes the whole interaction until dismissed.open* title* eyebrow width content footer closeArenaDialog.prompt.md
ArenaEmptyStateA placeholder for an empty collection: an icon, a title, a message, and an optional action.icon title* headingLevel message actionArenaEmptyState.prompt.md
ArenaErrorStateSection/screen-level failure, with recovery and an optional diagnostic code.icon title headingLevel message code retryLabel retry secondaryActionArenaErrorState.prompt.md
ArenaOnboardingGuided coachmark tour (H10): presents features within the product with progress dots, Skip and Next. Controlled: the host owns index and answers the four events.open* steps* index anchor next back skip doneArenaOnboarding.prompt.md
ArenaProgressBarDeterminate progress by default; indeterminate for a wait with no percentage. A bar along a row, or a ring with the figure inside it.content progressPercentage indeterminate tone label* showLabel showPercentage size shapeArenaProgressBar.prompt.md
ArenaSheetA non-modal panel anchored to one edge of the page: a cart, a filter drawer, a detail pane. It carries no scrim, traps no focus and takes nothing away from the page behind it, which is the whole difference from a dialog. Its header stays on screen while its body folds away, so a reader keeps the panel without keeping its bulk.open* placement title* collapsed collapsedChange dismissible close content footerArenaSheet.prompt.md
ArenaSpinnerIndeterminate wait indicator. For a measurable process use ArenaProgressBar instead.size tone labelArenaSpinner.prompt.md
ArenaToastEphemeral notification with a tone-coloured side bar and one optional action.title message tone actionLabel action persist dismissible closeArenaToast.prompt.md
ArenaToastHostThe fixed box a stack of notices renders into. It decides where the stack sits, how far it stands off the viewport edges and how much air separates two notices, and it decides nothing else: it reads no notice, counts none, and owns no clock.placement contentArenaToastHost.prompt.md
ArenaTooltipA short label revealed on pointer intent. Bone over dark for contrast. It waits before appearing and before withdrawing, so a pointer crossing a toolbar reveals nothing.label* content*ArenaTooltip.prompt.md

12 feedback components in this layer.