Skip to content

Commit ea302c9

Browse files
committed
feat(aria/tree): adds tree nav rtl example to dev-app
Creates tree nav rtl example and adds as a demo to dev-app.
1 parent ce25eb9 commit ea302c9

File tree

7 files changed

+92
-0
lines changed

7 files changed

+92
-0
lines changed

src/components-examples/aria/tree/BUILD.bazel

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -14,6 +14,7 @@ ng_project(
1414
"//:node_modules/@angular/core",
1515
"//:node_modules/@angular/forms",
1616
"//src/aria/tree",
17+
"//src/cdk/a11y",
1718
"//src/material/checkbox",
1819
"//src/material/form-field",
1920
"//src/material/icon",

src/components-examples/aria/tree/index.ts

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -6,5 +6,6 @@ export {TreeDisabledSkippedExample} from './tree-disabled-skipped/tree-disabled-
66
export {TreeMultiSelectExample} from './tree-multi-select/tree-multi-select-example';
77
export {TreeMultiSelectFollowFocusExample} from './tree-multi-select-follow-focus/tree-multi-select-follow-focus-example';
88
export {TreeNavExample} from './tree-nav/tree-nav-example';
9+
export {TreeNavRtlExample} from './tree-nav-rtl/tree-nav-rtl-example';
910
export {TreeSingleSelectExample} from './tree-single-select/tree-single-select-example';
1011
export {TreeSingleSelectFollowFocusExample} from './tree-single-select-follow-focus/tree-single-select-follow-focus-example';

src/components-examples/aria/tree/tree-common.css

Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -44,6 +44,14 @@
4444
transform: rotate(90deg);
4545
}
4646

47+
.example-tree[dir='rtl'] .example-tree-item .example-parent-icon {
48+
transform: scaleX(-1);
49+
}
50+
51+
.example-tree[dir='rtl'] .example-tree-item[aria-expanded='true'] .example-parent-icon {
52+
transform: scaleX(-1) rotate(90deg);
53+
}
54+
4755
.example-selected-icon {
4856
visibility: hidden;
4957
margin-left: auto;
Lines changed: 49 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,49 @@
1+
<ul ngTree [nav]="true" dir="rtl" #tree="ngTree" class="example-tree">
2+
<ng-template
3+
[ngTemplateOutlet]="treeNodes"
4+
[ngTemplateOutletContext]="{nodes: nodes, parent: tree}"
5+
/>
6+
</ul>
7+
8+
<ng-template #treeNodes let-nodes="nodes" let-parent="parent">
9+
@for (node of nodes; track node.value) {
10+
<a
11+
ngTreeItem
12+
[parent]="parent"
13+
[value]="node.value"
14+
[label]="node.name"
15+
[disabled]="node.disabled"
16+
[selectable]="!node.children"
17+
#treeItem="ngTreeItem"
18+
class="example-tree-item example-selectable example-stateful"
19+
href="#{{ node.name }}"
20+
(click)="$event.preventDefault()"
21+
>
22+
<span
23+
aria-hidden="true"
24+
class="material-symbols-outlined example-parent-icon example-icon"
25+
>{{node.children ? 'chevron_right' : ''}}</span
26+
>
27+
<span
28+
aria-hidden="true"
29+
class="material-symbols-outlined example-icon"
30+
>{{node.children ? 'folder' : 'docs'}}</span
31+
>
32+
{{ node.name }}
33+
<span aria-hidden="true" class="material-symbols-outlined example-selected-icon example-icon"
34+
>check</span
35+
>
36+
</a>
37+
38+
@if (node.children) {
39+
<ul role="group">
40+
<ng-template ngTreeItemGroup [ownedBy]="treeItem" #group="ngTreeItemGroup">
41+
<ng-template
42+
[ngTemplateOutlet]="treeNodes"
43+
[ngTemplateOutletContext]="{nodes: node.children, parent: group}"
44+
/>
45+
</ng-template>
46+
</ul>
47+
}
48+
}
49+
</ng-template>
Lines changed: 26 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,26 @@
1+
/**
2+
* @license
3+
* Copyright Google LLC All Rights Reserved.
4+
*
5+
* Use of this source code is governed by an MIT-style license that can be
6+
* found in the LICENSE file at https://angular.dev/license
7+
*/
8+
9+
import {Component} from '@angular/core';
10+
import {Dir} from '@angular/cdk/bidi';
11+
import {NgTemplateOutlet} from '@angular/common';
12+
import {Tree, TreeItem, TreeItemGroup} from '@angular/aria/tree';
13+
import {TreeNode, NODES} from '../tree-data';
14+
15+
/**
16+
* @title Tree with nav mode.
17+
*/
18+
@Component({
19+
selector: 'tree-nav-rtl-example',
20+
templateUrl: 'tree-nav-rtl-example.html',
21+
styleUrl: '../tree-common.css',
22+
imports: [Dir, Tree, TreeItem, TreeItemGroup, NgTemplateOutlet],
23+
})
24+
export class TreeNavRtlExample {
25+
nodes: TreeNode[] = NODES;
26+
}

src/dev-app/aria-tree/tree-demo.html

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -44,6 +44,11 @@ <h2>Active Descendant</h2>
4444
<h2>Nav Mode</h2>
4545
<tree-nav-example></tree-nav-example>
4646
</div>
47+
48+
<div class="example-tree-container">
49+
<h2>Rtl Nav Mode</h2>
50+
<tree-nav-rtl-example></tree-nav-rtl-example>
51+
</div>
4752
</div>
4853

4954
<div class="example-configurable-tree-container">

src/dev-app/aria-tree/tree-demo.ts

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -18,6 +18,7 @@ import {
1818
TreeNavExample,
1919
TreeSingleSelectExample,
2020
TreeSingleSelectFollowFocusExample,
21+
TreeNavRtlExample,
2122
} from '@angular/components-examples/aria/tree';
2223

2324
@Component({
@@ -31,6 +32,7 @@ import {
3132
TreeMultiSelectExample,
3233
TreeMultiSelectFollowFocusExample,
3334
TreeNavExample,
35+
TreeNavRtlExample,
3436
TreeSingleSelectExample,
3537
TreeSingleSelectFollowFocusExample,
3638
],

0 commit comments

Comments
 (0)