Skip to content

Commit 5639ac5

Browse files
committed
main - a821a3e feat(aria/grid): create the aria grid (#32092)
1 parent 507941c commit 5639ac5

12 files changed

Lines changed: 234 additions & 12 deletions

File tree

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,2 +1,3 @@
11
<span class="hljs-keyword">export</span> {<span class="hljs-title class_">ToolbarBasicHorizontalExample</span>} <span class="hljs-keyword">from</span> <span class="hljs-string">&#x27;./toolbar-basic-horizontal/toolbar-basic-horizontal-example&#x27;</span>;
22
<span class="hljs-keyword">export</span> {<span class="hljs-title class_">ToolbarConfigurableExample</span>} <span class="hljs-keyword">from</span> <span class="hljs-string">&#x27;./toolbar-configurable/toolbar-configurable-example&#x27;</span>;
3+
<span class="hljs-keyword">export</span> {<span class="hljs-title class_">ToolbarSkipDisabledExample</span>} <span class="hljs-keyword">from</span> <span class="hljs-string">&#x27;./toolbar-skip-disabled/toolbar-skip-disabled-example&#x27;</span>;
Lines changed: 48 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,48 @@
1+
<span class="hljs-tag">&lt;<span class="hljs-name">div</span> <span class="hljs-attr">class</span>=<span class="hljs-string">&quot;example-container&quot;</span>&gt;</span>
2+
<span class="hljs-tag">&lt;<span class="hljs-name">div</span> <span class="hljs-attr">ngToolbar</span> <span class="hljs-attr">skipDisabled</span>=<span class="hljs-string">&quot;true&quot;</span> <span class="hljs-attr">class</span>=<span class="hljs-string">&quot;example-toolbar&quot;</span> <span class="hljs-attr">aria-label</span>=<span class="hljs-string">&quot;Skip Disabled Toolbar Text Formatting Tools&quot;</span>&gt;</span>
3+
<span class="hljs-tag">&lt;<span class="hljs-name">button</span>
4+
<span class="hljs-attr">ngToolbarWidget</span>
5+
<span class="hljs-attr">class</span>=<span class="hljs-string">&quot;example-radio-button&quot;</span>
6+
(<span class="hljs-attr">click</span>)=<span class="hljs-string">&quot;format(&#x27;bold&#x27;)&quot;</span>
7+
(<span class="hljs-attr">keydown.enter</span>)=<span class="hljs-string">&quot;format(&#x27;bold&#x27;)&quot;</span>&gt;</span>
8+
Bold
9+
<span class="hljs-tag">&lt;/<span class="hljs-name">button</span>&gt;</span>
10+
<span class="hljs-tag">&lt;<span class="hljs-name">button</span>
11+
<span class="hljs-attr">ngToolbarWidget</span>
12+
<span class="hljs-attr">class</span>=<span class="hljs-string">&quot;example-radio-button&quot;</span>
13+
[<span class="hljs-attr">disabled</span>]=<span class="hljs-string">&quot;true&quot;</span>
14+
(<span class="hljs-attr">click</span>)=<span class="hljs-string">&quot;format(&#x27;italic&#x27;)&quot;</span>
15+
(<span class="hljs-attr">keydown.enter</span>)=<span class="hljs-string">&quot;format(&#x27;italic&#x27;)&quot;</span>&gt;</span>
16+
Italic
17+
<span class="hljs-tag">&lt;/<span class="hljs-name">button</span>&gt;</span>
18+
<span class="hljs-tag">&lt;<span class="hljs-name">button</span>
19+
<span class="hljs-attr">ngToolbarWidget</span>
20+
<span class="hljs-attr">class</span>=<span class="hljs-string">&quot;example-radio-button&quot;</span>
21+
(<span class="hljs-attr">click</span>)=<span class="hljs-string">&quot;format(&#x27;underline&#x27;)&quot;</span>
22+
(<span class="hljs-attr">keydown.enter</span>)=<span class="hljs-string">&quot;format(&#x27;underline&#x27;)&quot;</span>&gt;</span>
23+
Underline
24+
<span class="hljs-tag">&lt;/<span class="hljs-name">button</span>&gt;</span>
25+
<span class="hljs-tag">&lt;<span class="hljs-name">ul</span>
26+
<span class="hljs-attr">ngRadioGroup</span>
27+
<span class="hljs-attr">class</span>=<span class="hljs-string">&quot;example-radio-group&quot;</span>
28+
<span class="hljs-attr">aria-label</span>=<span class="hljs-string">&quot;Select text alignment&quot;</span>
29+
&gt;</span>
30+
@for (alignment of alignments; track alignment) {
31+
<span class="hljs-tag">&lt;<span class="hljs-name">li</span>
32+
<span class="hljs-attr">ngRadioButton</span>
33+
[<span class="hljs-attr">value</span>]=<span class="hljs-string">&quot;alignment.value&quot;</span>
34+
[<span class="hljs-attr">disabled</span>]=<span class="hljs-string">&quot;disabledOptions.includes(alignment.value)&quot;</span>
35+
<span class="hljs-attr">class</span>=<span class="hljs-string">&quot;example-radio-button&quot;</span>&gt;</span>
36+
<span class="hljs-tag">&lt;<span class="hljs-name">span</span> <span class="hljs-attr">class</span>=<span class="hljs-string">&quot;example-radio-indicator&quot;</span>&gt;</span><span class="hljs-tag">&lt;/<span class="hljs-name">span</span>&gt;</span>
37+
<span class="hljs-tag">&lt;<span class="hljs-name">span</span>&gt;</span>{{ alignment.label }}<span class="hljs-tag">&lt;/<span class="hljs-name">span</span>&gt;</span>
38+
<span class="hljs-tag">&lt;/<span class="hljs-name">li</span>&gt;</span>
39+
}
40+
<span class="hljs-tag">&lt;/<span class="hljs-name">ul</span>&gt;</span>
41+
<span class="hljs-tag">&lt;<span class="hljs-name">button</span>
42+
<span class="hljs-attr">ngToolbarWidget</span>
43+
<span class="hljs-attr">class</span>=<span class="hljs-string">&quot;example-radio-button&quot;</span>
44+
[<span class="hljs-attr">disabled</span>]=<span class="hljs-string">&quot;true&quot;</span>&gt;</span>
45+
Disabled Action
46+
<span class="hljs-tag">&lt;/<span class="hljs-name">button</span>&gt;</span>
47+
<span class="hljs-tag">&lt;/<span class="hljs-name">div</span>&gt;</span>
48+
<span class="hljs-tag">&lt;/<span class="hljs-name">div</span>&gt;</span>
Lines changed: 32 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,32 @@
1+
<span class="hljs-keyword">import</span> {<span class="hljs-title class_">Component</span>} <span class="hljs-keyword">from</span> <span class="hljs-string">&#x27;@angular/core&#x27;</span>;
2+
<span class="hljs-keyword">import</span> {<span class="hljs-title class_">Toolbar</span>, <span class="hljs-title class_">ToolbarWidget</span>} <span class="hljs-keyword">from</span> <span class="hljs-string">&#x27;@angular/aria/toolbar&#x27;</span>;
3+
<span class="hljs-keyword">import</span> {<span class="hljs-title class_">RadioGroup</span>, <span class="hljs-title class_">RadioButton</span>} <span class="hljs-keyword">from</span> <span class="hljs-string">&#x27;@angular/aria/radio-group&#x27;</span>;
4+
<span class="hljs-keyword">import</span> {<span class="hljs-title class_">LiveAnnouncer</span>} <span class="hljs-keyword">from</span> <span class="hljs-string">&#x27;@angular/cdk/a11y&#x27;</span>;
5+
6+
<span class="hljs-comment">/** <span class="hljs-doctag">@title</span> Skip Disabled Toolbar Example */</span>
7+
<span class="hljs-meta">@Component</span>({
8+
<span class="hljs-attr">selector</span>: <span class="hljs-string">&#x27;toolbar-skip-disabled-example&#x27;</span>,
9+
<span class="hljs-attr">templateUrl</span>: <span class="hljs-string">&#x27;toolbar-skip-disabled-example.html&#x27;</span>,
10+
<span class="hljs-attr">styleUrl</span>: <span class="hljs-string">&#x27;../toolbar-common.css&#x27;</span>,
11+
<span class="hljs-attr">imports</span>: [<span class="hljs-title class_">RadioButton</span>, <span class="hljs-title class_">RadioGroup</span>, <span class="hljs-title class_">Toolbar</span>, <span class="hljs-title class_">ToolbarWidget</span>],
12+
})
13+
<span class="hljs-keyword">export</span> <span class="hljs-keyword">class</span> <span class="hljs-title class_">ToolbarSkipDisabledExample</span> {
14+
<span class="hljs-title function_">constructor</span>(<span class="hljs-params"><span class="hljs-keyword">private</span> <span class="hljs-attr">_liveAnnouncer</span>: <span class="hljs-title class_">LiveAnnouncer</span></span>) {}
15+
alignments = [
16+
{<span class="hljs-attr">value</span>: <span class="hljs-string">&#x27;left&#x27;</span>, <span class="hljs-attr">label</span>: <span class="hljs-string">&#x27;Left&#x27;</span>},
17+
{<span class="hljs-attr">value</span>: <span class="hljs-string">&#x27;center&#x27;</span>, <span class="hljs-attr">label</span>: <span class="hljs-string">&#x27;Center&#x27;</span>},
18+
{<span class="hljs-attr">value</span>: <span class="hljs-string">&#x27;right&#x27;</span>, <span class="hljs-attr">label</span>: <span class="hljs-string">&#x27;Right&#x27;</span>},
19+
];
20+
21+
<span class="hljs-comment">// Control for which radio options are individually disabled</span>
22+
<span class="hljs-attr">disabledOptions</span>: <span class="hljs-built_in">string</span>[] = [<span class="hljs-string">&#x27;center&#x27;</span>];
23+
24+
<span class="hljs-title function_">format</span>(<span class="hljs-params"><span class="hljs-attr">tool</span>: <span class="hljs-built_in">string</span></span>) {
25+
<span class="hljs-variable language_">console</span>.<span class="hljs-title function_">log</span>(<span class="hljs-string">`Tool activated: <span class="hljs-subst">${tool}</span>`</span>);
26+
<span class="hljs-variable language_">this</span>.<span class="hljs-property">_liveAnnouncer</span>.<span class="hljs-title function_">announce</span>(<span class="hljs-string">`<span class="hljs-subst">${tool}</span> applied`</span>, <span class="hljs-string">&#x27;polite&#x27;</span>);
27+
}
28+
<span class="hljs-title function_">test</span>(<span class="hljs-params"><span class="hljs-attr">action</span>: <span class="hljs-built_in">string</span></span>) {
29+
<span class="hljs-variable language_">console</span>.<span class="hljs-title function_">log</span>(<span class="hljs-string">`Action triggered: <span class="hljs-subst">${action}</span>`</span>);
30+
<span class="hljs-variable language_">this</span>.<span class="hljs-property">_liveAnnouncer</span>.<span class="hljs-title function_">announce</span>(<span class="hljs-string">`<span class="hljs-subst">${action}</span> button activated`</span>, <span class="hljs-string">&#x27;polite&#x27;</span>);
31+
}
32+
}
Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,2 +1,3 @@
11
export {ToolbarBasicHorizontalExample} from './toolbar-basic-horizontal/toolbar-basic-horizontal-example';
22
export {ToolbarConfigurableExample} from './toolbar-configurable/toolbar-configurable-example';
3+
export {ToolbarSkipDisabledExample} from './toolbar-skip-disabled/toolbar-skip-disabled-example';
Lines changed: 48 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,48 @@
1+
<div class="example-container">
2+
<div ngToolbar skipDisabled="true" class="example-toolbar" aria-label="Skip Disabled Toolbar Text Formatting Tools">
3+
<button
4+
ngToolbarWidget
5+
class="example-radio-button"
6+
(click)="format('bold')"
7+
(keydown.enter)="format('bold')">
8+
Bold
9+
</button>
10+
<button
11+
ngToolbarWidget
12+
class="example-radio-button"
13+
[disabled]="true"
14+
(click)="format('italic')"
15+
(keydown.enter)="format('italic')">
16+
Italic
17+
</button>
18+
<button
19+
ngToolbarWidget
20+
class="example-radio-button"
21+
(click)="format('underline')"
22+
(keydown.enter)="format('underline')">
23+
Underline
24+
</button>
25+
<ul
26+
ngRadioGroup
27+
class="example-radio-group"
28+
aria-label="Select text alignment"
29+
>
30+
@for (alignment of alignments; track alignment) {
31+
<li
32+
ngRadioButton
33+
[value]="alignment.value"
34+
[disabled]="disabledOptions.includes(alignment.value)"
35+
class="example-radio-button">
36+
<span class="example-radio-indicator"></span>
37+
<span>{{ alignment.label }}</span>
38+
</li>
39+
}
40+
</ul>
41+
<button
42+
ngToolbarWidget
43+
class="example-radio-button"
44+
[disabled]="true">
45+
Disabled Action
46+
</button>
47+
</div>
48+
</div>
Lines changed: 32 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,32 @@
1+
import {Component} from '@angular/core';
2+
import {Toolbar, ToolbarWidget} from '@angular/aria/toolbar';
3+
import {RadioGroup, RadioButton} from '@angular/aria/radio-group';
4+
import {LiveAnnouncer} from '@angular/cdk/a11y';
5+
6+
/** @title Skip Disabled Toolbar Example */
7+
@Component({
8+
selector: 'toolbar-skip-disabled-example',
9+
templateUrl: 'toolbar-skip-disabled-example.html',
10+
styleUrl: '../toolbar-common.css',
11+
imports: [RadioButton, RadioGroup, Toolbar, ToolbarWidget],
12+
})
13+
export class ToolbarSkipDisabledExample {
14+
constructor(private _liveAnnouncer: LiveAnnouncer) {}
15+
alignments = [
16+
{value: 'left', label: 'Left'},
17+
{value: 'center', label: 'Center'},
18+
{value: 'right', label: 'Right'},
19+
];
20+
21+
// Control for which radio options are individually disabled
22+
disabledOptions: string[] = ['center'];
23+
24+
format(tool: string) {
25+
console.log(`Tool activated: ${tool}`);
26+
this._liveAnnouncer.announce(`${tool} applied`, 'polite');
27+
}
28+
test(action: string) {
29+
console.log(`Action triggered: ${action}`);
30+
this._liveAnnouncer.announce(`${action} button activated`, 'polite');
31+
}
32+
}

0 commit comments

Comments
 (0)