diff --git a/apps/interface-services/trading-dashboard/angular.json b/apps/interface-services/trading-dashboard/angular.json
index a3e0876..d477c28 100644
--- a/apps/interface-services/trading-dashboard/angular.json
+++ b/apps/interface-services/trading-dashboard/angular.json
@@ -7,22 +7,20 @@
"newProjectRoot": "projects",
"projects": {
"trading-dashboard": {
- "projectType": "application",
- "schematics": {
+ "projectType": "application", "schematics": {
"@schematics/angular:component": {
- "style": "scss"
+ "style": "css"
}
},
"root": "",
"sourceRoot": "src",
"prefix": "app",
- "architect": {
- "build": {
+ "architect": { "build": {
"builder": "@angular/build:application",
"options": {
"browser": "src/main.ts",
"tsConfig": "tsconfig.app.json",
- "inlineStyleLanguage": "scss",
+ "inlineStyleLanguage": "css",
"assets": [
{
"glob": "**/*",
@@ -30,7 +28,7 @@
}
],
"styles": [
- "src/styles.scss"
+ "src/styles.css"
]
},
"configurations": {
@@ -71,12 +69,11 @@
},
"extract-i18n": {
"builder": "@angular/build:extract-i18n"
- },
- "test": {
+ }, "test": {
"builder": "@angular/build:karma",
"options": {
"tsConfig": "tsconfig.spec.json",
- "inlineStyleLanguage": "scss",
+ "inlineStyleLanguage": "css",
"assets": [
{
"glob": "**/*",
@@ -84,7 +81,7 @@
}
],
"styles": [
- "src/styles.scss"
+ "src/styles.css"
]
}
}
diff --git a/apps/interface-services/trading-dashboard/src/app/app.css b/apps/interface-services/trading-dashboard/src/app/app.css
new file mode 100644
index 0000000..3a53335
--- /dev/null
+++ b/apps/interface-services/trading-dashboard/src/app/app.css
@@ -0,0 +1,174 @@
+/* Custom Angular Material integration styles */
+
+/* Sidenav styles */
+.mat-sidenav-container {
+ background-color: transparent;
+}
+
+.mat-sidenav {
+ border-radius: 0;
+ width: 16rem;
+ background-color: white !important;
+ border-right: 1px solid #e5e7eb !important;
+}
+
+/* Toolbar styles */
+.mat-toolbar {
+ background-color: white;
+ color: #374151;
+ box-shadow: 0 1px 2px 0 rgb(0 0 0 / 0.05);
+}
+
+/* Button styles */
+.mat-mdc-button.nav-button {
+ width: 100%;
+ text-align: left;
+ justify-content: flex-start;
+ padding: 0.75rem 1rem;
+ border-radius: 0.375rem;
+ margin-bottom: 0.25rem;
+ background-color: transparent;
+ transition: background-color 0.15s ease-in-out;
+}
+
+.mat-mdc-button.nav-button:hover {
+ background-color: #f3f4f6;
+}
+
+.mat-mdc-button.nav-button.bg-blue-50 {
+ background-color: #eff6ff !important;
+ color: #1d4ed8 !important;
+}
+
+/* Card styles */
+.mat-mdc-card {
+ border-radius: 0.5rem;
+ box-shadow: 0 1px 2px 0 rgb(0 0 0 / 0.05);
+ border: 1px solid #f3f4f6;
+ background-color: white !important;
+}
+
+/* Tab styles */
+.mat-mdc-tab-group .mat-mdc-tab-header {
+ border-bottom: 1px solid #e5e7eb;
+}
+
+.mat-mdc-tab-label {
+ color: #6b7280;
+}
+
+.mat-mdc-tab-label:hover {
+ color: #111827;
+}
+
+.mat-mdc-tab-label-active {
+ color: #2563eb;
+ font-weight: 500;
+}
+
+/* Chip styles for status indicators */
+.mat-mdc-chip-set .mat-mdc-chip {
+ background-color: white;
+ border: 1px solid #e5e7eb;
+}
+
+.chip-green {
+ background-color: #dcfce7 !important;
+ color: #166534 !important;
+ border: 1px solid #bbf7d0 !important;
+}
+
+.chip-blue {
+ background-color: #dbeafe !important;
+ color: #1e40af !important;
+ border: 1px solid #bfdbfe !important;
+}
+
+.status-chip-active {
+ background-color: #dcfce7;
+ color: #166534;
+ padding: 0.25rem 0.5rem;
+ border-radius: 9999px;
+ font-size: 0.75rem;
+ font-weight: 500;
+ display: inline-block;
+}
+
+.status-chip-medium {
+ background-color: #dbeafe;
+ color: #1e40af;
+ padding: 0.25rem 0.5rem;
+ border-radius: 9999px;
+ font-size: 0.75rem;
+ font-weight: 500;
+}
+
+/* Table styles */
+.mat-mdc-table {
+ border-radius: 0.5rem;
+ overflow: hidden;
+ border: 1px solid #f3f4f6;
+ background-color: white;
+}
+
+.mat-mdc-header-row {
+ background-color: #f9fafb;
+}
+
+.mat-mdc-header-cell {
+ font-weight: 500;
+ color: #374151;
+ font-size: 0.875rem;
+}
+
+.mat-mdc-cell {
+ color: #111827;
+ font-size: 0.875rem;
+ padding: 1rem 0;
+}
+
+.mat-mdc-row:hover {
+ background-color: #f9fafb;
+ transition: background-color 0.15s ease;
+}
+
+/* Custom utility classes for the dashboard */
+.portfolio-card {
+ background-color: white !important;
+ border-radius: 0.5rem;
+ box-shadow: 0 1px 2px 0 rgb(0 0 0 / 0.05);
+ border: 1px solid #f3f4f6;
+ padding: 1.5rem;
+}
+
+.metric-value {
+ font-size: 1.5rem;
+ font-weight: 700;
+}
+
+.metric-label {
+ font-size: 0.875rem;
+ color: #6b7280;
+ margin-top: 0.25rem;
+}
+
+.metric-change-positive {
+ color: #16a34a;
+ font-weight: 500;
+}
+
+.metric-change-negative {
+ color: #dc2626;
+ font-weight: 500;
+}
+
+/* Responsive styles */
+@media (max-width: 768px) {
+ .mat-sidenav {
+ width: 100%;
+ }
+
+ .hide-mobile {
+ display: none;
+ }
+}
diff --git a/apps/interface-services/trading-dashboard/src/app/app.html b/apps/interface-services/trading-dashboard/src/app/app.html
index 4f21fae..af1932a 100644
--- a/apps/interface-services/trading-dashboard/src/app/app.html
+++ b/apps/interface-services/trading-dashboard/src/app/app.html
@@ -1,562 +1,21 @@
+
-
-
-
-
-
-
-
- 📈 Trading Bot
-
-
- Real-time Dashboard
-
-
-
-
-
-
-
-
-
-
-
-
-
-
- {{ title }}
-
-
-
-
-
-
- wifi
- Live Data
-
-
- smart_toy
- Bot Active
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
Portfolio Value
-
- ${{ portfolioValue().toLocaleString('en-US', {minimumFractionDigits: 2}) }}
-
-
-
account_balance_wallet
-
-
-
-
-
-
-
-
Day Change
-
0"
- [class.text-red-600]="dayChange() < 0">
- ${{ dayChange().toLocaleString('en-US', {minimumFractionDigits: 2}) }}
-
-
0"
- [class.text-red-600]="dayChangePercent() < 0">
- {{ dayChangePercent() > 0 ? '+' : '' }}{{ dayChangePercent().toFixed(2) }}%
-
-
-
0"
- [class.text-red-600]="dayChange() < 0">
- {{ dayChange() > 0 ? 'trending_up' : 'trending_down' }}
-
-
-
-
-
-
-
-
-
Active Strategies
-
3
-
-
psychology
-
-
-
-
-
-
-
-
-
-
-
-
-
Market Watchlist
-
-
-
-
-
-
-
- | Symbol |
- Price |
- Change |
- Change % |
-
-
-
- @for (stock of marketData(); track stock.symbol) {
-
- |
- {{ stock.symbol }}
- |
-
- ${{ stock.price.toFixed(2) }}
- |
- 0"
- [class.text-red-600]="stock.change < 0">
- {{ stock.change > 0 ? '+' : '' }}${{ stock.change.toFixed(2) }}
- |
- 0"
- [class.text-red-600]="stock.changePercent < 0">
- {{ stock.changePercent > 0 ? '+' : '' }}{{ stock.changePercent.toFixed(2) }}%
- |
-
- }
-
-
-
-
-
-
-
-
-
-
-
-
show_chart
-
Chart visualization will be implemented here
-
-
-
-
-
-
-
-
-
-
receipt_long
-
Order history and management will be implemented here
-
-
-
-
-
-
-
-
-
-
analytics
-
Advanced analytics and performance metrics will be implemented here
-
-
-
-
-
-
-
-
+
+
+
+
-
-
-
-
-
-
-
-
Hello, {{ title }}
-
Congratulations! Your app is running. 🎉
-
-
-
-
- @for (item of [
- { title: 'Explore the Docs', link: 'https://angular.dev' },
- { title: 'Learn with Tutorials', link: 'https://angular.dev/tutorials' },
- { title: 'CLI Docs', link: 'https://angular.dev/tools/cli' },
- { title: 'Angular Language Service', link: 'https://angular.dev/tools/language-service' },
- { title: 'Angular DevTools', link: 'https://angular.dev/tools/devtools' },
- ]; track item.title) {
-
- {{ item.title }}
-
-
- }
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
diff --git a/apps/interface-services/trading-dashboard/src/app/app.routes.ts b/apps/interface-services/trading-dashboard/src/app/app.routes.ts
index dc39edb..7f33c8f 100644
--- a/apps/interface-services/trading-dashboard/src/app/app.routes.ts
+++ b/apps/interface-services/trading-dashboard/src/app/app.routes.ts
@@ -1,3 +1,18 @@
import { Routes } from '@angular/router';
+import { DashboardComponent } from './pages/dashboard/dashboard.component';
+import { MarketDataComponent } from './pages/market-data/market-data.component';
+import { PortfolioComponent } from './pages/portfolio/portfolio.component';
+import { StrategiesComponent } from './pages/strategies/strategies.component';
+import { RiskManagementComponent } from './pages/risk-management/risk-management.component';
+import { SettingsComponent } from './pages/settings/settings.component';
-export const routes: Routes = [];
+export const routes: Routes = [
+ { path: '', redirectTo: '/dashboard', pathMatch: 'full' },
+ { path: 'dashboard', component: DashboardComponent },
+ { path: 'market-data', component: MarketDataComponent },
+ { path: 'portfolio', component: PortfolioComponent },
+ { path: 'strategies', component: StrategiesComponent },
+ { path: 'risk-management', component: RiskManagementComponent },
+ { path: 'settings', component: SettingsComponent },
+ { path: '**', redirectTo: '/dashboard' }
+];
diff --git a/apps/interface-services/trading-dashboard/src/app/app.scss b/apps/interface-services/trading-dashboard/src/app/app.scss
deleted file mode 100644
index 1892f48..0000000
--- a/apps/interface-services/trading-dashboard/src/app/app.scss
+++ /dev/null
@@ -1,87 +0,0 @@
-// Custom styles for the trading dashboard
-.mat-sidenav-container {
- background-color: transparent;
-}
-
-.mat-sidenav {
- border-radius: 0;
-}
-
-.mat-toolbar {
- background-color: white;
- color: #374151;
-}
-
-.dark .mat-toolbar {
- background-color: #1f2937;
- color: #f9fafb;
-}
-
-// Custom button styles
-.mat-mdc-button {
- &.w-full {
- width: 100%;
- text-align: left;
- justify-content: flex-start;
- }
-}
-
-// Card styles
-.mat-mdc-card {
- border-radius: 8px;
- box-shadow: 0 1px 3px 0 rgb(0 0 0 / 0.1), 0 1px 2px -1px rgb(0 0 0 / 0.1);
-}
-
-// Tab styles
-.mat-mdc-tab-group {
- .mat-mdc-tab-header {
- border-bottom: 1px solid #e5e7eb;
- }
-}
-
-.dark .mat-mdc-tab-group {
- .mat-mdc-tab-header {
- border-bottom: 1px solid #374151;
- }
-}
-
-// Chip styles
-.mat-mdc-chip {
- &.bg-green-100 {
- background-color: #dcfce7 !important;
- }
-
- &.text-green-800 {
- color: #166534 !important;
- }
-
- &.bg-blue-100 {
- background-color: #dbeafe !important;
- }
-
- &.text-blue-800 {
- color: #1e40af !important;
- }
-}
-
-// Table styles
-table {
- tr:hover {
- transition: background-color 0.2s ease;
- }
-}
-
-// Icon styles
-.mat-icon {
- &.text-3xl {
- font-size: 2rem;
- width: 2rem;
- height: 2rem;
- }
-
- &.text-6xl {
- font-size: 4rem;
- width: 4rem;
- height: 4rem;
- }
-}
\ No newline at end of file
diff --git a/apps/interface-services/trading-dashboard/src/app/app.ts b/apps/interface-services/trading-dashboard/src/app/app.ts
index f981e81..fbe7d80 100644
--- a/apps/interface-services/trading-dashboard/src/app/app.ts
+++ b/apps/interface-services/trading-dashboard/src/app/app.ts
@@ -5,9 +5,8 @@ import { MatSidenavModule } from '@angular/material/sidenav';
import { MatToolbarModule } from '@angular/material/toolbar';
import { MatButtonModule } from '@angular/material/button';
import { MatIconModule } from '@angular/material/icon';
-import { MatCardModule } from '@angular/material/card';
-import { MatTabsModule } from '@angular/material/tabs';
import { MatChipsModule } from '@angular/material/chips';
+import { SidebarComponent } from './components/sidebar/sidebar.component';
@Component({
selector: 'app-root',
@@ -18,30 +17,22 @@ import { MatChipsModule } from '@angular/material/chips';
MatToolbarModule,
MatButtonModule,
MatIconModule,
- MatCardModule,
- MatTabsModule,
- MatChipsModule
+ MatChipsModule,
+ SidebarComponent
],
templateUrl: './app.html',
- styleUrl: './app.scss'
+ styleUrl: './app.css'
})
export class App {
protected title = 'Trading Dashboard';
protected sidenavOpened = signal(true);
- // Mock data for the dashboard
- protected marketData = signal([
- { symbol: 'AAPL', price: 192.53, change: 2.41, changePercent: 1.27 },
- { symbol: 'GOOGL', price: 138.21, change: -1.82, changePercent: -1.30 },
- { symbol: 'MSFT', price: 378.85, change: 4.12, changePercent: 1.10 },
- { symbol: 'TSLA', price: 248.42, change: -3.21, changePercent: -1.28 },
- ]);
-
- protected portfolioValue = signal(125420.50);
- protected dayChange = signal(2341.20);
- protected dayChangePercent = signal(1.90);
-
toggleSidenav() {
this.sidenavOpened.set(!this.sidenavOpened());
}
+
+ onNavigationClick(route: string) {
+ // Handle navigation if needed
+ console.log('Navigating to:', route);
+ }
}
diff --git a/apps/interface-services/trading-dashboard/src/app/components/sidebar/sidebar.component.css b/apps/interface-services/trading-dashboard/src/app/components/sidebar/sidebar.component.css
new file mode 100644
index 0000000..5ee1b8e
--- /dev/null
+++ b/apps/interface-services/trading-dashboard/src/app/components/sidebar/sidebar.component.css
@@ -0,0 +1,20 @@
+/* Sidebar specific styles */
+.nav-button {
+ width: 100%;
+ text-align: left;
+ justify-content: flex-start;
+ padding: 0.75rem 1rem;
+ border-radius: 0.375rem;
+ margin-bottom: 0.25rem;
+ background-color: transparent;
+ transition: background-color 0.15s ease-in-out;
+}
+
+.nav-button:hover {
+ background-color: #f3f4f6;
+}
+
+.nav-button.bg-blue-50 {
+ background-color: #eff6ff !important;
+ color: #1d4ed8 !important;
+}
diff --git a/apps/interface-services/trading-dashboard/src/app/components/sidebar/sidebar.component.html b/apps/interface-services/trading-dashboard/src/app/components/sidebar/sidebar.component.html
new file mode 100644
index 0000000..cd1e209
--- /dev/null
+++ b/apps/interface-services/trading-dashboard/src/app/components/sidebar/sidebar.component.html
@@ -0,0 +1,33 @@
+
+
+
+
+
+ 📈 Trading Bot
+
+
+ Real-time Dashboard
+
+
+
+
+
+
diff --git a/apps/interface-services/trading-dashboard/src/app/components/sidebar/sidebar.component.ts b/apps/interface-services/trading-dashboard/src/app/components/sidebar/sidebar.component.ts
new file mode 100644
index 0000000..861690f
--- /dev/null
+++ b/apps/interface-services/trading-dashboard/src/app/components/sidebar/sidebar.component.ts
@@ -0,0 +1,51 @@
+import { Component, input, output } from '@angular/core';
+import { CommonModule } from '@angular/common';
+import { MatSidenavModule } from '@angular/material/sidenav';
+import { MatButtonModule } from '@angular/material/button';
+import { MatIconModule } from '@angular/material/icon';
+import { Router } from '@angular/router';
+
+export interface NavigationItem {
+ label: string;
+ icon: string;
+ route: string;
+ active?: boolean;
+}
+
+@Component({
+ selector: 'app-sidebar',
+ standalone: true,
+ imports: [
+ CommonModule,
+ MatSidenavModule,
+ MatButtonModule,
+ MatIconModule
+ ],
+ templateUrl: './sidebar.component.html',
+ styleUrl: './sidebar.component.css'
+})
+export class SidebarComponent {
+ opened = input(true);
+ navigationItemClick = output();
+
+ protected navigationItems: NavigationItem[] = [
+ { label: 'Dashboard', icon: 'dashboard', route: '/dashboard', active: true },
+ { label: 'Market Data', icon: 'trending_up', route: '/market-data' },
+ { label: 'Portfolio', icon: 'account_balance_wallet', route: '/portfolio' },
+ { label: 'Strategies', icon: 'psychology', route: '/strategies' },
+ { label: 'Risk Management', icon: 'security', route: '/risk-management' },
+ { label: 'Settings', icon: 'settings', route: '/settings' }
+ ];
+
+ constructor(private router: Router) {}
+
+ onNavigationClick(route: string) {
+ this.navigationItemClick.emit(route);
+ this.router.navigate([route]);
+
+ // Update active state
+ this.navigationItems.forEach(item => {
+ item.active = item.route === route;
+ });
+ }
+}
diff --git a/apps/interface-services/trading-dashboard/src/app/pages/dashboard/dashboard.component.css b/apps/interface-services/trading-dashboard/src/app/pages/dashboard/dashboard.component.css
new file mode 100644
index 0000000..714e6ba
--- /dev/null
+++ b/apps/interface-services/trading-dashboard/src/app/pages/dashboard/dashboard.component.css
@@ -0,0 +1,48 @@
+/* Dashboard specific styles */
+.portfolio-card {
+ background-color: white !important;
+ border-radius: 0.5rem;
+ box-shadow: 0 1px 2px 0 rgb(0 0 0 / 0.05);
+ border: 1px solid #f3f4f6;
+ padding: 1.5rem;
+}
+
+.metric-value {
+ font-size: 1.5rem;
+ font-weight: 700;
+}
+
+.metric-label {
+ font-size: 0.875rem;
+ color: #6b7280;
+ margin-top: 0.25rem;
+}
+
+.metric-change-positive {
+ color: #16a34a;
+ font-weight: 500;
+}
+
+.metric-change-negative {
+ color: #dc2626;
+ font-weight: 500;
+}
+
+.status-chip-active {
+ background-color: #dcfce7;
+ color: #166534;
+ padding: 0.25rem 0.5rem;
+ border-radius: 9999px;
+ font-size: 0.75rem;
+ font-weight: 500;
+ display: inline-block;
+}
+
+.status-chip-medium {
+ background-color: #dbeafe;
+ color: #1e40af;
+ padding: 0.25rem 0.5rem;
+ border-radius: 9999px;
+ font-size: 0.75rem;
+ font-weight: 500;
+}
diff --git a/apps/interface-services/trading-dashboard/src/app/pages/dashboard/dashboard.component.html b/apps/interface-services/trading-dashboard/src/app/pages/dashboard/dashboard.component.html
new file mode 100644
index 0000000..5a5d329
--- /dev/null
+++ b/apps/interface-services/trading-dashboard/src/app/pages/dashboard/dashboard.component.html
@@ -0,0 +1,154 @@
+
+
+
+
+
+
+
Portfolio Value
+
+ ${{ portfolioValue().toLocaleString('en-US', {minimumFractionDigits: 2}) }}
+
+
+
account_balance_wallet
+
+
+
+
+
+
+
+
Day Change
+
0"
+ [class.metric-change-negative]="dayChange() < 0">
+ ${{ dayChange().toLocaleString('en-US', {minimumFractionDigits: 2}) }}
+
+
0"
+ [class.metric-change-negative]="dayChangePercent() < 0">
+ {{ dayChangePercent() > 0 ? '+' : '' }}{{ dayChangePercent().toFixed(2) }}%
+
+
+
0"
+ [class.metric-change-negative]="dayChange() < 0">
+ {{ dayChange() > 0 ? 'trending_up' : 'trending_down' }}
+
+
+
+
+
+
+
+
+
Active Strategies
+
3
+
Running
+
+
psychology
+
+
+
+
+
+
+
+
Risk Level
+
Low
+
Moderate
+
+
security
+
+
+
+
+
+
+
+
Market Watchlist
+
+
+
+
+
+
+
+ | Symbol |
+ {{ stock.symbol }} |
+
+
+
+
+ Price |
+
+ ${{ stock.price.toFixed(2) }}
+ |
+
+
+
+
+ Change |
+ 0"
+ [class.text-red-600]="stock.change < 0">
+ {{ stock.change > 0 ? '+' : '' }}${{ stock.change.toFixed(2) }}
+ |
+
+
+
+
+ Change % |
+ 0"
+ [class.text-red-600]="stock.changePercent < 0">
+ {{ stock.changePercent > 0 ? '+' : '' }}{{ stock.changePercent.toFixed(2) }}%
+ |
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
show_chart
+
Chart visualization will be implemented here
+
+
+
+
+
+
+
+
+
+
receipt_long
+
Order history and management will be implemented here
+
+
+
+
+
+
+
+
+
+
analytics
+
Advanced analytics and performance metrics will be implemented here
+
+
+
+
+
diff --git a/apps/interface-services/trading-dashboard/src/app/pages/dashboard/dashboard.component.ts b/apps/interface-services/trading-dashboard/src/app/pages/dashboard/dashboard.component.ts
new file mode 100644
index 0000000..41044bc
--- /dev/null
+++ b/apps/interface-services/trading-dashboard/src/app/pages/dashboard/dashboard.component.ts
@@ -0,0 +1,44 @@
+import { Component, signal } from '@angular/core';
+import { CommonModule } from '@angular/common';
+import { MatCardModule } from '@angular/material/card';
+import { MatTabsModule } from '@angular/material/tabs';
+import { MatButtonModule } from '@angular/material/button';
+import { MatIconModule } from '@angular/material/icon';
+import { MatTableModule } from '@angular/material/table';
+
+export interface MarketDataItem {
+ symbol: string;
+ price: number;
+ change: number;
+ changePercent: number;
+}
+
+@Component({
+ selector: 'app-dashboard',
+ standalone: true,
+ imports: [
+ CommonModule,
+ MatCardModule,
+ MatTabsModule,
+ MatButtonModule,
+ MatIconModule,
+ MatTableModule
+ ],
+ templateUrl: './dashboard.component.html',
+ styleUrl: './dashboard.component.css'
+})
+export class DashboardComponent {
+ // Mock data for the dashboard
+ protected marketData = signal([
+ { symbol: 'AAPL', price: 192.53, change: 2.41, changePercent: 1.27 },
+ { symbol: 'GOOGL', price: 138.21, change: -1.82, changePercent: -1.30 },
+ { symbol: 'MSFT', price: 378.85, change: 4.12, changePercent: 1.10 },
+ { symbol: 'TSLA', price: 248.42, change: -3.21, changePercent: -1.28 },
+ ]);
+
+ protected portfolioValue = signal(125420.50);
+ protected dayChange = signal(2341.20);
+ protected dayChangePercent = signal(1.90);
+
+ protected displayedColumns: string[] = ['symbol', 'price', 'change', 'changePercent'];
+}
diff --git a/apps/interface-services/trading-dashboard/src/app/pages/market-data/market-data.component.css b/apps/interface-services/trading-dashboard/src/app/pages/market-data/market-data.component.css
new file mode 100644
index 0000000..5fd9b2e
--- /dev/null
+++ b/apps/interface-services/trading-dashboard/src/app/pages/market-data/market-data.component.css
@@ -0,0 +1 @@
+/* Market Data specific styles */
diff --git a/apps/interface-services/trading-dashboard/src/app/pages/market-data/market-data.component.html b/apps/interface-services/trading-dashboard/src/app/pages/market-data/market-data.component.html
new file mode 100644
index 0000000..0ab3597
--- /dev/null
+++ b/apps/interface-services/trading-dashboard/src/app/pages/market-data/market-data.component.html
@@ -0,0 +1,158 @@
+
+
+
+
+
Market Data
+
Real-time market information and analytics
+
+
+
+
+
+
+
+
+
+
+
+
+
+
Active Instruments
+
{{ marketData().length }}
+
+
trending_up
+
+
+
+
+
+
+
Last Update
+
{{ new Date().toLocaleTimeString() }}
+
+
access_time
+
+
+
+
+
+
+
+
Live Market Data
+
+
+
+
+
+
+
+
+
+
+ | Symbol |
+ {{ stock.symbol }} |
+
+
+
+
+ Price |
+
+ ${{ stock.price.toFixed(2) }}
+ |
+
+
+
+
+ Change |
+ 0"
+ [class.text-red-600]="stock.change < 0">
+ {{ stock.change > 0 ? '+' : '' }}${{ stock.change.toFixed(2) }}
+ |
+
+
+
+
+ Change % |
+ 0"
+ [class.text-red-600]="stock.changePercent < 0">
+ {{ stock.changePercent > 0 ? '+' : '' }}{{ stock.changePercent.toFixed(2) }}%
+ |
+
+
+
+
+ Volume |
+
+ {{ stock.volume.toLocaleString() }}
+ |
+
+
+
+
+ Market Cap |
+
+ ${{ stock.marketCap }}
+ |
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
bar_chart
+
Technical analysis charts and indicators will be implemented here
+
+
+
+
+
+
+
+
+
+
timeline
+
Market trends and sector analysis will be implemented here
+
+
+
+
+
+
+
+
+
+
article
+
Market news and economic events will be implemented here
+
+
+
+
+
+
diff --git a/apps/interface-services/trading-dashboard/src/app/pages/market-data/market-data.component.ts b/apps/interface-services/trading-dashboard/src/app/pages/market-data/market-data.component.ts
new file mode 100644
index 0000000..0a9d5b9
--- /dev/null
+++ b/apps/interface-services/trading-dashboard/src/app/pages/market-data/market-data.component.ts
@@ -0,0 +1,89 @@
+import { Component, signal } from '@angular/core';
+import { CommonModule } from '@angular/common';
+import { MatCardModule } from '@angular/material/card';
+import { MatButtonModule } from '@angular/material/button';
+import { MatIconModule } from '@angular/material/icon';
+import { MatTableModule } from '@angular/material/table';
+import { MatTabsModule } from '@angular/material/tabs';
+
+export interface ExtendedMarketData {
+ symbol: string;
+ price: number;
+ change: number;
+ changePercent: number;
+ volume: number;
+ marketCap: string;
+ high52Week: number;
+ low52Week: number;
+}
+
+@Component({
+ selector: 'app-market-data',
+ standalone: true,
+ imports: [
+ CommonModule,
+ MatCardModule,
+ MatButtonModule,
+ MatIconModule,
+ MatTableModule,
+ MatTabsModule
+ ],
+ templateUrl: './market-data.component.html',
+ styleUrl: './market-data.component.css'
+})
+export class MarketDataComponent {
+ protected marketData = signal([
+ {
+ symbol: 'AAPL',
+ price: 192.53,
+ change: 2.41,
+ changePercent: 1.27,
+ volume: 45230000,
+ marketCap: '2.98T',
+ high52Week: 199.62,
+ low52Week: 164.08
+ },
+ {
+ symbol: 'GOOGL',
+ price: 138.21,
+ change: -1.82,
+ changePercent: -1.30,
+ volume: 23450000,
+ marketCap: '1.75T',
+ high52Week: 152.10,
+ low52Week: 125.45
+ },
+ {
+ symbol: 'MSFT',
+ price: 378.85,
+ change: 4.12,
+ changePercent: 1.10,
+ volume: 34560000,
+ marketCap: '2.82T',
+ high52Week: 384.30,
+ low52Week: 309.45
+ },
+ {
+ symbol: 'TSLA',
+ price: 248.42,
+ change: -3.21,
+ changePercent: -1.28,
+ volume: 67890000,
+ marketCap: '789B',
+ high52Week: 299.29,
+ low52Week: 138.80
+ },
+ {
+ symbol: 'AMZN',
+ price: 145.67,
+ change: 1.89,
+ changePercent: 1.31,
+ volume: 29340000,
+ marketCap: '1.52T',
+ high52Week: 155.20,
+ low52Week: 118.35
+ }
+ ]);
+
+ protected displayedColumns: string[] = ['symbol', 'price', 'change', 'changePercent', 'volume', 'marketCap'];
+}
diff --git a/apps/interface-services/trading-dashboard/src/app/pages/portfolio/portfolio.component.css b/apps/interface-services/trading-dashboard/src/app/pages/portfolio/portfolio.component.css
new file mode 100644
index 0000000..307b5f8
--- /dev/null
+++ b/apps/interface-services/trading-dashboard/src/app/pages/portfolio/portfolio.component.css
@@ -0,0 +1 @@
+/* Portfolio specific styles */
diff --git a/apps/interface-services/trading-dashboard/src/app/pages/portfolio/portfolio.component.html b/apps/interface-services/trading-dashboard/src/app/pages/portfolio/portfolio.component.html
new file mode 100644
index 0000000..71b66ad
--- /dev/null
+++ b/apps/interface-services/trading-dashboard/src/app/pages/portfolio/portfolio.component.html
@@ -0,0 +1,15 @@
+
+
+
+
Portfolio
+
Manage and monitor your investment portfolio
+
+
+
+
+
+
account_balance_wallet
+
Portfolio management features will be implemented here
+
+
+
diff --git a/apps/interface-services/trading-dashboard/src/app/pages/portfolio/portfolio.component.ts b/apps/interface-services/trading-dashboard/src/app/pages/portfolio/portfolio.component.ts
new file mode 100644
index 0000000..b2bcb67
--- /dev/null
+++ b/apps/interface-services/trading-dashboard/src/app/pages/portfolio/portfolio.component.ts
@@ -0,0 +1,13 @@
+import { Component } from '@angular/core';
+import { CommonModule } from '@angular/common';
+import { MatCardModule } from '@angular/material/card';
+import { MatIconModule } from '@angular/material/icon';
+
+@Component({
+ selector: 'app-portfolio',
+ standalone: true,
+ imports: [CommonModule, MatCardModule, MatIconModule],
+ templateUrl: './portfolio.component.html',
+ styleUrl: './portfolio.component.css'
+})
+export class PortfolioComponent {}
diff --git a/apps/interface-services/trading-dashboard/src/app/pages/risk-management/risk-management.component.css b/apps/interface-services/trading-dashboard/src/app/pages/risk-management/risk-management.component.css
new file mode 100644
index 0000000..e193853
--- /dev/null
+++ b/apps/interface-services/trading-dashboard/src/app/pages/risk-management/risk-management.component.css
@@ -0,0 +1 @@
+/* Risk Management specific styles */
diff --git a/apps/interface-services/trading-dashboard/src/app/pages/risk-management/risk-management.component.html b/apps/interface-services/trading-dashboard/src/app/pages/risk-management/risk-management.component.html
new file mode 100644
index 0000000..f34e299
--- /dev/null
+++ b/apps/interface-services/trading-dashboard/src/app/pages/risk-management/risk-management.component.html
@@ -0,0 +1,15 @@
+
+
+
+
Risk Management
+
Monitor and control trading risks and exposure
+
+
+
+
+
+
security
+
Risk management tools and monitoring will be implemented here
+
+
+
diff --git a/apps/interface-services/trading-dashboard/src/app/pages/risk-management/risk-management.component.ts b/apps/interface-services/trading-dashboard/src/app/pages/risk-management/risk-management.component.ts
new file mode 100644
index 0000000..de584b7
--- /dev/null
+++ b/apps/interface-services/trading-dashboard/src/app/pages/risk-management/risk-management.component.ts
@@ -0,0 +1,13 @@
+import { Component } from '@angular/core';
+import { CommonModule } from '@angular/common';
+import { MatCardModule } from '@angular/material/card';
+import { MatIconModule } from '@angular/material/icon';
+
+@Component({
+ selector: 'app-risk-management',
+ standalone: true,
+ imports: [CommonModule, MatCardModule, MatIconModule],
+ templateUrl: './risk-management.component.html',
+ styleUrl: './risk-management.component.css'
+})
+export class RiskManagementComponent {}
diff --git a/apps/interface-services/trading-dashboard/src/app/pages/settings/settings.component.css b/apps/interface-services/trading-dashboard/src/app/pages/settings/settings.component.css
new file mode 100644
index 0000000..894a168
--- /dev/null
+++ b/apps/interface-services/trading-dashboard/src/app/pages/settings/settings.component.css
@@ -0,0 +1 @@
+/* Settings specific styles */
diff --git a/apps/interface-services/trading-dashboard/src/app/pages/settings/settings.component.html b/apps/interface-services/trading-dashboard/src/app/pages/settings/settings.component.html
new file mode 100644
index 0000000..5e4940b
--- /dev/null
+++ b/apps/interface-services/trading-dashboard/src/app/pages/settings/settings.component.html
@@ -0,0 +1,15 @@
+
+
+
+
Settings
+
Configure application preferences and system settings
+
+
+
+
+
+
settings
+
Application settings and configuration will be implemented here
+
+
+
diff --git a/apps/interface-services/trading-dashboard/src/app/pages/settings/settings.component.ts b/apps/interface-services/trading-dashboard/src/app/pages/settings/settings.component.ts
new file mode 100644
index 0000000..77a45d6
--- /dev/null
+++ b/apps/interface-services/trading-dashboard/src/app/pages/settings/settings.component.ts
@@ -0,0 +1,13 @@
+import { Component } from '@angular/core';
+import { CommonModule } from '@angular/common';
+import { MatCardModule } from '@angular/material/card';
+import { MatIconModule } from '@angular/material/icon';
+
+@Component({
+ selector: 'app-settings',
+ standalone: true,
+ imports: [CommonModule, MatCardModule, MatIconModule],
+ templateUrl: './settings.component.html',
+ styleUrl: './settings.component.css'
+})
+export class SettingsComponent {}
diff --git a/apps/interface-services/trading-dashboard/src/app/pages/strategies/strategies.component.css b/apps/interface-services/trading-dashboard/src/app/pages/strategies/strategies.component.css
new file mode 100644
index 0000000..a924fef
--- /dev/null
+++ b/apps/interface-services/trading-dashboard/src/app/pages/strategies/strategies.component.css
@@ -0,0 +1 @@
+/* Strategies specific styles */
diff --git a/apps/interface-services/trading-dashboard/src/app/pages/strategies/strategies.component.html b/apps/interface-services/trading-dashboard/src/app/pages/strategies/strategies.component.html
new file mode 100644
index 0000000..14339df
--- /dev/null
+++ b/apps/interface-services/trading-dashboard/src/app/pages/strategies/strategies.component.html
@@ -0,0 +1,15 @@
+
+
+
+
Trading Strategies
+
Configure and monitor your automated trading strategies
+
+
+
+
+
+
psychology
+
Strategy management and configuration will be implemented here
+
+
+
diff --git a/apps/interface-services/trading-dashboard/src/app/pages/strategies/strategies.component.ts b/apps/interface-services/trading-dashboard/src/app/pages/strategies/strategies.component.ts
new file mode 100644
index 0000000..aefe585
--- /dev/null
+++ b/apps/interface-services/trading-dashboard/src/app/pages/strategies/strategies.component.ts
@@ -0,0 +1,13 @@
+import { Component } from '@angular/core';
+import { CommonModule } from '@angular/common';
+import { MatCardModule } from '@angular/material/card';
+import { MatIconModule } from '@angular/material/icon';
+
+@Component({
+ selector: 'app-strategies',
+ standalone: true,
+ imports: [CommonModule, MatCardModule, MatIconModule],
+ templateUrl: './strategies.component.html',
+ styleUrl: './strategies.component.css'
+})
+export class StrategiesComponent {}
diff --git a/apps/interface-services/trading-dashboard/src/styles.css b/apps/interface-services/trading-dashboard/src/styles.css
new file mode 100644
index 0000000..7170b06
--- /dev/null
+++ b/apps/interface-services/trading-dashboard/src/styles.css
@@ -0,0 +1,89 @@
+@import "tailwindcss";
+
+/* Custom base styles */
+html, body {
+ height: 100%;
+ margin: 0;
+ font-family: -apple-system, BlinkMacSystemFont, 'Segoe UI', Roboto, Oxygen, Ubuntu, Cantarell, sans-serif;
+ background-color: #f9fafb;
+}
+
+/* Angular Material integration styles */
+.mat-sidenav-container {
+ background-color: transparent;
+}
+
+.mat-sidenav {
+ border-radius: 0;
+}
+
+.mat-toolbar {
+ background-color: white;
+ color: #374151;
+}
+
+.mat-mdc-button.w-full {
+ width: 100%;
+ text-align: left;
+ justify-content: flex-start;
+}
+
+.mat-mdc-card {
+ border-radius: 8px;
+ box-shadow: 0 1px 3px 0 rgb(0 0 0 / 0.1), 0 1px 2px -1px rgb(0 0 0 / 0.1);
+}
+
+.mat-mdc-tab-group .mat-mdc-tab-header {
+ border-bottom: 1px solid #e5e7eb;
+}
+
+.mat-mdc-chip.chip-green {
+ background-color: #dcfce7 !important;
+ color: #166534 !important;
+}
+
+.mat-mdc-chip.chip-blue {
+ background-color: #dbeafe !important;
+ color: #1e40af !important;
+}
+
+.mat-mdc-table {
+ border-radius: 8px;
+ overflow: hidden;
+}
+
+.mat-mdc-header-row {
+ background-color: #f9fafb;
+}
+
+.mat-mdc-row:hover {
+ background-color: #f9fafb;
+}
+
+/* Dark mode overrides */
+.dark .mat-toolbar {
+ background-color: #1f2937;
+ color: #f9fafb;
+}
+
+.dark .mat-mdc-tab-group .mat-mdc-tab-header {
+ border-bottom: 1px solid #4b5563;
+}
+
+.dark .mat-mdc-header-row {
+ background-color: #1f2937;
+}
+
+.dark .mat-mdc-row:hover {
+ background-color: #374151;
+}
+
+.dark .mat-mdc-card {
+ background-color: #1f2937;
+ color: #f9fafb;
+}
+
+.dark .mat-mdc-table {
+ background-color: #1f2937;
+ color: #f9fafb;
+}
diff --git a/apps/interface-services/trading-dashboard/src/styles.scss b/apps/interface-services/trading-dashboard/src/styles.scss
deleted file mode 100644
index 1ec584f..0000000
--- a/apps/interface-services/trading-dashboard/src/styles.scss
+++ /dev/null
@@ -1,280 +0,0 @@
-/* You can add global styles to this file, and also import other style files */
-@use '@angular/material' as mat;
-
-@import "tailwindcss";
-
-// Define a custom theme
-$primary-palette: mat.m2-define-palette(mat.$m2-blue-palette);
-$accent-palette: mat.m2-define-palette(mat.$m2-green-palette);
-$warn-palette: mat.m2-define-palette(mat.$m2-red-palette);
-
-$theme: mat.m2-define-light-theme((
- color: (
- primary: $primary-palette,
- accent: $accent-palette,
- warn: $warn-palette,
- ),
- typography: mat.m2-define-typography-config(),
- density: 0
-));
-
-@include mat.all-component-themes($theme);
-
-/* Custom global styles for trading dashboard */
-html, body {
- height: 100%;
- margin: 0;
- font-family: -apple-system, BlinkMacSystemFont, 'Segoe UI', Roboto, Oxygen, Ubuntu, Cantarell, sans-serif;
- background-color: #f5f5f5;
-}
-
-/* Layout utilities */
-.flex {
- display: flex;
-}
-
-.flex-1 {
- flex: 1;
-}
-
-.items-center {
- align-items: center;
-}
-
-.justify-between {
- justify-content: space-between;
-}
-
-.space-x-4 > * + * {
- margin-left: 1rem;
-}
-
-.space-y-6 > * + * {
- margin-top: 1.5rem;
-}
-
-.grid {
- display: grid;
-}
-
-.grid-cols-1 {
- grid-template-columns: repeat(1, 1fr);
-}
-
-.grid-cols-2 {
- grid-template-columns: repeat(2, 1fr);
-}
-
-.grid-cols-4 {
- grid-template-columns: repeat(4, 1fr);
-}
-
-.gap-6 {
- gap: 1.5rem;
-}
-
-.p-6 {
- padding: 1.5rem;
-}
-
-.mb-4 {
- margin-bottom: 1rem;
-}
-
-.mr-3 {
- margin-right: 0.75rem;
-}
-
-.mr-4 {
- margin-right: 1rem;
-}
-
-.mt-1 {
- margin-top: 0.25rem;
-}
-
-.w-64 {
- width: 16rem;
-}
-
-.w-full {
- width: 100%;
-}
-
-.min-h-screen {
- min-height: 100vh;
-}
-
-.h-96 {
- height: 24rem;
-}
-
-.text-center {
- text-align: center;
-}
-
-.text-left {
- text-align: left;
-}
-
-.text-right {
- text-align: right;
-}
-
-.text-lg {
- font-size: 1.125rem;
-}
-
-.text-xl {
- font-size: 1.25rem;
-}
-
-.text-2xl {
- font-size: 1.5rem;
-}
-
-.text-sm {
- font-size: 0.875rem;
-}
-
-.font-bold {
- font-weight: 700;
-}
-
-.font-semibold {
- font-weight: 600;
-}
-
-.font-medium {
- font-weight: 500;
-}
-
-/* Color utilities */
-.text-blue-600 {
- color: #2563eb;
-}
-
-.text-green-600 {
- color: #16a34a;
-}
-
-.text-red-600 {
- color: #dc2626;
-}
-
-.text-purple-600 {
- color: #9333ea;
-}
-
-.text-gray-900 {
- color: #111827;
-}
-
-.text-gray-600 {
- color: #4b5563;
-}
-
-.text-gray-500 {
- color: #6b7280;
-}
-
-.bg-gray-50 {
- background-color: #f9fafb;
-}
-
-.bg-white {
- background-color: #ffffff;
-}
-
-.bg-green-100 {
- background-color: #dcfce7;
-}
-
-.text-green-800 {
- color: #166534;
-}
-
-.bg-blue-100 {
- background-color: #dbeafe;
-}
-
-.text-blue-800 {
- color: #1e40af;
-}
-
-.bg-blue-50 {
- background-color: #eff6ff;
-}
-
-.text-blue-700 {
- color: #1d4ed8;
-}
-
-/* Border utilities */
-.border-b {
- border-bottom: 1px solid #e5e7eb;
-}
-
-.border-r {
- border-right: 1px solid #e5e7eb;
-}
-
-.border-gray-200 {
- border-color: #e5e7eb;
-}
-
-.border-gray-100 {
- border-color: #f3f4f6;
-}
-
-/* Shadow utilities */
-.shadow-sm {
- box-shadow: 0 1px 2px 0 rgb(0 0 0 / 0.05);
-}
-
-/* Hover utilities */
-.hover\:bg-gray-100:hover {
- background-color: #f3f4f6;
-}
-
-/* Responsive grid */
-@media (min-width: 768px) {
- .md\:grid-cols-2 {
- grid-template-columns: repeat(2, 1fr);
- }
-}
-
-@media (min-width: 1024px) {
- .lg\:grid-cols-4 {
- grid-template-columns: repeat(4, 1fr);
- }
-}
-
-/* Table styles */
-.overflow-x-auto {
- overflow-x: auto;
-}
-
-table {
- width: 100%;
- border-collapse: collapse;
-}
-
-table th,
-table td {
- padding: 0.75rem 1rem;
- text-align: left;
-}
-
-table th {
- font-weight: 500;
- border-bottom: 1px solid #e5e7eb;
-}
-
-table td {
- border-bottom: 1px solid #f3f4f6;
-}
-
-table tr:hover {
- background-color: #f9fafb;
-}