Commit 99f2f465 authored by hasan khaddour's avatar hasan khaddour

fix s.

parent a576f082
...@@ -5,10 +5,16 @@ ...@@ -5,10 +5,16 @@
"projects": { "projects": {
"PSManagementUI": { "PSManagementUI": {
"projectType": "application", "projectType": "application",
"schematics": {}, "schematics": {
"@schematics/angular:component": {
"style": "css",
"standalone": false,
"skipTests": true
}
},
"root": "", "root": "",
"sourceRoot": "src", "sourceRoot": "src",
"prefix": "app", "prefix": "",
"architect": { "architect": {
"build": { "build": {
"builder": "@angular-devkit/build-angular:application", "builder": "@angular-devkit/build-angular:application",
...@@ -21,17 +27,26 @@ ...@@ -21,17 +27,26 @@
], ],
"tsConfig": "tsconfig.app.json", "tsConfig": "tsconfig.app.json",
"assets": [ "assets": [
{
"src/assets",
"src/favicon.ico"
, {
"glob": "**/*", "glob": "**/*",
"input": "public" "input": "public"
} }
], ],
"styles": [ "styles": [
"src/styles.css", "@angular/material/prebuilt-themes/azure-blue.css",
"./node_modules/bootstrap/dist/css/bootstrap.min.css" "src/styles.css",
"src/assets/css/app-light.css",
"./node_modules/@fortawesome/fontawesome-free/css/all.min.css",
"./node_modules/bootstrap/dist/css/bootstrap.min.css"
], ],
"scripts": [ "scripts": [
"./node_modules/bootstrap/dist/js/bootstrap.min.js" "./node_modules/@popperjs/core/dist/umd/popper.min.js",
"node_modules/feather-icons/dist/feather.min.js",
"./node_modules/bootstrap/dist/js/bootstrap.min.js",
"./node_modules/jquery/dist/jquery.min.js"
] ]
}, },
"configurations": { "configurations": {
...@@ -88,6 +103,7 @@ ...@@ -88,6 +103,7 @@
} }
], ],
"styles": [ "styles": [
"@angular/material/prebuilt-themes/azure-blue.css",
"src/styles.css" "src/styles.css"
], ],
"scripts": [] "scripts": []
......
...@@ -9,14 +9,21 @@ ...@@ -9,14 +9,21 @@
"version": "0.0.0", "version": "0.0.0",
"dependencies": { "dependencies": {
"@angular/animations": "^18.0.0", "@angular/animations": "^18.0.0",
"@angular/cdk": "^18.1.3",
"@angular/common": "^18.0.0", "@angular/common": "^18.0.0",
"@angular/compiler": "^18.0.0", "@angular/compiler": "^18.0.0",
"@angular/core": "^18.0.0", "@angular/core": "^18.0.0",
"@angular/forms": "^18.0.0", "@angular/forms": "^18.0.0",
"@angular/material": "^18.1.3",
"@angular/platform-browser": "^18.0.0", "@angular/platform-browser": "^18.0.0",
"@angular/platform-browser-dynamic": "^18.0.0", "@angular/platform-browser-dynamic": "^18.0.0",
"@angular/router": "^18.0.0", "@angular/router": "^18.0.0",
"bootstrap": "^5.2.3", "@fortawesome/fontawesome-free": "^6.6.0",
"@popperjs/core": "^2.11.8",
"bootstrap": "^5.3.3",
"feather-icons": "^4.29.2",
"jquery": "^3.7.1",
"material": "^0.9.15",
"rxjs": "~7.8.0", "rxjs": "~7.8.0",
"tslib": "^2.3.0", "tslib": "^2.3.0",
"zone.js": "~0.14.3" "zone.js": "~0.14.3"
...@@ -25,7 +32,9 @@ ...@@ -25,7 +32,9 @@
"@angular-devkit/build-angular": "^18.0.6", "@angular-devkit/build-angular": "^18.0.6",
"@angular/cli": "^18.0.6", "@angular/cli": "^18.0.6",
"@angular/compiler-cli": "^18.0.0", "@angular/compiler-cli": "^18.0.0",
"@types/feather-icons": "^4.29.4",
"@types/jasmine": "~5.1.0", "@types/jasmine": "~5.1.0",
"@types/jquery": "^3.5.30",
"jasmine-core": "~5.1.0", "jasmine-core": "~5.1.0",
"karma": "~6.4.0", "karma": "~6.4.0",
"karma-chrome-launcher": "~3.2.0", "karma-chrome-launcher": "~3.2.0",
...@@ -340,6 +349,22 @@ ...@@ -340,6 +349,22 @@
} }
} }
}, },
"node_modules/@angular/cdk": {
"version": "18.1.3",
"resolved": "https://registry.npmjs.org/@angular/cdk/-/cdk-18.1.3.tgz",
"integrity": "sha512-u14xbuXQz+36nBeHSwRcwRoS64WNhOdK97H47nI1WaIZZaGGvKHR1Wwk2XletDRtIHv2622sJm8h+dbaBNeTGQ==",
"dependencies": {
"tslib": "^2.3.0"
},
"optionalDependencies": {
"parse5": "^7.1.2"
},
"peerDependencies": {
"@angular/common": "^18.0.0 || ^19.0.0",
"@angular/core": "^18.0.0 || ^19.0.0",
"rxjs": "^6.5.3 || ^7.4.0"
}
},
"node_modules/@angular/cli": { "node_modules/@angular/cli": {
"version": "18.1.0", "version": "18.1.0",
"resolved": "https://registry.npmjs.org/@angular/cli/-/cli-18.1.0.tgz", "resolved": "https://registry.npmjs.org/@angular/cli/-/cli-18.1.0.tgz",
...@@ -467,6 +492,23 @@ ...@@ -467,6 +492,23 @@
"rxjs": "^6.5.3 || ^7.4.0" "rxjs": "^6.5.3 || ^7.4.0"
} }
}, },
"node_modules/@angular/material": {
"version": "18.1.3",
"resolved": "https://registry.npmjs.org/@angular/material/-/material-18.1.3.tgz",
"integrity": "sha512-4xsn84orqtJwE9c2kgHeMxP/rOEvs8XrUOcyA89WE025uDXk69lAsm7XsCpwOL9iDjTBFPTOXFIbR+s9jvU39w==",
"dependencies": {
"tslib": "^2.3.0"
},
"peerDependencies": {
"@angular/animations": "^18.0.0 || ^19.0.0",
"@angular/cdk": "18.1.3",
"@angular/common": "^18.0.0 || ^19.0.0",
"@angular/core": "^18.0.0 || ^19.0.0",
"@angular/forms": "^18.0.0 || ^19.0.0",
"@angular/platform-browser": "^18.0.0 || ^19.0.0",
"rxjs": "^6.5.3 || ^7.4.0"
}
},
"node_modules/@angular/platform-browser": { "node_modules/@angular/platform-browser": {
"version": "18.1.0", "version": "18.1.0",
"resolved": "https://registry.npmjs.org/@angular/platform-browser/-/platform-browser-18.1.0.tgz", "resolved": "https://registry.npmjs.org/@angular/platform-browser/-/platform-browser-18.1.0.tgz",
...@@ -2682,6 +2724,14 @@ ...@@ -2682,6 +2724,14 @@
"node": ">=12" "node": ">=12"
} }
}, },
"node_modules/@fortawesome/fontawesome-free": {
"version": "6.6.0",
"resolved": "https://registry.npmjs.org/@fortawesome/fontawesome-free/-/fontawesome-free-6.6.0.tgz",
"integrity": "sha512-60G28ke/sXdtS9KZCpZSHHkCbdsOGEhIUGlwq6yhY74UpTiToIh8np7A8yphhM4BWsvNFtIvLpi4co+h9Mr9Ow==",
"engines": {
"node": ">=6"
}
},
"node_modules/@inquirer/checkbox": { "node_modules/@inquirer/checkbox": {
"version": "2.3.10", "version": "2.3.10",
"resolved": "https://registry.npmjs.org/@inquirer/checkbox/-/checkbox-2.3.10.tgz", "resolved": "https://registry.npmjs.org/@inquirer/checkbox/-/checkbox-2.3.10.tgz",
...@@ -3744,7 +3794,6 @@ ...@@ -3744,7 +3794,6 @@
"version": "2.11.8", "version": "2.11.8",
"resolved": "https://registry.npmjs.org/@popperjs/core/-/core-2.11.8.tgz", "resolved": "https://registry.npmjs.org/@popperjs/core/-/core-2.11.8.tgz",
"integrity": "sha512-P1st0aksCrn9sGZhp8GMYwBnQsbvAWsZAX44oXNNvLHGqAOcoVxmjZiohstwQ7SqKnbR47akdNi+uleWD8+g6A==", "integrity": "sha512-P1st0aksCrn9sGZhp8GMYwBnQsbvAWsZAX44oXNNvLHGqAOcoVxmjZiohstwQ7SqKnbR47akdNi+uleWD8+g6A==",
"peer": true,
"funding": { "funding": {
"type": "opencollective", "type": "opencollective",
"url": "https://opencollective.com/popperjs" "url": "https://opencollective.com/popperjs"
...@@ -4215,6 +4264,12 @@ ...@@ -4215,6 +4264,12 @@
"@types/send": "*" "@types/send": "*"
} }
}, },
"node_modules/@types/feather-icons": {
"version": "4.29.4",
"resolved": "https://registry.npmjs.org/@types/feather-icons/-/feather-icons-4.29.4.tgz",
"integrity": "sha512-cvwI455PWx/gJ33XDTIZOdauRy+XCxZggkOT/tAQYZLdySPFATD4RnDC9mxOnCIEaK9kwPm3zZigkAsMkhXb5w==",
"dev": true
},
"node_modules/@types/http-errors": { "node_modules/@types/http-errors": {
"version": "2.0.4", "version": "2.0.4",
"resolved": "https://registry.npmjs.org/@types/http-errors/-/http-errors-2.0.4.tgz", "resolved": "https://registry.npmjs.org/@types/http-errors/-/http-errors-2.0.4.tgz",
...@@ -4236,6 +4291,15 @@ ...@@ -4236,6 +4291,15 @@
"integrity": "sha512-px7OMFO/ncXxixDe1zR13V1iycqWae0MxTaw62RpFlksUi5QuNWgQJFkTQjIOvrmutJbI7Fp2Y2N1F6D2R4G6w==", "integrity": "sha512-px7OMFO/ncXxixDe1zR13V1iycqWae0MxTaw62RpFlksUi5QuNWgQJFkTQjIOvrmutJbI7Fp2Y2N1F6D2R4G6w==",
"dev": true "dev": true
}, },
"node_modules/@types/jquery": {
"version": "3.5.30",
"resolved": "https://registry.npmjs.org/@types/jquery/-/jquery-3.5.30.tgz",
"integrity": "sha512-nbWKkkyb919DOUxjmRVk8vwtDb0/k8FKncmUKFi+NY+QXqWltooxTrswvz4LspQwxvLdvzBN1TImr6cw3aQx2A==",
"dev": true,
"dependencies": {
"@types/sizzle": "*"
}
},
"node_modules/@types/json-schema": { "node_modules/@types/json-schema": {
"version": "7.0.15", "version": "7.0.15",
"resolved": "https://registry.npmjs.org/@types/json-schema/-/json-schema-7.0.15.tgz", "resolved": "https://registry.npmjs.org/@types/json-schema/-/json-schema-7.0.15.tgz",
...@@ -4323,6 +4387,12 @@ ...@@ -4323,6 +4387,12 @@
"@types/send": "*" "@types/send": "*"
} }
}, },
"node_modules/@types/sizzle": {
"version": "2.3.8",
"resolved": "https://registry.npmjs.org/@types/sizzle/-/sizzle-2.3.8.tgz",
"integrity": "sha512-0vWLNK2D5MT9dg0iOo8GlKguPAU02QjmZitPEsXRuJXU/OGIOt9vT9Fc26wtYuavLxtO45v9PGleoL9Z0k1LHg==",
"dev": true
},
"node_modules/@types/sockjs": { "node_modules/@types/sockjs": {
"version": "0.3.36", "version": "0.3.36",
"resolved": "https://registry.npmjs.org/@types/sockjs/-/sockjs-0.3.36.tgz", "resolved": "https://registry.npmjs.org/@types/sockjs/-/sockjs-0.3.36.tgz",
...@@ -5296,6 +5366,11 @@ ...@@ -5296,6 +5366,11 @@
"node": ">=6.0" "node": ">=6.0"
} }
}, },
"node_modules/classnames": {
"version": "2.5.1",
"resolved": "https://registry.npmjs.org/classnames/-/classnames-2.5.1.tgz",
"integrity": "sha512-saHYOzhIQs6wy2sVxTM6bUDsQO4F50V9RQ22qBpEdCW+I+/Wmke2HOl6lS6dTpdxVhb88/I6+Hs+438c3lfUow=="
},
"node_modules/clean-stack": { "node_modules/clean-stack": {
"version": "2.2.0", "version": "2.2.0",
"resolved": "https://registry.npmjs.org/clean-stack/-/clean-stack-2.2.0.tgz", "resolved": "https://registry.npmjs.org/clean-stack/-/clean-stack-2.2.0.tgz",
...@@ -5701,6 +5776,16 @@ ...@@ -5701,6 +5776,16 @@
"node": ">=10.13.0" "node": ">=10.13.0"
} }
}, },
"node_modules/core-js": {
"version": "3.38.0",
"resolved": "https://registry.npmjs.org/core-js/-/core-js-3.38.0.tgz",
"integrity": "sha512-XPpwqEodRljce9KswjZShh95qJ1URisBeKCjUdq27YdenkslVe7OO0ZJhlYXAChW7OhXaRLl8AAba7IBfoIHug==",
"hasInstallScript": true,
"funding": {
"type": "opencollective",
"url": "https://opencollective.com/core-js"
}
},
"node_modules/core-js-compat": { "node_modules/core-js-compat": {
"version": "3.37.1", "version": "3.37.1",
"resolved": "https://registry.npmjs.org/core-js-compat/-/core-js-compat-3.37.1.tgz", "resolved": "https://registry.npmjs.org/core-js-compat/-/core-js-compat-3.37.1.tgz",
...@@ -6304,7 +6389,7 @@ ...@@ -6304,7 +6389,7 @@
"version": "4.5.0", "version": "4.5.0",
"resolved": "https://registry.npmjs.org/entities/-/entities-4.5.0.tgz", "resolved": "https://registry.npmjs.org/entities/-/entities-4.5.0.tgz",
"integrity": "sha512-V0hjH4dGPh9Ao5p0MoRY6BVqtwCjhz6vI5LT8AJ55H+4g9/4vbHx1I54fS0XuclLhDHArPQCiMjDxjaL8fPxhw==", "integrity": "sha512-V0hjH4dGPh9Ao5p0MoRY6BVqtwCjhz6vI5LT8AJ55H+4g9/4vbHx1I54fS0XuclLhDHArPQCiMjDxjaL8fPxhw==",
"dev": true, "devOptional": true,
"engines": { "engines": {
"node": ">=0.12" "node": ">=0.12"
}, },
...@@ -6723,6 +6808,15 @@ ...@@ -6723,6 +6808,15 @@
"node": ">=0.8.0" "node": ">=0.8.0"
} }
}, },
"node_modules/feather-icons": {
"version": "4.29.2",
"resolved": "https://registry.npmjs.org/feather-icons/-/feather-icons-4.29.2.tgz",
"integrity": "sha512-0TaCFTnBTVCz6U+baY2UJNKne5ifGh7sMG4ZC2LoBWCZdIyPa+y6UiR4lEYGws1JOFWdee8KAsAIvu0VcXqiqA==",
"dependencies": {
"classnames": "^2.2.5",
"core-js": "^3.1.3"
}
},
"node_modules/fill-range": { "node_modules/fill-range": {
"version": "7.1.1", "version": "7.1.1",
"resolved": "https://registry.npmjs.org/fill-range/-/fill-range-7.1.1.tgz", "resolved": "https://registry.npmjs.org/fill-range/-/fill-range-7.1.1.tgz",
...@@ -7969,6 +8063,11 @@ ...@@ -7969,6 +8063,11 @@
"jiti": "bin/jiti.js" "jiti": "bin/jiti.js"
} }
}, },
"node_modules/jquery": {
"version": "3.7.1",
"resolved": "https://registry.npmjs.org/jquery/-/jquery-3.7.1.tgz",
"integrity": "sha512-m4avr8yL8kmFN8psrbFFFmB/If14iN5o9nw/NgnnM+kybDJpRsAynV2BsfpTYrTRysYUdADVD7CkUUizgkpLfg=="
},
"node_modules/js-tokens": { "node_modules/js-tokens": {
"version": "4.0.0", "version": "4.0.0",
"resolved": "https://registry.npmjs.org/js-tokens/-/js-tokens-4.0.0.tgz", "resolved": "https://registry.npmjs.org/js-tokens/-/js-tokens-4.0.0.tgz",
...@@ -8887,6 +8986,11 @@ ...@@ -8887,6 +8986,11 @@
"node": "^16.14.0 || >=18.0.0" "node": "^16.14.0 || >=18.0.0"
} }
}, },
"node_modules/material": {
"version": "0.9.15",
"resolved": "https://registry.npmjs.org/material/-/material-0.9.15.tgz",
"integrity": "sha512-273WRxLD0Igm52xHk15Tjl3/74Ck46+Ma4hJ0yJkHsEw/OrvYU+k+L/q9lyeEQWWlaD/bp34IppVBE6iJNudDg=="
},
"node_modules/media-typer": { "node_modules/media-typer": {
"version": "0.3.0", "version": "0.3.0",
"resolved": "https://registry.npmjs.org/media-typer/-/media-typer-0.3.0.tgz", "resolved": "https://registry.npmjs.org/media-typer/-/media-typer-0.3.0.tgz",
...@@ -10073,7 +10177,7 @@ ...@@ -10073,7 +10177,7 @@
"version": "7.1.2", "version": "7.1.2",
"resolved": "https://registry.npmjs.org/parse5/-/parse5-7.1.2.tgz", "resolved": "https://registry.npmjs.org/parse5/-/parse5-7.1.2.tgz",
"integrity": "sha512-Czj1WaSVpaoj0wbhMzLmWD69anp2WH7FXMB9n1Sy8/ZFF9jolSQVMu1Ij5WIyGmcBmhk7EOndpO4mIpihVqAXw==", "integrity": "sha512-Czj1WaSVpaoj0wbhMzLmWD69anp2WH7FXMB9n1Sy8/ZFF9jolSQVMu1Ij5WIyGmcBmhk7EOndpO4mIpihVqAXw==",
"dev": true, "devOptional": true,
"dependencies": { "dependencies": {
"entities": "^4.4.0" "entities": "^4.4.0"
}, },
......
...@@ -11,14 +11,21 @@ ...@@ -11,14 +11,21 @@
"private": true, "private": true,
"dependencies": { "dependencies": {
"@angular/animations": "^18.0.0", "@angular/animations": "^18.0.0",
"@angular/cdk": "^18.1.3",
"@angular/common": "^18.0.0", "@angular/common": "^18.0.0",
"@angular/compiler": "^18.0.0", "@angular/compiler": "^18.0.0",
"@angular/core": "^18.0.0", "@angular/core": "^18.0.0",
"@angular/forms": "^18.0.0", "@angular/forms": "^18.0.0",
"@angular/material": "^18.1.3",
"@angular/platform-browser": "^18.0.0", "@angular/platform-browser": "^18.0.0",
"@angular/platform-browser-dynamic": "^18.0.0", "@angular/platform-browser-dynamic": "^18.0.0",
"@angular/router": "^18.0.0", "@angular/router": "^18.0.0",
"bootstrap": "^5.2.3", "@fortawesome/fontawesome-free": "^6.6.0",
"@popperjs/core": "^2.11.8",
"bootstrap": "^5.3.3",
"feather-icons": "^4.29.2",
"jquery": "^3.7.1",
"material": "^0.9.15",
"rxjs": "~7.8.0", "rxjs": "~7.8.0",
"tslib": "^2.3.0", "tslib": "^2.3.0",
"zone.js": "~0.14.3" "zone.js": "~0.14.3"
...@@ -27,7 +34,9 @@ ...@@ -27,7 +34,9 @@
"@angular-devkit/build-angular": "^18.0.6", "@angular-devkit/build-angular": "^18.0.6",
"@angular/cli": "^18.0.6", "@angular/cli": "^18.0.6",
"@angular/compiler-cli": "^18.0.0", "@angular/compiler-cli": "^18.0.0",
"@types/feather-icons": "^4.29.4",
"@types/jasmine": "~5.1.0", "@types/jasmine": "~5.1.0",
"@types/jquery": "^3.5.30",
"jasmine-core": "~5.1.0", "jasmine-core": "~5.1.0",
"karma": "~6.4.0", "karma": "~6.4.0",
"karma-chrome-launcher": "~3.2.0", "karma-chrome-launcher": "~3.2.0",
......
import { NgModule } from '@angular/core'; import { NgModule } from '@angular/core';
import { RouterModule, Routes } from '@angular/router'; import { RouterModule, Routes } from '@angular/router';
import { LoginComponent } from './pages/login/login.component'; import { LoginComponent } from './pages/login/login.component';
import { LayoutComponent } from './pages/layout/layout.component'; import { HomeComponent } from './pages/home/home.component';
import { ProjectsComponent } from './pages/projects/projects.component'; import { LayoutComponent } from './shared/sharedLayout/layout/layout.component';
import { BoardComponent } from './pages/board/board.component'; import { AuthGuard } from './core/guards/auth.guard';
import { UsersComponent } from './pages/users/users.component'; import { CustomerListComponent } from './customers/customer-list/customer-list.component';
const routes: Routes = [ export const routes: Routes = [
{ {
path: '', path: '',
redirectTo: 'login', redirectTo: 'login',
...@@ -19,20 +19,18 @@ const routes: Routes = [ ...@@ -19,20 +19,18 @@ const routes: Routes = [
{ {
path: '', path: '',
component: LayoutComponent, component: LayoutComponent,
canActivate:[AuthGuard],
children: [ children: [
{ {
path: 'projects', path: 'home',
component: ProjectsComponent component: HomeComponent
}, }
{ ,
path: 'users',
component: UsersComponent
},
{ {
path: 'board', path: 'customers',
component: BoardComponent component: CustomerListComponent
} }
] ]
} }
......
<style>
:host {
--bright-blue: oklch(51.01% 0.274 263.83);
--electric-violet: oklch(53.18% 0.28 296.97);
--french-violet: oklch(47.66% 0.246 305.88);
--vivid-pink: oklch(69.02% 0.277 332.77);
--hot-red: oklch(61.42% 0.238 15.34);
--orange-red: oklch(63.32% 0.24 31.68);
--gray-900: oklch(19.37% 0.006 300.98);
--gray-700: oklch(36.98% 0.014 302.71);
--gray-400: oklch(70.9% 0.015 304.04);
--red-to-pink-to-purple-vertical-gradient: linear-gradient(
180deg,
var(--orange-red) 0%,
var(--vivid-pink) 50%,
var(--electric-violet) 100%
);
--red-to-pink-to-purple-horizontal-gradient: linear-gradient(
90deg,
var(--orange-red) 0%,
var(--vivid-pink) 50%,
var(--electric-violet) 100%
);
--pill-accent: var(--bright-blue);
font-family: "Inter", -apple-system, BlinkMacSystemFont, "Segoe UI", Roboto,
Helvetica, Arial, sans-serif, "Apple Color Emoji", "Segoe UI Emoji",
"Segoe UI Symbol";
box-sizing: border-box;
-webkit-font-smoothing: antialiased;
-moz-osx-font-smoothing: grayscale;
}
h1 {
font-size: 3.125rem;
color: var(--gray-900);
font-weight: 500;
line-height: 100%;
letter-spacing: -0.125rem;
margin: 0;
font-family: "Inter Tight", -apple-system, BlinkMacSystemFont, "Segoe UI", Roboto,
Helvetica, Arial, sans-serif, "Apple Color Emoji", "Segoe UI Emoji",
"Segoe UI Symbol";
}
p {
margin: 0;
color: var(--gray-700);
}
main {
width: 100%;
min-height: 100%;
display: flex;
justify-content: center;
align-items: center;
padding: 1rem;
box-sizing: inherit;
position: relative;
}
.angular-logo {
max-width: 9.2rem;
}
.content {
display: flex;
justify-content: space-around;
width: 100%;
max-width: 700px;
margin-bottom: 3rem;
}
.content h1 {
margin-top: 1.75rem;
}
.content p {
margin-top: 1.5rem;
}
.divider {
width: 1px;
background: var(--red-to-pink-to-purple-vertical-gradient);
margin-inline: 0.5rem;
}
.pill-group {
display: flex;
flex-direction: column;
align-items: start;
flex-wrap: wrap;
gap: 1.25rem;
}
.pill {
display: flex;
align-items: center;
--pill-accent: var(--bright-blue);
background: color-mix(in srgb, var(--pill-accent) 5%, transparent);
color: var(--pill-accent);
padding-inline: 0.75rem;
padding-block: 0.375rem;
border-radius: 2.75rem;
border: 0;
transition: background 0.3s ease;
font-family: var(--inter-font);
font-size: 0.875rem;
font-style: normal;
font-weight: 500;
line-height: 1.4rem;
letter-spacing: -0.00875rem;
text-decoration: none;
}
.pill:hover {
background: color-mix(in srgb, var(--pill-accent) 15%, transparent);
}
.pill-group .pill:nth-child(6n + 1) {
--pill-accent: var(--bright-blue);
}
.pill-group .pill:nth-child(6n + 2) {
--pill-accent: var(--french-violet);
}
.pill-group .pill:nth-child(6n + 3),
.pill-group .pill:nth-child(6n + 4),
.pill-group .pill:nth-child(6n + 5) {
--pill-accent: var(--hot-red);
}
.pill-group svg {
margin-inline-start: 0.25rem;
}
.social-links {
display: flex;
align-items: center;
gap: 0.73rem;
margin-top: 1.5rem;
}
.social-links path {
transition: fill 0.3s ease;
fill: var(--gray-400);
}
.social-links a:hover svg path {
fill: var(--gray-900);
}
@media screen and (max-width: 650px) {
.content {
flex-direction: column;
width: max-content;
}
.divider {
height: 1px;
width: 100%;
background: var(--red-to-pink-to-purple-horizontal-gradient);
margin-block: 1.5rem;
}
}
</style>
<router-outlet /> <router-outlet />
import { TestBed } from '@angular/core/testing';
import { AppComponent } from './app.component';
describe('AppComponent', () => {
beforeEach(async () => {
await TestBed.configureTestingModule({
imports: [AppComponent],
}).compileComponents();
});
it('should create the app', () => {
const fixture = TestBed.createComponent(AppComponent);
const app = fixture.componentInstance;
expect(app).toBeTruthy();
});
it(`should have the 'PSManagementUI' title`, () => {
const fixture = TestBed.createComponent(AppComponent);
const app = fixture.componentInstance;
expect(app.title).toEqual('PSManagementUI');
});
it('should render title', () => {
const fixture = TestBed.createComponent(AppComponent);
fixture.detectChanges();
const compiled = fixture.nativeElement as HTMLElement;
expect(compiled.querySelector('h1')?.textContent).toContain('Hello, PSManagementUI');
});
});
import { Component } from '@angular/core'; import { AfterViewInit, Component } from '@angular/core';
@Component({ @Component({
selector: 'app-root', selector: 'app-root',
templateUrl: './app.component.html', templateUrl: './app.component.html',
styleUrls: ['./app.component.css'] styleUrls: ['./app.component.css']
}) })
export class AppComponent { export class AppComponent implements AfterViewInit {
title = 'PSManagement'; title = 'PSManagement';
ngAfterViewInit() {
// if (window['feather']) {
// window['feather'].replace();
// }
}
} }
import { ApplicationConfig, provideZoneChangeDetection } from '@angular/core'; import { ApplicationConfig, provideZoneChangeDetection } from '@angular/core';
import { provideRouter } from '@angular/router'; import { provideRouter } from '@angular/router';
// import { routes } from './app-routing.module'; import { routes } from './app-routing.module';
// export const appConfig: ApplicationConfig = { // export const appConfig: ApplicationConfig = {
// providers: [provideZoneChangeDetection({ eventCoalescing: true }), provideRouter(routes)] // providers: [provideZoneChangeDetection({ eventCoalescing: true }), provideRouter(routes)]
......
...@@ -3,33 +3,39 @@ import { BrowserModule } from '@angular/platform-browser'; ...@@ -3,33 +3,39 @@ import { BrowserModule } from '@angular/platform-browser';
import { AppRoutingModule } from './app-routing.module'; import { AppRoutingModule } from './app-routing.module';
import { AppComponent } from './app.component'; import { AppComponent } from './app.component';
import { ProjectsComponent } from './pages/projects/projects.component';
import { BoardComponent } from './pages/board/board.component';
import { LoginComponent } from './pages/login/login.component'; import { LoginComponent } from './pages/login/login.component';
import { LayoutComponent } from './pages/layout/layout.component';
import { FormsModule } from '@angular/forms'; import { FormsModule } from '@angular/forms';
import { HttpClientModule } from '@angular/common/http'; import { HttpClientModule } from '@angular/common/http';
import { UsersComponent } from './pages/users/users.component';
import { ConfigurationService } from './core/services/configuration/configuration.service'; import { ConfigurationService } from './core/services/configuration/configuration.service';
import { CoreModule } from './core/core.module'; import { CoreModule } from './core/core.module';
import { HomeComponent } from './pages/home/home.component';
import { LayoutComponent } from './shared/sharedLayout/layout/layout.component';
import { FooterComponent } from "./shared/sharedLayout/footer/footer.component";
import { SharedModule } from './shared/shared.module';
import { SidebarComponent } from './shared/sharedLayout/sidebar/sidebar.component';
import { HeaderComponent } from './shared/sharedLayout/header/header.component';
import { CustomersModule } from './customers/customers.module';
import { provideAnimationsAsync } from '@angular/platform-browser/animations/async';
@NgModule({ @NgModule({
declarations: [ declarations: [
AppComponent, AppComponent,
ProjectsComponent, HomeComponent,
BoardComponent,
LoginComponent, LoginComponent,
UsersComponent,
LayoutComponent
], ],
imports: [ imports: [
BrowserModule, BrowserModule,
AppRoutingModule, AppRoutingModule,
FormsModule, FormsModule,
CoreModule, CoreModule,
CustomersModule,
SharedModule,
HttpClientModule HttpClientModule
], ],
providers: [ providers: [
provideAnimationsAsync()
], ],
bootstrap: [AppComponent] bootstrap: [AppComponent]
}) })
......
import { TestBed } from '@angular/core/testing'; import { TestBed } from '@angular/core/testing';
import { CanActivateFn } from '@angular/router';
import { MasterService } from './master.service'; import { authGuard } from './auth.guard';
describe('MasterService', () => { describe('authGuard', () => {
let service: MasterService; const executeGuard: CanActivateFn = (...guardParameters) =>
TestBed.runInInjectionContext(() => authGuard(...guardParameters));
beforeEach(() => { beforeEach(() => {
TestBed.configureTestingModule({}); TestBed.configureTestingModule({});
service = TestBed.inject(MasterService);
}); });
it('should be created', () => { it('should be created', () => {
expect(service).toBeTruthy(); expect(executeGuard).toBeTruthy();
}); });
}); });
import { Injectable } from '@angular/core';
import { ActivatedRouteSnapshot, CanActivate, Router, RouterStateSnapshot } from '@angular/router';
import { AuthenticationService } from '../services/authentication/authentication.service';
@Injectable({
providedIn: "root"
})
export class AuthGuard implements CanActivate {
constructor(private router: Router,private auth :AuthenticationService) { }
canActivate(
next : ActivatedRouteSnapshot,
state: RouterStateSnapshot, ) {
//this.router.navigate(["/login"])
return true;
// if (this.auth.IsAuthenticated()) {
// return true ;
// } else {
// this.router.navigate(["/login"])
// return false;
// }
}
}
export interface Result <T>{
isSuccess :boolean
isFailed :boolean
value :any
errors : string[]
reasons: string[]
valueOrDefault:any
successes: any[]
}
\ No newline at end of file
...@@ -14,6 +14,10 @@ export class AuthenticationService { ...@@ -14,6 +14,10 @@ export class AuthenticationService {
constructor(private http : HttpClient,private config : ConfigurationService, private dataStorage : DataStorageService) { } constructor(private http : HttpClient,private config : ConfigurationService, private dataStorage : DataStorageService) { }
getAuthorizationToken() {
return this.dataStorage.getItem("token");
}
Login(loginRequest : LoginRequest ) :Observable<AuthenticationResponse>{ Login(loginRequest : LoginRequest ) :Observable<AuthenticationResponse>{
return this.http return this.http
......
<div *ngIf="customer" class="card col-6 offset-3 mb-3" style="border-radius: .5rem;">
<div class="row g-0">
<div class="col-md-4 gradient-custom text-center text-black"
style="border-top-left-radius: .5rem; border-bottom-left-radius: .5rem;">
<h5>{{customer.customerName}}</h5>
<p>{{customer.email}}</p>
</div>
<div class="col-md-8">
<div class="card-body p-4">
<h6>Information:</h6>
<hr class="mt-0 mb-4">
<div class="row pt-1">
<div class="col-6 mb-3">
<h6>Address</h6>
<p class="text-muted">{{customer.address.city}} - {{customer.address.streetName}}</p>
<p class="text-muted">Street Name : {{customer.address.streetNumber}} - {{customer.address.zipCode}}</p>
</div>
<div *ngIf="customer.contactInfo.length!=0" class="col-12 mb-3">
<h6>contact Info</h6>
<p *ngFor="let contact of customer.contactInfo" class="text-muted">{{contact.contactType}} - {{contact.contactValue}}</p>
</div>
</div>
<div class="row pt-1">
</div>
</div>
</div>
</div>
</div>
import { Component, Input } from '@angular/core';
import { Customer } from '../models/customer';
import { CustomerService } from '../services/customer.service';
@Component({
selector: 'customer-details',
templateUrl: './customer-details.component.html',
styleUrl: './customer-details.component.css'
})
export class CustomerDetailsComponent {
@Input() customer :Customer ;
name :string= ""
constructor(private customerServive :CustomerService){
}
handleInput(){
this.customer.customerName= this.name;
}
onDelete(customer: Customer) {
this.customerServive
.deleteCustomer(customer.id+10)
.subscribe(
{
next: (res)=>console.log(res),
error:(err)=>{
CustomerService.customers=CustomerService.customers.filter(o => o.id==customer.id);
console.log(CustomerService.customers)
}
}
);
}
}
.customers {
margin: 0 0 2em 0;
list-style-type: none;
padding: 0;
width: 15em;
}
.customers li {
cursor: pointer;
position: relative;
left: 0;
background-color: #EEE;
margin: .2em; /* top */
padding: .3em 0;
height: 1.8em;
border-radius: 4px;
}
.customers .selected {
background-color: #CFD8DC;
color: white;
}
.customers li.selected:hover {
background-color: #BBD8DC;
color: white;
}
.departments li:hover {
color: #607D8B;
background-color: #DDD;
left: .1em;
}
.customers .badge {
display: inline-block;
font-size: small;
color: white;
padding: 0.8em 0.7em 0 0.7em;
background-color: #607D8B;
line-height: 0.2em;
position: relative;
left: -1px;
top: -6px;
height: 2.2em;
margin-right: .8em;
border-radius: 4px 0 0 4px;
}
\ No newline at end of file
<br>
<!-- <strong>Do you have a new customer
</strong>
<button class="btn btn-primary" (click)="toggle()">
Create
</button> -->
<br>
<div *ngIf="isCreate" (click)="toggle()">
dsfdf dsfsf dsf dfdsf sddf dfdf d
</div>
<strong class="text-muted"> you have a {{customers.length}} customers</strong>
<ol class="customers alternating-colors">
<li *ngFor="let cust of customers"
[class.selected]="cust === selectedCustomer"
(click)="onSelect(cust)">
<span class="badge">#</span> <strong>{{cust.customerName}}</strong>
</li>
</ol>
<customer-details [customer]="selectedCustomer"></customer-details>
import { Component, OnInit } from '@angular/core';
import { Customer } from '../models/customer';
import { CustomerService } from '../services/customer.service';
import { CustomerDetailsComponent } from '../customer-details/customer-details.component';
import { MatDialog } from '@angular/material/dialog';
import { UpdateCustomerComponent } from '../update-customer/update-customer.component';
import { config } from 'rxjs';
@Component({
selector: 'customer-list',
templateUrl: './customer-list.component.html',
styleUrl: './customer-list.component.css'
})
export class CustomerListComponent implements OnInit {
customers :Customer[]=[]
isCreate = false
constructor(
private dialog: MatDialog,
private customerService : CustomerService) {
}
selectedCustomer: Customer;
onSelect(customer: Customer): void {
this.selectedCustomer = customer;
}
ngOnInit(): void {
this.customerService.getCustomers().subscribe({
next : (res) =>{
console.log(res);
if(res.isSuccess){
this.customers = res.value;
}
},
error: (err)=>{this.customers= CustomerService.customers}
});;
}
openEditForm(data: Customer | null) {
const dialogRef = this.dialog.open(UpdateCustomerComponent, {
data:data,
width:'auto',
height:'500px'
});
dialogRef.afterClosed().subscribe({
next: (val) => {
if (val) {
this.customers;
}
},
});
}
toggle():void{
this.isCreate = ! this.isCreate
}
}
import { NgModule } from '@angular/core';
import { CommonModule } from '@angular/common';
import { CustomerListComponent } from './customer-list/customer-list.component';
import { CustomerService } from './services/customer.service';
import { FormsModule, NgModel } from '@angular/forms';
import { CustomerDetailsComponent } from './customer-details/customer-details.component';
import { UpdateCustomerComponent } from './update-customer/update-customer.component';
@NgModule({
declarations: [
CustomerListComponent,
CustomerDetailsComponent,
UpdateCustomerComponent
],
imports: [
CommonModule,
FormsModule
],
providers:[CustomerService],
exports:[
CustomerListComponent,
CustomerDetailsComponent]
})
export class CustomersModule { }
export interface Customer{
id : number,
customerName : string ,
email : string ,
address :{
city : string ,
streetNumber : number ,
streetName : string ,
zipCode : number
}
contactInfo :{
contactValue :string,
contactType :string
}[]
}
\ No newline at end of file
import { Injectable } from '@angular/core';
import { Customer } from '../models/customer';
import { HttpClient } from '@angular/common/http';
import { ConfigurationService } from '../../core/services/configuration/configuration.service';
import { Observable } from 'rxjs';
import { Result } from '../../core/models/result';
@Injectable({
providedIn: 'root'
})
export class CustomerService {
public static customers : Customer[] = [
{ id :1,
customerName:"CQRE",
email :"CQRE@CC.mail",
address :{
streetName:"Barzeh",
streetNumber:12,
city:"Damascus",
zipCode:1223
},
contactInfo :[
{
contactType:"mob",
contactValue:"096734635"
},
{
contactType:"fax",
contactValue:"32434-32434-34"
},
]
},{
id :2,
customerName:"BBS",
email :"BBS@CC.mail",
address :{
streetName:"Barzeh",
streetNumber:112,
city:"Damascus",
zipCode:1223
},
contactInfo :[]
},{
id :3,
customerName:"ERW",
email :"EWR@CC.mail",
address :{
streetName:"Barzeh",
streetNumber:232,
city:"Damascus",
zipCode:1223
},
contactInfo :[]
}
];
constructor(private http :HttpClient ,private config : ConfigurationService) { }
public getCustomers():Observable<Result<Customer[]>>{
return this.http.get<Result<Customer[]>>(this.config.getServerUrl()+ "/Customers");
}
public getCustomerById(id : number ):Observable<Result<Customer>>{
return this.http.get<Result<Customer>>(this.config.getServerUrl()+ "/Customers/"+id);
}
public createCustomer(customer :Customer):Observable<Result<void>>{
return this.http.post<Result<void>>(this.config.getServerUrl()+ "/Customers",customer);
}
public updateCustomer(id :number ,customer :Customer):Observable<Result<void>>{
return this.http.put<Result<void>>(`${this.config.getServerUrl()}/Customers/${id}` ,customer);
}
public deleteCustomer(id: number): Observable<void> {
return this.http.delete<void>(`${this.config.getServerUrl()}/Customers/${id}`);
}
}
<div class="container ">
<div class="row d-flex justify-content-center align-items-center">
<div class="col-12 ">
<form >
<div class="alert alert-danger"></div>
<div class="form-group mb-3">
<label for="customerName" class="form-label"></label>
<input id="customerName" [(ngModel)]="customer.customerName" class="form-control" />
</div>
<div class="form-group mb-3">
<label for="customerEmail" class="form-label"></label>
<input id="customerEmail" [(ngModel)]="customer.email" class="form-control" />
</div>
<div class="form-group mb-4">
<label for="ustomerCity" class="form-label"></label>
<input id="customerCity" [(ngModel)]="customer.address.city" class="form-control" />
</div>
<div class="form-group mb-4">
<label for="customerZipcode" class="form-label"></label>
<input id="customerZipcode" [(ngModel)]="customer.address.zipCode" class="form-control" />
</div>
<div class="form-group mb-4">
<label for="CustomerStreetName" class="form-label"></label>
<input id="CustomerStreetName" [(ngModel)]="customer.address.streetName" class="form-control" />
</div>
<div class="form-group mb-4">
<label for="CustomerStreetNumber" class="form-label"></label>
<input id="CustomerStreetNnumber" [(ngModel)]="customer.address.streetNumber" class="form-control" />
</div>
</form>
</div>
</div>
</div>
import { Component, Input, input, Output } from '@angular/core';
import { Customer } from '../models/customer';
import { CustomerService } from '../services/customer.service';
@Component({
selector: 'update-customer',
templateUrl: './update-customer.component.html',
styleUrl: './update-customer.component.css'
})
export class UpdateCustomerComponent {
@Input() customer : Customer
constructor(private customerService : CustomerService) {
}
onSubmit(customer: Customer) {
this.customerService
.updateCustomer(customer.id,customer)
.subscribe({
next: (res)=>{
console.log(res)
},
error: (error)=> console.log(error)
}
);
}
}
<div class="container-fluid pt-2">
<div class="row pt-5">
<div class="col-12">
<div class="d-flex justify-content-between">
<div>
<h4>{{selectedProjectData.projectName}}</h4>
</div>
</div>
</div>
</div>
<div class="row mt-3">
<div class="col-12">
<div class="d-flex">
<div><input type="text" placeholder="Search Here"
class="form-control ng-pristine ng-valid ng-touched">
</div>
</div>
</div>
</div>
<div class="row pt-1">
<div class="col" id="3" *ngFor="let staus of status">
<div class="card card-bg">
<div class="card-header border-0 py-1"> {{staus}} <span> </span><!----></div>
<div class="card-body ticket-bg border" id="3"><!---->
<div draggable="true" *ngFor="let ticket of filterTicket(staus)" class="card-Body-Hover m-1 rounded-1 task" >
<div class="my-1 fw-bold"> {{ticket.summary}} </div>
<div class="row">
<div class="col-3">
<p class="text-muted space-font m-0 pointer"></p>
</div>
<div class="col-9 text-end">
<p class="text-muted space-font m-0">{{ticket.assignedTo}}
</p>
</div>
</div>
<div class="row">
<div class="col-12 text-end"><span>5
hrs</span></div>
</div>
</div>
</div>
</div>
</div>
</div>
</div>
\ No newline at end of file
import { HttpClient } from '@angular/common/http';
import { Component } from '@angular/core';
import { MasterService } from '../../services/master.service';
@Component({
selector: 'app-board',
templateUrl: './board.component.html',
styleUrls: ['./board.component.css']
})
export class BoardComponent {
ticketsArray: any[] = [];
selectedProjectData: any ;
status: string[]= ['To Do','In Progress','Done'];
constructor(private master: MasterService, private http: HttpClient) {
this.master.onProjectChange.subscribe((res: any) => {
debugger;
this.getProjectTickets(res.projectId);
this.selectedProjectData = res;
})
this.master.onTicketCreate.subscribe((res: any) => {
debugger;
this.getProjectTickets(this.selectedProjectData.projectId);
})
}
getProjectTickets(id: number) {
this.http.get('https://freeapi.miniprojectideas.com/api/Jira/GetTicketsByProjectId?projectid=' + id).subscribe((res: any) => {
this.ticketsArray = res.data;
})
}
filterTicket(status: string) {
return this.ticketsArray.filter(m=>m.status == status)
}
}
import { Department } from './department';
describe('Department', () => {
it('should create an instance', () => {
expect(new Department()).toBeTruthy();
});
});
export class Department {
id :number
name :string
flat :number
}
Workkkkk!.
\ No newline at end of file
import { HttpClient } from '@angular/common/http';
import { Component } from '@angular/core';
@Component({
selector: 'app-board',
templateUrl: './home.component.html',
styleUrls: ['./home.component.css']
})
export class HomeComponent {
brthDay= new Date(2020,1,20);
constructor() {
}
}
This diff is collapsed.
import { HttpClient } from '@angular/common/http';
import { Component, OnInit } from '@angular/core';
import { MasterService } from '../../services/master.service';
@Component({
selector: 'app-layout',
templateUrl: './layout.component.html',
styleUrls: ['./layout.component.css']
})
export class LayoutComponent implements OnInit {
projectList: any [] = [];
userList: any[] = [];
issueTypes: string[]= ['Ticket','Defect','RnD Work'];
status: string[]= ['To Do','In Progress','Done'];
ticketObj: any = {
"ticketId": 0,
"createdDate": "2023-08-18T05:58:41.065Z",
"summary": "",
"status": "",
"description": "",
"parentId": 0,
"storyPoint": 0,
"ticketGuid": "",
"assignedTo": 0,
"createdBy": 0,
"projectId": 0
}
constructor(private http: HttpClient, private master: MasterService) {
const loginData = localStorage.getItem('jiraLoginDetails');
if(loginData != null) {
const paserData = JSON.parse(loginData);
this.ticketObj.createdBy = paserData.userId;
}
}
ngOnInit(): void {
this.getAllProjects();
this.getAllUsers();
}
setProject(obj: any) {
debugger;
this.master.onProjectChange.next(obj);
}
getAllProjects() {
this.http.get("https://freeapi.miniprojectideas.com/api/Jira/GetAllProjects").subscribe((res: any)=>{
this.projectList = res.data;
debugger;
this.master.onProjectChange.next( this.projectList[0]);
})
}
getAllUsers() {
this.http.get("https://freeapi.miniprojectideas.com/api/Jira/GetAllUsers").subscribe((res: any)=>{
this.userList = res.data;
})
}
onTicketCreate() {
this.http.post('https://freeapi.miniprojectideas.com/api/Jira/CreateTicket', this.ticketObj).subscribe((res: any)=>{
if(res.result) {
alert(res.message);
this.master.onTicketCreate.next(true);
} else {
alert(res.message)
}
})
}
}
...@@ -63,4 +63,6 @@ ...@@ -63,4 +63,6 @@
} }
.justify-content-sa{
justify-content: space-around;
}
<div class="main"> <div class="wrapper vh-100">
<div class="container-fluid"> <div class="row align-items-center h-100">
<div class="row" style="padding-left: 20%;padding-top: 10%;"> <form class="col-lg-3 col-md-4 col-10 mx-auto text-center">
<div class="col-sm-8 col-lg-4 col-md-4 authfy-panel-left p-2 pt-5 " style=" height: auto;"> <a class="navbar-brand mx-auto mt-2 flex-fill text-center" href="./index.html">
<div class="brand-col"> <img id="logo" class="navbar-brand-img brand-md"
<div class="headline"> src="/assets/images/logo/logo.ico"
<div class="brand-logo"> alt="logo">
<img src="/assets/favicon.ico" style=" width: 100%;max-width: 80px;max-height: 80px;" <h6 class="h6 mb-3">Project Status Management</h6>
alt="brand-logo"> </a>
<h5 class="pt-2 text-center" > Projects Status Management</h5>
</div> <div class="form-group">
<p class="pt-2 text-center text-secondary">a Project Status Management Application.</p> <label for="inputEmail" class="sr-only">Email address</label>
<p class=" text-center text-secondary">Manage and track your project.</p> <input type="email" id="inputEmail" name="email" [(ngModel)]="loginRequest.email" class="form-control form-control-lg" placeholder="Email address" required="" autofocus="">
</div>
</div>
</div> </div>
<div class="col-sm-7 col-lg-6 col-md-6 p-5 authfy-panel-right" style="background-color:white ;"> <div class="form-group">
<div class="authfy-login"> <label for="inputPassword" class="sr-only">Password</label>
<div class="authfy-panel panel-login text-center active"> <input type="password" id="inputPassword"name="password" [(ngModel)]="loginRequest.passWord" class="form-control form-control-lg" placeholder="Password" required="">
<div class="authfy-heading pe-4">
<h3 class="auth-title">Login to your account</h3>
</div>
<div class="row" >
<div class="col-xs-12 col-sm-12">
<form name="loginForm" class="loginForm" action="#" method="POST" >
<div class="form-group">
<input type="email" [(ngModel)]="loginRequest.email" class="form-control email my-2" name="emailId" required
placeholder="Email address" style="width: 80%;">
</div>
<div class="form-group">
<div class="pwdMask">
<span class="d-flex">
<input type="text" [(ngModel)]="loginRequest.passWord" class="form-control password" name="password"
placeholder="Password" style="width: 80%;">
</span>
</div>
</div>
<div class="row remember-row d-flex pt-4 me-5">
<div class="col-xs-6 col-sm-6">
<p class="forgotPwd">
<a class="lnk-toggler" data-panel=".panel-forgot">Forgot
password?</a>
</p>
</div>
</div>
<div class="form-group">
<button class="btn btn-lg btn-primary btn-block " (click)="onLogin()" type="button"
style="width: 80%;">
Login
</button>
</div>
</form>
</div>
</div>
</div>
</div>
</div> </div>
<div class="checkbox mb-3">
<label>
<input type="checkbox" value="remember-me"> Stay logged in </label>
</div>
<button class="btn btn-primary btn-block" (click)="onLogin()">Let me in</button>
<p class="mt-5 mb-3 text-muted">© 2024</p>
</form>
</div> </div>
</div> </div>
</div>
...@@ -25,20 +25,23 @@ export class LoginComponent { ...@@ -25,20 +25,23 @@ export class LoginComponent {
onLogin() { onLogin() {
this.authService this.authService
.Login(this.loginRequest) .Login(this.loginRequest)
.subscribe((res:AuthenticationResponse)=>{ .subscribe({
debugger; next: (res:AuthenticationResponse)=>{
if(res.email) { if(res.email) {
this.dataStorage.setItem('userDetails', JSON.stringify(res)); this.dataStorage.setItem('userDetails', JSON.stringify(res));
this.dataStorage.setItem('token', JSON.stringify(res.token)); this.dataStorage.setItem('token', JSON.stringify(res.token));
console.log(res.token)
this.router.navigateByUrl('/board'); this.router.navigateByUrl('/home');
} else { } else {
//alert(res.message) }
},
error: (err)=>{
console.log(err);
this.router.navigateByUrl('/home');
} }
},(err)=>console.log(err)) });
}
}
} }
<div class="row">
<div class="col-12 text-end">
<button class="btn btn-success btn-sm" data-bs-toggle="modal" data-bs-target="#myModal">Create New Project</button>
</div>
</div>
<div class="row">
<div class="col-3" *ngFor="let project of projectList">
<div class="card">
<div class="card-header bg-success">
{{project.shortName}}
</div>
<div class="card-body">
<div class="row">
<div class="col-6">
{{project.projectName}}
</div>
<div class="col-6">
{{project.createdDate | date:'dd-MMM-yy'}}
</div>
</div>
</div>
<div class="card-footer">
<div class="row">
<div class="col-6">
<button class="btn btn-success btn-sm">Edit</button>
</div>
<div class="col-6">
<button class="btn btn-danger btn-sm">Delete</button>
</div>
</div>
</div>
</div>
</div>
</div>
<div class="modal" id="myModal">
<div class="modal-dialog">
<div class="modal-content">
<div class="modal-header">
<h4 class="modal-title">New Project</h4>
<button type="button" class="btn-close" data-bs-dismiss="modal"></button>
</div>
<div class="modal-body">
<div class="row">
<div class="col-3">
<label for="">Short Name</label>
<input type="text" name="shortName" class="form-control" [(ngModel)]="projectObj.shortName">
</div>
<div class="col-5">
<label for="">Full Name</label>
<input type="text" name="projectName" class="form-control" [(ngModel)]="projectObj.projectName">
</div>
</div>
</div>
<div class="modal-footer">
<button type="button" class="btn btn-danger" data-bs-dismiss="modal">Close</button>
<button type="button" class="btn btn-danger" (click)="onSave()">Save</button>
</div>
</div>
</div>
</div>
\ No newline at end of file
import { ComponentFixture, TestBed } from '@angular/core/testing';
import { ProjectsComponent } from './projects.component';
describe('ProjectsComponent', () => {
let component: ProjectsComponent;
let fixture: ComponentFixture<ProjectsComponent>;
beforeEach(() => {
TestBed.configureTestingModule({
declarations: [ProjectsComponent]
});
fixture = TestBed.createComponent(ProjectsComponent);
component = fixture.componentInstance;
fixture.detectChanges();
});
it('should create', () => {
expect(component).toBeTruthy();
});
});
import { HttpClient } from '@angular/common/http';
import { Component, OnInit } from '@angular/core';
@Component({
selector: 'app-projects',
templateUrl: './projects.component.html',
styleUrls: ['./projects.component.css']
})
export class ProjectsComponent implements OnInit{
projectList: any [] = [];
projectObj: any = {
"projectId": 0,
"projectName": "",
"shortName": "",
"createdDate": new Date()
}
constructor(private http: HttpClient) {
}
ngOnInit(): void {
this.getAllProjects();
}
getAllProjects() {
this.http.get("https://freeapi.miniprojectideas.com/api/Jira/GetAllProjects").subscribe((res: any)=>{
this.projectList = res.data;
})
}
onSave() {
this.http.post("https://freeapi.miniprojectideas.com/api/Jira/CreateProject",this.projectObj).subscribe((res: any)=>{
if(res.result) {
alert(res.message);
this.getAllProjects();
} else {
alert(res.message)
}
})
}
}
<div class="row">
<div class="col-12 text-end">
<button class="btn btn-success btn-sm" data-bs-toggle="modal" data-bs-target="#myModal">Create New User</button>
</div>
</div>
<div class="row">
<div class="col-3" *ngFor="let project of userList">
<div class="card">
<div class="card-header bg-success">
{{project.emailId}}
</div>
<div class="card-body">
<div class="row">
<div class="col-6">
{{project.fullName}}
</div>
<div class="col-6">
{{project.password }}
</div>
</div>
</div>
<div class="card-footer">
<div class="row">
<div class="col-6">
<button class="btn btn-success btn-sm">Edit</button>
</div>
<div class="col-6">
<button class="btn btn-danger btn-sm">Delete</button>
</div>
</div>
</div>
</div>
</div>
</div>
<div class="modal" id="myModal">
<div class="modal-dialog">
<div class="modal-content">
<div class="modal-header">
<h4 class="modal-title">New Project</h4>
<button type="button" class="btn-close" data-bs-dismiss="modal"></button>
</div>
<div class="modal-body">
<div class="row">
<div class="col-6">
<label for="">EmailId</label>
<input type="text" name="emailId" class="form-control" [(ngModel)]="userObj.emailId">
</div>
<div class="col-6">
<label for="">Password</label>
<input type="text" name="password" class="form-control" [(ngModel)]="userObj.password">
</div>
</div>
<div class="row">
<div class="col-8">
<label for="">Full Name</label>
<input type="text" name="projectName" class="form-control" [(ngModel)]="userObj.fullName">
</div>
</div>
</div>
<div class="modal-footer">
<button type="button" class="btn btn-danger" data-bs-dismiss="modal">Close</button>
<button type="button" class="btn btn-danger" (click)="onSave()">Save</button>
</div>
</div>
</div>
</div>
\ No newline at end of file
import { ComponentFixture, TestBed } from '@angular/core/testing';
import { UsersComponent } from './users.component';
describe('UsersComponent', () => {
let component: UsersComponent;
let fixture: ComponentFixture<UsersComponent>;
beforeEach(() => {
TestBed.configureTestingModule({
declarations: [UsersComponent]
});
fixture = TestBed.createComponent(UsersComponent);
component = fixture.componentInstance;
fixture.detectChanges();
});
it('should create', () => {
expect(component).toBeTruthy();
});
});
import { HttpClient } from '@angular/common/http';
import { Component } from '@angular/core';
@Component({
selector: 'app-users',
templateUrl: './users.component.html',
styleUrls: ['./users.component.css']
})
export class UsersComponent {
userList: any [] = [];
userObj: any = {
"userId": 0,
"emailId": "string",
"fullName": "string",
"password": "string"
}
constructor(private http: HttpClient) {
}
ngOnInit(): void {
this.getAllUsers();
}
getAllUsers() {
this.http.get("https://freeapi.miniprojectideas.com/api/Jira/GetAllUsers").subscribe((res: any)=>{
this.userList = res.data;
})
}
onSave() {
this.http.post("https://freeapi.miniprojectideas.com/api/Jira/CreateUser",this.userObj).subscribe((res: any)=>{
if(res.result) {
alert(res.message);
this.getAllUsers();
} else {
alert(res.message)
}
})
}
}
import { Injectable } from '@angular/core';
import { Subject } from 'rxjs';
@Injectable({
providedIn: 'root'
})
export class MasterService {
public onProjectChange= new Subject();
public onTicketCreate= new Subject();
constructor() { }
}
import { Component } from '@angular/core';
@Component({
selector: 'nav-item',
templateUrl: './nav-item.component.html',
styleUrl: './nav-item.component.css'
})
export class NavItemComponent {
}
import { HighLightDirective } from './high-light.directive';
describe('HighLightDirective', () => {
it('should create an instance', () => {
const directive = new HighLightDirective();
expect(directive).toBeTruthy();
});
});
import { Directive } from '@angular/core';
@Directive({
selector: '[appHighLight]',
standalone: true
})
export class HighLightDirective {
constructor() { }
}
import { NgModule } from '@angular/core';
import { CommonModule } from '@angular/common';
import { HeaderComponent } from './sharedLayout/header/header.component';
import { FooterComponent } from './sharedLayout/footer/footer.component';
import { SidebarComponent } from './sharedLayout/sidebar/sidebar.component';
import { LayoutComponent } from './sharedLayout/layout/layout.component';
import { RouterModule } from '@angular/router';
import { CUSTOM_ELEMENTS_SCHEMA } from '@angular/core';
@NgModule({
declarations: [
HeaderComponent,
FooterComponent,
SidebarComponent,
LayoutComponent
],
imports: [
CommonModule,
RouterModule
],
exports:[
HeaderComponent,
FooterComponent,
SidebarComponent,
LayoutComponent
],schemas: [CUSTOM_ELEMENTS_SCHEMA]
})
export class SharedModule { }
<!-- <footer class="py-4 bg-light mt-auto">
<div class="container-fluid px-4">
<div class="d-flex align-items-center justify-content-between small">
<div class="text-muted">Copyright &copy; Hasan Website 2023</div>
<div>
<a href="#">Privacy Policy</a>
&middot;
<a href="#">Terms &amp; Conditions</a>
</div>
</div>
</div>
</footer> -->
import { ComponentFixture, TestBed } from '@angular/core/testing'; import { ComponentFixture, TestBed } from '@angular/core/testing';
import { LoginComponent } from './login.component'; import { FooterComponent } from './footer.component';
describe('LoginComponent', () => { describe('FooterComponent', () => {
let component: LoginComponent; let component: FooterComponent;
let fixture: ComponentFixture<LoginComponent>; let fixture: ComponentFixture<FooterComponent>;
beforeEach(async () => { beforeEach(async () => {
await TestBed.configureTestingModule({ await TestBed.configureTestingModule({
imports: [LoginComponent] imports: [FooterComponent]
}) })
.compileComponents(); .compileComponents();
fixture = TestBed.createComponent(LoginComponent); fixture = TestBed.createComponent(FooterComponent);
component = fixture.componentInstance; component = fixture.componentInstance;
fixture.detectChanges(); fixture.detectChanges();
}); });
......
import { Component } from '@angular/core';
@Component({
selector: 'app-footer',
templateUrl: './footer.component.html',
styleUrl: './footer.component.css'
})
export class FooterComponent {
}
.o-income .c3 line, .o-income .c3 path {
stroke: rgba(120, 130, 140, 0.13); }
\ No newline at end of file
<nav class="topnav navbar navbar-light">
<button type="button" class="navbar-toggler text-muted mt-2 p-0 mr-3 collapseSidebar">
<i class="fe fe-menu navbar-toggler-icon"></i>
</button>
<form class="form-inline mr-auto searchform text-muted">
<input class="form-control mr-sm-2 bg-transparent border-0 pl-4 text-muted" type="search" placeholder="Type something..." aria-label="Search">
</form>
<ul class="nav">
<li class="nav-item">
<a class="nav-link text-muted my-2" href="#" id="modeSwitcher" data-mode="light">
<i class="fe fe-sun fe-16"></i>
</a>
</li>
<li class="nav-item">
<a class="nav-link text-muted my-2" href="./#" data-toggle="modal" data-target=".modal-shortcut">
<span class="fe fe-grid fe-16"></span>
</a>
</li>
<li class="nav-item nav-notif">
<a class="nav-link text-muted my-2" href="./#" data-toggle="modal" data-target=".modal-notif">
<span class="fe fe-bell fe-16"></span>
<span class="dot dot-md bg-success"></span>
</a>
</li>
<li class="nav-item dropdown">
<a class="nav-link dropdown-toggle text-muted pr-0" href="#" id="navbarDropdownMenuLink" role="button" data-toggle="dropdown" aria-haspopup="true" aria-expanded="false">
<span class="avatar avatar-sm mt-2">
<img src="/assets/images/users/3.jpg" alt="..." class="avatar-img rounded-circle">
</span>
</a>
<div class="dropdown-menu dropdown-menu-right" aria-labelledby="navbarDropdownMenuLink">
<a class="dropdown-item" href="#">Profile</a>
<a class="dropdown-item" href="#">Settings</a>
<a class="dropdown-item" href="#">Activities</a>
</div>
</li>
</ul>
</nav>
\ No newline at end of file
import { ComponentFixture, TestBed } from '@angular/core/testing'; import { ComponentFixture, TestBed } from '@angular/core/testing';
import { BoardComponent } from './board.component'; import { HeaderComponent } from './header.component';
describe('BoardComponent', () => { describe('HeaderComponent', () => {
let component: BoardComponent; let component: HeaderComponent;
let fixture: ComponentFixture<BoardComponent>; let fixture: ComponentFixture<HeaderComponent>;
beforeEach(() => { beforeEach(async () => {
TestBed.configureTestingModule({ await TestBed.configureTestingModule({
declarations: [BoardComponent] imports: [HeaderComponent]
}); })
fixture = TestBed.createComponent(BoardComponent); .compileComponents();
fixture = TestBed.createComponent(HeaderComponent);
component = fixture.componentInstance; component = fixture.componentInstance;
fixture.detectChanges(); fixture.detectChanges();
}); });
......
import { CommonModule } from '@angular/common';
import { HttpClient } from '@angular/common/http';
import { Component, OnInit } from '@angular/core';
import { Router, RouterLink } from '@angular/router';
@Component({
selector: 'app-header',
templateUrl: './header.component.html',
styleUrl: './header.component.css'
})
export class HeaderComponent {
constructor(private router: Router) { }
}
<div class="vertical light rtl">
<app-header></app-header>
<div id="wrapper">
<app-sidebar></app-sidebar>
<div role="main" class="main-content">
<router-outlet></router-outlet>
</div>
<!--
<app-footer></app-footer> -->
</div>
</div>
import { Component } from '@angular/core';
@Component({
selector: 'app-layout',
templateUrl: './layout.component.html',
styleUrls: ['./layout.component.css']
})
export class LayoutComponent {
constructor( ) {
}
}
This diff is collapsed.
import { Component } from '@angular/core';
@Component({
selector: 'app-sidebar',
templateUrl: './sidebar.component.html',
styleUrl: './sidebar.component.css'
})
export class SidebarComponent {
}
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
table.dataTable {
clear: both;
margin-top: 6px !important;
margin-bottom: 6px !important;
max-width: none !important;
border-collapse: separate !important;
border-spacing: 0;
}
table.dataTable td,
table.dataTable th {
-webkit-box-sizing: content-box;
box-sizing: content-box;
}
table.dataTable td.dataTables_empty,
table.dataTable th.dataTables_empty {
text-align: center;
}
table.dataTable.nowrap th,
table.dataTable.nowrap td {
white-space: nowrap;
}
div.dataTables_wrapper div.dataTables_length label {
font-weight: normal;
text-align: left;
white-space: nowrap;
}
div.dataTables_wrapper div.dataTables_length select {
width: auto;
display: inline-block;
}
div.dataTables_wrapper div.dataTables_filter {
text-align: right;
}
div.dataTables_wrapper div.dataTables_filter label {
font-weight: normal;
white-space: nowrap;
text-align: left;
}
div.dataTables_wrapper div.dataTables_filter input {
margin-left: 0.5em;
display: inline-block;
width: auto;
}
div.dataTables_wrapper div.dataTables_info {
padding-top: 0.85em;
white-space: nowrap;
}
div.dataTables_wrapper div.dataTables_paginate {
margin: 0;
white-space: nowrap;
text-align: right;
}
div.dataTables_wrapper div.dataTables_paginate ul.pagination {
margin: 2px 0;
white-space: nowrap;
justify-content: flex-end;
}
div.dataTables_wrapper div.dataTables_processing {
position: absolute;
top: 50%;
left: 50%;
width: 200px;
margin-left: -100px;
margin-top: -26px;
text-align: center;
padding: 1em 0;
}
table.dataTable thead > tr > th.sorting_asc, table.dataTable thead > tr > th.sorting_desc, table.dataTable thead > tr > th.sorting,
table.dataTable thead > tr > td.sorting_asc,
table.dataTable thead > tr > td.sorting_desc,
table.dataTable thead > tr > td.sorting {
padding-right: 30px;
}
table.dataTable thead > tr > th:active,
table.dataTable thead > tr > td:active {
outline: none;
}
table.dataTable thead .sorting,
table.dataTable thead .sorting_asc,
table.dataTable thead .sorting_desc,
table.dataTable thead .sorting_asc_disabled,
table.dataTable thead .sorting_desc_disabled {
cursor: pointer;
position: relative;
}
table.dataTable thead .sorting:before, table.dataTable thead .sorting:after,
table.dataTable thead .sorting_asc:before,
table.dataTable thead .sorting_asc:after,
table.dataTable thead .sorting_desc:before,
table.dataTable thead .sorting_desc:after,
table.dataTable thead .sorting_asc_disabled:before,
table.dataTable thead .sorting_asc_disabled:after,
table.dataTable thead .sorting_desc_disabled:before,
table.dataTable thead .sorting_desc_disabled:after {
position: absolute;
bottom: 0.9em;
display: block;
opacity: 0.3;
}
table.dataTable thead .sorting:before,
table.dataTable thead .sorting_asc:before,
table.dataTable thead .sorting_desc:before,
table.dataTable thead .sorting_asc_disabled:before,
table.dataTable thead .sorting_desc_disabled:before {
right: 1em;
content: "\2191";
}
table.dataTable thead .sorting:after,
table.dataTable thead .sorting_asc:after,
table.dataTable thead .sorting_desc:after,
table.dataTable thead .sorting_asc_disabled:after,
table.dataTable thead .sorting_desc_disabled:after {
right: 0.5em;
content: "\2193";
}
table.dataTable thead .sorting_asc:before,
table.dataTable thead .sorting_desc:after {
opacity: 1;
}
table.dataTable thead .sorting_asc_disabled:before,
table.dataTable thead .sorting_desc_disabled:after {
opacity: 0;
}
div.dataTables_scrollHead table.dataTable {
margin-bottom: 0 !important;
}
div.dataTables_scrollBody table {
border-top: none;
margin-top: 0 !important;
margin-bottom: 0 !important;
}
div.dataTables_scrollBody table thead .sorting:before,
div.dataTables_scrollBody table thead .sorting_asc:before,
div.dataTables_scrollBody table thead .sorting_desc:before,
div.dataTables_scrollBody table thead .sorting:after,
div.dataTables_scrollBody table thead .sorting_asc:after,
div.dataTables_scrollBody table thead .sorting_desc:after {
display: none;
}
div.dataTables_scrollBody table tbody tr:first-child th,
div.dataTables_scrollBody table tbody tr:first-child td {
border-top: none;
}
div.dataTables_scrollFoot > .dataTables_scrollFootInner {
box-sizing: content-box;
}
div.dataTables_scrollFoot > .dataTables_scrollFootInner > table {
margin-top: 0 !important;
border-top: none;
}
@media screen and (max-width: 767px) {
div.dataTables_wrapper div.dataTables_length,
div.dataTables_wrapper div.dataTables_filter,
div.dataTables_wrapper div.dataTables_info,
div.dataTables_wrapper div.dataTables_paginate {
text-align: center;
}
div.dataTables_wrapper div.dataTables_paginate ul.pagination {
justify-content: center !important;
}
}
table.dataTable.table-sm > thead > tr > th :not(.sorting_disabled) {
padding-right: 20px;
}
table.dataTable.table-sm .sorting:before,
table.dataTable.table-sm .sorting_asc:before,
table.dataTable.table-sm .sorting_desc:before {
top: 5px;
right: 0.85em;
}
table.dataTable.table-sm .sorting:after,
table.dataTable.table-sm .sorting_asc:after,
table.dataTable.table-sm .sorting_desc:after {
top: 5px;
}
table.table-bordered.dataTable {
border-right-width: 0;
}
table.table-bordered.dataTable th,
table.table-bordered.dataTable td {
border-left-width: 0;
}
table.table-bordered.dataTable th:last-child, table.table-bordered.dataTable th:last-child,
table.table-bordered.dataTable td:last-child,
table.table-bordered.dataTable td:last-child {
border-right-width: 1px;
}
table.table-bordered.dataTable tbody th,
table.table-bordered.dataTable tbody td {
border-bottom-width: 0;
}
div.dataTables_scrollHead table.table-bordered {
border-bottom-width: 0;
}
div.table-responsive > div.dataTables_wrapper > div.row {
margin: 0;
}
div.table-responsive > div.dataTables_wrapper > div.row > div[class^="col-"]:first-child {
padding-left: 0;
}
div.table-responsive > div.dataTables_wrapper > div.row > div[class^="col-"]:last-child {
padding-right: 0;
}
.daterangepicker {
position: absolute;
color: inherit;
background-color: #fff;
border-radius: 4px;
border: 1px solid #ddd;
width: 278px;
max-width: none;
padding: 0;
margin-top: 7px;
top: 100px;
left: 20px;
z-index: 3001;
display: none;
font-family: arial;
font-size: 15px;
line-height: 1em;
}
.daterangepicker:before, .daterangepicker:after {
position: absolute;
display: inline-block;
border-bottom-color: rgba(0, 0, 0, 0.2);
content: '';
}
.daterangepicker:before {
top: -7px;
border-right: 7px solid transparent;
border-left: 7px solid transparent;
border-bottom: 7px solid #ccc;
}
.daterangepicker:after {
top: -6px;
border-right: 6px solid transparent;
border-bottom: 6px solid #fff;
border-left: 6px solid transparent;
}
.daterangepicker.opensleft:before {
right: 9px;
}
.daterangepicker.opensleft:after {
right: 10px;
}
.daterangepicker.openscenter:before {
left: 0;
right: 0;
width: 0;
margin-left: auto;
margin-right: auto;
}
.daterangepicker.openscenter:after {
left: 0;
right: 0;
width: 0;
margin-left: auto;
margin-right: auto;
}
.daterangepicker.opensright:before {
left: 9px;
}
.daterangepicker.opensright:after {
left: 10px;
}
.daterangepicker.drop-up {
margin-top: -7px;
}
.daterangepicker.drop-up:before {
top: initial;
bottom: -7px;
border-bottom: initial;
border-top: 7px solid #ccc;
}
.daterangepicker.drop-up:after {
top: initial;
bottom: -6px;
border-bottom: initial;
border-top: 6px solid #fff;
}
.daterangepicker.single .daterangepicker .ranges, .daterangepicker.single .drp-calendar {
float: none;
}
.daterangepicker.single .drp-selected {
display: none;
}
.daterangepicker.show-calendar .drp-calendar {
display: block;
}
.daterangepicker.show-calendar .drp-buttons {
display: block;
}
.daterangepicker.auto-apply .drp-buttons {
display: none;
}
.daterangepicker .drp-calendar {
display: none;
max-width: 270px;
}
.daterangepicker .drp-calendar.left {
padding: 8px 0 8px 8px;
}
.daterangepicker .drp-calendar.right {
padding: 8px;
}
.daterangepicker .drp-calendar.single .calendar-table {
border: none;
}
.daterangepicker .calendar-table .next span, .daterangepicker .calendar-table .prev span {
color: #fff;
border: solid black;
border-width: 0 2px 2px 0;
border-radius: 0;
display: inline-block;
padding: 3px;
}
.daterangepicker .calendar-table .next span {
transform: rotate(-45deg);
-webkit-transform: rotate(-45deg);
}
.daterangepicker .calendar-table .prev span {
transform: rotate(135deg);
-webkit-transform: rotate(135deg);
}
.daterangepicker .calendar-table th, .daterangepicker .calendar-table td {
white-space: nowrap;
text-align: center;
vertical-align: middle;
min-width: 32px;
width: 32px;
height: 24px;
line-height: 24px;
font-size: 12px;
border-radius: 4px;
border: 1px solid transparent;
white-space: nowrap;
cursor: pointer;
}
.daterangepicker .calendar-table {
border: 1px solid #fff;
border-radius: 4px;
background-color: #fff;
}
.daterangepicker .calendar-table table {
width: 100%;
margin: 0;
border-spacing: 0;
border-collapse: collapse;
}
.daterangepicker td.available:hover, .daterangepicker th.available:hover {
background-color: #eee;
border-color: transparent;
color: inherit;
}
.daterangepicker td.week, .daterangepicker th.week {
font-size: 80%;
color: #ccc;
}
.daterangepicker td.off, .daterangepicker td.off.in-range, .daterangepicker td.off.start-date, .daterangepicker td.off.end-date {
background-color: #fff;
border-color: transparent;
color: #999;
}
.daterangepicker td.in-range {
background-color: #ebf4f8;
border-color: transparent;
color: #000;
border-radius: 0;
}
.daterangepicker td.start-date {
border-radius: 4px 0 0 4px;
}
.daterangepicker td.end-date {
border-radius: 0 4px 4px 0;
}
.daterangepicker td.start-date.end-date {
border-radius: 4px;
}
.daterangepicker td.active, .daterangepicker td.active:hover {
background-color: #357ebd;
border-color: transparent;
color: #fff;
}
.daterangepicker th.month {
width: auto;
}
.daterangepicker td.disabled, .daterangepicker option.disabled {
color: #999;
cursor: not-allowed;
text-decoration: line-through;
}
.daterangepicker select.monthselect, .daterangepicker select.yearselect {
font-size: 12px;
padding: 1px;
height: auto;
margin: 0;
cursor: default;
}
.daterangepicker select.monthselect {
margin-right: 2%;
width: 56%;
}
.daterangepicker select.yearselect {
width: 40%;
}
.daterangepicker select.hourselect, .daterangepicker select.minuteselect, .daterangepicker select.secondselect, .daterangepicker select.ampmselect {
width: 50px;
margin: 0 auto;
background: #eee;
border: 1px solid #eee;
padding: 2px;
outline: 0;
font-size: 12px;
}
.daterangepicker .calendar-time {
text-align: center;
margin: 4px auto 0 auto;
line-height: 30px;
position: relative;
}
.daterangepicker .calendar-time select.disabled {
color: #ccc;
cursor: not-allowed;
}
.daterangepicker .drp-buttons {
clear: both;
text-align: right;
padding: 8px;
border-top: 1px solid #ddd;
display: none;
line-height: 12px;
vertical-align: middle;
}
.daterangepicker .drp-selected {
display: inline-block;
font-size: 12px;
padding-right: 8px;
}
.daterangepicker .drp-buttons .btn {
margin-left: 8px;
font-size: 12px;
font-weight: bold;
padding: 4px 8px;
}
.daterangepicker.show-ranges.single.rtl .drp-calendar.left {
border-right: 1px solid #ddd;
}
.daterangepicker.show-ranges.single.ltr .drp-calendar.left {
border-left: 1px solid #ddd;
}
.daterangepicker.show-ranges.rtl .drp-calendar.right {
border-right: 1px solid #ddd;
}
.daterangepicker.show-ranges.ltr .drp-calendar.left {
border-left: 1px solid #ddd;
}
.daterangepicker .ranges {
float: none;
text-align: left;
margin: 0;
}
.daterangepicker.show-calendar .ranges {
margin-top: 8px;
}
.daterangepicker .ranges ul {
list-style: none;
margin: 0 auto;
padding: 0;
width: 100%;
}
.daterangepicker .ranges li {
font-size: 12px;
padding: 8px 12px;
cursor: pointer;
}
.daterangepicker .ranges li:hover {
background-color: #eee;
}
.daterangepicker .ranges li.active {
background-color: #08c;
color: #fff;
}
/* Larger Screen Styling */
@media (min-width: 564px) {
.daterangepicker {
width: auto;
}
.daterangepicker .ranges ul {
width: 140px;
}
.daterangepicker.single .ranges ul {
width: 100%;
}
.daterangepicker.single .drp-calendar.left {
clear: none;
}
.daterangepicker.single .ranges, .daterangepicker.single .drp-calendar {
float: left;
}
.daterangepicker {
direction: ltr;
text-align: left;
}
.daterangepicker .drp-calendar.left {
clear: left;
margin-right: 0;
}
.daterangepicker .drp-calendar.left .calendar-table {
border-right: none;
border-top-right-radius: 0;
border-bottom-right-radius: 0;
}
.daterangepicker .drp-calendar.right {
margin-left: 0;
}
.daterangepicker .drp-calendar.right .calendar-table {
border-left: none;
border-top-left-radius: 0;
border-bottom-left-radius: 0;
}
.daterangepicker .drp-calendar.left .calendar-table {
padding-right: 8px;
}
.daterangepicker .ranges, .daterangepicker .drp-calendar {
float: left;
}
}
@media (min-width: 730px) {
.daterangepicker .ranges {
width: auto;
}
.daterangepicker .ranges {
float: left;
}
.daterangepicker.rtl .ranges {
float: right;
}
.daterangepicker .drp-calendar.left {
clear: none !important;
}
}
This diff is collapsed.
@-webkit-keyframes passing-through{0%{opacity:0;-webkit-transform:translateY(40px);-moz-transform:translateY(40px);-ms-transform:translateY(40px);-o-transform:translateY(40px);transform:translateY(40px)}30%, 70%{opacity:1;-webkit-transform:translateY(0px);-moz-transform:translateY(0px);-ms-transform:translateY(0px);-o-transform:translateY(0px);transform:translateY(0px)}100%{opacity:0;-webkit-transform:translateY(-40px);-moz-transform:translateY(-40px);-ms-transform:translateY(-40px);-o-transform:translateY(-40px);transform:translateY(-40px)}}@-moz-keyframes passing-through{0%{opacity:0;-webkit-transform:translateY(40px);-moz-transform:translateY(40px);-ms-transform:translateY(40px);-o-transform:translateY(40px);transform:translateY(40px)}30%, 70%{opacity:1;-webkit-transform:translateY(0px);-moz-transform:translateY(0px);-ms-transform:translateY(0px);-o-transform:translateY(0px);transform:translateY(0px)}100%{opacity:0;-webkit-transform:translateY(-40px);-moz-transform:translateY(-40px);-ms-transform:translateY(-40px);-o-transform:translateY(-40px);transform:translateY(-40px)}}@keyframes passing-through{0%{opacity:0;-webkit-transform:translateY(40px);-moz-transform:translateY(40px);-ms-transform:translateY(40px);-o-transform:translateY(40px);transform:translateY(40px)}30%, 70%{opacity:1;-webkit-transform:translateY(0px);-moz-transform:translateY(0px);-ms-transform:translateY(0px);-o-transform:translateY(0px);transform:translateY(0px)}100%{opacity:0;-webkit-transform:translateY(-40px);-moz-transform:translateY(-40px);-ms-transform:translateY(-40px);-o-transform:translateY(-40px);transform:translateY(-40px)}}@-webkit-keyframes slide-in{0%{opacity:0;-webkit-transform:translateY(40px);-moz-transform:translateY(40px);-ms-transform:translateY(40px);-o-transform:translateY(40px);transform:translateY(40px)}30%{opacity:1;-webkit-transform:translateY(0px);-moz-transform:translateY(0px);-ms-transform:translateY(0px);-o-transform:translateY(0px);transform:translateY(0px)}}@-moz-keyframes slide-in{0%{opacity:0;-webkit-transform:translateY(40px);-moz-transform:translateY(40px);-ms-transform:translateY(40px);-o-transform:translateY(40px);transform:translateY(40px)}30%{opacity:1;-webkit-transform:translateY(0px);-moz-transform:translateY(0px);-ms-transform:translateY(0px);-o-transform:translateY(0px);transform:translateY(0px)}}@keyframes slide-in{0%{opacity:0;-webkit-transform:translateY(40px);-moz-transform:translateY(40px);-ms-transform:translateY(40px);-o-transform:translateY(40px);transform:translateY(40px)}30%{opacity:1;-webkit-transform:translateY(0px);-moz-transform:translateY(0px);-ms-transform:translateY(0px);-o-transform:translateY(0px);transform:translateY(0px)}}@-webkit-keyframes pulse{0%{-webkit-transform:scale(1);-moz-transform:scale(1);-ms-transform:scale(1);-o-transform:scale(1);transform:scale(1)}10%{-webkit-transform:scale(1.1);-moz-transform:scale(1.1);-ms-transform:scale(1.1);-o-transform:scale(1.1);transform:scale(1.1)}20%{-webkit-transform:scale(1);-moz-transform:scale(1);-ms-transform:scale(1);-o-transform:scale(1);transform:scale(1)}}@-moz-keyframes pulse{0%{-webkit-transform:scale(1);-moz-transform:scale(1);-ms-transform:scale(1);-o-transform:scale(1);transform:scale(1)}10%{-webkit-transform:scale(1.1);-moz-transform:scale(1.1);-ms-transform:scale(1.1);-o-transform:scale(1.1);transform:scale(1.1)}20%{-webkit-transform:scale(1);-moz-transform:scale(1);-ms-transform:scale(1);-o-transform:scale(1);transform:scale(1)}}@keyframes pulse{0%{-webkit-transform:scale(1);-moz-transform:scale(1);-ms-transform:scale(1);-o-transform:scale(1);transform:scale(1)}10%{-webkit-transform:scale(1.1);-moz-transform:scale(1.1);-ms-transform:scale(1.1);-o-transform:scale(1.1);transform:scale(1.1)}20%{-webkit-transform:scale(1);-moz-transform:scale(1);-ms-transform:scale(1);-o-transform:scale(1);transform:scale(1)}}.dropzone,.dropzone *{box-sizing:border-box}.dropzone{min-height:150px;border:2px solid rgba(0,0,0,0.3);background:white;padding:20px 20px}.dropzone.dz-clickable{cursor:pointer}.dropzone.dz-clickable *{cursor:default}.dropzone.dz-clickable .dz-message,.dropzone.dz-clickable .dz-message *{cursor:pointer}.dropzone.dz-started .dz-message{display:none}.dropzone.dz-drag-hover{border-style:solid}.dropzone.dz-drag-hover .dz-message{opacity:0.5}.dropzone .dz-message{text-align:center;margin:2em 0}.dropzone .dz-message .dz-button{background:none;color:inherit;border:none;padding:0;font:inherit;cursor:pointer;outline:inherit}.dropzone .dz-preview{position:relative;display:inline-block;vertical-align:top;margin:16px;min-height:100px}.dropzone .dz-preview:hover{z-index:1000}.dropzone .dz-preview:hover .dz-details{opacity:1}.dropzone .dz-preview.dz-file-preview .dz-image{border-radius:20px;background:#999;background:linear-gradient(to bottom, #eee, #ddd)}.dropzone .dz-preview.dz-file-preview .dz-details{opacity:1}.dropzone .dz-preview.dz-image-preview{background:white}.dropzone .dz-preview.dz-image-preview .dz-details{-webkit-transition:opacity 0.2s linear;-moz-transition:opacity 0.2s linear;-ms-transition:opacity 0.2s linear;-o-transition:opacity 0.2s linear;transition:opacity 0.2s linear}.dropzone .dz-preview .dz-remove{font-size:14px;text-align:center;display:block;cursor:pointer;border:none}.dropzone .dz-preview .dz-remove:hover{text-decoration:underline}.dropzone .dz-preview:hover .dz-details{opacity:1}.dropzone .dz-preview .dz-details{z-index:20;position:absolute;top:0;left:0;opacity:0;font-size:13px;min-width:100%;max-width:100%;padding:2em 1em;text-align:center;color:rgba(0,0,0,0.9);line-height:150%}.dropzone .dz-preview .dz-details .dz-size{margin-bottom:1em;font-size:16px}.dropzone .dz-preview .dz-details .dz-filename{white-space:nowrap}.dropzone .dz-preview .dz-details .dz-filename:hover span{border:1px solid rgba(200,200,200,0.8);background-color:rgba(255,255,255,0.8)}.dropzone .dz-preview .dz-details .dz-filename:not(:hover){overflow:hidden;text-overflow:ellipsis}.dropzone .dz-preview .dz-details .dz-filename:not(:hover) span{border:1px solid transparent}.dropzone .dz-preview .dz-details .dz-filename span,.dropzone .dz-preview .dz-details .dz-size span{background-color:rgba(255,255,255,0.4);padding:0 0.4em;border-radius:3px}.dropzone .dz-preview:hover .dz-image img{-webkit-transform:scale(1.05, 1.05);-moz-transform:scale(1.05, 1.05);-ms-transform:scale(1.05, 1.05);-o-transform:scale(1.05, 1.05);transform:scale(1.05, 1.05);-webkit-filter:blur(8px);filter:blur(8px)}.dropzone .dz-preview .dz-image{border-radius:20px;overflow:hidden;width:120px;height:120px;position:relative;display:block;z-index:10}.dropzone .dz-preview .dz-image img{display:block}.dropzone .dz-preview.dz-success .dz-success-mark{-webkit-animation:passing-through 3s cubic-bezier(0.77, 0, 0.175, 1);-moz-animation:passing-through 3s cubic-bezier(0.77, 0, 0.175, 1);-ms-animation:passing-through 3s cubic-bezier(0.77, 0, 0.175, 1);-o-animation:passing-through 3s cubic-bezier(0.77, 0, 0.175, 1);animation:passing-through 3s cubic-bezier(0.77, 0, 0.175, 1)}.dropzone .dz-preview.dz-error .dz-error-mark{opacity:1;-webkit-animation:slide-in 3s cubic-bezier(0.77, 0, 0.175, 1);-moz-animation:slide-in 3s cubic-bezier(0.77, 0, 0.175, 1);-ms-animation:slide-in 3s cubic-bezier(0.77, 0, 0.175, 1);-o-animation:slide-in 3s cubic-bezier(0.77, 0, 0.175, 1);animation:slide-in 3s cubic-bezier(0.77, 0, 0.175, 1)}.dropzone .dz-preview .dz-success-mark,.dropzone .dz-preview .dz-error-mark{pointer-events:none;opacity:0;z-index:500;position:absolute;display:block;top:50%;left:50%;margin-left:-27px;margin-top:-27px}.dropzone .dz-preview .dz-success-mark svg,.dropzone .dz-preview .dz-error-mark svg{display:block;width:54px;height:54px}.dropzone .dz-preview.dz-processing .dz-progress{opacity:1;-webkit-transition:all 0.2s linear;-moz-transition:all 0.2s linear;-ms-transition:all 0.2s linear;-o-transition:all 0.2s linear;transition:all 0.2s linear}.dropzone .dz-preview.dz-complete .dz-progress{opacity:0;-webkit-transition:opacity 0.4s ease-in;-moz-transition:opacity 0.4s ease-in;-ms-transition:opacity 0.4s ease-in;-o-transition:opacity 0.4s ease-in;transition:opacity 0.4s ease-in}.dropzone .dz-preview:not(.dz-processing) .dz-progress{-webkit-animation:pulse 6s ease infinite;-moz-animation:pulse 6s ease infinite;-ms-animation:pulse 6s ease infinite;-o-animation:pulse 6s ease infinite;animation:pulse 6s ease infinite}.dropzone .dz-preview .dz-progress{opacity:1;z-index:1000;pointer-events:none;position:absolute;height:16px;left:50%;top:50%;margin-top:-8px;width:80px;margin-left:-40px;background:rgba(255,255,255,0.9);-webkit-transform:scale(1);border-radius:8px;overflow:hidden}.dropzone .dz-preview .dz-progress .dz-upload{background:#333;background:linear-gradient(to bottom, #666, #444);position:absolute;top:0;left:0;bottom:0;width:0;-webkit-transition:width 300ms ease-in-out;-moz-transition:width 300ms ease-in-out;-ms-transition:width 300ms ease-in-out;-o-transition:width 300ms ease-in-out;transition:width 300ms ease-in-out}.dropzone .dz-preview.dz-error .dz-error-message{display:block}.dropzone .dz-preview.dz-error:hover .dz-error-message{opacity:1;pointer-events:auto}.dropzone .dz-preview .dz-error-message{pointer-events:none;z-index:1000;position:absolute;display:block;display:none;opacity:0;-webkit-transition:opacity 0.3s ease;-moz-transition:opacity 0.3s ease;-ms-transition:opacity 0.3s ease;-o-transition:opacity 0.3s ease;transition:opacity 0.3s ease;border-radius:8px;font-size:13px;top:130px;left:-10px;width:140px;background:#be2626;background:linear-gradient(to bottom, #be2626, #a92222);padding:0.5em 1.2em;color:white}.dropzone .dz-preview .dz-error-message:after{content:'';position:absolute;top:-6px;left:64px;width:0;height:0;border-left:6px solid transparent;border-right:6px solid transparent;border-bottom:6px solid #be2626}
This diff is collapsed.
This diff is collapsed.
/*!
* bsStepper v1.7.0 (https://github.com/Johann-S/bs-stepper)
* Copyright 2018 - 2019 Johann-S <johann.servoire@gmail.com>
* Licensed under MIT (https://github.com/Johann-S/bs-stepper/blob/master/LICENSE)
*/
/*
Common
*/
/* Accessibility */
/*
Wizard
*/
/*
Tabcontrol
*/
.wizard {
display: block;
width: 100%;
overflow: hidden; }
.wizard a {
outline: 0; }
.wizard ul {
list-style: none !important;
padding: 0;
margin: 0; }
.wizard ul > li {
display: block;
padding: 0; }
.wizard > .steps {
position: relative;
display: block;
width: 100%; }
.wizard > .steps .current-info {
position: absolute;
left: -999em; }
.wizard > .steps > ul > li {
width: 25%;
float: left; }
.wizard > .steps a {
display: block;
width: auto;
margin: 0 0.5em 0.5em;
padding: 1em 1em;
text-decoration: none;
-webkit-border-radius: 5px;
-moz-border-radius: 5px;
border-radius: 5px; }
.wizard > .steps a:hover {
display: block;
width: auto;
margin: 0 0.5em 0.5em;
padding: 1em 1em;
text-decoration: none;
-webkit-border-radius: 5px;
-moz-border-radius: 5px;
border-radius: 5px; }
.wizard > .steps a:active {
display: block;
width: auto;
margin: 0 0.5em 0.5em;
padding: 1em 1em;
text-decoration: none;
-webkit-border-radius: 5px;
-moz-border-radius: 5px;
border-radius: 5px; }
.wizard > .steps .disabled a {
background: #fff;
color: #6c757d;
cursor: default; }
.wizard > .steps .disabled a:hover {
background: #fff;
color: #6c757d;
cursor: default; }
.wizard > .steps .disabled a:active {
background: #fff;
color: #6c757d;
cursor: default; }
.wizard > .steps .current a {
background: #007bff;
color: #fff;
cursor: default; }
.wizard > .steps .current a:hover {
background: #007bff;
color: #fff;
cursor: default; }
.wizard > .steps .current a:active {
background: #007bff;
color: #fff;
cursor: default; }
.wizard > .steps .done a {
background: #28a745;
color: #fff; }
.wizard > .steps .done a:hover {
background: #28a745;
color: #fff; }
.wizard > .steps .done a:active {
background: #28a745;
color: #fff; }
.wizard > .steps .error a {
background: #dc3545;
color: #fff; }
.wizard > .steps .error a:hover {
background: #dc3545;
color: #fff; }
.wizard > .steps .error a:active {
background: #dc3545;
color: #fff; }
.wizard > .content {
display: block;
margin: 0.5em;
min-height: 6rem;
overflow: hidden;
position: relative;
width: auto;
-webkit-border-radius: 5px;
-moz-border-radius: 5px;
border-radius: 5px; }
.wizard > .content > .title {
position: absolute;
left: -999em; }
.wizard > .content > .body {
float: left;
width: 100%;
height: 100%;
padding: 2.5%; }
.wizard > .content > .body ul {
list-style: disc !important; }
.wizard > .content > .body ul > li {
display: list-item; }
.wizard > .content > .body > iframe {
border: 0 none;
width: 100%;
height: 100%; }
.wizard > .content > .body input {
display: block; }
.wizard > .content > .body input[type="checkbox"] {
display: inline-block; }
.wizard > .content > .body input.error {
background: #fbe3e4;
border: 1px solid #fbc2c4;
color: #dc3545; }
.wizard > .content > .body label {
display: inline-block;
margin-bottom: 0.5em; }
.wizard > .content > .body label.error {
color: #dc3545;
display: inline-block;
margin-left: 1.5em; }
.wizard > .actions {
position: relative;
display: block;
text-align: right;
width: 100%; }
.wizard > .actions > ul {
display: inline-block;
text-align: right; }
.wizard > .actions > ul > li {
float: left;
margin: 0 0.5em; }
.wizard > .actions a {
background: #007bff;
color: #fff;
display: block;
padding: 0.5em 1em;
text-decoration: none;
-webkit-border-radius: 5px;
-moz-border-radius: 5px;
border-radius: 5px; }
.wizard > .actions a:hover {
background: #007bff;
color: #fff;
display: block;
padding: 0.5em 1em;
text-decoration: none;
-webkit-border-radius: 5px;
-moz-border-radius: 5px;
border-radius: 5px; }
.wizard > .actions a:active {
background: #007bff;
color: #fff;
display: block;
padding: 0.5em 1em;
text-decoration: none;
-webkit-border-radius: 5px;
-moz-border-radius: 5px;
border-radius: 5px; }
.wizard > .actions .disabled a {
background: #fff;
color: #6c757d; }
.wizard > .actions .disabled a:hover {
background: #fff;
color: #6c757d; }
.wizard > .actions .disabled a:active {
background: #fff;
color: #6c757d; }
.tabcontrol {
display: block;
width: 100%;
overflow: hidden; }
.tabcontrol a {
outline: 0; }
.tabcontrol ul {
list-style: none !important;
padding: 0;
margin: 0; }
.tabcontrol ul > li {
display: block;
padding: 0; }
.tabcontrol > .steps {
position: relative;
display: block;
width: 100%; }
.tabcontrol > .steps .current-info {
position: absolute;
left: -999em; }
.tabcontrol > .steps > ul {
position: relative;
margin: 6px 0 0 0;
top: 1px;
z-index: 1; }
.tabcontrol > .steps > ul > li {
float: left;
margin: 5px 2px 0 0;
padding: 1px;
-webkit-border-top-left-radius: 5px;
-webkit-border-top-right-radius: 5px;
-moz-border-radius-topleft: 5px;
-moz-border-radius-topright: 5px;
border-top-left-radius: 5px;
border-top-right-radius: 5px; }
.tabcontrol > .steps > ul > li:hover {
background: #edecec;
border: 1px solid #bbb;
padding: 0; }
.tabcontrol > .steps > ul > li > a {
color: #5f5f5f;
display: inline-block;
border: 0 none;
margin: 0;
padding: 10px 30px;
text-decoration: none; }
.tabcontrol > .steps > ul > li > a:hover {
text-decoration: none; }
.tabcontrol > .steps > ul > li.current {
background: #fff;
border: 1px solid #bbb;
border-bottom: 0 none;
padding: 0 0 1px 0;
margin-top: 0; }
.tabcontrol > .steps > ul > li.current > a {
padding: 15px 30px 10px 30px; }
.tabcontrol > .content {
position: relative;
display: inline-block;
width: 100%;
height: 35em;
overflow: hidden;
border-top: 1px solid #bbb;
padding-top: 20px; }
.tabcontrol > .content > .title {
position: absolute;
left: -999em; }
.tabcontrol > .content > .body {
float: left;
position: absolute;
width: 95%;
height: 95%;
padding: 2.5%; }
.tabcontrol > .content > .body ul {
list-style: disc !important; }
.tabcontrol > .content > .body ul > li {
display: list-item; }
.wizard.vertical > .steps {
display: inline;
float: left;
width: 30%; }
.wizard.vertical > .steps > ul > li {
float: none;
width: 100%; }
.wizard.vertical > .content {
display: inline;
float: left;
margin: 0 2.5% 0.5em 2.5%;
width: 65%; }
.wizard.vertical > .actions {
display: inline;
float: right;
margin: 0 2.5%;
width: 95%; }
.wizard.vertical > .actions > ul > li {
margin: 0 0 0 1em; }
/**
* jQuery Timepicker
* http://timepicker.co
*
* Enhances standard form input fields helping users to select (or type) times.
*
* Copyright (c) 2016 Willington Vega; Licensed MIT, GPL
*/
.ui-timepicker-container {
position: absolute;
overflow: hidden;
box-sizing: border-box;
}
.ui-timepicker {
box-sizing: content-box;
display: block;
height: 205px;
list-style: none outside none;
margin: 0;
padding: 0 1px;
text-align: center;
}
.ui-timepicker-viewport {
box-sizing: content-box;
display: block;
height: 205px;
margin: 0;
padding: 0;
overflow: auto;
overflow-x: hidden; /* IE */
}
.ui-timepicker-standard {
/* overwrites .ui-widget */
font-family: Verdana,Arial,sans-serif;
font-size: 1.1em;
/* overwrites .ui-widget-content */
background-color: #FFF;
border: 1px solid #AAA;
color: #222;
/* overwrites .ui-menu */
margin: 0;
padding: 2px;
}
.ui-timepicker-standard a {
border: 1px solid transparent;
color: #222;
display: block;
padding: 0.2em 0.4em;
text-decoration: none;
}
.ui-timepicker-standard .ui-state-hover {
/* overwrites .ui-state-hover */
background-color: #DADADA;
border: 1px solid #999;
font-weight: normal;
color: #212121;
}
.ui-timepicker-standard .ui-menu-item {
/* overwrites .ui-menu and .ui-menu-item */
/*clear: left;
float: left;*/
margin: 0;
padding: 0;
}
.ui-timepicker-corners,
.ui-timepicker-corners .ui-corner-all {
-moz-border-radius: 4px;
-webkit-border-radius: 4px;
border-radius: 4px;
}
.ui-timepicker-hidden {
/* overwrites .ui-helper-hidden */
display: none;
}
.ui-timepicker-no-scrollbar .ui-timepicker {
border: none;
}
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This source diff could not be displayed because it is too large. You can view the blob instead.
This diff is collapsed.
This diff is collapsed.
"use strict";$("#modeSwitcher").on("click",function(e){e.preventDefault(),modeSwitch(),location.reload()}),$(".collapseSidebar").on("click",function(e){$(".vertical").hasClass("narrow")?$(".vertical").toggleClass("open"):($(".vertical").toggleClass("collapsed"),$(".vertical").hasClass("hover")&&$(".vertical").removeClass("hover")),e.preventDefault()}),$(".sidebar-left").hover(function(){$(".vertical").hasClass("collapsed")&&$(".vertical").addClass("hover"),$(".narrow").hasClass("open")||$(".vertical").addClass("hover")},function(){$(".vertical").hasClass("collapsed")&&$(".vertical").removeClass("hover"),$(".narrow").hasClass("open")||$(".vertical").removeClass("hover")}),$(".toggle-sidebar").on("click",function(){$(".navbar-slide").toggleClass("show")}),function(a){a(".dropdown-menu a.dropdown-toggle").on("click",function(e){return a(this).next().hasClass("show")||a(this).parents(".dropdown-menu").first().find(".show").removeClass("show"),a(this).next(".dropdown-menu").toggleClass("show"),a(this).parents("li.nav-item.dropdown.show").on("hidden.bs.dropdown",function(e){a(".dropdown-submenu .show").removeClass("show")}),!1})}(jQuery),$(".navbar .dropdown").on("hidden.bs.dropdown",function(){$(this).find("li.dropdown").removeClass("show open"),$(this).find("ul.dropdown-menu").removeClass("show open")}),$(".file-panel .card").on("click",function(){$(this).hasClass("selected")?($(this).removeClass("selected"),$(this).find("bg-light").removeClass("shadow-lg"),$(".file-container").removeClass("collapsed")):($(this).addClass("selected"),$(this).addClass("shadow-lg"),$(".file-panel .card").not(this).removeClass("selected"),$(".file-container").addClass("collapsed"))}),$(".close-info").on("click",function(){$(".file-container").hasClass("collapsed")&&($(".file-container").removeClass("collapsed"),$(".file-panel").find(".selected").removeClass("selected"))}),$(function(){$(".info-content").stickOnScroll({topOffset:0,setWidthOnStick:!0})});var basic_wizard=$("#example-basic");basic_wizard.length&&basic_wizard.steps({headerTag:"h3",bodyTag:"section",transitionEffect:"slideLeft",autoFocus:!0});var vertical_wizard=$("#example-vertical");vertical_wizard.length&&vertical_wizard.steps({headerTag:"h3",bodyTag:"section",transitionEffect:"slideLeft",stepsOrientation:"vertical"});var form=$("#example-form");form.length&&(form.validate({errorPlacement:function(e,a){a.before(e)},rules:{confirm:{equalTo:"#password"}}}),form.children("div").steps({headerTag:"h3",bodyTag:"section",transitionEffect:"slideLeft",onStepChanging:function(e,a,o){return form.validate().settings.ignore=":disabled,:hidden",form.valid()},onFinishing:function(e,a){return form.validate().settings.ignore=":disabled",form.valid()},onFinished:function(e,a){alert("Submitted!")}}));var ChartOptions={maintainAspectRatio:!1,responsive:!0,legend:{display:!1},scales:{xAxes:[{gridLines:{display:!1}}],yAxes:[{gridLines:{display:!1,color:colors.borderColor,zeroLineColor:colors.borderColor}}]}},ChartData={labels:["Jan","Feb","Mar","Apr","May","Jun","Jul","Aug","Sep"],datasets:[{label:"Visitors",barThickness:10,backgroundColor:base.primaryColor,borderColor:base.primaryColor,pointRadius:!1,pointColor:"#3b8bba",pointStrokeColor:"rgba(60,141,188,1)",pointHighlightFill:"#fff",pointHighlightStroke:"rgba(60,141,188,1)",data:[28,48,40,19,64,27,90,85,92],fill:"",lineTension:.1},{label:"Orders",barThickness:10,backgroundColor:"rgba(210, 214, 222, 1)",borderColor:"rgba(210, 214, 222, 1)",pointRadius:!1,pointColor:"rgba(210, 214, 222, 1)",pointStrokeColor:"#c1c7d1",pointHighlightFill:"#fff",pointHighlightStroke:"rgba(220,220,220,1)",data:[65,59,80,42,43,55,40,36,68],fill:"",borderWidth:2,lineTension:.1}]},lineChartData={labels:["Jan","Feb","Mar","Apr","May","Jun","Jul","Aug","Sep"],datasets:[{label:"Visitors",barThickness:10,borderColor:base.primaryColor,pointRadius:!1,pointColor:"#3b8bba",pointStrokeColor:"rgba(60,141,188,1)",pointHighlightFill:"#fff",pointHighlightStroke:"rgba(60,141,188,1)",data:[28,48,30,19,64,27,90,85,92],fill:"",lineTension:.2},{label:"Sales",barThickness:10,borderColor:"rgba(40, 167, 69, 0.8)",pointRadius:!1,pointColor:"#3b8bba",pointStrokeColor:"rgba(60,141,188,1)",pointHighlightFill:"#fff",pointHighlightStroke:"rgba(60,141,188,1)",data:[8,18,20,29,26,7,30,25,48],fill:"",borderWidth:2,lineTension:.2},{label:"Orders",backgroundColor:"rgba(210, 214, 222, 1)",borderColor:"rgba(210, 214, 222, 1)",pointRadius:!1,pointColor:"rgba(210, 214, 222, 1)",pointStrokeColor:"#c1c7d1",pointHighlightFill:"#fff",pointHighlightStroke:"rgba(220,220,220,1)",data:[65,59,80,42,43,55,40,36,68],fill:"",borderWidth:2,lineTension:.2}]},pieChartData={labels:["Clothing","Shoes","Electronics","Books","Cosmetics"],datasets:[{data:[18,30,42,12,7],backgroundColor:chartColors,borderColor:colors.borderColor}]},areaChartData={labels:["Apr","May","Jun","Jul","Aug","Sep","Oct","Nov","Dec"],datasets:[{label:"Visitors",barThickness:10,backgroundColor:base.primaryColor,borderColor:base.primaryColor,pointRadius:!1,pointColor:"#3b8bba",pointStrokeColor:"rgba(60,141,188,1)",pointHighlightFill:"#fff",pointHighlightStroke:"rgba(60,141,188,1)",data:[19,64,37,76,68,88,54,46,58],lineTension:.1},{label:"Orders",barThickness:10,backgroundColor:"rgba(210, 214, 222, 1)",borderColor:"rgba(255, 255, 255, 1)",pointRadius:!1,pointColor:"rgba(210, 214, 222, 1)",pointStrokeColor:"#c1c7d1",pointHighlightFill:"#fff",pointHighlightStroke:"rgba(220,220,220,1)",data:[42,43,55,40,36,68,22,66,49],lineTension:.1}]},barChartjs=document.getElementById("barChartjs");barChartjs&&new Chart(barChartjs,{type:"bar",data:ChartData,options:ChartOptions});var lineChartjs=document.getElementById("lineChartjs");lineChartjs&&new Chart(lineChartjs,{type:"line",data:lineChartData,options:ChartOptions});var pieChartjs=document.getElementById("pieChartjs");pieChartjs&&new Chart(pieChartjs,{type:"pie",data:pieChartData,options:{maintainAspectRatio:!1,responsive:!0}});var areaChartjs=document.getElementById("areaChartjs");areaChartjs&&new Chart(areaChartjs,{type:"line",data:areaChartData,options:ChartOptions}),$(".sparkline").length&&($(".inlinebar").sparkline([3,2,7,5,4,6,8],{type:"bar",width:"100%",height:"32",barColor:base.primaryColor,barWidth:4,barSpacing:2}),$(".inlineline").sparkline([2,0,5,7,4,6,8],{type:"line",width:"100%",height:"32",defaultPixelsPerValue:5,lineColor:base.primaryColor,fillColor:"transparent",minSpotColor:!1,spotColor:!1,highlightSpotColor:"",maxSpotColor:!1,lineWidth:2}),$(".inlinepie").sparkline([5,7,4,6,8],{type:"pie",height:"32",width:"32",sliceColors:chartColors}));var gauge1,svgg1=document.getElementById("gauge1");svgg1&&(gauge1=Gauge(svgg1,{max:100,dialStartAngle:-90,dialEndAngle:-90.001,value:100,showValue:!1,label:function(e){return Math.round(100*e)/100},color:function(e){return e<20?base.primaryColor:e<40?base.successColor:e<60?base.warningColor:base.dangerColor}}),function e(){gauge1.setValue(90),gauge1.setValueAnimated(30,1),window.setTimeout(e,6e3)}());var gauge2,svgg2=document.getElementById("gauge2");svgg2&&(gauge2=Gauge(svgg2,{max:100,value:46,dialStartAngle:-0,dialEndAngle:-90.001}),function e(){gauge2.setValue(40),gauge2.setValueAnimated(30,1),window.setTimeout(e,6e3)}());var gauge3,svgg3=document.getElementById("gauge3");svgg3&&(gauge3=Gauge(svgg3,{max:100,dialStartAngle:-90,dialEndAngle:-90.001,value:80,showValue:!1,label:function(e){return Math.round(100*e)/100}}));var gauge4,svgg4=document.getElementById("gauge4");svgg4&&(gauge4=Gauge(document.getElementById("gauge4"),{max:500,dialStartAngle:90,dialEndAngle:0,value:50}));
\ No newline at end of file
This diff is collapsed.
This diff is collapsed.
"use strict";var base={defaultFontFamily:"Overpass, sans-serif",primaryColor:"#1b68ff",secondaryColor:"#4f4f4f",successColor:"#3ad29f",warningColor:"#ffc107",infoColor:"#17a2b8",dangerColor:"#dc3545",darkColor:"#343a40",lightColor:"#f2f3f6"},extend={primaryColorLight:tinycolor(base.primaryColor).lighten(10).toString(),primaryColorLighter:tinycolor(base.primaryColor).lighten(30).toString(),primaryColorDark:tinycolor(base.primaryColor).darken(10).toString(),primaryColorDarker:tinycolor(base.primaryColor).darken(30).toString()},chartColors=[base.primaryColor,base.successColor,"#6f42c1",extend.primaryColorLighter],colors={bodyColor:"#6c757d",headingColor:"#495057",borderColor:"#e9ecef",backgroundColor:"#f8f9fa",mutedColor:"#adb5bd",chartTheme:"light"},darkColor={bodyColor:"#adb5bd",headingColor:"#e9ecef",borderColor:"#212529",backgroundColor:"#495057",mutedColor:"#adb5bd",chartTheme:"dark"},curentTheme=localStorage.getItem("mode"),dark=document.querySelector("#darkTheme"),light=document.querySelector("#lightTheme"),switcher=document.querySelector("#modeSwitcher");function modeSwitch(){console.log("abc");var o=localStorage.getItem("mode");o?"dark"==o?(dark.disabled=!0,light.disabled=!1,localStorage.setItem("mode","light")):(dark.disabled=!1,light.disabled=!0,localStorage.setItem("mode","dark")):$("body").hasClass("dark")?(dark.disabled=!1,light.disabled=!0,localStorage.setItem("mode","dark")):(dark.disabled=!0,light.disabled=!1,localStorage.setItem("mode","light"))}console.log(curentTheme),curentTheme?("dark"==curentTheme?(dark.disabled=!1,light.disabled=!0,colors=darkColor):"light"==curentTheme&&(dark.disabled=!0,light.disabled=!1),switcher.dataset.mode=curentTheme):$("body").hasClass("dark")?(colors=darkColor,localStorage.setItem("mode","dark")):localStorage.setItem("mode","light");
\ No newline at end of file
This source diff could not be displayed because it is too large. You can view the blob instead.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment