Skip to content

Radio ​

A radio component for selecting a single option from a set, with support for groups.

NameCategoryDescriptionTypeDefault
type? StylePreset theme color type'primary' | 'success' | 'warning' | 'danger' | 'info'—
type? StylePreset theme color for all child radios'primary' | 'success' | 'warning' | 'danger' | 'info'—
size? SizeSize'large' | 'small'—
size? SizeSize for all child radios'large' | 'small'—
color? ColorCustom hex colorstring—
color? ColorCustom hex color for all child radiosstring—
disabled? StateWhether disabledbooleanfalse
disabled? StateWhether to disable all child radiosbooleanfalse
name? BehaviorNative name attributestring—
id? BehaviorNative id attributestring—
name? BehaviorName attribute for all child radiosstring—
model-value / v-model? ContentBinding valuestring | number | boolean—
value? ContentIdentifier value. Radio is checked when modelValue equals valuestring | number | boolean—
label? ContentLabel textstring—
model-value / v-model? ContentBinding valuestring | number | boolean—
change? EventTriggered when selected value changes(value: RadioValueType) => void—
change? EventTriggered when selected value changes(value: RadioValueType) => void—
default? SlotCustom label content—
default? SlotChild radio content—
focus? ExposeFocus the radio() => void—
checked? ExposeWhether checkedComputedRef<boolean>—

Basic Usage ​

Bind v-model to a variable and set the value prop. The radio is checked when modelValue === value.

<template>
  <div class="demo-radio">
    <px-radio v-model="selected" value="a" label="Option A" />
    <px-radio v-model="selected" value="b" label="Option B" />
    <p class="demo-radio__result">Selected: {{ selected }}</p>
  </div>
</template>

<script setup lang="ts">
import { ref } from 'vue';

const selected = ref('a');
</script>

<style scoped>
.demo-radio {
  display: flex;
  align-items: center;
  flex-wrap: wrap;
  gap: 20px;
}
.demo-radio__result {
  font-family: var(--px-font-family);
  font-size: 14px;
  color: var(--px-text-color-secondary);
}
</style>

Disabled State ​

Use disabled property to disable the radio.

<template>
  <div class="demo-radio">
    <px-radio v-model="selected" value="a" label="Disabled selected" disabled />
    <px-radio v-model="selected" value="b" label="Disabled unselected" disabled />
  </div>
</template>

<script setup lang="ts">
import { ref } from 'vue';

const selected = ref('a');
</script>

<style scoped>
.demo-radio {
  display: flex;
  align-items: center;
  gap: 20px;
}
</style>

Type ​

Use type property to apply preset theme colors.

<template>
  <div class="demo-radio">
    <px-radio v-model="v1" value="a" label="Primary" type="primary" />
    <px-radio v-model="v2" value="a" label="Success" type="success" />
    <px-radio v-model="v3" value="a" label="Warning" type="warning" />
    <px-radio v-model="v4" value="a" label="Danger" type="danger" />
    <px-radio v-model="v5" value="a" label="Info" type="info" />
  </div>
</template>

<script setup lang="ts">
import { ref } from 'vue';

const v1 = ref('a');
const v2 = ref('a');
const v3 = ref('a');
const v4 = ref('a');
const v5 = ref('a');
</script>

<style scoped>
.demo-radio {
  display: flex;
  align-items: center;
  flex-wrap: wrap;
  gap: 20px;
}
</style>

Custom Color ​

Use color property to set a custom hex color for the checked state.

<template>
  <div class="demo-radio">
    <px-radio v-model="v1" value="a" label="Coral" color="#ff6b6b" />
    <px-radio v-model="v2" value="a" label="Teal" color="#20c997" />
    <px-radio v-model="v3" value="a" label="Purple" color="#845ef7" />
  </div>
</template>

<script setup lang="ts">
import { ref } from 'vue';

const v1 = ref('a');
const v2 = ref('a');
const v3 = ref('a');
</script>

<style scoped>
.demo-radio {
  display: flex;
  align-items: center;
  gap: 20px;
}
</style>

Different Sizes ​

Use size property to set the radio size.

<template>
  <div class="demo-radio">
    <px-radio v-model="v1" value="a" label="Small" size="small" />
    <px-radio v-model="v2" value="a" label="Default" />
    <px-radio v-model="v3" value="a" label="Large" size="large" />
  </div>
</template>

<script setup lang="ts">
import { ref } from 'vue';

const v1 = ref('a');
const v2 = ref('a');
const v3 = ref('a');
</script>

<style scoped>
.demo-radio {
  display: flex;
  align-items: center;
  gap: 20px;
}
</style>

Radio Group ​

Use PxRadioGroup to manage multiple radios with a single v-model. Only one radio can be selected at a time.

<template>
  <div class="demo-radio">
    <px-radio-group v-model="selected">
      <px-radio value="apple" label="Apple" />
      <px-radio value="banana" label="Banana" />
      <px-radio value="cherry" label="Cherry" />
      <px-radio value="durian" label="Durian" />
    </px-radio-group>
    <p class="demo-radio__result">Selected: {{ selected }}</p>
  </div>
</template>

<script setup lang="ts">
import { ref } from 'vue';

const selected = ref('apple');
</script>

<style scoped>
.demo-radio {
  display: flex;
  flex-direction: column;
  gap: 12px;
}
.demo-radio__result {
  font-family: var(--px-font-family);
  font-size: 14px;
  color: var(--px-text-color-secondary);
}
</style>