├── .editorconfig ├── .gitignore ├── .vscode ├── extensions.json ├── launch.json └── tasks.json ├── README.md ├── angular.json ├── package-lock.json ├── package.json ├── public └── favicon.ico ├── server.ts ├── src ├── app │ ├── app.component.css │ ├── app.component.html │ ├── app.component.spec.ts │ ├── app.component.ts │ ├── app.config.server.ts │ ├── app.config.ts │ ├── app.routes.ts │ ├── business │ │ ├── dashboard │ │ │ ├── dashboard.component.css │ │ │ ├── dashboard.component.html │ │ │ ├── dashboard.component.spec.ts │ │ │ └── dashboard.component.ts │ │ ├── profile │ │ │ ├── profile.component.css │ │ │ ├── profile.component.html │ │ │ ├── profile.component.spec.ts │ │ │ └── profile.component.ts │ │ └── tables │ │ │ ├── tables.component.css │ │ │ ├── tables.component.html │ │ │ ├── tables.component.spec.ts │ │ │ └── tables.component.ts │ └── shared │ │ └── components │ │ ├── footer │ │ ├── footer.component.css │ │ ├── footer.component.html │ │ ├── footer.component.spec.ts │ │ └── footer.component.ts │ │ ├── header │ │ ├── header.component.css │ │ ├── header.component.html │ │ ├── header.component.spec.ts │ │ └── header.component.ts │ │ ├── layout │ │ ├── layout.component.css │ │ ├── layout.component.html │ │ ├── layout.component.spec.ts │ │ └── layout.component.ts │ │ └── sidebar │ │ ├── sidebar.component.css │ │ ├── sidebar.component.html │ │ ├── sidebar.component.spec.ts │ │ └── sidebar.component.ts ├── index.html ├── main.server.ts ├── main.ts └── styles.css ├── tailwind.config.js ├── tsconfig.app.json ├── tsconfig.json └── tsconfig.spec.json /.editorconfig: -------------------------------------------------------------------------------- 1 | # Editor configuration, see https://editorconfig.org 2 | root = true 3 | 4 | [*] 5 | charset = utf-8 6 | indent_style = space 7 | indent_size = 2 8 | insert_final_newline = true 9 | trim_trailing_whitespace = true 10 | 11 | [*.ts] 12 | quote_type = single 13 | 14 | [*.md] 15 | max_line_length = off 16 | trim_trailing_whitespace = false 17 | -------------------------------------------------------------------------------- /.gitignore: -------------------------------------------------------------------------------- 1 | # See https://docs.github.com/get-started/getting-started-with-git/ignoring-files for more about ignoring files. 2 | 3 | # Compiled output 4 | /dist 5 | /tmp 6 | /out-tsc 7 | /bazel-out 8 | 9 | # Node 10 | /node_modules 11 | npm-debug.log 12 | yarn-error.log 13 | 14 | # IDEs and editors 15 | .idea/ 16 | .project 17 | .classpath 18 | .c9/ 19 | *.launch 20 | .settings/ 21 | *.sublime-workspace 22 | 23 | # Visual Studio Code 24 | .vscode/* 25 | !.vscode/settings.json 26 | !.vscode/tasks.json 27 | !.vscode/launch.json 28 | !.vscode/extensions.json 29 | .history/* 30 | 31 | # Miscellaneous 32 | /.angular/cache 33 | .sass-cache/ 34 | /connect.lock 35 | /coverage 36 | /libpeerconnection.log 37 | testem.log 38 | /typings 39 | 40 | # System files 41 | .DS_Store 42 | Thumbs.db 43 | -------------------------------------------------------------------------------- /.vscode/extensions.json: -------------------------------------------------------------------------------- 1 | { 2 | // For more information, visit: https://go.microsoft.com/fwlink/?linkid=827846 3 | "recommendations": ["angular.ng-template"] 4 | } 5 | -------------------------------------------------------------------------------- /.vscode/launch.json: -------------------------------------------------------------------------------- 1 | { 2 | // For more information, visit: https://go.microsoft.com/fwlink/?linkid=830387 3 | "version": "0.2.0", 4 | "configurations": [ 5 | { 6 | "name": "ng serve", 7 | "type": "chrome", 8 | "request": "launch", 9 | "preLaunchTask": "npm: start", 10 | "url": "http://localhost:4200/" 11 | }, 12 | { 13 | "name": "ng test", 14 | "type": "chrome", 15 | "request": "launch", 16 | "preLaunchTask": "npm: test", 17 | "url": "http://localhost:9876/debug.html" 18 | } 19 | ] 20 | } 21 | -------------------------------------------------------------------------------- /.vscode/tasks.json: -------------------------------------------------------------------------------- 1 | { 2 | // For more information, visit: https://go.microsoft.com/fwlink/?LinkId=733558 3 | "version": "2.0.0", 4 | "tasks": [ 5 | { 6 | "type": "npm", 7 | "script": "start", 8 | "isBackground": true, 9 | "problemMatcher": { 10 | "owner": "typescript", 11 | "pattern": "$tsc", 12 | "background": { 13 | "activeOnStart": true, 14 | "beginsPattern": { 15 | "regexp": "(.*?)" 16 | }, 17 | "endsPattern": { 18 | "regexp": "bundle generation complete" 19 | } 20 | } 21 | } 22 | }, 23 | { 24 | "type": "npm", 25 | "script": "test", 26 | "isBackground": true, 27 | "problemMatcher": { 28 | "owner": "typescript", 29 | "pattern": "$tsc", 30 | "background": { 31 | "activeOnStart": true, 32 | "beginsPattern": { 33 | "regexp": "(.*?)" 34 | }, 35 | "endsPattern": { 36 | "regexp": "bundle generation complete" 37 | } 38 | } 39 | } 40 | } 41 | ] 42 | } 43 | -------------------------------------------------------------------------------- /README.md: -------------------------------------------------------------------------------- 1 |

2 | Angular Logo 3 |

4 | 5 | [circleci-image]: https://img.shields.io/circleci/build/github/nestjs/nest/master?token=abc123def456 6 | [circleci-url]: https://circleci.com/gh/nestjs/nest 7 | 8 |

Menu Dashboard en Angular 18+

9 | 10 | 11 | ## Contact 12 | 13 | - Author - [Neiser Custodio](https://instagram.com/neisercode) 14 | - Youtube - [https://www.youtube.com/@neisercp](https://youtube.com/@neisercp) 15 | - X - [@neisercp](https://twitter.com/neisercp) 16 | - Instagram - [@neisercode](https://instagram.com/neisercode) 17 | 18 | ## Installation 19 | 20 | ```bash 21 | $ npm install 22 | ``` 23 | 24 | ## Running the app 25 | 26 | ```bash 27 | # development 28 | $ ng serve 29 | 30 | ``` 31 | 32 | ## Test 33 | 34 | ```bash 35 | # unit tests 36 | $ ng test 37 | 38 | ``` 39 | 40 | ## License 41 | 42 | By [Neiser Custodio](https://instagram.com/neisercode). -------------------------------------------------------------------------------- /angular.json: -------------------------------------------------------------------------------- 1 | { 2 | "$schema": "./node_modules/@angular/cli/lib/config/schema.json", 3 | "version": 1, 4 | "newProjectRoot": "projects", 5 | "projects": { 6 | "ng-menu-dashboard": { 7 | "projectType": "application", 8 | "schematics": {}, 9 | "root": "", 10 | "sourceRoot": "src", 11 | "prefix": "app", 12 | "architect": { 13 | "build": { 14 | "builder": "@angular-devkit/build-angular:application", 15 | "options": { 16 | "outputPath": "dist/ng-menu-dashboard", 17 | "index": "src/index.html", 18 | "browser": "src/main.ts", 19 | "polyfills": [ 20 | "zone.js" 21 | ], 22 | "tsConfig": "tsconfig.app.json", 23 | "assets": [ 24 | { 25 | "glob": "**/*", 26 | "input": "public" 27 | } 28 | ], 29 | "styles": [ 30 | "src/styles.css" 31 | ], 32 | "scripts": [], 33 | "server": "src/main.server.ts", 34 | "prerender": true, 35 | "ssr": { 36 | "entry": "server.ts" 37 | } 38 | }, 39 | "configurations": { 40 | "production": { 41 | "budgets": [ 42 | { 43 | "type": "initial", 44 | "maximumWarning": "500kB", 45 | "maximumError": "1MB" 46 | }, 47 | { 48 | "type": "anyComponentStyle", 49 | "maximumWarning": "2kB", 50 | "maximumError": "4kB" 51 | } 52 | ], 53 | "outputHashing": "all" 54 | }, 55 | "development": { 56 | "optimization": false, 57 | "extractLicenses": false, 58 | "sourceMap": true 59 | } 60 | }, 61 | "defaultConfiguration": "production" 62 | }, 63 | "serve": { 64 | "builder": "@angular-devkit/build-angular:dev-server", 65 | "configurations": { 66 | "production": { 67 | "buildTarget": "ng-menu-dashboard:build:production" 68 | }, 69 | "development": { 70 | "buildTarget": "ng-menu-dashboard:build:development" 71 | } 72 | }, 73 | "defaultConfiguration": "development" 74 | }, 75 | "extract-i18n": { 76 | "builder": "@angular-devkit/build-angular:extract-i18n" 77 | }, 78 | "test": { 79 | "builder": "@angular-devkit/build-angular:karma", 80 | "options": { 81 | "polyfills": [ 82 | "zone.js", 83 | "zone.js/testing" 84 | ], 85 | "tsConfig": "tsconfig.spec.json", 86 | "assets": [ 87 | { 88 | "glob": "**/*", 89 | "input": "public" 90 | } 91 | ], 92 | "styles": [ 93 | "src/styles.css" 94 | ], 95 | "scripts": [] 96 | } 97 | } 98 | } 99 | } 100 | }, 101 | "cli": { 102 | "analytics": "24f983b5-e7e9-489c-9116-273e77b916d1" 103 | } 104 | } 105 | -------------------------------------------------------------------------------- /package.json: -------------------------------------------------------------------------------- 1 | { 2 | "name": "ng-menu-dashboard", 3 | "version": "0.0.0", 4 | "scripts": { 5 | "ng": "ng", 6 | "start": "ng serve", 7 | "build": "ng build", 8 | "watch": "ng build --watch --configuration development", 9 | "test": "ng test", 10 | "serve:ssr:ng-menu-dashboard": "node dist/ng-menu-dashboard/server/server.mjs" 11 | }, 12 | "private": true, 13 | "dependencies": { 14 | "@angular/animations": "^18.0.0", 15 | "@angular/common": "^18.0.0", 16 | "@angular/compiler": "^18.0.0", 17 | "@angular/core": "^18.0.0", 18 | "@angular/forms": "^18.0.0", 19 | "@angular/platform-browser": "^18.0.0", 20 | "@angular/platform-browser-dynamic": "^18.0.0", 21 | "@angular/platform-server": "^18.0.0", 22 | "@angular/router": "^18.0.0", 23 | "@angular/ssr": "^18.0.1", 24 | "express": "^4.18.2", 25 | "rxjs": "~7.8.0", 26 | "tslib": "^2.3.0", 27 | "zone.js": "~0.14.3" 28 | }, 29 | "devDependencies": { 30 | "@angular-devkit/build-angular": "^18.0.1", 31 | "@angular/cli": "^18.0.1", 32 | "@angular/compiler-cli": "^18.0.0", 33 | "@types/express": "^4.17.17", 34 | "@types/jasmine": "~5.1.0", 35 | "@types/node": "^18.18.0", 36 | "autoprefixer": "^10.4.19", 37 | "jasmine-core": "~5.1.0", 38 | "karma": "~6.4.0", 39 | "karma-chrome-launcher": "~3.2.0", 40 | "karma-coverage": "~2.2.0", 41 | "karma-jasmine": "~5.1.0", 42 | "karma-jasmine-html-reporter": "~2.1.0", 43 | "postcss": "^8.4.38", 44 | "tailwindcss": "^3.4.3", 45 | "typescript": "~5.4.2" 46 | } 47 | } 48 | -------------------------------------------------------------------------------- /public/favicon.ico: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/neiserdeveloper/ng-menu-dashboard/795ad1ab89dbafd862185974c900b956d9fcaddf/public/favicon.ico -------------------------------------------------------------------------------- /server.ts: -------------------------------------------------------------------------------- 1 | import { APP_BASE_HREF } from '@angular/common'; 2 | import { CommonEngine } from '@angular/ssr'; 3 | import express from 'express'; 4 | import { fileURLToPath } from 'node:url'; 5 | import { dirname, join, resolve } from 'node:path'; 6 | import bootstrap from './src/main.server'; 7 | 8 | // The Express app is exported so that it can be used by serverless Functions. 9 | export function app(): express.Express { 10 | const server = express(); 11 | const serverDistFolder = dirname(fileURLToPath(import.meta.url)); 12 | const browserDistFolder = resolve(serverDistFolder, '../browser'); 13 | const indexHtml = join(serverDistFolder, 'index.server.html'); 14 | 15 | const commonEngine = new CommonEngine(); 16 | 17 | server.set('view engine', 'html'); 18 | server.set('views', browserDistFolder); 19 | 20 | // Example Express Rest API endpoints 21 | // server.get('/api/**', (req, res) => { }); 22 | // Serve static files from /browser 23 | server.get('**', express.static(browserDistFolder, { 24 | maxAge: '1y', 25 | index: 'index.html', 26 | })); 27 | 28 | // All regular routes use the Angular engine 29 | server.get('**', (req, res, next) => { 30 | const { protocol, originalUrl, baseUrl, headers } = req; 31 | 32 | commonEngine 33 | .render({ 34 | bootstrap, 35 | documentFilePath: indexHtml, 36 | url: `${protocol}://${headers.host}${originalUrl}`, 37 | publicPath: browserDistFolder, 38 | providers: [{ provide: APP_BASE_HREF, useValue: baseUrl }], 39 | }) 40 | .then((html) => res.send(html)) 41 | .catch((err) => next(err)); 42 | }); 43 | 44 | return server; 45 | } 46 | 47 | function run(): void { 48 | const port = process.env['PORT'] || 4000; 49 | 50 | // Start up the Node server 51 | const server = app(); 52 | server.listen(port, () => { 53 | console.log(`Node Express server listening on http://localhost:${port}`); 54 | }); 55 | } 56 | 57 | run(); 58 | -------------------------------------------------------------------------------- /src/app/app.component.css: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/neiserdeveloper/ng-menu-dashboard/795ad1ab89dbafd862185974c900b956d9fcaddf/src/app/app.component.css -------------------------------------------------------------------------------- /src/app/app.component.html: -------------------------------------------------------------------------------- 1 | 2 | -------------------------------------------------------------------------------- /src/app/app.component.spec.ts: -------------------------------------------------------------------------------- 1 | import { TestBed } from '@angular/core/testing'; 2 | import { AppComponent } from './app.component'; 3 | 4 | describe('AppComponent', () => { 5 | beforeEach(async () => { 6 | await TestBed.configureTestingModule({ 7 | imports: [AppComponent], 8 | }).compileComponents(); 9 | }); 10 | 11 | it('should create the app', () => { 12 | const fixture = TestBed.createComponent(AppComponent); 13 | const app = fixture.componentInstance; 14 | expect(app).toBeTruthy(); 15 | }); 16 | 17 | it(`should have the 'ng-menu-dashboard' title`, () => { 18 | const fixture = TestBed.createComponent(AppComponent); 19 | const app = fixture.componentInstance; 20 | expect(app.title).toEqual('ng-menu-dashboard'); 21 | }); 22 | 23 | it('should render title', () => { 24 | const fixture = TestBed.createComponent(AppComponent); 25 | fixture.detectChanges(); 26 | const compiled = fixture.nativeElement as HTMLElement; 27 | expect(compiled.querySelector('h1')?.textContent).toContain('Hello, ng-menu-dashboard'); 28 | }); 29 | }); 30 | -------------------------------------------------------------------------------- /src/app/app.component.ts: -------------------------------------------------------------------------------- 1 | import { Component } from '@angular/core'; 2 | import { RouterOutlet } from '@angular/router'; 3 | 4 | @Component({ 5 | selector: 'app-root', 6 | standalone: true, 7 | imports: [RouterOutlet], 8 | templateUrl: './app.component.html', 9 | styleUrl: './app.component.css' 10 | }) 11 | export class AppComponent { 12 | title = 'ng-menu-dashboard'; 13 | } 14 | -------------------------------------------------------------------------------- /src/app/app.config.server.ts: -------------------------------------------------------------------------------- 1 | import { mergeApplicationConfig, ApplicationConfig } from '@angular/core'; 2 | import { provideServerRendering } from '@angular/platform-server'; 3 | import { appConfig } from './app.config'; 4 | 5 | const serverConfig: ApplicationConfig = { 6 | providers: [ 7 | provideServerRendering() 8 | ] 9 | }; 10 | 11 | export const config = mergeApplicationConfig(appConfig, serverConfig); 12 | -------------------------------------------------------------------------------- /src/app/app.config.ts: -------------------------------------------------------------------------------- 1 | import { ApplicationConfig, provideZoneChangeDetection } from '@angular/core'; 2 | import { provideRouter } from '@angular/router'; 3 | 4 | import { routes } from './app.routes'; 5 | import { provideClientHydration } from '@angular/platform-browser'; 6 | 7 | export const appConfig: ApplicationConfig = { 8 | providers: [provideZoneChangeDetection({ eventCoalescing: true }), provideRouter(routes), provideClientHydration()] 9 | }; 10 | -------------------------------------------------------------------------------- /src/app/app.routes.ts: -------------------------------------------------------------------------------- 1 | import { Routes } from '@angular/router'; 2 | 3 | export const routes: Routes = [ 4 | { 5 | path: '', 6 | loadComponent: () => import('./shared/components/layout/layout.component'), 7 | children: [ 8 | { 9 | path: 'dashboard', 10 | loadComponent: () => import('./business/dashboard/dashboard.component') 11 | }, 12 | { 13 | path: 'profile', 14 | loadComponent: () => import('./business/profile/profile.component') 15 | }, 16 | { 17 | path: 'tables', 18 | loadComponent: () => import('./business/tables/tables.component') 19 | }, 20 | { 21 | path: '', 22 | redirectTo: 'dashboard', 23 | pathMatch: 'full' 24 | } 25 | 26 | ] 27 | }, 28 | { 29 | path: '**', 30 | redirectTo: 'dashboard' 31 | } 32 | ]; 33 | -------------------------------------------------------------------------------- /src/app/business/dashboard/dashboard.component.css: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/neiserdeveloper/ng-menu-dashboard/795ad1ab89dbafd862185974c900b956d9fcaddf/src/app/business/dashboard/dashboard.component.css -------------------------------------------------------------------------------- /src/app/business/dashboard/dashboard.component.html: -------------------------------------------------------------------------------- 1 |
2 |
3 |
4 | 9 |
10 |
11 |

Today's Money

12 |

$53k

13 |
14 |
15 |

16 | +55% than last week 17 |

18 |
19 |
20 |
21 |
22 | 25 |
26 |
27 |

Today's Users

28 |

2,300

29 |
30 |
31 |

32 | +3% than last month 33 |

34 |
35 |
36 |
37 |
38 | 41 |
42 |
43 |

New Clients

44 |

3,462

45 |
46 |
47 |

48 | -2% than yesterday 49 |

50 |
51 |
52 |
53 |
54 | 57 |
58 |
59 |

Sales

60 |

$103,430

61 |
62 |
63 |

64 | +5% than yesterday 65 |

66 |
67 |
68 |
69 | 70 |
71 |
72 |
73 | 78 |
79 |
80 |

Today's Money

81 |

$53k

82 |
83 |
84 |

85 | +55% than last week 86 |

87 |
88 |
89 |
90 |
91 | 94 |
95 |
96 |

Today's Users

97 |

2,300

98 |
99 |
100 |

101 | +3% than last month 102 |

103 |
104 |
105 |
106 |
107 | 110 |
111 |
112 |

New Clients

113 |

3,462

114 |
115 |
116 |

117 | -2% than yesterday 118 |

119 |
120 |
121 |
122 |
123 | 126 |
127 |
128 |

Sales

129 |

$103,430

130 |
131 |
132 |

133 | +5% than yesterday 134 |

135 |
136 |
137 |
138 | 139 |
140 |
141 |
142 |
143 |
Projects
144 |

145 | 148 | 30 done this month 149 |

150 |
151 | 158 |
159 |
160 | 161 | 162 | 163 | 166 | 169 | 172 | 173 | 174 | 175 | 176 | 181 | 182 | 185 | 193 | 194 | 195 | 200 | 203 | 211 | 212 | 213 | 218 | 221 | 229 | 230 | 231 | 236 | 239 | 247 | 248 | 249 | 254 | 257 | 265 | 266 | 267 | 268 |
164 |

companies

165 |
167 |

budget

168 |
170 |

completion

171 |
177 |
178 |

Material XD Version

179 |
180 |
183 |

$14,000

184 |
186 |
187 |

60%

188 |
189 |
190 |
191 |
192 |
196 |
197 |

Add Progress Track

198 |
199 |
201 |

$3,000

202 |
204 |
205 |

10%

206 |
207 |
208 |
209 |
210 |
214 |
215 |

Fix Platform Errors

216 |
217 |
219 |

Not set

220 |
222 |
223 |

100%

224 |
225 |
226 |
227 |
228 |
232 |
233 |

Launch our Mobile App

234 |
235 |
237 |

$20,500

238 |
240 |
241 |

100%

242 |
243 |
244 |
245 |
246 |
250 |
251 |

Add the New Pricing Page

252 |
253 |
255 |

$500

256 |
258 |
259 |

25%

260 |
261 |
262 |
263 |
264 |
269 |
270 |
271 |
-------------------------------------------------------------------------------- /src/app/business/dashboard/dashboard.component.spec.ts: -------------------------------------------------------------------------------- 1 | import { ComponentFixture, TestBed } from '@angular/core/testing'; 2 | 3 | import { DashboardComponent } from './dashboard.component'; 4 | 5 | describe('DashboardComponent', () => { 6 | let component: DashboardComponent; 7 | let fixture: ComponentFixture; 8 | 9 | beforeEach(async () => { 10 | await TestBed.configureTestingModule({ 11 | imports: [DashboardComponent] 12 | }) 13 | .compileComponents(); 14 | 15 | fixture = TestBed.createComponent(DashboardComponent); 16 | component = fixture.componentInstance; 17 | fixture.detectChanges(); 18 | }); 19 | 20 | it('should create', () => { 21 | expect(component).toBeTruthy(); 22 | }); 23 | }); 24 | -------------------------------------------------------------------------------- /src/app/business/dashboard/dashboard.component.ts: -------------------------------------------------------------------------------- 1 | import { Component } from '@angular/core'; 2 | 3 | @Component({ 4 | selector: 'app-dashboard', 5 | standalone: true, 6 | imports: [], 7 | templateUrl: './dashboard.component.html', 8 | styleUrl: './dashboard.component.css' 9 | }) 10 | export default class DashboardComponent { 11 | 12 | } 13 | -------------------------------------------------------------------------------- /src/app/business/profile/profile.component.css: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/neiserdeveloper/ng-menu-dashboard/795ad1ab89dbafd862185974c900b956d9fcaddf/src/app/business/profile/profile.component.css -------------------------------------------------------------------------------- /src/app/business/profile/profile.component.html: -------------------------------------------------------------------------------- 1 |
2 |
3 |
4 | 9 |
10 |
11 |

Today's Money

12 |

$53k

13 |
14 |
15 |

16 | +55% than last week 17 |

18 |
19 |
20 |
21 |
22 | 25 |
26 |
27 |

Today's Users

28 |

2,300

29 |
30 |
31 |

32 | +3% than last month 33 |

34 |
35 |
36 |
37 |
38 | 41 |
42 |
43 |

New Clients

44 |

3,462

45 |
46 |
47 |

48 | -2% than yesterday 49 |

50 |
51 |
52 |
53 |
54 | 57 |
58 |
59 |

Sales

60 |

$103,430

61 |
62 |
63 |

64 | +5% than yesterday 65 |

66 |
67 |
68 |
-------------------------------------------------------------------------------- /src/app/business/profile/profile.component.spec.ts: -------------------------------------------------------------------------------- 1 | import { ComponentFixture, TestBed } from '@angular/core/testing'; 2 | 3 | import { ProfileComponent } from './profile.component'; 4 | 5 | describe('ProfileComponent', () => { 6 | let component: ProfileComponent; 7 | let fixture: ComponentFixture; 8 | 9 | beforeEach(async () => { 10 | await TestBed.configureTestingModule({ 11 | imports: [ProfileComponent] 12 | }) 13 | .compileComponents(); 14 | 15 | fixture = TestBed.createComponent(ProfileComponent); 16 | component = fixture.componentInstance; 17 | fixture.detectChanges(); 18 | }); 19 | 20 | it('should create', () => { 21 | expect(component).toBeTruthy(); 22 | }); 23 | }); 24 | -------------------------------------------------------------------------------- /src/app/business/profile/profile.component.ts: -------------------------------------------------------------------------------- 1 | import { Component } from '@angular/core'; 2 | 3 | @Component({ 4 | selector: 'app-profile', 5 | standalone: true, 6 | imports: [], 7 | templateUrl: './profile.component.html', 8 | styleUrl: './profile.component.css' 9 | }) 10 | export default class ProfileComponent { 11 | 12 | } 13 | -------------------------------------------------------------------------------- /src/app/business/tables/tables.component.css: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/neiserdeveloper/ng-menu-dashboard/795ad1ab89dbafd862185974c900b956d9fcaddf/src/app/business/tables/tables.component.css -------------------------------------------------------------------------------- /src/app/business/tables/tables.component.html: -------------------------------------------------------------------------------- 1 | 2 |
3 |
4 |
5 |
6 |
Projects
7 |

8 | 11 | 30 done this month 12 |

13 |
14 | 21 |
22 |
23 | 24 | 25 | 26 | 29 | 32 | 35 | 36 | 37 | 38 | 39 | 44 | 45 | 48 | 56 | 57 | 58 | 63 | 66 | 74 | 75 | 76 | 81 | 84 | 92 | 93 | 94 | 99 | 102 | 110 | 111 | 112 | 117 | 120 | 128 | 129 | 130 | 131 |
27 |

companies

28 |
30 |

budget

31 |
33 |

completion

34 |
40 |
41 |

Material XD Version

42 |
43 |
46 |

$14,000

47 |
49 |
50 |

60%

51 |
52 |
53 |
54 |
55 |
59 |
60 |

Add Progress Track

61 |
62 |
64 |

$3,000

65 |
67 |
68 |

10%

69 |
70 |
71 |
72 |
73 |
77 |
78 |

Fix Platform Errors

79 |
80 |
82 |

Not set

83 |
85 |
86 |

100%

87 |
88 |
89 |
90 |
91 |
95 |
96 |

Launch our Mobile App

97 |
98 |
100 |

$20,500

101 |
103 |
104 |

100%

105 |
106 |
107 |
108 |
109 |
113 |
114 |

Add the New Pricing Page

115 |
116 |
118 |

$500

119 |
121 |
122 |

25%

123 |
124 |
125 |
126 |
127 |
132 |
133 |
134 |
-------------------------------------------------------------------------------- /src/app/business/tables/tables.component.spec.ts: -------------------------------------------------------------------------------- 1 | import { ComponentFixture, TestBed } from '@angular/core/testing'; 2 | 3 | import { TablesComponent } from './tables.component'; 4 | 5 | describe('TablesComponent', () => { 6 | let component: TablesComponent; 7 | let fixture: ComponentFixture; 8 | 9 | beforeEach(async () => { 10 | await TestBed.configureTestingModule({ 11 | imports: [TablesComponent] 12 | }) 13 | .compileComponents(); 14 | 15 | fixture = TestBed.createComponent(TablesComponent); 16 | component = fixture.componentInstance; 17 | fixture.detectChanges(); 18 | }); 19 | 20 | it('should create', () => { 21 | expect(component).toBeTruthy(); 22 | }); 23 | }); 24 | -------------------------------------------------------------------------------- /src/app/business/tables/tables.component.ts: -------------------------------------------------------------------------------- 1 | import { Component } from '@angular/core'; 2 | 3 | @Component({ 4 | selector: 'app-tables', 5 | standalone: true, 6 | imports: [], 7 | templateUrl: './tables.component.html', 8 | styleUrl: './tables.component.css' 9 | }) 10 | export default class TablesComponent { 11 | 12 | } 13 | -------------------------------------------------------------------------------- /src/app/shared/components/footer/footer.component.css: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/neiserdeveloper/ng-menu-dashboard/795ad1ab89dbafd862185974c900b956d9fcaddf/src/app/shared/components/footer/footer.component.css -------------------------------------------------------------------------------- /src/app/shared/components/footer/footer.component.html: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /src/app/shared/components/footer/footer.component.spec.ts: -------------------------------------------------------------------------------- 1 | import { ComponentFixture, TestBed } from '@angular/core/testing'; 2 | 3 | import { FooterComponent } from './footer.component'; 4 | 5 | describe('FooterComponent', () => { 6 | let component: FooterComponent; 7 | let fixture: ComponentFixture; 8 | 9 | beforeEach(async () => { 10 | await TestBed.configureTestingModule({ 11 | imports: [FooterComponent] 12 | }) 13 | .compileComponents(); 14 | 15 | fixture = TestBed.createComponent(FooterComponent); 16 | component = fixture.componentInstance; 17 | fixture.detectChanges(); 18 | }); 19 | 20 | it('should create', () => { 21 | expect(component).toBeTruthy(); 22 | }); 23 | }); 24 | -------------------------------------------------------------------------------- /src/app/shared/components/footer/footer.component.ts: -------------------------------------------------------------------------------- 1 | import { Component } from '@angular/core'; 2 | 3 | @Component({ 4 | selector: 'app-footer', 5 | standalone: true, 6 | imports: [], 7 | templateUrl: './footer.component.html', 8 | styleUrl: './footer.component.css' 9 | }) 10 | export class FooterComponent { 11 | 12 | } 13 | -------------------------------------------------------------------------------- /src/app/shared/components/header/header.component.css: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/neiserdeveloper/ng-menu-dashboard/795ad1ab89dbafd862185974c900b956d9fcaddf/src/app/shared/components/header/header.component.css -------------------------------------------------------------------------------- /src/app/shared/components/header/header.component.html: -------------------------------------------------------------------------------- 1 |
2 |
3 | 16 |
home
17 |
18 |
19 |
20 |
21 | 22 | 23 |
24 |
25 | 32 | 33 | 37 | 44 | 45 | 52 | 59 |
60 |
-------------------------------------------------------------------------------- /src/app/shared/components/header/header.component.spec.ts: -------------------------------------------------------------------------------- 1 | import { ComponentFixture, TestBed } from '@angular/core/testing'; 2 | 3 | import { HeaderComponent } from './header.component'; 4 | 5 | describe('HeaderComponent', () => { 6 | let component: HeaderComponent; 7 | let fixture: ComponentFixture; 8 | 9 | beforeEach(async () => { 10 | await TestBed.configureTestingModule({ 11 | imports: [HeaderComponent] 12 | }) 13 | .compileComponents(); 14 | 15 | fixture = TestBed.createComponent(HeaderComponent); 16 | component = fixture.componentInstance; 17 | fixture.detectChanges(); 18 | }); 19 | 20 | it('should create', () => { 21 | expect(component).toBeTruthy(); 22 | }); 23 | }); 24 | -------------------------------------------------------------------------------- /src/app/shared/components/header/header.component.ts: -------------------------------------------------------------------------------- 1 | import { Component } from '@angular/core'; 2 | 3 | @Component({ 4 | selector: 'app-header', 5 | standalone: true, 6 | imports: [], 7 | templateUrl: './header.component.html', 8 | styleUrl: './header.component.css' 9 | }) 10 | export class HeaderComponent { 11 | 12 | } 13 | -------------------------------------------------------------------------------- /src/app/shared/components/layout/layout.component.css: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/neiserdeveloper/ng-menu-dashboard/795ad1ab89dbafd862185974c900b956d9fcaddf/src/app/shared/components/layout/layout.component.css -------------------------------------------------------------------------------- /src/app/shared/components/layout/layout.component.html: -------------------------------------------------------------------------------- 1 | 2 |
3 | 4 |
5 | 8 |
9 | 10 |
11 |
12 | 13 |
14 |
15 |
16 | -------------------------------------------------------------------------------- /src/app/shared/components/layout/layout.component.spec.ts: -------------------------------------------------------------------------------- 1 | import { ComponentFixture, TestBed } from '@angular/core/testing'; 2 | 3 | import { LayoutComponent } from './layout.component'; 4 | 5 | describe('LayoutComponent', () => { 6 | let component: LayoutComponent; 7 | let fixture: ComponentFixture; 8 | 9 | beforeEach(async () => { 10 | await TestBed.configureTestingModule({ 11 | imports: [LayoutComponent] 12 | }) 13 | .compileComponents(); 14 | 15 | fixture = TestBed.createComponent(LayoutComponent); 16 | component = fixture.componentInstance; 17 | fixture.detectChanges(); 18 | }); 19 | 20 | it('should create', () => { 21 | expect(component).toBeTruthy(); 22 | }); 23 | }); 24 | -------------------------------------------------------------------------------- /src/app/shared/components/layout/layout.component.ts: -------------------------------------------------------------------------------- 1 | import { Component } from '@angular/core'; 2 | import { HeaderComponent } from '../header/header.component'; 3 | import { SidebarComponent } from '../sidebar/sidebar.component'; 4 | import { FooterComponent } from '../footer/footer.component'; 5 | import { RouterOutlet } from '@angular/router'; 6 | 7 | @Component({ 8 | selector: 'app-layout', 9 | standalone: true, 10 | imports: [HeaderComponent, SidebarComponent, FooterComponent, RouterOutlet], 11 | templateUrl: './layout.component.html', 12 | styleUrl: './layout.component.css' 13 | }) 14 | export default class LayoutComponent { 15 | 16 | } 17 | -------------------------------------------------------------------------------- /src/app/shared/components/sidebar/sidebar.component.css: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/neiserdeveloper/ng-menu-dashboard/795ad1ab89dbafd862185974c900b956d9fcaddf/src/app/shared/components/sidebar/sidebar.component.css -------------------------------------------------------------------------------- /src/app/shared/components/sidebar/sidebar.component.html: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /src/app/shared/components/sidebar/sidebar.component.spec.ts: -------------------------------------------------------------------------------- 1 | import { ComponentFixture, TestBed } from '@angular/core/testing'; 2 | 3 | import { SidebarComponent } from './sidebar.component'; 4 | 5 | describe('SidebarComponent', () => { 6 | let component: SidebarComponent; 7 | let fixture: ComponentFixture; 8 | 9 | beforeEach(async () => { 10 | await TestBed.configureTestingModule({ 11 | imports: [SidebarComponent] 12 | }) 13 | .compileComponents(); 14 | 15 | fixture = TestBed.createComponent(SidebarComponent); 16 | component = fixture.componentInstance; 17 | fixture.detectChanges(); 18 | }); 19 | 20 | it('should create', () => { 21 | expect(component).toBeTruthy(); 22 | }); 23 | }); 24 | -------------------------------------------------------------------------------- /src/app/shared/components/sidebar/sidebar.component.ts: -------------------------------------------------------------------------------- 1 | import { Component } from '@angular/core'; 2 | import { RouterLink, RouterLinkActive } from '@angular/router'; 3 | 4 | @Component({ 5 | selector: 'app-sidebar', 6 | standalone: true, 7 | imports: [RouterLink, RouterLinkActive], 8 | templateUrl: './sidebar.component.html', 9 | styleUrl: './sidebar.component.css' 10 | }) 11 | export class SidebarComponent { 12 | 13 | } 14 | -------------------------------------------------------------------------------- /src/index.html: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | Menu Dashboard 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | -------------------------------------------------------------------------------- /src/main.server.ts: -------------------------------------------------------------------------------- 1 | import { bootstrapApplication } from '@angular/platform-browser'; 2 | import { AppComponent } from './app/app.component'; 3 | import { config } from './app/app.config.server'; 4 | 5 | const bootstrap = () => bootstrapApplication(AppComponent, config); 6 | 7 | export default bootstrap; 8 | -------------------------------------------------------------------------------- /src/main.ts: -------------------------------------------------------------------------------- 1 | import { bootstrapApplication } from '@angular/platform-browser'; 2 | import { appConfig } from './app/app.config'; 3 | import { AppComponent } from './app/app.component'; 4 | 5 | bootstrapApplication(AppComponent, appConfig) 6 | .catch((err) => console.error(err)); 7 | -------------------------------------------------------------------------------- /src/styles.css: -------------------------------------------------------------------------------- 1 | /* You can add global styles to this file, and also import other style files */ 2 | @tailwind base; 3 | @tailwind components; 4 | @tailwind utilities; -------------------------------------------------------------------------------- /tailwind.config.js: -------------------------------------------------------------------------------- 1 | /** @type {import('tailwindcss').Config} */ 2 | module.exports = { 3 | content: [ 4 | "./src/**/*.{html,ts}", 5 | ], 6 | theme: { 7 | extend: {}, 8 | }, 9 | plugins: [], 10 | } 11 | 12 | -------------------------------------------------------------------------------- /tsconfig.app.json: -------------------------------------------------------------------------------- 1 | /* To learn more about this file see: https://angular.io/config/tsconfig. */ 2 | { 3 | "extends": "./tsconfig.json", 4 | "compilerOptions": { 5 | "outDir": "./out-tsc/app", 6 | "types": [ 7 | "node" 8 | ] 9 | }, 10 | "files": [ 11 | "src/main.ts", 12 | "src/main.server.ts", 13 | "server.ts" 14 | ], 15 | "include": [ 16 | "src/**/*.d.ts" 17 | ] 18 | } 19 | -------------------------------------------------------------------------------- /tsconfig.json: -------------------------------------------------------------------------------- 1 | /* To learn more about this file see: https://angular.io/config/tsconfig. */ 2 | { 3 | "compileOnSave": false, 4 | "compilerOptions": { 5 | "outDir": "./dist/out-tsc", 6 | "strict": true, 7 | "noImplicitOverride": true, 8 | "noPropertyAccessFromIndexSignature": true, 9 | "noImplicitReturns": true, 10 | "noFallthroughCasesInSwitch": true, 11 | "skipLibCheck": true, 12 | "esModuleInterop": true, 13 | "sourceMap": true, 14 | "declaration": false, 15 | "experimentalDecorators": true, 16 | "moduleResolution": "bundler", 17 | "importHelpers": true, 18 | "target": "ES2022", 19 | "module": "ES2022", 20 | "useDefineForClassFields": false, 21 | "lib": [ 22 | "ES2022", 23 | "dom" 24 | ] 25 | }, 26 | "angularCompilerOptions": { 27 | "enableI18nLegacyMessageIdFormat": false, 28 | "strictInjectionParameters": true, 29 | "strictInputAccessModifiers": true, 30 | "strictTemplates": true 31 | } 32 | } 33 | -------------------------------------------------------------------------------- /tsconfig.spec.json: -------------------------------------------------------------------------------- 1 | /* To learn more about this file see: https://angular.io/config/tsconfig. */ 2 | { 3 | "extends": "./tsconfig.json", 4 | "compilerOptions": { 5 | "outDir": "./out-tsc/spec", 6 | "types": [ 7 | "jasmine" 8 | ] 9 | }, 10 | "include": [ 11 | "src/**/*.spec.ts", 12 | "src/**/*.d.ts" 13 | ] 14 | } 15 | --------------------------------------------------------------------------------