From 699323f2dee231f36ec70ab73c161cf41ae05565 Mon Sep 17 00:00:00 2001
From: Dikshit Moradiya <106728438+ct-dixit@users.noreply.github.com>
Date: Sat, 13 Dec 2025 11:04:26 +0530
Subject: [PATCH] angular 21 dev complete (#36)
---
.gitattributes | 2 -
.github/workflows/prod.yml | 6 +-
README.md | 2 +-
angular.json | 4 +-
package.json | 67 +-
src/app/app.component.html | 2 +-
.../demo/dashboard/dashboard.component.html | 4 +-
.../auth-signin/auth-signin.component.html | 86 +-
.../auth-signin/auth-signin.component.scss | 12 +
.../auth-signin/auth-signin.component.ts | 43 +-
.../auth-signup/auth-signup.component.html | 116 +-
.../auth-signup/auth-signup.component.scss | 12 +
.../auth-signup/auth-signup.component.ts | 45 +-
.../demo/pages/form-element/form-element.html | 68 +-
.../basic-badge/basic-badge.component.html | 16 +-
.../basic-button/basic-button.component.html | 320 +-
.../breadcrumb-paging.component.html | 82 +-
src/app/theme/layout/admin/footer/footer.ts | 1 -
.../admin/nav-bar/nav-bar.component.html | 4 +-
.../nav-bar/nav-left/nav-left.component.html | 10 +-
.../nav-search/nav-search.component.html | 8 +-
.../nav-search/nav-search.component.ts | 50 +-
.../nav-right/nav-right.component.html | 20 +-
.../nav-collapse/nav-collapse.component.html | 39 +-
.../nav-collapse/nav-collapse.component.ts | 12 +-
.../nav-group/nav-group.component.html | 20 +-
.../nav-item/nav-item.component.html | 70 +-
.../nav-item/nav-item.component.ts | 7 +-
.../nav-logo/nav-logo.component.html | 4 +-
.../layout/admin/navigation/navigation.ts | 3 +-
.../breadcrumbs/breadcrumbs.component.html | 2 +-
.../components/card/card.component.html | 8 +-
src/assets/icon/icofont/css/icofont.scss | 2 +-
src/index.html | 6 +-
src/main.ts | 2 +
src/polyfills.ts | 53 -
tsconfig.app.json | 6 +-
tsconfig.json | 2 +-
tsconfig.spec.json | 2 +-
yarn.lock | 5409 +++++++++--------
40 files changed, 3584 insertions(+), 3043 deletions(-)
delete mode 100644 .gitattributes
delete mode 100644 src/polyfills.ts
diff --git a/.gitattributes b/.gitattributes
deleted file mode 100644
index dfe07704..00000000
--- a/.gitattributes
+++ /dev/null
@@ -1,2 +0,0 @@
-# Auto detect text files and perform LF normalization
-* text=auto
diff --git a/.github/workflows/prod.yml b/.github/workflows/prod.yml
index 1188af83..4e3325d8 100644
--- a/.github/workflows/prod.yml
+++ b/.github/workflows/prod.yml
@@ -22,14 +22,14 @@ jobs:
- name: π Get latest code
uses: actions/checkout@v4
- - name: Install Node.js 22
+ - name: Install Node.js 24
uses: actions/setup-node@v4
with:
- node-version: '22'
+ node-version: '24'
- name: π¨ Build Project
run: |
- yarn
+ yarn install
yarn build-prod
- name: π Deploy to Server
diff --git a/README.md b/README.md
index 3f08adec..ce02058e 100644
--- a/README.md
+++ b/README.md
@@ -97,7 +97,7 @@ Datta Able is offers everything you need to create dashboards. We have included
## Technology Stack
- Bootstrap 5
-- Angular 18
+- Angular 21
- Typescript
## Other Technologies
diff --git a/angular.json b/angular.json
index 41108c48..12d33a3c 100644
--- a/angular.json
+++ b/angular.json
@@ -21,7 +21,9 @@
"outputPath": "dist",
"index": "src/index.html",
"main": "src/main.ts",
- "polyfills": "src/polyfills.ts",
+ "polyfills": [
+ "@angular/localize/init"
+ ],
"tsConfig": "tsconfig.app.json",
"inlineStyleLanguage": "scss",
"assets": ["src/favicon.ico", "src/assets", "src/fake-data"],
diff --git a/package.json b/package.json
index 2ff25592..67c3860f 100644
--- a/package.json
+++ b/package.json
@@ -1,7 +1,8 @@
{
"name": "datta-able-free-angular-admin-template",
- "version": "6.2.0",
+ "version": "6.3.0",
"author": "CodedThemes",
+ "private": false,
"scripts": {
"ng": "ng",
"start": "ng serve",
@@ -13,45 +14,43 @@
"lint:fix": "ng lint --fix",
"prettier": "prettier --write ./src"
},
- "private": false,
"dependencies": {
- "@angular/animations": "20.0.5",
- "@angular/cdk": "20.0.4",
- "@angular/common": "20.0.5",
- "@angular/compiler": "20.0.5",
- "@angular/core": "20.0.5",
- "@angular/forms": "20.0.5",
- "@angular/localize": "20.0.5",
- "@angular/platform-browser": "20.0.5",
- "@angular/platform-browser-dynamic": "20.0.5",
- "@angular/router": "20.0.5",
- "@ng-bootstrap/ng-bootstrap": "19.0.0",
+ "@angular/animations": "21.0.5",
+ "@angular/cdk": "21.0.3",
+ "@angular/common": "21.0.5",
+ "@angular/compiler": "21.0.5",
+ "@angular/core": "21.0.5",
+ "@angular/forms": "21.0.5",
+ "@angular/localize": "21.0.5",
+ "@angular/platform-browser": "21.0.5",
+ "@angular/platform-browser-dynamic": "21.0.5",
+ "@angular/router": "21.0.5",
+ "@ng-bootstrap/ng-bootstrap": "20.0.0",
"@popperjs/core": "2.11.8",
- "apexcharts": "4.7.0",
- "bootstrap": "5.3.7",
- "ng-apexcharts": "1.16.0",
+ "apexcharts": "5.3.6",
+ "bootstrap": "5.3.8",
+ "ng-apexcharts": "2.0.4",
"ngx-scrollbar": "18.0.0",
"rxjs": "~7.8.2",
"screenfull": "6.0.2",
- "tslib": "2.8.1",
- "zone.js": "~0.15.1"
+ "tslib": "2.8.1"
},
"devDependencies": {
- "@angular-devkit/build-angular": "20.0.4",
- "@angular-eslint/builder": "20.1.1",
- "@angular-eslint/eslint-plugin": "20.1.1",
- "@angular-eslint/eslint-plugin-template": "20.1.1",
- "@angular-eslint/schematics": "20.1.1",
- "@angular-eslint/template-parser": "20.1.1",
- "@angular/cli": "20.0.4",
- "@angular/compiler-cli": "20.0.5",
- "@eslint/eslintrc": "3.3.1",
- "@eslint/js": "9.29.0",
- "@types/node": "24.0.4",
- "@typescript-eslint/eslint-plugin": "8.35.0",
- "@typescript-eslint/parser": "8.35.0",
- "eslint": "9.29.0",
- "prettier": "3.6.1",
- "typescript": "5.8.3"
+ "@angular-devkit/build-angular": "21.0.3",
+ "@angular-eslint/builder": "21.1.0",
+ "@angular-eslint/eslint-plugin": "21.1.0",
+ "@angular-eslint/eslint-plugin-template": "21.1.0",
+ "@angular-eslint/schematics": "21.1.0",
+ "@angular-eslint/template-parser": "21.1.0",
+ "@angular/cli": "21.0.3",
+ "@angular/compiler-cli": "21.0.5",
+ "@eslint/eslintrc": "3.3.3",
+ "@eslint/js": "9.39.1",
+ "@types/node": "25.0.1",
+ "@typescript-eslint/eslint-plugin": "8.49.0",
+ "@typescript-eslint/parser": "8.49.0",
+ "eslint": "9.39.1",
+ "prettier": "3.7.4",
+ "typescript": "5.9.3"
}
}
diff --git a/src/app/app.component.html b/src/app/app.component.html
index a84ca09b..93ded4b2 100644
--- a/src/app/app.component.html
+++ b/src/app/app.component.html
@@ -1 +1 @@
-
- Forgot password? - Reset -
++ Forgot password? + Reset +
+Donβt have an account? Sign up diff --git a/src/app/demo/pages/authentication/auth-signin/auth-signin.component.scss b/src/app/demo/pages/authentication/auth-signin/auth-signin.component.scss index e69de29b..e396528b 100644 --- a/src/app/demo/pages/authentication/auth-signin/auth-signin.component.scss +++ b/src/app/demo/pages/authentication/auth-signin/auth-signin.component.scss @@ -0,0 +1,12 @@ +#togglePassword { + cursor: pointer; + position: absolute; + right: 15px; + top: 50%; + transform: translateY(-50%); + + ::ng-deep.datta-rtl & { + right: auto; + left: 15px; + } +} diff --git a/src/app/demo/pages/authentication/auth-signin/auth-signin.component.ts b/src/app/demo/pages/authentication/auth-signin/auth-signin.component.ts index 5c6d0197..657fa3e7 100644 --- a/src/app/demo/pages/authentication/auth-signin/auth-signin.component.ts +++ b/src/app/demo/pages/authentication/auth-signin/auth-signin.component.ts @@ -1,10 +1,47 @@ -import { Component } from '@angular/core'; +// angular import +import { ChangeDetectorRef, Component, inject, signal } from '@angular/core'; +import { CommonModule } from '@angular/common'; import { RouterModule } from '@angular/router'; +import { email, Field, form, minLength, required } from '@angular/forms/signals'; + +// project import +import { SharedModule } from 'src/app/theme/shared/shared.module'; @Component({ selector: 'app-auth-signin', - imports: [RouterModule], + imports: [CommonModule, RouterModule, SharedModule, Field], templateUrl: './auth-signin.component.html', styleUrls: ['./auth-signin.component.scss'] }) -export class AuthSigninComponent {} +export class AuthSigninComponent { + private cd = inject(ChangeDetectorRef); + + submitted = signal(false); + error = signal(''); + showPassword = signal(false); + + loginModal = signal<{ email: string; password: string }>({ + email: '', + password: '' + }); + + loginForm = form(this.loginModal, (schemaPath) => { + required(schemaPath.email, { message: 'Email is required' }); + email(schemaPath.email, { message: 'Enter a valid email address' }); + required(schemaPath.password, { message: 'Password is required' }); + minLength(schemaPath.password, 8, { message: 'Password must be at least 8 characters' }); + }); + + onSubmit(event: Event) { + this.submitted.set(true); + this.error.set(''); + event.preventDefault(); + const credentials = this.loginModal(); + console.log('login user logged in with:', credentials); + this.cd.detectChanges(); + } + + togglePasswordVisibility() { + this.showPassword.set(!this.showPassword()); + } +} diff --git a/src/app/demo/pages/authentication/auth-signup/auth-signup.component.html b/src/app/demo/pages/authentication/auth-signup/auth-signup.component.html index 28e2b1c9..1dddeb61 100644 --- a/src/app/demo/pages/authentication/auth-signup/auth-signup.component.html +++ b/src/app/demo/pages/authentication/auth-signup/auth-signup.component.html @@ -8,36 +8,96 @@
Already have an account? Log in diff --git a/src/app/demo/pages/authentication/auth-signup/auth-signup.component.scss b/src/app/demo/pages/authentication/auth-signup/auth-signup.component.scss index e69de29b..e396528b 100644 --- a/src/app/demo/pages/authentication/auth-signup/auth-signup.component.scss +++ b/src/app/demo/pages/authentication/auth-signup/auth-signup.component.scss @@ -0,0 +1,12 @@ +#togglePassword { + cursor: pointer; + position: absolute; + right: 15px; + top: 50%; + transform: translateY(-50%); + + ::ng-deep.datta-rtl & { + right: auto; + left: 15px; + } +} diff --git a/src/app/demo/pages/authentication/auth-signup/auth-signup.component.ts b/src/app/demo/pages/authentication/auth-signup/auth-signup.component.ts index e4c68321..d24b4cab 100644 --- a/src/app/demo/pages/authentication/auth-signup/auth-signup.component.ts +++ b/src/app/demo/pages/authentication/auth-signup/auth-signup.component.ts @@ -1,10 +1,49 @@ -import { Component } from '@angular/core'; +// angular import +import { ChangeDetectorRef, Component, inject, signal } from '@angular/core'; +import { CommonModule } from '@angular/common'; import { RouterModule } from '@angular/router'; +import { email, Field, form, minLength, required } from '@angular/forms/signals'; + +// project import +import { SharedModule } from 'src/app/theme/shared/shared.module'; @Component({ selector: 'app-auth-signup', - imports: [RouterModule], + imports: [CommonModule, RouterModule, SharedModule, Field], templateUrl: './auth-signup.component.html', styleUrls: ['./auth-signup.component.scss'] }) -export class AuthSignupComponent {} +export class AuthSignupComponent { + private cd = inject(ChangeDetectorRef); + + submitted = signal(false); + error = signal(''); + showPassword = signal(false); + + registerModel = signal<{ email: string; password: string; username: string }>({ + email: '', + password: '', + username: '' + }); + + registerForm = form(this.registerModel, (schemaPath) => { + required(schemaPath.email, { message: 'Email is required' }); + email(schemaPath.email, { message: 'Enter a valid email address' }); + required(schemaPath.password, { message: 'Password is required' }); + minLength(schemaPath.password, 8, { message: 'Password must be at least 8 characters' }); + required(schemaPath.username, { message: 'Username is required' }); + }); + + onSubmit(event: Event) { + this.submitted.set(true); + this.error.set(''); + event.preventDefault(); + const credentials = this.registerModel(); + console.log('register user logged in with:', credentials); + this.cd.detectChanges(); + } + + togglePasswordVisibility() { + this.showPassword.set(!this.showPassword()); + } +} diff --git a/src/app/demo/pages/form-element/form-element.html b/src/app/demo/pages/form-element/form-element.html index 19aa5750..ba0ab889 100644 --- a/src/app/demo/pages/form-element/form-element.html +++ b/src/app/demo/pages/form-element/form-element.html @@ -5,7 +5,7 @@