RiseUI
Components

Label

Accessible form label — HeroUI Label parity (required, disabled, invalid).

Usage

Default label typography.

RiseLabel.text('Display name')

Required

Danger asterisk with spacing (`after:ml-0.5`).

RiseLabel.text(
  'Email',
  isRequired: true,
)

Disabled

`status-disabled` via [RiseThemeData.disabledOpacity].

RiseLabel.text(
  'Account ID',
  isDisabled: true,
)

Invalid

`text-danger` for error context.

RiseLabel.text(
  'Password',
  isInvalid: true,
)

With input

Stacked above [RiseInput].

Column(
  crossAxisAlignment: CrossAxisAlignment.start,
  children: [
    RiseLabel.text('Username'),
    SizedBox(height: 6),
    RiseInput(hintText: 'jane.doe'),
  ],
)

With description

Label + helper line (common form pattern).

Column(
  crossAxisAlignment: CrossAxisAlignment.start,
  children: [
    RiseLabel.text('Birthday'),
    SizedBox(height: 4),
    RiseDescription.text('We use this for age-appropriate defaults.'),
  ],
)

Required + invalid

Combined states.

RiseLabel.text(
  'Legal name',
  isRequired: true,
  isInvalid: true,
)

Custom indicator

Replace the default asterisk.

RiseLabel(
  isRequired: true,
  requiredIndicator: Text('(req)', style: TextStyle(color: rise.danger)),
  semanticsLabel: 'Invoice number',
  child: Text('Invoice number'),
)

Control field

Label + description + control via [RiseControlField].

RiseControlField(
  label: RiseLabel.text('Company', isRequired: true),
  description: Text('This appears on invoices.'),
  control: RiseInput(hintText: 'Acme Inc.'),
)