From b3ef58e0ce52a0e9de3c3aebb77bd20708eca8d5 Mon Sep 17 00:00:00 2001 From: OZGCloud <ozgcloud@mgm-tp.com> Date: Wed, 4 Sep 2024 11:03:56 +0200 Subject: [PATCH] OZG-6108 Add navigation components --- alfa-client/libs/design-system/src/index.ts | 2 ++ .../nav-item/nav-item.component.spec.ts | 21 +++++++++++++ .../lib/navbar/nav-item/nav-item.component.ts | 23 ++++++++++++++ .../navbar/navbar/navbar.component.spec.ts | 21 +++++++++++++ .../src/lib/navbar/navbar/navbar.component.ts | 12 ++++++++ .../src/lib/navbar/navbar/navbar.stories.ts | 30 +++++++++++++++++++ 6 files changed, 109 insertions(+) create mode 100644 alfa-client/libs/design-system/src/lib/navbar/nav-item/nav-item.component.spec.ts create mode 100644 alfa-client/libs/design-system/src/lib/navbar/nav-item/nav-item.component.ts create mode 100644 alfa-client/libs/design-system/src/lib/navbar/navbar/navbar.component.spec.ts create mode 100644 alfa-client/libs/design-system/src/lib/navbar/navbar/navbar.component.ts create mode 100644 alfa-client/libs/design-system/src/lib/navbar/navbar/navbar.stories.ts diff --git a/alfa-client/libs/design-system/src/index.ts b/alfa-client/libs/design-system/src/index.ts index 75cf45074d..96f436e7bc 100644 --- a/alfa-client/libs/design-system/src/index.ts +++ b/alfa-client/libs/design-system/src/index.ts @@ -28,6 +28,8 @@ export * from './lib/icons/spinner-icon/spinner-icon.component'; export * from './lib/icons/stamp-icon/stamp-icon.component'; export * from './lib/instant-search/instant-search/instant-search.component'; export * from './lib/instant-search/instant-search/instant-search.model'; +export * from './lib/navbar/nav-item/nav-item.component'; +export * from './lib/navbar/navbar/navbar.component'; export * from './lib/popup/popup-list-item/popup-list-item.component'; export * from './lib/popup/popup/popup.component'; export * from './lib/testbtn/testbtn.component'; diff --git a/alfa-client/libs/design-system/src/lib/navbar/nav-item/nav-item.component.spec.ts b/alfa-client/libs/design-system/src/lib/navbar/nav-item/nav-item.component.spec.ts new file mode 100644 index 0000000000..40e017cc07 --- /dev/null +++ b/alfa-client/libs/design-system/src/lib/navbar/nav-item/nav-item.component.spec.ts @@ -0,0 +1,21 @@ +import { ComponentFixture, TestBed } from '@angular/core/testing'; +import { NavItemComponent } from './nav-item.component'; + +describe('NavItemComponent', () => { + let component: NavItemComponent; + let fixture: ComponentFixture<NavItemComponent>; + + beforeEach(async () => { + await TestBed.configureTestingModule({ + imports: [NavItemComponent], + }).compileComponents(); + + fixture = TestBed.createComponent(NavItemComponent); + component = fixture.componentInstance; + fixture.detectChanges(); + }); + + it('should create', () => { + expect(component).toBeTruthy(); + }); +}); diff --git a/alfa-client/libs/design-system/src/lib/navbar/nav-item/nav-item.component.ts b/alfa-client/libs/design-system/src/lib/navbar/nav-item/nav-item.component.ts new file mode 100644 index 0000000000..9982ffb79a --- /dev/null +++ b/alfa-client/libs/design-system/src/lib/navbar/nav-item/nav-item.component.ts @@ -0,0 +1,23 @@ +import { CommonModule } from '@angular/common'; +import { Component, Input } from '@angular/core'; + +@Component({ + selector: 'ods-nav-item', + standalone: true, + imports: [CommonModule], + template: `<a + [routerLink]="to" + [ngClass]="[ + 'flex min-h-8 items-center gap-2 rounded-2xl px-4 py-2', + 'border-2 border-transparent hover:border-primary', + 'outline-2 outline-offset-2 focus-visible:outline-focus', + ]" + > + <ng-content select="[icon]" /> + <p class="text-left text-sm text-text">{{ caption }}</p> + </a>`, +}) +export class NavItemComponent { + @Input({ required: true }) caption!: string; + @Input() to: string; +} diff --git a/alfa-client/libs/design-system/src/lib/navbar/navbar/navbar.component.spec.ts b/alfa-client/libs/design-system/src/lib/navbar/navbar/navbar.component.spec.ts new file mode 100644 index 0000000000..b507306575 --- /dev/null +++ b/alfa-client/libs/design-system/src/lib/navbar/navbar/navbar.component.spec.ts @@ -0,0 +1,21 @@ +import { ComponentFixture, TestBed } from '@angular/core/testing'; +import { NavbarComponent } from './navbar.component'; + +describe('NavbarComponent', () => { + let component: NavbarComponent; + let fixture: ComponentFixture<NavbarComponent>; + + beforeEach(async () => { + await TestBed.configureTestingModule({ + imports: [NavbarComponent], + }).compileComponents(); + + fixture = TestBed.createComponent(NavbarComponent); + component = fixture.componentInstance; + fixture.detectChanges(); + }); + + it('should create', () => { + expect(component).toBeTruthy(); + }); +}); diff --git a/alfa-client/libs/design-system/src/lib/navbar/navbar/navbar.component.ts b/alfa-client/libs/design-system/src/lib/navbar/navbar/navbar.component.ts new file mode 100644 index 0000000000..73614a5b1d --- /dev/null +++ b/alfa-client/libs/design-system/src/lib/navbar/navbar/navbar.component.ts @@ -0,0 +1,12 @@ +import { CommonModule } from '@angular/common'; +import { Component } from '@angular/core'; + +@Component({ + selector: 'ods-navbar', + standalone: true, + imports: [CommonModule], + template: `<nav class="flex h-full w-72 flex-col gap-1 bg-ozggray p-4"> + <ng-content /> + </nav>`, +}) +export class NavbarComponent {} diff --git a/alfa-client/libs/design-system/src/lib/navbar/navbar/navbar.stories.ts b/alfa-client/libs/design-system/src/lib/navbar/navbar/navbar.stories.ts new file mode 100644 index 0000000000..58e3326529 --- /dev/null +++ b/alfa-client/libs/design-system/src/lib/navbar/navbar/navbar.stories.ts @@ -0,0 +1,30 @@ +import { moduleMetadata, type Meta, type StoryObj } from '@storybook/angular'; +import { OfficeIconComponent } from '../../icons/office-icon/office-icon.component'; +import { NavItemComponent } from '../nav-item/nav-item.component'; +import { NavbarComponent } from './navbar.component'; + +const meta: Meta<NavbarComponent> = { + title: 'Navbar', + component: NavbarComponent, + excludeStories: /.*Data$/, + tags: ['autodocs'], + decorators: [ + moduleMetadata({ + imports: [NavItemComponent, OfficeIconComponent], + }), + ], +}; + +export default meta; +type Story = StoryObj<NavbarComponent>; + +export const Default: Story = { + args: {}, + render: () => ({ + template: `<ods-navbar> + <ods-nav-item caption="First link"><ods-office-icon icon /></ods-nav-item> + <ods-nav-item caption="Second link"><ods-office-icon icon /></ods-nav-item> + <ods-nav-item caption="Third link"><ods-office-icon icon /></ods-nav-item> + </ods-navbar>`, + }), +}; -- GitLab