Nav bar basic styles finished, burger menu without function and transition, hero section next to go,

This commit is contained in:
2026-02-22 08:50:45 +01:00
parent 5b63771cc3
commit b6ca9be225
32 changed files with 466 additions and 79 deletions

View File

@@ -1,5 +1,6 @@
import { ApplicationConfig, provideBrowserGlobalErrorListeners } from '@angular/core';
import { provideRouter } from '@angular/router';
import { provideNgIconsConfig } from '@ng-icons/core';
import { routes } from './app.routes';
import { provideClientHydration, withEventReplay } from '@angular/platform-browser';
@@ -7,6 +8,8 @@ import { provideClientHydration, withEventReplay } from '@angular/platform-brows
export const appConfig: ApplicationConfig = {
providers: [
provideBrowserGlobalErrorListeners(),
provideRouter(routes), provideClientHydration(withEventReplay())
provideRouter(routes),
provideClientHydration(withEventReplay()),
provideNgIconsConfig({})
]
};

View File

@@ -1,3 +1,9 @@
import { Routes } from '@angular/router';
import { LandingpageComponent } from './features/landing/pages/landingpage.component';
export const routes: Routes = [];
export const routes: Routes = [
{
path: "",
component: LandingpageComponent
}
];

View File

@@ -1,11 +1,14 @@
import { Component, signal } from '@angular/core';
import { RouterOutlet } from '@angular/router';
import {provideIcons} from "@ng-icons/core";
import {cssMenu} from "@ng-icons/css.gg"
@Component({
selector: 'app-root',
imports: [RouterOutlet],
templateUrl: './app.html',
styleUrl: './app.scss'
styleUrl: './app.scss',
viewProviders: [provideIcons({cssMenu})]
})
export class App {
protected readonly title = signal('hurler-webdesign-saas');

View File

@@ -0,0 +1 @@
<p>features-section works!</p>

View File

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

View File

@@ -0,0 +1,11 @@
import { Component } from '@angular/core';
@Component({
selector: 'app-features-section',
imports: [],
templateUrl: './features-section.component.html',
styleUrl: './features-section.component.scss',
})
export class FeaturesSectionComponent {
}

View File

@@ -0,0 +1 @@
<p>footer works!</p>

View File

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

View File

@@ -0,0 +1,11 @@
import { Component } from '@angular/core';
@Component({
selector: 'app-footer',
imports: [],
templateUrl: './footer.component.html',
styleUrl: './footer.component.scss',
})
export class FooterComponent {
}

View File

@@ -0,0 +1 @@
<section>hero works!</section>

View File

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

View File

@@ -0,0 +1,11 @@
import { Component } from '@angular/core';
@Component({
selector: 'app-hero',
imports: [],
templateUrl: './hero.component.html',
styleUrl: './hero.component.scss',
})
export class HeroComponent {
}

View File

@@ -0,0 +1,15 @@
<div class="logo-container">
<span class="logo-container__logo centered">H</span>
<p class="logo-container__company"><span>Hurler</span> Webdesign</p>
</div>
<nav class="navigation">
<ul class="navigation__list">
<li class="navigation__list-item"><a href="#">Home</a></li>
<li class="navigation__list-item"><a href="#">Features</a></li>
<li class="navigation__list-item"><a href="#">Contact</a></li>
</ul>
</nav>
<div class="burger-menu centered">
<ng-icon name="cssMenu" class="burger-menu__icon"></ng-icon>
</div>

View File

@@ -0,0 +1,77 @@
@use "../../../../../styles/abstracts";
.navigation {
display: none;
@include abstracts.breakpoint("md") {
display: block;
padding-right: var(--space-4);
}
&__list {
display: flex;
gap: var(--space-4);
}
&__list-item {
list-style: none;
font-weight: 500;
font-size: var(--font-size-base);
color: var(--text-main);
transition: color 0.3s ease;
a {
color: var(--accent);
&:hover {
color: var(--accent-hover);
}
}
}
}
.logo-container {
display: flex;
align-items: center;
gap: var(--space-2);
padding-left: var(--space-4);
&__logo {
font-size: 1.5rem;
font-weight: bold;
color: var(--text-main);
border: 1px solid var(--accent);
width: abstracts.rem(30);
height: abstracts.rem(30);
display: flex;
background-color: var(--accent);
border-radius: 5px;
color: white;
}
&__company {
font-size: var(--font-size-base);
font-weight: 700;
color: var(--text-main);
span {
color: var(--accent);
}
}
}
.burger-menu {
padding-right: var(--space-4);
cursor: pointer;
@include abstracts.breakpoint("md") {
display: none;
}
&__icon {
width: abstracts.rem(32);
height: abstracts.rem(32);
color: var(--text-main);
}
}

View File

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

View File

@@ -0,0 +1,12 @@
import { Component } from '@angular/core';
import { NgIcon } from '@ng-icons/core';
@Component({
selector: 'app-navigation',
imports: [NgIcon],
templateUrl: './navigation.component.html',
styleUrl: './navigation.component.scss',
})
export class NavigationComponent {
}

View File

@@ -0,0 +1,6 @@
<div class="landing-grid">
<app-navigation class="navigation__component"></app-navigation>
<app-hero class="hero__component"></app-hero>
<app-features-section class="features-section__component"></app-features-section>
<app-footer class="footer__component"></app-footer>
</div>

View File

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

View File

@@ -0,0 +1,20 @@
import { Component } from '@angular/core';
import { NavigationComponent } from '../components/navigation/navigation.component';
import { HeroComponent } from '../components/hero/hero.component';
import { FeaturesSectionComponent } from '../components/features-section/features-section.component';
import { FooterComponent } from '../components/footer/footer.component';
@Component({
selector: 'app-landingpage',
imports: [
NavigationComponent,
HeroComponent,
FeaturesSectionComponent,
FooterComponent
],
templateUrl: './landingpage.component.html',
styleUrl: './landingpage.component.scss',
})
export class LandingpageComponent {
}

View File

@@ -0,0 +1 @@
<p>button works!</p>

View File

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

View File

@@ -0,0 +1,11 @@
import { Component } from '@angular/core';
@Component({
selector: 'app-button',
imports: [],
templateUrl: './button.component.html',
styleUrl: './button.component.scss',
})
export class ButtonComponent {
}