├── .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 |
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 |
10 |
11 |
Today's Money
12 |
$53k
13 |
14 |
15 |
16 | +55% than last week
17 |
18 |
19 |
20 |
21 |
26 |
27 |
Today's Users
28 |
2,300
29 |
30 |
31 |
32 | +3% than last month
33 |
34 |
35 |
36 |
37 |
42 |
43 |
New Clients
44 |
3,462
45 |
46 |
47 |
48 | -2% than yesterday
49 |
50 |
51 |
52 |
53 |
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 |
95 |
96 |
Today's Users
97 |
2,300
98 |
99 |
100 |
101 | +3% than last month
102 |
103 |
104 |
105 |
106 |
111 |
112 |
New Clients
113 |
3,462
114 |
115 |
116 |
117 | -2% than yesterday
118 |
119 |
120 |
121 |
122 |
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 |
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 |
10 |
11 |
Today's Money
12 |
$53k
13 |
14 |
15 |
16 | +55% than last week
17 |
18 |
19 |
20 |
21 |
26 |
27 |
Today's Users
28 |
2,300
29 |
30 |
31 |
32 | +3% than last month
33 |
34 |
35 |
36 |
37 |
42 |
43 |
New Clients
44 |
3,462
45 |
46 |
47 |
48 | -2% than yesterday
49 |
50 |
51 |
52 |
53 |
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 |
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 |
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 |
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 |
--------------------------------------------------------------------------------