- 
                Notifications
    
You must be signed in to change notification settings  - Fork 156
 
Radio Specification
Team Name: Phoenix
Developer: Zdravko Kolev
Designer: Stefan Ivanov
- Product Owner: Radoslav Mirchev | Date:
 - Radoslav Karaivanov | Date:
 
| Version | Users | Date | Notes | 
|---|---|---|---|
| 1 | Zdravko Kolev | Date 02 Feb 2017 | Initial Draft | 
| 2 | Stefan Ivanov and Simeon Simeonov | Date 20 Jul 2021 | Rewrite for completeness | 
The igx-radio component renders a group of radio buttons.
Provide an API for the most common use cases when selecting an option from a set of available options. The igx-radio button should also provide ways to set and get its validity when used in the context of Web Forms.
- Each radio button should be identifiable via a property, like name.
 - Each radio button should represent a unit of information, like value.
 - Each radio button should provide a way to be disabled.
 - Each radio button should be interacted with via mouse and/or keyboard.
 - Each radio button should be accessible.
 - Each radio button should have an optional label.
 - Each radio button should have a configurable label position - 
beforeorafter. - Each radio button should emit an event when it gains focus.
 - Each radio button should emit an event when it loses focus.
 - Each radio button should emit an event when its checked status changes.
 - Each radio button should be able to report validation errors in the context of web forms.
 - The radio group should provide an alignment option that renders radio buttons in column/row layout.
 - The radio group should provide a way to be disabled.
 - The radio group should set the label position of its radio buttons consistently to 
beforeorafter. - The radio group should provide a way to be a required form field.
 
Developer stories
- As a developer, I want to be able to 
namethe radio button so that I can easily identify it when used with other buttons of the same type. - As a developer, I want to be able to set the 
valueof the radio button so that I can associate a piece of information with it. - As a developer, I want to be able to put text between the opening and closing brackets of the radio button so that it can be used as a label.
 - As a developer, I want to be able to use the radio button in Web Forms as a regular input element of type radio.
 - As a developer, I want to be able to position the label of the radio button either before or after the radio control so that it better suits my design.
 - As a developer, I want to be able to 
disablethe radio button so that the user is not able to select that button. - As a developer, I want to be able to change the 
checkedstate of the radio button declaratively so that the button is selected at initialization. - As a developer, I want to be able to change the 
invalidstate of the radio button declaratively so that I set its validity at initialization. - As a developer, I want to be able to programmatically click the radio button so that I can interact with it via means other than a computer mouse.
 - As a developer, I want to be able to programmatically focus the radio button so that I can manually trigger focus.
 - As a developer, I want to be able to programmatically blur the radio button so that I can manually trigger blur.
 - As a developer, I want to be able to listen to 
blur,focus, andchangeevents so that I can better manage the state of the radio button. - As a developer, I want to be able to check the validity of the radio button so that I can handle form errors and/or warnings.
 - As a developer, I want to be able to set a custom validation message so that the users of the radio button can easily identify and fix form errors and/or warnings.
 - As a developer, I want to be able to customize the appearance of the radio button so that it better fits the design language of my application.
 
End-user stories
- As an end-user, I want to be able to identify if an individual radio button is disabled or not.
 - As an end-user, I want to be able to select a radio button in a group of other buttons via the arrow and tab keys on my keyboard or my computer mouse.
 - As an end-user, I want to be able to able to differentiate between selected and deselected radio buttons.
 - As an end-user, I want to be able to identify the option I am selecting via label or some other visual aid.
 - As an end-user, I want to be able to identify if my selection is invalid.
 - As an end-user, I want to be able to identify if the radio group is disabled or not.
 - As an end-user, I want all radio buttons in a group to have consistent label alignment, so that they are easier to read.
 
The radio button component is small and circular in shape. When selected it is represented by a concentric circle with two rings where the inner ring is filled. A deselected radio button is represented by a single outlined circle. The radio button can have an optional label that makes it easy to identify when used in a radio group. The user can click on either the circle or the label to select the radio button. Navigating between radio buttons in a group using the arrow keys on a keyboard also changes the currently selected radio button.
3.2.1 Creating a radio group:
<igx-radio *ngFor="let item of ['Foo', 'Bar', 'Baz']" 
    value="{{item}}" name="group" 
    [(ngModel)]="user.favouriteVarName">{{item}}
</igx-radio>Attaching change event example:
<igx-radio
    value="{{user.id}}"
    tabIndex="50"
    (change)="doAlert($event)"
    (focus)="doAlert($event)"
    (blur)="doAlert($event)"
    [(ngModel)]="user.favouriteVarName">
    {{user.name}}
</igx-radio>Properties- 
disabled- toggle element accessibility (enabled/disabled). - 
checked- set initial checked state of the element (true). Events- 
change- triggered on change state change of the element. - 
focus- triggered on focus of the element (focus in). - 
blur- triggered when focus is moved away from the element. 
You should be able to configure the igx-radio by setting its properties:
| Name | Description | Type | Default value | Reflected | 
|---|---|---|---|---|
name | 
Sets the name of the radio button. | string | - | |
value | 
Sets the value of the radio button. | string | - | |
checked | 
Sets the checked state of the radio button. | Boolean | false | 
|
disabled | 
Sets the disabled state of the radio button. | Boolean | false | 
|
disableRipple | 
Disables the ripple effect. | Boolean | false | 
|
focused | 
Sets/gets whether the radio button is on focus. | Boolean | false | 
|
invalid | 
Sets the validity of the radio button. | Boolean | false | 
|
label-position | 
Sets the position of the label. | string | after | 
|
required | 
Sets/gets whether the radio button is required. | Boolean | false | 
The igx-radio and the radio group directive emit the following event:
| Name | Description | Type | 
|---|---|---|
change | 
Emitted when the radio button changes its checked state | - | 
The igx-radio exposes the following methods:
| Name | Description | Arguments | 
|---|---|---|
select | 
Selects the current radio button. | - | 
deselect | 
Deselects the current radio button. | - | 
writeValue | 
Checks whether the provided value is consistent to the current radio button and returns a boolean result. | value:any | 
The radio group directive has the following accessors:
| Name | Description | Type | Default value | 
|---|---|---|---|
name | 
Sets/gets the name attribute of the radio group component. All child radio buttons inherits this name. | - | - | 
value | 
Sets/gets the value attribute. | - | - | 
alignment | 
Returns the alignment of the igx-radio-group. | - | - | 
disabled | 
Allows to disable the radio group. | Boolean | false | 
selected | 
Sets/gets the selected child radio button. | - | - | 
label-position | 
Sets/gets the position of the label in the child radio buttons. | string | after | 
required | 
Sets/gets whether the radio button is required. | Boolean | false | 
Aria attributes set on the input control: