Radio Component v1.0.1
Overview
Import
Import the radio directive from the angular-awesome package:
// Import the radio directive import { WaRadioDirective } from 'angular-awesome/radio';
Examples
Radio Examples
Basic Usage
<wa-radio-group label="Select an option">
<wa-radio value="option1">Option 1</wa-radio>
<wa-radio value="option2">Option 2</wa-radio>
<wa-radio value="option3">Option 3</wa-radio>
</wa-radio-group>
With Different Orientations
<!-- Vertical orientation (default) -->
<wa-radio-group label="Vertical Radio Group" orientation="vertical">
<wa-radio value="option1">Option 1</wa-radio>
<wa-radio value="option2">Option 2</wa-radio>
<wa-radio value="option3">Option 3</wa-radio>
</wa-radio-group>
<!-- Horizontal orientation -->
<wa-radio-group label="Horizontal Radio Group" orientation="horizontal">
<wa-radio value="option1">Option 1</wa-radio>
<wa-radio value="option2">Option 2</wa-radio>
<wa-radio value="option3">Option 3</wa-radio>
</wa-radio-group>
Different Sizes
<wa-radio-group label="Small Radio Group" size="small">
<wa-radio value="option1">Option 1</wa-radio>
<wa-radio value="option2">Option 2</wa-radio>
</wa-radio-group>
<wa-radio-group label="Medium Radio Group" size="medium">
<wa-radio value="option1">Option 1</wa-radio>
<wa-radio value="option2">Option 2</wa-radio>
</wa-radio-group>
<wa-radio-group label="Large Radio Group" size="large">
<wa-radio value="option1">Option 1</wa-radio>
<wa-radio value="option2">Option 2</wa-radio>
</wa-radio-group>
With Initial Value
<wa-radio-group label="Select an option" value="option2">
<wa-radio value="option1">Option 1</wa-radio>
<wa-radio value="option2">Option 2</wa-radio>
<wa-radio value="option3">Option 3</wa-radio>
</wa-radio-group>
With Hint
<wa-radio-group
label="Select an option"
hint="Please choose one of the following options">
<wa-radio value="option1">Option 1</wa-radio>
<wa-radio value="option2">Option 2</wa-radio>
<wa-radio value="option3">Option 3</wa-radio>
</wa-radio-group>
<!-- Using HTML in hint -->
<wa-radio-group label="Select an option">
<div slot="hint">
Please choose <strong>one</strong> of the following options
</div>
<wa-radio value="option1">Option 1</wa-radio>
<wa-radio value="option2">Option 2</wa-radio>
<wa-radio value="option3">Option 3</wa-radio>
</wa-radio-group>
Required Radio Group
<wa-radio-group
label="Select an option"
[required]="true">
<wa-radio value="option1">Option 1</wa-radio>
<wa-radio value="option2">Option 2</wa-radio>
<wa-radio value="option3">Option 3</wa-radio>
</wa-radio-group>
Disabled States
<!-- Disabled radio group -->
<wa-radio-group
label="Disabled Radio Group"
[disabled]="true"
value="option1">
<wa-radio value="option1">Option 1</wa-radio>
<wa-radio value="option2">Option 2</wa-radio>
<wa-radio value="option3">Option 3</wa-radio>
</wa-radio-group>
<!-- Individual disabled radio -->
<wa-radio-group label="Partially Disabled Group">
<wa-radio value="option1">Option 1</wa-radio>
<wa-radio value="option2" [disabled]="true">Option 2 (Disabled)</wa-radio>
<wa-radio value="option3">Option 3</wa-radio>
</wa-radio-group>
Custom Styling
<!-- Custom gap between radio buttons -->
<wa-radio-group
label="Custom Gap Radio Group"
[styleRadiosGap]="'20px'">
<wa-radio value="option1">Option 1</wa-radio>
<wa-radio value="option2">Option 2</wa-radio>
<wa-radio value="option3">Option 3</wa-radio>
</wa-radio-group>
<!-- Custom radio styling -->
<wa-radio-group label="Custom Styled Radios">
<wa-radio
value="option1"
[styleBackgroundColor]="'#f8f9fa'"
[styleBackgroundColorChecked]="'#4caf50'"
[styleBorderColor]="'#ced4da'"
[styleBorderColorChecked]="'#4caf50'"
[styleCheckedIconColor]="'#ffffff'">
Custom Styled Option
</wa-radio>
<wa-radio value="option2">Regular Option</wa-radio>
</wa-radio-group>
Radio Buttons
<wa-radio-group label="Radio Buttons">
<wa-radio-button value="option1">Option 1</wa-radio-button>
<wa-radio-button value="option2">Option 2</wa-radio-button>
<wa-radio-button value="option3">Option 3</wa-radio-button>
</wa-radio-group>
<!-- With prefix and suffix -->
<wa-radio-group label="Radio Buttons with Icons">
<wa-radio-button value="home" [withPrefix]="true">
<wa-icon name="home" slot="prefix"></wa-icon>
Home
</wa-radio-button>
<wa-radio-button value="settings" [withPrefix]="true">
<wa-icon name="settings" slot="prefix"></wa-icon>
Settings
</wa-radio-button>
<wa-radio-button value="profile" [withPrefix]="true" [withSuffix]="true">
<wa-icon name="user" slot="prefix"></wa-icon>
Profile
<wa-badge slot="suffix">New</wa-badge>
</wa-radio-button>
</wa-radio-group>
<!-- Custom styled radio buttons -->
<wa-radio-group label="Custom Styled Radio Buttons">
<wa-radio-button
value="option1"
[styleIndicatorColor]="'#4caf50'"
[styleIndicatorWidth]="'3px'">
Green Option
</wa-radio-button>
<wa-radio-button
value="option2"
[styleIndicatorColor]="'#2196f3'"
[styleIndicatorWidth]="'3px'">
Blue Option
</wa-radio-button>
<wa-radio-button
value="option3"
[styleIndicatorColor]="'#f44336'"
[styleIndicatorWidth]="'3px'">
Red Option
</wa-radio-button>
</wa-radio-group>
Event Handling
<wa-radio-group
label="Interactive Radio Group"
(input)="onRadioInput($event)"
(change)="onRadioChange($event)"
(focusEvent)="onRadioFocus()"
(blurEvent)="onRadioBlur()"
(waInvalid)="onRadioInvalid($event)">
<wa-radio value="option1">Option 1</wa-radio>
<wa-radio value="option2">Option 2</wa-radio>
<wa-radio value="option3">Option 3</wa-radio>
</wa-radio-group>
// In your component
onRadioInput(event: Event): void {
console.log('Radio input:', (event.target as HTMLInputElement).value);
}
onRadioChange(event: Event): void {
console.log('Radio change:', (event.target as HTMLInputElement).value);
}
onRadioFocus(): void {
console.log('Radio group focused');
}
onRadioBlur(): void {
console.log('Radio group blurred');
}
onRadioInvalid(event: CustomEvent): void {
console.log('Radio group invalid:', event.detail);
}
Using with Angular Bindings
import { Component } from '@angular/core';
@Component({
selector: 'app-radio-demo',
template: `
<wa-radio-group
[label]="groupLabel"
[value]="selectedValue"
[orientation]="groupOrientation"
[size]="groupSize"
[required]="isRequired"
[disabled]="isDisabled"
(change)="onSelectionChange($event)">
<wa-radio *ngFor="let option of options" [value]="option.value" [disabled]="option.disabled">
{{ option.label }}
</wa-radio>
</wa-radio-group>
<div>Selected value: {{ selectedValue }}</div>
`
})
export class RadioDemoComponent {
groupLabel = 'Select an option';
selectedValue = 'option1';
groupOrientation = 'vertical';
groupSize = 'medium';
isRequired = true;
isDisabled = false;
options = [
{ value: 'option1', label: 'Option 1', disabled: false },
{ value: 'option2', label: 'Option 2', disabled: false },
{ value: 'option3', label: 'Option 3', disabled: true }
];
onSelectionChange(event: Event): void {
this.selectedValue = (event.target as HTMLInputElement).value;
console.log('Selection changed:', this.selectedValue);
}
}
Using with ngModel
<form #radioForm="ngForm">
<wa-radio-group
label="Select your favorite color"
name="favoriteColor"
[(ngModel)]="favoriteColor"
required>
<wa-radio value="red">Red</wa-radio>
<wa-radio value="green">Green</wa-radio>
<wa-radio value="blue">Blue</wa-radio>
</wa-radio-group>
<div>Your favorite color is: {{ favoriteColor }}</div>
<button type="submit" [disabled]="radioForm.invalid">Submit</button>
</form>
Real-World Example: Survey Form
<form #surveyForm="ngForm" (ngSubmit)="submitSurvey()">
<h2>Customer Satisfaction Survey</h2>
<wa-radio-group
label="How would you rate our service?"
name="serviceRating"
[(ngModel)]="survey.serviceRating"
required>
<wa-radio value="excellent">Excellent</wa-radio>
<wa-radio value="good">Good</wa-radio>
<wa-radio value="average">Average</wa-radio>
<wa-radio value="poor">Poor</wa-radio>
</wa-radio-group>
<wa-radio-group
label="How likely are you to recommend us to a friend?"
name="recommendation"
[(ngModel)]="survey.recommendation"
required>
<wa-radio value="veryLikely">Very Likely</wa-radio>
<wa-radio value="likely">Likely</wa-radio>
<wa-radio value="neutral">Neutral</wa-radio>
<wa-radio value="unlikely">Unlikely</wa-radio>
<wa-radio value="veryUnlikely">Very Unlikely</wa-radio>
</wa-radio-group>
<wa-radio-group
label="Which feature do you use most often?"
name="mostUsedFeature"
[(ngModel)]="survey.mostUsedFeature"
required>
<wa-radio value="feature1">Feature 1</wa-radio>
<wa-radio value="feature2">Feature 2</wa-radio>
<wa-radio value="feature3">Feature 3</wa-radio>
<wa-radio value="other">Other</wa-radio>
</wa-radio-group>
<wa-textarea
label="Additional Comments"
name="comments"
[(ngModel)]="survey.comments">
</wa-textarea>
<button type="submit" [disabled]="surveyForm.invalid">Submit Survey</button>
</form>