From d7bb8781038ff2512033a66c9faf10f761288a6b Mon Sep 17 00:00:00 2001 From: Sjef van Leeuwen Date: Sun, 2 Sep 2018 22:29:46 +0200 Subject: [PATCH] initial commit --- .editorconfig | 14 + .gitignore | 45 + LICENSE | 21 + README.md | 5 + angular.json | 148 + e2e/app.e2e-spec.ts | 14 + e2e/app.po.ts | 11 + e2e/tsconfig.e2e.json | 12 + karma.conf.js | 33 + package.json | 84 + protractor.conf.js | 28 + src/app/_nav.ts | 231 + src/app/app.component.css | 0 src/app/app.component.html | 20 + src/app/app.component.spec.ts | 18 + src/app/app.component.ts | 20 + src/app/app.module.ts | 71 + src/app/app.routing.ts | 93 + .../default-layout.component.html | 328 ++ .../default-layout.component.ts | 23 + src/app/containers/default-layout/index.ts | 1 + src/app/containers/index.ts | 1 + src/app/views/base/base-routing.module.ts | 108 + src/app/views/base/base.module.ts | 77 + src/app/views/base/cards.component.html | 320 ++ src/app/views/base/cards.component.ts | 10 + src/app/views/base/carousels.component.html | 137 + src/app/views/base/carousels.component.ts | 33 + src/app/views/base/collapses.component.html | 26 + src/app/views/base/collapses.component.ts | 20 + src/app/views/base/forms.component.html | 1064 +++++ src/app/views/base/forms.component.ts | 26 + src/app/views/base/paginations.component.html | 83 + src/app/views/base/paginations.component.ts | 31 + src/app/views/base/popovers.component.html | 161 + src/app/views/base/popovers.component.ts | 17 + src/app/views/base/progress.component.html | 59 + src/app/views/base/progress.component.ts | 75 + src/app/views/base/switches.component.html | 788 ++++ src/app/views/base/switches.component.ts | 10 + src/app/views/base/tables.component.html | 373 ++ src/app/views/base/tables.component.ts | 10 + src/app/views/base/tabs.component.html | 69 + src/app/views/base/tabs.component.ts | 10 + src/app/views/base/tooltips.component.html | 159 + src/app/views/base/tooltips.component.ts | 15 + .../buttons/brand-buttons.component.html | 844 ++++ .../views/buttons/brand-buttons.component.ts | 10 + .../views/buttons/buttons-routing.module.ts | 44 + src/app/views/buttons/buttons.component.html | 644 +++ src/app/views/buttons/buttons.component.ts | 10 + src/app/views/buttons/buttons.module.ts | 30 + src/app/views/buttons/dropdowns.component.css | 3 + .../views/buttons/dropdowns.component.html | 214 + src/app/views/buttons/dropdowns.component.ts | 41 + .../views/chartjs/chartjs-routing.module.ts | 20 + src/app/views/chartjs/chartjs.component.html | 130 + src/app/views/chartjs/chartjs.component.ts | 97 + src/app/views/chartjs/chartjs.module.ts | 14 + .../dashboard/dashboard-routing.module.ts | 21 + .../views/dashboard/dashboard.component.html | 749 ++++ .../views/dashboard/dashboard.component.ts | 389 ++ src/app/views/dashboard/dashboard.module.ts | 20 + src/app/views/error/404.component.html | 22 + src/app/views/error/404.component.ts | 10 + src/app/views/error/500.component.html | 22 + src/app/views/error/500.component.ts | 10 + .../views/icons/coreui-icons.component.html | 415 ++ src/app/views/icons/coreui-icons.component.ts | 10 + src/app/views/icons/flags.component.html | 1010 +++++ src/app/views/icons/flags.component.ts | 10 + .../views/icons/font-awesome.component.html | 3720 +++++++++++++++++ src/app/views/icons/font-awesome.component.ts | 10 + src/app/views/icons/icons-routing.module.ts | 52 + src/app/views/icons/icons.module.ts | 19 + .../icons/simple-line-icons.component.html | 561 +++ .../icons/simple-line-icons.component.ts | 10 + src/app/views/login/login.component.html | 49 + src/app/views/login/login.component.ts | 14 + .../views/notifications/alerts.component.html | 182 + .../views/notifications/alerts.component.ts | 90 + .../views/notifications/badges.component.html | 92 + .../views/notifications/badges.component.ts | 10 + .../views/notifications/modals.component.html | 202 + .../views/notifications/modals.component.ts | 16 + .../notifications-routing.module.ts | 44 + .../notifications/notifications.module.ts | 31 + .../views/register/register.component.html | 53 + src/app/views/register/register.component.ts | 11 + src/app/views/theme/colors.component.html | 141 + src/app/views/theme/colors.component.ts | 35 + src/app/views/theme/theme-routing.module.ts | 36 + src/app/views/theme/theme.module.ts | 21 + src/app/views/theme/typography.component.html | 150 + src/app/views/theme/typography.component.ts | 10 + .../views/widgets/widgets-routing.module.ts | 20 + src/app/views/widgets/widgets.component.html | 944 +++++ src/app/views/widgets/widgets.component.ts | 391 ++ src/app/views/widgets/widgets.module.ts | 16 + src/assets/.gitkeep | 0 src/assets/favicon.ico | Bin 0 -> 1150 bytes src/assets/img/avatars/1.jpg | Bin 0 -> 1913 bytes src/assets/img/avatars/2.jpg | Bin 0 -> 2105 bytes src/assets/img/avatars/3.jpg | Bin 0 -> 1645 bytes src/assets/img/avatars/4.jpg | Bin 0 -> 2580 bytes src/assets/img/avatars/5.jpg | Bin 0 -> 19058 bytes src/assets/img/avatars/6.jpg | Bin 0 -> 1608 bytes src/assets/img/avatars/7.jpg | Bin 0 -> 2059 bytes src/assets/img/avatars/8.jpg | Bin 0 -> 20466 bytes src/assets/img/brand/logo.svg | 578 +++ src/assets/img/brand/sygnet.svg | 17 + src/environments/environment.prod.ts | 3 + src/environments/environment.ts | 8 + src/index.html | 24 + src/main.ts | 12 + src/polyfills.ts | 82 + src/scss/_custom.scss | 1 + src/scss/_variables.scss | 1 + src/scss/style.scss | 8 + src/scss/vendors/_variables.scss | 4 + src/scss/vendors/chart.js/chart.scss | 48 + src/test.ts | 20 + src/tsconfig.app.json | 18 + src/tsconfig.spec.json | 20 + src/typings.d.ts | 5 + tsconfig.json | 19 + tslint.json | 142 + 127 files changed, 17631 insertions(+) create mode 100644 .editorconfig create mode 100644 .gitignore create mode 100644 LICENSE create mode 100644 README.md create mode 100644 angular.json create mode 100644 e2e/app.e2e-spec.ts create mode 100644 e2e/app.po.ts create mode 100644 e2e/tsconfig.e2e.json create mode 100644 karma.conf.js create mode 100644 package.json create mode 100644 protractor.conf.js create mode 100644 src/app/_nav.ts create mode 100644 src/app/app.component.css create mode 100644 src/app/app.component.html create mode 100644 src/app/app.component.spec.ts create mode 100644 src/app/app.component.ts create mode 100644 src/app/app.module.ts create mode 100644 src/app/app.routing.ts create mode 100644 src/app/containers/default-layout/default-layout.component.html create mode 100644 src/app/containers/default-layout/default-layout.component.ts create mode 100644 src/app/containers/default-layout/index.ts create mode 100644 src/app/containers/index.ts create mode 100644 src/app/views/base/base-routing.module.ts create mode 100644 src/app/views/base/base.module.ts create mode 100644 src/app/views/base/cards.component.html create mode 100644 src/app/views/base/cards.component.ts create mode 100644 src/app/views/base/carousels.component.html create mode 100644 src/app/views/base/carousels.component.ts create mode 100644 src/app/views/base/collapses.component.html create mode 100644 src/app/views/base/collapses.component.ts create mode 100644 src/app/views/base/forms.component.html create mode 100644 src/app/views/base/forms.component.ts create mode 100644 src/app/views/base/paginations.component.html create mode 100644 src/app/views/base/paginations.component.ts create mode 100644 src/app/views/base/popovers.component.html create mode 100644 src/app/views/base/popovers.component.ts create mode 100644 src/app/views/base/progress.component.html create mode 100644 src/app/views/base/progress.component.ts create mode 100644 src/app/views/base/switches.component.html create mode 100644 src/app/views/base/switches.component.ts create mode 100644 src/app/views/base/tables.component.html create mode 100644 src/app/views/base/tables.component.ts create mode 100644 src/app/views/base/tabs.component.html create mode 100644 src/app/views/base/tabs.component.ts create mode 100644 src/app/views/base/tooltips.component.html create mode 100644 src/app/views/base/tooltips.component.ts create mode 100644 src/app/views/buttons/brand-buttons.component.html create mode 100644 src/app/views/buttons/brand-buttons.component.ts create mode 100644 src/app/views/buttons/buttons-routing.module.ts create mode 100644 src/app/views/buttons/buttons.component.html create mode 100644 src/app/views/buttons/buttons.component.ts create mode 100644 src/app/views/buttons/buttons.module.ts create mode 100644 src/app/views/buttons/dropdowns.component.css create mode 100644 src/app/views/buttons/dropdowns.component.html create mode 100644 src/app/views/buttons/dropdowns.component.ts create mode 100644 src/app/views/chartjs/chartjs-routing.module.ts create mode 100644 src/app/views/chartjs/chartjs.component.html create mode 100644 src/app/views/chartjs/chartjs.component.ts create mode 100644 src/app/views/chartjs/chartjs.module.ts create mode 100644 src/app/views/dashboard/dashboard-routing.module.ts create mode 100644 src/app/views/dashboard/dashboard.component.html create mode 100644 src/app/views/dashboard/dashboard.component.ts create mode 100644 src/app/views/dashboard/dashboard.module.ts create mode 100644 src/app/views/error/404.component.html create mode 100644 src/app/views/error/404.component.ts create mode 100644 src/app/views/error/500.component.html create mode 100644 src/app/views/error/500.component.ts create mode 100644 src/app/views/icons/coreui-icons.component.html create mode 100644 src/app/views/icons/coreui-icons.component.ts create mode 100644 src/app/views/icons/flags.component.html create mode 100644 src/app/views/icons/flags.component.ts create mode 100644 src/app/views/icons/font-awesome.component.html create mode 100644 src/app/views/icons/font-awesome.component.ts create mode 100644 src/app/views/icons/icons-routing.module.ts create mode 100644 src/app/views/icons/icons.module.ts create mode 100644 src/app/views/icons/simple-line-icons.component.html create mode 100644 src/app/views/icons/simple-line-icons.component.ts create mode 100644 src/app/views/login/login.component.html create mode 100644 src/app/views/login/login.component.ts create mode 100644 src/app/views/notifications/alerts.component.html create mode 100644 src/app/views/notifications/alerts.component.ts create mode 100644 src/app/views/notifications/badges.component.html create mode 100644 src/app/views/notifications/badges.component.ts create mode 100644 src/app/views/notifications/modals.component.html create mode 100644 src/app/views/notifications/modals.component.ts create mode 100644 src/app/views/notifications/notifications-routing.module.ts create mode 100644 src/app/views/notifications/notifications.module.ts create mode 100644 src/app/views/register/register.component.html create mode 100644 src/app/views/register/register.component.ts create mode 100644 src/app/views/theme/colors.component.html create mode 100644 src/app/views/theme/colors.component.ts create mode 100644 src/app/views/theme/theme-routing.module.ts create mode 100644 src/app/views/theme/theme.module.ts create mode 100644 src/app/views/theme/typography.component.html create mode 100644 src/app/views/theme/typography.component.ts create mode 100644 src/app/views/widgets/widgets-routing.module.ts create mode 100644 src/app/views/widgets/widgets.component.html create mode 100644 src/app/views/widgets/widgets.component.ts create mode 100644 src/app/views/widgets/widgets.module.ts create mode 100644 src/assets/.gitkeep create mode 100644 src/assets/favicon.ico create mode 100644 src/assets/img/avatars/1.jpg create mode 100644 src/assets/img/avatars/2.jpg create mode 100644 src/assets/img/avatars/3.jpg create mode 100644 src/assets/img/avatars/4.jpg create mode 100644 src/assets/img/avatars/5.jpg create mode 100644 src/assets/img/avatars/6.jpg create mode 100644 src/assets/img/avatars/7.jpg create mode 100644 src/assets/img/avatars/8.jpg create mode 100644 src/assets/img/brand/logo.svg create mode 100644 src/assets/img/brand/sygnet.svg create mode 100644 src/environments/environment.prod.ts create mode 100644 src/environments/environment.ts create mode 100644 src/index.html create mode 100644 src/main.ts create mode 100644 src/polyfills.ts create mode 100644 src/scss/_custom.scss create mode 100644 src/scss/_variables.scss create mode 100644 src/scss/style.scss create mode 100644 src/scss/vendors/_variables.scss create mode 100644 src/scss/vendors/chart.js/chart.scss create mode 100644 src/test.ts create mode 100644 src/tsconfig.app.json create mode 100644 src/tsconfig.spec.json create mode 100644 src/typings.d.ts create mode 100644 tsconfig.json create mode 100644 tslint.json diff --git a/.editorconfig b/.editorconfig new file mode 100644 index 0000000..54e4850 --- /dev/null +++ b/.editorconfig @@ -0,0 +1,14 @@ +# Editor configuration, see http://editorconfig.org +root = true + +[*] +charset = utf-8 +end_of_line = lf +indent_size = 2 +indent_style = space +insert_final_newline = true +trim_trailing_whitespace = true + +[*.md] +max_line_length = off +trim_trailing_whitespace = false diff --git a/.gitignore b/.gitignore new file mode 100644 index 0000000..9725934 --- /dev/null +++ b/.gitignore @@ -0,0 +1,45 @@ +# See http://help.github.com/ignore-files/ for more about ignoring files. + +# compiled output +/dist +/dist-server +/tmp +/out-tsc + +# dependencies +/node_modules +package-lock.json + +# IDEs and editors +/.idea +.project +.classpath +.c9/ +*.launch +.settings/ +*.sublime-workspace + +# IDE - VSCode +.vscode/* +!.vscode/settings.json +!.vscode/tasks.json +!.vscode/launch.json +!.vscode/extensions.json + +# misc +/.sass-cache +/connect.lock +/coverage +/libpeerconnection.log +npm-debug.log +yarn-error.log +testem.log +/typings + +# e2e +/e2e/*.js +/e2e/*.map + +# System Files +.DS_Store +Thumbs.db diff --git a/LICENSE b/LICENSE new file mode 100644 index 0000000..0e8afdb --- /dev/null +++ b/LICENSE @@ -0,0 +1,21 @@ +The MIT License (MIT) + +Copyright (c) 2018 creativeLabs Łukasz Holeczek. + +Permission is hereby granted, free of charge, to any person obtaining a copy +of this software and associated documentation files (the "Software"), to deal +in the Software without restriction, including without limitation the rights +to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +copies of the Software, and to permit persons to whom the Software is +furnished to do so, subject to the following conditions: + +The above copyright notice and this permission notice shall be included in +all copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN +THE SOFTWARE. diff --git a/README.md b/README.md new file mode 100644 index 0000000..257b483 --- /dev/null +++ b/README.md @@ -0,0 +1,5 @@ +# Portal system for fieldlab + +Portal system for fieldlab in Angular. + +Under construction. \ No newline at end of file diff --git a/angular.json b/angular.json new file mode 100644 index 0000000..d673a84 --- /dev/null +++ b/angular.json @@ -0,0 +1,148 @@ +{ + "$schema": "./node_modules/@angular/cli/lib/config/schema.json", + "version": 1, + "newProjectRoot": "projects", + "projects": { + "ng": { + "root": "", + "sourceRoot": "src", + "projectType": "application", + "architect": { + "build": { + "builder": "@angular-devkit/build-angular:browser", + "options": { + "outputPath": "dist", + "index": "src/index.html", + "main": "src/main.ts", + "tsConfig": "src/tsconfig.app.json", + "polyfills": "src/polyfills.ts", + "assets": [ + "src/assets" + ], + "styles": [ + "node_modules/@coreui/icons/css/coreui-icons.css", + "node_modules/flag-icon-css/css/flag-icon.css", + "node_modules/font-awesome/css/font-awesome.css", + "node_modules/simple-line-icons/css/simple-line-icons.css", + "src/scss/style.scss" + ], + "stylePreprocessorOptions": { + "includePaths": ["./node_modules"] + }, + "scripts": [ + "node_modules/chart.js/dist/Chart.min.js" + ] + }, + "configurations": { + "production": { + "optimization": true, + "outputHashing": "all", + "sourceMap": false, + "extractCss": true, + "namedChunks": false, + "aot": true, + "extractLicenses": true, + "vendorChunk": false, + "buildOptimizer": true, + "fileReplacements": [ + { + "replace": "src/environments/environment.ts", + "with": "src/environments/environment.prod.ts" + } + ] + } + } + }, + "serve": { + "builder": "@angular-devkit/build-angular:dev-server", + "options": { + "browserTarget": "ng:build" + }, + "configurations": { + "production": { + "browserTarget": "ng:build:production" + } + } + }, + "extract-i18n": { + "builder": "@angular-devkit/build-angular:extract-i18n", + "options": { + "browserTarget": "ng:build" + } + }, + "test": { + "builder": "@angular-devkit/build-angular:karma", + "options": { + "main": "src/test.ts", + "karmaConfig": "./karma.conf.js", + "polyfills": "src/polyfills.ts", + "tsConfig": "src/tsconfig.spec.json", + "scripts": [ + "node_modules/chart.js/dist/Chart.min.js" + ], + "styles": [ + "node_modules/flag-icon-css/css/flag-icon.css", + "node_modules/font-awesome/css/font-awesome.css", + "node_modules/simple-line-icons/css/simple-line-icons.css", + "src/scss/style.scss" + ], + "stylePreprocessorOptions": { + "includePaths": ["./node_modules"] + }, + "assets": [ + "src/assets", + "src/favicon.ico" + ] + } + }, + "lint": { + "builder": "@angular-devkit/build-angular:tslint", + "options": { + "tsConfig": [ + "src/tsconfig.app.json", + "src/tsconfig.spec.json" + ], + "exclude": [ + "**/node_modules/**" + ] + } + } + } + }, + "ng-e2e": { + "root": "", + "sourceRoot": "", + "projectType": "application", + "architect": { + "e2e": { + "builder": "@angular-devkit/build-angular:protractor", + "options": { + "protractorConfig": "./protractor.conf.js", + "devServerTarget": "ng:serve" + } + }, + "lint": { + "builder": "@angular-devkit/build-angular:tslint", + "options": { + "tsConfig": [ + "e2e/tsconfig.e2e.json" + ], + "exclude": [ + "**/node_modules/**" + ] + } + } + } + } + }, + "defaultProject": "ng", + "schematics": { + "@schematics/angular:component": { + "prefix": "app", + "styleext": "scss" + }, + "@schematics/angular:directive": { + "prefix": "app" + } + } +} diff --git a/e2e/app.e2e-spec.ts b/e2e/app.e2e-spec.ts new file mode 100644 index 0000000..7487cea --- /dev/null +++ b/e2e/app.e2e-spec.ts @@ -0,0 +1,14 @@ +import { CoreUIPage } from './app.po'; + +describe('core-ui App', function() { + let page: CoreUIPage; + + beforeEach(() => { + page = new CoreUIPage(); + }); + + it('should display footer containing creativeLabs', () => { + page.navigateTo(); + expect(page.getParagraphText()).toContain('creativeLabs'); + }); +}); diff --git a/e2e/app.po.ts b/e2e/app.po.ts new file mode 100644 index 0000000..aea5a60 --- /dev/null +++ b/e2e/app.po.ts @@ -0,0 +1,11 @@ +import { browser, element, by } from 'protractor'; + +export class CoreUIPage { + navigateTo() { + return browser.get('/'); + } + + getParagraphText() { + return element(by.tagName('footer')).getText(); + } +} diff --git a/e2e/tsconfig.e2e.json b/e2e/tsconfig.e2e.json new file mode 100644 index 0000000..ac7a373 --- /dev/null +++ b/e2e/tsconfig.e2e.json @@ -0,0 +1,12 @@ +{ + "extends": "../tsconfig.json", + "compilerOptions": { + "outDir": "../out-tsc/e2e", + "module": "commonjs", + "target": "es5", + "types":[ + "jasmine", + "node" + ] + } +} diff --git a/karma.conf.js b/karma.conf.js new file mode 100644 index 0000000..84af9d1 --- /dev/null +++ b/karma.conf.js @@ -0,0 +1,33 @@ +// Karma configuration file, see link for more information +// https://karma-runner.github.io/1.0/config/configuration-file.html + +module.exports = function (config) { + config.set({ + basePath: '', + frameworks: ['jasmine', '@angular-devkit/build-angular'], + plugins: [ + require('karma-jasmine'), + require('karma-chrome-launcher'), + require('karma-jasmine-html-reporter'), + require('karma-coverage-istanbul-reporter'), + require('@angular-devkit/build-angular/plugins/karma') + ], + client:{ + clearContext: false // leave Jasmine Spec Runner output visible in browser + }, + coverageIstanbulReporter: { + dir: require('path').join(__dirname, 'coverage'), reports: [ 'html', 'lcovonly' ], + fixWebpackSourcePaths: true + }, + angularCli: { + environment: 'dev' + }, + reporters: ['progress', 'kjhtml'], + port: 9876, + colors: true, + logLevel: config.LOG_INFO, + autoWatch: true, + browsers: ['Chrome'], + singleRun: false + }); +}; diff --git a/package.json b/package.json new file mode 100644 index 0000000..1286d96 --- /dev/null +++ b/package.json @@ -0,0 +1,84 @@ +{ + "name": "@coreui/coreui-free-angular-admin-template", + "version": "2.0.0", + "description": "CoreUI Free Angular 2+ Admin Template", + "author": { + "name": "Łukasz Holeczek", + "url": "http://holeczek.pl", + "github": "https://github.com/mrholek", + "twitter": "https://twitter.com/lukaszholeczek" + }, + "contributors": [ + { + "name": "Andrzej Kopański", + "url": "https://github.com/xidedix" + } + ], + "homepage": "https://coreui.io/angular", + "copyright": "Copyright 2018 creativeLabs Łukasz Holeczek", + "license": "MIT", + "scripts": { + "ng": "ng", + "start": "ng serve", + "build": "ng build --prod", + "test": "ng test", + "lint": "ng lint", + "e2e": "ng e2e" + }, + "private": true, + "dependencies": { + "@angular/animations": "^6.1.6", + "@angular/common": "^6.1.6", + "@angular/compiler": "^6.1.6", + "@angular/core": "^6.1.6", + "@angular/forms": "^6.1.6", + "@angular/http": "^6.1.6", + "@angular/platform-browser": "^6.1.6", + "@angular/platform-browser-dynamic": "^6.1.6", + "@angular/router": "^6.1.6", + "@coreui/angular": "^2.0.0-rc.1", + "@coreui/coreui": "^2.0.4", + "@coreui/coreui-plugin-chartjs-custom-tooltips": "^1.2.0", + "@coreui/icons": "0.3.0", + "bootstrap": "^4.1.3", + "chart.js": "^2.7.2", + "core-js": "^2.5.7", + "flag-icon-css": "^3.0.0", + "font-awesome": "^4.7.0", + "moment": "^2.22.2", + "mutationobserver-shim": "^0.3.2", + "ng2-charts": "^1.6.0", + "ngx-bootstrap": "^3.0.1", + "ngx-perfect-scrollbar": "^6.3.0", + "rxjs": "^6.3.0", + "rxjs-compat": "^6.3.0", + "simple-line-icons": "^2.4.1", + "ts-helpers": "^1.1.2", + "zone.js": "^0.8.26" + }, + "devDependencies": { + "@angular-devkit/build-angular": "^0.7.5", + "@angular/cli": "^6.1.5", + "@angular/compiler-cli": "^6.1.6", + "@angular/language-service": "^6.1.6", + "@types/jasmine": "^2.8.8", + "@types/jasminewd2": "^2.0.3", + "@types/node": "^10.9.4", + "codelyzer": "^4.4.4", + "jasmine-core": "^3.2.1", + "jasmine-spec-reporter": "^4.2.1", + "karma": "^3.0.0", + "karma-chrome-launcher": "^2.2.0", + "karma-coverage-istanbul-reporter": "^2.0.2", + "karma-jasmine": "^1.1.2", + "karma-jasmine-html-reporter": "^1.3.1", + "protractor": "5.4.0", + "ts-node": "^7.0.1", + "tslint": "^5.11.0", + "typescript": "^2.9.2" + }, + "engines": { + "node": ">= 8.9.4", + "npm": ">= 5.6.0" + } +} diff --git a/protractor.conf.js b/protractor.conf.js new file mode 100644 index 0000000..7ee3b5e --- /dev/null +++ b/protractor.conf.js @@ -0,0 +1,28 @@ +// Protractor configuration file, see link for more information +// https://github.com/angular/protractor/blob/master/lib/config.ts + +const { SpecReporter } = require('jasmine-spec-reporter'); + +exports.config = { + allScriptsTimeout: 11000, + specs: [ + './e2e/**/*.e2e-spec.ts' + ], + capabilities: { + 'browserName': 'chrome' + }, + directConnect: true, + baseUrl: 'http://localhost:4200/', + framework: 'jasmine', + jasmineNodeOpts: { + showColors: true, + defaultTimeoutInterval: 30000, + print: function() {} + }, + onPrepare() { + require('ts-node').register({ + project: 'e2e/tsconfig.e2e.json' + }); + jasmine.getEnv().addReporter(new SpecReporter({ spec: { displayStacktrace: true } })); + } +}; diff --git a/src/app/_nav.ts b/src/app/_nav.ts new file mode 100644 index 0000000..12a3d09 --- /dev/null +++ b/src/app/_nav.ts @@ -0,0 +1,231 @@ +export const navItems = [ + { + name: 'Dashboard', + url: '/dashboard', + icon: 'icon-speedometer', + badge: { + variant: 'info', + text: 'NEW' + } + }, + { + title: true, + name: 'Theme' + }, + { + name: 'Colors', + url: '/theme/colors', + icon: 'icon-drop' + }, + { + name: 'Typography', + url: '/theme/typography', + icon: 'icon-pencil' + }, + { + title: true, + name: 'Components' + }, + { + name: 'Base', + url: '/base', + icon: 'icon-puzzle', + children: [ + { + name: 'Cards', + url: '/base/cards', + icon: 'icon-puzzle' + }, + { + name: 'Carousels', + url: '/base/carousels', + icon: 'icon-puzzle' + }, + { + name: 'Collapses', + url: '/base/collapses', + icon: 'icon-puzzle' + }, + { + name: 'Forms', + url: '/base/forms', + icon: 'icon-puzzle' + }, + { + name: 'Pagination', + url: '/base/paginations', + icon: 'icon-puzzle' + }, + { + name: 'Popovers', + url: '/base/popovers', + icon: 'icon-puzzle' + }, + { + name: 'Progress', + url: '/base/progress', + icon: 'icon-puzzle' + }, + { + name: 'Switches', + url: '/base/switches', + icon: 'icon-puzzle' + }, + { + name: 'Tables', + url: '/base/tables', + icon: 'icon-puzzle' + }, + { + name: 'Tabs', + url: '/base/tabs', + icon: 'icon-puzzle' + }, + { + name: 'Tooltips', + url: '/base/tooltips', + icon: 'icon-puzzle' + } + ] + }, + { + name: 'Buttons', + url: '/buttons', + icon: 'icon-cursor', + children: [ + { + name: 'Buttons', + url: '/buttons/buttons', + icon: 'icon-cursor' + }, + { + name: 'Dropdowns', + url: '/buttons/dropdowns', + icon: 'icon-cursor' + }, + { + name: 'Brand Buttons', + url: '/buttons/brand-buttons', + icon: 'icon-cursor' + } + ] + }, + { + name: 'Charts', + url: '/charts', + icon: 'icon-pie-chart' + }, + { + name: 'Icons', + url: '/icons', + icon: 'icon-star', + children: [ + { + name: 'CoreUI Icons', + url: '/icons/coreui-icons', + icon: 'icon-star', + badge: { + variant: 'success', + text: 'NEW' + } + }, + { + name: 'Flags', + url: '/icons/flags', + icon: 'icon-star' + }, + { + name: 'Font Awesome', + url: '/icons/font-awesome', + icon: 'icon-star', + badge: { + variant: 'secondary', + text: '4.7' + } + }, + { + name: 'Simple Line Icons', + url: '/icons/simple-line-icons', + icon: 'icon-star' + } + ] + }, + { + name: 'Notifications', + url: '/notifications', + icon: 'icon-bell', + children: [ + { + name: 'Alerts', + url: '/notifications/alerts', + icon: 'icon-bell' + }, + { + name: 'Badges', + url: '/notifications/badges', + icon: 'icon-bell' + }, + { + name: 'Modals', + url: '/notifications/modals', + icon: 'icon-bell' + } + ] + }, + { + name: 'Widgets', + url: '/widgets', + icon: 'icon-calculator', + badge: { + variant: 'info', + text: 'NEW' + } + }, + { + divider: true + }, + { + title: true, + name: 'Extras', + }, + { + name: 'Pages', + url: '/pages', + icon: 'icon-star', + children: [ + { + name: 'Login', + url: '/login', + icon: 'icon-star' + }, + { + name: 'Register', + url: '/register', + icon: 'icon-star' + }, + { + name: 'Error 404', + url: '/404', + icon: 'icon-star' + }, + { + name: 'Error 500', + url: '/500', + icon: 'icon-star' + } + ] + }, + { + name: 'Download CoreUI', + url: 'http://coreui.io/angular/', + icon: 'icon-cloud-download', + class: 'mt-auto', + variant: 'success' + }, + { + name: 'Try CoreUI PRO', + url: 'http://coreui.io/pro/angular/', + icon: 'icon-layers', + variant: 'danger' + } +]; diff --git a/src/app/app.component.css b/src/app/app.component.css new file mode 100644 index 0000000..e69de29 diff --git a/src/app/app.component.html b/src/app/app.component.html new file mode 100644 index 0000000..fa2706a --- /dev/null +++ b/src/app/app.component.html @@ -0,0 +1,20 @@ + +
+

+ Welcome to {{ title }}! +

+ Angular Logo +
+

Here are some links to help you start:

+ + diff --git a/src/app/app.component.spec.ts b/src/app/app.component.spec.ts new file mode 100644 index 0000000..cb29357 --- /dev/null +++ b/src/app/app.component.spec.ts @@ -0,0 +1,18 @@ +import { RouterTestingModule } from '@angular/router/testing'; +import { TestBed, async } from '@angular/core/testing'; +import { AppComponent } from './app.component'; +describe('AppComponent', () => { + beforeEach(async(() => { + TestBed.configureTestingModule({ + declarations: [ + AppComponent + ], + imports: [ RouterTestingModule ] + }).compileComponents(); + })); + it('should create the app', async(() => { + const fixture = TestBed.createComponent(AppComponent); + const app = fixture.debugElement.componentInstance; + expect(app).toBeTruthy(); + })); +}); diff --git a/src/app/app.component.ts b/src/app/app.component.ts new file mode 100644 index 0000000..dcaa7f2 --- /dev/null +++ b/src/app/app.component.ts @@ -0,0 +1,20 @@ +import { Component, OnInit } from '@angular/core'; +import { Router, NavigationEnd } from '@angular/router'; + +@Component({ + // tslint:disable-next-line + selector: 'body', + template: '' +}) +export class AppComponent implements OnInit { + constructor(private router: Router) { } + + ngOnInit() { + this.router.events.subscribe((evt) => { + if (!(evt instanceof NavigationEnd)) { + return; + } + window.scrollTo(0, 0); + }); + } +} diff --git a/src/app/app.module.ts b/src/app/app.module.ts new file mode 100644 index 0000000..3cd3bab --- /dev/null +++ b/src/app/app.module.ts @@ -0,0 +1,71 @@ +import { BrowserModule } from '@angular/platform-browser'; +import { NgModule } from '@angular/core'; +import { LocationStrategy, HashLocationStrategy } from '@angular/common'; + +import { PerfectScrollbarModule } from 'ngx-perfect-scrollbar'; +import { PERFECT_SCROLLBAR_CONFIG } from 'ngx-perfect-scrollbar'; +import { PerfectScrollbarConfigInterface } from 'ngx-perfect-scrollbar'; + +const DEFAULT_PERFECT_SCROLLBAR_CONFIG: PerfectScrollbarConfigInterface = { + suppressScrollX: true +}; + +import { AppComponent } from './app.component'; + +// Import containers +import { DefaultLayoutComponent } from './containers'; + +import { P404Component } from './views/error/404.component'; +import { P500Component } from './views/error/500.component'; +import { LoginComponent } from './views/login/login.component'; +import { RegisterComponent } from './views/register/register.component'; + +const APP_CONTAINERS = [ + DefaultLayoutComponent +]; + +import { + AppAsideModule, + AppBreadcrumbModule, + AppHeaderModule, + AppFooterModule, + AppSidebarModule, +} from '@coreui/angular'; + +// Import routing module +import { AppRoutingModule } from './app.routing'; + +// Import 3rd party components +import { BsDropdownModule } from 'ngx-bootstrap/dropdown'; +import { TabsModule } from 'ngx-bootstrap/tabs'; +import { ChartsModule } from 'ng2-charts/ng2-charts'; + +@NgModule({ + imports: [ + BrowserModule, + AppRoutingModule, + AppAsideModule, + AppBreadcrumbModule.forRoot(), + AppFooterModule, + AppHeaderModule, + AppSidebarModule, + PerfectScrollbarModule, + BsDropdownModule.forRoot(), + TabsModule.forRoot(), + ChartsModule + ], + declarations: [ + AppComponent, + ...APP_CONTAINERS, + P404Component, + P500Component, + LoginComponent, + RegisterComponent + ], + providers: [{ + provide: LocationStrategy, + useClass: HashLocationStrategy + }], + bootstrap: [ AppComponent ] +}) +export class AppModule { } diff --git a/src/app/app.routing.ts b/src/app/app.routing.ts new file mode 100644 index 0000000..25d05e6 --- /dev/null +++ b/src/app/app.routing.ts @@ -0,0 +1,93 @@ +import { NgModule } from '@angular/core'; +import { Routes, RouterModule } from '@angular/router'; + +// Import Containers +import { DefaultLayoutComponent } from './containers'; + +import { P404Component } from './views/error/404.component'; +import { P500Component } from './views/error/500.component'; +import { LoginComponent } from './views/login/login.component'; +import { RegisterComponent } from './views/register/register.component'; + +export const routes: Routes = [ + { + path: '', + redirectTo: 'dashboard', + pathMatch: 'full', + }, + { + path: '404', + component: P404Component, + data: { + title: 'Page 404' + } + }, + { + path: '500', + component: P500Component, + data: { + title: 'Page 500' + } + }, + { + path: 'login', + component: LoginComponent, + data: { + title: 'Login Page' + } + }, + { + path: 'register', + component: RegisterComponent, + data: { + title: 'Register Page' + } + }, + { + path: '', + component: DefaultLayoutComponent, + data: { + title: 'Home' + }, + children: [ + { + path: 'base', + loadChildren: './views/base/base.module#BaseModule' + }, + { + path: 'buttons', + loadChildren: './views/buttons/buttons.module#ButtonsModule' + }, + { + path: 'charts', + loadChildren: './views/chartjs/chartjs.module#ChartJSModule' + }, + { + path: 'dashboard', + loadChildren: './views/dashboard/dashboard.module#DashboardModule' + }, + { + path: 'icons', + loadChildren: './views/icons/icons.module#IconsModule' + }, + { + path: 'notifications', + loadChildren: './views/notifications/notifications.module#NotificationsModule' + }, + { + path: 'theme', + loadChildren: './views/theme/theme.module#ThemeModule' + }, + { + path: 'widgets', + loadChildren: './views/widgets/widgets.module#WidgetsModule' + } + ] + } +]; + +@NgModule({ + imports: [ RouterModule.forRoot(routes) ], + exports: [ RouterModule ] +}) +export class AppRoutingModule {} diff --git a/src/app/containers/default-layout/default-layout.component.html b/src/app/containers/default-layout/default-layout.component.html new file mode 100644 index 0000000..87d8a05 --- /dev/null +++ b/src/app/containers/default-layout/default-layout.component.html @@ -0,0 +1,328 @@ + + + + +
+ + + + + +
+ + +
+ +
+
+ + + + +
+
Today
+
+
+ admin@bootstrapmaster.com +
+
Meeting with + Lucas +
+ +   1 - 3pm + +   Palo Alto, CA +
+
+
+ admin@bootstrapmaster.com +
+
Skype with + Megan +
+ +   4 - 5pm + +   On-line +
+
Tomorrow
+
+
New UI Project - + deadline +
+ +   10 - 11pm + +   creativeLabs HQ +
+
+ admin@bootstrapmaster.com +
+
+ admin@bootstrapmaster.com +
+
+ admin@bootstrapmaster.com +
+
+ admin@bootstrapmaster.com +
+
+ admin@bootstrapmaster.com +
+
+
+
+
+ #10 Startups.Garden Meetup
+ +   1 - 3pm + +   Palo Alto, CA +
+
+
+ Team meeting +
+ +   4 - 6pm + +   creativeLabs HQ +
+
+ admin@bootstrapmaster.com +
+
+ admin@bootstrapmaster.com +
+
+ admin@bootstrapmaster.com +
+
+ admin@bootstrapmaster.com +
+
+ admin@bootstrapmaster.com +
+
+ admin@bootstrapmaster.com +
+
+ admin@bootstrapmaster.com +
+
+
+
+
+ + +
+
+
+
+ admin@bootstrapmaster.com + +
+
+
+ Lukasz Holeczek + 1:52 PM +
+
Lorem ipsum dolor sit amet
+ Lorem ipsum dolor sit amet, consectetur adipisicing elit, sed do eiusmod tempor incididunt... +
+
+
+
+
+ admin@bootstrapmaster.com + +
+
+
+ Lukasz Holeczek + 1:52 PM +
+
Lorem ipsum dolor sit amet
+ Lorem ipsum dolor sit amet, consectetur adipisicing elit, sed do eiusmod tempor incididunt... +
+
+
+
+
+ admin@bootstrapmaster.com + +
+
+
+ Lukasz Holeczek + 1:52 PM +
+
Lorem ipsum dolor sit amet
+ Lorem ipsum dolor sit amet, consectetur adipisicing elit, sed do eiusmod tempor incididunt... +
+
+
+
+
+ admin@bootstrapmaster.com + +
+
+
+ Lukasz Holeczek + 1:52 PM +
+
Lorem ipsum dolor sit amet
+ Lorem ipsum dolor sit amet, consectetur adipisicing elit, sed do eiusmod tempor incididunt... +
+
+
+
+
+ admin@bootstrapmaster.com + +
+
+
+ Lukasz Holeczek + 1:52 PM +
+
Lorem ipsum dolor sit amet
+ Lorem ipsum dolor sit amet, consectetur adipisicing elit, sed do eiusmod tempor incididunt... +
+
+
+ + +
+
Settings
+
+
+ Option 1 + +
+
+ Lorem ipsum dolor sit amet, consectetur adipisicing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua. +
+
+
+
+ Option 2 + +
+
+ Lorem ipsum dolor sit amet, consectetur adipisicing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua. +
+
+
+
+ Option 3 + +
+
+
+
+ Option 4 + +
+
+
+
System Utilization
+
CPU Usage
+
+
+
+ 348 Processes. 1/4 Cores. +
Memory Usage
+
+
+
+ 11444GB/16384MB +
SSD 1 Usage
+
+
+
+ 243GB/256GB +
SSD 2 Usage
+
+
+
+ 25GB/256GB +
+
+
+
+
+ + CoreUI © 2018 creativeLabs. + Powered by CoreUI for Angular + diff --git a/src/app/containers/default-layout/default-layout.component.ts b/src/app/containers/default-layout/default-layout.component.ts new file mode 100644 index 0000000..0026e92 --- /dev/null +++ b/src/app/containers/default-layout/default-layout.component.ts @@ -0,0 +1,23 @@ +import { Component, Input } from '@angular/core'; +import { navItems } from './../../_nav'; + +@Component({ + selector: 'app-dashboard', + templateUrl: './default-layout.component.html' +}) +export class DefaultLayoutComponent { + public navItems = navItems; + public sidebarMinimized = true; + private changes: MutationObserver; + public element: HTMLElement = document.body; + constructor() { + + this.changes = new MutationObserver((mutations) => { + this.sidebarMinimized = document.body.classList.contains('sidebar-minimized'); + }); + + this.changes.observe(this.element, { + attributes: true + }); + } +} diff --git a/src/app/containers/default-layout/index.ts b/src/app/containers/default-layout/index.ts new file mode 100644 index 0000000..5d0bf70 --- /dev/null +++ b/src/app/containers/default-layout/index.ts @@ -0,0 +1 @@ +export * from './default-layout.component'; diff --git a/src/app/containers/index.ts b/src/app/containers/index.ts new file mode 100644 index 0000000..473078d --- /dev/null +++ b/src/app/containers/index.ts @@ -0,0 +1 @@ +export * from './default-layout'; diff --git a/src/app/views/base/base-routing.module.ts b/src/app/views/base/base-routing.module.ts new file mode 100644 index 0000000..e8d46b6 --- /dev/null +++ b/src/app/views/base/base-routing.module.ts @@ -0,0 +1,108 @@ +import { NgModule } from '@angular/core'; +import { Routes, RouterModule } from '@angular/router'; + +import { CardsComponent } from './cards.component'; +import { FormsComponent } from './forms.component'; +import { SwitchesComponent } from './switches.component'; +import { TablesComponent } from './tables.component'; +import { TabsComponent } from './tabs.component'; +import { CarouselsComponent } from './carousels.component'; +import { CollapsesComponent } from './collapses.component'; +import { PaginationsComponent } from './paginations.component'; +import {PopoversComponent} from './popovers.component'; +import {ProgressComponent} from './progress.component'; +import {TooltipsComponent} from './tooltips.component'; + +const routes: Routes = [ + { + path: '', + data: { + title: 'Base' + }, + children: [ + { + path: 'cards', + component: CardsComponent, + data: { + title: 'Cards' + } + }, + { + path: 'forms', + component: FormsComponent, + data: { + title: 'Forms' + } + }, + { + path: 'switches', + component: SwitchesComponent, + data: { + title: 'Switches' + } + }, + { + path: 'tables', + component: TablesComponent, + data: { + title: 'Tables' + } + }, + { + path: 'tabs', + component: TabsComponent, + data: { + title: 'Tabs' + } + }, + { + path: 'carousels', + component: CarouselsComponent, + data: { + title: 'Carousels' + } + }, + { + path: 'collapses', + component: CollapsesComponent, + data: { + title: 'Collapses' + } + }, + { + path: 'paginations', + component: PaginationsComponent, + data: { + title: 'Pagination' + } + }, + { + path: 'popovers', + component: PopoversComponent, + data: { + title: 'Popover' + } + }, + { + path: 'progress', + component: ProgressComponent, + data: { + title: 'Progress' + } + }, + { + path: 'tooltips', + component: TooltipsComponent, + data: { + title: 'Tooltips' + } + } + ] + } +]; + +@NgModule({ + imports: [RouterModule.forChild(routes)], + exports: [RouterModule] +}) +export class BaseRoutingModule {} diff --git a/src/app/views/base/base.module.ts b/src/app/views/base/base.module.ts new file mode 100644 index 0000000..e2d700b --- /dev/null +++ b/src/app/views/base/base.module.ts @@ -0,0 +1,77 @@ +// Angular +import { CommonModule } from '@angular/common'; +import { FormsModule } from '@angular/forms'; +import { NgModule } from '@angular/core'; + +import { CardsComponent } from './cards.component'; + +// Forms Component +import { FormsComponent } from './forms.component'; + +import { SwitchesComponent } from './switches.component'; +import { TablesComponent } from './tables.component'; + +// Tabs Component +import { TabsModule } from 'ngx-bootstrap/tabs'; +import { TabsComponent } from './tabs.component'; + +// Carousel Component +import { CarouselModule } from 'ngx-bootstrap/carousel'; +import { CarouselsComponent } from './carousels.component'; + +// Collapse Component +import { CollapseModule } from 'ngx-bootstrap/collapse'; +import { CollapsesComponent } from './collapses.component'; + +// Dropdowns Component +import { BsDropdownModule } from 'ngx-bootstrap/dropdown'; + +// Pagination Component +import { PaginationModule } from 'ngx-bootstrap/pagination'; +import { PopoversComponent } from './popovers.component'; + +// Popover Component +import { PopoverModule } from 'ngx-bootstrap/popover'; +import { PaginationsComponent } from './paginations.component'; + +// Progress Component +import { ProgressbarModule } from 'ngx-bootstrap/progressbar'; +import { ProgressComponent } from './progress.component'; + +// Tooltip Component +import { TooltipModule } from 'ngx-bootstrap/tooltip'; +import { TooltipsComponent } from './tooltips.component'; + + +// Components Routing +import { BaseRoutingModule } from './base-routing.module'; + +@NgModule({ + imports: [ + CommonModule, + FormsModule, + BaseRoutingModule, + BsDropdownModule.forRoot(), + TabsModule, + CarouselModule.forRoot(), + CollapseModule.forRoot(), + PaginationModule.forRoot(), + PopoverModule.forRoot(), + ProgressbarModule.forRoot(), + TooltipModule.forRoot() + ], + declarations: [ + CardsComponent, + FormsComponent, + SwitchesComponent, + TablesComponent, + TabsComponent, + CarouselsComponent, + CollapsesComponent, + PaginationsComponent, + PopoversComponent, + ProgressComponent, + TooltipsComponent + ] +}) +export class BaseModule { } diff --git a/src/app/views/base/cards.component.html b/src/app/views/base/cards.component.html new file mode 100644 index 0000000..36e9be5 --- /dev/null +++ b/src/app/views/base/cards.component.html @@ -0,0 +1,320 @@ +
+
+
+
+
+ Card title +
+
+ Lorem ipsum dolor sit amet, consectetuer adipiscing elit, sed diam nonummy nibh euismod tincidunt ut laoreet dolore magna aliquam erat volutpat. Ut wisi enim ad minim veniam, quis nostrud exerci tation ullamcorper suscipit lobortis nisl ut aliquip ex ea commodo consequat. +
+
+
+
+
+
+ Lorem ipsum dolor sit amet, consectetuer adipiscing elit, sed diam nonummy nibh euismod tincidunt ut laoreet dolore magna aliquam erat volutpat. Ut wisi enim ad minim veniam, quis nostrud exerci tation ullamcorper suscipit lobortis nisl ut aliquip ex ea commodo consequat. +
+ +
+
+
+
+
+ Card with icon +
+
+ Lorem ipsum dolor sit amet, consectetuer adipiscing elit, sed diam nonummy nibh euismod tincidunt ut laoreet dolore magna aliquam erat volutpat. Ut wisi enim ad minim veniam, quis nostrud exerci tation ullamcorper suscipit lobortis nisl ut aliquip ex ea commodo consequat. +
+
+
+
+
+
+ Card with switch + +
+
+ Lorem ipsum dolor sit amet, consectetuer adipiscing elit, sed diam nonummy nibh euismod tincidunt ut laoreet dolore magna aliquam erat volutpat. Ut wisi enim ad minim veniam, quis nostrud exerci tation ullamcorper suscipit lobortis nisl ut aliquip ex ea commodo consequat. +
+
+
+
+
+
+ Card with label + Success +
+
+ Lorem ipsum dolor sit amet, consectetuer adipiscing elit, sed diam nonummy nibh euismod tincidunt ut laoreet dolore magna aliquam erat volutpat. Ut wisi enim ad minim veniam, quis nostrud exerci tation ullamcorper suscipit lobortis nisl ut aliquip ex ea commodo consequat. +
+
+
+
+
+
+ Card with label + 42 +
+
+ Lorem ipsum dolor sit amet, consectetuer adipiscing elit, sed diam nonummy nibh euismod tincidunt ut laoreet dolore magna aliquam erat volutpat. Ut wisi enim ad minim veniam, quis nostrud exerci tation ullamcorper suscipit lobortis nisl ut aliquip ex ea commodo consequat. +
+
+
+
+
+
+
+
+ Card outline +
+
+ Lorem ipsum dolor sit amet, consectetuer adipiscing elit, sed diam nonummy nibh euismod tincidunt ut laoreet dolore magna aliquam erat volutpat. Ut wisi enim ad minim veniam, quis nostrud exerci tation ullamcorper suscipit lobortis nisl ut aliquip ex ea commodo consequat. +
+
+
+
+
+
+ Card outline +
+
+ Lorem ipsum dolor sit amet, consectetuer adipiscing elit, sed diam nonummy nibh euismod tincidunt ut laoreet dolore magna aliquam erat volutpat. Ut wisi enim ad minim veniam, quis nostrud exerci tation ullamcorper suscipit lobortis nisl ut aliquip ex ea commodo consequat. +
+
+
+
+
+
+ Card outline +
+
+ Lorem ipsum dolor sit amet, consectetuer adipiscing elit, sed diam nonummy nibh euismod tincidunt ut laoreet dolore magna aliquam erat volutpat. Ut wisi enim ad minim veniam, quis nostrud exerci tation ullamcorper suscipit lobortis nisl ut aliquip ex ea commodo consequat. +
+
+
+
+
+
+ Card outline +
+
+ Lorem ipsum dolor sit amet, consectetuer adipiscing elit, sed diam nonummy nibh euismod tincidunt ut laoreet dolore magna aliquam erat volutpat. Ut wisi enim ad minim veniam, quis nostrud exerci tation ullamcorper suscipit lobortis nisl ut aliquip ex ea commodo consequat. +
+
+
+
+
+
+ Card outline +
+
+ Lorem ipsum dolor sit amet, consectetuer adipiscing elit, sed diam nonummy nibh euismod tincidunt ut laoreet dolore magna aliquam erat volutpat. Ut wisi enim ad minim veniam, quis nostrud exerci tation ullamcorper suscipit lobortis nisl ut aliquip ex ea commodo consequat. +
+
+
+
+
+
+ Card outline +
+
+ Lorem ipsum dolor sit amet, consectetuer adipiscing elit, sed diam nonummy nibh euismod tincidunt ut laoreet dolore magna aliquam erat volutpat. Ut wisi enim ad minim veniam, quis nostrud exerci tation ullamcorper suscipit lobortis nisl ut aliquip ex ea commodo consequat. +
+
+
+
+ +
+
+
+
+ Card with accent +
+
+ Lorem ipsum dolor sit amet, consectetuer adipiscing elit, sed diam nonummy nibh euismod tincidunt ut laoreet dolore magna aliquam erat volutpat. Ut wisi enim ad minim veniam, quis nostrud exerci tation ullamcorper suscipit lobortis nisl ut aliquip ex ea commodo consequat. +
+
+
+
+
+
+ Card with accent +
+
+ Lorem ipsum dolor sit amet, consectetuer adipiscing elit, sed diam nonummy nibh euismod tincidunt ut laoreet dolore magna aliquam erat volutpat. Ut wisi enim ad minim veniam, quis nostrud exerci tation ullamcorper suscipit lobortis nisl ut aliquip ex ea commodo consequat. +
+
+
+
+
+
+ Card with accent +
+
+ Lorem ipsum dolor sit amet, consectetuer adipiscing elit, sed diam nonummy nibh euismod tincidunt ut laoreet dolore magna aliquam erat volutpat. Ut wisi enim ad minim veniam, quis nostrud exerci tation ullamcorper suscipit lobortis nisl ut aliquip ex ea commodo consequat. +
+
+
+
+
+
+ Card with accent +
+
+ Lorem ipsum dolor sit amet, consectetuer adipiscing elit, sed diam nonummy nibh euismod tincidunt ut laoreet dolore magna aliquam erat volutpat. Ut wisi enim ad minim veniam, quis nostrud exerci tation ullamcorper suscipit lobortis nisl ut aliquip ex ea commodo consequat. +
+
+
+
+
+
+ Card with accent +
+
+ Lorem ipsum dolor sit amet, consectetuer adipiscing elit, sed diam nonummy nibh euismod tincidunt ut laoreet dolore magna aliquam erat volutpat. Ut wisi enim ad minim veniam, quis nostrud exerci tation ullamcorper suscipit lobortis nisl ut aliquip ex ea commodo consequat. +
+
+
+
+
+
+ Card with accent +
+
+ Lorem ipsum dolor sit amet, consectetuer adipiscing elit, sed diam nonummy nibh euismod tincidunt ut laoreet dolore magna aliquam erat volutpat. Ut wisi enim ad minim veniam, quis nostrud exerci tation ullamcorper suscipit lobortis nisl ut aliquip ex ea commodo consequat. +
+
+
+
+
+
+
+
+
+

Lorem ipsum dolor sit amet, consectetur adipiscing elit. Integer posuere erat a ante.

+
Someone famous in + Source Title +
+
+
+
+
+
+
+
+
+

Lorem ipsum dolor sit amet, consectetur adipiscing elit. Integer posuere erat a ante.

+
Someone famous in + Source Title +
+
+
+
+
+
+
+
+
+

Lorem ipsum dolor sit amet, consectetur adipiscing elit. Integer posuere erat a ante.

+
Someone famous in + Source Title +
+
+
+
+
+
+
+
+
+

Lorem ipsum dolor sit amet, consectetur adipiscing elit. Integer posuere erat a ante.

+
Someone famous in + Source Title +
+
+
+
+
+
+
+
+
+

Lorem ipsum dolor sit amet, consectetur adipiscing elit. Integer posuere erat a ante.

+
Someone famous in + Source Title +
+
+
+
+
+
+
+
+
+

Lorem ipsum dolor sit amet, consectetur adipiscing elit. Integer posuere erat a ante.

+
Someone famous in + Source Title +
+
+
+
+
+
+
+
+
+
+ Card title +
+
+ Lorem ipsum dolor sit amet, consectetuer adipiscing elit, sed diam nonummy nibh euismod tincidunt ut laoreet dolore magna aliquam erat volutpat. Ut wisi enim ad minim veniam, quis nostrud exerci tation ullamcorper suscipit lobortis nisl ut aliquip ex ea commodo consequat. +
+
+
+
+
+
+ Card title +
+
+ Lorem ipsum dolor sit amet, consectetuer adipiscing elit, sed diam nonummy nibh euismod tincidunt ut laoreet dolore magna aliquam erat volutpat. Ut wisi enim ad minim veniam, quis nostrud exerci tation ullamcorper suscipit lobortis nisl ut aliquip ex ea commodo consequat. +
+
+
+
+
+
+ Card title +
+
+ Lorem ipsum dolor sit amet, consectetuer adipiscing elit, sed diam nonummy nibh euismod tincidunt ut laoreet dolore magna aliquam erat volutpat. Ut wisi enim ad minim veniam, quis nostrud exerci tation ullamcorper suscipit lobortis nisl ut aliquip ex ea commodo consequat. +
+
+
+
+
+
+ Card title +
+
+ Lorem ipsum dolor sit amet, consectetuer adipiscing elit, sed diam nonummy nibh euismod tincidunt ut laoreet dolore magna aliquam erat volutpat. Ut wisi enim ad minim veniam, quis nostrud exerci tation ullamcorper suscipit lobortis nisl ut aliquip ex ea commodo consequat. +
+
+
+
+
+
+ Card title +
+
+ Lorem ipsum dolor sit amet, consectetuer adipiscing elit, sed diam nonummy nibh euismod tincidunt ut laoreet dolore magna aliquam erat volutpat. Ut wisi enim ad minim veniam, quis nostrud exerci tation ullamcorper suscipit lobortis nisl ut aliquip ex ea commodo consequat. +
+
+
+
+
diff --git a/src/app/views/base/cards.component.ts b/src/app/views/base/cards.component.ts new file mode 100644 index 0000000..466a6d5 --- /dev/null +++ b/src/app/views/base/cards.component.ts @@ -0,0 +1,10 @@ +import { Component } from '@angular/core'; + +@Component({ + templateUrl: 'cards.component.html' +}) +export class CardsComponent { + + constructor() { } + +} diff --git a/src/app/views/base/carousels.component.html b/src/app/views/base/carousels.component.html new file mode 100644 index 0000000..828d241 --- /dev/null +++ b/src/app/views/base/carousels.component.html @@ -0,0 +1,137 @@ +
+
+
+
+
+ Bootstrap Carousel + +
+
+ + + First slide + + + Second slide + + + Third slide + + +
+
+
+
+
+
+ Carousel + optional captions +
+
+ + + First slide + + + + Second slide + + + + Third slide + + + +
+
+
+
+
+
+
+
+ Carousel + configuring defaults +
+
+ + + First slide + + + + Second slide + + + + Third slide + + + +
+
+
+
+
+
+ Carousel + dynamic slides +
+
+ + + image slide + + + + +
+
+ + + +
+
+
+ +
+ + Interval, in milliseconds (Enter a negative number or 0 to stop the interval.): + +
+
+
+
+
+
diff --git a/src/app/views/base/carousels.component.ts b/src/app/views/base/carousels.component.ts new file mode 100644 index 0000000..0e4c8c9 --- /dev/null +++ b/src/app/views/base/carousels.component.ts @@ -0,0 +1,33 @@ +import { Component } from '@angular/core'; +import { CarouselConfig } from 'ngx-bootstrap/carousel'; + +@Component({ + templateUrl: 'carousels.component.html', providers: [ + { provide: CarouselConfig, useValue: { interval: 1500, noPause: true } } + ] +}) +export class CarouselsComponent { + + myInterval: number = 6000; + slides: any[] = []; + activeSlideIndex: number = 0; + noWrapSlides: boolean = false; + + constructor() { + for (let i = 0; i < 4; i++) { + this.addSlide(); + } + } + + addSlide(): void { + this.slides.push({ + image: `https://loremflickr.com/900/500/sailing?random=${this.slides.length % 8 + 1}/` + }); + } + + removeSlide(index?: number): void { + const toRemove = index ? index : this.activeSlideIndex; + this.slides.splice(toRemove, 1); + } + +} diff --git a/src/app/views/base/collapses.component.html b/src/app/views/base/collapses.component.html new file mode 100644 index 0000000..41aecf4 --- /dev/null +++ b/src/app/views/base/collapses.component.html @@ -0,0 +1,26 @@ +
+
+
+ Bootstrap Collapse + +
+
+

+ Lorem ipsum dolor sit amet, consectetuer adipiscing elit, sed diam nonummy nibh euismod tincidunt ut laoreet dolore magna aliquam erat volutpat. Ut wisi enim ad minim veniam, quis nostrud exerci tation ullamcorper suscipit lobortis nisl ut aliquip ex ea commodo + consequat. +

+
+ +
+
diff --git a/src/app/views/base/collapses.component.ts b/src/app/views/base/collapses.component.ts new file mode 100644 index 0000000..0cb4356 --- /dev/null +++ b/src/app/views/base/collapses.component.ts @@ -0,0 +1,20 @@ +import { Component } from '@angular/core'; + +@Component({ + templateUrl: 'collapses.component.html' +}) +export class CollapsesComponent { + + constructor() { } + + isCollapsed: boolean = false; + + collapsed(event: any): void { + // console.log(event); + } + + expanded(event: any): void { + // console.log(event); + } + +} diff --git a/src/app/views/base/forms.component.html b/src/app/views/base/forms.component.html new file mode 100644 index 0000000..6bcedac --- /dev/null +++ b/src/app/views/base/forms.component.html @@ -0,0 +1,1064 @@ +
+
+
+
+
+ Credit Card + Form +
+
+
+
+
+ + +
+
+
+
+
+
+ + +
+
+
+
+
+ + +
+
+ + +
+
+
+ + +
+
+
+
+
+
+
+
+
+ Company + Form +
+
+
+ + +
+
+ + +
+
+ + +
+
+
+ + +
+
+ + +
+
+
+ + +
+
+
+
+
+
+
+
+
+ Basic Form Elements +
+
+
+
+ +
+

Username

+
+
+
+ +
+ + This is a help text +
+
+
+ +
+ + Please enter your email +
+
+
+ +
+ + Please enter a complex password +
+
+
+ +
+ +
+
+
+ +
+ +
+
+
+ +
+ +
+
+
+ +
+ +
+
+
+ +
+ +
+
+
+ +
+ +
+
+
+ +
+ +
+
+
+ +
+
+ + +
+
+ + +
+
+ + +
+
+
+
+ +
+
+ + +
+
+ + +
+
+ + +
+
+
+
+ +
+
+ + +
+
+ + +
+
+ + +
+
+
+
+ +
+
+ + +
+
+ + +
+
+ + +
+
+
+
+ +
+ +
+
+
+ +
+ +
+
+
+
+ +
+
+
+ Inline Form +
+
+
+
+ + +
+
+ + +
+
+
+ +
+
+
+
+
+ Horizontal Form +
+
+
+
+ +
+ + Please enter your email +
+
+
+ +
+ + Please enter your password +
+
+
+
+ +
+
+
+ Normal Form +
+
+
+
+ + + Please enter your email +
+
+ + + Please enter your password +
+
+
+ +
+
+
+ Input + Grid +
+
+
+
+
+ +
+
+
+
+ +
+
+
+
+ +
+
+
+
+ +
+
+
+
+ +
+
+
+
+ +
+
+
+
+ +
+
+
+
+ +
+
+
+
+ +
+
+
+
+ +
+
+
+
+ +
+
+
+ Input + Sizes +
+
+
+
+ +
+ +
+
+
+ +
+ +
+
+
+ +
+ +
+
+
+
+ +
+
+
+
+
+
+
+ Validation states Form +
+
+
+
+ + +
+ Input is valid. +
+
+
+ + +
+ Please provide a valid information. +
+
+
+
+
+
+
+
+
+ Validation was-validated +
+
+
+
+ + +
+ Looks good! +
+
+
+ + +
+ Input is valid. +
+
+ Please provide a valid information. +
+
+
+
+
+
+
+
+
+
+
+ Icon/Text Groups +
+
+
+
+
+
+
+ +
+ +
+
+
+
+
+
+ +
+ +
+
+
+
+
+
+
+
+ +
+ +
+ .00 +
+
+
+
+
+
+ +
+
+
+
+
+ Buttons Groups +
+
+
+
+
+
+ + + + +
+
+
+
+
+
+ + + + +
+
+
+
+
+
+ + + + + + + +
+
+
+
+
+ +
+
+
+
+
+ Dropdowns Groups +
+
+ +
+
+
+
+ + +
+
+
+
+
+
+ + +
+
+
+
+
+
+
+ + + +
+ + +
+
+
+
+
+ +
+
+
+
+
+
+
+ Use the grid for big devices! + + .col-lg-* + .col-md-* + .col-sm-* + +
+
+
+
+
+ +
+
+ +
+
+
+
+ +
+
+ +
+
+
+
+ +
+
+ +
+
+
+
+ +
+
+ +
+
+
+
+ +
+
+ +
+
+
+
+ +
+
+
+
+
+ Input Grid for small devices! + + .col-* + +
+
+
+
+
+ +
+
+ +
+
+
+
+ +
+
+ +
+
+
+
+ +
+
+ +
+
+
+
+ +
+
+ +
+
+
+
+ +
+
+ +
+
+
+
+ +
+
+
+
+
+
+
+ Example Form +
+
+
+
+
+
+ Username +
+ +
+ +
+
+
+
+
+
+ Email +
+ +
+ +
+
+
+
+
+
+ Password +
+ +
+ +
+
+
+
+ +
+
+
+
+
+
+
+
+ Example Form append +
+
+
+
+
+ +
+ +
+
+
+
+
+ +
+ +
+
+
+
+
+ +
+ +
+
+
+
+ +
+
+
+
+
+
+
+
+ Example Form prepend +
+
+
+
+
+
+ +
+ +
+
+
+
+
+ +
+ +
+
+
+
+
+ +
+ +
+
+
+ +
+
+
+
+
+
+ +
+
+
+
+ Form Elements +
+ + + +
+
+
+
+
+ +
+
+
+ @ +
+ +
+

Here's some help text

+
+
+
+ +
+
+ +
+ .00 +
+
+ Here's more help text +
+
+
+ +
+
+
+ $ +
+ +
+ .00 +
+
+
+
+
+ +
+
+ + + + +
+
+
+
+ +
+
+ + + + + +
+
+
+
+ + +
+
+
+
+
+
+
diff --git a/src/app/views/base/forms.component.ts b/src/app/views/base/forms.component.ts new file mode 100644 index 0000000..9a78d17 --- /dev/null +++ b/src/app/views/base/forms.component.ts @@ -0,0 +1,26 @@ +import { Component } from '@angular/core'; + +@Component({ + templateUrl: 'forms.component.html' +}) +export class FormsComponent { + + constructor() { } + + isCollapsed: boolean = false; + iconCollapse: string = 'icon-arrow-up'; + + collapsed(event: any): void { + // console.log(event); + } + + expanded(event: any): void { + // console.log(event); + } + + toggleCollapse(): void { + this.isCollapsed = !this.isCollapsed; + this.iconCollapse = this.isCollapsed ? 'icon-arrow-down' : 'icon-arrow-up'; + } + +} diff --git a/src/app/views/base/paginations.component.html b/src/app/views/base/paginations.component.html new file mode 100644 index 0000000..7448674 --- /dev/null +++ b/src/app/views/base/paginations.component.html @@ -0,0 +1,83 @@ +
+
+
+ Bootstrap Pagination + +
+
+
+
+ +
+
+ +
+
+ +
+
+ +
+
+
The selected page no: {{currentPage}}/{{smallnumPages}}
+
+ +
+
+
+ Pagination states & limits +
+
+
+
+ +
+ +
+ +
+
+
Page: {{bigCurrentPage}} / {{numPages}}
+
+
+
+
+ Pager +
+
+
+
+ + +
+ +
+ + +
+
+
+
+
diff --git a/src/app/views/base/paginations.component.ts b/src/app/views/base/paginations.component.ts new file mode 100644 index 0000000..6139a24 --- /dev/null +++ b/src/app/views/base/paginations.component.ts @@ -0,0 +1,31 @@ +import { Component, Input, ViewEncapsulation } from '@angular/core'; + +@Component({ + templateUrl: 'paginations.component.html', + styles: ['.pager li.btn:active { box-shadow: none; }'], + encapsulation: ViewEncapsulation.None +}) +export class PaginationsComponent { + + constructor() { } + + totalItems: number = 64; + currentPage: number = 4; + smallnumPages: number = 0; + + maxSize: number = 5; + bigTotalItems: number = 675; + bigCurrentPage: number = 1; + numPages: number = 0; + + currentPager: number = 4; + + setPage(pageNo: number): void { + this.currentPage = pageNo; + } + + pageChanged(event: any): void { + console.log('Page changed to: ' + event.page); + console.log('Number items per page: ' + event.itemsPerPage); + } +} diff --git a/src/app/views/base/popovers.component.html b/src/app/views/base/popovers.component.html new file mode 100644 index 0000000..2aec611 --- /dev/null +++ b/src/app/views/base/popovers.component.html @@ -0,0 +1,161 @@ +
+
+
+ Bootstrap Popover + +
+
+ +
+
+
+
+ Popover + positioning +
+
+ + + + + + + + + +
+
+
+
+ Popover + focus trigger +
+
+ +
+
+
+
+ Popover + dynamic content +
+
+ + + Just another: {{content}} + +
+
+
+
+ Popover + dynamic HTML +
+
+ Here we go: +
+
+ +
+
+
+
+ Popover + append to body +
+
+
+
+ + +
+
+
+
+
+
+ Popover + custom triggers +
+
+ +
+
+
+
+ Popover + manual triggering +
+
+

+ + This text has attached popover + +

+ + +
+
+
diff --git a/src/app/views/base/popovers.component.ts b/src/app/views/base/popovers.component.ts new file mode 100644 index 0000000..ab2554d --- /dev/null +++ b/src/app/views/base/popovers.component.ts @@ -0,0 +1,17 @@ +import {Component, SecurityContext} from '@angular/core'; +import {DomSanitizer} from '@angular/platform-browser'; + + +@Component({ + templateUrl: 'popovers.component.html' +}) +export class PopoversComponent { + + constructor(sanitizer: DomSanitizer) { + this.html = sanitizer.sanitize(SecurityContext.HTML, this.html); + } + + title: string = 'Welcome word'; + content: string = 'Vivamus sagittis lacus vel augue laoreet rutrum faucibus.'; + html: string = `Never trust not sanitized HTML!!!`; +} diff --git a/src/app/views/base/progress.component.html b/src/app/views/base/progress.component.html new file mode 100644 index 0000000..fcbfdf5 --- /dev/null +++ b/src/app/views/base/progress.component.html @@ -0,0 +1,59 @@ +
+
+
+ Bootstrap Progress + +
+
+
+
+ +
+
+ 22% +
+
+ 166 / 200 +
+
+
+
+
+
+ Progress dynamic +
+
+ + {{dynamic}} / {{max}} + + + No animation + {{dynamic}}% + + Object (changes type based on value) + + {{type}} !!! Watch out !!! + +
+ +
+
+
+
+ Progress stacked +
+
+
+ +
+
+
+ +
+
+
+
diff --git a/src/app/views/base/progress.component.ts b/src/app/views/base/progress.component.ts new file mode 100644 index 0000000..2bcd8aa --- /dev/null +++ b/src/app/views/base/progress.component.ts @@ -0,0 +1,75 @@ +import {Component, OnDestroy} from '@angular/core'; + +@Component({ + templateUrl: 'progress.component.html' +}) +export class ProgressComponent implements OnDestroy { + + max: number = 200; + showWarning: boolean; + dynamic: number; + type: string; + + stacked: any[] = []; + + timer: any = null; + buttonCaption: string = 'Start'; + + constructor() { + this.random(); + this.randomStacked(); + } + + ngOnDestroy() { + if (this.timer) { + clearInterval(this.timer); + } + // console.log(`onDestroy`, this.timer); + } + + random(): void { + const value = Math.floor(Math.random() * 100 + 1); + let type: string; + + if (value < 25) { + type = 'success'; + } else if (value < 50) { + type = 'info'; + } else if (value < 75) { + type = 'warning'; + } else { + type = 'danger'; + } + + this.showWarning = type === 'danger' || type === 'warning'; + this.dynamic = value; + this.type = type; + + } + + randomStacked(): void { + const types = ['success', 'info', 'warning', 'danger']; + + this.stacked = []; + const n = Math.floor(Math.random() * 4 + 1); + for (let i = 0; i < n; i++) { + const index = Math.floor(Math.random() * 4); + const value = Math.floor(Math.random() * 27 + 3); + this.stacked.push({ + value, + type: types[index], + label: value + ' %' + }); + } + } + + randomize(): void { + if (this.timer) { + clearInterval(this.timer); + this.timer = null; + } else { + this.timer = setInterval(() => this.randomStacked(), 2000); + } + this.buttonCaption = this.timer ? 'Stop' : 'Start'; + } +} diff --git a/src/app/views/base/switches.component.html b/src/app/views/base/switches.component.html new file mode 100644 index 0000000..6d81289 --- /dev/null +++ b/src/app/views/base/switches.component.html @@ -0,0 +1,788 @@ +
+
+
+
+
+ 3d Switch +
+
+ +     + +     + +     + +     + +     + +
+
+
+
+
+
+ Switch default +
+
+ +     + +     + +     + +     + +     + +
+
+
+
+
+
+ Switch default - pills +
+
+ +     + +     + +     + +     + +     + +
+
+
+ +
+
+
+ Switch outline +
+
+ +     + +     + +     + +     + +     + +
+
+
+
+
+
+ Switch outline - pills +
+
+ +     + +     + +     + +     + +     + +
+
+
+
+
+
+ Switch outline alternative +
+
+ +     + +     + +     + +     + +     + +
+
+
+
+
+
+ Switch outline alternative - pills +
+
+ +     + +     + +     + +     + +     + +
+
+
+
+
+
+ Switch with text +
+
+ +     + +     + +     + +     + +     + +
+
+
+
+
+
+ Switch with text - pills +
+
+ +     + +     + +     + +     + +     + +
+
+
+
+
+
+ Switch with text outline +
+
+ + +     + +     + +     + +     + +     + +
+
+
+
+
+
+ Switch with text outline - pills +
+
+ +     + +     + +     + +     + +     + +
+
+
+
+
+
+ Switch with text outline alternative +
+
+ +     + +     + +     + +     + +     + +
+
+
+
+
+
+ Switch with text outline alternative - pills +
+
+ +     + +     + +     + +     + +     + +
+
+
+
+
+
+ Switch with icon +
+
+ +     + +     + +     + +     + +     + +
+
+
+
+
+
+ Switch with icon - pills +
+
+ +     + +     + +     + +     + +     + +
+
+
+
+
+
+ Switch with icon outline +
+
+ +     + +     + +     + +     + +     + +
+
+
+
+
+
+ Switch with icon outline - pills +
+
+ +     + +     + +     + +     + +     + +
+
+
+
+
+
+ Switch with icon outline alternative +
+
+ +     + +     + +     + +     + +     + +
+
+
+
+
+
+ Switch with icon outline alternative - pills +
+
+ +     + +     + +     + +     + +     + +
+
+
+
+
+
+ Sizes +
+
+ + + + + + + + + + + + + + + + + + + + + + + +
SizeExampleCSS Class
+ Large + + + + Add following class .switch-lg +
+ Normal + + + + - +
+ Small + + + + Add following class .switch-sm +
+
+
+
+
+
diff --git a/src/app/views/base/switches.component.ts b/src/app/views/base/switches.component.ts new file mode 100644 index 0000000..4e51918 --- /dev/null +++ b/src/app/views/base/switches.component.ts @@ -0,0 +1,10 @@ +import { Component } from '@angular/core'; + +@Component({ + templateUrl: 'switches.component.html' +}) +export class SwitchesComponent { + + constructor() { } + +} diff --git a/src/app/views/base/tables.component.html b/src/app/views/base/tables.component.html new file mode 100644 index 0000000..7be4124 --- /dev/null +++ b/src/app/views/base/tables.component.html @@ -0,0 +1,373 @@ +
+
+
+
+
+ Simple Table +
+
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
UsernameDate registeredRoleStatus
Samppa Nori2012/01/01Member + Active +
Estavan Lykos2012/02/01Staff + Banned +
Chetan Mohamed2012/02/01Admin + Inactive +
Derick Maximinus2012/03/01Member + Pending +
Friderik Dávid2012/01/21Staff + Active +
+ +
+
+
+ +
+
+
+ Striped Table +
+
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
UsernameDate registeredRoleStatus
Yiorgos Avraamu2012/01/01Member + Active +
Avram Tarasios2012/02/01Staff + Banned +
Quintin Ed2012/02/01Admin + Inactive +
Enéas Kwadwo2012/03/01Member + Pending +
Agapetus Tadeáš2012/01/21Staff + Active +
+ +
+
+
+ +
+ +
+
+
+
+ Condensed Table +
+
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
UsernameDate registeredRoleStatus
Carwyn Fachtna2012/01/01Member + Active +
Nehemiah Tatius2012/02/01Staff + Banned +
Ebbe Gemariah2012/02/01Admin + Inactive +
Eustorgios Amulius2012/03/01Member + Pending +
Leopold Gáspár2012/01/21Staff + Active +
+ +
+
+
+ +
+
+
+ Bordered Table +
+
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
UsernameDate registeredRoleStatus
Pompeius René2012/01/01Member + Active +
Paĉjo Jadon2012/02/01Staff + Banned +
Micheal Mercurius2012/02/01Admin + Inactive +
Ganesha Dubhghall2012/03/01Member + Pending +
Hiroto Šimun2012/01/21Staff + Active +
+ +
+
+
+ +
+ +
+
+
+
+ Combined All Table +
+
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
UsernameDate registeredRoleStatus
Vishnu Serghei2012/01/01Member + Active +
Zbyněk Phoibos2012/02/01Staff + Banned +
Einar Randall2012/02/01Admin + Inactive +
Félix Troels2012/03/01Member + Pending +
Aulus Agmundr2012/01/21Staff + Active +
+ +
+
+
+ +
+ +
diff --git a/src/app/views/base/tables.component.ts b/src/app/views/base/tables.component.ts new file mode 100644 index 0000000..b15b354 --- /dev/null +++ b/src/app/views/base/tables.component.ts @@ -0,0 +1,10 @@ +import { Component } from '@angular/core'; + +@Component({ + templateUrl: 'tables.component.html' +}) +export class TablesComponent { + + constructor() { } + +} diff --git a/src/app/views/base/tabs.component.html b/src/app/views/base/tabs.component.html new file mode 100644 index 0000000..5a58279 --- /dev/null +++ b/src/app/views/base/tabs.component.html @@ -0,0 +1,69 @@ +
+
+
+ + + + 1. Lorem ipsum dolor sit amet, consectetur adipisicing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua. Ut enim ad minim veniam, quis nostrud exercitation ullamco laboris nisi ut aliquip ex ea commodo consequat. Duis aute irure dolor in reprehenderit in voluptate velit esse cillum dolore eu fugiat nulla pariatur. Excepteur sint occaecat cupidatat non proident, sunt in culpa qui officia deserunt mollit anim id est laborum. + + + 2. Lorem ipsum dolor sit amet, consectetur adipisicing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua. Ut enim ad minim veniam, quis nostrud exercitation ullamco laboris nisi ut aliquip ex ea commodo consequat. Duis aute irure dolor in reprehenderit in voluptate velit esse cillum dolore eu fugiat nulla pariatur. Excepteur sint occaecat cupidatat non proident, sunt in culpa qui officia deserunt mollit anim id est laborum. + + + 3. Lorem ipsum dolor sit amet, consectetur adipisicing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua. Ut enim ad minim veniam, quis nostrud exercitation ullamco laboris nisi ut aliquip ex ea commodo consequat. Duis aute irure dolor in reprehenderit in voluptate velit esse cillum dolore eu fugiat nulla pariatur. Excepteur sint occaecat cupidatat non proident, sunt in culpa qui officia deserunt mollit anim id est laborum. + + +
+
+ + + + + 2. Lorem ipsum dolor sit amet, consectetur adipisicing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua. Ut enim ad minim veniam, quis nostrud exercitation ullamco laboris nisi ut aliquip ex ea commodo consequat. Duis aute irure dolor in reprehenderit in voluptate velit esse cillum dolore eu fugiat nulla pariatur. Excepteur sint occaecat cupidatat non proident, sunt in culpa qui officia deserunt mollit anim id est laborum. + + + + 3. Lorem ipsum dolor sit amet, consectetur adipisicing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua. Ut enim ad minim veniam, quis nostrud exercitation ullamco laboris nisi ut aliquip ex ea commodo consequat. Duis aute irure dolor in reprehenderit in voluptate velit esse cillum dolore eu fugiat nulla pariatur. Excepteur sint occaecat cupidatat non proident, sunt in culpa qui officia deserunt mollit anim id est laborum. + + + + 4. Lorem ipsum dolor sit amet, consectetur adipisicing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua. Ut enim ad minim veniam, quis nostrud exercitation ullamco laboris nisi ut aliquip ex ea commodo consequat. Duis aute irure dolor in reprehenderit in voluptate velit esse cillum dolore eu fugiat nulla pariatur. Excepteur sint occaecat cupidatat non proident, sunt in culpa qui officia deserunt mollit anim id est laborum. + + +
+
+ + + + Calculator + 2. Lorem ipsum dolor sit amet, consectetur adipisicing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua. Ut enim ad minim veniam, quis nostrud exercitation ullamco laboris nisi ut aliquip ex ea commodo consequat. Duis aute irure dolor in reprehenderit in voluptate velit esse cillum dolore eu fugiat nulla pariatur. Excepteur sint occaecat cupidatat non proident, sunt in culpa qui officia deserunt mollit anim id est laborum. + + + Shoping cart + 3. Lorem ipsum dolor sit amet, consectetur adipisicing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua. Ut enim ad minim veniam, quis nostrud exercitation ullamco laboris nisi ut aliquip ex ea commodo consequat. Duis aute irure dolor in reprehenderit in voluptate velit esse cillum dolore eu fugiat nulla pariatur. Excepteur sint occaecat cupidatat non proident, sunt in culpa qui officia deserunt mollit anim id est laborum. + + + Charts + 4. Lorem ipsum dolor sit amet, consectetur adipisicing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua. Ut enim ad minim veniam, quis nostrud exercitation ullamco laboris nisi ut aliquip ex ea commodo consequat. Duis aute irure dolor in reprehenderit in voluptate velit esse cillum dolore eu fugiat nulla pariatur. Excepteur sint occaecat cupidatat non proident, sunt in culpa qui officia deserunt mollit anim id est laborum. + + +
+
+ + + + Menu  New + 1. Lorem ipsum dolor sit amet, consectetur adipisicing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua. Ut enim ad minim veniam, quis nostrud exercitation ullamco laboris nisi ut aliquip ex ea commodo consequat. Duis aute irure dolor in reprehenderit in voluptate velit esse cillum dolore eu fugiat nulla pariatur. Excepteur sint occaecat cupidatat non proident, sunt in culpa qui officia deserunt mollit anim id est laborum. + + + Calculator  29 + 2. Lorem ipsum dolor sit amet, consectetur adipisicing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua. Ut enim ad minim veniam, quis nostrud exercitation ullamco laboris nisi ut aliquip ex ea commodo consequat. Duis aute irure dolor in reprehenderit in voluptate velit esse cillum dolore eu fugiat nulla pariatur. Excepteur sint occaecat cupidatat non proident, sunt in culpa qui officia deserunt mollit anim id est laborum. + + + Charts + 4. Lorem ipsum dolor sit amet, consectetur adipisicing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua. Ut enim ad minim veniam, quis nostrud exercitation ullamco laboris nisi ut aliquip ex ea commodo consequat. Duis aute irure dolor in reprehenderit in voluptate velit esse cillum dolore eu fugiat nulla pariatur. Excepteur sint occaecat cupidatat non proident, sunt in culpa qui officia deserunt mollit anim id est laborum. + + +
+
+
diff --git a/src/app/views/base/tabs.component.ts b/src/app/views/base/tabs.component.ts new file mode 100644 index 0000000..38fdd3b --- /dev/null +++ b/src/app/views/base/tabs.component.ts @@ -0,0 +1,10 @@ +import { Component } from '@angular/core'; + +@Component({ + templateUrl: 'tabs.component.html' +}) +export class TabsComponent { + + constructor() { } + +} diff --git a/src/app/views/base/tooltips.component.html b/src/app/views/base/tooltips.component.html new file mode 100644 index 0000000..0a6938c --- /dev/null +++ b/src/app/views/base/tooltips.component.html @@ -0,0 +1,159 @@ +
+
+
+ Bootstrap Tooltips + +
+
+ +
+
+
+
+ Tooltips positioning +
+
+ + + + + + + + + +
+
+
+
+ Tooltips dismissible +
+
+ +
+
+
+
+ Tooltips dynamic content +
+
+ + + Just another: {{content}} + +
+
+
+
+ Tooltips dynamic html +
+
+ Here we go:
+ +
+
+
+
+ Tooltips append to body +
+
+
+
+ + +
+
+
+
+
+
+ Tooltips custom triggers +
+
+
+
+

Desktop

+ +
+ +
+

Mobile

+ +
+
+
+
+
+
+ Tooltips manual triggers +
+
+

+ + This text has attached tooltip + +

+ + + +
+
+
diff --git a/src/app/views/base/tooltips.component.ts b/src/app/views/base/tooltips.component.ts new file mode 100644 index 0000000..fc47270 --- /dev/null +++ b/src/app/views/base/tooltips.component.ts @@ -0,0 +1,15 @@ +import {Component, SecurityContext} from '@angular/core'; +import {DomSanitizer} from '@angular/platform-browser'; + +@Component({ + templateUrl: 'tooltips.component.html' +}) +export class TooltipsComponent { + + constructor(sanitizer: DomSanitizer) { + this.html = sanitizer.sanitize(SecurityContext.HTML, this.html); + } + + content: string = 'Vivamus sagittis lacus vel augue laoreet rutrum faucibus.'; + html: string = `Never trust not sanitized HTML!!!`; +} diff --git a/src/app/views/buttons/brand-buttons.component.html b/src/app/views/buttons/brand-buttons.component.html new file mode 100644 index 0000000..8084e75 --- /dev/null +++ b/src/app/views/buttons/brand-buttons.component.html @@ -0,0 +1,844 @@ +
+
+
+
+
+ Brand Buttons + Usage ex. + <button class="btn btn-brand btn-facebook"><span>Facebook</span></button> +
+
+
Size Small + Add this class + .btn-sm + +
+

+ + + + + + + + + + + + + + + + + + + + + + + + + +

+
Size Normal
+

+ + + + + + + + + + + + + + + + + + + + + + + + + +

+
Size Large + Add this class + .btn-lg + +
+

+ + + + + + + + + + + + + + + + + + + + + + + + + +

+
+
+
+ + +
+
+
+ Brand Buttons + Only icons. Usage ex. + <button class="btn btn-brand btn-facebook"><span>Facebook</span></button> +
+
+
Size Small + Add this class + .btn-sm + +
+

+ + + + + + + + + + + + + + + + + + + + + + + + + +

+
Size Normal
+

+ + + + + + + + + + + + + + + + + + + + + + + + + +

+
Size Large + Add this class + .btn-lg + +
+

+ + + + + + + + + + + + + + + + + + + + + + + + + +

+
+
+
+ + +
+
+
+ Brand Buttons + Only text. Usage ex. + <button class="btn btn-brand btn-facebook text"><span>Facebook</span></button> +
+
+
Size Small + Add this class + .btn-sm + +
+

+ + + + + + + + + + + + + + + + + + + + + + + + + +

+
Size Normal
+

+ + + + + + + + + + + + + + + + + + + + + + + + + +

+
Size Large + Add this class + .btn-lg + +
+

+ + + + + + + + + + + + + + + + + + + + + + + + + +

+
+
+
+ +
+ +
diff --git a/src/app/views/buttons/brand-buttons.component.ts b/src/app/views/buttons/brand-buttons.component.ts new file mode 100644 index 0000000..1a74481 --- /dev/null +++ b/src/app/views/buttons/brand-buttons.component.ts @@ -0,0 +1,10 @@ +import { Component } from '@angular/core'; + +@Component({ + templateUrl: 'brand-buttons.component.html' +}) +export class BrandButtonsComponent { + + constructor() { } + +} diff --git a/src/app/views/buttons/buttons-routing.module.ts b/src/app/views/buttons/buttons-routing.module.ts new file mode 100644 index 0000000..f4243ac --- /dev/null +++ b/src/app/views/buttons/buttons-routing.module.ts @@ -0,0 +1,44 @@ +import { NgModule } from '@angular/core'; +import { Routes, RouterModule } from '@angular/router'; + +import { ButtonsComponent } from './buttons.component'; +import { DropdownsComponent } from './dropdowns.component'; +import { BrandButtonsComponent } from './brand-buttons.component'; + +const routes: Routes = [ + { + path: '', + data: { + title: 'Buttons' + }, + children: [ + { + path: 'buttons', + component: ButtonsComponent, + data: { + title: 'Buttons' + } + }, + { + path: 'dropdowns', + component: DropdownsComponent, + data: { + title: 'Dropdowns' + } + }, + { + path: 'brand-buttons', + component: BrandButtonsComponent, + data: { + title: 'Brand buttons' + } + } + ] + } +]; + +@NgModule({ + imports: [RouterModule.forChild(routes)], + exports: [RouterModule] +}) +export class ButtonsRoutingModule {} diff --git a/src/app/views/buttons/buttons.component.html b/src/app/views/buttons/buttons.component.html new file mode 100644 index 0000000..6fdde0b --- /dev/null +++ b/src/app/views/buttons/buttons.component.html @@ -0,0 +1,644 @@ +
+
+
+ Standard Buttons +
+
+
+
+ Normal +
+
+ +
+
+ +
+
+ +
+
+ +
+
+ +
+
+ +
+
+ +
+
+ +
+
+ +
+
+
+
+ Active State +
+
+ +
+
+ +
+
+ +
+
+ +
+
+ +
+
+ +
+
+ +
+
+ +
+
+ +
+
+
+
+ Disabled +
+
+ +
+
+ +
+
+ +
+
+ +
+
+ +
+
+ +
+
+ +
+
+ +
+
+ +
+
+
+
+
+
+ Outline Buttons +
+
+

+ Use .btn-outline-* class for outline buttons. +

+
+
+ Normal +
+
+ +
+
+ +
+
+ +
+
+ +
+
+ +
+
+ +
+
+ +
+
+ +
+
+
+
+
+ Active State +
+
+ +
+
+ +
+
+ +
+
+ +
+
+ +
+
+ +
+
+ +
+
+ +
+
+
+
+
+ Disabled +
+
+ +
+
+ +
+
+ +
+
+ +
+
+ +
+
+ +
+
+ +
+
+ +
+
+
+
+
+
+
+ Ghost Buttons +
+
+

+ Use .btn-ghost-* class for ghost buttons. +

+
+
+ Normal +
+
+ +
+
+ +
+
+ +
+
+ +
+
+ +
+
+ +
+
+ +
+
+ +
+
+
+
+
+ Active State +
+
+ +
+
+ +
+
+ +
+
+ +
+
+ +
+
+ +
+
+ +
+
+ +
+
+
+
+
+ Disabled +
+
+ +
+
+ +
+
+ +
+
+ +
+
+ +
+
+ +
+
+ +
+
+ +
+
+
+
+
+
+
+ Square Buttons +
+
+

+ Use .btn-square class for square buttons. +

+
+
+ Normal +
+
+ +
+
+ +
+
+ +
+
+ +
+
+ +
+
+ +
+
+ +
+
+ +
+
+ +
+
+
+
+ Active State +
+
+ +
+
+ +
+
+ +
+
+ +
+
+ +
+
+ +
+
+ +
+
+ +
+
+ +
+
+
+
+ Disabled +
+
+ +
+
+ +
+
+ +
+
+ +
+
+ +
+
+ +
+
+ +
+
+ +
+
+ +
+
+
+
+
+
+ Pill Buttons +
+
+

+ Use .btn-pill class for pill buttons. +

+
+
+ Normal +
+
+ +
+
+ +
+
+ +
+
+ +
+
+ +
+
+ +
+
+ +
+
+ +
+
+ +
+
+
+
+ Active State +
+
+ +
+
+ +
+
+ +
+
+ +
+
+ +
+
+ +
+
+ +
+
+ +
+
+ +
+
+
+
+ Disabled +
+
+ +
+
+ +
+
+ +
+
+ +
+
+ +
+
+ +
+
+ +
+
+ +
+
+ +
+
+
+
+
+
+ Sizes +
+
+

Fancy larger or smaller buttons? Add .btn-lg or .btn-sm for additional sizes.

+
+
+ Small add .btn-sm +
+
+ +
+
+ +
+
+ +
+
+ +
+
+ +
+
+
+
+ Normal +
+
+ +
+
+ +
+
+ +
+
+ +
+
+ +
+
+
+
+ Large add .btn-lg. +
+
+ +
+
+ +
+
+ +
+
+ +
+
+ +
+
+
+
+
+
+ With Icons +
+
+
+
+ +
+
+ +
+
+ +
+
+ +
+
+ +
+
+
+
+
+
+
+
+ Block Level Buttons +
+
+

Add this class.btn-block

+ + + + + + + +
+
+
+
+
+
+ Block Level Buttons +
+
+

Add this class.btn-block

+ + + + + + +
+
+
+
+
diff --git a/src/app/views/buttons/buttons.component.ts b/src/app/views/buttons/buttons.component.ts new file mode 100644 index 0000000..6c27c41 --- /dev/null +++ b/src/app/views/buttons/buttons.component.ts @@ -0,0 +1,10 @@ +import { Component } from '@angular/core'; + +@Component({ + templateUrl: 'buttons.component.html' +}) +export class ButtonsComponent { + + constructor() { } + +} diff --git a/src/app/views/buttons/buttons.module.ts b/src/app/views/buttons/buttons.module.ts new file mode 100644 index 0000000..1c7f735 --- /dev/null +++ b/src/app/views/buttons/buttons.module.ts @@ -0,0 +1,30 @@ +import { CommonModule } from '@angular/common'; +import { FormsModule } from '@angular/forms'; +import { NgModule } from '@angular/core'; + +import { ButtonsComponent } from './buttons.component'; +import { BrandButtonsComponent } from './brand-buttons.component'; + +// Dropdowns Component +import { BsDropdownModule } from 'ngx-bootstrap/dropdown'; +import { DropdownsComponent } from './dropdowns.component'; + +// Buttons Routing +import { ButtonsRoutingModule } from './buttons-routing.module'; + +// Angular + +@NgModule({ + imports: [ + CommonModule, + ButtonsRoutingModule, + BsDropdownModule.forRoot(), + FormsModule + ], + declarations: [ + ButtonsComponent, + DropdownsComponent, + BrandButtonsComponent + ] +}) +export class ButtonsModule { } diff --git a/src/app/views/buttons/dropdowns.component.css b/src/app/views/buttons/dropdowns.component.css new file mode 100644 index 0000000..f05188e --- /dev/null +++ b/src/app/views/buttons/dropdowns.component.css @@ -0,0 +1,3 @@ +.dropup .dropdown-menu { + transform: none!important; +} diff --git a/src/app/views/buttons/dropdowns.component.html b/src/app/views/buttons/dropdowns.component.html new file mode 100644 index 0000000..fa27c2a --- /dev/null +++ b/src/app/views/buttons/dropdowns.component.html @@ -0,0 +1,214 @@ +
+
+
+
+
+ Bootstrap Dropdowns + +
+
+
+ + +
+
+
+
+
+
+
+ Dropdowns + trigger by <a> +
+ +
+
+
+
+
+
+
+ Dropdowns + split button +
+
+
+ + + +
+
+
+
+
+
+
+ Dropdowns + manual triggers +
+
+
+ + +
+ +
+
+
+
+
+
+
+
+ Dropdowns + disabled menu +
+
+
+ + +
+ +
+
+
+
+
+
+ Dropdowns + menu alignment +
+
+
+ + +
+
+
+
+
+
+
+
+
+ Dropdowns + dropup variation +
+
+
+ + +
+
+ +
+
+
+
+
+ Dropdowns + with autoClose +
+
+
+ + +
+
+
+
+
+
diff --git a/src/app/views/buttons/dropdowns.component.ts b/src/app/views/buttons/dropdowns.component.ts new file mode 100644 index 0000000..cf67af3 --- /dev/null +++ b/src/app/views/buttons/dropdowns.component.ts @@ -0,0 +1,41 @@ +import { Component } from '@angular/core'; + +@Component({ + templateUrl: 'dropdowns.component.html', + styleUrls: ['dropdowns.component.css'] +}) +export class DropdownsComponent { + + status: { isOpen: boolean } = { isOpen: false }; + disabled: boolean = false; + isDropup: boolean = true; + autoClose: boolean = false; + + constructor() { } + + items: string[] = [ + 'The first choice!', + 'And another choice for you.', + 'but wait! A third!' + ]; + + onHidden(): void { + console.log('Dropdown is hidden'); + } + onShown(): void { + console.log('Dropdown is shown'); + } + isOpenChange(): void { + console.log('Dropdown state is changed'); + } + + toggleDropdown($event: MouseEvent): void { + $event.preventDefault(); + $event.stopPropagation(); + this.status.isOpen = !this.status.isOpen; + } + + change(value: boolean): void { + this.status.isOpen = value; + } +} diff --git a/src/app/views/chartjs/chartjs-routing.module.ts b/src/app/views/chartjs/chartjs-routing.module.ts new file mode 100644 index 0000000..4b1f0de --- /dev/null +++ b/src/app/views/chartjs/chartjs-routing.module.ts @@ -0,0 +1,20 @@ +import { NgModule } from '@angular/core'; +import { Routes, RouterModule } from '@angular/router'; + +import { ChartJSComponent } from './chartjs.component'; + +const routes: Routes = [ + { + path: '', + component: ChartJSComponent, + data: { + title: 'Charts' + } + } +]; + +@NgModule({ + imports: [RouterModule.forChild(routes)], + exports: [RouterModule] +}) +export class ChartJSRoutingModule {} diff --git a/src/app/views/chartjs/chartjs.component.html b/src/app/views/chartjs/chartjs.component.html new file mode 100644 index 0000000..8516e25 --- /dev/null +++ b/src/app/views/chartjs/chartjs.component.html @@ -0,0 +1,130 @@ +
+
+
+
+ Line Chart + +
+
+
+ +
+
+
+
+
+ Bar Chart + +
+
+
+ +
+
+
+
+
+ Doughnut Chart + +
+
+
+ +
+
+
+
+
+ Radar Chart + +
+
+
+ +
+
+
+
+
+ Pie Chart + +
+
+
+ +
+
+
+
+
+ Polar Area Chart + +
+
+
+ +
+
+
+
+
diff --git a/src/app/views/chartjs/chartjs.component.ts b/src/app/views/chartjs/chartjs.component.ts new file mode 100644 index 0000000..ac0788c --- /dev/null +++ b/src/app/views/chartjs/chartjs.component.ts @@ -0,0 +1,97 @@ +import { Component } from '@angular/core'; + +@Component({ + templateUrl: 'chartjs.component.html' +}) +export class ChartJSComponent { + + // lineChart + public lineChartData: Array = [ + {data: [65, 59, 80, 81, 56, 55, 40], label: 'Series A'}, + {data: [28, 48, 40, 19, 86, 27, 90], label: 'Series B'}, + {data: [18, 48, 77, 9, 100, 27, 40], label: 'Series C'} + ]; + public lineChartLabels: Array = ['January', 'February', 'March', 'April', 'May', 'June', 'July']; + public lineChartOptions: any = { + animation: false, + responsive: true + }; + public lineChartColours: Array = [ + { // grey + backgroundColor: 'rgba(148,159,177,0.2)', + borderColor: 'rgba(148,159,177,1)', + pointBackgroundColor: 'rgba(148,159,177,1)', + pointBorderColor: '#fff', + pointHoverBackgroundColor: '#fff', + pointHoverBorderColor: 'rgba(148,159,177,0.8)' + }, + { // dark grey + backgroundColor: 'rgba(77,83,96,0.2)', + borderColor: 'rgba(77,83,96,1)', + pointBackgroundColor: 'rgba(77,83,96,1)', + pointBorderColor: '#fff', + pointHoverBackgroundColor: '#fff', + pointHoverBorderColor: 'rgba(77,83,96,1)' + }, + { // grey + backgroundColor: 'rgba(148,159,177,0.2)', + borderColor: 'rgba(148,159,177,1)', + pointBackgroundColor: 'rgba(148,159,177,1)', + pointBorderColor: '#fff', + pointHoverBackgroundColor: '#fff', + pointHoverBorderColor: 'rgba(148,159,177,0.8)' + } + ]; + public lineChartLegend = true; + public lineChartType = 'line'; + + // barChart + public barChartOptions: any = { + scaleShowVerticalLines: false, + responsive: true + }; + public barChartLabels: string[] = ['2006', '2007', '2008', '2009', '2010', '2011', '2012']; + public barChartType = 'bar'; + public barChartLegend = true; + + public barChartData: any[] = [ + {data: [65, 59, 80, 81, 56, 55, 40], label: 'Series A'}, + {data: [28, 48, 40, 19, 86, 27, 90], label: 'Series B'} + ]; + + // Doughnut + public doughnutChartLabels: string[] = ['Download Sales', 'In-Store Sales', 'Mail-Order Sales']; + public doughnutChartData: number[] = [350, 450, 100]; + public doughnutChartType = 'doughnut'; + + // Radar + public radarChartLabels: string[] = ['Eating', 'Drinking', 'Sleeping', 'Designing', 'Coding', 'Cycling', 'Running']; + + public radarChartData: any = [ + {data: [65, 59, 90, 81, 56, 55, 40], label: 'Series A'}, + {data: [28, 48, 40, 19, 96, 27, 100], label: 'Series B'} + ]; + public radarChartType = 'radar'; + + // Pie + public pieChartLabels: string[] = ['Download Sales', 'In-Store Sales', 'Mail Sales']; + public pieChartData: number[] = [300, 500, 100]; + public pieChartType = 'pie'; + + // PolarArea + public polarAreaChartLabels: string[] = ['Download Sales', 'In-Store Sales', 'Mail Sales', 'Telesales', 'Corporate Sales']; + public polarAreaChartData: number[] = [300, 500, 100, 40, 120]; + public polarAreaLegend = true; + + public polarAreaChartType = 'polarArea'; + + // events + public chartClicked(e: any): void { + console.log(e); + } + + public chartHovered(e: any): void { + console.log(e); + } + +} diff --git a/src/app/views/chartjs/chartjs.module.ts b/src/app/views/chartjs/chartjs.module.ts new file mode 100644 index 0000000..b5aa053 --- /dev/null +++ b/src/app/views/chartjs/chartjs.module.ts @@ -0,0 +1,14 @@ +import { NgModule } from '@angular/core'; +import { ChartsModule } from 'ng2-charts/ng2-charts'; + +import { ChartJSComponent } from './chartjs.component'; +import { ChartJSRoutingModule } from './chartjs-routing.module'; + +@NgModule({ + imports: [ + ChartJSRoutingModule, + ChartsModule + ], + declarations: [ ChartJSComponent ] +}) +export class ChartJSModule { } diff --git a/src/app/views/dashboard/dashboard-routing.module.ts b/src/app/views/dashboard/dashboard-routing.module.ts new file mode 100644 index 0000000..c56e63a --- /dev/null +++ b/src/app/views/dashboard/dashboard-routing.module.ts @@ -0,0 +1,21 @@ +import { NgModule } from '@angular/core'; +import { Routes, + RouterModule } from '@angular/router'; + +import { DashboardComponent } from './dashboard.component'; + +const routes: Routes = [ + { + path: '', + component: DashboardComponent, + data: { + title: 'Dashboard' + } + } +]; + +@NgModule({ + imports: [RouterModule.forChild(routes)], + exports: [RouterModule] +}) +export class DashboardRoutingModule {} diff --git a/src/app/views/dashboard/dashboard.component.html b/src/app/views/dashboard/dashboard.component.html new file mode 100644 index 0000000..67cf666 --- /dev/null +++ b/src/app/views/dashboard/dashboard.component.html @@ -0,0 +1,749 @@ +
+
+
+
+
+ +
9.823
+
Members online
+
+
+ +
+
+
+
+
+
+ +
9.823
+
Members online
+
+
+ +
+
+
+
+
+
+ +
9.823
+
Members online
+
+
+ +
+
+
+
+
+
+ +
9.823
+
Members online
+
+
+ +
+
+
+
+
+
+
+
+

Traffic

+
November 2017
+
+
+ +
+ + + +
+
+
+
+ +
+
+ +
+ +
+
+
+
+ +
+ +
+
+
+
+
89k
+
friends
+
+
+
459
+
feeds
+
+
+
+
+
+
+
+ +
+ +
+
+
+
+
973k
+
followers
+
+
+
1.792
+
tweets
+
+
+
+
+
+
+
+ +
+ +
+
+
+
+
500+
+
contacts
+
+
+
292
+
feeds
+
+
+
+
+
+
+
+ +
+ +
+
+
+
+
894
+
followers
+
+
+
92
+
circles
+
+
+
+
+
+
+
+
+
+ Traffic & Sales +
+
+
+
+
+
+
+ New Clients +
+ 9,123 +
+
+
+
+ Recuring Clients +
+ 22,643 +
+
+
+
+
+
+ + Monday + +
+
+
+
+
+
+
+
+
+
+
+
+ + Tuesday + +
+
+
+
+
+
+
+
+
+
+
+
+ + Wednesday + +
+
+
+
+
+
+
+
+
+
+
+
+ + Thursday + +
+
+
+
+
+
+
+
+
+
+
+
+ + Friday + +
+
+
+
+
+
+
+
+
+
+
+
+ + Saturday + +
+
+
+
+
+
+
+
+
+
+
+
+ + Sunday + +
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ Pageviews +
+ 78,623 +
+
+
+
+ Organic +
+ 49,123 +
+
+
+
+
+
+ +
Male
+
43%
+
+
+
+
+
+
+
+
+
+ +
Female
+
37%
+
+
+
+
+
+
+
+
+
+ +
Organic Search
+
191.235
+
(56%)
+
+
+
+
+
+
+
+
+
+ +
Facebook
+
51.223
+
(15%)
+
+
+
+
+
+
+
+
+
+ +
Twitter
+
37.564
+
(11%)
+
+
+
+
+
+
+
+
+
+ +
LinkedIn
+
27.319
+
(8%)
+
+
+
+
+
+
+
+
+
+
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
UserCountryUsagePayment MethodActivity
+
+ admin@bootstrapmaster.com + +
+
+
Yiorgos Avraamu
+
+ New | Registered: Jan 1, 2015 +
+
+ + +
+
+ 50% +
+
+ Jun 11, 2015 - Jul 10, 2015 +
+
+
+
+
+
+ + +
Last login
+ 10 sec ago +
+
+ admin@bootstrapmaster.com + +
+
+
Avram Tarasios
+
+ + Recurring | Registered: Jan 1, 2015 +
+
+ + +
+
+ 10% +
+
+ Jun 11, 2015 - Jul 10, 2015 +
+
+
+
+
+
+ + +
Last login
+ 5 minutes ago +
+
+ admin@bootstrapmaster.com + +
+
+
Quintin Ed
+
+ New | Registered: Jan 1, 2015 +
+
+ + +
+
+ 74% +
+
+ Jun 11, 2015 - Jul 10, 2015 +
+
+
+
+
+
+ + +
Last login
+ 1 hour ago +
+
+ admin@bootstrapmaster.com + +
+
+
Enéas Kwadwo
+
+ New | Registered: Jan 1, 2015 +
+
+ + +
+
+ 98% +
+
+ Jun 11, 2015 - Jul 10, 2015 +
+
+
+
+
+
+ + +
Last login
+ Last month +
+
+ admin@bootstrapmaster.com + +
+
+
Agapetus Tadeáš
+
+ New | Registered: Jan 1, 2015 +
+
+ + +
+
+ 22% +
+
+ Jun 11, 2015 - Jul 10, 2015 +
+
+
+
+
+
+ + +
Last login
+ Last week +
+
+ admin@bootstrapmaster.com + +
+
+
Friderik Dávid
+
+ New | Registered: Jan 1, 2015 +
+
+ + +
+
+ 43% +
+
+ Jun 11, 2015 - Jul 10, 2015 +
+
+
+
+
+
+ + +
Last login
+ Yesterday +
+
+
+
+
+
diff --git a/src/app/views/dashboard/dashboard.component.ts b/src/app/views/dashboard/dashboard.component.ts new file mode 100644 index 0000000..46ab289 --- /dev/null +++ b/src/app/views/dashboard/dashboard.component.ts @@ -0,0 +1,389 @@ +import { Component, OnInit } from '@angular/core'; +import { Router } from '@angular/router'; +import { getStyle, hexToRgba } from '@coreui/coreui/dist/js/coreui-utilities'; +import { CustomTooltips } from '@coreui/coreui-plugin-chartjs-custom-tooltips'; + +@Component({ + templateUrl: 'dashboard.component.html' +}) +export class DashboardComponent implements OnInit { + + radioModel: string = 'Month'; + + // lineChart1 + public lineChart1Data: Array = [ + { + data: [65, 59, 84, 84, 51, 55, 40], + label: 'Series A' + } + ]; + public lineChart1Labels: Array = ['January', 'February', 'March', 'April', 'May', 'June', 'July']; + public lineChart1Options: any = { + tooltips: { + enabled: false, + custom: CustomTooltips + }, + maintainAspectRatio: false, + scales: { + xAxes: [{ + gridLines: { + color: 'transparent', + zeroLineColor: 'transparent' + }, + ticks: { + fontSize: 2, + fontColor: 'transparent', + } + + }], + yAxes: [{ + display: false, + ticks: { + display: false, + min: 40 - 5, + max: 84 + 5, + } + }], + }, + elements: { + line: { + borderWidth: 1 + }, + point: { + radius: 4, + hitRadius: 10, + hoverRadius: 4, + }, + }, + legend: { + display: false + } + }; + public lineChart1Colours: Array = [ + { + backgroundColor: getStyle('--primary'), + borderColor: 'rgba(255,255,255,.55)' + } + ]; + public lineChart1Legend = false; + public lineChart1Type = 'line'; + + // lineChart2 + public lineChart2Data: Array = [ + { + data: [1, 18, 9, 17, 34, 22, 11], + label: 'Series A' + } + ]; + public lineChart2Labels: Array = ['January', 'February', 'March', 'April', 'May', 'June', 'July']; + public lineChart2Options: any = { + tooltips: { + enabled: false, + custom: CustomTooltips + }, + maintainAspectRatio: false, + scales: { + xAxes: [{ + gridLines: { + color: 'transparent', + zeroLineColor: 'transparent' + }, + ticks: { + fontSize: 2, + fontColor: 'transparent', + } + + }], + yAxes: [{ + display: false, + ticks: { + display: false, + min: 1 - 5, + max: 34 + 5, + } + }], + }, + elements: { + line: { + tension: 0.00001, + borderWidth: 1 + }, + point: { + radius: 4, + hitRadius: 10, + hoverRadius: 4, + }, + }, + legend: { + display: false + } + }; + public lineChart2Colours: Array = [ + { // grey + backgroundColor: getStyle('--info'), + borderColor: 'rgba(255,255,255,.55)' + } + ]; + public lineChart2Legend = false; + public lineChart2Type = 'line'; + + + // lineChart3 + public lineChart3Data: Array = [ + { + data: [78, 81, 80, 45, 34, 12, 40], + label: 'Series A' + } + ]; + public lineChart3Labels: Array = ['January', 'February', 'March', 'April', 'May', 'June', 'July']; + public lineChart3Options: any = { + tooltips: { + enabled: false, + custom: CustomTooltips + }, + maintainAspectRatio: false, + scales: { + xAxes: [{ + display: false + }], + yAxes: [{ + display: false + }] + }, + elements: { + line: { + borderWidth: 2 + }, + point: { + radius: 0, + hitRadius: 10, + hoverRadius: 4, + }, + }, + legend: { + display: false + } + }; + public lineChart3Colours: Array = [ + { + backgroundColor: 'rgba(255,255,255,.2)', + borderColor: 'rgba(255,255,255,.55)', + } + ]; + public lineChart3Legend = false; + public lineChart3Type = 'line'; + + + // barChart1 + public barChart1Data: Array = [ + { + data: [78, 81, 80, 45, 34, 12, 40, 78, 81, 80, 45, 34, 12, 40, 12, 40], + label: 'Series A' + } + ]; + public barChart1Labels: Array = ['1', '2', '3', '4', '5', '6', '7', '8', '9', '10', '11', '12', '13', '14', '15', '16']; + public barChart1Options: any = { + tooltips: { + enabled: false, + custom: CustomTooltips + }, + maintainAspectRatio: false, + scales: { + xAxes: [{ + display: false, + barPercentage: 0.6, + }], + yAxes: [{ + display: false + }] + }, + legend: { + display: false + } + }; + public barChart1Colours: Array = [ + { + backgroundColor: 'rgba(255,255,255,.3)', + borderWidth: 0 + } + ]; + public barChart1Legend = false; + public barChart1Type = 'bar'; + + // mainChart + + public mainChartElements = 27; + public mainChartData1: Array = []; + public mainChartData2: Array = []; + public mainChartData3: Array = []; + + public mainChartData: Array = [ + { + data: this.mainChartData1, + label: 'Current' + }, + { + data: this.mainChartData2, + label: 'Previous' + }, + { + data: this.mainChartData3, + label: 'BEP' + } + ]; + /* tslint:disable:max-line-length */ + public mainChartLabels: Array = ['Monday', 'Tuesday', 'Wednesday', 'Thursday', 'Friday', 'Saturday', 'Sunday', 'Monday', 'Tuesday', 'Wednesday', 'Thursday', 'Friday', 'Saturday', 'Sunday', 'Monday', 'Tuesday', 'Wednesday', 'Thursday', 'Friday', 'Saturday', 'Sunday', 'Monday', 'Thursday', 'Wednesday', 'Thursday', 'Friday', 'Saturday', 'Sunday']; + /* tslint:enable:max-line-length */ + public mainChartOptions: any = { + tooltips: { + enabled: false, + custom: CustomTooltips, + intersect: true, + mode: 'index', + position: 'nearest', + callbacks: { + labelColor: function(tooltipItem, chart) { + return { backgroundColor: chart.data.datasets[tooltipItem.datasetIndex].borderColor }; + } + } + }, + responsive: true, + maintainAspectRatio: false, + scales: { + xAxes: [{ + gridLines: { + drawOnChartArea: false, + }, + ticks: { + callback: function(value: any) { + return value.charAt(0); + } + } + }], + yAxes: [{ + ticks: { + beginAtZero: true, + maxTicksLimit: 5, + stepSize: Math.ceil(250 / 5), + max: 250 + } + }] + }, + elements: { + line: { + borderWidth: 2 + }, + point: { + radius: 0, + hitRadius: 10, + hoverRadius: 4, + hoverBorderWidth: 3, + } + }, + legend: { + display: false + } + }; + public mainChartColours: Array = [ + { // brandInfo + backgroundColor: hexToRgba(getStyle('--info'), 10), + borderColor: getStyle('--info'), + pointHoverBackgroundColor: '#fff' + }, + { // brandSuccess + backgroundColor: 'transparent', + borderColor: getStyle('--success'), + pointHoverBackgroundColor: '#fff' + }, + { // brandDanger + backgroundColor: 'transparent', + borderColor: getStyle('--danger'), + pointHoverBackgroundColor: '#fff', + borderWidth: 1, + borderDash: [8, 5] + } + ]; + public mainChartLegend = false; + public mainChartType = 'line'; + + // social box charts + + public brandBoxChartData1: Array = [ + { + data: [65, 59, 84, 84, 51, 55, 40], + label: 'Facebook' + } + ]; + public brandBoxChartData2: Array = [ + { + data: [1, 13, 9, 17, 34, 41, 38], + label: 'Twitter' + } + ]; + public brandBoxChartData3: Array = [ + { + data: [78, 81, 80, 45, 34, 12, 40], + label: 'LinkedIn' + } + ]; + public brandBoxChartData4: Array = [ + { + data: [35, 23, 56, 22, 97, 23, 64], + label: 'Google+' + } + ]; + + public brandBoxChartLabels: Array = ['January', 'February', 'March', 'April', 'May', 'June', 'July']; + public brandBoxChartOptions: any = { + tooltips: { + enabled: false, + custom: CustomTooltips + }, + responsive: true, + maintainAspectRatio: false, + scales: { + xAxes: [{ + display: false, + }], + yAxes: [{ + display: false, + }] + }, + elements: { + line: { + borderWidth: 2 + }, + point: { + radius: 0, + hitRadius: 10, + hoverRadius: 4, + hoverBorderWidth: 3, + } + }, + legend: { + display: false + } + }; + public brandBoxChartColours: Array = [ + { + backgroundColor: 'rgba(255,255,255,.1)', + borderColor: 'rgba(255,255,255,.55)', + pointHoverBackgroundColor: '#fff' + } + ]; + public brandBoxChartLegend = false; + public brandBoxChartType = 'line'; + + public random(min: number, max: number) { + return Math.floor(Math.random() * (max - min + 1) + min); + } + + ngOnInit(): void { + // generate random values for mainChart + for (let i = 0; i <= this.mainChartElements; i++) { + this.mainChartData1.push(this.random(50, 200)); + this.mainChartData2.push(this.random(80, 100)); + this.mainChartData3.push(65); + } + } +} diff --git a/src/app/views/dashboard/dashboard.module.ts b/src/app/views/dashboard/dashboard.module.ts new file mode 100644 index 0000000..24db860 --- /dev/null +++ b/src/app/views/dashboard/dashboard.module.ts @@ -0,0 +1,20 @@ +import { NgModule } from '@angular/core'; +import { FormsModule } from '@angular/forms'; +import { ChartsModule } from 'ng2-charts/ng2-charts'; +import { BsDropdownModule } from 'ngx-bootstrap/dropdown'; +import { ButtonsModule } from 'ngx-bootstrap/buttons'; + +import { DashboardComponent } from './dashboard.component'; +import { DashboardRoutingModule } from './dashboard-routing.module'; + +@NgModule({ + imports: [ + FormsModule, + DashboardRoutingModule, + ChartsModule, + BsDropdownModule, + ButtonsModule.forRoot() + ], + declarations: [ DashboardComponent ] +}) +export class DashboardModule { } diff --git a/src/app/views/error/404.component.html b/src/app/views/error/404.component.html new file mode 100644 index 0000000..d66308a --- /dev/null +++ b/src/app/views/error/404.component.html @@ -0,0 +1,22 @@ +
+
+
+
+
+

404

+

Oops! You're lost.

+

The page you are looking for was not found.

+
+
+
+ +
+ + + + +
+
+
+
+
diff --git a/src/app/views/error/404.component.ts b/src/app/views/error/404.component.ts new file mode 100644 index 0000000..90410ad --- /dev/null +++ b/src/app/views/error/404.component.ts @@ -0,0 +1,10 @@ +import { Component } from '@angular/core'; + +@Component({ + templateUrl: '404.component.html' +}) +export class P404Component { + + constructor() { } + +} diff --git a/src/app/views/error/500.component.html b/src/app/views/error/500.component.html new file mode 100644 index 0000000..708c334 --- /dev/null +++ b/src/app/views/error/500.component.html @@ -0,0 +1,22 @@ +
+
+
+
+
+

500

+

Houston, we have a problem!

+

The page you are looking for is temporarily unavailable.

+
+
+
+ +
+ + + + +
+
+
+
+
diff --git a/src/app/views/error/500.component.ts b/src/app/views/error/500.component.ts new file mode 100644 index 0000000..b67ac75 --- /dev/null +++ b/src/app/views/error/500.component.ts @@ -0,0 +1,10 @@ +import { Component } from '@angular/core'; + +@Component({ + templateUrl: '500.component.html' +}) +export class P500Component { + + constructor() { } + +} diff --git a/src/app/views/icons/coreui-icons.component.html b/src/app/views/icons/coreui-icons.component.html new file mode 100644 index 0000000..ef9afe8 --- /dev/null +++ b/src/app/views/icons/coreui-icons.component.html @@ -0,0 +1,415 @@ +
+
+
+ CoreUI Icons New +
+ Github +
+
+
+
+
+ +
account-logout
+
+
+ +
action-redo
+
+
+ +
action-undo
+
+
+ +
align-center
+
+
+ +
align-left
+
+
+ +
align-right
+
+
+ +
arrow-bottom
+
+
+ +
arrow-left
+
+
+ +
arrow-right
+
+
+ +
arrow-top
+
+
+ +
ban
+
+
+ +
basket-loaded
+
+
+ +
bell
+
+
+ +
bold
+
+
+ +
bookmark
+
+
+ +
briefcase
+
+
+ +
british-pound
+
+
+ +
brush
+
+
+ +
calculator
+
+
+ +
calendar
+
+
+ +
cart
+
+
+ +
chart
+
+
+ +
check
+
+
+ +
chevron-bottom
+
+
+ +
chevron-left
+
+
+ +
chevron-right
+
+
+ +
chevron-top
+
+
+ +
circle-check
+
+
+ +
circle-x
+
+
+ +
cloud
+
+
+ +
cloud-download
+
+
+ +
cloud-upload
+
+
+ +
code
+
+
+ +
cog
+
+
+ +
comment-square
+
+
+ +
credit-card
+
+
+ +
cursor
+
+
+ +
dashboard
+
+
+ +
delete
+
+
+ +
dollar
+
+
+ +
drop
+
+
+ +
envelope-closed
+
+
+ +
envelope-letter
+
+
+ +
envelope-open
+
+
+ +
euro
+
+
+ +
file
+
+
+ +
globe
+
+
+ +
graph
+
+
+ +
home
+
+
+ +
inbox
+
+
+ +
info
+
+
+ +
italic
+
+
+ +
justify-center
+
+
+ +
justify-left
+
+
+ +
justify-right
+
+
+ +
laptop
+
+
+ +
layers
+
+
+ +
lightbulb
+
+
+ +
list
+
+
+ +
location-pin
+
+
+ +
lock-locked
+
+
+ +
lock-unlocked
+
+
+ +
magnifying-glass
+
+
+ +
map
+
+
+ +
monitor
+
+
+ +
moon
+
+
+ +
note
+
+
+ +
options
+
+
+ +
paperclip
+
+
+ +
pencil
+
+
+ +
people
+
+
+ +
phone
+
+
+ +
pie-chart
+
+
+ +
print
+
+
+ +
puzzle
+
+
+ +
rss
+
+
+ +
screen-desktop
+
+
+ +
screen-smartphone
+
+
+ +
settings
+
+
+ +
share
+
+
+ +
shield
+
+
+ +
sort-ascending
+
+
+ +
sort-descending
+
+
+ +
speech
+
+
+ +
speedometer
+
+
+ +
star
+
+
+ +
sun
+
+
+ +
tablet
+
+
+ +
tags
+
+
+ +
task
+
+
+ +
thumb-down
+
+
+ +
thumb-up
+
+
+ +
trash
+
+
+ +
underline
+
+
+ +
user
+
+
+ +
user-female
+
+
+ +
user-follow
+
+
+ +
user-unfollow
+
+
+ +
wrench
+
+
+ +
yen
+
+
+ +
+
+
diff --git a/src/app/views/icons/coreui-icons.component.ts b/src/app/views/icons/coreui-icons.component.ts new file mode 100644 index 0000000..6d63719 --- /dev/null +++ b/src/app/views/icons/coreui-icons.component.ts @@ -0,0 +1,10 @@ +import { Component } from '@angular/core'; + +@Component({ + templateUrl: 'coreui-icons.component.html' +}) +export class CoreUIIconsComponent { + + constructor() { } + +} diff --git a/src/app/views/icons/flags.component.html b/src/app/views/icons/flags.component.html new file mode 100644 index 0000000..4c32d8a --- /dev/null +++ b/src/app/views/icons/flags.component.html @@ -0,0 +1,1010 @@ +
+
+
+ Flags +
+
+
+
+ For using the flags inline with text add the classes .flag-icon and .flag-icon-xx (where xx is the ISO 3166-1-alpha-2 code of a country) to an empty span. If you want to have a squared version flag then add the class flag-icon-squared as well. +
+
+ +
flag-icon-ad
+
+
+ +
flag-icon-ae
+
+
+ +
flag-icon-af
+
+
+ +
flag-icon-ag
+
+
+ +
flag-icon-ai
+
+
+ +
flag-icon-al
+
+
+ +
flag-icon-am
+
+
+ +
flag-icon-ao
+
+
+ +
flag-icon-aq
+
+
+ +
flag-icon-ar
+
+
+ +
flag-icon-as
+
+
+ +
flag-icon-at
+
+
+ +
flag-icon-au
+
+
+ +
flag-icon-aw
+
+
+ +
flag-icon-ax
+
+
+ +
flag-icon-az
+
+
+ +
flag-icon-ba
+
+
+ +
flag-icon-bb
+
+
+ +
flag-icon-bd
+
+
+ +
flag-icon-be
+
+
+ +
flag-icon-bf
+
+
+ +
flag-icon-bg
+
+
+ +
flag-icon-bh
+
+
+ +
flag-icon-bi
+
+
+ +
flag-icon-bj
+
+
+ +
flag-icon-bl
+
+
+ +
flag-icon-bm
+
+
+ +
flag-icon-bn
+
+
+ +
flag-icon-bo
+
+
+ +
flag-icon-bq
+
+
+ +
flag-icon-br
+
+
+ +
flag-icon-bs
+
+
+ +
flag-icon-bt
+
+
+ +
flag-icon-bv
+
+
+ +
flag-icon-bw
+
+
+ +
flag-icon-by
+
+
+ +
flag-icon-bz
+
+
+ +
flag-icon-ca
+
+
+ +
flag-icon-cc
+
+
+ +
flag-icon-cd
+
+
+ +
flag-icon-cf
+
+
+ +
flag-icon-cg
+
+
+ +
flag-icon-ch
+
+
+ +
flag-icon-ci
+
+
+ +
flag-icon-ck
+
+
+ +
flag-icon-cl
+
+
+ +
flag-icon-cm
+
+
+ +
flag-icon-cn
+
+
+ +
flag-icon-co
+
+
+ +
flag-icon-cr
+
+
+ +
flag-icon-cu
+
+
+ +
flag-icon-cv
+
+
+ +
flag-icon-cw
+
+
+ +
flag-icon-cx
+
+
+ +
flag-icon-cy
+
+
+ +
flag-icon-cz
+
+
+ +
flag-icon-de
+
+
+ +
flag-icon-dj
+
+
+ +
flag-icon-dk
+
+
+ +
flag-icon-dm
+
+
+ +
flag-icon-do
+
+
+ +
flag-icon-dz
+
+
+ +
flag-icon-ec
+
+
+ +
flag-icon-ee
+
+
+ +
flag-icon-eg
+
+
+ +
flag-icon-eh
+
+
+ +
flag-icon-er
+
+
+ +
flag-icon-es
+
+
+ +
flag-icon-et
+
+
+ +
flag-icon-fi
+
+
+ +
flag-icon-fj
+
+
+ +
flag-icon-fk
+
+
+ +
flag-icon-fm
+
+
+ +
flag-icon-fo
+
+
+ +
flag-icon-fr
+
+
+ +
flag-icon-ga
+
+
+ +
flag-icon-gb
+
+
+ +
flag-icon-gd
+
+
+ +
flag-icon-ge
+
+
+ +
flag-icon-gf
+
+
+ +
flag-icon-gg
+
+
+ +
flag-icon-gh
+
+
+ +
flag-icon-gi
+
+
+ +
flag-icon-gl
+
+
+ +
flag-icon-gm
+
+
+ +
flag-icon-gn
+
+
+ +
flag-icon-gp
+
+
+ +
flag-icon-gq
+
+
+ +
flag-icon-gr
+
+
+ +
flag-icon-gs
+
+
+ +
flag-icon-gt
+
+
+ +
flag-icon-gu
+
+
+ +
flag-icon-gw
+
+
+ +
flag-icon-gy
+
+
+ +
flag-icon-hk
+
+
+ +
flag-icon-hm
+
+
+ +
flag-icon-hn
+
+
+ +
flag-icon-hr
+
+
+ +
flag-icon-ht
+
+
+ +
flag-icon-hu
+
+
+ +
flag-icon-id
+
+
+ +
flag-icon-ie
+
+
+ +
flag-icon-il
+
+
+ +
flag-icon-im
+
+
+ +
flag-icon-in
+
+
+ +
flag-icon-io
+
+
+ +
flag-icon-iq
+
+
+ +
flag-icon-ir
+
+
+ +
flag-icon-is
+
+
+ +
flag-icon-it
+
+
+ +
flag-icon-je
+
+
+ +
flag-icon-jm
+
+
+ +
flag-icon-jo
+
+
+ +
flag-icon-jp
+
+
+ +
flag-icon-ke
+
+
+ +
flag-icon-kg
+
+
+ +
flag-icon-kh
+
+
+ +
flag-icon-ki
+
+
+ +
flag-icon-km
+
+
+ +
flag-icon-kn
+
+
+ +
flag-icon-kp
+
+
+ +
flag-icon-kr
+
+
+ +
flag-icon-kw
+
+
+ +
flag-icon-ky
+
+
+ +
flag-icon-kz
+
+
+ +
flag-icon-la
+
+
+ +
flag-icon-lb
+
+
+ +
flag-icon-lc
+
+
+ +
flag-icon-li
+
+
+ +
flag-icon-lk
+
+
+ +
flag-icon-lr
+
+
+ +
flag-icon-ls
+
+
+ +
flag-icon-lt
+
+
+ +
flag-icon-lu
+
+
+ +
flag-icon-lv
+
+
+ +
flag-icon-ly
+
+
+ +
flag-icon-ma
+
+
+ +
flag-icon-mc
+
+
+ +
flag-icon-md
+
+
+ +
flag-icon-me
+
+
+ +
flag-icon-mf
+
+
+ +
flag-icon-mg
+
+
+ +
flag-icon-mh
+
+
+ +
flag-icon-mk
+
+
+ +
flag-icon-ml
+
+
+ +
flag-icon-mm
+
+
+ +
flag-icon-mn
+
+
+ +
flag-icon-mo
+
+
+ +
flag-icon-mp
+
+
+ +
flag-icon-mq
+
+
+ +
flag-icon-mr
+
+
+ +
flag-icon-ms
+
+
+ +
flag-icon-mt
+
+
+ +
flag-icon-mu
+
+
+ +
flag-icon-mv
+
+
+ +
flag-icon-mw
+
+
+ +
flag-icon-mx
+
+
+ +
flag-icon-my
+
+
+ +
flag-icon-mz
+
+
+ +
flag-icon-na
+
+
+ +
flag-icon-nc
+
+
+ +
flag-icon-ne
+
+
+ +
flag-icon-nf
+
+
+ +
flag-icon-ng
+
+
+ +
flag-icon-ni
+
+
+ +
flag-icon-nl
+
+
+ +
flag-icon-no
+
+
+ +
flag-icon-np
+
+
+ +
flag-icon-nr
+
+
+ +
flag-icon-nu
+
+
+ +
flag-icon-nz
+
+
+ +
flag-icon-om
+
+
+ +
flag-icon-pa
+
+
+ +
flag-icon-pe
+
+
+ +
flag-icon-pf
+
+
+ +
flag-icon-pg
+
+
+ +
flag-icon-ph
+
+
+ +
flag-icon-pk
+
+
+ +
flag-icon-pl
+
+
+ +
flag-icon-pm
+
+
+ +
flag-icon-pn
+
+
+ +
flag-icon-pr
+
+
+ +
flag-icon-ps
+
+
+ +
flag-icon-pt
+
+
+ +
flag-icon-pw
+
+
+ +
flag-icon-py
+
+
+ +
flag-icon-qa
+
+
+ +
flag-icon-re
+
+
+ +
flag-icon-ro
+
+
+ +
flag-icon-rs
+
+
+ +
flag-icon-ru
+
+
+ +
flag-icon-rw
+
+
+ +
flag-icon-sa
+
+
+ +
flag-icon-sb
+
+
+ +
flag-icon-sc
+
+
+ +
flag-icon-sd
+
+
+ +
flag-icon-se
+
+
+ +
flag-icon-sg
+
+
+ +
flag-icon-sh
+
+
+ +
flag-icon-si
+
+
+ +
flag-icon-sj
+
+
+ +
flag-icon-sk
+
+
+ +
flag-icon-sl
+
+
+ +
flag-icon-sm
+
+
+ +
flag-icon-sn
+
+
+ +
flag-icon-so
+
+
+ +
flag-icon-sr
+
+
+ +
flag-icon-ss
+
+
+ +
flag-icon-st
+
+
+ +
flag-icon-sv
+
+
+ +
flag-icon-sx
+
+
+ +
flag-icon-sy
+
+
+ +
flag-icon-sz
+
+
+ +
flag-icon-tc
+
+
+ +
flag-icon-td
+
+
+ +
flag-icon-tf
+
+
+ +
flag-icon-tg
+
+
+ +
flag-icon-th
+
+
+ +
flag-icon-tj
+
+
+ +
flag-icon-tk
+
+
+ +
flag-icon-tl
+
+
+ +
flag-icon-tm
+
+
+ +
flag-icon-tn
+
+
+ +
flag-icon-to
+
+
+ +
flag-icon-tr
+
+
+ +
flag-icon-tt
+
+
+ +
flag-icon-tv
+
+
+ +
flag-icon-tw
+
+
+ +
flag-icon-tz
+
+
+ +
flag-icon-ua
+
+
+ +
flag-icon-ug
+
+
+ +
flag-icon-um
+
+
+ +
flag-icon-us
+
+
+ +
flag-icon-uy
+
+
+ +
flag-icon-uz
+
+
+ +
flag-icon-va
+
+
+ +
flag-icon-vc
+
+
+ +
flag-icon-ve
+
+
+ +
flag-icon-vg
+
+
+ +
flag-icon-vi
+
+
+ +
flag-icon-vn
+
+
+ +
flag-icon-vu
+
+
+ +
flag-icon-wf
+
+
+ +
flag-icon-ws
+
+
+ +
flag-icon-ye
+
+
+ +
flag-icon-yt
+
+
+ +
flag-icon-za
+
+
+ +
flag-icon-zm
+
+
+ +
flag-icon-zw
+
+
+
+
+
diff --git a/src/app/views/icons/flags.component.ts b/src/app/views/icons/flags.component.ts new file mode 100644 index 0000000..4c93efd --- /dev/null +++ b/src/app/views/icons/flags.component.ts @@ -0,0 +1,10 @@ +import { Component } from '@angular/core'; + +@Component({ + templateUrl: 'flags.component.html' +}) +export class FlagsComponent { + + constructor() { } + +} diff --git a/src/app/views/icons/font-awesome.component.html b/src/app/views/icons/font-awesome.component.html new file mode 100644 index 0000000..acb3ad8 --- /dev/null +++ b/src/app/views/icons/font-awesome.component.html @@ -0,0 +1,3720 @@ +
+
+
+ 50 New Icons in 4.7
+
+
+
+
address-book +
+
+
address-book-o +
+
+
address-card +
+
+
address-card-o +
+
+
bandcamp +
+
+
bath +
+
+
bathtub (alias) +
+
+
drivers-license (alias) +
+
+
drivers-license-o (alias) +
+
+
eercast +
+
+
envelope-open +
+
+
envelope-open-o +
+
+
etsy +
+
+
free-code-camp +
+
+
grav +
+
+
handshake-o +
+
+
id-badge +
+
+
id-card +
+
+
id-card-o +
+
+
imdb +
+
+
linode +
+
+
meetup +
+
+
microchip +
+
+
podcast +
+
+
quora +
+
+
ravelry +
+
+
s15 (alias) +
+
+
shower +
+
+
snowflake-o +
+
+
superpowers +
+
+
telegram +
+
+
thermometer (alias) +
+
+
thermometer-0 (alias) +
+
+
thermometer-1 (alias) +
+
+
thermometer-2 (alias) +
+
+
thermometer-3 (alias) +
+
+
thermometer-4 (alias) +
+
+
thermometer-empty +
+
+
thermometer-full +
+
+
thermometer-half +
+
+
thermometer-quarter +
+
+
thermometer-three-quarters +
+
+
times-rectangle (alias) +
+
+
times-rectangle-o (alias) +
+
+
user-circle +
+
+
user-circle-o +
+
+
user-o +
+
+
vcard (alias) +
+
+
vcard-o (alias) +
+
+
window-close +
+
+
window-close-o +
+
+
window-maximize +
+
+
window-minimize +
+
+
window-restore +
+
+
wpexplorer +
+
+
+
+
+
20 New Icons in 4.5
+
+
+
+ +
bluetooth +
+
+ +
bluetooth-b +
+
+ +
codiepie +
+
+ +
credit-card-alt +
+
+ +
edge +
+
+ +
fort-awesome +
+
+ +
hashtag +
+
+ +
mixcloud +
+
+ +
modx +
+
+ +
pause-circle +
+
+ +
pause-circle-o +
+
+ +
percent +
+
+ +
product-hunt +
+
+ +
reddit-alien +
+
+ +
scribd +
+
+ +
shopping-bag +
+
+ +
shopping-basket +
+
+ +
stop-circle +
+
+ +
stop-circle-o +
+
+ +
usb +
+
+
+
+
+
Web Application Icons
+
+
+
+ +
adjust +
+
+ +
anchor +
+
+ +
archive +
+
+ +
area-chart +
+
+ +
arrows +
+
+ +
arrows-h +
+
+ +
arrows-v +
+
+ +
asterisk +
+
+ +
at +
+
+ +
automobile + (alias) +
+
+ +
balance-scale +
+
+ +
ban +
+
+ +
bank + (alias) +
+
+ +
bar-chart +
+
+ +
bar-chart-o + (alias) +
+
+ +
barcode +
+
+ +
bars +
+
+ +
battery-0 + (alias) +
+
+ +
battery-1 + (alias) +
+
+ +
battery-2 + (alias) +
+
+ +
battery-3 + (alias) +
+
+ +
battery-4 + (alias) +
+
+ +
battery-empty +
+
+ +
battery-full +
+
+ +
battery-half +
+
+ +
battery-quarter +
+
+ +
battery-three-quarters +
+
+ +
bed +
+
+ +
beer +
+
+ +
bell +
+
+ +
bell-o +
+
+ +
bell-slash +
+
+ +
bell-slash-o +
+
+ +
bicycle +
+
+ +
binoculars +
+
+ +
birthday-cake +
+
+ +
bluetooth +
+
+ +
bluetooth-b +
+
+ +
bolt +
+
+ +
bomb +
+
+ +
book +
+
+ +
bookmark +
+
+ +
bookmark-o +
+
+ +
briefcase +
+
+ +
bug +
+
+ +
building +
+
+ +
building-o +
+
+ +
bullhorn +
+
+ +
bullseye +
+
+ +
bus +
+
+ +
cab + (alias) +
+
+ +
calculator +
+
+ +
calendar +
+
+ +
calendar-check-o +
+
+ +
calendar-minus-o +
+
+ +
calendar-o +
+
+ +
calendar-plus-o +
+
+ +
calendar-times-o +
+
+ +
camera +
+
+ +
camera-retro +
+
+ +
car +
+
+ +
caret-square-o-down +
+
+ +
caret-square-o-left +
+
+ +
caret-square-o-right +
+
+ +
caret-square-o-up +
+
+ +
cart-arrow-down +
+
+ +
cart-plus +
+
+ +
cc +
+
+ +
certificate +
+
+ +
check +
+
+ +
check-circle +
+
+ +
check-circle-o +
+
+ +
check-square +
+
+ +
check-square-o +
+
+ +
child +
+
+ +
circle +
+
+ +
circle-o +
+
+ +
circle-o-notch +
+
+ +
circle-thin +
+
+ +
clock-o +
+
+ +
clone +
+
+ +
close + (alias) +
+
+ +
cloud +
+
+ +
cloud-download +
+
+ +
cloud-upload +
+
+ +
code +
+
+ +
code-fork +
+
+ +
coffee +
+
+ +
cog +
+
+ +
cogs +
+
+ +
comment +
+
+ +
comment-o +
+
+ +
commenting +
+
+ +
commenting-o +
+
+ +
comments +
+
+ +
comments-o +
+
+ +
compass +
+
+ +
copyright +
+
+ +
creative-commons +
+
+ +
credit-card +
+
+ +
credit-card-alt +
+
+ +
crop +
+
+ +
crosshairs +
+
+ +
cube +
+
+ +
cubes +
+
+ +
cutlery +
+
+ +
dashboard + (alias) +
+
+ +
database +
+
+ +
desktop +
+
+ +
diamond +
+
+ +
dot-circle-o +
+
+ +
download +
+
+ +
edit + (alias) +
+
+ +
ellipsis-h +
+
+ +
ellipsis-v +
+
+ +
envelope +
+
+ +
envelope-o +
+
+ +
envelope-square +
+
+ +
eraser +
+
+ +
exchange +
+
+ +
exclamation +
+
+ +
exclamation-circle +
+
+ +
exclamation-triangle +
+
+ +
external-link +
+
+ +
external-link-square +
+
+ +
eye +
+
+ +
eye-slash +
+
+ +
eyedropper +
+
+ +
fax +
+
+ +
feed + (alias) +
+
+ +
female +
+
+ +
fighter-jet +
+
+ +
file-archive-o +
+
+ +
file-audio-o +
+
+ +
file-code-o +
+
+ +
file-excel-o +
+
+ +
file-image-o +
+
+ +
file-movie-o + (alias) +
+
+ +
file-pdf-o +
+
+ +
file-photo-o + (alias) +
+
+ +
file-picture-o + (alias) +
+
+ +
file-powerpoint-o +
+
+ +
file-sound-o + (alias) +
+
+ +
file-video-o +
+
+ +
file-word-o +
+
+ +
file-zip-o + (alias) +
+
+ +
film +
+
+ +
filter +
+
+ +
fire +
+
+ +
fire-extinguisher +
+
+ +
flag +
+
+ +
flag-checkered +
+
+ +
flag-o +
+
+ +
flash + (alias) +
+
+ +
flask +
+
+ +
folder +
+
+ +
folder-o +
+
+ +
folder-open +
+
+ +
folder-open-o +
+
+ +
frown-o +
+
+ +
futbol-o +
+
+ +
gamepad +
+
+ +
gavel +
+
+ +
gear + (alias) +
+
+ +
gears + (alias) +
+
+ +
gift +
+
+ +
glass +
+
+ +
globe +
+
+ +
graduation-cap +
+
+ +
group + (alias) +
+
+ +
hand-grab-o + (alias) +
+
+ +
hand-lizard-o +
+
+ +
hand-paper-o +
+
+ +
hand-peace-o +
+
+ +
hand-pointer-o +
+
+ +
hand-rock-o +
+
+ +
hand-scissors-o +
+
+ +
hand-spock-o +
+
+ +
hand-stop-o + (alias) +
+
+ +
hashtag +
+
+ +
hdd-o +
+
+ +
headphones +
+
+ +
heart +
+
+ +
heart-o +
+
+ +
heartbeat +
+
+ +
history +
+
+ +
home +
+
+ +
hotel + (alias) +
+
+ +
hourglass +
+
+ +
hourglass-1 + (alias) +
+
+ +
hourglass-2 + (alias) +
+
+ +
hourglass-3 + (alias) +
+
+ +
hourglass-end +
+
+ +
hourglass-half +
+
+ +
hourglass-o +
+
+ +
hourglass-start +
+
+ +
i-cursor +
+
+ +
image + (alias) +
+
+ +
inbox +
+
+ +
industry +
+
+ +
info +
+
+ +
info-circle +
+
+ +
institution + (alias) +
+
+ +
key +
+
+ +
keyboard-o +
+
+ +
language +
+
+ +
laptop +
+
+ +
leaf +
+
+ +
legal + (alias) +
+
+ +
lemon-o +
+
+ +
level-down +
+
+ +
level-up +
+
+ +
life-bouy + (alias) +
+
+ +
life-buoy + (alias) +
+
+ +
life-ring +
+
+ +
life-saver + (alias) +
+
+ +
lightbulb-o +
+
+ +
line-chart +
+
+ +
location-arrow +
+
+ +
lock +
+
+ +
magic +
+
+ +
magnet +
+
+ +
mail-forward + (alias) +
+
+ +
mail-reply + (alias) +
+
+ +
mail-reply-all + (alias) +
+
+ +
male +
+
+ +
map +
+
+ +
map-marker +
+
+ +
map-o +
+
+ +
map-pin +
+
+ +
map-signs +
+
+ +
meh-o +
+
+ +
microphone +
+
+ +
microphone-slash +
+
+ +
minus +
+
+ +
minus-circle +
+
+ +
minus-square +
+
+ +
minus-square-o +
+
+ +
mobile +
+
+ +
mobile-phone + (alias) +
+
+ +
money +
+
+ +
moon-o +
+
+ +
mortar-board + (alias) +
+
+ +
motorcycle +
+
+ +
mouse-pointer +
+
+ +
music +
+
+ +
navicon + (alias) +
+
+ +
newspaper-o +
+
+ +
object-group +
+
+ +
object-ungroup +
+
+ +
paint-brush +
+
+ +
paper-plane +
+
+ +
paper-plane-o +
+
+ +
paw +
+
+ +
pencil +
+
+ +
pencil-square +
+
+ +
pencil-square-o +
+
+ +
percent +
+
+ +
phone +
+
+ +
phone-square +
+
+ +
photo + (alias) +
+
+ +
picture-o +
+
+ +
pie-chart +
+
+ +
plane +
+
+ +
plug +
+
+ +
plus +
+
+ +
plus-circle +
+
+ +
plus-square +
+
+ +
plus-square-o +
+
+ +
power-off +
+
+ +
print +
+
+ +
puzzle-piece +
+
+ +
qrcode +
+
+ +
question +
+
+ +
question-circle +
+
+ +
quote-left +
+
+ +
quote-right +
+
+ +
random +
+
+ +
recycle +
+
+ +
refresh +
+
+ +
registered +
+
+ +
remove + (alias) +
+
+ +
reorder + (alias) +
+
+ +
reply +
+
+ +
reply-all +
+
+ +
retweet +
+
+ +
road +
+
+ +
rocket +
+
+ +
rss +
+
+ +
rss-square +
+
+ +
search +
+
+ +
search-minus +
+
+ +
search-plus +
+
+ +
send + (alias) +
+
+ +
send-o + (alias) +
+
+ +
server +
+
+ +
share +
+
+ +
share-alt +
+
+ +
share-alt-square +
+
+ +
share-square +
+
+ +
share-square-o +
+
+ +
shield +
+
+ +
ship +
+
+ +
shopping-bag +
+
+ +
shopping-basket +
+
+ +
shopping-cart +
+
+ +
sign-in +
+
+ +
sign-out +
+
+ +
signal +
+
+ +
sitemap +
+
+ +
sliders +
+
+ +
smile-o +
+
+ +
soccer-ball-o + (alias) +
+
+ +
sort +
+
+ +
sort-alpha-asc +
+
+ +
sort-alpha-desc +
+
+ +
sort-amount-asc +
+
+ +
sort-amount-desc +
+
+ +
sort-asc +
+
+ +
sort-desc +
+
+ +
sort-down + (alias) +
+
+ +
sort-numeric-asc +
+
+ +
sort-numeric-desc +
+
+ +
sort-up + (alias) +
+
+ +
space-shuttle +
+
+ +
spinner +
+
+ +
spoon +
+
+ +
square +
+
+ +
square-o +
+
+ +
star +
+
+ +
star-half +
+
+ +
star-half-empty + (alias) +
+
+ +
star-half-full + (alias) +
+
+ +
star-half-o +
+
+ +
star-o +
+
+ +
sticky-note +
+
+ +
sticky-note-o +
+
+ +
street-view +
+
+ +
suitcase +
+
+ +
sun-o +
+
+ +
support + (alias) +
+
+ +
tablet +
+
+ +
tachometer +
+
+ +
tag +
+
+ +
tags +
+
+ +
tasks +
+
+ +
taxi +
+
+ +
television +
+
+ +
terminal +
+
+ +
thumb-tack +
+
+ +
thumbs-down +
+
+ +
thumbs-o-down +
+
+ +
thumbs-o-up +
+
+ +
thumbs-up +
+
+ +
ticket +
+
+ +
times +
+
+ +
times-circle +
+
+ +
times-circle-o +
+
+ +
tint +
+
+ +
toggle-down + (alias) +
+
+ +
toggle-left + (alias) +
+
+ +
toggle-off +
+
+ +
toggle-on +
+
+ +
toggle-right + (alias) +
+
+ +
toggle-up + (alias) +
+
+ +
trademark +
+
+ +
trash +
+
+ +
trash-o +
+
+ +
tree +
+
+ +
trophy +
+
+ +
truck +
+
+ +
tty +
+
+ +
tv + (alias) +
+
+ +
umbrella +
+
+ +
university +
+
+ +
unlock +
+
+ +
unlock-alt +
+
+ +
unsorted + (alias) +
+
+ +
upload +
+
+ +
user +
+
+ +
user-plus +
+
+ +
user-secret +
+
+ +
user-times +
+
+ +
users +
+
+ +
video-camera +
+
+ +
volume-down +
+
+ +
volume-off +
+
+ +
volume-up +
+
+ +
warning + (alias) +
+
+ +
wheelchair +
+
+ +
wifi +
+
+ +
wrench +
+
+
+
+
+
Hand Icons
+
+
+
+ +
hand-grab-o + (alias) +
+
+ +
hand-lizard-o +
+
+ +
hand-o-down +
+
+ +
hand-o-left +
+
+ +
hand-o-right +
+
+ +
hand-o-up +
+
+ +
hand-paper-o +
+
+ +
hand-peace-o +
+
+ +
hand-pointer-o +
+
+ +
hand-rock-o +
+
+ +
hand-scissors-o +
+
+ +
hand-spock-o +
+
+ +
hand-stop-o + (alias) +
+
+ +
thumbs-down +
+
+ +
thumbs-o-down +
+
+ +
thumbs-o-up +
+
+ +
thumbs-up +
+
+
+
+
+
Transportation Icons
+
+
+
+ +
ambulance +
+
+ +
automobile + (alias) +
+
+ +
bicycle +
+
+ +
bus +
+
+ +
cab + (alias) +
+
+ +
car +
+
+ +
fighter-jet +
+
+ +
motorcycle +
+
+ +
plane +
+
+ +
rocket +
+
+ +
ship +
+
+ +
space-shuttle +
+
+ +
subway +
+
+ +
taxi +
+
+ +
train +
+
+ +
truck +
+
+ +
wheelchair +
+
+
+
+
+
Gender Icons
+
+
+
+ +
genderless +
+
+ +
intersex + (alias) +
+
+ +
mars +
+
+ +
mars-double +
+
+ +
mars-stroke +
+
+ +
mars-stroke-h +
+
+ +
mars-stroke-v +
+
+ +
mercury +
+
+ +
neuter +
+
+ +
transgender +
+
+ +
transgender-alt +
+
+ +
venus +
+
+ +
venus-double +
+
+ +
venus-mars +
+
+
+
+
+
File Type Icons
+
+
+
+ +
file +
+
+ +
file-archive-o +
+
+ +
file-audio-o +
+
+ +
file-code-o +
+
+ +
file-excel-o +
+
+ +
file-image-o +
+
+ +
file-movie-o + (alias) +
+
+ +
file-o +
+
+ +
file-pdf-o +
+
+ +
file-photo-o + (alias) +
+
+ +
file-picture-o + (alias) +
+
+ +
file-powerpoint-o +
+
+ +
file-sound-o + (alias) +
+
+ +
file-text +
+
+ +
file-text-o +
+
+ +
file-video-o +
+
+ +
file-word-o +
+
+ +
file-zip-o + (alias) +
+
+
+
+
+
Spinner Icons
+
+
+
    +
  • + These icons work great with the + fa-spin class. +
  • +
+
+
+
+ +
circle-o-notch +
+
+ +
cog +
+
+ +
gear + (alias) +
+
+ +
refresh +
+
+ +
spinner +
+
+
+
+
+
Form Control Icons
+
+
+
+ +
check-square +
+
+ +
check-square-o +
+
+ +
circle +
+
+ +
circle-o +
+
+ +
dot-circle-o +
+
+ +
minus-square +
+
+ +
minus-square-o +
+
+ +
plus-square +
+
+ +
plus-square-o +
+
+ +
square +
+
+ +
square-o +
+
+
+
+
+
Payment Icons
+
+
+
+ +
cc-amex +
+
+ +
cc-diners-club +
+
+ +
cc-discover +
+
+ +
cc-jcb +
+
+ +
cc-mastercard +
+
+ +
cc-paypal +
+
+ +
cc-stripe +
+
+ +
cc-visa +
+
+ +
credit-card +
+
+ +
credit-card-alt +
+
+ +
google-wallet +
+
+ +
paypal +
+
+
+
+
+
Chart Icons
+
+
+
+ +
area-chart +
+
+ +
bar-chart +
+
+ +
bar-chart-o + (alias) +
+
+ +
line-chart +
+
+ +
pie-chart +
+
+
+
+
+
Currency Icons
+
+
+
+ +
bitcoin + (alias) +
+
+ +
btc +
+
+ +
cny + (alias) +
+
+ +
dollar + (alias) +
+
+ +
eur +
+
+ +
euro + (alias) +
+
+ +
gbp +
+
+ +
gg +
+
+ +
gg-circle +
+
+ +
ils +
+
+ +
inr +
+
+ +
jpy +
+
+ +
krw +
+
+ +
money +
+
+ +
rmb + (alias) +
+
+ +
rouble + (alias) +
+
+ +
rub +
+
+ +
ruble + (alias) +
+
+ +
rupee + (alias) +
+
+ +
shekel + (alias) +
+
+ +
sheqel + (alias) +
+
+ +
try +
+
+ +
turkish-lira + (alias) +
+
+ +
usd +
+
+ +
won + (alias) +
+
+ +
yen + (alias) +
+
+
+
+
+
Text Editor Icons
+
+
+
+ +
align-center +
+
+ +
align-justify +
+
+ +
align-left +
+
+ +
align-right +
+
+ +
bold +
+
+ +
chain + (alias) +
+
+ +
chain-broken +
+
+ +
clipboard +
+
+ +
columns +
+
+ +
copy + (alias) +
+
+ +
cut + (alias) +
+
+ +
dedent + (alias) +
+
+ +
eraser +
+
+ +
file +
+
+ +
file-o +
+
+ +
file-text +
+
+ +
file-text-o +
+
+ +
files-o +
+
+ +
floppy-o +
+
+ +
font +
+
+ +
header +
+
+ +
indent +
+
+ +
italic +
+
+ +
link +
+
+ +
list +
+
+ +
list-alt +
+
+ +
list-ol +
+
+ +
list-ul +
+
+ +
outdent +
+
+ +
paperclip +
+
+ +
paragraph +
+
+ +
paste + (alias) +
+
+ +
repeat +
+
+ +
rotate-left + (alias) +
+
+ +
rotate-right + (alias) +
+
+ +
save + (alias) +
+
+ +
scissors +
+
+ +
strikethrough +
+
+ +
subscript +
+
+ +
superscript +
+
+ +
table +
+
+ +
text-height +
+
+ +
text-width +
+
+ +
th +
+
+ +
th-large +
+
+ +
th-list +
+
+ +
underline +
+
+ +
undo +
+
+ +
unlink + (alias) +
+
+
+
+
+
Directional Icons
+
+
+
+ +
angle-double-down +
+
+ +
angle-double-left +
+
+ +
angle-double-right +
+
+ +
angle-double-up +
+
+ +
angle-down +
+
+ +
angle-left +
+
+ +
angle-right +
+
+ +
angle-up +
+
+ +
arrow-circle-down +
+
+ +
arrow-circle-left +
+
+ +
arrow-circle-o-down +
+
+ +
arrow-circle-o-left +
+
+ +
arrow-circle-o-right +
+
+ +
arrow-circle-o-up +
+
+ +
arrow-circle-right +
+
+ +
arrow-circle-up +
+
+ +
arrow-down +
+
+ +
arrow-left +
+
+ +
arrow-right +
+
+ +
arrow-up +
+
+ +
arrows +
+
+ +
arrows-alt +
+
+ +
arrows-h +
+
+ +
arrows-v +
+
+ +
caret-down +
+
+ +
caret-left +
+
+ +
caret-right +
+
+ +
caret-square-o-down +
+
+ +
caret-square-o-left +
+
+ +
caret-square-o-right +
+
+ +
caret-square-o-up +
+
+ +
caret-up +
+
+ +
chevron-circle-down +
+
+ +
chevron-circle-left +
+
+ +
chevron-circle-right +
+
+ +
chevron-circle-up +
+
+ +
chevron-down +
+
+ +
chevron-left +
+
+ +
chevron-right +
+
+ +
chevron-up +
+
+ +
exchange +
+
+ +
hand-o-down +
+
+ +
hand-o-left +
+
+ +
hand-o-right +
+
+ +
hand-o-up +
+
+ +
long-arrow-down +
+
+ +
long-arrow-left +
+
+ +
long-arrow-right +
+
+ +
long-arrow-up +
+
+ +
toggle-down + (alias) +
+
+ +
toggle-left + (alias) +
+
+ +
toggle-right + (alias) +
+
+ +
toggle-up + (alias) +
+
+
+
+
+
Video Player Icons
+
+
+
+ +
arrows-alt +
+
+ +
backward +
+
+ +
compress +
+
+ +
eject +
+
+ +
expand +
+
+ +
fast-backward +
+
+ +
fast-forward +
+
+ +
forward +
+
+ +
pause +
+
+ +
pause-circle +
+
+ +
pause-circle-o +
+
+ +
play +
+
+ +
play-circle +
+
+ +
play-circle-o +
+
+ +
random +
+
+ +
step-backward +
+
+ +
step-forward +
+
+ +
stop +
+
+ +
stop-circle +
+
+ +
stop-circle-o +
+
+ +
youtube-play +
+
+
+
+
+
Brand Icons
+
+
+

Warning!

+ Apparently, Adblock Plus can remove Font Awesome brand icons with their "Remove Social Media Buttons" setting. We will not use hacks to force them to display. Please + report an issue with Adblock Plus if you believe this to be an error. To work around this, you'll need to modify the social icon class names. +
+
+
+ +
500px +
+
+ +
adn +
+
+ +
amazon +
+
+ +
android +
+
+ +
angellist +
+
+ +
apple +
+
+ +
behance +
+
+ +
behance-square +
+
+ +
bitbucket +
+
+ +
bitbucket-square +
+
+ +
bitcoin + (alias) +
+
+ +
black-tie +
+
+ +
bluetooth +
+
+ +
bluetooth-b +
+
+ +
btc +
+
+ +
buysellads +
+
+ +
cc-amex +
+
+ +
cc-diners-club +
+
+ +
cc-discover +
+
+ +
cc-jcb +
+
+ +
cc-mastercard +
+
+ +
cc-paypal +
+
+ +
cc-stripe +
+
+ +
cc-visa +
+
+ +
chrome +
+
+ +
codepen +
+
+ +
codiepie +
+
+ +
connectdevelop +
+
+ +
contao +
+
+ +
css3 +
+
+ +
dashcube +
+
+ +
delicious +
+
+ +
deviantart +
+
+ +
digg +
+
+ +
dribbble +
+
+ +
dropbox +
+
+ +
drupal +
+
+ +
edge +
+
+ +
empire +
+
+ +
expeditedssl +
+
+ +
facebook +
+
+ +
facebook-f + (alias) +
+
+ +
facebook-official +
+
+ +
facebook-square +
+
+ +
firefox +
+
+ +
flickr +
+
+ +
fonticons +
+
+ +
fort-awesome +
+
+ +
forumbee +
+
+ +
foursquare +
+
+ +
ge + (alias) +
+
+ +
get-pocket +
+
+ +
gg +
+
+ +
gg-circle +
+
+ +
git +
+
+ +
git-square +
+
+ +
github +
+
+ +
github-alt +
+
+ +
github-square +
+
+ +
gittip + (alias) +
+
+ +
google +
+
+ +
google-plus +
+
+ +
google-plus-square +
+
+ +
google-wallet +
+
+ +
gratipay +
+
+ +
hacker-news +
+
+ +
houzz +
+
+ +
html5 +
+
+ +
instagram +
+
+ +
internet-explorer +
+
+ +
ioxhost +
+
+ +
joomla +
+
+ +
jsfiddle +
+
+ +
lastfm +
+
+ +
lastfm-square +
+
+ +
leanpub +
+
+ +
linkedin +
+
+ +
linkedin-square +
+
+ +
linux +
+
+ +
maxcdn +
+
+ +
meanpath +
+
+ +
medium +
+
+ +
mixcloud +
+
+ +
modx +
+
+ +
odnoklassniki +
+
+ +
odnoklassniki-square +
+
+ +
opencart +
+
+ +
openid +
+
+ +
opera +
+
+ +
optin-monster +
+
+ +
pagelines +
+
+ +
paypal +
+
+ +
pied-piper +
+
+ +
pied-piper-alt +
+
+ +
pinterest +
+
+ +
pinterest-p +
+
+ +
pinterest-square +
+
+ +
product-hunt +
+
+ +
qq +
+
+ +
ra + (alias) +
+
+ +
rebel +
+
+ +
reddit +
+
+ +
reddit-alien +
+
+ +
reddit-square +
+
+ +
renren +
+
+ +
safari +
+
+ +
scribd +
+
+ +
sellsy +
+
+ +
share-alt +
+
+ +
share-alt-square +
+
+ +
shirtsinbulk +
+
+ +
simplybuilt +
+
+ +
skyatlas +
+
+ +
skype +
+
+ +
slack +
+
+ +
slideshare +
+
+ +
soundcloud +
+
+ +
spotify +
+
+ +
stack-exchange +
+
+ +
stack-overflow +
+
+ +
steam +
+
+ +
steam-square +
+
+ +
stumbleupon +
+
+ +
stumbleupon-circle +
+
+ +
tencent-weibo +
+
+ +
trello +
+
+ +
tripadvisor +
+
+ +
tumblr +
+
+ +
tumblr-square +
+
+ +
twitch +
+
+ +
twitter +
+
+ +
twitter-square +
+
+ +
usb +
+
+ +
viacoin +
+
+ +
vimeo +
+
+ +
vimeo-square +
+
+ +
vine +
+
+ +
vk +
+
+ +
wechat + (alias) +
+
+ +
weibo +
+
+ +
weixin +
+
+ +
whatsapp +
+
+ +
wikipedia-w +
+
+ +
windows +
+
+ +
wordpress +
+
+ +
xing +
+
+ +
xing-square +
+
+ +
y-combinator +
+
+ +
y-combinator-square + (alias) +
+
+ +
yahoo +
+
+ +
yc + (alias) +
+
+ +
yc-square + (alias) +
+
+ +
yelp +
+
+ +
youtube +
+
+ +
youtube-play +
+
+ +
youtube-square +
+
+
+
    +
  • All brand icons are trademarks of their respective owners.
  • +
  • The use of these trademarks does not indicate endorsement of the trademark holder by Font Awesome, nor vice versa.
  • +
  • Brand icons should only be used to represent the company or product to which they refer.
  • +
+
+
+
+
+
Medical Icons
+
+
+
+ +
ambulance +
+
+ +
h-square +
+
+ +
heart +
+
+ +
heart-o +
+
+ +
heartbeat +
+
+ +
hospital-o +
+
+ +
medkit +
+
+ +
plus-square +
+
+ +
stethoscope +
+
+ +
user-md +
+
+ +
wheelchair +
+
+
+
+
diff --git a/src/app/views/icons/font-awesome.component.ts b/src/app/views/icons/font-awesome.component.ts new file mode 100644 index 0000000..12828a9 --- /dev/null +++ b/src/app/views/icons/font-awesome.component.ts @@ -0,0 +1,10 @@ +import { Component } from '@angular/core'; + +@Component({ + templateUrl: 'font-awesome.component.html' +}) +export class FontAwesomeComponent { + + constructor() { } + +} diff --git a/src/app/views/icons/icons-routing.module.ts b/src/app/views/icons/icons-routing.module.ts new file mode 100644 index 0000000..ff769fa --- /dev/null +++ b/src/app/views/icons/icons-routing.module.ts @@ -0,0 +1,52 @@ +import { NgModule } from '@angular/core'; +import { Routes, RouterModule } from '@angular/router'; + +import { CoreUIIconsComponent } from './coreui-icons.component'; +import { FlagsComponent } from './flags.component'; +import { FontAwesomeComponent } from './font-awesome.component'; +import { SimpleLineIconsComponent } from './simple-line-icons.component'; + +const routes: Routes = [ + { + path: '', + data: { + title: 'Icons' + }, + children: [ + { + path: 'coreui-icons', + component: CoreUIIconsComponent, + data: { + title: 'CoreUI Icons' + } + }, + { + path: 'flags', + component: FlagsComponent, + data: { + title: 'Flags' + } + }, + { + path: 'font-awesome', + component: FontAwesomeComponent, + data: { + title: 'Font Awesome' + } + }, + { + path: 'simple-line-icons', + component: SimpleLineIconsComponent, + data: { + title: 'Simple Line Icons' + } + } + ] + } +]; + +@NgModule({ + imports: [RouterModule.forChild(routes)], + exports: [RouterModule] +}) +export class IconsRoutingModule {} diff --git a/src/app/views/icons/icons.module.ts b/src/app/views/icons/icons.module.ts new file mode 100644 index 0000000..5746961 --- /dev/null +++ b/src/app/views/icons/icons.module.ts @@ -0,0 +1,19 @@ +import { NgModule } from '@angular/core'; + +import { CoreUIIconsComponent } from './coreui-icons.component'; +import { FlagsComponent } from './flags.component'; +import { FontAwesomeComponent } from './font-awesome.component'; +import { SimpleLineIconsComponent } from './simple-line-icons.component'; + +import { IconsRoutingModule } from './icons-routing.module'; + +@NgModule({ + imports: [ IconsRoutingModule ], + declarations: [ + CoreUIIconsComponent, + FlagsComponent, + FontAwesomeComponent, + SimpleLineIconsComponent + ] +}) +export class IconsModule { } diff --git a/src/app/views/icons/simple-line-icons.component.html b/src/app/views/icons/simple-line-icons.component.html new file mode 100644 index 0000000..ffd01db --- /dev/null +++ b/src/app/views/icons/simple-line-icons.component.html @@ -0,0 +1,561 @@ +
+
+
+ Simple Line Icons +
+
+
+
+ icon-user +
+
+ icon-people +
+
+ icon-user-female +
+
+ icon-user-follow +
+
+ icon-user-following +
+
+ icon-user-unfollow +
+
+ icon-login +
+
+ icon-logout +
+
+ icon-emotsmile +
+
+ icon-phone +
+
+ icon-call-end +
+
+ icon-call-in +
+
+ icon-call-out +
+
+ icon-map +
+
+ icon-location-pin +
+
+ icon-direction +
+
+ icon-directions +
+
+ icon-compass +
+
+ icon-layers +
+
+ icon-menu +
+
+ icon-list +
+
+ icon-options-vertical +
+
+ icon-options +
+
+ icon-arrow-down +
+
+ icon-arrow-left +
+
+ icon-arrow-right +
+
+ icon-arrow-up +
+
+ icon-arrow-up-circle +
+
+ icon-arrow-left-circle +
+
+ icon-arrow-right-circle +
+
+ icon-arrow-down-circle +
+
+ icon-check +
+
+ icon-clock +
+
+ icon-plus +
+
+ icon-close +
+
+ icon-trophy +
+
+ icon-screen-smartphone +
+
+ icon-screen-desktop +
+
+ icon-plane +
+
+ icon-notebook +
+
+ icon-mustache +
+
+ icon-mouse +
+
+ icon-magnet +
+
+ icon-energy +
+
+ icon-disc +
+
+ icon-cursor +
+
+ icon-cursor-move +
+
+ icon-crop +
+
+ icon-chemistry +
+
+ icon-speedometer +
+
+ icon-shield +
+
+ icon-screen-tablet +
+
+ icon-magic-wand +
+
+ icon-hourglass +
+
+ icon-graduation +
+
+ icon-ghost +
+
+ icon-game-controller +
+
+ icon-fire +
+
+ icon-eyeglass +
+
+ icon-envelope-open +
+
+ icon-envelope-letter +
+
+ icon-bell +
+
+ icon-badge +
+
+ icon-anchor +
+
+ icon-wallet +
+
+ icon-vector +
+
+ icon-speech +
+
+ icon-puzzle +
+
+ icon-printer +
+
+ icon-present +
+
+ icon-playlist +
+
+ icon-pin +
+
+ icon-picture +
+
+ icon-handbag +
+
+ icon-globe-alt +
+
+ icon-globe +
+
+ icon-folder-alt +
+
+ icon-folder +
+
+ icon-film +
+
+ icon-feed +
+
+ icon-drop +
+
+ icon-drawer +
+
+ icon-docs +
+
+ icon-doc +
+
+ icon-diamond +
+
+ icon-cup +
+
+ icon-calculator +
+
+ icon-bubbles +
+
+ icon-briefcase +
+
+ icon-book-open +
+
+ icon-basket-loaded +
+
+ icon-basket +
+
+ icon-bag +
+
+ icon-action-undo +
+
+ icon-action-redo +
+
+ icon-wrench +
+
+ icon-umbrella +
+
+ icon-trash +
+
+ icon-tag +
+
+ icon-support +
+
+ icon-frame +
+
+ icon-size-fullscreen +
+
+ icon-size-actual +
+
+ icon-shuffle +
+
+ icon-share-alt +
+
+ icon-share +
+
+ icon-rocket +
+
+ icon-question +
+
+ icon-pie-chart +
+
+ icon-pencil +
+
+ icon-note +
+
+ icon-loop +
+
+ icon-home +
+
+ icon-grid +
+
+ icon-graph +
+
+ icon-microphone +
+
+ icon-music-tone-alt +
+
+ icon-music-tone +
+
+ icon-earphones-alt +
+
+ icon-earphones +
+
+ icon-equalizer +
+
+ icon-like +
+
+ icon-dislike +
+
+ icon-control-start +
+
+ icon-control-rewind +
+
+ icon-control-play +
+
+ icon-control-pause +
+
+ icon-control-forward +
+
+ icon-control-end +
+
+ icon-volume-1 +
+
+ icon-volume-2 +
+
+ icon-volume-off +
+
+ icon-calendar +
+
+ icon-bulb +
+
+ icon-chart +
+
+ icon-ban +
+
+ icon-bubble +
+
+ icon-camrecorder +
+
+ icon-camera +
+
+ icon-cloud-download +
+
+ icon-cloud-upload +
+
+ icon-envelope +
+
+ icon-eye +
+
+ icon-flag +
+
+ icon-heart +
+
+ icon-info +
+
+ icon-key +
+
+ icon-link +
+
+ icon-lock +
+
+ icon-lock-open +
+
+ icon-magnifier +
+
+ icon-magnifier-add +
+
+ icon-magnifier-remove +
+
+ icon-paper-clip +
+
+ icon-paper-plane +
+
+ icon-power +
+
+ icon-refresh +
+
+ icon-reload +
+
+ icon-settings +
+
+ icon-star +
+
+ icon-symbol-female +
+
+ icon-symbol-male +
+
+ icon-target +
+
+ icon-credit-card +
+
+ icon-paypal +
+
+ icon-social-tumblr +
+
+ icon-social-twitter +
+
+ icon-social-facebook +
+
+ icon-social-instagram +
+
+ icon-social-linkedin +
+
+ icon-social-pinterest +
+
+ icon-social-github +
+
+ icon-social-gplus +
+
+ icon-social-reddit +
+
+ icon-social-skype +
+
+ icon-social-dribbble +
+
+ icon-social-behance +
+
+ icon-social-foursqare +
+
+ icon-social-soundcloud +
+
+ icon-social-spotify +
+
+ icon-social-stumbleupon +
+
+ icon-social-youtube +
+
+ icon-social-dropbox +
+
+ +
+
+
diff --git a/src/app/views/icons/simple-line-icons.component.ts b/src/app/views/icons/simple-line-icons.component.ts new file mode 100644 index 0000000..0249990 --- /dev/null +++ b/src/app/views/icons/simple-line-icons.component.ts @@ -0,0 +1,10 @@ +import { Component } from '@angular/core'; + +@Component({ + templateUrl: 'simple-line-icons.component.html' +}) +export class SimpleLineIconsComponent { + + constructor() { } + +} diff --git a/src/app/views/login/login.component.html b/src/app/views/login/login.component.html new file mode 100644 index 0000000..7aeaccb --- /dev/null +++ b/src/app/views/login/login.component.html @@ -0,0 +1,49 @@ +
+
+
+
+
+
+
+
+
+

Login

+

Sign In to your account

+
+
+ +
+ +
+
+
+ +
+ +
+
+
+ +
+
+ +
+
+
+
+
+
+
+
+

Sign up

+

Lorem ipsum dolor sit amet, consectetur adipisicing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua.

+ +
+
+
+
+
+
+
+
+
diff --git a/src/app/views/login/login.component.ts b/src/app/views/login/login.component.ts new file mode 100644 index 0000000..1fee9e6 --- /dev/null +++ b/src/app/views/login/login.component.ts @@ -0,0 +1,14 @@ +import { Component } from '@angular/core'; + +@Component({ + selector: 'app-dashboard', + templateUrl: 'login.component.html', +}) + +// Adapted from: https://damienbod.com/2016/03/02/angular2-openid-connect-implicit-flow-with-identityserver4/ +// https://github.com/damienbod/AspNet5IdentityServerAngularImplicitFlow/tree/master/src/AngularClient +export class LoginComponent { + login() { + alert("Please implement IdentityServer4"); + } +} diff --git a/src/app/views/notifications/alerts.component.html b/src/app/views/notifications/alerts.component.html new file mode 100644 index 0000000..98ffb1d --- /dev/null +++ b/src/app/views/notifications/alerts.component.html @@ -0,0 +1,182 @@ +
+
+
+
+
+ Bootstrap Alerts + +
+
+ + Well done! You successfully read this important alert message. + + + Heads up! This alert needs your attention, but it's not super important. + + + Warning! Better check yourself, you're not looking too good. + + + Oh snap! Change a few things up and try submitting again. + +
+
+
+
+
+
+ Alerts + link +
+
+ + Well done! You successfully read this important alert message. + + + Heads up! This alert needs your attention, but it's not super important. + + + Warning! Better check yourself, you're not looking too good. + + + Oh snap! Change a few things up and try submitting again. + +
+
+
+
+
+
+
+
+ Alerts additional content +
+
+ +

Well done!

+

Aww yeah, you successfully read this important alert message. This example text is going to run a bit longer so that you can see how spacing within an alert works with this kind of content.

+

Whenever you need to, be sure to use margin utilities to keep things nice and tidy.

+
+
+
+
+
+
+
+ Alerts dismissing +
+
+
+ {{ alert.msg }} +
+ + +
+
+
+
+
+
+
+
+ Alerts dynamic html +
+
+
+ +
+
+
+
+
+
+
+ Alerts dynamic content +
+
+ {{messages[index]}} + +
+ +
+ + + +
+
+
+
+
+
+
+
+ Alerts dismiss on timeout +
+
+ + Well done! You successfully read this important alert message. + + +

If you missed alert on top of me, just press Add more button

+
+ {{ alert.msg }} +
+ +
+
+
+
+
+
+ Alerts global styling +
+
+ + + Well done! You successfully read this important alert message. + +
+
+
+
+
+
+
+
+ Alerts component level styling +
+
+ + Well done! You successfully read this important alert message. + +
+
+
+
+
+
+ Alerts configuring defaults +
+
+ + Well done! You successfully read this important alert message. + + + Heads up! This alert needs your attention, but it's not super important. + + +
+
+
+
+
diff --git a/src/app/views/notifications/alerts.component.ts b/src/app/views/notifications/alerts.component.ts new file mode 100644 index 0000000..995ccd3 --- /dev/null +++ b/src/app/views/notifications/alerts.component.ts @@ -0,0 +1,90 @@ +import { Component, SecurityContext, ViewEncapsulation } from '@angular/core'; +import { DomSanitizer } from '@angular/platform-browser'; +import { AlertConfig } from 'ngx-bootstrap/alert'; + +// such override allows to keep some initial values + +export function getAlertConfig(): AlertConfig { + return Object.assign(new AlertConfig(), { type: 'success' }); +} + +@Component({ + templateUrl: 'alerts.component.html', + encapsulation: ViewEncapsulation.None, + styles: [ + ` + .alert-md-local { + background-color: #009688; + border-color: #00695C; + color: #fff; + } + ` + ], + providers: [{ provide: AlertConfig, useFactory: getAlertConfig }] +}) +export class AlertsComponent { + + constructor(sanitizer: DomSanitizer) { + this.alertsHtml = this.alertsHtml.map((alert: any) => ({ + type: alert.type, + msg: sanitizer.sanitize(SecurityContext.HTML, alert.msg) + })); + } + dismissible = true; + alerts: any = [ + { + type: 'success', + msg: `You successfully read this important alert message.` + }, + { + type: 'info', + msg: `This alert needs your attention, but it's not super important.` + }, + { + type: 'danger', + msg: `Better check yourself, you're not looking too good.` + } + ]; + + alertsHtml: any = [ + { + type: 'success', + msg: `Well done! You successfully read this important alert message.` + }, + { + type: 'info', + msg: `Heads up! This alert needs your attention, but it's not super important.` + }, + { + type: 'danger', + msg: `Warning! Better check yourself, you're not looking too good.` + } + ]; + + index = 0; + messages = [ + 'You successfully read this important alert message.', + 'Now this text is different from what it was before. Go ahead and click the button one more time', + 'Well done! Click reset button and you\'ll see the first message' + ]; + + alertsDismiss: any = []; + + reset(): void { + this.alerts = this.alerts.map((alert: any) => Object.assign({}, alert)); + } + + changeText() { + if (this.messages.length - 1 !== this.index) { + this.index++; + } + } + + add(): void { + this.alertsDismiss.push({ + type: 'info', + msg: `This alert will be closed in 5 seconds (added: ${new Date().toLocaleTimeString()})`, + timeout: 5000 + }); + } +} diff --git a/src/app/views/notifications/badges.component.html b/src/app/views/notifications/badges.component.html new file mode 100644 index 0000000..7909eb2 --- /dev/null +++ b/src/app/views/notifications/badges.component.html @@ -0,0 +1,92 @@ +
+
+
+
+
+ Bootstrap Badges + +
+
+

Example heading + New +

+

Example heading + New +

+

Example heading + New +

+

Example heading + New +

+
Example heading + New +
+
Example heading + New +
+
+ +
+
+
+
+
+ Bootstrap Badges + contextual variations +
+
+ Primary + Secondary + Success + Danger + Warning + Info + Light + Dark +
+
+
+
+ Bootstrap Badges + pill badges +
+
+ Primary + Secondary + Success + Danger + Warning + Info + Light + Dark +
+
+
+
+ Bootstrap Badges + links +
+ +
+
+
+ +
diff --git a/src/app/views/notifications/badges.component.ts b/src/app/views/notifications/badges.component.ts new file mode 100644 index 0000000..9c988ee --- /dev/null +++ b/src/app/views/notifications/badges.component.ts @@ -0,0 +1,10 @@ +import { Component } from '@angular/core'; + +@Component({ + templateUrl: 'badges.component.html' +}) +export class BadgesComponent { + + constructor() { } + +} diff --git a/src/app/views/notifications/modals.component.html b/src/app/views/notifications/modals.component.html new file mode 100644 index 0000000..484a472 --- /dev/null +++ b/src/app/views/notifications/modals.component.html @@ -0,0 +1,202 @@ +
+
+
+
+
+ Bootstrap Modals +
+
+ + + + +
+ + + + + +
+
+
+
+
+ + + + + + + + + + + + + + + + + + + diff --git a/src/app/views/notifications/modals.component.ts b/src/app/views/notifications/modals.component.ts new file mode 100644 index 0000000..c0d423c --- /dev/null +++ b/src/app/views/notifications/modals.component.ts @@ -0,0 +1,16 @@ +import { Component, ViewChild } from '@angular/core'; +import { ModalDirective } from 'ngx-bootstrap/modal'; + +@Component({ + templateUrl: 'modals.component.html' +}) +export class ModalsComponent { + public myModal; + public largeModal; + public smallModal; + public primaryModal; + public successModal; + public warningModal; + public dangerModal; + public infoModal; +} diff --git a/src/app/views/notifications/notifications-routing.module.ts b/src/app/views/notifications/notifications-routing.module.ts new file mode 100644 index 0000000..775a541 --- /dev/null +++ b/src/app/views/notifications/notifications-routing.module.ts @@ -0,0 +1,44 @@ +import { NgModule } from '@angular/core'; +import { Routes, RouterModule } from '@angular/router'; + +import { AlertsComponent } from './alerts.component'; +import { BadgesComponent } from './badges.component'; +import { ModalsComponent } from './modals.component'; + +const routes: Routes = [ + { + path: '', + data: { + title: 'Notifications' + }, + children: [ + { + path: 'alerts', + component: AlertsComponent, + data: { + title: 'Alerts' + } + }, + { + path: 'badges', + component: BadgesComponent, + data: { + title: 'Badges' + } + }, + { + path: 'modals', + component: ModalsComponent, + data: { + title: 'Modals' + } + } + ] + } +]; + +@NgModule({ + imports: [RouterModule.forChild(routes)], + exports: [RouterModule] +}) +export class NotificationsRoutingModule {} diff --git a/src/app/views/notifications/notifications.module.ts b/src/app/views/notifications/notifications.module.ts new file mode 100644 index 0000000..797be36 --- /dev/null +++ b/src/app/views/notifications/notifications.module.ts @@ -0,0 +1,31 @@ +// Angular +import { CommonModule } from '@angular/common'; +import { NgModule } from '@angular/core'; + +// Alert Component +import { AlertModule } from 'ngx-bootstrap/alert'; +import { AlertsComponent } from './alerts.component'; + +import { BadgesComponent } from './badges.component'; + +// Modal Component +import { ModalModule } from 'ngx-bootstrap/modal'; +import { ModalsComponent } from './modals.component'; + +// Notifications Routing +import { NotificationsRoutingModule } from './notifications-routing.module'; + +@NgModule({ + imports: [ + CommonModule, + NotificationsRoutingModule, + AlertModule.forRoot(), + ModalModule.forRoot() + ], + declarations: [ + AlertsComponent, + BadgesComponent, + ModalsComponent + ] +}) +export class NotificationsModule { } diff --git a/src/app/views/register/register.component.html b/src/app/views/register/register.component.html new file mode 100644 index 0000000..c05ed0c --- /dev/null +++ b/src/app/views/register/register.component.html @@ -0,0 +1,53 @@ +
+
+
+
+
+
+
+
+

Register

+

Create your account

+
+
+ +
+ +
+
+
+ @ +
+ +
+
+
+ +
+ +
+
+
+ +
+ +
+ +
+
+ +
+
+
+
+
+
diff --git a/src/app/views/register/register.component.ts b/src/app/views/register/register.component.ts new file mode 100644 index 0000000..84e87f5 --- /dev/null +++ b/src/app/views/register/register.component.ts @@ -0,0 +1,11 @@ +import { Component } from '@angular/core'; + +@Component({ + selector: 'app-dashboard', + templateUrl: 'register.component.html' +}) +export class RegisterComponent { + + constructor() { } + +} diff --git a/src/app/views/theme/colors.component.html b/src/app/views/theme/colors.component.html new file mode 100644 index 0000000..92502ac --- /dev/null +++ b/src/app/views/theme/colors.component.html @@ -0,0 +1,141 @@ +
+
+
+ Theme colors +
+
+
+
+
+
Brand Primary Color
+
+
+
+
Brand Secondary Color
+
+
+
+
Brand Success Color
+
+
+
+
Brand Danger Color
+
+
+
+
Brand Warning Color
+
+
+
+
Brand Info Color
+
+
+
+
Brand Light Color
+
+
+
+
Brand Dark Color
+
+
+
+
+
+
+ Grays +
+
+
+
+
+
Gray 100 Color
+
+
+
+
Gray 200 Color
+
+
+
+
Gray 300 Color
+
+
+
+
Gray 400 Color
+
+
+
+
Gray 500 Color
+
+
+
+
Gray 600 Color
+
+
+
+
Gray 700 Color
+
+
+
+
Gray 800 Color
+
+
+
+
Gray 900 Color
+
+
+
+
+
+
+ Additional colors +
+
+
+
+
+
Blue Color
+
+
+
+
Light Blue Color
+
+
+
+
Indigo Color
+
+
+
+
Purple Color
+
+
+
+
Pink Color
+
+
+
+
Red Color
+
+
+
+
Orange Color
+
+
+
+
Yellow Color
+
+
+
+
Green Color
+
+
+
+
Teal Color
+
+
+
+
Cyan Color
+
+
+
+
+
diff --git a/src/app/views/theme/colors.component.ts b/src/app/views/theme/colors.component.ts new file mode 100644 index 0000000..f63cc79 --- /dev/null +++ b/src/app/views/theme/colors.component.ts @@ -0,0 +1,35 @@ +import { Component, OnInit } from '@angular/core'; +import { getStyle, rgbToHex } from '@coreui/coreui/dist/js/coreui-utilities'; + +@Component({ + templateUrl: 'colors.component.html' +}) +export class ColorsComponent implements OnInit { + public themeColors(): void { + Array.from(document.querySelectorAll('.theme-color')).forEach(function(el) { + const elem = document.getElementsByClassName(el.classList[0])[0]; + const background = getStyle('background-color', elem); + + const table = document.createElement('table'); + table.innerHTML = ` + + + + + + + + + +
HEX:${rgbToHex(background)}
RGB:${background}
+ `; + + el.parentNode.appendChild(table); + }); + + } + + ngOnInit(): void { + this.themeColors(); + } +} diff --git a/src/app/views/theme/theme-routing.module.ts b/src/app/views/theme/theme-routing.module.ts new file mode 100644 index 0000000..cd63b2b --- /dev/null +++ b/src/app/views/theme/theme-routing.module.ts @@ -0,0 +1,36 @@ +import { NgModule } from '@angular/core'; +import { Routes, RouterModule } from '@angular/router'; + +import { ColorsComponent } from './colors.component'; +import { TypographyComponent } from './typography.component'; + +const routes: Routes = [ + { + path: '', + data: { + title: 'Theme' + }, + children: [ + { + path: 'colors', + component: ColorsComponent, + data: { + title: 'Colors' + } + }, + { + path: 'typography', + component: TypographyComponent, + data: { + title: 'Typography' + } + } + ] + } +]; + +@NgModule({ + imports: [RouterModule.forChild(routes)], + exports: [RouterModule] +}) +export class ThemeRoutingModule {} diff --git a/src/app/views/theme/theme.module.ts b/src/app/views/theme/theme.module.ts new file mode 100644 index 0000000..f583f55 --- /dev/null +++ b/src/app/views/theme/theme.module.ts @@ -0,0 +1,21 @@ +// Angular +import { CommonModule } from '@angular/common'; +import { NgModule } from '@angular/core'; + +import { ColorsComponent } from './colors.component'; +import { TypographyComponent } from './typography.component'; + +// Theme Routing +import { ThemeRoutingModule } from './theme-routing.module'; + +@NgModule({ + imports: [ + CommonModule, + ThemeRoutingModule + ], + declarations: [ + ColorsComponent, + TypographyComponent + ] +}) +export class ThemeModule { } diff --git a/src/app/views/theme/typography.component.html b/src/app/views/theme/typography.component.html new file mode 100644 index 0000000..db14693 --- /dev/null +++ b/src/app/views/theme/typography.component.html @@ -0,0 +1,150 @@ +
+
+
+ Headings +
+
+

Documentation and examples for Bootstrap typography, including global settings, headings, body text, lists, and more.

+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
HeadingExample
+

<h1></h1>

+
h1. Bootstrap heading
+

<h2></h2>

+
h2. Bootstrap heading
+

<h3></h3>

+
h3. Bootstrap heading
+

<h4></h4>

+
h4. Bootstrap heading
+

<h5></h5>

+
h5. Bootstrap heading
+

<h6></h6>

+
h6. Bootstrap heading
+
+
+
+
+ Headings +
+
+

.h1 through .h6 classes are also available, for when you want to match the font styling of a heading but cannot use the associated HTML element.

+
+

h1. Bootstrap heading

+

h2. Bootstrap heading

+

h3. Bootstrap heading

+

h4. Bootstrap heading

+

h5. Bootstrap heading

+

h6. Bootstrap heading

+
+
+
+
+
+ Display headings +
+
+

Traditional heading elements are designed to work best in the meat of your page content. When you need a heading to stand out, consider using a display heading—a larger, slightly more opinionated heading style.

+
+ + + + + + + + + + + + + + + +
Display 1
Display 2
Display 3
Display 4
+
+
+
+
+
+ Inline text elements +
+
+

Traditional heading elements are designed to work best in the meat of your page content. When you need a heading to stand out, consider using a display heading—a larger, slightly more opinionated heading style.

+
+

You can use the mark tag to highlight text.

+

This line of text is meant to be treated as deleted text.

+

This line of text is meant to be treated as no longer accurate.

+

This line of text is meant to be treated as an addition to the document.

+

This line of text will render as underlined

+

This line of text is meant to be treated as fine print.

+

This line rendered as bold text.

+

This line rendered as italicized text.

+
+
+
+
+
+ Description list alignment +
+
+

Align terms and descriptions horizontally by using our grid system’s predefined classes (or semantic mixins). For longer terms, you can optionally add a .text-truncate class to truncate the text with an ellipsis.

+
+
+
Description lists
+
A description list is perfect for defining terms.
+ +
Euismod
+
+

Vestibulum id ligula porta felis euismod semper eget lacinia odio sem nec elit.

+

Donec id elit non mi porta gravida at eget metus.

+
+ +
Malesuada porta
+
Etiam porta sem malesuada magna mollis euismod.
+ +
Truncated term is truncated
+
Fusce dapibus, tellus ac cursus commodo, tortor mauris condimentum nibh, ut fermentum massa justo sit amet risus.
+ +
Nesting
+
+
+
Nested definition list
+
Aenean posuere, tortor sed cursus feugiat, nunc augue blandit nunc.
+
+
+
+
+
+
+
diff --git a/src/app/views/theme/typography.component.ts b/src/app/views/theme/typography.component.ts new file mode 100644 index 0000000..c779681 --- /dev/null +++ b/src/app/views/theme/typography.component.ts @@ -0,0 +1,10 @@ +import { Component } from '@angular/core'; + +@Component({ + templateUrl: 'typography.component.html' +}) +export class TypographyComponent { + + constructor() { } + +} diff --git a/src/app/views/widgets/widgets-routing.module.ts b/src/app/views/widgets/widgets-routing.module.ts new file mode 100644 index 0000000..367a70c --- /dev/null +++ b/src/app/views/widgets/widgets-routing.module.ts @@ -0,0 +1,20 @@ +import { NgModule } from '@angular/core'; +import { Routes, RouterModule } from '@angular/router'; + +import { WidgetsComponent } from './widgets.component'; + +const routes: Routes = [ + { + path: '', + component: WidgetsComponent, + data: { + title: 'Widgets' + } + } +]; + +@NgModule({ + imports: [RouterModule.forChild(routes)], + exports: [RouterModule] +}) +export class WidgetsRoutingModule {} diff --git a/src/app/views/widgets/widgets.component.html b/src/app/views/widgets/widgets.component.html new file mode 100644 index 0000000..854c4c7 --- /dev/null +++ b/src/app/views/widgets/widgets.component.html @@ -0,0 +1,944 @@ +
+
+
+
+
+ +
9.823
+
Members online
+
+
+ +
+
+
+
+
+
+ +
9.823
+
Members online
+
+
+ +
+
+
+
+
+
+ +
9.823
+
Members online
+
+
+ +
+
+
+
+
+
+ +
9.823
+
Members online
+
+
+ +
+
+
+
+
+
+
+
+
+ SALE + $1.890,65 +
+
+ + Today 6:43 AM + + + +432,50 (15,78%) + +
+
+ +
+
+ +
+
+
+
+
+
+
+
+ SALE + $1.890,65 +
+
+ + Today 6:43 AM + + + +432,50 (15,78%) + +
+
+ +
+
+ +
+
+
+
+
+
+
+
+ SALE + $1.890,65 +
+
+ + Today 6:43 AM + + + +432,50 (15,78%) + +
+
+ +
+
+ +
+
+
+
+
+
+
+
+ SALE + $1.890,65 +
+
+ + Today 6:43 AM + + + +432,50 (15,78%) + +
+
+ +
+
+ +
+
+
+
+
+ +
+
+
+
+
89.9%
+
Lorem ipsum...
+
+
+
+ Lorem ipsum dolor sit amet enim. +
+
+
+
+
+
+
12.124
+
Lorem ipsum...
+
+
+
+ Lorem ipsum dolor sit amet enim. +
+
+
+
+
+
+
$98.111,00
+
Lorem ipsum...
+
+
+
+ Lorem ipsum dolor sit amet enim. +
+
+
+
+
+
+
2 TB
+
Lorem ipsum...
+
+
+
+ Lorem ipsum dolor sit amet enim. +
+
+
+
+ +
+
+
+
+
89.9%
+
Lorem ipsum...
+
+
+
+ Lorem ipsum dolor sit amet enim. +
+
+
+
+
+
+
12.124
+
Lorem ipsum...
+
+
+
+ Lorem ipsum dolor sit amet enim. +
+
+
+
+
+
+
$98.111,00
+
Lorem ipsum...
+
+
+
+ Lorem ipsum dolor sit amet enim. +
+
+
+
+
+
+
2 TB
+
Lorem ipsum...
+
+
+
+ Lorem ipsum dolor sit amet enim. +
+
+
+
+ +
+
+
+
+
Title
+
1,123
+
+ +
+
+
+
+
+
+
+
Title
+
1,123
+
+ +
+
+
+
+
+
+
+
Title
+
1,123
+
+ +
+
+
+
+
+
+
+
Title
+
1,123
+
+ +
+
+
+
+
+
+
+
Title
+
1,123
+
+ +
+
+
+
+
+
+
+
Title
+
1,123
+
+ +
+
+
+
+
+
+
+
+
+ +
$1.999,50
+
Income
+
+
+
+ +
+
+
+ +
$1.999,50
+
Income
+
+
+
+ +
+
+
+ +
$1.999,50
+
Income
+
+
+
+ +
+
+
+ +
$1.999,50
+
Income
+
+
+
+ +
+
+
+ +
$1.999,50
+
Income
+
+ +
+
+ +
+
+
+ +
$1.999,50
+
Income
+
+ +
+
+ +
+
+
+ +
$1.999,50
+
Income
+
+ +
+
+ +
+
+
+ +
$1.999,50
+
Income
+
+ +
+
+ +
+ +
+
+
+
+ +
$1.999,50
+
Income
+
+
+
+ +
+
+
+ +
$1.999,50
+
Income
+
+
+
+ +
+
+
+ +
$1.999,50
+
Income
+
+
+
+ +
+
+
+ +
$1.999,50
+
Income
+
+
+
+ +
+
+
+ +
$1.999,50
+
Income
+
+
+
+ +
+
+
+ +
$1.999,50
+
Income
+
+
+
+ +
+
+
+ +
$1.999,50
+
Income
+
+
+
+ +
+
+
+ +
$1.999,50
+
Income
+
+
+
+ +
+ +
+
+
+
+ +
+
+
+
89k
+
friends
+
+
+
459
+
feeds
+
+
+
+
+
+
+
+ +
+
+
+
973k
+
followers
+
+
+
1.792
+
tweets
+
+
+
+
+
+
+
+ +
+
+
+
500+
+
contacts
+
+
+
292
+
feeds
+
+
+
+
+
+
+
+ +
+
+
+
894
+
followers
+
+
+
92
+
circles
+
+
+
+
+
+ +
+
+
+
+ +
+
87.500
+ Visitors +
+
+
+
+
+
+
+
+ +
+
385
+ New Clients +
+
+
+
+
+
+
+
+ +
+
1238
+ Products sold +
+
+
+
+
+
+
+
+ +
+
28%
+ Returning Visitors +
+
+
+
+
+
+
+
+ +
+
5:34:11
+ Avg. Time +
+
+
+
+
+
+ +
+
+
+
+
+ +
+
87.500
+ Visitors +
+
+
+
+
+
+
+
+
+
+ +
+
385
+ New Clients +
+
+
+
+
+
+
+
+
+
+ +
+
1238
+ Products sold +
+
+
+
+
+
+
+
+
+
+ +
+
28%
+ Returning Visitors +
+
+
+
+
+
+
+
+
+
+ +
+
5:34:11
+ Avg. Time +
+
+
+
+
+
+
+
+
+
+ +
+
972
+ Comments +
+
+
+
+
+
+
+ +
+
+
+
+
+ +
+
87.500
+ Visitors +
+
+
+
+
+
+
+
+
+
+ +
+
385
+ New Clients +
+
+
+
+
+
+
+
+
+
+ +
+
1238
+ Products sold +
+
+
+
+
+
+
+
+
+
+ +
+
28%
+ Returning Visitors +
+
+
+
+
+
+
+
+
+
+ +
+
5:34:11
+ Avg. Time +
+
+
+
+
+
+
+
+
+
+ +
+
972
+ Comments +
+
+
+
+
+
+
+
diff --git a/src/app/views/widgets/widgets.component.ts b/src/app/views/widgets/widgets.component.ts new file mode 100644 index 0000000..eadadab --- /dev/null +++ b/src/app/views/widgets/widgets.component.ts @@ -0,0 +1,391 @@ +import { Component } from '@angular/core'; +import { getStyle } from '@coreui/coreui/dist/js/coreui-utilities'; +import { CustomTooltips } from '@coreui/coreui-plugin-chartjs-custom-tooltips'; + +@Component({ + templateUrl: 'widgets.component.html' +}) +export class WidgetsComponent { + + // lineChart1 + public lineChart1Data: Array = [ + { + data: [65, 59, 84, 84, 51, 55, 40], + label: 'Series A' + } + ]; + public lineChart1Labels: Array = ['January', 'February', 'March', 'April', 'May', 'June', 'July']; + public lineChart1Options: any = { + tooltips: { + enabled: false, + custom: CustomTooltips + }, + maintainAspectRatio: false, + scales: { + xAxes: [{ + gridLines: { + color: 'transparent', + zeroLineColor: 'transparent' + }, + ticks: { + fontSize: 2, + fontColor: 'transparent', + } + + }], + yAxes: [{ + display: false, + ticks: { + display: false, + min: 40 - 5, + max: 84 + 5, + } + }], + }, + elements: { + line: { + borderWidth: 1 + }, + point: { + radius: 4, + hitRadius: 10, + hoverRadius: 4, + }, + }, + legend: { + display: false + } + }; + public lineChart1Colours: Array = [ + { // grey + backgroundColor: getStyle('--primary'), + borderColor: 'rgba(255,255,255,.55)' + } + ]; + public lineChart1Legend = false; + public lineChart1Type = 'line'; + + // lineChart2 + public lineChart2Data: Array = [ + { + data: [1, 18, 9, 17, 34, 22, 11], + label: 'Series A' + } + ]; + public lineChart2Labels: Array = ['January', 'February', 'March', 'April', 'May', 'June', 'July']; + public lineChart2Options: any = { + tooltips: { + enabled: false, + custom: CustomTooltips + }, + maintainAspectRatio: false, + scales: { + xAxes: [{ + gridLines: { + color: 'transparent', + zeroLineColor: 'transparent' + }, + ticks: { + fontSize: 2, + fontColor: 'transparent', + } + + }], + yAxes: [{ + display: false, + ticks: { + display: false, + min: 1 - 5, + max: 34 + 5, + } + }], + }, + elements: { + line: { + tension: 0.00001, + borderWidth: 1 + }, + point: { + radius: 4, + hitRadius: 10, + hoverRadius: 4, + }, + }, + legend: { + display: false + } + }; + public lineChart2Colours: Array = [ + { // grey + backgroundColor: getStyle('--info'), + borderColor: 'rgba(255,255,255,.55)' + } + ]; + public lineChart2Legend = false; + public lineChart2Type = 'line'; + + + // lineChart3 + public lineChart3Data: Array = [ + { + data: [78, 81, 80, 45, 34, 12, 40], + label: 'Series A' + } + ]; + public lineChart3Labels: Array = ['January', 'February', 'March', 'April', 'May', 'June', 'July']; + public lineChart3Options: any = { + tooltips: { + enabled: false, + custom: CustomTooltips + }, + maintainAspectRatio: false, + scales: { + xAxes: [{ + display: false + }], + yAxes: [{ + display: false + }] + }, + elements: { + line: { + borderWidth: 2 + }, + point: { + radius: 0, + hitRadius: 10, + hoverRadius: 4, + }, + }, + legend: { + display: false + } + }; + public lineChart3Colours: Array = [ + { + backgroundColor: 'rgba(255,255,255,.2)', + borderColor: 'rgba(255,255,255,.55)', + } + ]; + public lineChart3Legend = false; + public lineChart3Type = 'line'; + + + // barChart1 + public barChart1Data: Array = [ + { + data: [78, 81, 80, 45, 34, 12, 40, 78, 81, 80, 45, 34, 12, 40, 12, 40], + label: 'Series A' + } + ]; + public barChart1Labels: Array = ['1', '2', '3', '4', '5', '6', '7', '8', '9', '10', '11', '12', '13', '14', '15', '16']; + public barChart1Options: any = { + tooltips: { + enabled: false, + custom: CustomTooltips + }, + maintainAspectRatio: false, + scales: { + xAxes: [{ + display: false, + barPercentage: 0.6, + }], + yAxes: [{ + display: false + }] + }, + legend: { + display: false + } + }; + public barChart1Colours: Array = [ + { + backgroundColor: 'rgba(255,255,255,.3)', + borderWidth: 0 + } + ]; + public barChart1Legend = false; + public barChart1Type = 'bar'; + + // lineChart4 + public lineChart4Data: Array = [ + { + data: [4, 18, 9, 17, 34, 22, 11, 3, 15, 12, 18, 9], + label: 'Series A' + } + ]; + public lineChart4Labels: Array = ['Jan', 'Feb', 'Mar', 'Apr', 'May', 'Jun', 'Jul', 'Aug', 'Sep', 'Oct', 'Nov', 'Dec']; + public lineChart4Options: any = { + tooltips: { + enabled: false, + custom: CustomTooltips + }, + maintainAspectRatio: false, + scales: { + xAxes: [{ + display: false, + points: false, + }], + yAxes: [{ + display: false, + }] + }, + elements: { point: { radius: 0 } }, + legend: { + display: false + } + }; + public lineChart4Colours: Array = [ + { + backgroundColor: 'transparent', + borderColor: 'rgba(255,255,255,.55)', + borderWidth: 2 + } + ]; + public lineChart4Legend = false; + public lineChart4Type = 'line'; + + + // barChart2 + public barChart2Data: Array = [ + { + data: [4, 18, 9, 17, 34, 22, 11, 3, 15, 12, 18, 9], + label: 'Series A' + } + ]; + public barChart2Labels: Array = ['Jan', 'Feb', 'Mar', 'Apr', 'May', 'Jun', 'Jul', 'Aug', 'Sep', 'Oct', 'Nov', 'Dec']; + public barChart2Options: any = { + tooltips: { + enabled: false, + custom: CustomTooltips + }, + maintainAspectRatio: false, + scales: { + xAxes: [{ + display: false, + barPercentage: 0.6, + }], + yAxes: [{ + display: false, + ticks: { + beginAtZero: true, + } + }] + }, + legend: { + display: false + } + }; + public barChart2Colours: Array = [ + { + backgroundColor: 'rgba(0,0,0,.2)', + borderWidth: 0 + } + ]; + public barChart2Legend = false; + public barChart2Type = 'bar'; + + + // barChart3 + public barChart3Data: Array = [ + { + data: [4, 18, 9, 17, 34, 22, 11, 3, 15, 12, 18, 9], + label: 'Series A' + } + ]; + public barChart3Labels: Array = ['Jan', 'Feb', 'Mar', 'Apr', 'May', 'Jun', 'Jul', 'Aug', 'Sep', 'Oct', 'Nov', 'Dec']; + public barChart3Options: any = { + tooltips: { + enabled: false, + custom: CustomTooltips + }, + maintainAspectRatio: false, + scales: { + xAxes: [{ + display: false + }], + yAxes: [{ + display: false + }] + }, + legend: { + display: false + } + }; + public barChart3Primary: Array = [ + { + backgroundColor: getStyle('--primary'), + borderColor: 'transparent', + borderWidth: 1 + } + ]; + public barChart3Danger: Array = [ + { + backgroundColor: getStyle('--danger'), + borderColor: 'transparent', + borderWidth: 1 + } + ]; + public barChart3Success: Array = [ + { + backgroundColor: getStyle('--success'), + borderColor: 'transparent', + borderWidth: 1 + } + ]; + public barChart3Legend = false; + public barChart3Type = 'bar'; + + + // lineChart5 + public lineChart5Data: Array = [ + { + data: [65, 59, 84, 84, 51, 55, 40], + label: 'Series A' + } + ]; + public lineChart5Labels: Array = ['January', 'February', 'March', 'April', 'May', 'June', 'July']; + public lineChart5Options: any = { + tooltips: { + enabled: false, + custom: CustomTooltips + }, + maintainAspectRatio: false, + scales: { + xAxes: [{ + display: false, + points: false, + }], + yAxes: [{ + display: false, + }] + }, + elements: { point: { radius: 0 } }, + legend: { + display: false + } + }; + public lineChart5Info: Array = [ + { + backgroundColor: 'transparent', + borderColor: getStyle('--info'), + borderWidth: 2 + } + ]; + public lineChart5Success: Array = [ + { + backgroundColor: 'transparent', + borderColor: getStyle('--info'), + borderWidth: 2 + } + ]; + public lineChart5Warning: Array = [ + { + backgroundColor: 'transparent', + borderColor: getStyle('--warning'), + borderWidth: 2 + } + ]; + public lineChart5Legend = false; + public lineChart5Type = 'line'; +} diff --git a/src/app/views/widgets/widgets.module.ts b/src/app/views/widgets/widgets.module.ts new file mode 100644 index 0000000..078cba5 --- /dev/null +++ b/src/app/views/widgets/widgets.module.ts @@ -0,0 +1,16 @@ +import { NgModule } from '@angular/core'; +import { ChartsModule } from 'ng2-charts/ng2-charts'; +import { BsDropdownModule } from 'ngx-bootstrap/dropdown'; + +import { WidgetsComponent } from './widgets.component'; +import { WidgetsRoutingModule } from './widgets-routing.module'; + +@NgModule({ + imports: [ + WidgetsRoutingModule, + ChartsModule, + BsDropdownModule + ], + declarations: [ WidgetsComponent ] +}) +export class WidgetsModule { } diff --git a/src/assets/.gitkeep b/src/assets/.gitkeep new file mode 100644 index 0000000..e69de29 diff --git a/src/assets/favicon.ico b/src/assets/favicon.ico new file mode 100644 index 0000000000000000000000000000000000000000..be27078a0ff3b52306e93006ca0ae880ded68df2 GIT binary patch literal 1150 zcmb`H%WG3X6vjt!A#_s;J~l!ZDlNWHL2ywQMY^a6?nH#T5JW`Kf5C+d|Ao}vCWvi? zpb$ZtSVUaeB(^t=$u-s1G@?nVd9^jSO_TfcIMXS z!+)Cpx@N;>CFLU>yg(vwgxE+g=6FAaq(O7bcIh6z*Hkq(NhUOaIeM5`;{evHe&&K# znf4uJdiXe>UtXh}ee0Fzv0buQoVum`nWKkDj-Md+@eym40>77YeEsm4nP(TZo#@jZ z=EHZW6*D__7T*kzFuF*N^|CN^n@WC;jV;)0I8@i`lvg*%e~)5?A2K_3iKy=w>Cp8Z z{ZeF*w0}Q^nJ3g8ur!u~ea2gW^h_RA`8pagy}wo1z!8l%>cOQpR4& z^8r1tRkD1G49R)AiA(&f$@^sE!reZM+)b|HUS$=~h&K&$;zV~_Vz3+X_dAZZvB|y?NKF}Wk@OTvf3H%H0 zCV(-C@eL*eAOOmvZ2^G04G0?fk$f%#eh+yJh|2*o0PsJ6@NN(&FG8R&=vTntuy26F z5eOs#0Y{=02nh7AAtV5UqreC>j|IRy<^Loo41mBvV1zKh+Xf7UAi#*f zR1nV#1_lR26x5F)2pUKu?}*fs=S1zq3h7HYpHrGB46g(H)hg`oabIU+pbF|DFe8FD zyzr#PvE7K)(WTT!I6F}v?kvFn^>qvc16%~E^R%7O{7;%JBYLEi(g$j1gMuAu>Sgs` zuDdh0qXI@c#HTQfURN_W2{&smPDjnc_`RFG!Of&~R*9e(ED*RYEOgv=TlNk4U;ytn zWN{-xq6}k=jC`VgV}dN$q@NpgcH*f8S*^447Q9|JD8ArgdzW{pRi@LG@Ro9#fw3j_ zoPL~zSm3040M@K)59nA-W71U5V9=-`y)PlhyG2-kYDIa(|w@NPlt0e6ab<`lm09=L$~r z-3&2<(&FJ)9z?sM=K322I!c)~Svh64VhF{g#VrHFF&JK|iFPQtAJrE@U3A@MW9!cA zmW~Ocx;g6FOxw79?v@n*Zf70=gWF59eC@T=Y5rgNDt(f>fZ;83|9^H1lwhzN8zAap>m?YpwczG{8&Q_oFztXCi+46+p&h;Mj@5eZthd zx}$lJ$(km4xAP?#X>Sf??Ig4fnPe-p6@iuu`e7zx9ZO9fX#=T>#z{Y~Xua`IEmPWQ{er?5sLE=a`%moytC5;}_h`Y4 zs6cBygV*K@UL4jKR>wgiEg5-wNUBRFpB+anWDQ2Mv6n*DOH^s&ZFNV|aUqjuku&R3 zYO!nEPbf1K>j4#IicQykKnGoflDU)F%zW^uKT@r9?h7+f&Cjj+`{|6jkLH%el~tTP zoI`yBZ9+3IdZv3~OmgEmv6Z;h&UPb7Qk@*&>(I!)70+to8t(_?V_-}34 zU5M@Vrw-<(tk#K~m@V}53;Pt{!X&!@jRxkhfNk-q!B-Tqq_~|)1F!j-KC7$B(^NT( zrFe)nO4T^%P`D#) zcQ=xlo!m9^qmHX$R#l$%K`$ZZj_4b#iFpXfq=D8>y{}zj`uz2!{k?Q6f(b+PTkvwa s+PkdPTj&wyeQ`mr@vvL|UF7GWocCsP38EwudAkV$)>LGIkj$O=6K!EAK>z>% literal 0 HcmV?d00001 diff --git a/src/assets/img/avatars/2.jpg b/src/assets/img/avatars/2.jpg new file mode 100644 index 0000000000000000000000000000000000000000..e7367094a3a904ccf7ea8edd2bf2b7b9c778c1ef GIT binary patch literal 2105 zcmY+Ddpy(oAIHBlHiWt6s665nGFc(ya*|u_%8bSIQ#6^|D7V^~&T2w_=Fs9KV`h~| zqRnMz{Ld) zNCQ6*EdWXmalzr20T3W5mQMkI=p&$DdmbNz1^PAk>ip zi|oj5IO#dg#8g;Xl(A^zQ)Pb^c$VuK9 zo$m2Nr;3o-*`XNE&m9gh*Sdkp`~AqKyl-(~0CzwK5($vVF~p?Wsg zKQ3o4x>z%J6enQi_X~cf`qEVjL-st-9mKgaU{=W(bjN`Z;@IkH$%1ZhRE_@Hkxne9 zsAVF?JVl-$L6RWZH%1*az+w;dvR>afjJMs!U=nwGy%$;~W&AOFobvkO75Vi&;iL4Y zTK5plNB64vF@(}YdVK#MnH|2dU!9DOJYv>qs#QK-tH?7GUJtLIOQ4;h*kWPY$uIOH z6(H?eAN8Mw5nidAk9+u?u9_gN_IxgLCo{cHu(ftvR@y0O!O zVk@^)P90fW@XD=OmT!Gxh~>**?uRp91vx=JYJUu|sGY~uoJk#>7z%8KatTQ-z1yDM z1&w{_hp6Pka}SNqIQXU7byb+TQF4_hU9V*_7=@3l!YRiOevO|a_ByP+y>D6I*xHII zPdIVb0~c28a@`c0l6|5Hs-E=cSAosGU9l{~1l`YUlji#}FVFukrptJWCRW{v@Tu~_8#W@qDIPPv1>BTTp(HS>FmO^m)GJJiW zeSl^8uNg;EErqD(`CYm9$?7ZK1EHL7=C@Mk?9l*&^Ve3Z=yt~=2Ck2IHmAY2J@%ug zs@lpUsV291{(0Xv$;YNPkODZy*#aoNoH8_QCTL^%47YR5xv)lSjE!6%e|4qs@^2Jd9py^(mxf&d`SQE6ER!9dnFU2*UY! zw!Pdejoa=XoX2vD_~<*D8Ie&~`B~u@8}d34Tj>Dd>-FW3UthL)4|BdyZ{*f4;9z?0 z+PoST268Z&Sq4P6s3FG{QlE!mF^^WVrpCju{dlM}o%Yr+8OmbbU7M(wiLpjN7C~3mGP1XEf zzB(0jRXt;UpmCykt4@ppY$g^xiD#t*r;CG{3rr0txWk<$$2s!>42 zp{U-avmorJ{I~o)q>bFWVbxcLfsDc#tIm~zlLq*KHNq1hq2!mI*V7xpT^k<7w}qS0 jfPIt*cnl*72OIF*g+T6?jV}|R`E_B%hwV?mUJ>s<0pG59 literal 0 HcmV?d00001 diff --git a/src/assets/img/avatars/3.jpg b/src/assets/img/avatars/3.jpg new file mode 100644 index 0000000000000000000000000000000000000000..caf9a7e7c52563a34646b11fdc888197a6e73582 GIT binary patch literal 1645 zcmY+9e>~H99LGOj-~FCpe&&qQa?!=5lpQI*lIa#!Q%XYRchhvMxPC0HA1bv-2xS_! zvR1O%PHZ|P?H+1`g?=dM@?*Os6}5A9kGgyQ@p->rulM`?`Mf{+F8xz5ZP~7bSOBQh zIRFE`p&tT7fA*%NGynm_lpO+qegqi#Y)*;U0yZnB97x{{xWM2m@KgpPrcM}vMEnC1 zh5QT(g+^o0XcQKU!(p+8{|AC$7>Ph)Q79|{kHr&=jixX*{@nC$F#MwaKlfGXm4Ju= z^TB)=A_4;<1QQ{B1K0zA0SrOVw-2GQFb0Q$kpK0*R80T`Pc4l?!+7Lp2bxkuBrrwU zyPBbWLgz1V!$h<8&!jKJ@_j9Jr|M%;v&nwu7Veu4%wjAe{^yM^_vs%3Ll~Oc1tx-} zVD85iH*fWjYBjqR336sYHDB;(;pCyW*p-5~!x-T{X9W6;2ZLwJd1Cf_B)oSaF_GoF zY2HVRhK;}BXzuKLhUiw=Yi5#Vo{Qyps9V{HnOLfIx~6b~%kv?xNB3v8&i+8fI-bt( z6Y~;t!#KoFPKsTCoUlilxRNotr2RuoZB(5@VNZR2fjW*`HC9LIqRcCmPj2}*&|Xc* z>V)`YpU6sdK~5(}<$hL#eGnNVQEv{sG(wY=uPS~V z>!W4&c$(?BqHVlI1_sdEC^V_6J$-*g$@;{;rLrJeQ(uJFX;DL&V4}Nazc*aLgewD% z*F?(C*814|>@xn{eFyoU)fNs;dmhx0>l6ITq9dp{96dgfE4ctB-L@*$y?!y+KkDnw z^t(Ue?74uExY@y)JWXUA7%vEM`ZIWOBEN(23O`=hi%<)~ild4r&x&b^Gy#Dp_$5DWM=; zvg%0a#<11yc5@dw9xX4R^F##UrzVJ>#%Lp6_DHQ4_IHJDEliEBX*@$ymgSM6*)g+j zshdLsqfDC1sOx&%kcfj5$0~>OwuWzNV_q5TbX;jop!zPj9Ymi`p@^)L=!?QCG@Pri z)&`n)x6d;f*cb_$X7xI3cov-McZtq9LW7)K;w(4p~OxW0T|8?3~#U2yA=@Cr$r_bIM>;dDyc#l}0=9~NBD(z-71 zw9NMnXVqKe@g(nF5-M&wjtO!UpnESKT*u5bowTK<%nlE;>yv^?L z*h@ayvX{&nZl#Pour4qW`OoItrzve-dgvh9^0-sDpbM4z%zvw@&N^)_(Qs<*!sN?; z86X|g{+P{3E=uE>!Xa8?YRf9EJT{Xn z@|Q~)o^PMnoXdLQ)k63~=-!l*By*mzP9W>9l%`TuyV%D;$Pzo*#AER=1A#q-yXFx1RVa-}plV-doBaM@Qkn zC`?QS7PJ=wg|uV>@a?yTmO=rw->hRd&^ literal 0 HcmV?d00001 diff --git a/src/assets/img/avatars/4.jpg b/src/assets/img/avatars/4.jpg new file mode 100644 index 0000000000000000000000000000000000000000..97f676969a42835666416ad1866a47fa47cfc431 GIT binary patch literal 2580 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

b5q(M^Ki{`D1 zB~~Ls1!SlEgP+$xoS&;%jyhah*mCnILGT3*mg|3ISg4N8RM8}0CuKRV0uEOcq{nVr z6kS5?qOH*0rzy%xmLy*t4g~NH5J9I5S>Zxq89Sar(F%-33H|+gN75@Nm;W(x6J6V1?{Y@;)eM8L1swYX)cvD{tUPE26D1F$%}pC=Q8Qq zj=PasZECP*_U^)DW0=dgjE>{1ul3fF8)v74^sNT9CO3O^MV0>mAu-8MyyorY#T6*` z6WK>)O zHe`!Bv2VeupKVH)ko3|M*;p?ysFPd>O4?d3l&DyZ$r@Lj`^LWKhI*%Mw>zKCyb;p#M1bB!b3trzE%1$pKXLC~Lz#Ecqf?}vkUzvLqAwtI2sq0M^buEpP z#!jAz!HPq(ecSxdoUGAy#7NKT!nvXC=g*B>Nr zoW;bS9rQZFR+0)u$5GOmR#dVUqhsw|GEtsy_WQ*0zNzskdCXav#`2D(yu>u5kCWxG z16$u)QFwb9(ztC9ZTgDw*TvT|^wMP9>L8P^((wL)lGoL7!a}B7%C;J#peoU5E%ngcG3ACZ(sDuiVse8sF?? zUUFlK$j-^SNkF=YHMrNUHetPn#Bli_PDzz}D>Qja+R*3$($%BZs|%EQ=d#&t@W!%+ z)e+ovt8HKp2{|mY<#Pj%)ady-e6jASGAtWc4edKC%jSASe2$23YAT(D%EPU_sMeZ? zFuZ5A{41viEJy9Nf0@4;5&TLW6Y;36ue!jy_2i~sb3bryaoEoAo*j@UD>x~6tb<2b z$s)>R+q8`!u*-Uvebv3K5FGpl6?73xI0g2t%X=f2B(&Ia&y5+2VI~5 zN3y!eACuWCbouHYA^`j}t{f7{Sy^mfbR2S>@_ujY#FJ_cRn zwjXLfo#XvR^^1ye?4&g0F-trD+|dDZ^_$n}3+G^j{x`b#++Go4Q3`4Sb5&ZEqPdjpMJ{@wK)8c&k9 zv7%Fhaq>->_>N=}rKx|Yr6~$;{3qqEKO|amRmpysAiVw#UK(^f{xzcHxDp#O8y!jl z!6V`YbHHMAQ;RHw47+)pM0t&*vZnx4h{veEP-)V6GJAUNEw6)|#v-`R_J9Q=LETeh zf^8_cG)K7z%u98qUKWzlx8tP$0P(r#<^Tfo;A3StLZXP$CmVU zXjD_6U;EVqW*^vS$xr=2{F^+%ZPp*~6d-`_Wk(KJU)Jlm;hAywGs=+`8_*k(qSkBy z@2w7vE#NzS=~XY-%D!pHnI-6PU2v&-Nv-#;)sp<5gUS7c{&^z7YYn=jjW69=NGu~U bHTIt5HeMeJBM@npt$I1GmBtQSzIC0?3 literal 0 HcmV?d00001 diff --git a/src/assets/img/avatars/6.jpg b/src/assets/img/avatars/6.jpg new file mode 100644 index 0000000000000000000000000000000000000000..1d2b884397eb019bbbaf752fddb46e70f18f8b09 GIT binary patch literal 1608 zcmZXPdpy&77{|ZcZ}-jCT+#){WlPh=$t6xi^OBNW+G?j1$}P8rgVl4qG-|zGJKF|00Jn|=UDOj}ekiRbg_Vxw< z1HL1F1IV@!UV&Ty0|=zX2(35JC|l1QPKTBnmkX z3WY{v&}bAEi^E~Dgdc%H5QIb^u_zQ)36I4qk%$UNr1_$M55hm$kA2@Vc|9OwfDtf) zU}OL%!yqzD-UOn6!Wjhnz7N1)QD_K>L%{wk&c81J3KOue9^m+S0j5}ij6?yQHOgrE zHX{||ebEe66E)Mdm{46CPbRiO?``QsOo|uJHbUKu{J;O?PXR$O8cv4Dz#3e(N~;y@ zZ0S*1BWB0!`0Jr&^nobat_1#3YK*f=!L<(uiRXoZpIGaO_{7_;Y!jG$5PM7H#cR{y z3){mtB{51j#Iy2LIdiGA;Y%~PrYX&E+tE~!)HW&EEy9tz_1fD-8Ivpx4qNKLpjiYyFWHTud4p)HrtqR#KYi62No zlQhGrlz!UubI6`XLYYs{$aOV*c`x)=W$YN8w^%72DrAjVbh~h0BbMRCBPE1jtro|I z*$Zcm9a5)C85O+PG7&Bn-WZO%EbdO6f!Z`hO$kcfxp`_j{DY^K;;x!)XG=hGZRQKF zUq&+sN0?4s0k6k8dpI;yq)&}BJO<&Pg8b}prj_5LxYbIVgc1&&> zh;Ux78;%)G3?y0JWc|@gdvA`_zbAZRg8pgQs$$R2MZ+S)b;~_p^yFEdse3NXZ}oai z2_=?PV&3@~b{(vr>f-f25@J;n@_=E|5^d!L!11shZ#Uf7*k@IX3+{B0Xr1VI{=K#U zQMNZH%}ic(C`Gdx zqZ>anrCQ#+RWz<1=bn<^uao8;aJb9YywJ3-?xHWx@KIJ(|MeZ2VahMX$)g+BTI~Jp zf}iVc55YN!xw0$0U`PggE~JgCtC<{fDXn7@dAnr$=d4cqsWr>28jEj~p(*!0`}U-( zrnm7$soQZmwaN@7l6#CPd_vrRq7$}1qk^+o7R~(>rpgBxQ|gT&p%IsRq@<#Xu%UYW z`Buic=dG1Ui^UZKphAOdt7E{L%iJv4=E1UTzq8MLx4^qlF!`o)_lHrvpd7e`SK@R4 zqmIBj$>7hNX6tb!zk1kNGlSgOD~74}aEr1MGl)a)Br<&OqP7U9b)zQ&zIZh_7=*Do zyy^{&#Z_k4YZkb?r`>YUW_B=z$wwM)bgx6E5VpB_g>x`c(NP8ezMS7Mw68D8V8F_5K9HfQy)#Timp3MS| xt#Xi48hko(OaI%t0|Os<({t97<(kBuHH+L0eb(0we(+o7F*IRakV%*K{SC#=m6ZSh literal 0 HcmV?d00001 diff --git a/src/assets/img/avatars/7.jpg b/src/assets/img/avatars/7.jpg new file mode 100644 index 0000000000000000000000000000000000000000..2903cd2f9dcfd814cb0ab4c0b843d7793d78022c GIT binary patch literal 2059 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 Wn4pkC2EM=dtUn6k#fZvIfB)H${qT + + + diff --git a/src/assets/img/brand/sygnet.svg b/src/assets/img/brand/sygnet.svg new file mode 100644 index 0000000..f2f3bc7 --- /dev/null +++ b/src/assets/img/brand/sygnet.svg @@ -0,0 +1,17 @@ + + + + + + + + + + + + + diff --git a/src/environments/environment.prod.ts b/src/environments/environment.prod.ts new file mode 100644 index 0000000..3612073 --- /dev/null +++ b/src/environments/environment.prod.ts @@ -0,0 +1,3 @@ +export const environment = { + production: true +}; diff --git a/src/environments/environment.ts b/src/environments/environment.ts new file mode 100644 index 0000000..b7f639a --- /dev/null +++ b/src/environments/environment.ts @@ -0,0 +1,8 @@ +// The file contents for the current environment will overwrite these during build. +// The build system defaults to the dev environment which uses `environment.ts`, but if you do +// `ng build --env=prod` then `environment.prod.ts` will be used instead. +// The list of which env maps to which file can be found in `.angular-cli.json`. + +export const environment = { + production: false +}; diff --git a/src/index.html b/src/index.html new file mode 100644 index 0000000..59c625e --- /dev/null +++ b/src/index.html @@ -0,0 +1,24 @@ + + + + + + + + + + + + + CoreUI - Free Angular Admin Template + + + + + diff --git a/src/main.ts b/src/main.ts new file mode 100644 index 0000000..91ec6da --- /dev/null +++ b/src/main.ts @@ -0,0 +1,12 @@ +import { enableProdMode } from '@angular/core'; +import { platformBrowserDynamic } from '@angular/platform-browser-dynamic'; + +import { AppModule } from './app/app.module'; +import { environment } from './environments/environment'; + +if (environment.production) { + enableProdMode(); +} + +platformBrowserDynamic().bootstrapModule(AppModule) + .catch(err => console.log(err)); diff --git a/src/polyfills.ts b/src/polyfills.ts new file mode 100644 index 0000000..9d8f235 --- /dev/null +++ b/src/polyfills.ts @@ -0,0 +1,82 @@ +/** + * This file includes polyfills needed by Angular and is loaded before the app. + * You can add your own extra polyfills to this file. + * + * This file is divided into 2 sections: + * 1. Browser polyfills. These are applied before loading ZoneJS and are sorted by browsers. + * 2. Application imports. Files imported after ZoneJS that should be loaded before your main + * file. + * + * The current setup is for so-called "evergreen" browsers; the last versions of browsers that + * automatically update themselves. This includes Safari >= 10, Chrome >= 55 (including Opera), + * Edge >= 13 on the desktop, and iOS 10 and Chrome on mobile. + * + * Learn more in https://angular.io/docs/ts/latest/guide/browser-support.html + */ + +/*************************************************************************************************** + * BROWSER POLYFILLS + */ + +/** IE9, IE10 and IE11 requires all of the following polyfills. **/ +import 'core-js/es6/symbol'; +import 'core-js/es6/object'; +import 'core-js/es6/function'; +import 'core-js/es6/parse-int'; +import 'core-js/es6/parse-float'; +import 'core-js/es6/number'; +import 'core-js/es6/math'; +import 'core-js/es6/string'; +import 'core-js/es6/date'; +import 'core-js/es6/array'; +import 'core-js/es6/regexp'; +import 'core-js/es6/map'; +import 'core-js/es6/weak-map'; +import 'core-js/es6/set'; + +/** IE10 and IE11 requires the following for NgClass support on SVG elements */ +// import 'classlist.js'; // Run `npm install --save classlist.js`. + +/** IE10 and IE11 requires the following for the Reflect API. */ +import 'core-js/es6/reflect'; + + +/** Evergreen browsers require these. **/ +// Used for reflect-metadata in JIT. If you use AOT (and only Angular decorators), you can remove. +import 'core-js/es7/reflect'; + +// for IE10 +import 'mutationobserver-shim'; + +/** + * Required to support Web Animations `@angular/platform-browser/animations`. + * Needed for: All but Chrome, Firefox and Opera. http://caniuse.com/#feat=web-animation + **/ +// import 'web-animations-js'; // Run `npm install --save web-animations-js`. + +/** + * By default, zone.js will patch all possible macroTask and DomEvents + * user can disable parts of macroTask/DomEvents patch by setting following flags + */ + + (window as any).__Zone_disable_requestAnimationFrame = true; // disable patch requestAnimationFrame + (window as any).__Zone_disable_on_property = true; // disable patch onProperty such as onclick + (window as any).__zone_symbol__BLACK_LISTED_EVENTS = ['scroll', 'mousemove']; // disable patch specified eventNames + (window as any).__Zone_enable_cross_context_check = true; + + /* + * in IE/Edge developer tools, the addEventListener will also be wrapped by zone.js + * with the following flag, it will bypass `zone.js` patch for IE/Edge + */ +(window as any).__Zone_enable_cross_context_check = true; + +/*************************************************************************************************** + * Zone JS is required by default for Angular itself. + */ +import 'zone.js/dist/zone'; // Included with Angular CLI. + + + +/*************************************************************************************************** + * APPLICATION IMPORTS + */ diff --git a/src/scss/_custom.scss b/src/scss/_custom.scss new file mode 100644 index 0000000..15d367a --- /dev/null +++ b/src/scss/_custom.scss @@ -0,0 +1 @@ +// Here you can add other styles diff --git a/src/scss/_variables.scss b/src/scss/_variables.scss new file mode 100644 index 0000000..3ee3142 --- /dev/null +++ b/src/scss/_variables.scss @@ -0,0 +1 @@ +// Variable overrides diff --git a/src/scss/style.scss b/src/scss/style.scss new file mode 100644 index 0000000..cae9816 --- /dev/null +++ b/src/scss/style.scss @@ -0,0 +1,8 @@ +// If you want to override variables do it here +@import "variables"; + +// Import styles +@import "~@coreui/coreui/scss/coreui"; + +// If you want to add something do it here +@import "custom"; diff --git a/src/scss/vendors/_variables.scss b/src/scss/vendors/_variables.scss new file mode 100644 index 0000000..14c6d7f --- /dev/null +++ b/src/scss/vendors/_variables.scss @@ -0,0 +1,4 @@ +// Override Boostrap variables +@import "../variables"; +@import "node_modules/bootstrap/scss/mixins"; +@import "node_modules/@coreui/coreui/scss/variables"; diff --git a/src/scss/vendors/chart.js/chart.scss b/src/scss/vendors/chart.js/chart.scss new file mode 100644 index 0000000..7e99cca --- /dev/null +++ b/src/scss/vendors/chart.js/chart.scss @@ -0,0 +1,48 @@ +// Import variables +@import '../variables'; + +.chart-legend, +.bar-legend, +.line-legend, +.pie-legend, +.radar-legend, +.polararea-legend, +.doughnut-legend { + list-style-type: none; + margin-top: 5px; + text-align: center; + -webkit-padding-start: 0; + -moz-padding-start: 0; + padding-left: 0; +} +.chart-legend li, +.bar-legend li, +.line-legend li, +.pie-legend li, +.radar-legend li, +.polararea-legend li, +.doughnut-legend li { + display: inline-block; + white-space: nowrap; + position: relative; + margin-bottom: 4px; + @include border-radius($border-radius); + padding: 2px 8px 2px 28px; + font-size: smaller; + cursor: default; +} +.chart-legend li span, +.bar-legend li span, +.line-legend li span, +.pie-legend li span, +.radar-legend li span, +.polararea-legend li span, +.doughnut-legend li span { + display: block; + position: absolute; + left: 0; + top: 0; + width: 20px; + height: 20px; + @include border-radius($border-radius); +} diff --git a/src/test.ts b/src/test.ts new file mode 100644 index 0000000..1631789 --- /dev/null +++ b/src/test.ts @@ -0,0 +1,20 @@ +// This file is required by karma.conf.js and loads recursively all the .spec and framework files + +import 'zone.js/dist/zone-testing'; +import { getTestBed } from '@angular/core/testing'; +import { + BrowserDynamicTestingModule, + platformBrowserDynamicTesting +} from '@angular/platform-browser-dynamic/testing'; + +declare const require: any; + +// First, initialize the Angular testing environment. +getTestBed().initTestEnvironment( + BrowserDynamicTestingModule, + platformBrowserDynamicTesting() +); +// Then we find all the tests. +const context = require.context('./', true, /\.spec\.ts$/); +// And load the modules. +context.keys().map(context); diff --git a/src/tsconfig.app.json b/src/tsconfig.app.json new file mode 100644 index 0000000..5c97957 --- /dev/null +++ b/src/tsconfig.app.json @@ -0,0 +1,18 @@ +{ + "extends": "../tsconfig.json", + "compilerOptions": { + "outDir": "../out-tsc/app", + "baseUrl": "./", + "module": "es2015", + "types": [], + "paths": { + "@angular/*": [ + "../node_modules/@angular/*" + ] + } + }, + "exclude": [ + "test.ts", + "**/*.spec.ts" + ] +} diff --git a/src/tsconfig.spec.json b/src/tsconfig.spec.json new file mode 100644 index 0000000..1a18e6d --- /dev/null +++ b/src/tsconfig.spec.json @@ -0,0 +1,20 @@ +{ + "extends": "../tsconfig.json", + "compilerOptions": { + "outDir": "../out-tsc/spec", + "baseUrl": "./", + "module": "commonjs", + "types": [ + "jasmine", + "node" + ] + }, + "files": [ + "test.ts", + "polyfills.ts" + ], + "include": [ + "**/*.spec.ts", + "**/*.d.ts" + ] +} diff --git a/src/typings.d.ts b/src/typings.d.ts new file mode 100644 index 0000000..ef5c7bd --- /dev/null +++ b/src/typings.d.ts @@ -0,0 +1,5 @@ +/* SystemJS module definition */ +declare var module: NodeModule; +interface NodeModule { + id: string; +} diff --git a/tsconfig.json b/tsconfig.json new file mode 100644 index 0000000..a6c016b --- /dev/null +++ b/tsconfig.json @@ -0,0 +1,19 @@ +{ + "compileOnSave": false, + "compilerOptions": { + "outDir": "./dist/out-tsc", + "sourceMap": true, + "declaration": false, + "moduleResolution": "node", + "emitDecoratorMetadata": true, + "experimentalDecorators": true, + "target": "es5", + "typeRoots": [ + "node_modules/@types" + ], + "lib": [ + "es2017", + "dom" + ] + } +} diff --git a/tslint.json b/tslint.json new file mode 100644 index 0000000..d8d3956 --- /dev/null +++ b/tslint.json @@ -0,0 +1,142 @@ +{ + "rulesDirectory": [ + "node_modules/codelyzer" + ], + "rules": { + "arrow-return-shorthand": true, + "callable-types": true, + "class-name": true, + "comment-format": [ + true, + "check-space" + ], + "curly": true, + "deprecation": { + "severity": "warn" + }, + "eofline": true, + "forin": true, + "import-blacklist": [ + true, + "rxjs/Rx" + ], + "import-spacing": true, + "indent": [ + true, + "spaces" + ], + "interface-over-type-literal": true, + "label-position": true, + "max-line-length": [ + true, + 140 + ], + "member-access": false, + "member-ordering": [ + true, + { + "order": [ + "static-field", + "instance-field", + "static-method", + "instance-method" + ] + } + ], + "no-arg": true, + "no-bitwise": true, + "no-console": [ + true, + "debug", + "info", + "time", + "timeEnd", + "trace" + ], + "no-construct": true, + "no-debugger": true, + "no-duplicate-super": true, + "no-empty": false, + "no-empty-interface": true, + "no-eval": true, + "no-inferrable-types": [ + true, + "ignore-params" + ], + "no-misused-new": true, + "no-non-null-assertion": true, + "no-shadowed-variable": true, + "no-string-literal": false, + "no-string-throw": true, + "no-switch-case-fall-through": true, + "no-trailing-whitespace": true, + "no-unnecessary-initializer": true, + "no-unused-expression": true, + "no-use-before-declare": true, + "no-var-keyword": true, + "object-literal-sort-keys": false, + "one-line": [ + true, + "check-open-brace", + "check-catch", + "check-else", + "check-whitespace" + ], + "prefer-const": true, + "quotemark": [ + true, + "single" + ], + "radix": true, + "semicolon": [ + true, + "always" + ], + "triple-equals": [ + true, + "allow-null-check" + ], + "typedef-whitespace": [ + true, + { + "call-signature": "nospace", + "index-signature": "nospace", + "parameter": "nospace", + "property-declaration": "nospace", + "variable-declaration": "nospace" + } + ], + "unified-signatures": true, + "variable-name": false, + "whitespace": [ + true, + "check-branch", + "check-decl", + "check-operator", + "check-separator", + "check-type" + ], + "directive-selector": [ + true, + "attribute", + "app", + "camelCase" + ], + "component-selector": [ + true, + "element", + "app", + "kebab-case" + ], + "no-output-on-prefix": true, + "use-input-property-decorator": true, + "use-output-property-decorator": true, + "use-host-property-decorator": true, + "no-input-rename": true, + "no-output-rename": true, + "use-life-cycle-interface": true, + "use-pipe-transform-interface": true, + "component-class-suffix": true, + "directive-class-suffix": true + } +}