Arena forms components, the React layer

August 16, 2026 · View on GitHub

Every forms 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-react';

A member is a prop. The main slot is children, a named slot is a prop taking a node, and an event is an on-prefixed handler. 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-react' brings in. That field list is in neither the prompt nor the contract, so the type is where you read it.
ComponentWhat it isTakesUsage
ArenaButtonAction button. One primary per view; danger stays outline.children variant size icon iconRight loading full disabled type name value autoFocus form tabStop onClickArenaButton.prompt.md
ArenaCheckboxA single checkbox. Checked shows a crimson fill with a check.checked label disabled required name value onChangeArenaCheckbox.prompt.md
ArenaIconButtonIcon-only button. Carries an accessible name in every state, not only on hover.icon* label* size variant showLabel pressed disabled type name value autoFocus form tabStop onClickArenaIconButton.prompt.md
ArenaInputText field with validation. Focus is a gold ring; error crimson; valid green with a check. The four states are ordered and the order is normative: error, then focus, then valid, then neutral: an errored field stays crimson while it has focus, because the validation signal must not disappear at the moment the user acts on it.label id hint error valid required validate validateOn type icon prefix value disabled readOnly placeholder name autoComplete min max step maxLength pattern onChange onBlurArenaInput.prompt.md
ArenaRadioOne option inside an ArenaRadioGroup. Selected shows a crimson dot inside the ring.value* label hint disabledArenaRadio.prompt.md
ArenaRadioGroupSingle-selection group. Governs the value and distributes it to its child Radios.ariaLabel* children value name onChangeArenaRadioGroup.prompt.md
ArenaSelectStyled native dropdown selector, with the same validation vocabulary ArenaInput carries. The four states are ordered and the order is the same normative one: error, then focus, then valid, then neutral -- an errored control stays crimson while it has focus, because the validation signal must not disappear at the moment the user acts on it. A form that mixes ArenaInput and ArenaSelect is a form whose fields must report a failure the same way, or it gets validated by hand or not at all.label placeholder options value disabled required hint error valid icon name onChangeArenaSelect.prompt.md
ArenaSwitchA controlled on/off switch showing an icon per state. confirm gates a high-impact change through an ArenaConfirmDialog before it applies.state orientation size iconOn iconOff label* disabled confirm onFuncOn onFuncOff onRequestChangeArenaSwitch.prompt.md
ArenaTextareaMulti-line text field with validation and an optional counter.label id hint error required counter autoResize value disabled readOnly placeholder name maxLength rows onChangeArenaTextarea.prompt.md

9 forms components in this layer.