├── .editorconfig ├── .github └── workflows │ └── main.yml ├── .gitignore ├── CHANGELOG.md ├── ISSUE_TEMPLATE.md ├── LICENSE.md ├── README.md ├── angular.json ├── documentation ├── css │ ├── bootstrap.min.css │ ├── demo.css │ └── now-ui-dashboard.css ├── js │ └── jquery-3.2.1.min.js └── tutorial-components.html ├── e2e ├── app.e2e-spec.ts ├── app.po.ts └── tsconfig.e2e.json ├── genezio.yaml ├── karma.conf.js ├── package.json ├── protractor.conf.js ├── src ├── app │ ├── app.component.css │ ├── app.component.html │ ├── app.component.spec.ts │ ├── app.component.ts │ ├── app.module.ts │ ├── app.routing.ts │ ├── components │ │ ├── components.module.ts │ │ ├── footer │ │ │ ├── footer.component.css │ │ │ ├── footer.component.html │ │ │ ├── footer.component.spec.ts │ │ │ └── footer.component.ts │ │ ├── navbar │ │ │ ├── navbar.component.css │ │ │ ├── navbar.component.html │ │ │ ├── navbar.component.spec.ts │ │ │ └── navbar.component.ts │ │ └── sidebar │ │ │ ├── sidebar.component.css │ │ │ ├── sidebar.component.html │ │ │ ├── sidebar.component.spec.ts │ │ │ └── sidebar.component.ts │ ├── dashboard │ │ ├── dashboard.component.css │ │ ├── dashboard.component.html │ │ ├── dashboard.component.spec.ts │ │ └── dashboard.component.ts │ ├── icons │ │ ├── icons.component.css │ │ ├── icons.component.html │ │ ├── icons.component.spec.ts │ │ └── icons.component.ts │ ├── layouts │ │ └── admin-layout │ │ │ ├── admin-layout.component.html │ │ │ ├── admin-layout.component.scss │ │ │ ├── admin-layout.component.spec.ts │ │ │ ├── admin-layout.component.ts │ │ │ ├── admin-layout.module.ts │ │ │ └── admin-layout.routing.ts │ ├── maps │ │ ├── maps.component.css │ │ ├── maps.component.html │ │ ├── maps.component.spec.ts │ │ └── maps.component.ts │ ├── notifications │ │ ├── notifications.component.css │ │ ├── notifications.component.html │ │ ├── notifications.component.spec.ts │ │ └── notifications.component.ts │ ├── table-list │ │ ├── table-list.component.css │ │ ├── table-list.component.html │ │ ├── table-list.component.spec.ts │ │ └── table-list.component.ts │ ├── typography │ │ ├── typography.component.css │ │ ├── typography.component.html │ │ ├── typography.component.spec.ts │ │ └── typography.component.ts │ ├── upgrade │ │ ├── upgrade.component.html │ │ ├── upgrade.component.scss │ │ ├── upgrade.component.spec.ts │ │ └── upgrade.component.ts │ └── user-profile │ │ ├── user-profile.component.css │ │ ├── user-profile.component.html │ │ ├── user-profile.component.spec.ts │ │ └── user-profile.component.ts ├── assets │ ├── demo │ │ └── demo.css │ ├── fonts │ │ ├── nucleo-outline.eot │ │ ├── nucleo-outline.ttf │ │ ├── nucleo-outline.woff │ │ └── nucleo-outline.woff2 │ ├── img │ │ ├── angular2-logo-red.png │ │ ├── angular2-logo-white.png │ │ ├── apple-icon.png │ │ ├── bg5.jpg │ │ ├── favicon.png │ │ ├── header.jpg │ │ ├── mike.jpg │ │ └── now-logo.png │ └── scss │ │ ├── now-ui-dashboard.scss │ │ └── now-ui-dashboard │ │ ├── _alerts.scss │ │ ├── _buttons.scss │ │ ├── _cards.scss │ │ ├── _checkboxes-radio.scss │ │ ├── _dropdown.scss │ │ ├── _fixed-plugin.scss │ │ ├── _footers.scss │ │ ├── _images.scss │ │ ├── _inputs.scss │ │ ├── _misc.scss │ │ ├── _mixins.scss │ │ ├── _navbar.scss │ │ ├── _nucleo-outline.scss │ │ ├── _page-header.scss │ │ ├── _responsive.scss │ │ ├── _sidebar-and-main-panel.scss │ │ ├── _tables.scss │ │ ├── _typography.scss │ │ ├── _variables.scss │ │ ├── cards │ │ ├── _card-chart.scss │ │ ├── _card-map.scss │ │ ├── _card-plain.scss │ │ └── _card-user.scss │ │ ├── mixins │ │ ├── _buttons.scss │ │ ├── _cards.scss │ │ ├── _dropdown.scss │ │ ├── _inputs.scss │ │ ├── _page-header.scss │ │ ├── _transparency.scss │ │ └── _vendor-prefixes.scss │ │ └── plugins │ │ ├── _plugin-animate-bootstrap-notify.scss │ │ └── _plugin-perfect-scrollbar.scss ├── environments │ ├── environment.prod.ts │ └── environment.ts ├── favicon.ico ├── index.html ├── main.ts ├── polyfills.ts ├── styles.css ├── test.ts ├── tsconfig.app.json ├── tsconfig.spec.json └── typings.d.ts ├── tsconfig.json └── tslint.json /.editorconfig: -------------------------------------------------------------------------------- 1 | # Editor configuration, see https://editorconfig.org 2 | root = true 3 | 4 | [*] 5 | charset = utf-8 6 | indent_style = space 7 | indent_size = 2 8 | insert_final_newline = true 9 | trim_trailing_whitespace = true 10 | 11 | [*.md] 12 | max_line_length = off 13 | trim_trailing_whitespace = false 14 | -------------------------------------------------------------------------------- /.github/workflows/main.yml: -------------------------------------------------------------------------------- 1 | name: Autocloser 2 | on: [issues] 3 | jobs: 4 | autoclose: 5 | runs-on: ubuntu-latest 6 | steps: 7 | - name: Issue auto-closer 8 | uses: roots/issue-closer-action@v1.1 9 | with: 10 | repo-token: ${{ secrets.GITHUB_TOKEN }} 11 | issue-close-message: "@${issue.user.login} this issue was automatically closed because it did not follow the bellow rules:\n\n
\n\n\n\nIMPORTANT: Please use the following link to create a new issue:\n\nhttps://www.creative-tim.com/new-issue/now-ui-dashboard-angular\n\n**If your issue was not created using the app above, it will be closed immediately.**\n\n\n\nLove Creative Tim? Do you need Angular, React, Vuejs or HTML? You can visit:\n👉  https://www.creative-tim.com/bundles\n👉  https://www.creative-tim.com\n\n\n
\n\n" 12 | issue-pattern: (\#\#\# Version([\S\s.*]*?)\#\#\# Reproduction link([\S\s.*]*?)\#\#\# Operating System([\S\s.*]*?)\#\#\# Device([\S\s.*]*?)\#\#\# Browser & Version([\S\s.*]*?)\#\#\# Steps to reproduce([\S\s.*]*?)\#\#\# What is expected([\S\s.*]*?)\#\#\# What is actually happening([\S\s.*]*?)---([\S\s.*]*?)\#\#\# Solution([\S\s.*]*?)\#\#\# Additional comments([\S\s.*]*?)\<\!-- generated by creative-tim-issues\. DO NOT REMOVE --\>)|(\#\#\# What is your enhancement([\S\s.*]*?)\<\!-- generated by creative-tim-issues\. DO NOT REMOVE --\>) 13 | -------------------------------------------------------------------------------- /.gitignore: -------------------------------------------------------------------------------- 1 | # See http://help.github.com/ignore-files/ for more about ignoring files. 2 | 3 | # compiled output 4 | /dist 5 | /tmp 6 | /out-tsc 7 | 8 | # dependencies 9 | /node_modules 10 | 11 | # IDEs and editors 12 | /.idea 13 | .project 14 | .classpath 15 | .c9/ 16 | *.launch 17 | .settings/ 18 | *.sublime-workspace 19 | 20 | # IDE - VSCode 21 | .vscode/* 22 | !.vscode/settings.json 23 | !.vscode/tasks.json 24 | !.vscode/launch.json 25 | !.vscode/extensions.json 26 | 27 | # misc 28 | /.sass-cache 29 | /connect.lock 30 | /coverage 31 | /libpeerconnection.log 32 | npm-debug.log 33 | testem.log 34 | /typings 35 | /.angular 36 | 37 | # e2e 38 | /e2e/*.js 39 | /e2e/*.map 40 | 41 | # System Files 42 | .DS_Store 43 | Thumbs.db 44 | package-lock.json 45 | -------------------------------------------------------------------------------- /CHANGELOG.md: -------------------------------------------------------------------------------- 1 | ## [1.4.0] - 2022-05-06 2 | ### Updates 3 | - update to Angular 13 4 | - update all dependencies to match Angular 13 version 5 | - routing issue fixed 6 | ## [1.3.0] - 2020-12-17 7 | ### Updates 8 | - update to Angular 11 9 | - update all dependencies to match Angular 11 version 10 | 11 | ## [1.2.0] - 2020-03-13 12 | ### Updates 13 | - update to Angular 9 14 | - update all dependencies to match Angular 9 version 15 | 16 | ## [1.1.0] - 2019-02-11 17 | ### Changes 18 | - update to Angular 7 19 | - update ng-bootstrap to version 4 20 | - update all dependencies to latest versions 21 | 22 | ## [1.0.0] - 2018-05-17 23 | ### Initial Release 24 | -------------------------------------------------------------------------------- /ISSUE_TEMPLATE.md: -------------------------------------------------------------------------------- 1 | 8 | 9 | 14 | -------------------------------------------------------------------------------- /LICENSE.md: -------------------------------------------------------------------------------- 1 | MIT License 2 | 3 | Copyright (c) 2017 Creative Tim (www.creative-tim.com) 4 | 5 | Permission is hereby granted, free of charge, to any person obtaining a copy 6 | of this software and associated documentation files (the "Software"), to deal 7 | in the Software without restriction, including without limitation the rights 8 | to use, copy, modify, merge, publish, distribute, sublicense, and/or sell 9 | copies of the Software, and to permit persons to whom the Software is 10 | furnished to do so, subject to the following conditions: 11 | 12 | The above copyright notice and this permission notice shall be included in all 13 | copies or substantial portions of the Software. 14 | 15 | THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR 16 | IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, 17 | FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE 18 | AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER 19 | LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, 20 | OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE 21 | SOFTWARE. 22 | -------------------------------------------------------------------------------- /README.md: -------------------------------------------------------------------------------- 1 | # [Now UI Dashboard Angular](https://creativetimofficial.github.io/now-ui-dashboard-angular) [![version][version-badge]][CHANGELOG] [![license][license-badge]][LICENSE] 2 | 3 | ![alt text](https://s3.amazonaws.com/creativetim_bucket/products/85/original/opt_nud_angular_thumbnail.jpg) 4 | 5 | **[Now UI Dashboard Angular](https://creativetimofficial.github.io/now-ui-dashboard-angular)** is a responsive Bootstrap 4 kit provided for free by [Invision](https://www.invisionapp.com/) and [Creative Tim](https://www.creative-tim.com/). It combines colors that are easy on the eye, spacious cards, beautiful typography, and graphics. Now UI Dashboard comes packed with all plugins that you might need inside a project and documentation on how to get started. It is light and easy to use, and also very powerful. 6 | 7 | Now UI Dashboard Angular has the same design characteristics as Now UI Kit Angular, so it is quite convenient to use them together. Or you can choose between them depending on the project at hand. If you love Now UI Kit Angular, you'll love Now UI Dashboard Angular. 8 | Create awesome, lifelike prototypes with InVision and Now so your users can experience and give feedback on your vision! 9 | 10 | 11 | **Bootstrap 4 Support** 12 | Now UI Dashboard Angular is built on top of the much awaited Bootstrap 4. This makes starting a new project very simple. It also provides benefits if you are already working on a Bootstrap 4 project; you can just import the Now UI Dashboard Angular style over it. Most of the elements have been redesigned; but if you are using an element we have not touched, it will fall back to the Bootstrap default. 13 | 14 | **Example Pages** 15 | We wanted to fully display the power of this dashboard, so the kit comes packed with examples showing you how to use the components. Inside the product you will find: 16 | 17 | ## Deploy 18 | 19 | :rocket: You can deploy your own version of the template to Genezio with one click: 20 | 21 | [![Deploy to Genezio](https://raw.githubusercontent.com/Genez-io/graphics/main/svg/deploy-button.svg)](https://app.genez.io/start/deploy?repository=https://github.com/creativetimofficial/now-ui-dashboard-angular&utm_source=github&utm_medium=referral&utm_campaign=github-creativetim&utm_term=deploy-project&utm_content=button-head) 22 | 23 | ## Links: 24 | 25 | + [Live Preview](https://creativetimofficial.github.io/now-ui-dashboard-angular) 26 | 27 | **Tutorial** 28 | In order for you to easily be able to use the Now UI Dashboard Angular, we have created a tutorial page in our documentation. It shows the structure for the files inside the archive and how to import them. It then features every components with a description and example how to use it. You can see the details [here](https://creativetimofficial.github.io/now-ui-dashboard-angular/documentation/tutorial). 29 | 30 | ## Terminal Commands 31 | 32 | 1. Install NodeJs from [NodeJs Official Page](https://nodejs.org/en). 33 | 2. Open Terminal 34 | 3. Go to your file project 35 | 4. Run in terminal: ```npm install -g @angular/cli``` 36 | 5. Then: ```npm install``` 37 | 6. And: ```npm start``` 38 | 7. Navigate to [localhost:4200](localhost:4200) 39 | 40 | ### What's included 41 | 42 | Within the download you'll find the following directories and files: 43 | 44 | ``` 45 | Now Ui Dashboard 46 | ├── CHANGELOG.md 47 | ├── LICENSE.md 48 | ├── README.md 49 | ├── angular-cli.json 50 | ├── documentation 51 | ├── e2e 52 | ├── karma.conf.js 53 | ├── package.json 54 | ├── protractor.conf.js 55 | ├── src 56 | │   ├── app 57 | │   │   ├── app.component.css 58 | │   │   ├── app.component.html 59 | │   │   ├── app.component.spec.ts 60 | │   │   ├── app.component.ts 61 | │   │   ├── app.module.ts 62 | │   │   ├── app.routing.ts 63 | │   │   ├── components 64 | │   │   │   ├── components.module.ts 65 | │   │   │   ├── footer 66 | │   │   │   │   ├── footer.component.css 67 | │   │   │   │   ├── footer.component.html 68 | │   │   │   │   ├── footer.component.spec.ts 69 | │   │   │   │   └── footer.component.ts 70 | │   │   │   ├── navbar 71 | │   │   │   │   ├── navbar.component.css 72 | │   │   │   │   ├── navbar.component.html 73 | │   │   │   │   ├── navbar.component.spec.ts 74 | │   │   │   │   └── navbar.component.ts 75 | │   │   │   └── sidebar 76 | │   │   │   ├── sidebar.component.css 77 | │   │   │   ├── sidebar.component.html 78 | │   │   │   ├── sidebar.component.spec.ts 79 | │   │   │   └── sidebar.component.ts 80 | │   │   ├── dashboard 81 | │   │   │   ├── dashboard.component.css 82 | │   │   │   ├── dashboard.component.html 83 | │   │   │   ├── dashboard.component.spec.ts 84 | │   │   │   └── dashboard.component.ts 85 | │   │   ├── icons 86 | │   │   │   ├── icons.component.css 87 | │   │   │   ├── icons.component.html 88 | │   │   │   ├── icons.component.spec.ts 89 | │   │   │   └── icons.component.ts 90 | │   │   ├── layouts 91 | │   │   │   └── admin-layout 92 | │   │   │   ├── admin-layout.component.html 93 | │   │   │   ├── admin-layout.component.scss 94 | │   │   │   ├── admin-layout.component.spec.ts 95 | │   │   │   ├── admin-layout.component.ts 96 | │   │   │   ├── admin-layout.module.ts 97 | │   │   │   └── admin-layout.routing.ts 98 | │   │   ├── maps 99 | │   │   │   ├── maps.component.css 100 | │   │   │   ├── maps.component.html 101 | │   │   │   ├── maps.component.spec.ts 102 | │   │   │   └── maps.component.ts 103 | │   │   ├── notifications 104 | │   │   │   ├── notifications.component.css 105 | │   │   │   ├── notifications.component.html 106 | │   │   │   ├── notifications.component.spec.ts 107 | │   │   │   └── notifications.component.ts 108 | │   │   ├── table-list 109 | │   │   │   ├── table-list.component.css 110 | │   │   │   ├── table-list.component.html 111 | │   │   │   ├── table-list.component.spec.ts 112 | │   │   │   └── table-list.component.ts 113 | │   │   ├── typography 114 | │   │   │   ├── typography.component.css 115 | │   │   │   ├── typography.component.html 116 | │   │   │   ├── typography.component.spec.ts 117 | │   │   │   └── typography.component.ts 118 | │   │   └── user-profile 119 | │   │   ├── user-profile.component.css 120 | │   │   ├── user-profile.component.html 121 | │   │   ├── user-profile.component.spec.ts 122 | │   │   └── user-profile.component.ts 123 | │   ├── assets 124 | │   │   ├── demo 125 | │   │   ├── fonts 126 | │   │   ├── img 127 | │   │   └── scss 128 | │   │   ├── now-ui-dashboard 129 | │   │   └── now-ui-dashboard.scss 130 | │   ├── environments 131 | │   ├── favicon.ico 132 | │   ├── index.html 133 | │   ├── main.ts 134 | │   ├── polyfills.ts 135 | │   ├── styles.css 136 | │   ├── test.ts 137 | │   ├── tsconfig.app.json 138 | │   ├── tsconfig.spec.json 139 | │   └── typings.d.ts 140 | ├── tsconfig.json 141 | ├── tslint.json 142 | └── typings 143 | ``` 144 | 145 | ## Useful Links 146 | 147 | More products from Creative Tim: 148 | 149 | Tutorials: 150 | 151 | Freebies: 152 | 153 | Affiliate Program (earn money): 154 | 155 | Social Media: 156 | 157 | Twitter: 158 | 159 | Facebook: 160 | 161 | Dribbble: 162 | 163 | Google+: 164 | 165 | Instagram: 166 | 167 | [CHANGELOG]: ./CHANGELOG.md 168 | [LICENSE]: ./LICENSE 169 | [version-badge]: https://img.shields.io/badge/version-1.4.0-blue.svg 170 | [license-badge]: https://img.shields.io/badge/license-MIT-blue.svg 171 | -------------------------------------------------------------------------------- /angular.json: -------------------------------------------------------------------------------- 1 | { 2 | "$schema": "./node_modules/@angular/cli/lib/config/schema.json", 3 | "version": 1, 4 | "newProjectRoot": "projects", 5 | "projects": { 6 | "now-ui-dashboard-angular": { 7 | "root": "", 8 | "sourceRoot": "src", 9 | "projectType": "application", 10 | "architect": { 11 | "build": { 12 | "builder": "@angular-devkit/build-angular:browser", 13 | "options": { 14 | "outputPath": "dist", 15 | "index": "src/index.html", 16 | "main": "src/main.ts", 17 | "tsConfig": "src/tsconfig.app.json", 18 | "polyfills": "src/polyfills.ts", 19 | "allowedCommonJsDependencies": ["hammerjs", "chart.js"], 20 | "assets": [ 21 | "src/assets", 22 | "src/favicon.ico" 23 | ], 24 | "styles": [ 25 | "node_modules/perfect-scrollbar/css/perfect-scrollbar.css", 26 | "node_modules/bootstrap/dist/css/bootstrap.css", 27 | "node_modules/ngx-toastr/toastr.css", 28 | "src/assets/scss/now-ui-dashboard.scss", 29 | "src/assets/demo/demo.css" 30 | ], 31 | "scripts": [ 32 | "node_modules/chart.js/dist/Chart.min.js" 33 | ] 34 | }, 35 | "configurations": { 36 | "production": { 37 | "optimization": true, 38 | "outputHashing": "all", 39 | "sourceMap": false, 40 | "namedChunks": false, 41 | "extractLicenses": true, 42 | "vendorChunk": false, 43 | "buildOptimizer": true, 44 | "fileReplacements": [ 45 | { 46 | "replace": "src/environments/environment.ts", 47 | "with": "src/environments/environment.prod.ts" 48 | } 49 | ] 50 | }, 51 | "development": { 52 | "buildOptimizer": false, 53 | "optimization": false, 54 | "vendorChunk": true, 55 | "extractLicenses": false, 56 | "sourceMap": true, 57 | "namedChunks": true 58 | } 59 | } 60 | }, 61 | "serve": { 62 | "builder": "@angular-devkit/build-angular:dev-server", 63 | "options": { 64 | "browserTarget": "now-ui-dashboard-angular:build" 65 | }, 66 | "configurations": { 67 | "production": { 68 | "browserTarget": "now-ui-dashboard-angular:build:production" 69 | }, 70 | "development": { 71 | "browserTarget": "now-ui-dashboard-angular:build:development" 72 | }, 73 | "defaultConfiguration": "development" 74 | } 75 | }, 76 | "extract-i18n": { 77 | "builder": "@angular-devkit/build-angular:extract-i18n", 78 | "options": { 79 | "browserTarget": "now-ui-dashboard-angular:build" 80 | } 81 | }, 82 | "test": { 83 | "builder": "@angular-devkit/build-angular:karma", 84 | "options": { 85 | "main": "src/test.ts", 86 | "karmaConfig": "./karma.conf.js", 87 | "polyfills": "src/polyfills.ts", 88 | "tsConfig": "src/tsconfig.spec.json", 89 | "scripts": [ 90 | "node_modules/chart.js/dist/Chart.min.js" 91 | ], 92 | "styles": [ 93 | "node_modules/perfect-scrollbar/css/perfect-scrollbar.css", 94 | "node_modules/ngx-toastr/toastr.css", 95 | "src/assets/scss/now-ui-dashboard.scss", 96 | "src/assets/demo/demo.css" 97 | ], 98 | "assets": [ 99 | "src/assets", 100 | "src/favicon.ico" 101 | ] 102 | } 103 | }, 104 | "lint": { 105 | "builder": "@angular-devkit/build-angular:tslint", 106 | "options": { 107 | "tsConfig": [ 108 | "src/tsconfig.app.json", 109 | "src/tsconfig.spec.json" 110 | ], 111 | "exclude": [] 112 | } 113 | } 114 | } 115 | }, 116 | "now-ui-dashboard-angular-e2e": { 117 | "root": "e2e", 118 | "sourceRoot": "e2e", 119 | "projectType": "application", 120 | "architect": { 121 | "e2e": { 122 | "builder": "@angular-devkit/build-angular:protractor", 123 | "options": { 124 | "protractorConfig": "./protractor.conf.js", 125 | "devServerTarget": "now-ui-dashboard-angular:serve" 126 | } 127 | }, 128 | "lint": { 129 | "builder": "@angular-devkit/build-angular:tslint", 130 | "options": { 131 | "tsConfig": [ 132 | "e2e/tsconfig.e2e.json" 133 | ], 134 | "exclude": [] 135 | } 136 | } 137 | } 138 | } 139 | }, 140 | "defaultProject": "now-ui-dashboard-angular", 141 | "schematics": { 142 | "@schematics/angular:component": { 143 | "prefix": "app", 144 | "styleext": "scss" 145 | }, 146 | "@schematics/angular:directive": { 147 | "prefix": "app" 148 | } 149 | }, 150 | "cli": { 151 | "analytics": false 152 | } 153 | } 154 | -------------------------------------------------------------------------------- /documentation/css/demo.css: -------------------------------------------------------------------------------- 1 | .tim-row { 2 | margin-bottom: 20px; 3 | } 4 | 5 | .tim-white-buttons { 6 | background-color: #777777; 7 | } 8 | 9 | .typography-line { 10 | padding-left: 25%; 11 | margin-bottom: 35px; 12 | position: relative; 13 | display: block; 14 | width: 100%; 15 | } 16 | 17 | .typography-line span { 18 | bottom: 10px; 19 | color: #c0c1c2; 20 | display: block; 21 | font-weight: 400; 22 | font-size: 13px; 23 | line-height: 13px; 24 | left: 0; 25 | position: absolute; 26 | width: 260px; 27 | text-transform: none; 28 | } 29 | 30 | .tim-row { 31 | padding-top: 60px; 32 | } 33 | 34 | .tim-row h3 { 35 | margin-top: 0; 36 | } 37 | 38 | .offline-doc .page-header { 39 | display: flex; 40 | align-items: center; 41 | } 42 | 43 | .offline-doc .footer { 44 | position: absolute; 45 | width: 100%; 46 | background: transparent; 47 | bottom: 0; 48 | color: #fff; 49 | z-index: 1; 50 | } 51 | 52 | @media all and (min-width: 992px) { 53 | .sidebar .nav>li.active-pro { 54 | position: absolute; 55 | width: 100%; 56 | bottom: 10px; 57 | } 58 | } 59 | 60 | .card.card-upgrade .card-category { 61 | max-width: 530px; 62 | margin: 0 auto; 63 | } -------------------------------------------------------------------------------- /documentation/tutorial-components.html: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | Now UI Dashboard Angular by Creative Tim 10 | 11 | 12 | 13 | 14 | 15 | 16 | 17 | 18 | 19 | 20 | 21 | 22 | 23 | 24 | 52 | 53 | 68 | 99 | 100 | 101 | 102 | 103 | 104 | 105 | -------------------------------------------------------------------------------- /e2e/app.e2e-spec.ts: -------------------------------------------------------------------------------- 1 | import { MaterialDashboardAngularPage } from './app.po'; 2 | 3 | describe('material-dashboard-angular App', () => { 4 | let page: MaterialDashboardAngularPage; 5 | 6 | beforeEach(() => { 7 | page = new MaterialDashboardAngularPage(); 8 | }); 9 | 10 | it('should display message saying app works', () => { 11 | page.navigateTo(); 12 | expect(page.getParagraphText()).toEqual('app works!'); 13 | }); 14 | }); 15 | -------------------------------------------------------------------------------- /e2e/app.po.ts: -------------------------------------------------------------------------------- 1 | import { browser, element, by } from 'protractor'; 2 | 3 | export class MaterialDashboardAngularPage { 4 | navigateTo() { 5 | return browser.get('/'); 6 | } 7 | 8 | getParagraphText() { 9 | return element(by.css('app-root h1')).getText(); 10 | } 11 | } 12 | -------------------------------------------------------------------------------- /e2e/tsconfig.e2e.json: -------------------------------------------------------------------------------- 1 | { 2 | "extends": "../tsconfig.json", 3 | "compilerOptions": { 4 | "outDir": "../out-tsc/e2e", 5 | "module": "commonjs", 6 | "target": "es5", 7 | "types":[ 8 | "jasmine", 9 | "node" 10 | ] 11 | } 12 | } 13 | -------------------------------------------------------------------------------- /genezio.yaml: -------------------------------------------------------------------------------- 1 | name: now-ui-dashboard-angular 2 | region: us-east-1 3 | frontend: 4 | # Specifies the path of your code. 5 | path: . 6 | # Specifies the folder where the build is located. 7 | # This is the folder that will be deployed. 8 | publish: dist 9 | # Scripts will run in the specified `path` folder. 10 | scripts: 11 | # The command to build your frontend project. This is custom to your project. 12 | # It must to populate the specified `publish` folder with a `index.html` file. 13 | deploy: 14 | - npm install --legacy-peer-deps 15 | - npm run build 16 | yamlVersion: 2 17 | -------------------------------------------------------------------------------- /karma.conf.js: -------------------------------------------------------------------------------- 1 | // Karma configuration file, see link for more information 2 | // https://karma-runner.github.io/0.13/config/configuration-file.html 3 | 4 | module.exports = function (config) { 5 | config.set({ 6 | basePath: '', 7 | frameworks: ['jasmine', '@angular-devkit/build-angular'], 8 | plugins: [ 9 | require('karma-jasmine'), 10 | require('karma-chrome-launcher'), 11 | require('karma-jasmine-html-reporter'), 12 | require('karma-coverage-istanbul-reporter'), 13 | require('@angular-devkit/build-angular/plugins/karma') 14 | ], 15 | client:{ 16 | clearContext: false // leave Jasmine Spec Runner output visible in browser 17 | }, 18 | files: [ 19 | 20 | ], 21 | preprocessors: { 22 | 23 | }, 24 | mime: { 25 | 'text/x-typescript': ['ts','tsx'] 26 | }, 27 | coverageIstanbulReporter: { 28 | dir: require('path').join(__dirname, 'coverage'), reports: [ 'html', 'lcovonly' ], 29 | fixWebpackSourcePaths: true 30 | }, 31 | 32 | reporters: config.angularCli && config.angularCli.codeCoverage 33 | ? ['progress', 'coverage-istanbul'] 34 | : ['progress', 'kjhtml'], 35 | port: 9876, 36 | colors: true, 37 | logLevel: config.LOG_INFO, 38 | autoWatch: true, 39 | browsers: ['Chrome'], 40 | singleRun: false 41 | }); 42 | }; 43 | -------------------------------------------------------------------------------- /package.json: -------------------------------------------------------------------------------- 1 | { 2 | "name": "now-ui-dashboard-angular", 3 | "version": "1.4.0", 4 | "license": "MIT", 5 | "scripts": { 6 | "ng": "ng", 7 | "start": "ng serve", 8 | "build": "cross-env CI=false ng build", 9 | "test": "ng test", 10 | "lint": "ng lint", 11 | "e2e": "ng e2e", 12 | "install:clean": "rm -rf node_modules/ && rm -rf package-lock.json && npm install && npm start" 13 | }, 14 | "private": true, 15 | "dependencies": { 16 | "@adactive/bootstrap-tagsinput": "0.8.2", 17 | "@angular/animations": "^13.2.6", 18 | "@angular/cdk": "^13.2.6", 19 | "@angular/common": "^13.2.6", 20 | "@angular/compiler": "^13.2.6", 21 | "@angular/core": "^13.2.6", 22 | "@angular/elements": "^13.2.6", 23 | "@angular/forms": "^13.2.6", 24 | "@angular/google-maps": "^13.3.3", 25 | "@angular/localize": "^13.2.6", 26 | "@angular/material": "^13.2.6", 27 | "@angular/platform-browser": "^13.2.6", 28 | "@angular/platform-browser-dynamic": "^13.2.6", 29 | "@angular/router": "^13.2.6", 30 | "@ng-bootstrap/ng-bootstrap": "12.0.1", 31 | "@popperjs/core": "^2.11.4", 32 | "ajv": "7.0.1", 33 | "ajv-keywords": "4.0.0", 34 | "bootstrap": "4.5.3", 35 | "chart.js": "2.9.4", 36 | "chartist": "0.11.4", 37 | "classlist.js": "1.1.20150312", 38 | "copy-webpack-plugin": "7.0.0", 39 | "core-js": "3.8.1", 40 | "font-awesome": "4.7.0", 41 | "hammerjs": "2.0.8", 42 | "jquery": "3.5.1", 43 | "jw-bootstrap-switch-ng2": "2.0.5", 44 | "ng2-charts": "2.4.2", 45 | "ngx-toastr": "13.2.0", 46 | "nouislider": "14.6.3", 47 | "perfect-scrollbar": "1.5.0", 48 | "popper.js": "1.16.1", 49 | "rellax": "1.12.1", 50 | "rxjs": "^6.5.4", 51 | "rxjs-compat": "6.6.7", 52 | "web-animations-js": "2.3.2", 53 | "zone.js": "~0.11.5" 54 | }, 55 | "devDependencies": { 56 | "@angular-devkit/build-angular": "^13.2.6", 57 | "@angular/cli": "^13.2.6", 58 | "@angular/compiler-cli": "^13.2.6", 59 | "@angular/language-service": "13.2.6", 60 | "@types/jasmine": "~3.10.3", 61 | "@types/jasminewd2": "~2.0.10", 62 | "@types/node": "^17.0.21", 63 | "codelyzer": "6.0.2", 64 | "jasmine-core": "~4.0.1", 65 | "jasmine-spec-reporter": "~7.0.0", 66 | "karma": "^6.3.17", 67 | "karma-chrome-launcher": "~3.1.1", 68 | "karma-coverage": "^2.2.0", 69 | "karma-coverage-istanbul-reporter": "~3.0.3", 70 | "karma-jasmine": "~4.0.1", 71 | "karma-jasmine-html-reporter": "^1.7.0", 72 | "protractor": "7.0.0", 73 | "ts-node": "~10.7.0", 74 | "typescript": "~4.4.2", 75 | "@types/bootstrap": "5.0.1", 76 | "@types/chartist": "0.11.0", 77 | "@types/googlemaps": "3.40.5", 78 | "@types/jquery": "3.5.5", 79 | "cross-env": "^7.0.3" 80 | } 81 | } 82 | -------------------------------------------------------------------------------- /protractor.conf.js: -------------------------------------------------------------------------------- 1 | // Protractor configuration file, see link for more information 2 | // https://github.com/angular/protractor/blob/master/lib/config.ts 3 | 4 | const { SpecReporter } = require('jasmine-spec-reporter'); 5 | 6 | exports.config = { 7 | allScriptsTimeout: 11000, 8 | specs: [ 9 | './e2e/**/*.e2e-spec.ts' 10 | ], 11 | capabilities: { 12 | 'browserName': 'chrome' 13 | }, 14 | directConnect: true, 15 | baseUrl: 'http://localhost:4200/', 16 | framework: 'jasmine', 17 | jasmineNodeOpts: { 18 | showColors: true, 19 | defaultTimeoutInterval: 30000, 20 | print: function() {} 21 | }, 22 | beforeLaunch: function() { 23 | require('ts-node').register({ 24 | project: 'e2e/tsconfig.e2e.json' 25 | }); 26 | }, 27 | onPrepare() { 28 | jasmine.getEnv().addReporter(new SpecReporter({ spec: { displayStacktrace: true } })); 29 | } 30 | }; 31 | -------------------------------------------------------------------------------- /src/app/app.component.css: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/creativetimofficial/now-ui-dashboard-angular/267e394311c33006317423a92e2ec935df506259/src/app/app.component.css -------------------------------------------------------------------------------- /src/app/app.component.html: -------------------------------------------------------------------------------- 1 | 2 | 3 | -------------------------------------------------------------------------------- /src/app/app.component.spec.ts: -------------------------------------------------------------------------------- 1 | import { TestBed, async } from '@angular/core/testing'; 2 | 3 | import { AppComponent } from './app.component'; 4 | 5 | describe('AppComponent', () => { 6 | beforeEach(async(() => { 7 | TestBed.configureTestingModule({ 8 | declarations: [ 9 | AppComponent 10 | ], 11 | }).compileComponents(); 12 | })); 13 | 14 | it('should create the app', async(() => { 15 | const fixture = TestBed.createComponent(AppComponent); 16 | const app = fixture.debugElement.componentInstance; 17 | expect(app).toBeTruthy(); 18 | })); 19 | 20 | it(`should have as title 'app works!'`, async(() => { 21 | const fixture = TestBed.createComponent(AppComponent); 22 | const app = fixture.debugElement.componentInstance; 23 | expect(app.title).toEqual('app works!'); 24 | })); 25 | 26 | it('should render title in a h1 tag', async(() => { 27 | const fixture = TestBed.createComponent(AppComponent); 28 | fixture.detectChanges(); 29 | const compiled = fixture.debugElement.nativeElement; 30 | expect(compiled.querySelector('h1').textContent).toContain('app works!'); 31 | })); 32 | }); 33 | -------------------------------------------------------------------------------- /src/app/app.component.ts: -------------------------------------------------------------------------------- 1 | import { Component} from '@angular/core'; 2 | 3 | 4 | @Component({ 5 | selector: 'app-root', 6 | templateUrl: './app.component.html', 7 | styleUrls: ['./app.component.css'] 8 | }) 9 | export class AppComponent { 10 | 11 | } 12 | -------------------------------------------------------------------------------- /src/app/app.module.ts: -------------------------------------------------------------------------------- 1 | import { BrowserAnimationsModule } from '@angular/platform-browser/animations'; 2 | import { NgModule } from '@angular/core'; 3 | import { FormsModule } from '@angular/forms'; 4 | import { HttpClientModule } from '@angular/common/http'; 5 | import { RouterModule } from '@angular/router'; 6 | import { NgbModule } from '@ng-bootstrap/ng-bootstrap'; 7 | import { ToastrModule } from 'ngx-toastr'; 8 | 9 | import { AppRoutingModule } from './app.routing'; 10 | import { ComponentsModule } from './components/components.module'; 11 | 12 | import { AppComponent } from './app.component'; 13 | 14 | import { AdminLayoutComponent } from './layouts/admin-layout/admin-layout.component'; 15 | 16 | @NgModule({ 17 | imports: [ 18 | BrowserAnimationsModule, 19 | FormsModule, 20 | HttpClientModule, 21 | ComponentsModule, 22 | RouterModule, 23 | AppRoutingModule, 24 | NgbModule, 25 | ToastrModule.forRoot() 26 | ], 27 | declarations: [ 28 | AppComponent, 29 | AdminLayoutComponent 30 | 31 | ], 32 | providers: [], 33 | bootstrap: [AppComponent] 34 | }) 35 | export class AppModule { } 36 | -------------------------------------------------------------------------------- /src/app/app.routing.ts: -------------------------------------------------------------------------------- 1 | import { NgModule } from '@angular/core'; 2 | import { CommonModule, } from '@angular/common'; 3 | import { BrowserModule } from '@angular/platform-browser'; 4 | import { Routes, RouterModule } from '@angular/router'; 5 | 6 | import { AdminLayoutComponent } from './layouts/admin-layout/admin-layout.component'; 7 | 8 | const routes: Routes =[ 9 | { 10 | path: '', 11 | redirectTo: 'dashboard', 12 | pathMatch: 'full', 13 | }, { 14 | path: '', 15 | component: AdminLayoutComponent, 16 | children: [ 17 | { 18 | path: '', 19 | loadChildren: () => import('./layouts/admin-layout/admin-layout.module').then(x=>x.AdminLayoutModule) 20 | }]}, 21 | { 22 | path: '**', 23 | redirectTo: 'dashboard' 24 | } 25 | ]; 26 | 27 | @NgModule({ 28 | imports: [ 29 | CommonModule, 30 | BrowserModule, 31 | RouterModule.forRoot(routes) 32 | ], 33 | exports: [ 34 | ], 35 | }) 36 | export class AppRoutingModule { } 37 | -------------------------------------------------------------------------------- /src/app/components/components.module.ts: -------------------------------------------------------------------------------- 1 | import { NgModule } from '@angular/core'; 2 | import { CommonModule } from '@angular/common'; 3 | import { RouterModule } from '@angular/router'; 4 | import { NgbModule } from '@ng-bootstrap/ng-bootstrap'; 5 | 6 | import { FooterComponent } from './footer/footer.component'; 7 | import { NavbarComponent } from './navbar/navbar.component'; 8 | import { SidebarComponent } from './sidebar/sidebar.component'; 9 | 10 | @NgModule({ 11 | imports: [ 12 | CommonModule, 13 | RouterModule, 14 | NgbModule 15 | ], 16 | declarations: [ 17 | FooterComponent, 18 | NavbarComponent, 19 | SidebarComponent 20 | ], 21 | exports: [ 22 | FooterComponent, 23 | NavbarComponent, 24 | SidebarComponent 25 | ] 26 | }) 27 | export class ComponentsModule { } 28 | -------------------------------------------------------------------------------- /src/app/components/footer/footer.component.css: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/creativetimofficial/now-ui-dashboard-angular/267e394311c33006317423a92e2ec935df506259/src/app/components/footer/footer.component.css -------------------------------------------------------------------------------- /src/app/components/footer/footer.component.html: -------------------------------------------------------------------------------- 1 | 2 | 31 | -------------------------------------------------------------------------------- /src/app/components/footer/footer.component.spec.ts: -------------------------------------------------------------------------------- 1 | import { async, ComponentFixture, TestBed } from '@angular/core/testing'; 2 | 3 | import { FooterComponent } from './footer.component'; 4 | 5 | describe('FooterComponent', () => { 6 | let component: FooterComponent; 7 | let fixture: ComponentFixture; 8 | 9 | beforeEach(async(() => { 10 | TestBed.configureTestingModule({ 11 | declarations: [ FooterComponent ] 12 | }) 13 | .compileComponents(); 14 | })); 15 | 16 | beforeEach(() => { 17 | fixture = TestBed.createComponent(FooterComponent); 18 | component = fixture.componentInstance; 19 | fixture.detectChanges(); 20 | }); 21 | 22 | it('should create', () => { 23 | expect(component).toBeTruthy(); 24 | }); 25 | }); 26 | -------------------------------------------------------------------------------- /src/app/components/footer/footer.component.ts: -------------------------------------------------------------------------------- 1 | import { Component, OnInit } from '@angular/core'; 2 | 3 | @Component({ 4 | selector: 'app-footer', 5 | templateUrl: './footer.component.html', 6 | styleUrls: ['./footer.component.css'] 7 | }) 8 | export class FooterComponent implements OnInit { 9 | test : Date = new Date(); 10 | 11 | constructor() { } 12 | 13 | ngOnInit() { 14 | } 15 | 16 | } 17 | -------------------------------------------------------------------------------- /src/app/components/navbar/navbar.component.css: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/creativetimofficial/now-ui-dashboard-angular/267e394311c33006317423a92e2ec935df506259/src/app/components/navbar/navbar.component.css -------------------------------------------------------------------------------- /src/app/components/navbar/navbar.component.html: -------------------------------------------------------------------------------- 1 | 2 | 65 | -------------------------------------------------------------------------------- /src/app/components/navbar/navbar.component.spec.ts: -------------------------------------------------------------------------------- 1 | import { async, ComponentFixture, TestBed } from '@angular/core/testing'; 2 | 3 | import { NavbarComponent } from './navbar.component'; 4 | 5 | describe('NavbarComponent', () => { 6 | let component: NavbarComponent; 7 | let fixture: ComponentFixture; 8 | 9 | beforeEach(async(() => { 10 | TestBed.configureTestingModule({ 11 | declarations: [ NavbarComponent ] 12 | }) 13 | .compileComponents(); 14 | })); 15 | 16 | beforeEach(() => { 17 | fixture = TestBed.createComponent(NavbarComponent); 18 | component = fixture.componentInstance; 19 | fixture.detectChanges(); 20 | }); 21 | 22 | it('should create', () => { 23 | expect(component).toBeTruthy(); 24 | }); 25 | }); 26 | -------------------------------------------------------------------------------- /src/app/components/navbar/navbar.component.ts: -------------------------------------------------------------------------------- 1 | import { Component, OnInit, ElementRef } from '@angular/core'; 2 | import { ROUTES } from '../sidebar/sidebar.component'; 3 | import {Location, LocationStrategy, PathLocationStrategy} from '@angular/common'; 4 | import { Router } from '@angular/router'; 5 | import Chart from 'chart.js'; 6 | 7 | @Component({ 8 | selector: 'app-navbar', 9 | templateUrl: './navbar.component.html', 10 | styleUrls: ['./navbar.component.css'] 11 | }) 12 | export class NavbarComponent implements OnInit { 13 | private listTitles: any[]; 14 | location: Location; 15 | mobile_menu_visible: any = 0; 16 | private toggleButton: any; 17 | private sidebarVisible: boolean; 18 | 19 | public isCollapsed = true; 20 | 21 | constructor(location: Location, private element: ElementRef, private router: Router) { 22 | this.location = location; 23 | this.sidebarVisible = false; 24 | } 25 | 26 | ngOnInit(){ 27 | this.listTitles = ROUTES.filter(listTitle => listTitle); 28 | const navbar: HTMLElement = this.element.nativeElement; 29 | this.toggleButton = navbar.getElementsByClassName('navbar-toggler')[0]; 30 | this.router.events.subscribe((event) => { 31 | this.sidebarClose(); 32 | var $layer: any = document.getElementsByClassName('close-layer')[0]; 33 | if ($layer) { 34 | $layer.remove(); 35 | this.mobile_menu_visible = 0; 36 | } 37 | }); 38 | } 39 | 40 | collapse(){ 41 | this.isCollapsed = !this.isCollapsed; 42 | const navbar = document.getElementsByTagName('nav')[0]; 43 | console.log(navbar); 44 | if (!this.isCollapsed) { 45 | navbar.classList.remove('navbar-transparent'); 46 | navbar.classList.add('bg-white'); 47 | }else{ 48 | navbar.classList.add('navbar-transparent'); 49 | navbar.classList.remove('bg-white'); 50 | } 51 | 52 | } 53 | 54 | sidebarOpen() { 55 | const toggleButton = this.toggleButton; 56 | const mainPanel = document.getElementsByClassName('main-panel')[0]; 57 | const html = document.getElementsByTagName('html')[0]; 58 | if (window.innerWidth < 991) { 59 | mainPanel.style.position = 'fixed'; 60 | } 61 | 62 | setTimeout(function(){ 63 | toggleButton.classList.add('toggled'); 64 | }, 500); 65 | 66 | html.classList.add('nav-open'); 67 | 68 | this.sidebarVisible = true; 69 | }; 70 | sidebarClose() { 71 | const html = document.getElementsByTagName('html')[0]; 72 | this.toggleButton.classList.remove('toggled'); 73 | const mainPanel = document.getElementsByClassName('main-panel')[0]; 74 | 75 | if (window.innerWidth < 991) { 76 | setTimeout(function(){ 77 | mainPanel.style.position = ''; 78 | }, 500); 79 | } 80 | this.sidebarVisible = false; 81 | html.classList.remove('nav-open'); 82 | }; 83 | sidebarToggle() { 84 | // const toggleButton = this.toggleButton; 85 | // const html = document.getElementsByTagName('html')[0]; 86 | var $toggle = document.getElementsByClassName('navbar-toggler')[0]; 87 | 88 | if (this.sidebarVisible === false) { 89 | this.sidebarOpen(); 90 | } else { 91 | this.sidebarClose(); 92 | } 93 | const html = document.getElementsByTagName('html')[0]; 94 | 95 | if (this.mobile_menu_visible == 1) { 96 | // $('html').removeClass('nav-open'); 97 | html.classList.remove('nav-open'); 98 | if ($layer) { 99 | $layer.remove(); 100 | } 101 | setTimeout(function() { 102 | $toggle.classList.remove('toggled'); 103 | }, 400); 104 | 105 | this.mobile_menu_visible = 0; 106 | } else { 107 | setTimeout(function() { 108 | $toggle.classList.add('toggled'); 109 | }, 430); 110 | 111 | var $layer = document.createElement('div'); 112 | $layer.setAttribute('class', 'close-layer'); 113 | 114 | 115 | if (html.querySelectorAll('.main-panel')) { 116 | document.getElementsByClassName('main-panel')[0].appendChild($layer); 117 | }else if (html.classList.contains('off-canvas-sidebar')) { 118 | document.getElementsByClassName('wrapper-full-page')[0].appendChild($layer); 119 | } 120 | 121 | setTimeout(function() { 122 | $layer.classList.add('visible'); 123 | }, 100); 124 | 125 | $layer.onclick = function() { //asign a function 126 | html.classList.remove('nav-open'); 127 | this.mobile_menu_visible = 0; 128 | $layer.classList.remove('visible'); 129 | setTimeout(function() { 130 | $layer.remove(); 131 | $toggle.classList.remove('toggled'); 132 | }, 400); 133 | }.bind(this); 134 | 135 | html.classList.add('nav-open'); 136 | this.mobile_menu_visible = 1; 137 | 138 | } 139 | }; 140 | 141 | getTitle(){ 142 | var titlee = this.location.prepareExternalUrl(this.location.path()); 143 | if(titlee.charAt(0) === '#'){ 144 | titlee = titlee.slice( 2 ); 145 | } 146 | titlee = titlee.split('/').pop(); 147 | 148 | for(var item = 0; item < this.listTitles.length; item++){ 149 | if(this.listTitles[item].path === titlee){ 150 | return this.listTitles[item].title; 151 | } 152 | } 153 | return 'Dashboard'; 154 | } 155 | } 156 | -------------------------------------------------------------------------------- /src/app/components/sidebar/sidebar.component.css: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/creativetimofficial/now-ui-dashboard-angular/267e394311c33006317423a92e2ec935df506259/src/app/components/sidebar/sidebar.component.css -------------------------------------------------------------------------------- /src/app/components/sidebar/sidebar.component.html: -------------------------------------------------------------------------------- 1 | 2 | 12 | 22 | -------------------------------------------------------------------------------- /src/app/components/sidebar/sidebar.component.spec.ts: -------------------------------------------------------------------------------- 1 | import { async, ComponentFixture, TestBed } from '@angular/core/testing'; 2 | 3 | import { SidebarComponent } from './sidebar.component'; 4 | 5 | describe('SidebarComponent', () => { 6 | let component: SidebarComponent; 7 | let fixture: ComponentFixture; 8 | 9 | beforeEach(async(() => { 10 | TestBed.configureTestingModule({ 11 | declarations: [ SidebarComponent ] 12 | }) 13 | .compileComponents(); 14 | })); 15 | 16 | beforeEach(() => { 17 | fixture = TestBed.createComponent(SidebarComponent); 18 | component = fixture.componentInstance; 19 | fixture.detectChanges(); 20 | }); 21 | 22 | it('should create', () => { 23 | expect(component).toBeTruthy(); 24 | }); 25 | }); 26 | -------------------------------------------------------------------------------- /src/app/components/sidebar/sidebar.component.ts: -------------------------------------------------------------------------------- 1 | import { Component, OnInit } from '@angular/core'; 2 | 3 | declare interface RouteInfo { 4 | path: string; 5 | title: string; 6 | icon: string; 7 | class: string; 8 | } 9 | export const ROUTES: RouteInfo[] = [ 10 | { path: '/dashboard', title: 'Dashboard', icon: 'design_app', class: '' }, 11 | { path: '/icons', title: 'Icons', icon:'education_atom', class: '' }, 12 | { path: '/maps', title: 'Maps', icon:'location_map-big', class: '' }, 13 | { path: '/notifications', title: 'Notifications', icon:'ui-1_bell-53', class: '' }, 14 | 15 | { path: '/user-profile', title: 'User Profile', icon:'users_single-02', class: '' }, 16 | { path: '/table-list', title: 'Table List', icon:'design_bullet-list-67', class: '' }, 17 | { path: '/typography', title: 'Typography', icon:'text_caps-small', class: '' }, 18 | { path: '/upgrade', title: 'Upgrade to PRO', icon:'objects_spaceship', class: 'active active-pro' } 19 | 20 | ]; 21 | 22 | @Component({ 23 | selector: 'app-sidebar', 24 | templateUrl: './sidebar.component.html', 25 | styleUrls: ['./sidebar.component.css'] 26 | }) 27 | export class SidebarComponent implements OnInit { 28 | menuItems: any[]; 29 | 30 | constructor() { } 31 | 32 | ngOnInit() { 33 | this.menuItems = ROUTES.filter(menuItem => menuItem); 34 | } 35 | isMobileMenu() { 36 | if ( window.innerWidth > 991) { 37 | return false; 38 | } 39 | return true; 40 | }; 41 | } 42 | -------------------------------------------------------------------------------- /src/app/dashboard/dashboard.component.css: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/creativetimofficial/now-ui-dashboard-angular/267e394311c33006317423a92e2ec935df506259/src/app/dashboard/dashboard.component.css -------------------------------------------------------------------------------- /src/app/dashboard/dashboard.component.spec.ts: -------------------------------------------------------------------------------- 1 | import { async, ComponentFixture, TestBed } from '@angular/core/testing'; 2 | 3 | import { DashboardComponent } from './dashboard.component'; 4 | 5 | describe('DashboardComponent', () => { 6 | let component: DashboardComponent; 7 | let fixture: ComponentFixture; 8 | 9 | beforeEach(async(() => { 10 | TestBed.configureTestingModule({ 11 | declarations: [ DashboardComponent ] 12 | }) 13 | .compileComponents(); 14 | })); 15 | 16 | beforeEach(() => { 17 | fixture = TestBed.createComponent(DashboardComponent); 18 | component = fixture.componentInstance; 19 | fixture.detectChanges(); 20 | }); 21 | 22 | it('should create', () => { 23 | expect(component).toBeTruthy(); 24 | }); 25 | }); 26 | -------------------------------------------------------------------------------- /src/app/icons/icons.component.css: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/creativetimofficial/now-ui-dashboard-angular/267e394311c33006317423a92e2ec935df506259/src/app/icons/icons.component.css -------------------------------------------------------------------------------- /src/app/icons/icons.component.spec.ts: -------------------------------------------------------------------------------- 1 | import { async, ComponentFixture, TestBed } from '@angular/core/testing'; 2 | 3 | import { IconsComponent } from './icons.component'; 4 | 5 | describe('IconsComponent', () => { 6 | let component: IconsComponent; 7 | let fixture: ComponentFixture; 8 | 9 | beforeEach(async(() => { 10 | TestBed.configureTestingModule({ 11 | declarations: [ IconsComponent ] 12 | }) 13 | .compileComponents(); 14 | })); 15 | 16 | beforeEach(() => { 17 | fixture = TestBed.createComponent(IconsComponent); 18 | component = fixture.componentInstance; 19 | fixture.detectChanges(); 20 | }); 21 | 22 | it('should create', () => { 23 | expect(component).toBeTruthy(); 24 | }); 25 | }); 26 | -------------------------------------------------------------------------------- /src/app/icons/icons.component.ts: -------------------------------------------------------------------------------- 1 | import { Component, OnInit } from '@angular/core'; 2 | 3 | @Component({ 4 | selector: 'app-icons', 5 | templateUrl: './icons.component.html', 6 | styleUrls: ['./icons.component.css'] 7 | }) 8 | export class IconsComponent implements OnInit { 9 | 10 | constructor() { } 11 | 12 | ngOnInit() { 13 | } 14 | 15 | } 16 | -------------------------------------------------------------------------------- /src/app/layouts/admin-layout/admin-layout.component.html: -------------------------------------------------------------------------------- 1 |
2 | 5 |
6 | 7 | 8 | 9 |
10 |
11 | -------------------------------------------------------------------------------- /src/app/layouts/admin-layout/admin-layout.component.scss: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/creativetimofficial/now-ui-dashboard-angular/267e394311c33006317423a92e2ec935df506259/src/app/layouts/admin-layout/admin-layout.component.scss -------------------------------------------------------------------------------- /src/app/layouts/admin-layout/admin-layout.component.spec.ts: -------------------------------------------------------------------------------- 1 | import { async, ComponentFixture, TestBed } from '@angular/core/testing'; 2 | 3 | import { AdminLayoutComponent } from './admin-layout.component'; 4 | 5 | describe('AdminLayoutComponent', () => { 6 | let component: AdminLayoutComponent; 7 | let fixture: ComponentFixture; 8 | 9 | beforeEach(async(() => { 10 | TestBed.configureTestingModule({ 11 | declarations: [ AdminLayoutComponent ] 12 | }) 13 | .compileComponents(); 14 | })); 15 | 16 | beforeEach(() => { 17 | fixture = TestBed.createComponent(AdminLayoutComponent); 18 | component = fixture.componentInstance; 19 | fixture.detectChanges(); 20 | }); 21 | 22 | it('should create', () => { 23 | expect(component).toBeTruthy(); 24 | }); 25 | }); 26 | -------------------------------------------------------------------------------- /src/app/layouts/admin-layout/admin-layout.component.ts: -------------------------------------------------------------------------------- 1 | import {filter} from 'rxjs/operators'; 2 | import { Component, OnInit, ViewChild, AfterViewInit } from '@angular/core'; 3 | import { Location, LocationStrategy, PathLocationStrategy, PopStateEvent } from '@angular/common'; 4 | 5 | import { NavbarComponent } from '../../components/navbar/navbar.component'; 6 | import { Router, NavigationEnd, NavigationStart } from '@angular/router'; 7 | import { Subscription , Observable } from 'rxjs'; 8 | import PerfectScrollbar from 'perfect-scrollbar'; 9 | 10 | @Component({ 11 | selector: 'app-admin-layout', 12 | templateUrl: './admin-layout.component.html', 13 | styleUrls: ['./admin-layout.component.scss'] 14 | }) 15 | export class AdminLayoutComponent implements OnInit { 16 | private _router: Subscription; 17 | private lastPoppedUrl: string; 18 | private yScrollStack: number[] = []; 19 | 20 | constructor( public location: Location, private router: Router) {} 21 | 22 | ngOnInit() { 23 | const isWindows = navigator.platform.indexOf('Win') > -1 ? true : false; 24 | 25 | if (isWindows && !document.getElementsByTagName('body')[0].classList.contains('sidebar-mini')) { 26 | // if we are on windows OS we activate the perfectScrollbar function 27 | 28 | document.getElementsByTagName('body')[0].classList.add('perfect-scrollbar-on'); 29 | } else { 30 | document.getElementsByTagName('body')[0].classList.remove('perfect-scrollbar-off'); 31 | } 32 | const elemMainPanel = document.querySelector('.main-panel'); 33 | const elemSidebar = document.querySelector('.sidebar .sidebar-wrapper'); 34 | 35 | this.location.subscribe((ev:PopStateEvent) => { 36 | this.lastPoppedUrl = ev.url; 37 | }); 38 | this.router.events.subscribe((event:any) => { 39 | if (event instanceof NavigationStart) { 40 | if (event.url != this.lastPoppedUrl) 41 | this.yScrollStack.push(window.scrollY); 42 | } else if (event instanceof NavigationEnd) { 43 | if (event.url == this.lastPoppedUrl) { 44 | this.lastPoppedUrl = undefined; 45 | window.scrollTo(0, this.yScrollStack.pop()); 46 | } else 47 | window.scrollTo(0, 0); 48 | } 49 | }); 50 | this._router = this.router.events.pipe(filter(event => event instanceof NavigationEnd)).subscribe((event: NavigationEnd) => { 51 | elemMainPanel.scrollTop = 0; 52 | elemSidebar.scrollTop = 0; 53 | }); 54 | if (window.matchMedia(`(min-width: 960px)`).matches && !this.isMac()) { 55 | let ps = new PerfectScrollbar(elemMainPanel); 56 | ps = new PerfectScrollbar(elemSidebar); 57 | } 58 | } 59 | ngAfterViewInit() { 60 | this.runOnRouteChange(); 61 | } 62 | isMaps(path){ 63 | var titlee = this.location.prepareExternalUrl(this.location.path()); 64 | titlee = titlee.slice( 1 ); 65 | if(path == titlee){ 66 | return false; 67 | } 68 | else { 69 | return true; 70 | } 71 | } 72 | runOnRouteChange(): void { 73 | if (window.matchMedia(`(min-width: 960px)`).matches && !this.isMac()) { 74 | const elemMainPanel = document.querySelector('.main-panel'); 75 | const ps = new PerfectScrollbar(elemMainPanel); 76 | ps.update(); 77 | } 78 | } 79 | isMac(): boolean { 80 | let bool = false; 81 | if (navigator.platform.toUpperCase().indexOf('MAC') >= 0 || navigator.platform.toUpperCase().indexOf('IPAD') >= 0) { 82 | bool = true; 83 | } 84 | return bool; 85 | } 86 | 87 | } 88 | -------------------------------------------------------------------------------- /src/app/layouts/admin-layout/admin-layout.module.ts: -------------------------------------------------------------------------------- 1 | import { NgModule } from '@angular/core'; 2 | import { RouterModule } from '@angular/router'; 3 | import { CommonModule } from '@angular/common'; 4 | import { FormsModule, ReactiveFormsModule } from '@angular/forms'; 5 | import { AdminLayoutRoutes } from './admin-layout.routing'; 6 | import { DashboardComponent } from '../../dashboard/dashboard.component'; 7 | import { UserProfileComponent } from '../../user-profile/user-profile.component'; 8 | import { TableListComponent } from '../../table-list/table-list.component'; 9 | import { TypographyComponent } from '../../typography/typography.component'; 10 | import { IconsComponent } from '../../icons/icons.component'; 11 | import { MapsComponent } from '../../maps/maps.component'; 12 | import { NotificationsComponent } from '../../notifications/notifications.component'; 13 | import { ChartsModule } from 'ng2-charts'; 14 | import { NgbModule } from '@ng-bootstrap/ng-bootstrap'; 15 | import { ToastrModule } from 'ngx-toastr'; 16 | import { UpgradeComponent } from '../../upgrade/upgrade.component'; 17 | 18 | @NgModule({ 19 | imports: [ 20 | CommonModule, 21 | RouterModule.forChild(AdminLayoutRoutes), 22 | FormsModule, 23 | ChartsModule, 24 | NgbModule, 25 | ToastrModule.forRoot() 26 | ], 27 | declarations: [ 28 | DashboardComponent, 29 | UserProfileComponent, 30 | TableListComponent, 31 | UpgradeComponent, 32 | TypographyComponent, 33 | IconsComponent, 34 | MapsComponent, 35 | NotificationsComponent, 36 | ] 37 | }) 38 | 39 | export class AdminLayoutModule {} 40 | -------------------------------------------------------------------------------- /src/app/layouts/admin-layout/admin-layout.routing.ts: -------------------------------------------------------------------------------- 1 | import { Routes } from '@angular/router'; 2 | 3 | import { DashboardComponent } from '../../dashboard/dashboard.component'; 4 | import { UserProfileComponent } from '../../user-profile/user-profile.component'; 5 | import { TableListComponent } from '../../table-list/table-list.component'; 6 | import { TypographyComponent } from '../../typography/typography.component'; 7 | import { IconsComponent } from '../../icons/icons.component'; 8 | import { MapsComponent } from '../../maps/maps.component'; 9 | import { NotificationsComponent } from '../../notifications/notifications.component'; 10 | import { UpgradeComponent } from '../../upgrade/upgrade.component'; 11 | 12 | export const AdminLayoutRoutes: Routes = [ 13 | { path: 'dashboard', component: DashboardComponent }, 14 | { path: 'user-profile', component: UserProfileComponent }, 15 | { path: 'table-list', component: TableListComponent }, 16 | { path: 'typography', component: TypographyComponent }, 17 | { path: 'icons', component: IconsComponent }, 18 | { path: 'maps', component: MapsComponent }, 19 | { path: 'notifications', component: NotificationsComponent }, 20 | { path: 'upgrade', component: UpgradeComponent } 21 | ]; 22 | -------------------------------------------------------------------------------- /src/app/maps/maps.component.css: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/creativetimofficial/now-ui-dashboard-angular/267e394311c33006317423a92e2ec935df506259/src/app/maps/maps.component.css -------------------------------------------------------------------------------- /src/app/maps/maps.component.html: -------------------------------------------------------------------------------- 1 |
2 |
3 |
4 |
5 |
6 |
7 |
8 | Google Maps 9 |
10 |
11 |
12 |
13 |
14 |
15 |
16 |
17 | -------------------------------------------------------------------------------- /src/app/maps/maps.component.spec.ts: -------------------------------------------------------------------------------- 1 | import { async, ComponentFixture, TestBed } from '@angular/core/testing'; 2 | 3 | import { MapsComponent } from './maps.component'; 4 | 5 | describe('MapsComponent', () => { 6 | let component: MapsComponent; 7 | let fixture: ComponentFixture; 8 | 9 | beforeEach(async(() => { 10 | TestBed.configureTestingModule({ 11 | declarations: [ MapsComponent ] 12 | }) 13 | .compileComponents(); 14 | })); 15 | 16 | beforeEach(() => { 17 | fixture = TestBed.createComponent(MapsComponent); 18 | component = fixture.componentInstance; 19 | fixture.detectChanges(); 20 | }); 21 | 22 | it('should create', () => { 23 | expect(component).toBeTruthy(); 24 | }); 25 | }); 26 | -------------------------------------------------------------------------------- /src/app/maps/maps.component.ts: -------------------------------------------------------------------------------- 1 | import { Component, OnInit } from '@angular/core'; 2 | 3 | declare const google: any; 4 | 5 | interface Marker { 6 | lat: number; 7 | lng: number; 8 | label?: string; 9 | draggable?: boolean; 10 | } 11 | @Component({ 12 | selector: 'app-maps', 13 | templateUrl: './maps.component.html', 14 | styleUrls: ['./maps.component.css'] 15 | }) 16 | export class MapsComponent implements OnInit { 17 | 18 | constructor() { } 19 | 20 | ngOnInit() { 21 | 22 | var myLatlng = new google.maps.LatLng(40.748817, -73.985428); 23 | var mapOptions = { 24 | zoom: 13, 25 | center: myLatlng, 26 | scrollwheel: false, //we disable de scroll over the map, it is a really annoing when you scroll through page 27 | styles: [{ 28 | "featureType": "water", 29 | "stylers": [{ 30 | "saturation": 43 31 | }, { 32 | "lightness": -11 33 | }, { 34 | "hue": "#0088ff" 35 | }] 36 | }, { 37 | "featureType": "road", 38 | "elementType": "geometry.fill", 39 | "stylers": [{ 40 | "hue": "#ff0000" 41 | }, { 42 | "saturation": -100 43 | }, { 44 | "lightness": 99 45 | }] 46 | }, { 47 | "featureType": "road", 48 | "elementType": "geometry.stroke", 49 | "stylers": [{ 50 | "color": "#808080" 51 | }, { 52 | "lightness": 54 53 | }] 54 | }, { 55 | "featureType": "landscape.man_made", 56 | "elementType": "geometry.fill", 57 | "stylers": [{ 58 | "color": "#ece2d9" 59 | }] 60 | }, { 61 | "featureType": "poi.park", 62 | "elementType": "geometry.fill", 63 | "stylers": [{ 64 | "color": "#ccdca1" 65 | }] 66 | }, { 67 | "featureType": "road", 68 | "elementType": "labels.text.fill", 69 | "stylers": [{ 70 | "color": "#767676" 71 | }] 72 | }, { 73 | "featureType": "road", 74 | "elementType": "labels.text.stroke", 75 | "stylers": [{ 76 | "color": "#ffffff" 77 | }] 78 | }, { 79 | "featureType": "poi", 80 | "stylers": [{ 81 | "visibility": "off" 82 | }] 83 | }, { 84 | "featureType": "landscape.natural", 85 | "elementType": "geometry.fill", 86 | "stylers": [{ 87 | "visibility": "on" 88 | }, { 89 | "color": "#b8cb93" 90 | }] 91 | }, { 92 | "featureType": "poi.park", 93 | "stylers": [{ 94 | "visibility": "on" 95 | }] 96 | }, { 97 | "featureType": "poi.sports_complex", 98 | "stylers": [{ 99 | "visibility": "on" 100 | }] 101 | }, { 102 | "featureType": "poi.medical", 103 | "stylers": [{ 104 | "visibility": "on" 105 | }] 106 | }, { 107 | "featureType": "poi.business", 108 | "stylers": [{ 109 | "visibility": "simplified" 110 | }] 111 | }] 112 | 113 | }; 114 | var map = new google.maps.Map(document.getElementById("map"), mapOptions); 115 | 116 | var marker = new google.maps.Marker({ 117 | position: myLatlng, 118 | title: "Hello World!" 119 | }); 120 | 121 | // To add the marker to the map, call setMap(); 122 | marker.setMap(map); 123 | } 124 | 125 | } 126 | -------------------------------------------------------------------------------- /src/app/notifications/notifications.component.css: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/creativetimofficial/now-ui-dashboard-angular/267e394311c33006317423a92e2ec935df506259/src/app/notifications/notifications.component.css -------------------------------------------------------------------------------- /src/app/notifications/notifications.component.html: -------------------------------------------------------------------------------- 1 |
2 |
3 |

Notifications

4 |

Please checkout the 5 | full documentation. 6 |

7 |
8 |
9 |
10 |
11 |
12 |
13 |
14 |

Notifications Style

15 |
16 |
17 |
18 | This is a plain notification 19 |
20 |
21 | 24 | This is a notification with close button. 25 |
26 |
27 | 30 | 31 | This is a notification with close button and icon. 32 |
33 |
34 | 37 | 38 | This is a notification with close button and icon and have many lines. You can see that the icon and the close button are always vertically aligned. This is a beautiful notification. So you don't have to worry about the style. 39 |
40 |
41 |
42 |
43 |
44 |
45 |
46 |

Notification states

47 |
48 |
49 |
50 | 53 | 54 | Primary - This is a regular notification made with ".alert-primary" 55 |
56 |
57 | 60 | 61 | Info - This is a regular notification made with ".alert-info" 62 |
63 |
64 | 67 | 68 | Success - This is a regular notification made with ".alert-success" 69 |
70 |
71 | 74 | 75 | Warning - This is a regular notification made with ".alert-warning" 76 |
77 |
78 | 81 | 82 | Danger - This is a regular notification made with ".alert-danger" 83 |
84 |
85 |
86 |
87 |
88 |
89 |
90 |
91 |
92 |
93 |

94 | Notifications Places 95 |

Click to view notifications

96 |

97 |
98 |
99 |
100 |
101 |
102 |
103 | 104 |
105 |
106 | 107 |
108 |
109 | 110 |
111 |
112 |
113 |
114 |
115 |
116 |
117 |
118 | 119 |
120 |
121 | 122 |
123 |
124 | 125 |
126 |
127 |
128 |
129 |
130 |
131 |
132 |
133 |
134 |
135 | -------------------------------------------------------------------------------- /src/app/notifications/notifications.component.spec.ts: -------------------------------------------------------------------------------- 1 | import { async, ComponentFixture, TestBed } from '@angular/core/testing'; 2 | 3 | import { NotificationsComponent } from './notifications.component'; 4 | 5 | describe('NotificationsComponent', () => { 6 | let component: NotificationsComponent; 7 | let fixture: ComponentFixture; 8 | 9 | beforeEach(async(() => { 10 | TestBed.configureTestingModule({ 11 | declarations: [ NotificationsComponent ] 12 | }) 13 | .compileComponents(); 14 | })); 15 | 16 | beforeEach(() => { 17 | fixture = TestBed.createComponent(NotificationsComponent); 18 | component = fixture.componentInstance; 19 | fixture.detectChanges(); 20 | }); 21 | 22 | it('should create', () => { 23 | expect(component).toBeTruthy(); 24 | }); 25 | }); 26 | -------------------------------------------------------------------------------- /src/app/notifications/notifications.component.ts: -------------------------------------------------------------------------------- 1 | import { Component, OnInit } from '@angular/core'; 2 | import { ToastrService } from 'ngx-toastr'; 3 | 4 | @Component({ 5 | selector: 'app-notifications', 6 | templateUrl: './notifications.component.html', 7 | styleUrls: ['./notifications.component.css'] 8 | }) 9 | export class NotificationsComponent implements OnInit { 10 | 11 | constructor(private toastr: ToastrService) {} 12 | showNotification(from, align){ 13 | 14 | const color = Math.floor((Math.random() * 5) + 1); 15 | 16 | switch(color){ 17 | case 1: 18 | this.toastr.info(' Welcome to Now Ui Dashboard - a beautiful freebie for every web developer.', '', { 19 | timeOut: 8000, 20 | closeButton: true, 21 | enableHtml: true, 22 | toastClass: "alert alert-info alert-with-icon", 23 | positionClass: 'toast-' + from + '-' + align 24 | }); 25 | break; 26 | case 2: 27 | this.toastr.success(' Welcome to Now Ui Dashboard - a beautiful freebie for every web developer.', '', { 28 | timeOut: 8000, 29 | closeButton: true, 30 | enableHtml: true, 31 | toastClass: "alert alert-success alert-with-icon", 32 | positionClass: 'toast-' + from + '-' + align 33 | }); 34 | break; 35 | case 3: 36 | this.toastr.warning(' Welcome to Now Ui Dashboard - a beautiful freebie for every web developer.', '', { 37 | timeOut: 8000, 38 | closeButton: true, 39 | enableHtml: true, 40 | toastClass: "alert alert-warning alert-with-icon", 41 | positionClass: 'toast-' + from + '-' + align 42 | }); 43 | break; 44 | case 4: 45 | this.toastr.error(' Welcome to Now Ui Dashboard - a beautiful freebie for every web developer.', '', { 46 | timeOut: 8000, 47 | enableHtml: true, 48 | closeButton: true, 49 | toastClass: "alert alert-danger alert-with-icon", 50 | positionClass: 'toast-' + from + '-' + align 51 | }); 52 | break; 53 | case 5: 54 | this.toastr.show(' Welcome to Now Ui Dashboard - a beautiful freebie for every web developer.', '', { 55 | timeOut: 8000, 56 | closeButton: true, 57 | enableHtml: true, 58 | toastClass: "alert alert-primary alert-with-icon", 59 | positionClass: 'toast-' + from + '-' + align 60 | }); 61 | break; 62 | default: 63 | break; 64 | } 65 | } 66 | ngOnInit() { 67 | } 68 | 69 | } 70 | -------------------------------------------------------------------------------- /src/app/table-list/table-list.component.css: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/creativetimofficial/now-ui-dashboard-angular/267e394311c33006317423a92e2ec935df506259/src/app/table-list/table-list.component.css -------------------------------------------------------------------------------- /src/app/table-list/table-list.component.html: -------------------------------------------------------------------------------- 1 |
2 |
3 |
4 |
5 |
6 |
7 |
8 |

Simple Table

9 |
10 |
11 |
12 | 13 | 14 | 17 | 20 | 23 | 26 | 27 | 28 | 29 | 32 | 35 | 38 | 41 | 42 | 43 | 46 | 49 | 52 | 55 | 56 | 57 | 60 | 63 | 66 | 69 | 70 | 71 | 74 | 77 | 80 | 83 | 84 | 85 | 88 | 91 | 94 | 97 | 98 | 99 | 102 | 105 | 108 | 111 | 112 | 113 | 116 | 119 | 122 | 125 | 126 | 127 |
15 | Name 16 | 18 | Country 19 | 21 | City 22 | 24 | Salary 25 |
30 | Dakota Rice 31 | 33 | Niger 34 | 36 | Oud-Turnhout 37 | 39 | $36,738 40 |
44 | Minerva Hooper 45 | 47 | Curaçao 48 | 50 | Sinaai-Waas 51 | 53 | $23,789 54 |
58 | Sage Rodriguez 59 | 61 | Netherlands 62 | 64 | Baileux 65 | 67 | $56,142 68 |
72 | Philip Chaney 73 | 75 | Korea, South 76 | 78 | Overland Park 79 | 81 | $38,735 82 |
86 | Doris Greene 87 | 89 | Malawi 90 | 92 | Feldkirchen in Kärnten 93 | 95 | $63,542 96 |
100 | Mason Porter 101 | 103 | Chile 104 | 106 | Gloucester 107 | 109 | $78,615 110 |
114 | Jon Porter 115 | 117 | Portugal 118 | 120 | Gloucester 121 | 123 | $98,615 124 |
128 |
129 |
130 |
131 |
132 |
133 |
134 |
135 |

Table on Plain Background

136 |

Here is a subtitle for this table

137 |
138 |
139 |
140 | 141 | 142 | 145 | 148 | 151 | 154 | 155 | 156 | 157 | 160 | 163 | 166 | 169 | 170 | 171 | 174 | 177 | 180 | 183 | 184 | 185 | 188 | 191 | 194 | 197 | 198 | 199 | 202 | 205 | 208 | 211 | 212 | 213 | 216 | 219 | 222 | 225 | 226 | 227 | 230 | 233 | 236 | 239 | 240 | 241 | 244 | 247 | 250 | 253 | 254 | 255 |
143 | Name 144 | 146 | Country 147 | 149 | City 150 | 152 | Salary 153 |
158 | Dakota Rice 159 | 161 | Niger 162 | 164 | Oud-Turnhout 165 | 167 | $36,738 168 |
172 | Minerva Hooper 173 | 175 | Curaçao 176 | 178 | Sinaai-Waas 179 | 181 | $23,789 182 |
186 | Sage Rodriguez 187 | 189 | Netherlands 190 | 192 | Baileux 193 | 195 | $56,142 196 |
200 | Philip Chaney 201 | 203 | Korea, South 204 | 206 | Overland Park 207 | 209 | $38,735 210 |
214 | Doris Greene 215 | 217 | Malawi 218 | 220 | Feldkirchen in Kärnten 221 | 223 | $63,542 224 |
228 | Mason Porter 229 | 231 | Chile 232 | 234 | Gloucester 235 | 237 | $78,615 238 |
242 | Jon Porter 243 | 245 | Portugal 246 | 248 | Gloucester 249 | 251 | $98,615 252 |
256 |
257 |
258 |
259 |
260 |
261 |
262 | -------------------------------------------------------------------------------- /src/app/table-list/table-list.component.spec.ts: -------------------------------------------------------------------------------- 1 | import { async, ComponentFixture, TestBed } from '@angular/core/testing'; 2 | 3 | import { TableListComponent } from './table-list.component'; 4 | 5 | describe('TableListComponent', () => { 6 | let component: TableListComponent; 7 | let fixture: ComponentFixture; 8 | 9 | beforeEach(async(() => { 10 | TestBed.configureTestingModule({ 11 | declarations: [ TableListComponent ] 12 | }) 13 | .compileComponents(); 14 | })); 15 | 16 | beforeEach(() => { 17 | fixture = TestBed.createComponent(TableListComponent); 18 | component = fixture.componentInstance; 19 | fixture.detectChanges(); 20 | }); 21 | 22 | it('should create', () => { 23 | expect(component).toBeTruthy(); 24 | }); 25 | }); 26 | -------------------------------------------------------------------------------- /src/app/table-list/table-list.component.ts: -------------------------------------------------------------------------------- 1 | import { Component, OnInit } from '@angular/core'; 2 | 3 | @Component({ 4 | selector: 'app-table-list', 5 | templateUrl: './table-list.component.html', 6 | styleUrls: ['./table-list.component.css'] 7 | }) 8 | export class TableListComponent implements OnInit { 9 | 10 | constructor() { } 11 | 12 | ngOnInit() { 13 | } 14 | 15 | } 16 | -------------------------------------------------------------------------------- /src/app/typography/typography.component.css: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/creativetimofficial/now-ui-dashboard-angular/267e394311c33006317423a92e2ec935df506259/src/app/typography/typography.component.css -------------------------------------------------------------------------------- /src/app/typography/typography.component.html: -------------------------------------------------------------------------------- 1 |
2 |
3 |
4 |
5 |
6 |
7 |
8 |
Now Ui Table Heading
9 |

Created using Montserrat Font Family

10 |
11 |
12 |
13 |

14 | Header 1The Life of Now Ui Dashboard

15 |
16 |
17 |

18 | Header 2The Life of Now Ui Dashboard

19 |
20 |
21 |

22 | Header 3The Life of Now Ui Dashboard

23 |
24 |
25 |

26 | Header 4The Life of Now Ui Dashboard

27 |
28 |
29 |
30 | Header 5The Life of Now Ui Dashboard
31 |
32 |
33 |
34 | Header 6The Life of Now Ui Dashboard
35 |
36 |
37 |

38 | Paragraph 39 | I will be the leader of a company that ends up being worth billions of dollars, because I got the answers. I understand culture. I am the nucleus. I think that’s a responsibility that I have, to push possibilities, to show people, this is the level that things could be at. 40 |

41 |
42 |
43 | Quote 44 |
45 |

46 | "I will be the leader of a company that ends up being worth billions of dollars, because I got the answers. I understand culture. I am the nucleus. I think that’s a responsibility that I have, to push possibilities, to show people, this is the level that things could be at." 47 |
48 |
49 | 50 | - Noaa 51 | 52 |

53 |
54 |
55 |
56 | Muted Text 57 |

58 | I will be the leader of a company that ends up being worth billions of dollars, because I got the answers... 59 |

60 |
61 |
62 | Primary Text 63 |

64 | I will be the leader of a company that ends up being worth billions of dollars, because I got the answers...

65 |
66 |
67 | Info Text 68 |

69 | I will be the leader of a company that ends up being worth billions of dollars, because I got the answers...

70 |
71 |
72 | Success Text 73 |

74 | I will be the leader of a company that ends up being worth billions of dollars, because I got the answers...

75 |
76 |
77 | Warning Text 78 |

79 | I will be the leader of a company that ends up being worth billions of dollars, because I got the answers... 80 |

81 |
82 |
83 | Danger Text 84 |

85 | I will be the leader of a company that ends up being worth billions of dollars, because I got the answers...

86 |
87 |
88 |

89 | Small Tag 90 | Header with small subtitle 91 |
92 | Use "small" tag for the headers 93 |

94 |
95 |
96 |
97 |
98 |
99 |
100 | -------------------------------------------------------------------------------- /src/app/typography/typography.component.spec.ts: -------------------------------------------------------------------------------- 1 | import { async, ComponentFixture, TestBed } from '@angular/core/testing'; 2 | 3 | import { TypographyComponent } from './typography.component'; 4 | 5 | describe('TypographyComponent', () => { 6 | let component: TypographyComponent; 7 | let fixture: ComponentFixture; 8 | 9 | beforeEach(async(() => { 10 | TestBed.configureTestingModule({ 11 | declarations: [ TypographyComponent ] 12 | }) 13 | .compileComponents(); 14 | })); 15 | 16 | beforeEach(() => { 17 | fixture = TestBed.createComponent(TypographyComponent); 18 | component = fixture.componentInstance; 19 | fixture.detectChanges(); 20 | }); 21 | 22 | it('should create', () => { 23 | expect(component).toBeTruthy(); 24 | }); 25 | }); 26 | -------------------------------------------------------------------------------- /src/app/typography/typography.component.ts: -------------------------------------------------------------------------------- 1 | import { Component, OnInit } from '@angular/core'; 2 | 3 | @Component({ 4 | selector: 'app-typography', 5 | templateUrl: './typography.component.html', 6 | styleUrls: ['./typography.component.css'] 7 | }) 8 | export class TypographyComponent implements OnInit { 9 | 10 | constructor() { } 11 | 12 | ngOnInit() { 13 | } 14 | 15 | } 16 | -------------------------------------------------------------------------------- /src/app/upgrade/upgrade.component.html: -------------------------------------------------------------------------------- 1 |
2 |
3 |
4 |
5 |
6 |
7 |
8 |
Now UI Dashboard PRO Angular
9 |

Are you looking for more components? Please check our Premium Version of Now UI Dashboard PRO Angular.

10 |
11 |
12 |
13 | 14 | 15 | 16 | 17 | 18 | 19 | 20 | 21 | 22 | 23 | 24 | 25 | 26 | 27 | 28 | 29 | 30 | 31 | 32 | 33 | 34 | 35 | 36 | 37 | 38 | 39 | 40 | 41 | 42 | 43 | 44 | 45 | 46 | 47 | 48 | 49 | 50 | 51 | 52 | 53 | 54 | 55 | 56 | 57 | 58 | 59 | 60 | 61 | 62 | 63 | 64 | 65 | 66 | 67 | 70 | 73 | 74 | 75 |
FreePRO
Components16160
Plugins412
Example Pages727
Documentation
SASS Files
Mini Sidebar
Premium Support
Login, Register, Pricing, Lock Pages
FreeJust $59
68 | Current Version 69 | 71 | Upgrade to PRO 72 |
76 |
77 |
78 |
79 |
80 |
81 |
82 | -------------------------------------------------------------------------------- /src/app/upgrade/upgrade.component.scss: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/creativetimofficial/now-ui-dashboard-angular/267e394311c33006317423a92e2ec935df506259/src/app/upgrade/upgrade.component.scss -------------------------------------------------------------------------------- /src/app/upgrade/upgrade.component.spec.ts: -------------------------------------------------------------------------------- 1 | import { async, ComponentFixture, TestBed } from '@angular/core/testing'; 2 | 3 | import { UpgradeComponent } from './upgrade.component'; 4 | 5 | describe('UpgradeComponent', () => { 6 | let component: UpgradeComponent; 7 | let fixture: ComponentFixture; 8 | 9 | beforeEach(async(() => { 10 | TestBed.configureTestingModule({ 11 | declarations: [ UpgradeComponent ] 12 | }) 13 | .compileComponents(); 14 | })); 15 | 16 | beforeEach(() => { 17 | fixture = TestBed.createComponent(UpgradeComponent); 18 | component = fixture.componentInstance; 19 | fixture.detectChanges(); 20 | }); 21 | 22 | it('should create', () => { 23 | expect(component).toBeTruthy(); 24 | }); 25 | }); 26 | -------------------------------------------------------------------------------- /src/app/upgrade/upgrade.component.ts: -------------------------------------------------------------------------------- 1 | import { Component, OnInit } from '@angular/core'; 2 | 3 | @Component({ 4 | selector: 'app-upgrade', 5 | templateUrl: './upgrade.component.html', 6 | styleUrls: ['./upgrade.component.scss'] 7 | }) 8 | export class UpgradeComponent implements OnInit { 9 | 10 | constructor() { } 11 | 12 | ngOnInit() { 13 | } 14 | 15 | } 16 | -------------------------------------------------------------------------------- /src/app/user-profile/user-profile.component.css: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/creativetimofficial/now-ui-dashboard-angular/267e394311c33006317423a92e2ec935df506259/src/app/user-profile/user-profile.component.css -------------------------------------------------------------------------------- /src/app/user-profile/user-profile.component.html: -------------------------------------------------------------------------------- 1 |
2 |
3 |
4 |
5 |
6 |
7 |
8 |
Edit Profile
9 |
10 |
11 |
12 |
13 |
14 |
15 | 16 | 17 |
18 |
19 |
20 |
21 | 22 | 23 |
24 |
25 |
26 |
27 | 28 | 29 |
30 |
31 |
32 |
33 |
34 |
35 | 36 | 37 |
38 |
39 |
40 |
41 | 42 | 43 |
44 |
45 |
46 |
47 |
48 |
49 | 50 | 51 |
52 |
53 |
54 |
55 |
56 |
57 | 58 | 59 |
60 |
61 |
62 |
63 | 64 | 65 |
66 |
67 |
68 |
69 | 70 | 71 |
72 |
73 |
74 |
75 |
76 |
77 | 78 | 79 |
80 |
81 |
82 |
83 |
84 |
85 |
86 |
87 |
88 |
89 | ... 90 |
91 |
92 |
93 | 94 | ... 95 |
Mike Andrew
96 |
97 |

98 | michael24 99 |

100 |
101 |

102 | "Lamborghini Mercy 103 |
Your chick she so thirsty 104 |
I'm in that two seat Lambo" 105 |

106 |
107 |
108 |
109 | 112 | 115 | 118 |
119 |
120 |
121 |
122 |
123 | -------------------------------------------------------------------------------- /src/app/user-profile/user-profile.component.spec.ts: -------------------------------------------------------------------------------- 1 | import { async, ComponentFixture, TestBed } from '@angular/core/testing'; 2 | 3 | import { UserProfileComponent } from './user-profile.component'; 4 | 5 | describe('UserProfileComponent', () => { 6 | let component: UserProfileComponent; 7 | let fixture: ComponentFixture; 8 | 9 | beforeEach(async(() => { 10 | TestBed.configureTestingModule({ 11 | declarations: [ UserProfileComponent ] 12 | }) 13 | .compileComponents(); 14 | })); 15 | 16 | beforeEach(() => { 17 | fixture = TestBed.createComponent(UserProfileComponent); 18 | component = fixture.componentInstance; 19 | fixture.detectChanges(); 20 | }); 21 | 22 | it('should create', () => { 23 | expect(component).toBeTruthy(); 24 | }); 25 | }); 26 | -------------------------------------------------------------------------------- /src/app/user-profile/user-profile.component.ts: -------------------------------------------------------------------------------- 1 | import { Component, OnInit } from '@angular/core'; 2 | 3 | @Component({ 4 | selector: 'app-user-profile', 5 | templateUrl: './user-profile.component.html', 6 | styleUrls: ['./user-profile.component.css'] 7 | }) 8 | export class UserProfileComponent implements OnInit { 9 | 10 | constructor() { } 11 | 12 | ngOnInit() { 13 | } 14 | 15 | } 16 | -------------------------------------------------------------------------------- /src/assets/demo/demo.css: -------------------------------------------------------------------------------- 1 | /*! 2 | 3 | ========================================================= 4 | * Now UI Dashboard Angular - v1.4.0 5 | ========================================================= 6 | 7 | * Product Page: https://www.creative-tim.com/product/now-ui-dashboard-angular 8 | * Copyright 2020 Creative Tim (https://www.creative-tim.com) 9 | * Licensed under MIT (https://github.com/creativetimofficial/now-ui-dashboard-angular/blob/master/LICENSE.md) 10 | 11 | * Coded by Creative Tim 12 | 13 | ========================================================= 14 | 15 | * The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software. 16 | 17 | */ 18 | .tim-row{ 19 | margin-bottom: 20px; 20 | } 21 | 22 | .tim-white-buttons { 23 | background-color: #777777; 24 | } 25 | .typography-line{ 26 | padding-left: 25%; 27 | margin-bottom: 35px; 28 | position: relative; 29 | display: block; 30 | width: 100%; 31 | } 32 | .typography-line span{ 33 | bottom: 10px; 34 | color: #c0c1c2; 35 | display: block; 36 | font-weight: 400; 37 | font-size: 13px; 38 | line-height: 13px; 39 | left: 0; 40 | position: absolute; 41 | width: 260px; 42 | text-transform: none; 43 | } 44 | .tim-row{ 45 | padding-top: 60px; 46 | } 47 | .tim-row h3{ 48 | margin-top: 0; 49 | } 50 | 51 | .offline-doc .page-header{ 52 | display: flex; 53 | align-items: center; 54 | } 55 | 56 | .offline-doc .footer{ 57 | position: absolute; 58 | width: 100%; 59 | background: transparent; 60 | bottom: 0; 61 | color: #fff; 62 | z-index: 1; 63 | } 64 | 65 | @media all and (min-width: 992px) { 66 | .sidebar .nav>li.active-pro { 67 | position: absolute; 68 | width: 100%; 69 | bottom: 10px; 70 | } 71 | } 72 | 73 | .card.card-upgrade .card-category{ 74 | max-width: 530px; 75 | margin: 0 auto; 76 | } 77 | -------------------------------------------------------------------------------- /src/assets/fonts/nucleo-outline.eot: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/creativetimofficial/now-ui-dashboard-angular/267e394311c33006317423a92e2ec935df506259/src/assets/fonts/nucleo-outline.eot -------------------------------------------------------------------------------- /src/assets/fonts/nucleo-outline.ttf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/creativetimofficial/now-ui-dashboard-angular/267e394311c33006317423a92e2ec935df506259/src/assets/fonts/nucleo-outline.ttf -------------------------------------------------------------------------------- /src/assets/fonts/nucleo-outline.woff: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/creativetimofficial/now-ui-dashboard-angular/267e394311c33006317423a92e2ec935df506259/src/assets/fonts/nucleo-outline.woff -------------------------------------------------------------------------------- /src/assets/fonts/nucleo-outline.woff2: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/creativetimofficial/now-ui-dashboard-angular/267e394311c33006317423a92e2ec935df506259/src/assets/fonts/nucleo-outline.woff2 -------------------------------------------------------------------------------- /src/assets/img/angular2-logo-red.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/creativetimofficial/now-ui-dashboard-angular/267e394311c33006317423a92e2ec935df506259/src/assets/img/angular2-logo-red.png -------------------------------------------------------------------------------- /src/assets/img/angular2-logo-white.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/creativetimofficial/now-ui-dashboard-angular/267e394311c33006317423a92e2ec935df506259/src/assets/img/angular2-logo-white.png -------------------------------------------------------------------------------- /src/assets/img/apple-icon.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/creativetimofficial/now-ui-dashboard-angular/267e394311c33006317423a92e2ec935df506259/src/assets/img/apple-icon.png -------------------------------------------------------------------------------- /src/assets/img/bg5.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/creativetimofficial/now-ui-dashboard-angular/267e394311c33006317423a92e2ec935df506259/src/assets/img/bg5.jpg -------------------------------------------------------------------------------- /src/assets/img/favicon.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/creativetimofficial/now-ui-dashboard-angular/267e394311c33006317423a92e2ec935df506259/src/assets/img/favicon.png -------------------------------------------------------------------------------- /src/assets/img/header.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/creativetimofficial/now-ui-dashboard-angular/267e394311c33006317423a92e2ec935df506259/src/assets/img/header.jpg -------------------------------------------------------------------------------- /src/assets/img/mike.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/creativetimofficial/now-ui-dashboard-angular/267e394311c33006317423a92e2ec935df506259/src/assets/img/mike.jpg -------------------------------------------------------------------------------- /src/assets/img/now-logo.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/creativetimofficial/now-ui-dashboard-angular/267e394311c33006317423a92e2ec935df506259/src/assets/img/now-logo.png -------------------------------------------------------------------------------- /src/assets/scss/now-ui-dashboard.scss: -------------------------------------------------------------------------------- 1 | /*! 2 | 3 | ========================================================= 4 | * Now UI Dashboard Angular - v1.4.0 5 | ========================================================= 6 | 7 | * Product Page: https://www.creative-tim.com/product/now-ui-dashboard-angular 8 | * Copyright 2020 Creative Tim (https://www.creative-tim.com) 9 | * Licensed under MIT (https://github.com/creativetimofficial/now-ui-dashboard-angular/blob/master/LICENSE.md) 10 | 11 | * Coded by Creative Tim 12 | 13 | ========================================================= 14 | 15 | * The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software. 16 | 17 | */ 18 | // @import "~bootstrap/scss/bootstrap"; 19 | @import 'now-ui-dashboard/variables'; 20 | @import 'now-ui-dashboard/mixins'; 21 | 22 | // Plugins CSS 23 | @import "now-ui-dashboard/plugins/plugin-animate-bootstrap-notify"; 24 | @import "now-ui-dashboard/plugins/plugin-perfect-scrollbar"; 25 | 26 | // Core CSS 27 | @import "now-ui-dashboard/buttons"; 28 | @import "now-ui-dashboard/inputs"; 29 | @import "now-ui-dashboard/typography"; 30 | @import "now-ui-dashboard/misc"; 31 | @import "now-ui-dashboard/checkboxes-radio"; 32 | 33 | // components 34 | @import "now-ui-dashboard/navbar"; 35 | @import "now-ui-dashboard/page-header"; 36 | @import "now-ui-dashboard/dropdown"; 37 | @import "now-ui-dashboard/alerts"; 38 | @import "now-ui-dashboard/images"; 39 | @import "now-ui-dashboard/nucleo-outline"; 40 | @import "now-ui-dashboard/tables"; 41 | @import "now-ui-dashboard/sidebar-and-main-panel"; 42 | @import "now-ui-dashboard/footers"; 43 | @import "now-ui-dashboard/fixed-plugin"; 44 | 45 | // cards 46 | @import "now-ui-dashboard/cards"; 47 | @import "now-ui-dashboard/cards/card-plain"; 48 | @import "now-ui-dashboard/cards/card-chart"; 49 | @import "now-ui-dashboard/cards/card-user"; 50 | @import "now-ui-dashboard/cards/card-map"; 51 | 52 | @import "now-ui-dashboard/responsive"; 53 | -------------------------------------------------------------------------------- /src/assets/scss/now-ui-dashboard/_alerts.scss: -------------------------------------------------------------------------------- 1 | .alert{ 2 | border: 0; 3 | border-radius: $border-radius-small; 4 | color: $white-color; 5 | padding-top: .9rem; 6 | padding-bottom: .9rem; 7 | position: relative; 8 | 9 | &.alert-success{ 10 | background-color: lighten($success-color, 5%); 11 | } 12 | 13 | &.alert-danger{ 14 | background-color: lighten($danger-color, 5%); 15 | } 16 | 17 | &.alert-warning{ 18 | background-color: lighten($warning-color, 5%); 19 | } 20 | 21 | &.alert-info{ 22 | background-color: lighten($info-color, 5%); 23 | } 24 | 25 | &.alert-primary{ 26 | background-color: lighten($primary-color, 5%); 27 | } 28 | 29 | 30 | i.fa, 31 | i.now-ui-icons{ 32 | font-size: 20px; 33 | } 34 | 35 | .close{ 36 | color: $white-color; 37 | opacity: .9; 38 | text-shadow: none; 39 | line-height: 0; 40 | outline: 0; 41 | } 42 | 43 | span[data-notify="icon"]{ 44 | font-size: 22px; 45 | display: block; 46 | left: 19px; 47 | position: absolute; 48 | top: 50%; 49 | margin-top: -11px; 50 | } 51 | 52 | button.close{ 53 | position: absolute; 54 | right: 10px; 55 | top: 50%; 56 | margin-top: -13px; 57 | width: 25px; 58 | height: 25px; 59 | padding: 3px; 60 | } 61 | 62 | .close ~ span{ 63 | display: block; 64 | max-width: 89%; 65 | } 66 | 67 | &.alert-with-icon{ 68 | padding-left: 65px; 69 | } 70 | } 71 | -------------------------------------------------------------------------------- /src/assets/scss/now-ui-dashboard/_buttons.scss: -------------------------------------------------------------------------------- 1 | .btn, 2 | .navbar .navbar-nav > a.btn{ 3 | border-width: $border-thick; 4 | font-weight: $font-weight-normal; 5 | font-size: $font-size-small; 6 | line-height: $line-height; 7 | border: none; 8 | margin:10px 1px; 9 | border-radius: $border-radius-small; 10 | padding: $padding-btn-vertical $padding-btn-horizontal; 11 | cursor: pointer; 12 | 13 | @include btn-styles($default-color, $default-states-color); 14 | 15 | &:hover, 16 | &:focus{ 17 | @include opacity(1); 18 | outline: 0 !important; 19 | } 20 | &:active, 21 | &.active, 22 | .open > &.dropdown-toggle { 23 | @include box-shadow(none); 24 | outline: 0 !important; 25 | } 26 | 27 | .badge{ 28 | margin: 0; 29 | } 30 | 31 | &.btn-icon { 32 | // see above for color variations 33 | height: $btn-icon-size-regular; 34 | min-width: $btn-icon-size-regular; 35 | width: $btn-icon-size-regular; 36 | padding: 0; 37 | font-size: $btn-icon-font-size-regular; 38 | overflow: hidden; 39 | position: relative; 40 | line-height: normal; 41 | 42 | &.btn-simple{ 43 | padding: 0; 44 | } 45 | 46 | &.btn-sm{ 47 | height: $btn-icon-size-small; 48 | min-width: $btn-icon-size-small; 49 | width: $btn-icon-size-small; 50 | 51 | .fa, 52 | .far, 53 | .fas, 54 | .now-ui-icons{ 55 | font-size: $btn-icon-font-size-small; 56 | } 57 | } 58 | 59 | &.btn-lg{ 60 | height: $btn-icon-size-lg; 61 | min-width: $btn-icon-size-lg; 62 | width: $btn-icon-size-lg; 63 | 64 | .fa, 65 | .far, 66 | .fas, 67 | .now-ui-icons{ 68 | font-size: $btn-icon-font-size-lg; 69 | } 70 | } 71 | 72 | &:not(.btn-footer) .now-ui-icons, 73 | &:not(.btn-footer) .fa, 74 | &:not(.btn-footer) .far, 75 | &:not(.btn-footer) .fas{ 76 | position: absolute; 77 | top: 50%; 78 | left: 50%; 79 | transform: translate(-12px, -12px); 80 | line-height: 1.5626rem; 81 | width: 24px; 82 | } 83 | 84 | } 85 | 86 | &:not(.btn-icon) .now-ui-icons{ 87 | position: relative; 88 | top: 1px; 89 | } 90 | } 91 | 92 | // Apply the mixin to the buttons 93 | // .btn-default { @include btn-styles($default-color, $default-states-color); } 94 | .btn-primary { @include btn-styles($primary-color, $primary-states-color); } 95 | .btn-success { @include btn-styles($success-color, $success-states-color); } 96 | .btn-info { @include btn-styles($info-color, $info-states-color); } 97 | .btn-warning { @include btn-styles($warning-color, $warning-states-color); } 98 | .btn-danger { @include btn-styles($danger-color, $danger-states-color); } 99 | .btn-neutral { @include btn-styles($white-color, $white-color); } 100 | 101 | .btn{ 102 | &:disabled, 103 | &[disabled], 104 | &.disabled{ 105 | @include opacity(.5); 106 | pointer-events: none; 107 | } 108 | } 109 | .btn-simple{ 110 | border: $border; 111 | border-color: $default-color; 112 | padding: $padding-btn-vertical - 1 $padding-round-horizontal - 1; 113 | background-color: $transparent-bg; 114 | } 115 | 116 | .btn-simple, 117 | .btn-link{ 118 | &.disabled, 119 | &:disabled, 120 | &[disabled], 121 | fieldset[disabled] & { 122 | &, 123 | &:hover, 124 | &:focus, 125 | &.focus, 126 | &:active, 127 | &.active { 128 | background-color: $transparent-bg; 129 | } 130 | } 131 | } 132 | 133 | .btn-link{ 134 | border: $none; 135 | padding: $padding-base-vertical $padding-base-horizontal; 136 | background-color: $transparent-bg; 137 | } 138 | 139 | .btn-lg{ 140 | @include btn-size($padding-large-vertical, $padding-large-horizontal, $font-size-large, $border-radius-large); 141 | } 142 | .btn-sm{ 143 | @include btn-size($padding-small-vertical, $padding-small-horizontal, $font-size-base, $border-radius-small); 144 | } 145 | 146 | .btn-wd { 147 | min-width: 140px; 148 | } 149 | .btn-group.select{ 150 | width: 100%; 151 | } 152 | .btn-group.select .btn{ 153 | text-align: left; 154 | } 155 | .btn-group.select .caret{ 156 | position: absolute; 157 | top: 50%; 158 | margin-top: -1px; 159 | right: 8px; 160 | } 161 | 162 | .btn-round{ 163 | border-width: $border-thin; 164 | border-radius: $btn-round-radius; 165 | padding-right: $padding-round-horizontal; 166 | padding-left: $padding-round-horizontal; 167 | 168 | &.btn-simple{ 169 | padding: $padding-btn-vertical - 1 $padding-round-horizontal - 1; 170 | } 171 | } 172 | 173 | .no-caret { 174 | &.dropdown-toggle::after { 175 | display: none; 176 | } 177 | } 178 | -------------------------------------------------------------------------------- /src/assets/scss/now-ui-dashboard/_cards.scss: -------------------------------------------------------------------------------- 1 | .card{ 2 | border: 0; 3 | border-radius: $border-radius-small; 4 | display: inline-block; 5 | position: relative; 6 | width: 100%; 7 | margin-bottom: 20px; 8 | box-shadow: $box-shadow; 9 | 10 | .card-body{ 11 | padding: 15px 15px 10px 15px; 12 | 13 | &.table-full-width{ 14 | padding-left: 0; 15 | padding-right: 0; 16 | } 17 | } 18 | 19 | .card-header{ 20 | &:not([data-background-color]){ 21 | background-color: transparent; 22 | } 23 | padding: 15px 15px 0; 24 | border: 0; 25 | 26 | .card-title{ 27 | margin-top: 10px; 28 | } 29 | } 30 | 31 | .map{ 32 | border-radius: $border-radius-small; 33 | 34 | &.map-big{ 35 | height: 400px; 36 | } 37 | } 38 | 39 | &[data-background-color="orange"]{ 40 | background-color: $primary-color; 41 | 42 | .card-header{ 43 | background-color: $primary-color; 44 | } 45 | 46 | .card-footer{ 47 | .stats{ 48 | color: $white-color; 49 | } 50 | } 51 | } 52 | 53 | &[data-background-color="red"]{ 54 | background-color: $danger-color; 55 | } 56 | 57 | &[data-background-color="yellow"]{ 58 | background-color: $warning-color; 59 | } 60 | 61 | &[data-background-color="blue"]{ 62 | background-color: $info-color; 63 | } 64 | 65 | &[data-background-color="green"]{ 66 | background-color: $success-color; 67 | } 68 | 69 | .image{ 70 | overflow: hidden; 71 | height: 200px; 72 | position: relative; 73 | } 74 | 75 | .avatar{ 76 | width: 30px; 77 | height: 30px; 78 | overflow: hidden; 79 | border-radius: 50%; 80 | margin-bottom: 15px; 81 | } 82 | 83 | label{ 84 | font-size: $font-size-small; 85 | margin-bottom: 5px; 86 | color: $dark-gray; 87 | } 88 | 89 | .card-footer{ 90 | background-color: transparent; 91 | border: 0; 92 | 93 | 94 | .stats{ 95 | i{ 96 | margin-right: 5px; 97 | position: relative; 98 | top: 2px; 99 | } 100 | } 101 | 102 | .btn{ 103 | margin: 0; 104 | } 105 | } 106 | } 107 | -------------------------------------------------------------------------------- /src/assets/scss/now-ui-dashboard/_checkboxes-radio.scss: -------------------------------------------------------------------------------- 1 | .form-check{ 2 | margin-top: .5rem; 3 | } 4 | 5 | .form-check .form-check-label{ 6 | display: inline-block; 7 | position: relative; 8 | cursor: pointer; 9 | padding-left: 35px; 10 | line-height: 26px; 11 | margin-bottom: 0; 12 | -webkit-transition: color 0.3s linear; 13 | -moz-transition: color 0.3s linear; 14 | -o-transition: color 0.3s linear; 15 | -ms-transition: color 0.3s linear; 16 | transition: color 0.3s linear; 17 | } 18 | .radio .form-check-sign{ 19 | padding-left: 28px; 20 | } 21 | 22 | .form-check .form-check-sign::before, 23 | .form-check .form-check-sign::after{ 24 | content: " "; 25 | display: inline-block; 26 | position: absolute; 27 | width: 26px; 28 | height: 26px; 29 | left: 0; 30 | cursor: pointer; 31 | border-radius: 3px; 32 | top: 0; 33 | background-color: transparent; 34 | border: 1px solid $light-gray; 35 | -webkit-transition: opacity 0.3s linear; 36 | -moz-transition: opacity 0.3s linear; 37 | -o-transition: opacity 0.3s linear; 38 | -ms-transition: opacity 0.3s linear; 39 | transition: opacity 0.3s linear; 40 | } 41 | 42 | .form-check .form-check-sign::after{ 43 | font-family: 'Nucleo Outline'; 44 | content: "\ea22"; 45 | top: 0px; 46 | text-align: center; 47 | font-size: 14px; 48 | opacity: 0; 49 | color: $dark-background; 50 | border: 0; 51 | background-color: inherit; 52 | } 53 | 54 | .form-check.disabled .form-check-label, 55 | .form-check.disabled .form-check-label { 56 | color: $dark-gray; 57 | opacity: .5; 58 | cursor: not-allowed; 59 | } 60 | 61 | .form-check input[type="checkbox"], 62 | .radio input[type="radio"]{ 63 | opacity: 0; 64 | position: absolute; 65 | visibility: hidden; 66 | } 67 | .form-check input[type="checkbox"]:checked + .form-check-sign::after{ 68 | opacity: 1; 69 | } 70 | 71 | .form-control input[type="checkbox"]:disabled + .form-check-sign::before, 72 | .checkbox input[type="checkbox"]:disabled + .form-check-sign::after{ 73 | cursor: not-allowed; 74 | } 75 | 76 | .form-check input[type="checkbox"]:disabled + .form-check-sign, 77 | .form-check input[type="radio"]:disabled + .form-check-sign{ 78 | pointer-events: none; 79 | } 80 | 81 | .form-check-radio .form-check-sign::before, 82 | .form-check-radio .form-check-sign::after{ 83 | content: " "; 84 | width: 20px; 85 | height: 20px; 86 | border-radius: 50%; 87 | border: 1px solid $light-gray; 88 | display: inline-block; 89 | position: absolute; 90 | left: 3px; 91 | top: 3px; 92 | padding: 1px; 93 | -webkit-transition: opacity 0.3s linear; 94 | -moz-transition: opacity 0.3s linear; 95 | -o-transition: opacity 0.3s linear; 96 | -ms-transition: opacity 0.3s linear; 97 | transition: opacity 0.3s linear; 98 | } 99 | 100 | .form-check-radio input[type="radio"] + .form-check-sign:after, 101 | .form-check-radio input[type="radio"] { 102 | opacity: 0; 103 | } 104 | .form-check-radio input[type="radio"]:checked + .form-check-sign::after { 105 | width: 4px; 106 | height: 4px; 107 | background-color: $dark-background; 108 | border-color: $dark-background; 109 | top: 11px; 110 | left: 11px; 111 | opacity: 1; 112 | } 113 | 114 | .form-check-radio input[type="radio"]:checked + .form-check-sign::after{ 115 | opacity: 1; 116 | } 117 | 118 | .form-check-radio input[type="radio"]:disabled + .form-check-sign { 119 | color: $dark-gray; 120 | } 121 | 122 | .form-check-radio input[type="radio"]:disabled + .form-check-sign::before, 123 | .form-check-radio input[type="radio"]:disabled + .form-check-sign::after { 124 | color: $dark-gray; 125 | } 126 | -------------------------------------------------------------------------------- /src/assets/scss/now-ui-dashboard/_dropdown.scss: -------------------------------------------------------------------------------- 1 | .dropdown-menu{ 2 | border: 0; 3 | box-shadow: 0px 10px 50px 0px rgba(0, 0, 0, 0.2); 4 | border-radius: $border-radius-extra-small; 5 | @include transition($fast-transition-time, $transition-linear); 6 | font-size: $font-size-base; 7 | 8 | &.dropdown-menu-right{ 9 | &:before{ 10 | left:auto; 11 | right: 10px; 12 | } 13 | } 14 | 15 | i{ 16 | margin-right: 5px; 17 | position: relative; 18 | top: 1px; 19 | } 20 | 21 | .now-ui-icons{ 22 | margin-right: 10px; 23 | position: relative; 24 | top: 4px; 25 | font-size: 18px; 26 | margin-top: -5px; 27 | opacity: .5; 28 | } 29 | 30 | .dropdown-item{ 31 | &.active, 32 | &:active{ 33 | color: inherit; 34 | } 35 | } 36 | 37 | .dropup &{ 38 | &:before{ 39 | display: none; 40 | } 41 | 42 | &:after{ 43 | display: inline-block; 44 | position: absolute; 45 | width: 0; 46 | height: 0; 47 | vertical-align: middle; 48 | content: ""; 49 | top: auto; 50 | bottom: -5px; 51 | right: auto; 52 | left: 10px; 53 | color: $white-color; 54 | border-top: .4em solid; 55 | border-right: .4em solid transparent; 56 | border-left: .4em solid transparent; 57 | } 58 | 59 | &.dropdown-menu-right{ 60 | &:after{ 61 | right: 10px; 62 | left: auto; 63 | } 64 | } 65 | 66 | } 67 | 68 | &:before{ 69 | display: inline-block; 70 | position: absolute; 71 | width: 0; 72 | height: 0; 73 | vertical-align: middle; 74 | content: ""; 75 | top: -5px; 76 | left: 10px; 77 | right: auto; 78 | color: $white-color; 79 | border-bottom: .4em solid; 80 | border-right: .4em solid transparent; 81 | border-left: .4em solid transparent; 82 | } 83 | 84 | &.dropdown-menu-right{ 85 | right: 0 !important; 86 | left: auto !important; 87 | } 88 | 89 | .dropdown-item, 90 | .bootstrap-select &.inner li a{ 91 | font-size: $font-size-small; 92 | padding-top: .6rem; 93 | padding-bottom: .6rem; 94 | margin-top: 5px; 95 | @include transition($fast-transition-time, $transition-linear); 96 | 97 | &:hover, 98 | &:focus{ 99 | background-color: $opacity-gray-3; 100 | } 101 | 102 | &.disabled, 103 | &:disabled{ 104 | color: $default-color-opacity; 105 | 106 | &:hover, 107 | &:focus{ 108 | background-color: transparent; 109 | } 110 | } 111 | } 112 | 113 | 114 | .dropdown-divider{ 115 | background-color: $opacity-gray-5; 116 | } 117 | 118 | .dropdown-header:not([href]):not([tabindex]){ 119 | color: $default-color-opacity; 120 | font-size: $font-size-mini; 121 | text-transform: uppercase; 122 | font-weight: $font-weight-bold; 123 | } 124 | 125 | &.dropdown-primary{ 126 | @include dropdown-colors(darken($primary-color, 3%),$opacity-8,$white-color, $opacity-2); 127 | } 128 | 129 | &.dropdown-info{ 130 | @include dropdown-colors(darken($info-color, 3%),$opacity-8,$white-color, $opacity-2); 131 | } 132 | 133 | &.dropdown-danger{ 134 | @include dropdown-colors(darken($danger-color, 3%),$opacity-8,$white-color, $opacity-2); 135 | } 136 | 137 | &.dropdown-success{ 138 | @include dropdown-colors(darken($success-color, 3%),$opacity-8,$white-color, $opacity-2); 139 | } 140 | 141 | &.dropdown-warning{ 142 | @include dropdown-colors(darken($warning-color, 3%),$opacity-8,$white-color, $opacity-2); 143 | } 144 | 145 | .dropdown &, 146 | .dropup:not(.bootstrap-select) &, 147 | .bootstrap-select &:not(.inner), 148 | &.bootstrap-datetimepicker-widget.top, 149 | &.bootstrap-datetimepicker-widget.bottom{ 150 | @include transform-translate-y-dropdown(-20px); 151 | visibility: hidden; 152 | display: block; 153 | @include opacity(0); 154 | top: 100% !important; 155 | } 156 | 157 | &.bootstrap-datetimepicker-widget.top, 158 | &.bootstrap-datetimepicker-widget.bottom{ 159 | @include transform-translate-y-dropdown(-20px); 160 | } 161 | 162 | .bootstrap-select.dropup &:not(.inner){ 163 | @include transform-translate-y-dropdown(25px); 164 | } 165 | 166 | .dropup:not(.bootstrap-select) &{ 167 | @include transform-translate-y-dropdown(20px); 168 | top: auto !important; 169 | bottom: 100%; 170 | } 171 | 172 | .dropdown.show &, 173 | .bootstrap-select.show &:not(.inner), 174 | &.bootstrap-datetimepicker-widget.top.open, 175 | &.bootstrap-datetimepicker-widget.bottom.open, 176 | .dropup.show:not(.bootstrap-select) &, 177 | .navbar .dropdown.show &{ 178 | @include opacity(1); 179 | visibility: visible; 180 | @include transform-translate-y-dropdown(1px); 181 | } 182 | 183 | &.bootstrap-datetimepicker-widget.top.open, 184 | &.bootstrap-datetimepicker-widget.bottom.open{ 185 | @include transform-translate-y-dropdown(0px); 186 | } 187 | 188 | .dropup.show:not(.bootstrap-select) &{ 189 | @include transform-translate-y-dropdown(-2px); 190 | } 191 | } 192 | 193 | .button-dropdown{ 194 | padding-right: $padding-base-horizontal; 195 | cursor: pointer; 196 | 197 | & .dropdown-toggle{ 198 | padding-top: $padding-base-vertical; 199 | padding-bottom: $padding-base-vertical; 200 | display: block; 201 | 202 | &:after{ 203 | display: none; 204 | } 205 | } 206 | } 207 | -------------------------------------------------------------------------------- /src/assets/scss/now-ui-dashboard/_fixed-plugin.scss: -------------------------------------------------------------------------------- 1 | .fixed-plugin{ 2 | position: fixed; 3 | right: 0; 4 | width: 64px; 5 | background: rgba(0,0,0,.3); 6 | z-index: 1031; 7 | border-radius: 8px 0 0 8px; 8 | text-align: center; 9 | top: 120px; 10 | 11 | li > a, 12 | .badge{ 13 | transition: all .34s; 14 | -webkit-transition: all .34s; 15 | -moz-transition: all .34s; 16 | } 17 | 18 | .fa-cog{ 19 | color: #FFFFFF; 20 | padding: 10px; 21 | border-radius: 0 0 6px 6px; 22 | width: auto; 23 | } 24 | 25 | .dropdown-menu{ 26 | right: 80px; 27 | left: auto !important; 28 | top: -52px !important; 29 | width: 290px; 30 | border-radius: 0.1875rem; 31 | padding: 0 10px; 32 | } 33 | 34 | .dropdown .dropdown-menu .now-ui-icons{ 35 | top: 5px; 36 | } 37 | 38 | .dropdown-menu:after, 39 | .dropdown-menu:before{ 40 | right: 10px; 41 | margin-left: auto; 42 | left: auto; 43 | } 44 | 45 | .fa-circle-thin{ 46 | color: #FFFFFF; 47 | } 48 | 49 | .active .fa-circle-thin{ 50 | color: #00bbff; 51 | } 52 | 53 | .dropdown-menu > .active > a, 54 | .dropdown-menu > .active > a:hover, 55 | .dropdown-menu > .active > a:focus{ 56 | color: #777777; 57 | text-align: center; 58 | } 59 | 60 | img{ 61 | border-radius: 0; 62 | width: 100%; 63 | height: 100px; 64 | margin: 0 auto; 65 | } 66 | 67 | .dropdown-menu li > a:hover, 68 | .dropdown-menu li > a:focus{ 69 | box-shadow: none; 70 | } 71 | 72 | .badge{ 73 | border: 3px solid #FFFFFF; 74 | border-radius: 50%; 75 | cursor: pointer; 76 | display: inline-block; 77 | height: 23px; 78 | margin-right: 5px; 79 | position: relative; 80 | width: 23px; 81 | } 82 | 83 | .badge.active, 84 | .badge:hover{ 85 | border-color: #00bbff; 86 | } 87 | 88 | .badge-blue{ 89 | background-color: $brand-info; 90 | } 91 | .badge-green{ 92 | background-color: $brand-success; 93 | } 94 | .badge-orange{ 95 | background-color: $brand-primary; 96 | } 97 | .badge-yellow{ 98 | background-color: $brand-warning; 99 | } 100 | .badge-red{ 101 | background-color: $brand-danger; 102 | } 103 | 104 | h5{ 105 | font-size: 14px; 106 | margin: 10px; 107 | } 108 | 109 | .dropdown-menu li{ 110 | display: block; 111 | padding: 18px 2px; 112 | width: 25%; 113 | float: left; 114 | } 115 | 116 | li.adjustments-line, 117 | li.header-title, 118 | li.button-container{ 119 | width: 100%; 120 | height: 50px; 121 | min-height: inherit; 122 | } 123 | 124 | li.button-container{ 125 | height: auto; 126 | 127 | div{ 128 | margin-bottom: 5px; 129 | } 130 | } 131 | 132 | #sharrreTitle{ 133 | text-align: center; 134 | padding: 10px 0; 135 | height: 50px; 136 | } 137 | 138 | li.header-title{ 139 | height: 30px; 140 | line-height: 25px; 141 | font-size: 12px; 142 | font-weight: 600; 143 | text-align: center; 144 | text-transform: uppercase; 145 | } 146 | 147 | .adjustments-line{ 148 | p{ 149 | float: left; 150 | display: inline-block; 151 | margin-bottom: 0; 152 | font-size: 1em; 153 | color: #3C4858; 154 | } 155 | 156 | a{ 157 | color: transparent; 158 | 159 | .badge-colors{ 160 | position: relative; 161 | top: -2px; 162 | } 163 | 164 | a:hover, 165 | a:focus{ 166 | color: transparent; 167 | } 168 | } 169 | 170 | .togglebutton{ 171 | text-align: center; 172 | 173 | .label-switch{ 174 | position: relative; 175 | left: -10px; 176 | font-size: $font-size-mini; 177 | color: $default-color; 178 | 179 | &.label-right{ 180 | left: 10px; 181 | } 182 | } 183 | 184 | .toggle{ 185 | margin-right: 0; 186 | } 187 | } 188 | 189 | .dropdown-menu > li.adjustments-line > a{ 190 | padding-right: 0; 191 | padding-left: 0; 192 | border-bottom: 1px solid #ddd; 193 | border-radius: 0; 194 | margin: 0; 195 | } 196 | } 197 | 198 | 199 | 200 | .dropdown-menu{ 201 | > li{ 202 | & > a.img-holder{ 203 | font-size: 16px; 204 | text-align: center; 205 | border-radius: 10px; 206 | background-color: #FFF; 207 | border: 3px solid #FFF; 208 | padding-left: 0; 209 | padding-right: 0; 210 | opacity: 1; 211 | cursor: pointer; 212 | display: block; 213 | max-height: 100px; 214 | overflow: hidden; 215 | padding: 0; 216 | 217 | img{ 218 | margin-top: auto; 219 | } 220 | } 221 | 222 | a.switch-trigger:hover, 223 | & > a.switch-trigger:focus{ 224 | background-color: transparent; 225 | } 226 | 227 | &:hover, 228 | &:focus{ 229 | > a.img-holder{ 230 | border-color: rgba(0, 187, 255, 0.53);; 231 | } 232 | } 233 | } 234 | 235 | > .active > a.img-holder, 236 | > .active > a.img-holder{ 237 | border-color: #00bbff; 238 | background-color: #FFFFFF; 239 | } 240 | 241 | } 242 | 243 | .btn-social{ 244 | width: 50%; 245 | display: block; 246 | width: 48%; 247 | float: left; 248 | font-weight: 600; 249 | } 250 | 251 | .btn-social{ 252 | i{ 253 | margin-right: 5px; 254 | } 255 | 256 | &:first-child{ 257 | margin-right: 2%; 258 | } 259 | } 260 | 261 | .dropdown{ 262 | .dropdown-menu{ 263 | -webkit-transform: translateY(-15%); 264 | -moz-transform: translateY(-15%); 265 | -o-transform: translateY(-15%); 266 | -ms-transform: translateY(-15%); 267 | transform: translateY(-15%); 268 | top: 27px; 269 | opacity: 0; 270 | 271 | transform-origin: 0 0; 272 | 273 | &:before{ 274 | border-bottom: .4em solid rgba(0, 0, 0, 0); 275 | border-left: .4em solid rgba(0,0,0,0.2); 276 | border-top: .4em solid rgba(0,0,0,0); 277 | right: -16px; 278 | top: 46px; 279 | } 280 | 281 | &:after{ 282 | border-bottom: .4em solid rgba(0, 0, 0, 0); 283 | border-left: .4em solid #FFFFFF; 284 | border-top: .4em solid rgba(0,0,0,0); 285 | right: -16px; 286 | } 287 | 288 | &:before, 289 | &:after{ 290 | content: ""; 291 | display: inline-block; 292 | position: absolute; 293 | top: 74px; 294 | width: 16px; 295 | transform: translateY(-50%); 296 | -webkit-transform: translateY(-50%); 297 | -moz-transform: translateY(-50%); 298 | } 299 | } 300 | 301 | &.show .dropdown-menu{ 302 | opacity: 1; 303 | 304 | -webkit-transform: translateY(-13%); 305 | -moz-transform: translateY(-13%); 306 | -o-transform: translateY(-13%); 307 | -ms-transform: translateY(-13%); 308 | transform: translateY(-13%); 309 | 310 | transform-origin: 0 0; 311 | } 312 | } 313 | 314 | .bootstrap-switch{ 315 | margin:0; 316 | } 317 | } 318 | -------------------------------------------------------------------------------- /src/assets/scss/now-ui-dashboard/_footers.scss: -------------------------------------------------------------------------------- 1 | .footer{ 2 | padding: 24px 0; 3 | 4 | &.footer-default{ 5 | background-color: #f2f2f2; 6 | } 7 | 8 | nav{ 9 | display: inline-block; 10 | float: left; 11 | padding-left: 7px; 12 | } 13 | 14 | ul{ 15 | margin-bottom: 0; 16 | padding: 0; 17 | list-style: none; 18 | 19 | li{ 20 | display: inline-block; 21 | 22 | a{ 23 | color: inherit; 24 | padding: $padding-base-vertical; 25 | font-size: $font-size-small; 26 | text-transform: uppercase; 27 | text-decoration: none; 28 | 29 | &:hover{ 30 | text-decoration: none; 31 | } 32 | } 33 | } 34 | } 35 | 36 | .copyright{ 37 | font-size: $font-size-small; 38 | line-height: 1.8; 39 | } 40 | 41 | &:after{ 42 | display: table; 43 | clear: both; 44 | content: " "; 45 | } 46 | } 47 | -------------------------------------------------------------------------------- /src/assets/scss/now-ui-dashboard/_images.scss: -------------------------------------------------------------------------------- 1 | img{ 2 | max-width: 100%; 3 | border-radius: $border-radius-small; 4 | } 5 | .img-raised{ 6 | box-shadow: $box-shadow-raised; 7 | } 8 | -------------------------------------------------------------------------------- /src/assets/scss/now-ui-dashboard/_misc.scss: -------------------------------------------------------------------------------- 1 | body{ 2 | color: $black-color; 3 | font-size: $font-size-base; 4 | font-family: $sans-serif-family; 5 | -moz-osx-font-smoothing: grayscale; 6 | -webkit-font-smoothing: antialiased; 7 | } 8 | 9 | .main{ 10 | position: relative; 11 | background: $white-color; 12 | } 13 | /* Animations */ 14 | .nav-pills .nav-link, 15 | .navbar, 16 | .nav-tabs .nav-link, 17 | .sidebar .nav a, 18 | .sidebar .nav a i, 19 | .navbar-collapse .navbar-nav .nav-link, 20 | .animation-transition-general, 21 | .tag, 22 | .tag [data-role="remove"], 23 | .animation-transition-general{ 24 | @include transition($general-transition-time, $transition-ease); 25 | } 26 | 27 | //transition for dropdown caret 28 | .dropdown-toggle:after, 29 | .bootstrap-switch-label:before, 30 | .caret{ 31 | @include transition($fast-transition-time, $transition-ease); 32 | } 33 | 34 | .dropdown-toggle[aria-expanded="true"]:after, 35 | a[data-toggle="collapse"][aria-expanded="true"] .caret, 36 | .card-collapse .card a[data-toggle="collapse"][aria-expanded="true"] i, 37 | .card-collapse .card a[data-toggle="collapse"].expanded i{ 38 | @include rotate-180(); 39 | } 40 | 41 | .button-bar{ 42 | display: block; 43 | position: relative; 44 | width: 22px; 45 | height: 1px; 46 | border-radius: 1px; 47 | background: $white-bg; 48 | 49 | & + .button-bar{ 50 | margin-top: 7px; 51 | } 52 | 53 | &:nth-child(2){ 54 | width: 17px; 55 | } 56 | } 57 | 58 | .caret{ 59 | display: inline-block; 60 | width: 0; 61 | height: 0; 62 | margin-left: 2px; 63 | vertical-align: middle; 64 | border-top: 4px dashed; 65 | border-top: 4px solid\9; 66 | border-right: 4px solid transparent; 67 | border-left: 4px solid transparent; 68 | } 69 | 70 | .pull-left{ 71 | float: left; 72 | } 73 | .pull-right{ 74 | float: right; 75 | } 76 | -------------------------------------------------------------------------------- /src/assets/scss/now-ui-dashboard/_mixins.scss: -------------------------------------------------------------------------------- 1 | //Components 2 | @import "mixins/buttons"; 3 | @import "mixins/vendor-prefixes"; 4 | @import "mixins/inputs"; 5 | @import "mixins/page-header"; 6 | @import "mixins/dropdown"; 7 | @import "mixins/cards"; 8 | @import "mixins/transparency"; 9 | -------------------------------------------------------------------------------- /src/assets/scss/now-ui-dashboard/_navbar.scss: -------------------------------------------------------------------------------- 1 | .navbar{ 2 | padding-top: $navbar-padding-base; 3 | padding-bottom: $navbar-padding-base; 4 | min-height: 53px; 5 | margin-bottom: 20px; 6 | box-shadow: 0px 0px 20px 0px rgba(0, 0, 0, 0.15); 7 | 8 | a{ 9 | vertical-align: middle; 10 | 11 | &:not(.btn):not(.dropdown-item){ 12 | color: $white-color; 13 | } 14 | 15 | &.dropdown-item{ 16 | color: $default-color; 17 | } 18 | } 19 | 20 | 21 | 22 | &.bg-white{ 23 | .input-group .form-control, 24 | .input-group.no-border .form-control{ 25 | color: $default-color; 26 | 27 | @include placeholder(){ 28 | color: $default-color; 29 | }; 30 | } 31 | .input-group-prepend .input-group-text i, 32 | .input-group-append .input-group-text i{ 33 | color: $default-color; 34 | opacity: .5; 35 | } 36 | } 37 | 38 | .form-group, 39 | .input-group{ 40 | margin: 0; 41 | margin-left: -3px; 42 | margin-right: 5px; 43 | 44 | .form-group-addon, 45 | .input-group-prepend .input-group-text, 46 | .input-group-append .input-group-text{ 47 | color: $white-color; 48 | 49 | i { 50 | opacity: 1; 51 | } 52 | } 53 | 54 | &.no-border{ 55 | .form-control{ 56 | color: $white-color; 57 | 58 | @include placeholder(){ 59 | color: $white-color; 60 | }; 61 | } 62 | } 63 | } 64 | 65 | p{ 66 | display: inline-block; 67 | margin: 0; 68 | line-height: 1.8em; 69 | font-size: 1em; 70 | font-weight: 400; 71 | } 72 | 73 | &.navbar-absolute{ 74 | position: absolute; 75 | width: 100%; 76 | padding-top: 10px; 77 | z-index: 1029; 78 | } 79 | 80 | .documentation &{ 81 | &.fixed-top{ 82 | left: 0; 83 | width: initial; 84 | } 85 | } 86 | 87 | .navbar-wrapper{ 88 | display: inline-flex; 89 | align-items: center; 90 | 91 | .navbar-minimize{ 92 | padding-right: 10px; 93 | 94 | .btn{ 95 | margin: 0; 96 | } 97 | } 98 | 99 | .navbar-toggle{ 100 | .navbar-toggler{ 101 | padding-left: 0; 102 | } 103 | 104 | &:hover{ 105 | & .navbar-toggler-bar.bar2{ 106 | width: 22px; 107 | } 108 | } 109 | } 110 | } 111 | 112 | 113 | 114 | .navbar-nav{ 115 | &.navbar-logo{ 116 | position: absolute; 117 | left: 0; 118 | right: 0; 119 | margin: 0 auto; 120 | width: 49px; 121 | top: -4px; 122 | } 123 | 124 | .nav-link.btn{ 125 | padding: $padding-btn-vertical $padding-btn-horizontal; 126 | &.btn-lg{ 127 | padding: $padding-large-vertical $padding-large-horizontal; 128 | } 129 | &.btn-sm{ 130 | padding: $padding-small-vertical $padding-small-horizontal; 131 | } 132 | } 133 | 134 | .nav-link{ 135 | text-transform: uppercase; 136 | font-size: $font-size-mini; 137 | padding: $padding-base-vertical $padding-base-horizontal; 138 | line-height: $line-height-nav-link; 139 | margin-right: 3px; 140 | 141 | i.fa + p, 142 | i.now-ui-icons + p{ 143 | margin-left: 3px; 144 | } 145 | 146 | i.fa, 147 | i.now-ui-icons{ 148 | font-size: 18px; 149 | position: relative; 150 | top: 3px; 151 | text-align: center; 152 | width: 21px; 153 | } 154 | 155 | i.now-ui-icons{ 156 | top: 4px; 157 | font-size: 16px; 158 | } 159 | 160 | &.profile-photo{ 161 | .profile-photo-small{ 162 | width: 27px; 163 | height: 27px; 164 | } 165 | } 166 | 167 | &.disabled{ 168 | opacity: .5; 169 | color: $white-color; 170 | } 171 | } 172 | 173 | .nav-item.active .nav-link:not(.btn), 174 | .nav-item .nav-link:not(.btn):focus, 175 | .nav-item .nav-link:not(.btn):hover, 176 | .nav-item .nav-link:not(.btn):active{ 177 | background-color: $opacity-2; 178 | border-radius: $border-radius-small; 179 | color: $white-color; 180 | } 181 | } 182 | 183 | .logo-container{ 184 | width: 27px; 185 | height: 27px; 186 | overflow: hidden; 187 | margin: 0 auto; 188 | border-radius: 50%; 189 | border: 1px solid transparent; 190 | } 191 | 192 | .navbar-brand{ 193 | text-transform: uppercase; 194 | font-size: $font-size-small; 195 | padding-top: $padding-base-vertical; 196 | padding-bottom: $padding-base-vertical; 197 | line-height: $line-height-nav-link; 198 | } 199 | 200 | .navbar-toggler{ 201 | width: 37px; 202 | height: 27px; 203 | vertical-align: middle; 204 | outline: 0; 205 | cursor: pointer; 206 | 207 | & .navbar-toggler-bar.navbar-kebab{ 208 | width: 3px; 209 | height: 3px; 210 | border-radius: 50%; 211 | margin: 0 auto; 212 | } 213 | } 214 | 215 | .button-dropdown{ 216 | .navbar-toggler-bar:nth-child(2){ 217 | width: 17px; 218 | } 219 | } 220 | 221 | &.navbar-transparent{ 222 | background-color: $transparent-bg !important; 223 | box-shadow: none; 224 | color: $white-color; 225 | } 226 | 227 | &.bg-white:not(.navbar-transparent){ 228 | a:not(.dropdown-item):not(.btn){ 229 | color: $default-color; 230 | 231 | &.disabled{ 232 | opacity: .5; 233 | color: $default-color; 234 | } 235 | } 236 | 237 | .button-bar{ 238 | background: $default-color; 239 | } 240 | 241 | .nav-item.active .nav-link:not(.btn), 242 | .nav-item .nav-link:not(.btn):focus, 243 | .nav-item .nav-link:not(.btn):hover, 244 | .nav-item .nav-link:not(.btn):active{ 245 | background-color: $opacity-gray-8; 246 | color: $default-color; 247 | } 248 | 249 | .logo-container{ 250 | border: 1px solid $default-color; 251 | } 252 | } 253 | } 254 | 255 | .bg-default{ 256 | background-color: $default-color !important; 257 | } 258 | 259 | .bg-primary{ 260 | background-color: $primary-color !important; 261 | } 262 | 263 | .bg-info{ 264 | background-color: $info-color !important; 265 | } 266 | 267 | .bg-success{ 268 | background-color: $success-color !important; 269 | } 270 | 271 | .bg-danger{ 272 | background-color: $danger-color !important; 273 | } 274 | 275 | .bg-warning{ 276 | background-color: $warning-color !important; 277 | } 278 | 279 | .bg-white{ 280 | background-color: $white-color !important; 281 | } 282 | -------------------------------------------------------------------------------- /src/assets/scss/now-ui-dashboard/_page-header.scss: -------------------------------------------------------------------------------- 1 | .page-header{ 2 | min-height: 100vh; 3 | max-height: 999px; 4 | padding: 0; 5 | color: $white-color; 6 | position: relative; 7 | 8 | .page-header-image{ 9 | position: absolute; 10 | background-size: cover; 11 | background-position: center center; 12 | width: 100%; 13 | height: 100%; 14 | z-index: -1; 15 | } 16 | 17 | .content-center{ 18 | position: absolute; 19 | top: 50%; 20 | left: 50%; 21 | z-index: 2; 22 | -ms-transform: translate(-50%, -50%); 23 | -webkit-transform: translate(-50%, -50%); 24 | transform: translate(-50%, -50%); 25 | text-align: center; 26 | color: #FFFFFF; 27 | padding: 0 15px; 28 | width: 100%; 29 | max-width: 880px; 30 | 31 | } 32 | 33 | footer{ 34 | position: absolute; 35 | bottom: 0; 36 | width: 100%; 37 | } 38 | 39 | .container{ 40 | height: 100%; 41 | z-index: 1; 42 | } 43 | 44 | .category, 45 | .description{ 46 | color: $opacity-8; 47 | } 48 | 49 | &.page-header-small{ 50 | min-height: 60vh; 51 | max-height: 440px; 52 | } 53 | 54 | &.page-header-mini{ 55 | min-height: 40vh; 56 | max-height: 340px; 57 | } 58 | 59 | .title{ 60 | margin-bottom: 15px; 61 | } 62 | .title + h4{ 63 | margin-top: 10px; 64 | } 65 | 66 | &:after, 67 | &:before{ 68 | position: absolute; 69 | z-index: 0; 70 | width: 100%; 71 | height: 100%; 72 | display: block; 73 | left: 0; 74 | top: 0; 75 | content: ""; 76 | } 77 | 78 | &:before{ 79 | background-color: rgba(0,0,0,.3); 80 | } 81 | 82 | &[filter-color="orange"]{ 83 | @include linear-gradient(rgba($black-color,.20), rgba(224, 23, 3, 0.6)); 84 | } 85 | } 86 | -------------------------------------------------------------------------------- /src/assets/scss/now-ui-dashboard/_responsive.scss: -------------------------------------------------------------------------------- 1 | @media screen and (max-width: 991px){ 2 | .profile-photo .profile-photo-small{ 3 | margin-left: -2px; 4 | } 5 | 6 | .button-dropdown{ 7 | display: none; 8 | } 9 | 10 | #minimizeSidebar{ 11 | display: none; 12 | } 13 | 14 | .navbar{ 15 | .container-fluid{ 16 | padding-right: 15px; 17 | padding-left: 15px; 18 | } 19 | 20 | .navbar-collapse{ 21 | .input-group{ 22 | margin: 0; 23 | margin-top: 5px; 24 | } 25 | } 26 | 27 | .navbar-nav{ 28 | .nav-item:first-child{ 29 | margin-top: 10px; 30 | } 31 | .nav-item:not(:last-child){ 32 | margin-bottom: 10px; 33 | } 34 | } 35 | 36 | .dropdown.show .dropdown-menu{ 37 | display: block; 38 | } 39 | 40 | .dropdown .dropdown-menu{ 41 | display: none; 42 | } 43 | 44 | .dropdown.show .dropdown-menu, 45 | .dropdown .dropdown-menu{ 46 | background-color: transparent; 47 | border: 0; 48 | transition: none; 49 | -webkit-box-shadow: none; 50 | box-shadow: none; 51 | width: auto; 52 | margin: 0px 1rem; 53 | margin-top: 0px; 54 | 55 | &:before{ 56 | display: none; 57 | } 58 | } 59 | 60 | .dropdown-menu .dropdown-item:focus, 61 | .dropdown-menu .dropdown-item:hover{ 62 | color: $white-color; 63 | } 64 | 65 | &.bg-white .dropdown-menu .dropdown-item:focus, 66 | &.bg-white .dropdown-menu .dropdown-item:hover{ 67 | color: $default-color; 68 | } 69 | 70 | .navbar-toggler-bar{ 71 | display: block; 72 | position: relative; 73 | width: 22px; 74 | height: 1px; 75 | border-radius: 1px; 76 | background: $white-bg; 77 | 78 | & + .navbar-toggler-bar{ 79 | margin-top: 7px; 80 | } 81 | 82 | & + .navbar-toggler-bar.navbar-kebab{ 83 | margin-top: 3px; 84 | } 85 | 86 | &.bar2{ 87 | width: 17px; 88 | transition: width .2s linear; 89 | } 90 | } 91 | 92 | &.bg-white:not(.navbar-transparent) .navbar-toggler-bar{ 93 | background-color: $default-color; 94 | } 95 | 96 | & .toggled .navbar-toggler-bar{ 97 | width: 24px; 98 | 99 | & + .navbar-toggler-bar{ 100 | margin-top: 5px; 101 | } 102 | } 103 | 104 | } 105 | 106 | .wrapper{ 107 | @include transition (0.50s, cubic-bezier(0.685, 0.0473, 0.346, 1)); 108 | } 109 | 110 | .nav-open{ 111 | .main-panel{ 112 | right: 0; 113 | @include transform-translate-x(260px); 114 | } 115 | 116 | .sidebar{ 117 | @include transform-translate-x(0px); 118 | } 119 | 120 | body{ 121 | position: relative; 122 | overflow-x: hidden; 123 | } 124 | 125 | .menu-on-right{ 126 | .main-panel{ 127 | @include transform-translate-x(-260px); 128 | } 129 | 130 | .navbar-collapse, 131 | .sidebar{ 132 | @include transform-translate-x(0px); 133 | } 134 | 135 | .navbar-translate{ 136 | @include transform-translate-x(-300px); 137 | } 138 | 139 | #bodyClick{ 140 | right: 260px; 141 | left: auto; 142 | } 143 | } 144 | } 145 | 146 | .menu-on-right{ 147 | .sidebar{ 148 | left: auto; 149 | right:0; 150 | @include transform-translate-x(260px); 151 | } 152 | } 153 | 154 | .bar1, 155 | .bar2, 156 | .bar3 { 157 | outline: 1px solid transparent; 158 | } 159 | .bar1 { 160 | top: 0px; 161 | @include bar-animation($topbar-back); 162 | } 163 | .bar2 { 164 | opacity: 1; 165 | } 166 | .bar3 { 167 | bottom: 0px; 168 | @include bar-animation($bottombar-back); 169 | } 170 | .toggled .bar1 { 171 | top: 6px; 172 | @include bar-animation($topbar-x); 173 | } 174 | .toggled .bar2 { 175 | opacity: 0; 176 | } 177 | .toggled .bar3 { 178 | bottom: 6px; 179 | @include bar-animation($bottombar-x); 180 | } 181 | 182 | @include topbar-x-rotation(); 183 | @include topbar-back-rotation(); 184 | @include bottombar-x-rotation(); 185 | @include bottombar-back-rotation(); 186 | 187 | @-webkit-keyframes fadeIn { 188 | 0% {opacity: 0;} 189 | 100% {opacity: 1;} 190 | } 191 | @-moz-keyframes fadeIn { 192 | 0% {opacity: 0;} 193 | 100% {opacity: 1;} 194 | } 195 | @keyframes fadeIn { 196 | 0% {opacity: 0;} 197 | 100% {opacity: 1;} 198 | } 199 | 200 | #bodyClick{ 201 | height: 100%; 202 | width: 100%; 203 | position: fixed; 204 | opacity: 1; 205 | top: 0; 206 | right: 0; 207 | left: 260px; 208 | content: ""; 209 | z-index: 9999; 210 | overflow-x: hidden; 211 | background-color: transparent; 212 | @include transition (0.50s, cubic-bezier(0.685, 0.0473, 0.346, 1)); 213 | } 214 | 215 | .footer{ 216 | .copyright{ 217 | text-align: right; 218 | } 219 | } 220 | 221 | .section-nucleo-icons .icons-container{ 222 | margin-top: 65px; 223 | } 224 | 225 | .navbar-nav{ 226 | .nav-link{ 227 | i.fa, 228 | i.now-ui-icons{ 229 | opacity: .5; 230 | } 231 | } 232 | } 233 | 234 | .sidebar, 235 | .bootstrap-navbar { 236 | position: fixed; 237 | display: block; 238 | top: 0; 239 | height: 100%; 240 | width: 260px; 241 | right: auto; 242 | left: 0; 243 | z-index: 1032; 244 | visibility: visible; 245 | overflow-y: visible; 246 | padding: 0; 247 | @include transition (0.50s, cubic-bezier(0.685, 0.0473, 0.346, 1)); 248 | 249 | @include transform-translate-x(-260px); 250 | } 251 | 252 | 253 | 254 | .main-panel{ 255 | width: 100%; 256 | } 257 | } 258 | 259 | @media screen and (min-width: 992px){ 260 | .navbar-collapse{ 261 | background: none !important; 262 | } 263 | 264 | .navbar .navbar-toggle{ 265 | display: none; 266 | } 267 | 268 | // .navbar.fixed-top{ 269 | // width: $sidebar-width; 270 | // right: 0; 271 | // left: auto; 272 | // } 273 | 274 | .navbar-nav{ 275 | .nav-link{ 276 | &.profile-photo{ 277 | padding: 0; 278 | margin: 7px $padding-base-horizontal; 279 | } 280 | } 281 | } 282 | 283 | .section-nucleo-icons .icons-container{ 284 | margin: 0 0 0 auto; 285 | } 286 | 287 | .dropdown-menu .dropdown-item{ 288 | color: inherit; 289 | } 290 | 291 | .footer{ 292 | .copyright{ 293 | float: right; 294 | padding-right: 15px; 295 | } 296 | } 297 | } 298 | 299 | @media screen and (max-width: 768px){ 300 | .nav-tabs{ 301 | display: inline-block; 302 | width: 100%; 303 | padding-left: 100px; 304 | padding-right: 100px; 305 | text-align: center; 306 | 307 | .nav-item > .nav-link{ 308 | margin-bottom: 5px; 309 | } 310 | } 311 | 312 | .card-stats [class*="col-"] .statistics::after { 313 | display: none; 314 | } 315 | 316 | .main-panel .content { 317 | padding-left: 15px; 318 | padding-right: 15px; 319 | } 320 | 321 | .footer{ 322 | nav{ 323 | display: block; 324 | margin-bottom: 5px; 325 | float: none; 326 | } 327 | } 328 | 329 | .landing-page .section-story-overview .image-container:nth-child(2){ 330 | margin-left: 0; 331 | margin-bottom: 30px; 332 | } 333 | } 334 | 335 | @media screen and (max-width: 576px){ 336 | .navbar[class*='navbar-toggleable-'] .container{ 337 | margin-left: 0; 338 | margin-right: 0; 339 | } 340 | 341 | .card-contributions .card-stats{ 342 | flex-direction: column; 343 | 344 | .bootstrap-switch{ 345 | margin-bottom: 15px; 346 | } 347 | } 348 | 349 | .footer{ 350 | .copyright{ 351 | text-align: center; 352 | } 353 | } 354 | 355 | .section-nucleo-icons{ 356 | .icons-container{ 357 | i{ 358 | font-size: 30px; 359 | 360 | &:nth-child(6){ 361 | font-size: 48px; 362 | } 363 | } 364 | } 365 | } 366 | 367 | .page-header{ 368 | .container h6.category-absolute{ 369 | width: 90%; 370 | } 371 | } 372 | } 373 | -------------------------------------------------------------------------------- /src/assets/scss/now-ui-dashboard/_tables.scss: -------------------------------------------------------------------------------- 1 | .table{ 2 | 3 | .img-wrapper{ 4 | width: 40px; 5 | height: 40px; 6 | border-radius: 50%; 7 | overflow: hidden; 8 | margin: 0 auto; 9 | } 10 | 11 | .img-row{ 12 | max-width: 60px; 13 | width: 60px; 14 | } 15 | 16 | .form-check{ 17 | margin: 0; 18 | 19 | & label .form-check-sign::before, 20 | & label .form-check-sign::after{ 21 | top: -17px; 22 | left: 4px; 23 | } 24 | } 25 | 26 | .btn{ 27 | margin: 0; 28 | } 29 | 30 | small,.small{ 31 | font-weight: 300; 32 | } 33 | 34 | .card-tasks .card-body &{ 35 | margin-bottom: 0; 36 | 37 | > thead > tr > th, 38 | > tbody > tr > th, 39 | > tfoot > tr > th, 40 | > thead > tr > td, 41 | > tbody > tr > td, 42 | > tfoot > tr > td{ 43 | padding-top: 0; 44 | padding-bottom: 0; 45 | } 46 | } 47 | 48 | > thead > tr > th{ 49 | border-bottom-width: 1px; 50 | font-size: 1.45em; 51 | font-weight: $font-weight-light; 52 | border: 0; 53 | } 54 | 55 | .radio, 56 | .checkbox{ 57 | margin-top: 0; 58 | margin-bottom: 0; 59 | padding: 0; 60 | width: 15px; 61 | 62 | .icons{ 63 | position: relative; 64 | } 65 | 66 | label{ 67 | &:after, 68 | &:before{ 69 | top: -17px; 70 | left: -3px; 71 | } 72 | } 73 | } 74 | > thead > tr > th, 75 | > tbody > tr > th, 76 | > tfoot > tr > th, 77 | > thead > tr > td, 78 | > tbody > tr > td, 79 | > tfoot > tr > td{ 80 | padding: 12px 7px; 81 | vertical-align: middle; 82 | } 83 | 84 | .th-description{ 85 | max-width: 150px; 86 | } 87 | .td-price{ 88 | font-size: 26px; 89 | font-weight: $font-weight-light; 90 | margin-top: 5px; 91 | position: relative; 92 | top: 4px; 93 | text-align: right; 94 | } 95 | .td-total{ 96 | font-weight: $font-weight-bold; 97 | font-size: $font-size-h5; 98 | padding-top: 20px; 99 | text-align: right; 100 | } 101 | 102 | .td-actions .btn{ 103 | margin: 0px; 104 | } 105 | 106 | > tbody > tr{ 107 | position: relative; 108 | } 109 | } 110 | 111 | .table-shopping{ 112 | > thead > tr > th{ 113 | font-size: $font-size-h6; 114 | text-transform: uppercase; 115 | } 116 | > tbody > tr > td{ 117 | font-size: $font-paragraph; 118 | 119 | b{ 120 | display: block; 121 | margin-bottom: 5px; 122 | } 123 | } 124 | .td-name{ 125 | font-weight: $font-weight-normal; 126 | font-size: 1.5em; 127 | small{ 128 | color: $dark-gray; 129 | font-size: 0.75em; 130 | font-weight: $font-weight-light; 131 | } 132 | } 133 | .td-number{ 134 | font-weight: $font-weight-light; 135 | font-size: $font-size-h4; 136 | } 137 | .td-name{ 138 | min-width: 200px; 139 | } 140 | .td-number{ 141 | text-align: right; 142 | min-width: 170px; 143 | 144 | small{ 145 | margin-right: 3px; 146 | } 147 | } 148 | 149 | .img-container{ 150 | width: 120px; 151 | max-height: 160px; 152 | overflow: hidden; 153 | display: block; 154 | 155 | img{ 156 | width: 100%; 157 | } 158 | } 159 | } 160 | 161 | .table-responsive{ 162 | overflow: scroll; 163 | padding-bottom: 10px; 164 | } 165 | 166 | #tables .table-responsive{ 167 | margin-bottom: 30px; 168 | } 169 | .table thead th{ 170 | border-bottom: none; 171 | } 172 | .table th{ 173 | border-top: none; 174 | } 175 | -------------------------------------------------------------------------------- /src/assets/scss/now-ui-dashboard/_typography.scss: -------------------------------------------------------------------------------- 1 | button, 2 | input, 3 | optgroup, 4 | select, 5 | textarea{ 6 | font-family: $sans-serif-family; 7 | } 8 | h1,h2,h3,h4,h5,h6{ 9 | font-weight: $font-weight-normal; 10 | } 11 | 12 | a{ 13 | color: $primary-color; 14 | &:hover, 15 | &:focus{ 16 | color: $primary-color; 17 | } 18 | } 19 | h1, .h1 { 20 | font-size: $font-size-h1; 21 | line-height: 1.15; 22 | margin-bottom: $margin-base-vertical * 2; 23 | 24 | small{ 25 | font-weight: $font-weight-bold; 26 | text-transform: uppercase; 27 | opacity: .8; 28 | } 29 | } 30 | h2, .h2{ 31 | font-size: $font-size-h2; 32 | margin-bottom: $margin-base-vertical * 2; 33 | } 34 | h3, .h3{ 35 | font-size: $font-size-h3; 36 | margin-bottom: $margin-base-vertical * 2; 37 | line-height: 1.4em; 38 | } 39 | h4, .h4{ 40 | font-size: $font-size-h4; 41 | line-height: 1.45em; 42 | margin-top: $margin-base-vertical * 2; 43 | margin-bottom: $margin-base-vertical; 44 | 45 | & + .category, 46 | &.title + .category{ 47 | margin-top: -10px; 48 | } 49 | } 50 | h5, .h5 { 51 | font-size: $font-size-h5; 52 | line-height: 1.4em; 53 | margin-bottom: 15px; 54 | } 55 | h6, .h6{ 56 | font-size: $font-size-h6; 57 | font-weight: $font-weight-bold; 58 | text-transform: uppercase; 59 | } 60 | p{ 61 | &.description{ 62 | font-size: 1.14em; 63 | } 64 | } 65 | 66 | // i.fa{ 67 | // font-size: 18px; 68 | // position: relative; 69 | // top: 1px; 70 | // } 71 | 72 | .title{ 73 | font-weight: $font-weight-bold; 74 | 75 | &.title-up{ 76 | text-transform: uppercase; 77 | 78 | a{ 79 | color: $black-color; 80 | text-decoration: none; 81 | } 82 | } 83 | & + .category{ 84 | margin-top: -10px; 85 | } 86 | } 87 | 88 | .description, 89 | .card-description, 90 | .footer-big p, 91 | .card .footer .stats{ 92 | color: $dark-gray; 93 | font-weight: $font-weight-light; 94 | } 95 | .category, 96 | .card-category{ 97 | text-transform: capitalize; 98 | font-weight: $font-weight-normal; 99 | color: $dark-gray; 100 | font-size: $font-size-mini; 101 | } 102 | 103 | .card-category{ 104 | font-size: $font-size-h6; 105 | } 106 | 107 | .text-primary, 108 | a.text-primary:focus, a.text-primary:hover { 109 | color: $brand-primary !important; 110 | } 111 | .text-info, 112 | a.text-info:focus, a.text-info:hover { 113 | color: $brand-info !important; 114 | } 115 | .text-success, 116 | a.text-success:focus, a.text-success:hover { 117 | color: $brand-success !important; 118 | } 119 | .text-warning, 120 | a.text-warning:focus, a.text-warning:hover { 121 | color: $brand-warning !important; 122 | } 123 | .text-danger, 124 | a.text-danger:focus, a.text-danger:hover { 125 | color: $brand-danger !important; 126 | } 127 | 128 | .text-gray, 129 | a.text-gray:focus, a.text-gray:hover{ 130 | color: $light-gray !important; 131 | } 132 | 133 | 134 | .blockquote{ 135 | border-left: none; 136 | border: 1px solid $default-color; 137 | padding: 20px; 138 | font-size: $font-size-blockquote; 139 | line-height: 1.8; 140 | 141 | small{ 142 | color: $default-color; 143 | font-size: $font-size-small; 144 | text-transform: uppercase; 145 | } 146 | 147 | &.blockquote-primary{ 148 | border-color: $primary-color; 149 | color: $primary-color; 150 | 151 | small{ 152 | color: $primary-color; 153 | } 154 | } 155 | 156 | &.blockquote-danger{ 157 | border-color: $danger-color; 158 | color: $danger-color; 159 | 160 | small{ 161 | color: $danger-color; 162 | } 163 | } 164 | 165 | &.blockquote-white{ 166 | border-color: $opacity-8; 167 | color: $white-color; 168 | 169 | small{ 170 | color: $opacity-8; 171 | } 172 | } 173 | } 174 | -------------------------------------------------------------------------------- /src/assets/scss/now-ui-dashboard/cards/_card-chart.scss: -------------------------------------------------------------------------------- 1 | .card-chart { 2 | .card-header{ 3 | .card-title{ 4 | margin-top: 10px; 5 | margin-bottom: 0; 6 | } 7 | .card-category{ 8 | margin-bottom: 5px; 9 | } 10 | } 11 | 12 | .table{ 13 | margin-bottom: 0; 14 | 15 | td{ 16 | border-top: none; 17 | border-bottom: 1px solid #e9ecef; 18 | } 19 | } 20 | 21 | .card-progress { 22 | margin-top: 30px; 23 | } 24 | 25 | .chart-area { 26 | height: 190px; 27 | width: calc(100% + 30px); 28 | margin-left: -15px; 29 | margin-right: -15px; 30 | } 31 | .card-footer { 32 | margin-top: 15px; 33 | 34 | .stats{ 35 | color: $dark-gray; 36 | } 37 | } 38 | 39 | .dropdown{ 40 | position: absolute; 41 | right: 20px; 42 | top: 20px; 43 | 44 | .btn{ 45 | margin: 0; 46 | } 47 | } 48 | } 49 | -------------------------------------------------------------------------------- /src/assets/scss/now-ui-dashboard/cards/_card-map.scss: -------------------------------------------------------------------------------- 1 | .map{ 2 | height: 500px; 3 | } 4 | -------------------------------------------------------------------------------- /src/assets/scss/now-ui-dashboard/cards/_card-plain.scss: -------------------------------------------------------------------------------- 1 | 2 | .card-plain{ 3 | background: transparent; 4 | box-shadow: none; 5 | 6 | .card-header, 7 | .card-footer{ 8 | margin-left: 0; 9 | margin-right: 0; 10 | background-color: transparent; 11 | } 12 | 13 | &:not(.card-subcategories).card-body{ 14 | padding-left: 0; 15 | padding-right: 0; 16 | } 17 | } 18 | -------------------------------------------------------------------------------- /src/assets/scss/now-ui-dashboard/cards/_card-user.scss: -------------------------------------------------------------------------------- 1 | .card-user{ 2 | .image{ 3 | height: 120px; 4 | } 5 | 6 | .author{ 7 | text-align: center; 8 | text-transform: none; 9 | margin-top: -77px; 10 | 11 | a + p.description{ 12 | margin-top: -7px; 13 | } 14 | } 15 | 16 | .avatar{ 17 | width: 124px; 18 | height: 124px; 19 | border: 1px solid $white-color; 20 | position: relative; 21 | } 22 | 23 | .card-body{ 24 | min-height: 240px; 25 | } 26 | 27 | hr{ 28 | margin: 5px 15px; 29 | } 30 | 31 | .button-container{ 32 | margin-bottom: 6px; 33 | text-align: center; 34 | } 35 | } 36 | -------------------------------------------------------------------------------- /src/assets/scss/now-ui-dashboard/mixins/_buttons.scss: -------------------------------------------------------------------------------- 1 | // Mixin for generating new styles 2 | @mixin btn-styles($btn-color, $btn-states-color) { 3 | background-color: $btn-color; 4 | 5 | &:hover, 6 | &:focus, 7 | &:not(:disabled):not(.disabled):active, 8 | &:not(:disabled):not(.disabled).active, 9 | &:not(:disabled):not(.disabled):active:focus, 10 | &:not(:disabled):not(.disabled).active:focus, 11 | &:active:hover, 12 | &.active:hover, 13 | .show > &.dropdown-toggle, 14 | .show > &.dropdown-toggle:focus, 15 | .show > &.dropdown-toggle:hover { 16 | background-color: $btn-states-color; 17 | color: $white-color; 18 | box-shadow: none; 19 | } 20 | 21 | &:not([data-action]):hover{ 22 | box-shadow: 0 3px 8px 0 rgba(0,0,0, 0.17); 23 | } 24 | 25 | &.disabled, 26 | &:disabled, 27 | &[disabled], 28 | fieldset[disabled] & { 29 | &, 30 | &:hover, 31 | &:focus, 32 | &.focus, 33 | &:active, 34 | &.active { 35 | background-color: $btn-color; 36 | border-color: $btn-color; 37 | } 38 | } 39 | 40 | // btn-neutral style 41 | @if $btn-color == $white-color{ 42 | color: $primary-color; 43 | 44 | &.btn-danger{ 45 | color: $danger-color; 46 | 47 | &:hover, 48 | &:focus, 49 | &:active, 50 | &:active:focus{ 51 | color: $danger-states-color; 52 | } 53 | } 54 | 55 | &.btn-info{ 56 | color: $info-color; 57 | 58 | &:hover, 59 | &:focus, 60 | &:active, 61 | &:active:focus{ 62 | color: $info-states-color; 63 | } 64 | } 65 | 66 | &.btn-warning{ 67 | color: $warning-color; 68 | 69 | &:hover, 70 | &:focus, 71 | &:active, 72 | &:active:focus{ 73 | color: $warning-states-color; 74 | } 75 | } 76 | 77 | &.btn-success{ 78 | color: $success-color; 79 | 80 | &:hover, 81 | &:focus, 82 | &:active, 83 | &:active:focus{ 84 | color: $success-states-color; 85 | } 86 | } 87 | 88 | &.btn-default{ 89 | color: $default-color; 90 | 91 | &:hover, 92 | &:focus, 93 | &:active, 94 | &:active:focus{ 95 | color: $default-states-color; 96 | } 97 | } 98 | 99 | &.active, 100 | &:active, 101 | &:active:focus, 102 | &:active:hover, 103 | &.active:focus, 104 | &.active:hover, 105 | .show > &.dropdown-toggle, 106 | .show > &.dropdown-toggle:focus, 107 | .show > &.dropdown-toggle:hover { 108 | background-color: $white-color; 109 | color: $primary-states-color; 110 | box-shadow: none; 111 | } 112 | 113 | &:hover, 114 | &:focus{ 115 | color: $primary-states-color; 116 | 117 | &:not(.nav-link){ 118 | box-shadow: none; 119 | } 120 | 121 | } 122 | 123 | } @else { 124 | color: $white-color; 125 | } 126 | 127 | &.btn-simple{ 128 | color: $btn-color; 129 | border-color: $btn-color; 130 | 131 | &:hover, 132 | &:focus, 133 | &:active{ 134 | background-color: $transparent-bg; 135 | color: $btn-states-color; 136 | border-color: $btn-states-color; 137 | box-shadow: none; 138 | } 139 | } 140 | 141 | &.btn-link{ 142 | color: $btn-color; 143 | 144 | &:hover, 145 | &:focus, 146 | &:active{ 147 | background-color: $transparent-bg; 148 | color: $btn-states-color; 149 | text-decoration: none; 150 | box-shadow: none; 151 | } 152 | } 153 | } 154 | 155 | 156 | @mixin btn-size($padding-vertical, $padding-horizontal, $font-size, $border){ 157 | font-size: $font-size; 158 | border-radius: $border; 159 | padding: $padding-vertical $padding-horizontal; 160 | 161 | &.btn-simple{ 162 | padding: $padding-vertical - 1 $padding-horizontal - 1; 163 | } 164 | 165 | } 166 | -------------------------------------------------------------------------------- /src/assets/scss/now-ui-dashboard/mixins/_cards.scss: -------------------------------------------------------------------------------- 1 | @mixin icon-color($color) { 2 | box-shadow: 0px 9px 30px -6px $color; 3 | color: $color; 4 | } 5 | -------------------------------------------------------------------------------- /src/assets/scss/now-ui-dashboard/mixins/_dropdown.scss: -------------------------------------------------------------------------------- 1 | @mixin dropdown-colors($brand-color, $dropdown-header-color, $dropdown-color, $background-color ) { 2 | background-color: $brand-color; 3 | 4 | &:before{ 5 | color: $brand-color; 6 | } 7 | 8 | .dropdown-header:not([href]):not([tabindex]){ 9 | color: $dropdown-header-color; 10 | } 11 | 12 | .dropdown-item{ 13 | color: $dropdown-color; 14 | 15 | &:hover, 16 | &:focus{ 17 | background-color: $background-color; 18 | } 19 | } 20 | 21 | .dropdown-divider{ 22 | background-color: $background-color; 23 | } 24 | } 25 | -------------------------------------------------------------------------------- /src/assets/scss/now-ui-dashboard/mixins/_inputs.scss: -------------------------------------------------------------------------------- 1 | @mixin input-size($padding-vertical, $padding-horizontal){ 2 | padding: $padding-vertical $padding-horizontal; 3 | } 4 | 5 | @mixin form-control-placeholder($color, $opacity){ 6 | .form-control::-moz-placeholder{ 7 | color: $color; 8 | @include opacity(1); 9 | } 10 | .form-control:-moz-placeholder{ 11 | color: $color; 12 | @include opacity(1); 13 | } 14 | .form-control::-webkit-input-placeholder{ 15 | color: $color; 16 | @include opacity(1); 17 | } 18 | .form-control:-ms-input-placeholder{ 19 | color: $color; 20 | @include opacity(1); 21 | } 22 | } 23 | 24 | @mixin placeholder() { 25 | &::-moz-placeholder {@content; } // Firefox 26 | &:-ms-input-placeholder {@content; } // Internet Explorer 10+ 27 | &::-webkit-input-placeholder {@content; } // Safari and Chrome 28 | } 29 | 30 | @mixin light-form(){ 31 | border-radius: 0; 32 | border:0; 33 | padding: 0; 34 | background-color: transparent; 35 | 36 | } 37 | 38 | 39 | @mixin form-control-lg-padding($padding-vertical, $padding-horizontal) { 40 | .form-group.no-border.form-control-lg, 41 | .input-group.no-border.form-control-lg{ 42 | .input-group-append .input-group-text{ 43 | padding: $padding-vertical 0 $padding-vertical $padding-horizontal; 44 | } 45 | 46 | .form-control{ 47 | padding: $padding-vertical $padding-horizontal; 48 | 49 | & + .input-group-prepend .input-group-text, 50 | & + .input-group-append .input-group-text{ 51 | padding: $padding-vertical $padding-horizontal $padding-vertical 0; 52 | } 53 | } 54 | } 55 | 56 | .form-group.form-control-lg, 57 | .input-group.form-control-lg{ 58 | .form-control{ 59 | padding: $padding-vertical - 1 $padding-horizontal - 1; 60 | 61 | & + .input-group-prepend .input-group-text, 62 | & + .input-group-append .input-group-text{ 63 | padding: $padding-vertical - 1 $padding-horizontal - 1 $padding-vertical - 1 0; 64 | } 65 | } 66 | 67 | .input-group-prepend .input-group-text, 68 | .input-group-append .input-group-text{ 69 | padding: $padding-vertical - 1 0 $padding-vertical $padding-horizontal - 1; 70 | 71 | & + .form-control{ 72 | padding: $padding-vertical $padding-horizontal - 1 $padding-vertical $padding-horizontal - 3; 73 | } 74 | } 75 | } 76 | } 77 | 78 | 79 | 80 | @mixin input-base-padding($padding-vertical, $padding-horizontal) { 81 | .form-group.no-border, 82 | .input-group.no-border{ 83 | .form-control{ 84 | padding: $padding-vertical $padding-horizontal; 85 | 86 | & + .input-group-prepend .input-group-text, 87 | & + .input-group-append .input-group-text{ 88 | padding: $padding-vertical $padding-horizontal $padding-vertical 0; 89 | } 90 | } 91 | 92 | .input-group-prepend .input-group-text, 93 | .input-group-append .input-group-text{ 94 | padding: $padding-vertical 0 $padding-vertical $padding-horizontal; 95 | } 96 | } 97 | 98 | .form-group, 99 | .input-group{ 100 | .form-control{ 101 | padding: $padding-vertical - 1 $padding-horizontal - 1 $padding-vertical - 1 $padding-horizontal - 1; 102 | 103 | & + .input-group-prepend .input-group-text, 104 | & + .input-group-append .input-group-text{ 105 | padding: $padding-vertical - 1 $padding-horizontal - 1 $padding-vertical - 1 0; 106 | } 107 | } 108 | 109 | .input-group-prepend .input-group-text, 110 | .input-group-append .input-group-text{ 111 | padding: $padding-vertical - 1 0 $padding-vertical - 1 $padding-horizontal - 1; 112 | 113 | & + .form-control, 114 | & ~ .form-control{ 115 | padding:$padding-vertical - 1 $padding-horizontal $padding-vertical $padding-horizontal - 3; 116 | } 117 | } 118 | } 119 | } 120 | 121 | 122 | //color1 = $opacity-5 123 | //color2 = $opacity-8 124 | //color3 = $white-color 125 | //color4 = $transparent-bg 126 | //color5 = $opacity-1 127 | //color6 = $opacity-2 128 | 129 | 130 | @mixin input-coloured-bg($color1, $color2, $color3, $color4, $color5, $color6) { 131 | @include form-control-placeholder(darken($color2, 8%), 1); 132 | 133 | .form-control{ 134 | border-color: $color1; 135 | color: $color2; 136 | 137 | &:focus{ 138 | border-color: $color3; 139 | background-color: $color4; 140 | color: $color3; 141 | } 142 | } 143 | 144 | .has-success, 145 | .has-danger{ 146 | &:after{ 147 | color: $color3; 148 | } 149 | } 150 | 151 | .has-danger{ 152 | .form-control{ 153 | background-color: $color4; 154 | } 155 | } 156 | 157 | .input-group-prepend .input-group-text, 158 | .input-group-append .input-group-text{ 159 | background-color: $color4; 160 | border-color: $color1; 161 | color: $color2; 162 | } 163 | 164 | .input-group-focus{ 165 | .input-group-prepend .input-group-text, 166 | .input-group-append .input-group-text{ 167 | background-color: $color4; 168 | border-color: $color3; 169 | color: $color3; 170 | } 171 | } 172 | 173 | .form-group.no-border, 174 | .input-group.no-border{ 175 | .form-control{ 176 | background-color: $color5; 177 | color: $color2; 178 | 179 | &:focus, 180 | &:active, 181 | &:active{ 182 | background-color: $color6; 183 | color: $color3; 184 | } 185 | } 186 | 187 | .form-control + .input-group-prepend .input-group-text, 188 | .form-control + .input-group-append .input-group-text{ 189 | background-color: $color5; 190 | 191 | &:focus, 192 | &:active, 193 | &:active{ 194 | background-color: $color6; 195 | color: $color3; 196 | } 197 | } 198 | 199 | .form-control{ 200 | &:focus{ 201 | & + .input-group-prepend .input-group-text, 202 | & + .input-group-append .input-group-text{ 203 | background-color: $color6; 204 | color: $color3; 205 | } 206 | } 207 | } 208 | 209 | .input-group-prepend .input-group-text, 210 | .input-group-append .input-group-text{ 211 | background-color: $color5; 212 | border: none; 213 | color: $color2; 214 | } 215 | 216 | &.input-group-focus{ 217 | .input-group-prepend .input-group-text, 218 | .input-group-append .input-group-text{ 219 | background-color: $color6; 220 | color: $color3; 221 | } 222 | } 223 | } 224 | } 225 | -------------------------------------------------------------------------------- /src/assets/scss/now-ui-dashboard/mixins/_page-header.scss: -------------------------------------------------------------------------------- 1 | @mixin linear-gradient($color1, $color2){ 2 | background: $color1; /* For browsers that do not support gradients */ 3 | background: -webkit-linear-gradient(90deg, $color1 , $color2); /* For Safari 5.1 to 6.0 */ 4 | background: -o-linear-gradient(90deg, $color1, $color2); /* For Opera 11.1 to 12.0 */ 5 | background: -moz-linear-gradient(90deg, $color1, $color2); /* For Firefox 3.6 to 15 */ 6 | background: linear-gradient(0deg, $color1 , $color2); /* Standard syntax */ 7 | } 8 | -------------------------------------------------------------------------------- /src/assets/scss/now-ui-dashboard/mixins/_transparency.scss: -------------------------------------------------------------------------------- 1 | // Opacity 2 | 3 | @mixin opacity($opacity) { 4 | opacity: $opacity; 5 | // IE8 filter 6 | $opacity-ie: ($opacity * 100); 7 | filter: #{alpha(opacity=$opacity-ie)}; 8 | } 9 | -------------------------------------------------------------------------------- /src/assets/scss/now-ui-dashboard/mixins/_vendor-prefixes.scss: -------------------------------------------------------------------------------- 1 | @mixin box-shadow($shadow...) { 2 | -webkit-box-shadow: $shadow; // iOS <4.3 & Android <4.1 3 | box-shadow: $shadow; 4 | } 5 | 6 | @mixin transition-input-focus-color() { 7 | -webkit-transition: color 0.3s ease-in-out, border-color 0.3s ease-in-out, background-color 0.3s ease-in-out; 8 | -moz-transition: color 0.3s ease-in-out, border-color 0.3s ease-in-out, background-color 0.3s ease-in-out; 9 | -o-transition: color 0.3s ease-in-out, border-color 0.3s ease-in-out, background-color 0.3s ease-in-out; 10 | -ms-transition: color 0.3s ease-in-out, border-color 0.3s ease-in-out, background-color 0.3s ease-in-out; 11 | transition: color 0.3s ease-in-out, border-color 0.3s ease-in-out, background-color 0.3s ease-in-out; 12 | } 13 | 14 | 15 | @mixin transition($time, $type){ 16 | -webkit-transition: all $time $type; 17 | -moz-transition: all $time $type; 18 | -o-transition: all $time $type; 19 | -ms-transition: all $time $type; 20 | transition: all $time $type; 21 | } 22 | 23 | @mixin rotate-180(){ 24 | filter: progid:DXImageTransform.Microsoft.BasicImage(rotation=2); 25 | -webkit-transform: rotate(180deg); 26 | -ms-transform: rotate(180deg); 27 | transform: rotate(180deg); 28 | } 29 | 30 | 31 | @mixin transform-translate-x($value){ 32 | -webkit-transform: translate3d($value, 0, 0); 33 | -moz-transform: translate3d($value, 0, 0); 34 | -o-transform: translate3d($value, 0, 0); 35 | -ms-transform: translate3d($value, 0, 0); 36 | transform: translate3d($value, 0, 0); 37 | } 38 | 39 | @mixin transform-translate-y($value){ 40 | -webkit-transform: translate3d(0,$value,0); 41 | -moz-transform: translate3d(0,$value,0); 42 | -o-transform: translate3d(0,$value,0); 43 | -ms-transform: translate3d(0,$value,0); 44 | transform: translate3d(0,$value,0); 45 | } 46 | 47 | @mixin transform-translate-y-dropdown($value) { 48 | -webkit-transform: translate3d(0,$value,0) !important; 49 | -moz-transform: translate3d(0,$value,0) !important; 50 | -o-transform: translate3d(0,$value,0) !important; 51 | -ms-transform: translate3d(0,$value,0) !important; 52 | transform: translate3d(0,$value,0) !important; 53 | } 54 | 55 | @mixin icon-gradient($color, $bottomColor: #000){ 56 | background: $color; 57 | background: -webkit-linear-gradient($color 0%, $bottomColor 80%); 58 | background: -o-linear-gradient($color 0%, $bottomColor 80%); 59 | background: -moz-linear-gradient($color 0%, $bottomColor 80%); 60 | background: linear-gradient($color 0%, $bottomColor 80%); 61 | } 62 | 63 | @mixin sidebar-color($color){ 64 | &:after{ 65 | background: $color; 66 | } 67 | 68 | .nav li.active > a{ 69 | color: $color; 70 | 71 | i{ 72 | color: $color; 73 | } 74 | } 75 | } 76 | 77 | @mixin bar-animation($type){ 78 | -webkit-animation: $type 500ms linear 0s; 79 | -moz-animation: $type 500ms linear 0s; 80 | animation: $type 500ms 0s; 81 | -webkit-animation-fill-mode: forwards; 82 | -moz-animation-fill-mode: forwards; 83 | animation-fill-mode: forwards; 84 | } 85 | 86 | @mixin topbar-x-rotation(){ 87 | @keyframes topbar-x { 88 | 0% {top: 0px; transform: rotate(0deg); } 89 | 45% {top: 6px; transform: rotate(145deg); } 90 | 75% {transform: rotate(130deg); } 91 | 100% {transform: rotate(135deg); } 92 | } 93 | @-webkit-keyframes topbar-x { 94 | 0% {top: 0px; -webkit-transform: rotate(0deg); } 95 | 45% {top: 6px; -webkit-transform: rotate(145deg); } 96 | 75% {-webkit-transform: rotate(130deg); } 97 | 100% { -webkit-transform: rotate(135deg); } 98 | } 99 | @-moz-keyframes topbar-x { 100 | 0% {top: 0px; -moz-transform: rotate(0deg); } 101 | 45% {top: 6px; -moz-transform: rotate(145deg); } 102 | 75% {-moz-transform: rotate(130deg); } 103 | 100% { -moz-transform: rotate(135deg); } 104 | } 105 | } 106 | 107 | @mixin topbar-back-rotation(){ 108 | @keyframes topbar-back { 109 | 0% { top: 6px; transform: rotate(135deg); } 110 | 45% { transform: rotate(-10deg); } 111 | 75% { transform: rotate(5deg); } 112 | 100% { top: 0px; transform: rotate(0); } 113 | } 114 | 115 | @-webkit-keyframes topbar-back { 116 | 0% { top: 6px; -webkit-transform: rotate(135deg); } 117 | 45% { -webkit-transform: rotate(-10deg); } 118 | 75% { -webkit-transform: rotate(5deg); } 119 | 100% { top: 0px; -webkit-transform: rotate(0); } 120 | } 121 | 122 | @-moz-keyframes topbar-back { 123 | 0% { top: 6px; -moz-transform: rotate(135deg); } 124 | 45% { -moz-transform: rotate(-10deg); } 125 | 75% { -moz-transform: rotate(5deg); } 126 | 100% { top: 0px; -moz-transform: rotate(0); } 127 | } 128 | } 129 | 130 | @mixin bottombar-x-rotation(){ 131 | @keyframes bottombar-x { 132 | 0% {bottom: 0px; transform: rotate(0deg);} 133 | 45% {bottom: 6px; transform: rotate(-145deg);} 134 | 75% {transform: rotate(-130deg);} 135 | 100% {transform: rotate(-135deg);} 136 | } 137 | @-webkit-keyframes bottombar-x { 138 | 0% {bottom: 0px; -webkit-transform: rotate(0deg);} 139 | 45% {bottom: 6px; -webkit-transform: rotate(-145deg);} 140 | 75% {-webkit-transform: rotate(-130deg);} 141 | 100% {-webkit-transform: rotate(-135deg);} 142 | } 143 | @-moz-keyframes bottombar-x { 144 | 0% {bottom: 0px; -moz-transform: rotate(0deg);} 145 | 45% {bottom: 6px; -moz-transform: rotate(-145deg);} 146 | 75% {-moz-transform: rotate(-130deg);} 147 | 100% {-moz-transform: rotate(-135deg);} 148 | } 149 | } 150 | 151 | @mixin bottombar-back-rotation{ 152 | @keyframes bottombar-back { 153 | 0% { bottom: 6px;transform: rotate(-135deg);} 154 | 45% { transform: rotate(10deg);} 155 | 75% { transform: rotate(-5deg);} 156 | 100% { bottom: 0px;transform: rotate(0);} 157 | } 158 | @-webkit-keyframes bottombar-back { 159 | 0% {bottom: 6px;-webkit-transform: rotate(-135deg);} 160 | 45% {-webkit-transform: rotate(10deg);} 161 | 75% {-webkit-transform: rotate(-5deg);} 162 | 100% {bottom: 0px;-webkit-transform: rotate(0);} 163 | } 164 | @-moz-keyframes bottombar-back { 165 | 0% {bottom: 6px;-moz-transform: rotate(-135deg);} 166 | 45% {-moz-transform: rotate(10deg);} 167 | 75% {-moz-transform: rotate(-5deg);} 168 | 100% {bottom: 0px;-moz-transform: rotate(0);} 169 | } 170 | 171 | } 172 | 173 | 174 | @mixin nc-rotate($degrees, $rotation) { 175 | filter: progid:DXImageTransform.Microsoft.BasicImage(rotation=#{$rotation}); 176 | -webkit-transform: rotate($degrees); 177 | -moz-transform: rotate($degrees); 178 | -ms-transform: rotate($degrees); 179 | -o-transform: rotate($degrees); 180 | transform: rotate($degrees); 181 | } 182 | 183 | @mixin nc-flip($horiz, $vert, $rotation) { 184 | filter: progid:DXImageTransform.Microsoft.BasicImage(rotation=#{$rotation}); 185 | -webkit-transform: scale($horiz, $vert); 186 | -moz-transform: scale($horiz, $vert); 187 | -ms-transform: scale($horiz, $vert); 188 | -o-transform: scale($horiz, $vert); 189 | transform: scale($horiz, $vert); 190 | } 191 | @mixin panel-gradient($color) { 192 | background: $color; /* fallback for old browsers */ 193 | background: linear-gradient(160deg, $color 0%, darken($black-color,5) 100%); 194 | background-size: 105%; 195 | } 196 | -------------------------------------------------------------------------------- /src/assets/scss/now-ui-dashboard/plugins/_plugin-animate-bootstrap-notify.scss: -------------------------------------------------------------------------------- 1 | 2 | .toast-container{ 3 | width: 100%; 4 | 5 | .toast-close-button { 6 | font-weight: 300; 7 | text-shadow: none; 8 | position: absolute; 9 | right: 10px; 10 | top: 50%; 11 | margin-top: -14px; 12 | width: 25px; 13 | height: 25px; 14 | 15 | &:focus{ 16 | outline: none; 17 | } 18 | 19 | &:hover{ 20 | opacity: 1; 21 | color: $white-color; 22 | } 23 | 24 | & > span { 25 | display: none; 26 | } 27 | 28 | &:before{ 29 | display: block; 30 | display: inline-block; 31 | font: normal normal normal 14px/1 'Nucleo Outline'; 32 | font-size: inherit; 33 | speak: none; 34 | text-transform: none; 35 | -webkit-font-smoothing: antialiased; 36 | -moz-osx-font-smoothing: grayscale; 37 | font-size: 20px; 38 | content: "\ea53"; 39 | font-weight: 300; 40 | } 41 | } 42 | 43 | .alert{ 44 | z-index: 9999; 45 | width: 33.3333%; 46 | pointer-events: auto; 47 | 48 | .toast-message { 49 | max-width: 89%; 50 | } 51 | 52 | &.alert-with-icon{ 53 | .now-ui-icons{ 54 | position: absolute; 55 | left: 24px; 56 | top: 50%; 57 | margin-top: -14px; 58 | font-size: 24px; 59 | } 60 | } 61 | } 62 | 63 | .toast-error{ 64 | background-image: none; 65 | } 66 | 67 | .toast-success{ 68 | background-image: none; 69 | } 70 | 71 | .toast-info{ 72 | background-image: none; 73 | } 74 | 75 | .toast-warning{ 76 | background-image: none; 77 | } 78 | } 79 | .toast-top-center, .toast-bottom-center{ 80 | .alert{ 81 | margin-left: auto; 82 | margin-right: auto; 83 | } 84 | } 85 | .toast-top-right, .toast-bottom-right{ 86 | .alert{ 87 | margin-left: auto; 88 | margin-right: 0; 89 | } 90 | } 91 | 92 | .toast-top-center{ 93 | top: 12px; 94 | } 95 | 96 | .toast-bottom-center{ 97 | bottom: 12px; 98 | } 99 | 100 | @media screen and (max-width: 767px) { 101 | .toast-container .alert{ 102 | width: 91.6666%; 103 | } 104 | } 105 | -------------------------------------------------------------------------------- /src/assets/scss/now-ui-dashboard/plugins/_plugin-perfect-scrollbar.scss: -------------------------------------------------------------------------------- 1 | /* perfect-scrollbar v0.6.13 */ 2 | .ps-container { 3 | -ms-touch-action: auto; 4 | touch-action: auto; 5 | overflow: hidden !important; 6 | -ms-overflow-style: none; } 7 | @supports (-ms-overflow-style: none) { 8 | .ps-container { 9 | overflow: auto !important; } } 10 | @media screen and (-ms-high-contrast: active), (-ms-high-contrast: none) { 11 | .ps-container { 12 | overflow: auto !important; } } 13 | .ps-container.ps-active-x > .ps-scrollbar-x-rail, 14 | .ps-container.ps-active-y > .ps-scrollbar-y-rail { 15 | display: block; 16 | background-color: transparent; } 17 | .ps-container.ps-in-scrolling.ps-x > .ps-scrollbar-x-rail { 18 | background-color: #eee; 19 | opacity: 0.9; } 20 | .ps-container.ps-in-scrolling.ps-x > .ps-scrollbar-x-rail > .ps-scrollbar-x { 21 | background-color: #999; 22 | height: 11px; } 23 | .ps-container.ps-in-scrolling.ps-y > .ps-scrollbar-y-rail { 24 | background-color: #eee; 25 | opacity: 0.9; } 26 | .ps-container.ps-in-scrolling.ps-y > .ps-scrollbar-y-rail > .ps-scrollbar-y { 27 | background-color: #999; 28 | width: 11px; } 29 | .ps-container > .ps-scrollbar-x-rail { 30 | display: none; 31 | position: absolute; 32 | /* please don't change 'position' */ 33 | opacity: 0; 34 | -webkit-transition: background-color .2s linear, opacity .2s linear; 35 | -o-transition: background-color .2s linear, opacity .2s linear; 36 | -moz-transition: background-color .2s linear, opacity .2s linear; 37 | transition: background-color .2s linear, opacity .2s linear; 38 | bottom: 0px; 39 | /* there must be 'bottom' for ps-scrollbar-x-rail */ 40 | height: 15px; } 41 | .ps-container > .ps-scrollbar-x-rail > .ps-scrollbar-x { 42 | position: absolute; 43 | /* please don't change 'position' */ 44 | background-color: #aaa; 45 | -webkit-border-radius: 6px; 46 | -moz-border-radius: 6px; 47 | border-radius: 6px; 48 | -webkit-transition: background-color .2s linear, height .2s linear, width .2s ease-in-out, -webkit-border-radius .2s ease-in-out; 49 | transition: background-color .2s linear, height .2s linear, width .2s ease-in-out, -webkit-border-radius .2s ease-in-out; 50 | -o-transition: background-color .2s linear, height .2s linear, width .2s ease-in-out, border-radius .2s ease-in-out; 51 | -moz-transition: background-color .2s linear, height .2s linear, width .2s ease-in-out, border-radius .2s ease-in-out, -moz-border-radius .2s ease-in-out; 52 | transition: background-color .2s linear, height .2s linear, width .2s ease-in-out, border-radius .2s ease-in-out; 53 | transition: background-color .2s linear, height .2s linear, width .2s ease-in-out, border-radius .2s ease-in-out, -webkit-border-radius .2s ease-in-out, -moz-border-radius .2s ease-in-out; 54 | bottom: 2px; 55 | /* there must be 'bottom' for ps-scrollbar-x */ 56 | height: 6px; } 57 | .ps-container > .ps-scrollbar-x-rail:hover > .ps-scrollbar-x, .ps-container > .ps-scrollbar-x-rail:active > .ps-scrollbar-x { 58 | height: 11px; } 59 | .ps-container > .ps-scrollbar-y-rail { 60 | display: none; 61 | position: absolute; 62 | /* please don't change 'position' */ 63 | opacity: 0; 64 | -webkit-transition: background-color .2s linear, opacity .2s linear; 65 | -o-transition: background-color .2s linear, opacity .2s linear; 66 | -moz-transition: background-color .2s linear, opacity .2s linear; 67 | transition: background-color .2s linear, opacity .2s linear; 68 | right: 0; 69 | /* there must be 'right' for ps-scrollbar-y-rail */ 70 | width: 15px; } 71 | .ps-container > .ps-scrollbar-y-rail > .ps-scrollbar-y { 72 | position: absolute; 73 | /* please don't change 'position' */ 74 | background-color: #aaa; 75 | -webkit-border-radius: 6px; 76 | -moz-border-radius: 6px; 77 | border-radius: 6px; 78 | -webkit-transition: background-color .2s linear, height .2s linear, width .2s ease-in-out, -webkit-border-radius .2s ease-in-out; 79 | transition: background-color .2s linear, height .2s linear, width .2s ease-in-out, -webkit-border-radius .2s ease-in-out; 80 | -o-transition: background-color .2s linear, height .2s linear, width .2s ease-in-out, border-radius .2s ease-in-out; 81 | -moz-transition: background-color .2s linear, height .2s linear, width .2s ease-in-out, border-radius .2s ease-in-out, -moz-border-radius .2s ease-in-out; 82 | transition: background-color .2s linear, height .2s linear, width .2s ease-in-out, border-radius .2s ease-in-out; 83 | transition: background-color .2s linear, height .2s linear, width .2s ease-in-out, border-radius .2s ease-in-out, -webkit-border-radius .2s ease-in-out, -moz-border-radius .2s ease-in-out; 84 | right: 2px; 85 | /* there must be 'right' for ps-scrollbar-y */ 86 | width: 6px; } 87 | .ps-container > .ps-scrollbar-y-rail:hover > .ps-scrollbar-y, .ps-container > .ps-scrollbar-y-rail:active > .ps-scrollbar-y { 88 | width: 11px; } 89 | .ps-container:hover.ps-in-scrolling.ps-x > .ps-scrollbar-x-rail { 90 | background-color: #eee; 91 | opacity: 0.9; } 92 | .ps-container:hover.ps-in-scrolling.ps-x > .ps-scrollbar-x-rail > .ps-scrollbar-x { 93 | background-color: #999; 94 | height: 11px; } 95 | .ps-container:hover.ps-in-scrolling.ps-y > .ps-scrollbar-y-rail { 96 | background-color: #eee; 97 | opacity: 0.9; } 98 | .ps-container:hover.ps-in-scrolling.ps-y > .ps-scrollbar-y-rail > .ps-scrollbar-y { 99 | background-color: #999; 100 | width: 11px; } 101 | .ps-container:hover > .ps-scrollbar-x-rail, 102 | .ps-container:hover > .ps-scrollbar-y-rail { 103 | opacity: 0.6; } 104 | .ps-container:hover > .ps-scrollbar-x-rail:hover { 105 | background-color: #eee; 106 | opacity: 0.9; } 107 | .ps-container:hover > .ps-scrollbar-x-rail:hover > .ps-scrollbar-x { 108 | background-color: #999; } 109 | .ps-container:hover > .ps-scrollbar-y-rail:hover { 110 | background-color: #eee; 111 | opacity: 0.9; } 112 | .ps-container:hover > .ps-scrollbar-y-rail:hover > .ps-scrollbar-y { 113 | background-color: #999; } 114 | -------------------------------------------------------------------------------- /src/environments/environment.prod.ts: -------------------------------------------------------------------------------- 1 | export const environment = { 2 | production: true 3 | }; 4 | -------------------------------------------------------------------------------- /src/environments/environment.ts: -------------------------------------------------------------------------------- 1 | // The file contents for the current environment will overwrite these during build. 2 | // The build system defaults to the dev environment which uses `environment.ts`, but if you do 3 | // `ng build --env=prod` then `environment.prod.ts` will be used instead. 4 | // The list of which env maps to which file can be found in `.angular-cli.json`. 5 | 6 | export const environment = { 7 | production: false 8 | }; 9 | -------------------------------------------------------------------------------- /src/favicon.ico: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/creativetimofficial/now-ui-dashboard-angular/267e394311c33006317423a92e2ec935df506259/src/favicon.ico -------------------------------------------------------------------------------- /src/index.html: -------------------------------------------------------------------------------- 1 | 18 | 19 | 20 | 21 | 22 | 23 | 24 | 25 | 26 | 27 | Now UI Dashboard Angular by Creative Tim 28 | 29 | 30 | 31 | 32 | 33 | 34 | 35 | 36 | 37 | 38 | 39 | 40 | 41 | 42 | 43 | 44 | 45 | 46 | -------------------------------------------------------------------------------- /src/main.ts: -------------------------------------------------------------------------------- 1 | /*! 2 | 3 | ========================================================= 4 | * Now UI Dashboard Angular - v1.4.0 5 | ========================================================= 6 | 7 | * Product Page: https://www.creative-tim.com/product/now-ui-dashboard-angular 8 | * Copyright 2020 Creative Tim (https://www.creative-tim.com) 9 | * Licensed under MIT (https://github.com/creativetimofficial/now-ui-dashboard-angular/blob/master/LICENSE.md) 10 | 11 | * Coded by Creative Tim 12 | 13 | ========================================================= 14 | 15 | * The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software. 16 | 17 | */ 18 | import { enableProdMode } from '@angular/core'; 19 | import { platformBrowserDynamic } from '@angular/platform-browser-dynamic'; 20 | 21 | import { AppModule } from './app/app.module'; 22 | import { environment } from './environments/environment'; 23 | import 'hammerjs'; 24 | 25 | if (environment.production) { 26 | enableProdMode(); 27 | } 28 | 29 | platformBrowserDynamic().bootstrapModule(AppModule); 30 | -------------------------------------------------------------------------------- /src/polyfills.ts: -------------------------------------------------------------------------------- 1 | /*************************************************************************************************** 2 | * Load `$localize` onto the global scope - used if i18n tags appear in Angular templates. 3 | */ 4 | import '@angular/localize/init'; 5 | /** 6 | * This file includes polyfills needed by Angular and is loaded before the app. 7 | * You can add your own extra polyfills to this file. 8 | * 9 | * This file is divided into 2 sections: 10 | * 1. Browser polyfills. These are applied before loading ZoneJS and are sorted by browsers. 11 | * 2. Application imports. Files imported after ZoneJS that should be loaded before your main 12 | * file. 13 | * 14 | * The current setup is for so-called "evergreen" browsers; the last versions of browsers that 15 | * automatically update themselves. This includes Safari >= 10, Chrome >= 55 (including Opera), 16 | * Edge >= 13 on the desktop, and iOS 10 and Chrome on mobile. 17 | * 18 | * Learn more in https://angular.io/docs/ts/latest/guide/browser-support.html 19 | */ 20 | 21 | /*************************************************************************************************** 22 | * BROWSER POLYFILLS 23 | */ 24 | 25 | /** IE9, IE10 and IE11 requires all of the following polyfills. **/ 26 | // import 'core-js/es6/symbol'; 27 | // import 'core-js/es6/object'; 28 | // import 'core-js/es6/function'; 29 | // import 'core-js/es6/parse-int'; 30 | // import 'core-js/es6/parse-float'; 31 | // import 'core-js/es6/number'; 32 | // import 'core-js/es6/math'; 33 | // import 'core-js/es6/string'; 34 | // import 'core-js/es6/date'; 35 | // import 'core-js/es6/array'; 36 | // import 'core-js/es6/regexp'; 37 | // import 'core-js/es6/map'; 38 | // import 'core-js/es6/set'; 39 | 40 | /** IE10 and IE11 requires the following for NgClass support on SVG elements */ 41 | import 'classlist.js'; // Run `npm install --save classlist.js`. 42 | 43 | /** IE10 and IE11 requires the following to support `@angular/animation`. */ 44 | import 'web-animations-js'; // Run `npm install --save webå-animations-js`. 45 | 46 | 47 | /** Evergreen browsers require these. **/ 48 | import 'core-js/es/reflect'; 49 | 50 | 51 | 52 | /** ALL Firefox browsers require the following to support `@angular/animation`. **/ 53 | import 'web-animations-js'; // Run `npm install --save web-animations-js`. 54 | 55 | 56 | 57 | /*************************************************************************************************** 58 | * Zone JS is required by Angular itself. 59 | */ 60 | import 'zone.js/dist/zone'; // Included with Angular CLI. 61 | 62 | 63 | 64 | /*************************************************************************************************** 65 | * APPLICATION IMPORTS 66 | */ 67 | 68 | /** 69 | * Date, currency, decimal and percent pipes. 70 | * Needed for: All but Chrome, Firefox, Edge, IE11 and Safari 10 71 | */ 72 | // import 'intl'; // Run `npm install --save intl`. 73 | -------------------------------------------------------------------------------- /src/styles.css: -------------------------------------------------------------------------------- 1 | /* You can add global styles to this file, and also import other style files */ 2 | -------------------------------------------------------------------------------- /src/test.ts: -------------------------------------------------------------------------------- 1 | // This file is required by karma.conf.js and loads recursively all the .spec and framework files 2 | 3 | import 'zone.js/dist/long-stack-trace-zone'; 4 | import 'zone.js/dist/proxy.js'; 5 | import 'zone.js/dist/sync-test'; 6 | import 'zone.js/dist/jasmine-patch'; 7 | import 'zone.js/dist/async-test'; 8 | import 'zone.js/dist/fake-async-test'; 9 | import { getTestBed } from '@angular/core/testing'; 10 | import { 11 | BrowserDynamicTestingModule, 12 | platformBrowserDynamicTesting 13 | } from '@angular/platform-browser-dynamic/testing'; 14 | 15 | // Unfortunately there's no typing for the `__karma__` variable. Just declare it as any. 16 | declare var __karma__: any; 17 | declare var require: any; 18 | 19 | // Prevent Karma from running prematurely. 20 | __karma__.loaded = function () {}; 21 | 22 | // First, initialize the Angular testing environment. 23 | getTestBed().initTestEnvironment( 24 | BrowserDynamicTestingModule, 25 | platformBrowserDynamicTesting() 26 | ); 27 | // Then we find all the tests. 28 | const context = require.context('./', true, /\.spec\.ts$/); 29 | // And load the modules. 30 | context.keys().map(context); 31 | // Finally, start Karma to run the tests. 32 | __karma__.start(); 33 | -------------------------------------------------------------------------------- /src/tsconfig.app.json: -------------------------------------------------------------------------------- 1 | { 2 | "extends": "../tsconfig.json", 3 | "compilerOptions": { 4 | "outDir": "../out-tsc/app", 5 | "module": "esnext", 6 | "baseUrl": "", 7 | "types": [], 8 | "target": "es5", 9 | "lib": [ 10 | "es2016", 11 | "dom" 12 | ], 13 | }, 14 | "exclude": [ 15 | "test.ts", 16 | "**/*.spec.ts" 17 | ] 18 | } 19 | -------------------------------------------------------------------------------- /src/tsconfig.spec.json: -------------------------------------------------------------------------------- 1 | { 2 | "extends": "../tsconfig.json", 3 | "compilerOptions": { 4 | "outDir": "../out-tsc/spec", 5 | "module": "commonjs", 6 | "target": "es5", 7 | "baseUrl": "", 8 | "types": [ 9 | "jasmine", 10 | "node" 11 | ] 12 | }, 13 | "files": [ 14 | "test.ts", 15 | "polyfills.ts" 16 | ], 17 | "include": [ 18 | "**/*.spec.ts", 19 | "**/*.d.ts" 20 | ] 21 | } 22 | -------------------------------------------------------------------------------- /src/typings.d.ts: -------------------------------------------------------------------------------- 1 | /* SystemJS module definition */ 2 | declare var module: NodeModule; 3 | interface NodeModule { 4 | id: string; 5 | } 6 | -------------------------------------------------------------------------------- /tsconfig.json: -------------------------------------------------------------------------------- 1 | { 2 | "compileOnSave": false, 3 | "compilerOptions": { 4 | "baseUrl": "./", 5 | "outDir": "./dist/out-tsc", 6 | "sourceMap": true, 7 | "declaration": false, 8 | "module": "es2015", 9 | "moduleResolution": "node", 10 | "emitDecoratorMetadata": true, 11 | "experimentalDecorators": true, 12 | "importHelpers": true, 13 | "target": "es5", 14 | "allowSyntheticDefaultImports": true, 15 | "typeRoots": [ 16 | "node_modules/@types" 17 | ], 18 | "lib": [ 19 | "es2018", 20 | "dom" 21 | ] 22 | } 23 | } 24 | -------------------------------------------------------------------------------- /tslint.json: -------------------------------------------------------------------------------- 1 | { 2 | "rulesDirectory": [ 3 | "codelyzer" 4 | ], 5 | "rules": { 6 | "arrow-return-shorthand": true, 7 | "callable-types": true, 8 | "class-name": true, 9 | "comment-format": [ 10 | true, 11 | "check-space" 12 | ], 13 | "curly": true, 14 | "deprecation": { 15 | "severity": "warn" 16 | }, 17 | "eofline": true, 18 | "forin": true, 19 | "import-blacklist": [ 20 | true, 21 | "rxjs/Rx" 22 | ], 23 | "import-spacing": true, 24 | "indent": [ 25 | true, 26 | "spaces" 27 | ], 28 | "interface-over-type-literal": true, 29 | "label-position": true, 30 | "max-line-length": [ 31 | true, 32 | 140 33 | ], 34 | "member-access": false, 35 | "member-ordering": [ 36 | true, 37 | { 38 | "order": [ 39 | "static-field", 40 | "instance-field", 41 | "static-method", 42 | "instance-method" 43 | ] 44 | } 45 | ], 46 | "no-arg": true, 47 | "no-bitwise": true, 48 | "no-console": [ 49 | true, 50 | "debug", 51 | "info", 52 | "time", 53 | "timeEnd", 54 | "trace" 55 | ], 56 | "no-construct": true, 57 | "no-debugger": true, 58 | "no-duplicate-super": true, 59 | "no-empty": false, 60 | "no-empty-interface": true, 61 | "no-eval": true, 62 | "no-inferrable-types": [ 63 | true, 64 | "ignore-params" 65 | ], 66 | "no-misused-new": true, 67 | "no-non-null-assertion": true, 68 | "no-redundant-jsdoc": true, 69 | "no-shadowed-variable": true, 70 | "no-string-literal": false, 71 | "no-string-throw": true, 72 | "no-switch-case-fall-through": true, 73 | "no-trailing-whitespace": true, 74 | "no-unnecessary-initializer": true, 75 | "no-unused-expression": true, 76 | "no-use-before-declare": true, 77 | "no-var-keyword": true, 78 | "object-literal-sort-keys": false, 79 | "one-line": [ 80 | true, 81 | "check-open-brace", 82 | "check-catch", 83 | "check-else", 84 | "check-whitespace" 85 | ], 86 | "prefer-const": true, 87 | "quotemark": [ 88 | true, 89 | "single" 90 | ], 91 | "radix": true, 92 | "semicolon": [ 93 | true, 94 | "always" 95 | ], 96 | "triple-equals": [ 97 | true, 98 | "allow-null-check" 99 | ], 100 | "typedef-whitespace": [ 101 | true, 102 | { 103 | "call-signature": "nospace", 104 | "index-signature": "nospace", 105 | "parameter": "nospace", 106 | "property-declaration": "nospace", 107 | "variable-declaration": "nospace" 108 | } 109 | ], 110 | "unified-signatures": true, 111 | "variable-name": false, 112 | "whitespace": [ 113 | true, 114 | "check-branch", 115 | "check-decl", 116 | "check-operator", 117 | "check-separator", 118 | "check-type" 119 | ], 120 | "no-output-on-prefix": true, 121 | "use-input-property-decorator": true, 122 | "use-output-property-decorator": true, 123 | "use-host-property-decorator": true, 124 | "no-input-rename": true, 125 | "no-output-rename": true, 126 | "use-life-cycle-interface": true, 127 | "use-pipe-transform-interface": true, 128 | "component-class-suffix": true, 129 | "directive-class-suffix": true 130 | } 131 | } 132 | --------------------------------------------------------------------------------