Skip to content

Commit b44ab14

Browse files
authored
Merge pull request #2518 from Akshat55/tile-group-accessibility
fix: Tile group accessibility
2 parents d6009ab + 0b1e9f2 commit b44ab14

File tree

3 files changed

+28
-16
lines changed

3 files changed

+28
-16
lines changed

src/tiles/selection-tile.component.ts

Lines changed: 10 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -7,32 +7,30 @@ import {
77
HostListener,
88
AfterViewInit
99
} from "@angular/core";
10-
import { NG_VALUE_ACCESSOR } from "@angular/forms";
1110
import { I18n } from "carbon-components-angular/i18n";
1211

1312
@Component({
1413
selector: "ibm-selection-tile",
1514
template: `
15+
<input
16+
#input
17+
[tabindex]="disabled ? null : 0"
18+
class="bx--tile-input"
19+
[id]="id"
20+
[disabled]="disabled"
21+
[type]="(multiple ? 'checkbox': 'radio')"
22+
[value]="value"
23+
[name]="name"
24+
(change)="onChange($event)"/>
1625
<label
1726
class="bx--tile bx--tile--selectable"
18-
tabindex="disabled ? null : 0"
1927
[for]="id"
2028
[ngClass]="{
2129
'bx--tile--is-selected' : selected,
2230
'bx--tile--light': theme === 'light',
2331
'bx--tile--disabled' : disabled
2432
}"
2533
[attr.aria-label]="i18n.get('TILES.TILE') | async">
26-
<input
27-
#input
28-
tabindex="-1"
29-
class="bx--tile-input"
30-
[id]="id"
31-
[disabled]="disabled"
32-
[type]="(multiple ? 'checkbox': 'radio')"
33-
[value]="value"
34-
[name]="name"
35-
(change)="onChange($event)"/>
3634
<div class="bx--tile__checkmark">
3735
<svg width="16" height="16" viewBox="0 0 16 16">
3836
<path d="M8 16A8 8 0 1 1 8 0a8 8 0 0 1 0 16zm3.646-10.854L6.75 10.043 4.354 7.646l-.708.708 3.104 3.103 5.604-5.603-.708-.708z"

src/tiles/tile-group.component.ts

Lines changed: 16 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -7,7 +7,8 @@ import {
77
HostBinding,
88
ContentChildren,
99
QueryList,
10-
OnDestroy
10+
OnDestroy,
11+
TemplateRef
1112
} from "@angular/core";
1213
import { SelectionTile } from "./selection-tile.component";
1314
import { NG_VALUE_ACCESSOR } from "@angular/forms";
@@ -17,7 +18,14 @@ import { takeUntil } from "rxjs/operators";
1718

1819
@Component({
1920
selector: "ibm-tile-group",
20-
template: `<ng-content select="ibm-selection-tile"></ng-content>`,
21+
template: `
22+
<fieldset>
23+
<legend *ngIf="legend" class="bx--label">
24+
<ng-template *ngIf="isTemplate(legend); else legendLabel;" [ngTemplateOutlet]="legend"></ng-template>
25+
<ng-template #legendLabel>{{legend}}</ng-template>
26+
</legend>
27+
<ng-content select="ibm-selection-tile"></ng-content>
28+
</fieldset>`,
2129
providers: [
2230
{
2331
provide: NG_VALUE_ACCESSOR,
@@ -37,6 +45,8 @@ export class TileGroup implements AfterContentInit, OnDestroy {
3745
*/
3846
@Input() multiple = false;
3947

48+
@Input() legend: string | TemplateRef<any>;
49+
4050
/**
4151
* Emits an event when the tile selection changes.
4252
*
@@ -124,4 +134,8 @@ export class TileGroup implements AfterContentInit, OnDestroy {
124134
registerOnTouched(fn: any) {
125135
this.onTouched = fn;
126136
}
137+
138+
public isTemplate(value) {
139+
return value instanceof TemplateRef;
140+
}
127141
}

src/tiles/tiles.stories.ts

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -136,7 +136,7 @@ storiesOf("Components|Tiles", module)
136136
Edit on Carbon UI Builder
137137
</a>
138138
<br><br>
139-
<ibm-tile-group (selected)="selected($event)" [multiple]="false">
139+
<ibm-tile-group (selected)="selected($event)" [multiple]="false" legend="Radio tile group">
140140
<ibm-selection-tile value="tile1" [disabled]="disabled" [selected]="true" [theme]="theme">Selectable Tile</ibm-selection-tile>
141141
<ibm-selection-tile value="tile2" [disabled]="disabled" [theme]="theme">Selectable Tile</ibm-selection-tile>
142142
<ibm-selection-tile value="tile3" [disabled]="disabled" [theme]="theme">Selectable Tile</ibm-selection-tile>
@@ -174,7 +174,7 @@ storiesOf("Components|Tiles", module)
174174
Edit on Carbon UI Builder
175175
</a>
176176
<br><br>
177-
<ibm-tile-group (selected)="selected($event)" [multiple]="true">
177+
<ibm-tile-group (selected)="selected($event)" [multiple]="true" legend="Multi-select tile group">
178178
<ibm-selection-tile value="tile1" [selected]="true" [theme]="theme" [disabled]="disabled">Selectable Tile</ibm-selection-tile>
179179
<ibm-selection-tile value="tile2" [theme]="theme" [disabled]="disabled">Selectable Tile</ibm-selection-tile>
180180
<ibm-selection-tile value="tile3" [theme]="theme" [disabled]="disabled">Selectable Tile</ibm-selection-tile>

0 commit comments

Comments
 (0)