Choices

Button-style radio group for choosing one value from a short list.

Demo

$20$50$100Other

Compact

HoursDays

Disabled choice

$20$50$100

Default

import { useState } from 'react'
import { Choices } from 'regen-ui'

const amounts = [
  { label: '$20', value: '20' },
  { label: '$50', value: '50' },
  { label: '$100', value: '100' },
  { label: 'Other', value: 'other' },
] as const

export function DepositAmount() {
  const [amount, setAmount] = useState<(typeof amounts)[number]['value']>('50')

  return (
    <Choices
      items={amounts}
      label="Deposit amount"
      onChange={setAmount}
      value={amount}
    />
  )
}

Compact

import { useState } from 'react'
import { Choices, Input } from 'regen-ui'

const units = [
  { label: 'Hours', value: 'hours' },
  { label: 'Days', value: 'days' },
] as const

export function ExpiryUnit() {
  const [unit, setUnit] = useState<(typeof units)[number]['value']>('days')

  return (
    <Input
      label="Expires after"
      placeholder="30…"
      suffix={
        <Choices
          items={units}
          label="Expiry unit"
          onChange={setUnit}
          value={unit}
          variant="compact"
        />
      }
    />
  )
}

API Reference

Choices.Props<value extends string = string>

classNameOptional
Typestring
DefaultNone
Additional class names for the root.
itemsRequired
Typereadonly Item<value>[]
DefaultNone
Selectable choices.
labelRequired
Typestring
DefaultNone
Accessible label for the choices group.
onChangeRequired
Type(value: value) => void
DefaultNone
Called with the selected option value.
styleOptional
TypeCSSProperties
DefaultNone
Custom root styles.
valueOptional
Typevalue
DefaultNone
Current selected option value. Leave undefined when no option is selected.
variantOptional
Type'compact' | 'default'
Default'default'
Visual size and treatment.
Inherits HTMLAttributes<HTMLDivElement>, except children, defaultValue, onChange.

Choices.Item<value extends string = string>

A selectable option.

disabledOptional
Typeboolean
DefaultNone
Disable this option.
labelRequired
TypeReactNode
DefaultNone
Visible option label.
valueRequired
Typevalue
DefaultNone
Stable option value.