diff --git a/src/app/features/auth/_auth-common.css b/src/app/features/auth/_auth-common.css
index 711963e..35d1dfb 100644
--- a/src/app/features/auth/_auth-common.css
+++ b/src/app/features/auth/_auth-common.css
@@ -83,10 +83,3 @@ form {
.divider-or:not(:empty)::before { margin-right: 1em; }
.divider-or:not(:empty)::after { margin-left: 1em; }
-/* -- Autofill Fix -- */
-.form-input:-webkit-autofill ~ .form-label {
- top: 0;
- font-size: 0.8rem;
- color: var(--color-primary);
- border-radius: var(--border-radius-sm);
-}
\ No newline at end of file
diff --git a/src/app/features/auth/components/login/login.component.ts b/src/app/features/auth/components/login/login.component.ts
index 02291a4..a7b4fbc 100644
--- a/src/app/features/auth/components/login/login.component.ts
+++ b/src/app/features/auth/components/login/login.component.ts
@@ -6,7 +6,7 @@ import { RouterLink } from '@angular/router';
@Component({
selector: 'app-login',
- standalone: true,
+
imports: [
CommonModule,
RouterLink,
diff --git a/src/app/features/auth/components/reset-password/reset-password.component.ts b/src/app/features/auth/components/reset-password/reset-password.component.ts
index 268ce62..4096b3d 100644
--- a/src/app/features/auth/components/reset-password/reset-password.component.ts
+++ b/src/app/features/auth/components/reset-password/reset-password.component.ts
@@ -6,7 +6,7 @@ import { passwordMatchValidator } from '../../../../shared/validators/password-m
@Component({
selector: 'app-reset-password',
- standalone: true,
+
imports: [CommonModule, ReactiveFormsModule],
templateUrl: './reset-password.component.html',
styleUrl: './reset-password.component.css'
diff --git a/src/app/features/auth/components/verify-email/verify-email.component.ts b/src/app/features/auth/components/verify-email/verify-email.component.ts
index 089c793..827ba6b 100644
--- a/src/app/features/auth/components/verify-email/verify-email.component.ts
+++ b/src/app/features/auth/components/verify-email/verify-email.component.ts
@@ -3,7 +3,7 @@ import { RouterLink } from '@angular/router';
@Component({
selector: 'app-verify-email',
- standalone: true,
+
imports: [RouterLink],
templateUrl: './verify-email.component.html',
styleUrl: './verify-email.component.css'
diff --git a/src/app/features/demo/components/demo/demo.component.css b/src/app/features/demo/components/demo1/demo1.component.css
similarity index 100%
rename from src/app/features/demo/components/demo/demo.component.css
rename to src/app/features/demo/components/demo1/demo1.component.css
diff --git a/src/app/features/demo/components/demo/demo.component.html b/src/app/features/demo/components/demo1/demo1.component.html
similarity index 98%
rename from src/app/features/demo/components/demo/demo.component.html
rename to src/app/features/demo/components/demo1/demo1.component.html
index d852fb4..bb3620a 100644
--- a/src/app/features/demo/components/demo/demo.component.html
+++ b/src/app/features/demo/components/demo1/demo1.component.html
@@ -798,19 +798,4 @@
-
-
diff --git a/src/app/features/demo/components/demo/demo.component.ts b/src/app/features/demo/components/demo1/demo1.component.ts
similarity index 94%
rename from src/app/features/demo/components/demo/demo.component.ts
rename to src/app/features/demo/components/demo1/demo1.component.ts
index 22d4059..513b694 100644
--- a/src/app/features/demo/components/demo/demo.component.ts
+++ b/src/app/features/demo/components/demo1/demo1.component.ts
@@ -5,11 +5,11 @@ import { trigger, transition, style, animate } from '@angular/animations';
import { SnackbarService } from '../../../../shared/services/snackbar.service';
@Component({
- selector: 'app-demo',
- standalone: true, // Hinzugefügt für moderne, eigenständige Komponenten
+ selector: 'app-demo1',
+ // Hinzugefügt für moderne, eigenständige Komponenten
imports: [CommonModule],
- templateUrl: './demo.component.html',
- styleUrl: './demo.component.css',
+ templateUrl: './demo1.component.html',
+ styleUrl: './demo1.component.css',
animations: [
trigger('fade', [
transition(':enter', [
@@ -44,7 +44,7 @@ import { SnackbarService } from '../../../../shared/services/snackbar.service';
]),
],
})
-export class DemoComponent implements OnInit {
+export class Demo1Component implements OnInit {
// ===================================================================
// 1. ZUSTANDS-EIGENSCHAFTEN DER KOMPONENTE
// ===================================================================
diff --git a/src/app/features/demo/components/demo2/demo2.component.css b/src/app/features/demo/components/demo2/demo2.component.css
new file mode 100644
index 0000000..e69de29
diff --git a/src/app/features/demo/components/demo2/demo2.component.html b/src/app/features/demo/components/demo2/demo2.component.html
new file mode 100644
index 0000000..929b3fa
--- /dev/null
+++ b/src/app/features/demo/components/demo2/demo2.component.html
@@ -0,0 +1,501 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
Letzte Bestellungen
+
+
+
+
+
+ Kunde
+
+
Bestell-ID
+
Status
+
Betrag
+
Aktionen
+
+
+
+
+
+
+
+
+
Max Mustermann
+
+ max.mustermann@example.com
+
+
+
+
+
#10543
+
+ Abgeschlossen
+
+
€ 129,99
+
+
+
+
+
+
+
+
+
+
+
+
+
+
Umsatzentwicklung
+
+
Jan
+
Feb
+
Mär
+
Apr
+
Mai
+
Jun
+
+
+
+
+
+
+
+
Moderne Formular-Elemente
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
Buttons, Chips & Interaktion
+
+
+ Primary
+ Secondary
+
+
+
+
+
+
+
+
+ 3
+
+
+
+
+
+
+
Indikatoren & Feedback
+
+ Snackbar anzeigen
+ Erfolg! Ihre Änderungen wurden
+ gespeichert.
+ Fehler! Bitte füllen Sie alle Felder
+ aus.
+
+
+
+
+
Navigation & Layout
+
+
+
+
+
+
+
+
+
+ Dieser Inhalt wird dynamisch ein- und ausgeblendet. Lorem ipsum
+ dolor sit amet, consectetur adipiscing elit. Suspendisse malesuada
+ lacus ex, sit amet blandit leo lobortis eget.
+
+
+
+
+
✓
+ Profil
+
+
+
+
2
+ Konto
+
+
+
+
3
+ Abschluss
+
+
+
+
+
+
+
Ladezustände (Skeleton)
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ Inhalt erfolgreich geladen!
+
+
+
+
+
+
+
+
+
+
+
+
Sind Sie sicher? Diese Aktion kann nicht rückgängig gemacht werden.
+
+
+ Abbrechen
+ Ja, endgültig löschen
+
+
+
diff --git a/src/app/features/demo/components/demo2/demo2.component.ts b/src/app/features/demo/components/demo2/demo2.component.ts
new file mode 100644
index 0000000..a63aaff
--- /dev/null
+++ b/src/app/features/demo/components/demo2/demo2.component.ts
@@ -0,0 +1,83 @@
+import { Component, OnInit } from '@angular/core';
+import { CommonModule } from '@angular/common';
+import { SnackbarService } from '../../../../shared/services/snackbar.service';
+
+// Importieren ALLER wiederverwendbaren Komponenten, die im Template genutzt werden
+import { ButtonComponent } from '../../../../shared/components/ui/button/button.component';
+import { CardComponent } from '../../../../shared/components/ui/card/card.component';
+import { ChipComponent } from '../../../../shared/components/ui/chip/chip.component';
+import { FormFieldComponent } from '../../../../shared/components/form/form-field/form-field.component';
+import { KpiCardComponent } from '../../../../shared/components/data-display/kpi-card/kpi-card.component';
+import { PageHeaderComponent } from '../../../../shared/components/layout/page-header/page-header.component';
+import { SlideToggleComponent } from '../../../../shared/components/form/slide-toggle/slide-toggle.component';
+import { StatusPillComponent } from '../../../../shared/components/ui/status-pill/status-pill.component';
+import { DialogComponent } from '../../../../shared/components/overlays/dialog/dialog.component';
+import { MenuComponent } from '../../../../shared/components/overlays/menu/menu.component';
+import { AlertComponent } from '../../../../shared/components/ui/alert/alert.component';
+import { PaginatorComponent } from '../../../../shared/components/data-display/paginator/paginator.component';
+import { SkeletonComponent } from '../../../../shared/components/ui/skeleton/skeleton.component';
+import { ExpansionPanelComponent } from '../../../../shared/components/layout/expansion-panel/expansion-panel.component';
+
+@Component({
+ selector: 'app-demo2',
+ standalone: true,
+ imports: [
+ CommonModule,
+ ButtonComponent,
+ CardComponent,
+ ChipComponent,
+ FormFieldComponent,
+ KpiCardComponent,
+ PageHeaderComponent,
+ SlideToggleComponent,
+ StatusPillComponent,
+ DialogComponent,
+ MenuComponent,
+ AlertComponent,
+ PaginatorComponent,
+ SkeletonComponent,
+ ExpansionPanelComponent,
+ ],
+ templateUrl: './demo2.component.html',
+ styleUrl: './demo2.component.css',
+})
+export class Demo2Component implements OnInit {
+ // Zustands-Variablen für diese Demo-Seite
+ isLoading = true;
+ isDialogOpen = false;
+ isComponentMenuOpen = false;
+
+ // Eigenschaften für den Paginator
+ currentPage = 1;
+ totalItems = 123;
+ itemsPerPage = 10;
+
+ constructor(private snackbarService: SnackbarService) {}
+
+ ngOnInit(): void {
+ setTimeout(() => {
+ this.isLoading = false;
+ }, 2000);
+ }
+
+ // Methoden für den Dialog
+ openDialog(): void {
+ this.isDialogOpen = true;
+ }
+ closeDialog(): void {
+ this.isDialogOpen = false;
+ }
+
+ // Methode für den Snackbar-Trigger
+ triggerSnackbar(): void {
+ const time = new Date().toLocaleTimeString();
+ this.snackbarService.show('Neues Ereignis um ' + time);
+ }
+
+ // Methode für den Paginator
+ onPageChange(newPage: number): void {
+ this.currentPage = newPage;
+ console.log('Wechsle zu Seite:', newPage);
+ // Hier würde die Logik zum Neuladen der Tabellendaten folgen
+ }
+}
diff --git a/src/app/features/demo/demo.routes.ts b/src/app/features/demo/demo.routes.ts
index 7baf5d9..0f0bd58 100644
--- a/src/app/features/demo/demo.routes.ts
+++ b/src/app/features/demo/demo.routes.ts
@@ -1,6 +1,7 @@
import { Routes } from '@angular/router';
-import { DemoComponent } from './components/demo/demo.component';
+import { Demo1Component } from './components/demo1/demo1.component';
+import { Demo2Component } from './components/demo2/demo2.component';
export const DEMO_ROUTES: Routes = [
{
@@ -8,15 +9,21 @@ export const DEMO_ROUTES: Routes = [
// Ein leerer Pfad leitet direkt weiter zu '/demo/1'.
path: '',
redirectTo: '1',
- pathMatch: 'full'
+ pathMatch: 'full',
},
{
// Diese Route passt auf '/demo/1' und lädt die Komponente genau einmal.
path: '1',
- component: DemoComponent,
- title: 'Demo'
- }
+ component: Demo1Component,
+ title: 'Demo',
+ },
+ {
+ // Diese Route passt auf '/demo/1' und lädt die Komponente genau einmal.
+ path: '2',
+ component: Demo2Component,
+ title: 'Demo',
+ },
// Hier könntest du weitere Routen wie '2', '3' etc. hinzufügen,
// die andere Komponenten laden.
// { path: '2', component: AnotherDemoComponent },
-];
\ No newline at end of file
+];
diff --git a/src/app/shared/components/data-display/kpi-card/kpi-card.component.css b/src/app/shared/components/data-display/kpi-card/kpi-card.component.css
index e69de29..086b07a 100644
--- a/src/app/shared/components/data-display/kpi-card/kpi-card.component.css
+++ b/src/app/shared/components/data-display/kpi-card/kpi-card.component.css
@@ -0,0 +1,47 @@
+/* WICHTIG: Diese Stile sollten aus der globalen styles.css HIERHER VERSCHOBEN werden. */
+:host {
+ display: block;
+}
+
+.kpi-card {
+ display: flex;
+ align-items: center;
+ gap: 1rem;
+ padding: 1.5rem;
+}
+
+.kpi-icon {
+ width: 50px;
+ height: 50px;
+ border-radius: 50%;
+ display: grid;
+ place-items: center;
+ color: #fff;
+ flex-shrink: 0;
+}
+
+.kpi-icon ::ng-deep svg {
+ width: 24px;
+ height: 24px;
+}
+
+.icon-sales { background: linear-gradient(135deg, #2ecc71, #27ae60); }
+.icon-users { background: linear-gradient(135deg, #3498db, #2980b9); }
+.icon-orders { background: linear-gradient(135deg, #f39c12, #f1c40f); }
+.icon-performance { background: linear-gradient(135deg, #9b59b6, #8e44ad); }
+
+.kpi-content {
+ display: flex;
+ flex-direction: column;
+}
+
+.kpi-value {
+ font-size: 1.75rem;
+ font-weight: 700;
+ color: var(--color-text);
+}
+
+.kpi-label {
+ font-size: 0.9rem;
+ color: var(--color-text-light);
+}
\ No newline at end of file
diff --git a/src/app/shared/components/data-display/kpi-card/kpi-card.component.html b/src/app/shared/components/data-display/kpi-card/kpi-card.component.html
index a86da24..6a07791 100644
--- a/src/app/shared/components/data-display/kpi-card/kpi-card.component.html
+++ b/src/app/shared/components/data-display/kpi-card/kpi-card.component.html
@@ -1 +1,15 @@
-
kpi-card works!
+
+
+
+
+
+
+ {{ value }}
+ {{ label }}
+
+
\ No newline at end of file
diff --git a/src/app/shared/components/data-display/kpi-card/kpi-card.component.ts b/src/app/shared/components/data-display/kpi-card/kpi-card.component.ts
index 1da19e9..dad6ede 100644
--- a/src/app/shared/components/data-display/kpi-card/kpi-card.component.ts
+++ b/src/app/shared/components/data-display/kpi-card/kpi-card.component.ts
@@ -1,11 +1,17 @@
-import { Component } from '@angular/core';
+import { Component, Input } from '@angular/core';
+import { CommonModule } from '@angular/common';
+
+type KpiColor = 'sales' | 'users' | 'orders' | 'performance';
@Component({
selector: 'app-kpi-card',
- imports: [],
+ standalone: true,
+ imports: [CommonModule],
templateUrl: './kpi-card.component.html',
styleUrl: './kpi-card.component.css'
})
export class KpiCardComponent {
-
-}
+ @Input() value: string = '';
+ @Input() label: string = '';
+ @Input() color: KpiColor = 'users';
+}
\ No newline at end of file
diff --git a/src/app/shared/components/data-display/paginator/paginator.component.css b/src/app/shared/components/data-display/paginator/paginator.component.css
new file mode 100644
index 0000000..a162fbc
--- /dev/null
+++ b/src/app/shared/components/data-display/paginator/paginator.component.css
@@ -0,0 +1,22 @@
+/* Verschieben Sie diese Stile aus der globalen styles.css hierher */
+:host {
+ display: block;
+}
+
+.paginator {
+ display: flex;
+ justify-content: flex-end;
+ align-items: center;
+ gap: 1.5rem;
+ padding: 1rem;
+ border-top: 1px solid var(--color-border);
+}
+.paginator-info {
+ font-size: 0.9rem;
+ color: var(--color-text-light);
+ font-weight: 500;
+}
+.paginator-controls {
+ display: flex;
+ gap: 0.5rem;
+}
\ No newline at end of file
diff --git a/src/app/shared/components/data-display/paginator/paginator.component.html b/src/app/shared/components/data-display/paginator/paginator.component.html
new file mode 100644
index 0000000..733dbb0
--- /dev/null
+++ b/src/app/shared/components/data-display/paginator/paginator.component.html
@@ -0,0 +1,21 @@
+
\ No newline at end of file
diff --git a/src/app/shared/components/ui/alert/alert.component.ts b/src/app/shared/components/ui/alert/alert.component.ts
index b55e120..23e56c7 100644
--- a/src/app/shared/components/ui/alert/alert.component.ts
+++ b/src/app/shared/components/ui/alert/alert.component.ts
@@ -1,11 +1,16 @@
-import { Component } from '@angular/core';
+import { Component, Input } from '@angular/core';
+import { CommonModule } from '@angular/common';
+
+// Definiert die erlaubten Alert-Typen für Typsicherheit
+type AlertType = 'success' | 'danger' | 'info' | 'warning';
@Component({
selector: 'app-alert',
- imports: [],
+ standalone: true,
+ imports: [CommonModule],
templateUrl: './alert.component.html',
styleUrl: './alert.component.css'
})
export class AlertComponent {
-
-}
+ @Input() type: AlertType = 'info'; // 'info' ist ein guter Standardwert
+}
\ No newline at end of file
diff --git a/src/app/shared/components/ui/button/button.component.html b/src/app/shared/components/ui/button/button.component.html
index 9cd155e..708c027 100644
--- a/src/app/shared/components/ui/button/button.component.html
+++ b/src/app/shared/components/ui/button/button.component.html
@@ -1 +1,16 @@
-
button works!
+
\ No newline at end of file
diff --git a/src/app/shared/components/ui/button/button.component.ts b/src/app/shared/components/ui/button/button.component.ts
index 0d76405..897eac5 100644
--- a/src/app/shared/components/ui/button/button.component.ts
+++ b/src/app/shared/components/ui/button/button.component.ts
@@ -1,11 +1,22 @@
-import { Component } from '@angular/core';
+import { Component, Input } from '@angular/core';
+import { CommonModule } from '@angular/common';
+
+// Definiert die erlaubten Varianten für den Button
+type ButtonColor = 'primary' | 'secondary' | 'stroked' | 'flat' | 'icon' | 'icon-danger';
@Component({
selector: 'app-button',
- imports: [],
+
+ imports: [CommonModule],
templateUrl: './button.component.html',
styleUrl: './button.component.css'
})
export class ButtonComponent {
+ @Input() color: ButtonColor = 'primary';
+ @Input() type: 'button' | 'submit' = 'button';
+ @Input() disabled = false;
+ @Input() fullWidth = false;
-}
+ // Ein spezieller Input für Tooltips
+ @Input() tooltip: string | null = null;
+}
\ No newline at end of file
diff --git a/src/app/shared/components/ui/card/card.component.html b/src/app/shared/components/ui/card/card.component.html
index f2fda25..b3ee376 100644
--- a/src/app/shared/components/ui/card/card.component.html
+++ b/src/app/shared/components/ui/card/card.component.html
@@ -1 +1,12 @@
-
card works!
+
+
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/src/app/shared/components/ui/card/card.component.ts b/src/app/shared/components/ui/card/card.component.ts
index 1e41d97..0d6ac17 100644
--- a/src/app/shared/components/ui/card/card.component.ts
+++ b/src/app/shared/components/ui/card/card.component.ts
@@ -1,11 +1,22 @@
-import { Component } from '@angular/core';
+import { Component, ContentChild, ElementRef, AfterContentInit } from '@angular/core';
+import { CommonModule } from '@angular/common';
@Component({
selector: 'app-card',
- imports: [],
+ standalone: true,
+ imports: [CommonModule],
templateUrl: './card.component.html',
styleUrl: './card.component.css'
})
-export class CardComponent {
+export class CardComponent implements AfterContentInit {
+ // Wir prüfen, ob der Benutzer einen Header-Inhalt bereitgestellt hat.
+ hasHeader = false;
-}
+ // Sucht nach einem Element, das mit dem Attribut [card-header] markiert ist.
+ @ContentChild('header') headerContent: ElementRef | undefined;
+
+ ngAfterContentInit(): void {
+ // Wenn ein Header-Element gefunden wurde, setzen wir die Eigenschaft auf true.
+ this.hasHeader = !!this.headerContent;
+ }
+}
\ No newline at end of file
diff --git a/src/app/shared/components/ui/chip/chip.component.css b/src/app/shared/components/ui/chip/chip.component.css
index e69de29..8561f33 100644
--- a/src/app/shared/components/ui/chip/chip.component.css
+++ b/src/app/shared/components/ui/chip/chip.component.css
@@ -0,0 +1,41 @@
+/* Diese Komponente ist autark und benötigt KEINE globalen Klassen mehr.
+ Sie können die .chip-Klassen aus styles.css hierher verschieben und dort löschen. */
+:host {
+ display: inline-block;
+}
+
+.chip {
+ display: inline-flex;
+ align-items: center;
+ padding: 0.25rem 0.75rem;
+ border-radius: 1rem;
+ background-color: var(--color-border);
+ color: var(--color-text);
+ font-size: 0.9rem;
+ cursor: pointer;
+ transition: all var(--transition-speed);
+}
+
+.chip:hover {
+ background-color: #d1d5db;
+}
+
+:host-context(body.dark-theme) .chip:hover {
+ background-color: #5a6578;
+}
+
+.chip.chip-active {
+ background-color: var(--color-primary);
+ color: #fff;
+}
+
+.chip-remove {
+ margin-left: 0.5rem;
+ font-weight: bold;
+ opacity: 0.5;
+ transition: opacity var(--transition-speed);
+}
+
+.chip-remove:hover {
+ opacity: 1;
+}
\ No newline at end of file
diff --git a/src/app/shared/components/ui/chip/chip.component.html b/src/app/shared/components/ui/chip/chip.component.html
index f31ccd3..fe8b640 100644
--- a/src/app/shared/components/ui/chip/chip.component.html
+++ b/src/app/shared/components/ui/chip/chip.component.html
@@ -1 +1,6 @@
-
chip works!
+
+
+ {{ label }}
+
+ ×
+
\ No newline at end of file
diff --git a/src/app/shared/components/ui/chip/chip.component.ts b/src/app/shared/components/ui/chip/chip.component.ts
index ad27066..36c58de 100644
--- a/src/app/shared/components/ui/chip/chip.component.ts
+++ b/src/app/shared/components/ui/chip/chip.component.ts
@@ -1,11 +1,28 @@
-import { Component } from '@angular/core';
+import { Component, Input, Output, EventEmitter } from '@angular/core';
+import { CommonModule } from '@angular/common';
@Component({
selector: 'app-chip',
- imports: [],
+ standalone: true,
+ imports: [CommonModule],
templateUrl: './chip.component.html',
styleUrl: './chip.component.css'
})
export class ChipComponent {
+ // Der Text, der im Chip angezeigt wird
+ @Input() label: string = '';
+ // Ob der Chip als "aktiv" oder "ausgewählt" angezeigt werden soll
+ @Input() active = false;
+ // Ob ein "Entfernen"-Button angezeigt werden soll
+ @Input() removable = false;
-}
+ // Event, das ausgelöst wird, wenn auf den "Entfernen"-Button geklickt wird
+ @Output() remove = new EventEmitter();
+
+ onRemove(event: MouseEvent) {
+ // Verhindert, dass ein Klick auf den "Entfernen"-Button
+ // auch ein Klick-Event auf dem gesamten Chip auslöst.
+ event.stopPropagation();
+ this.remove.emit();
+ }
+}
\ No newline at end of file
diff --git a/src/app/shared/components/ui/icon/icon.component.css b/src/app/shared/components/ui/icon/icon.component.css
index e69de29..5c23ba6 100644
--- a/src/app/shared/components/ui/icon/icon.component.css
+++ b/src/app/shared/components/ui/icon/icon.component.css
@@ -0,0 +1,14 @@
+/* Globale Stile für alle per geladenen SVGs */
+:host {
+ display: inline-flex;
+ align-items: center;
+ justify-content: center;
+ width: 1em; /* Passt sich an die Schriftgröße des Elternelements an */
+ height: 1em;
+}
+
+/* Wir verwenden ::ng-deep, da das SVG-Element dynamisch eingefügt wird */
+::ng-deep .icon-svg {
+ width: 100%;
+ height: 100%;
+}
\ No newline at end of file
diff --git a/src/app/shared/components/ui/icon/icon.component.html b/src/app/shared/components/ui/icon/icon.component.html
index b43cd01..e69de29 100644
--- a/src/app/shared/components/ui/icon/icon.component.html
+++ b/src/app/shared/components/ui/icon/icon.component.html
@@ -1 +0,0 @@
-
icon works!
diff --git a/src/app/shared/components/ui/icon/icon.component.ts b/src/app/shared/components/ui/icon/icon.component.ts
index f7e6ee3..e7573a4 100644
--- a/src/app/shared/components/ui/icon/icon.component.ts
+++ b/src/app/shared/components/ui/icon/icon.component.ts
@@ -1,11 +1,35 @@
-import { Component } from '@angular/core';
+import { Component, Input, OnChanges, SimpleChanges, ElementRef, Renderer2 } from '@angular/core';
+import { CommonModule } from '@angular/common';
+import { HttpClient, HttpClientModule } from '@angular/common/http';
@Component({
selector: 'app-icon',
- imports: [],
- templateUrl: './icon.component.html',
+ standalone: true,
+ imports: [CommonModule, HttpClientModule],
+ template: '', // Leeres Template, da wir das SVG direkt einfügen
styleUrl: './icon.component.css'
})
-export class IconComponent {
+export class IconComponent implements OnChanges {
+ @Input() name: string = '';
-}
+ constructor(
+ private http: HttpClient,
+ private el: ElementRef,
+ private renderer: Renderer2
+ ) {}
+
+ ngOnChanges(changes: SimpleChanges): void {
+ if (changes['name'] && this.name) {
+ // Lädt das SVG aus dem assets-Ordner und fügt es in die Komponente ein
+ this.http.get(`assets/icons/${this.name}.svg`, { responseType: 'text' })
+ .subscribe(svg => {
+ this.el.nativeElement.innerHTML = svg;
+ // Optional: Fügt dem