feat: navigation bar

This commit is contained in:
2026-01-24 19:26:29 -03:00
parent 00209ce137
commit 68866f4725
5 changed files with 93 additions and 0 deletions

View File

@@ -0,0 +1,8 @@
export class BottomNavigationBarOption {
constructor(
public readonly label: string,
public readonly icon: string,
public readonly path: string,
public readonly fontSet: string = '',
) {}
}

View File

@@ -0,0 +1,8 @@
<mat-toolbar class="bottom-nav">
@for(option of options(); track option.path) {
<button [routerLink]="option.path" mat-button class="bottom-nav__item" routerLinkActive="bottom-nav__item--selected">
<mat-icon [fontSet]="option.fontSet">{{option.icon}}</mat-icon>
<span>{{option.label|translate|titlecase}}</span>
</button>
}
</mat-toolbar>

View File

@@ -0,0 +1,37 @@
.bottom-nav {
align-items: center;
background: var(--mat-sys-primary-container);
display: flex;
height: 56px;
justify-content: space-around;
&__item {
align-items: center;
background-color: unset;
border: none;
display: flex;
flex-direction: column;
& mat-icon {
color: rgba(#ffffff, 0.6);
height: 24px;
width: 24px;
}
& span {
color: rgba(#ffffff, 0.6);
font-size: 0.75rem;
line-height: 1;
margin-top: 4px;
}
&--selected {
& mat-icon {
color: #ffffff;
}
& span {
color: #ffffff;
}
}
}
}

View File

@@ -0,0 +1,23 @@
import { ComponentFixture, TestBed } from '@angular/core/testing';
import { BottomNavigationBar } from './bottom-navigation-bar';
describe('BottomNavigationBar', () => {
let component: BottomNavigationBar;
let fixture: ComponentFixture<BottomNavigationBar>;
beforeEach(async () => {
await TestBed.configureTestingModule({
imports: [BottomNavigationBar]
})
.compileComponents();
fixture = TestBed.createComponent(BottomNavigationBar);
component = fixture.componentInstance;
await fixture.whenStable();
});
it('should create', () => {
expect(component).toBeTruthy();
});
});

View File

@@ -0,0 +1,17 @@
import { TitleCasePipe } from '@angular/common';
import { Component, input } from '@angular/core';
import { MatIconModule } from '@angular/material/icon';
import { MatToolbarModule } from '@angular/material/toolbar';
import { TranslatePipe } from '@ngx-translate/core';
import { BottomNavigationBarOption } from './BottomNavigationBarOption';
import { RouterLink, RouterLinkActive } from "@angular/router";
@Component({
selector: 'app-bottom-navigation-bar',
imports: [MatToolbarModule, MatIconModule, TranslatePipe, TitleCasePipe, RouterLink, RouterLinkActive],
templateUrl: './bottom-navigation-bar.html',
styleUrl: './bottom-navigation-bar.scss',
})
export class BottomNavigationBar {
readonly options = input<BottomNavigationBarOption[]>([]);
}