unknown 4 months ago
commit
854166ba68
70 changed files with 18741 additions and 0 deletions
  1. 14
    0
      .babelrc
  2. 9
    0
      .eslintrc
  3. 17
    0
      .gitignore
  4. 1
    0
      .nvmrc
  5. 87
    0
      CHANGELOG.md
  6. 21
    0
      LICENSE
  7. 148
    0
      README.md
  8. 90
    0
      package.json
  9. 5
    0
      postcss.config.js
  10. 0
    0
      src/fonts/.gitkeep
  11. BIN
      src/img/avatars/avatar-2.jpg
  12. BIN
      src/img/avatars/avatar-3.jpg
  13. BIN
      src/img/avatars/avatar-4.jpg
  14. BIN
      src/img/avatars/avatar-5.jpg
  15. BIN
      src/img/avatars/avatar.jpg
  16. BIN
      src/img/icons/icon-48x48.png
  17. BIN
      src/img/photos/unsplash-1.jpg
  18. BIN
      src/img/photos/unsplash-2.jpg
  19. BIN
      src/img/photos/unsplash-3.jpg
  20. 16
    0
      src/js/app.js
  21. 5
    0
      src/js/modules/bootstrap.js
  22. 5
    0
      src/js/modules/chartjs.js
  23. 8
    0
      src/js/modules/feather.js
  24. 4
    0
      src/js/modules/flatpickr.js
  25. 45
    0
      src/js/modules/sidebar.js
  26. 27
    0
      src/js/modules/theme.js
  27. 3
    0
      src/js/modules/vector-maps.js
  28. 317
    0
      src/scss/1-variables/_app.scss
  29. 24
    0
      src/scss/2-mixins/_button.scss
  30. 18
    0
      src/scss/3-components/_avatar.scss
  31. 25
    0
      src/scss/3-components/_buttons.scss
  32. 42
    0
      src/scss/3-components/_card.scss
  33. 26
    0
      src/scss/3-components/_chart.scss
  34. 16
    0
      src/scss/3-components/_content.scss
  35. 71
    0
      src/scss/3-components/_dropdown.scss
  36. 15
    0
      src/scss/3-components/_feather.scss
  37. 13
    0
      src/scss/3-components/_footer.scss
  38. 44
    0
      src/scss/3-components/_hamburger.scss
  39. 3
    0
      src/scss/3-components/_list-group.scss
  40. 12
    0
      src/scss/3-components/_main.scss
  41. 137
    0
      src/scss/3-components/_navbar.scss
  42. 14
    0
      src/scss/3-components/_reboot.scss
  43. 147
    0
      src/scss/3-components/_sidebar.scss
  44. 5
    0
      src/scss/3-components/_sizing.scss
  45. 16
    0
      src/scss/3-components/_stat.scss
  46. 13
    0
      src/scss/3-components/_tables.scss
  47. 21
    0
      src/scss/3-components/_type.scss
  48. 6
    0
      src/scss/3-components/_wrapper.scss
  49. 10
    0
      src/scss/4-utilities/_cursors.scss
  50. 104
    0
      src/scss/5-vendor/_flatpickr.scss
  51. 17
    0
      src/scss/5-vendor/_simplebar.scss
  52. 71
    0
      src/scss/app.scss
  53. 15229
    0
      static/css/app.css
  54. 1
    0
      static/css/app.css.map
  55. 0
    0
      static/fonts/.gitkeep
  56. BIN
      static/img/avatars/avatar-2.jpg
  57. BIN
      static/img/avatars/avatar-3.jpg
  58. BIN
      static/img/avatars/avatar-4.jpg
  59. BIN
      static/img/avatars/avatar-5.jpg
  60. BIN
      static/img/avatars/avatar.jpg
  61. BIN
      static/img/icons/icon-48x48.png
  62. BIN
      static/img/photos/unsplash-1.jpg
  63. BIN
      static/img/photos/unsplash-2.jpg
  64. BIN
      static/img/photos/unsplash-3.jpg
  65. 1173
    0
      static/index.html
  66. 3
    0
      static/js/app.js
  67. 514
    0
      static/js/app.js.LICENSE.txt
  68. 1
    0
      static/js/app.js.map
  69. 8
    0
      static/js/circle-progress.js
  70. 120
    0
      webpack.config.js

+ 14
- 0
.babelrc View File

@@ -0,0 +1,14 @@
1
+{
2
+  "presets": [
3
+    [
4
+      "@babel/preset-env",
5
+      {
6
+        "useBuiltIns": "usage",
7
+        "corejs": 2
8
+      }
9
+    ]
10
+  ],
11
+  "plugins": [
12
+    "@babel/syntax-dynamic-import"
13
+  ]
14
+}

+ 9
- 0
.eslintrc View File

@@ -0,0 +1,9 @@
1
+{
2
+  "parserOptions": {
3
+    "ecmaVersion": 2017,
4
+    "sourceType": "module"
5
+  },
6
+  "env": {
7
+    "es7": true
8
+  }
9
+}

+ 17
- 0
.gitignore View File

@@ -0,0 +1,17 @@
1
+# dependencies
2
+/node_modules
3
+/package-lock.json
4
+/yarn.lock
5
+
6
+# production
7
+/dist
8
+/_builder
9
+
10
+# misc
11
+.DS_Store
12
+.vscode/
13
+
14
+# logs
15
+npm-debug.log*
16
+yarn-debug.log*
17
+yarn-error.log*

+ 1
- 0
.nvmrc View File

@@ -0,0 +1 @@
1
+14.18.0

+ 87
- 0
CHANGELOG.md View File

@@ -0,0 +1,87 @@
1
+# Changelog
2
+
3
+All notable changes to this project will be documented in this file.
4
+
5
+## [3.1.0] 2021-09-29
6
+
7
+- Replace OptimizeCssAssetsPlugin with CssMinimizerPlugin
8
+- Remove HardSourceWebpackPlugin
9
+- Upgrade to Webpack 5.55.1
10
+- Upgrade to Bootstrap 5.1.1
11
+- Upgrade dependencies
12
+
13
+## [3.0.2] 2021-05-19
14
+
15
+- Add file structure to README.md
16
+- Add icons to dashboard (/index.html)
17
+- Add marketing page (/upgrade-to-pro.html)
18
+- Remove unused sass files
19
+- Remove unused dependencies
20
+- Various visual changes
21
+- Upgrade dependencies
22
+
23
+## [3.0.1] 2021-05-17
24
+
25
+- Fix Simplebar bug on auth pages
26
+- Upgrade to bootstrap@5.0.1
27
+- Upgrade dependencies
28
+
29
+## [3.0.0] 2021-05-12
30
+
31
+- Set Chart.js font family
32
+- Remove Moment.js dependency
33
+- Refactor sidebar JavaScript module
34
+- Various visual changes
35
+- Upgrade to bootstrap@5.0.0
36
+- Upgrade dependencies
37
+
38
+## [2.3.0] 2021-04-05
39
+
40
+- Add CDN to `README.md`
41
+- Upgrade to bootstrap@5.0.0-beta3
42
+- Upgrade dependencies
43
+
44
+## [2.2.0] 2021-02-25
45
+
46
+- Replace Inter font with CDN
47
+- Replace Font Awesome icons with Feather
48
+- Optimize bundle size
49
+- Bind `bootstrap` to window object
50
+- Update .nvmrc file
51
+- Upgrade to bootstrap@5.0.0-beta2
52
+- Upgrade dependencies
53
+
54
+## [2.1.0] 2020-11-07
55
+
56
+- Add Sign In page
57
+- Add Sign Up page
58
+- Replace `.close` with `.btn-close`
59
+- Upgrade to bootstrap@5.0.0-alpha2
60
+- Upgrade dependencies
61
+
62
+## [2.0.1] 2020-09-14
63
+
64
+- Fix console error on auth pages (#6)
65
+- Upgrade dependencies
66
+
67
+## [2.0.0] 2020-09-04
68
+
69
+- Upgrade to Bootstrap 5
70
+- Drop jQuery as dependency
71
+- Replace jvectormap-next with jsvectormap
72
+- Replace tempusdominus with flatpickr
73
+- Upgrade dependencies
74
+
75
+## [1.0.2] 2020-07-26
76
+
77
+- Fix issue with dropdown overflow on mobile
78
+- Upgrade dependencies
79
+
80
+## [1.0.1] 2020-05-25
81
+
82
+- Upgrade to latest Bootstrap (4.5.0)
83
+- Upgrade dependencies
84
+
85
+## [1.0.0] 2020-03-21
86
+
87
+- Initial release

+ 21
- 0
LICENSE View File

@@ -0,0 +1,21 @@
1
+The MIT License (MIT)
2
+
3
+Copyright (c) 2020 AdminKit Authors
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
13
+all 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
21
+THE SOFTWARE.

+ 148
- 0
README.md View File

@@ -0,0 +1,148 @@
1
+<p align="center">
2
+  <a href="https://github.com/adminkit/adminkit"><img src="https://adminkit.io/icons/icon-512x512.png" alt="AdminKit is an free & open-source HTML dashboard & admin template based on Bootstrap 5" width="96"></a>
3
+</p>
4
+
5
+<h3 align="center">AdminKit</h3>
6
+
7
+<p align="center">
8
+  AdminKit is an free & open-source HTML dashboard & admin template based on Bootstrap 5.
9
+</p>
10
+
11
+<p align="center">
12
+  <a href="https://www.npmjs.com/package/@adminkit/core" rel="nofollow"><img src="https://img.shields.io/npm/v/@adminkit/core" alt="NPM version"></a>
13
+  <a href="https://github.com/adminkit/adminkit/blob/master/LICENSE"><img src="https://img.shields.io/badge/license-MIT-blue.svg" alt="License"></a>
14
+  <a href="https://github.com/adminkit/adminkit/issues?q=is%3Aopen+is%3Aissue"><img src="https://img.shields.io/github/issues/adminkit/adminkit.svg" alt="GitHub issues open"></a>
15
+  <a href="https://github.com/adminkit/adminkit/issues?q=is%3Aissue+is%3Aclosed"><img src="https://img.shields.io/github/issues-closed-raw/adminkit/adminkit.svg" alt="GitHub issues closed"></a>
16
+  <a href="https://demo.adminkit.io/" rel="nofollow"><img src="https://img.shields.io/badge/demo-online-green.svg" alt="Live Demo"></a>
17
+  <a href="https://adminkit.io/#download"><img src="https://img.shields.io/static/v1?label=download&message=ZIP&color=green" alt="Download"></a>
18
+  <br>
19
+<a href="https://github.com/adminkit/adminkit"><img alt="GitHub stars" src="https://img.shields.io/github/stars/adminkit/adminkit?style=social"></a>
20
+</p>
21
+
22
+## Preview
23
+A professional Admin & Dashboard template based on Bootstrap 5 that comes with hundreds of UI components, forms, tables, charts, pages and icons. AdminKit **does not require jQuery** and neither does one of the 3rd party libraries AdminKit is using. [See demo](https://demo.adminkit.io/).
24
+
25
+<a href="https://demo.adminkit.io" target="_blank"><img src="https://assets.adminkit.io/banners/adminkit-bootstrap-5-admin-template.png" alt="AdminKit Demo"></a>
26
+
27
+## Features
28
+
29
+* **Customizable:** You don't need to be an expert to customize AdminKit. Our code is very readable and well documented.
30
+* **Fully Responsive:** With mobile, tablet & desktop support it doesn't matter what device you're using. AdminKit is responsive in all browsers.
31
+* **Cross-Browser:** Our themes are working perfectly with Chrome, Firefox, Safari, Opera, and Edge. We're working hard to support them.
32
+* **Clean Code:** We strictly follow Bootstrap's guidelines to make your integration as easy as possible. All code is handwritten.
33
+* **No jQuery:** AdminKit, and all third-party libraries used in the admin template, do not require jQuery as a dependency.
34
+* **Regular Updates:** From time to time you'll receive an update containing new components, improvements, and bugfixes.
35
+
36
+## Quick start
37
+
38
+### Download
39
+
40
+* Clone this repo `git clone https://github.com/adminkit/adminkit.git`
41
+* [Download from GitHub](https://github.com/adminkit/adminkit/archive/master.zip)
42
+* [Download from Website](https://adminkit.io/#download)
43
+
44
+### Build tools
45
+
46
+The theme includes a custom Webpack file, which can be used to quickly recompile and minify theme assets while developing or for deployment. You'll need to install Node.js before using Webpack.
47
+
48
+Once Node.js is installed, run npm install to install the rest of AdminKit's dependencies. All dependencies will be downloaded to the node_modules directory.
49
+
50
+```sh
51
+npm install
52
+```
53
+
54
+Now you're ready to modify the source files and generate new dist/ files. AdminKit uses webpack-dev-server to automatically detect file changes and start a local webserver at http://localhost:8080.
55
+
56
+```sh
57
+npm start
58
+```
59
+
60
+Compile, optimize, minify and uglify all source files to dist/ folder:
61
+
62
+```sh
63
+npm run build
64
+```
65
+
66
+## CDN support
67
+
68
+All files included in the `@adminkit/core` npm package are available over a CDN.
69
+
70
+**CSS:**
71
+
72
+```html
73
+<link rel="stylesheet" href="https://unpkg.com/@adminkit/core@latest/dist/css/app.css">
74
+```
75
+
76
+**Javascript:**
77
+
78
+```html
79
+<script src="https://unpkg.com/@adminkit/core@latest/dist/js/app.js"></script>
80
+```
81
+
82
+## File structure
83
+The package contains the following directories and files:
84
+
85
+```
86
+adminkit/
87
+├── .babelrc
88
+├── .eslintrc
89
+├── .nvmrc
90
+├── README.md
91
+├── package.json
92
+├── postcss.config.js
93
+├── webpack.config.js
94
+├── src/
95
+│   ├── fonts/
96
+│   ├── img/
97
+│   ├── js/
98
+│   │   ├── modules/
99
+│   │   └── app.js
100
+│   └── scss/
101
+│       ├── 1-variables/
102
+│       ├── 2-mixins/
103
+│       ├── 3-components/
104
+│       ├── 4-utilities/
105
+│       ├── 5-vendor/
106
+│       └── app.scss
107
+└── dist/
108
+    ├── css/
109
+    │   └── app.css
110
+    └── js/
111
+        └── app.js
112
+```
113
+
114
+## Browser Support
115
+
116
+| <img src="https://assets.adminkit.io/browsers/edge.png" alt="Edge" width="24px" height="24px" /><br/>Edge | <img src="https://assets.adminkit.io/browsers/firefox.png" alt="Firefox" width="24px" height="24px" /><br/>Firefox | <img src="https://assets.adminkit.io/browsers/chrome.png" alt="Chrome" width="24px" height="24px" /><br/>Chrome | <img src="https://assets.adminkit.io/browsers/safari.png" alt="Safari" width="24px" height="24px" /><br/>Safari | <img src="https://assets.adminkit.io/browsers/safari-ios.png" alt="iOS Safari" width="24px" height="24px" /><br/>iOS Safari |
117
+| --------- | --------- | --------- | --------- | --------- |
118
+| last version| last 2 versions| last 2 versions| last 2 versions| last 2 versions
119
+
120
+## Resources
121
+
122
+* [Demo](https://demo.adminkit.io/)
123
+* [Website](https://adminkit.io/)
124
+* [Documentation](https://adminkit.io/docs)
125
+* [Support](https://adminkit.io/support/)
126
+* [Affiliate Program](https://adminkit.io/affiliate-program)
127
+
128
+## Bugs and feature requests
129
+
130
+Found a bug or have a feature request? [Please open a new issue](https://github.com/adminkit/adminkit/issues/new).
131
+
132
+## Upgrade to PRO
133
+Get more power with AdminKit PRO, a premium variant of AdminKit, featuring hundreds of UI components, forms, tables, charts, pages, and icons.
134
+
135
+| Free Version        | [AdminKit PRO](https://adminkit.io/pricing/) |
136
+|---------------------|----------------------------------------------|
137
+| 15 Demo Pages       | ✔ 45+ Demo Pages                             |
138
+| 1 Plugin            | ✔ 10+ Plugins                                |
139
+| 1 Color Scheme      | ✔ 3 Color Schemes                            |
140
+|                     | ✔ All Bootstrap 5 Components                 |
141
+|                     | ✔ Dark Mode 🌙                               |
142
+|                     | ✔ Compact Sidebar                            |
143
+|                     | ✔ Calendar                                   |
144
+|                     | ✔ Advanced Forms                             |
145
+|                     | ✔ Drag and Drop                              |
146
+|                     | ✔ Toast Notifications                        |
147
+|                     | ✔ WYSIWYG Editors                            |
148
+|                     | ✔ Premium Support                            |

+ 90
- 0
package.json View File

@@ -0,0 +1,90 @@
1
+{
2
+  "name": "@adminkit/core",
3
+  "version": "3.1.0",
4
+  "description": "AdminKit - Bootstrap 5 Admin Template",
5
+  "keywords": [
6
+    "bootstrap",
7
+    "bootstrap 5",
8
+    "admin",
9
+    "admin template",
10
+    "dashboard",
11
+    "dashboard template",
12
+    "template",
13
+    "responsive",
14
+    "css",
15
+    "sass",
16
+    "html",
17
+    "theme",
18
+    "front-end",
19
+    "ui kit",
20
+    "web"
21
+  ],
22
+  "homepage": "https://adminkit.io/",
23
+  "bugs": {
24
+    "url": "https://github.com/adminkit/adminkit/issues"
25
+  },
26
+  "repository": {
27
+    "type": "git",
28
+    "url": "git+https://github.com/adminkit/adminkit.git"
29
+  },
30
+  "license": "MIT",
31
+  "author": "Paul Laros <support@adminkit.io>",
32
+  "files": [
33
+    "dist"
34
+  ],
35
+  "scripts": {
36
+    "build": "cross-env NODE_ENV=production webpack --config webpack.config.js --progress",
37
+    "watch": "webpack --config webpack.config.js --watch --progress",
38
+    "start": "webpack serve --config webpack.config.js --progress",
39
+    "prepublishOnly": "cross-env NODE_ENV=production webpack --progress --config webpack.config.js"
40
+  },
41
+  "browserslist": [
42
+    "> 0.5%",
43
+    "last 2 major versions",
44
+    "not dead",
45
+    "Chrome >= 60",
46
+    "Firefox >= 60",
47
+    "not Edge < 79",
48
+    "Firefox ESR",
49
+    "iOS >= 10",
50
+    "Safari >= 10",
51
+    "Android >= 6",
52
+    "not Explorer <= 11"
53
+  ],
54
+  "dependencies": {
55
+    "@babel/polyfill": "7.12.1",
56
+    "@popperjs/core": "2.10.1",
57
+    "bootstrap": "5.1.1",
58
+    "chart.js": "2.9.4",
59
+    "feather-icons": "4.28.0",
60
+    "flatpickr": "4.6.9",
61
+    "jsvectormap": "1.3.3",
62
+    "simplebar": "5.3.6"
63
+  },
64
+  "devDependencies": {
65
+    "@babel/core": "7.15.5",
66
+    "@babel/plugin-syntax-dynamic-import": "7.8.3",
67
+    "@babel/preset-env": "7.15.6",
68
+    "@babel/register": "7.15.3",
69
+    "autoprefixer": "10.3.6",
70
+    "babel-eslint": "10.1.0",
71
+    "babel-loader": "8.2.2",
72
+    "copy-webpack-plugin": "9.0.1",
73
+    "cross-env": "7.0.3",
74
+    "css-loader": "6.3.0",
75
+    "css-minimizer-webpack-plugin": "3.0.2",
76
+    "eslint": "7.32.0",
77
+    "file-loader": "6.2.0",
78
+    "filemanager-webpack-plugin": "6.1.7",
79
+    "hard-source-webpack-plugin": "0.13.1",
80
+    "mini-css-extract-plugin": "2.3.0",
81
+    "node-sass": "6.0.1",
82
+    "postcss-loader": "6.1.1",
83
+    "sass-loader": "12.1.0",
84
+    "terser-webpack-plugin": "5.2.4",
85
+    "url-loader": "4.1.1",
86
+    "webpack": "5.55.1",
87
+    "webpack-cli": "4.8.0",
88
+    "webpack-dev-server": "4.3.0"
89
+  }
90
+}

+ 5
- 0
postcss.config.js View File

@@ -0,0 +1,5 @@
1
+module.exports = {
2
+  plugins: [
3
+    require('autoprefixer')
4
+  ]
5
+}

+ 0
- 0
src/fonts/.gitkeep View File


BIN
src/img/avatars/avatar-2.jpg View File


BIN
src/img/avatars/avatar-3.jpg View File


BIN
src/img/avatars/avatar-4.jpg View File


BIN
src/img/avatars/avatar-5.jpg View File


BIN
src/img/avatars/avatar.jpg View File


BIN
src/img/icons/icon-48x48.png View File


BIN
src/img/photos/unsplash-1.jpg View File


BIN
src/img/photos/unsplash-2.jpg View File


BIN
src/img/photos/unsplash-3.jpg View File


+ 16
- 0
src/js/app.js View File

@@ -0,0 +1,16 @@
1
+import "../scss/app.scss";
2
+
3
+// AdminKit (required)
4
+import "./modules/bootstrap";
5
+import "./modules/sidebar";
6
+import "./modules/theme";
7
+import "./modules/feather";
8
+
9
+// Charts
10
+import "./modules/chartjs";
11
+
12
+// Forms
13
+import "./modules/flatpickr";
14
+
15
+// Maps
16
+import "./modules/vector-maps";

+ 5
- 0
src/js/modules/bootstrap.js View File

@@ -0,0 +1,5 @@
1
+import * as bootstrap from "bootstrap";
2
+
3
+// Bootstrap
4
+// Note: If you want to make bootstrap globally available, e.g. for using `bootstrap.modal`
5
+window.bootstrap = bootstrap;

+ 5
- 0
src/js/modules/chartjs.js View File

@@ -0,0 +1,5 @@
1
+// Usage: https://www.chartjs.org/
2
+import Chart from "chart.js";
3
+
4
+Chart.defaults.global.defaultFontFamily = "'Inter', 'Helvetica Neue', 'Helvetica', 'Arial', sans-serif";
5
+window.Chart = Chart;

+ 8
- 0
src/js/modules/feather.js View File

@@ -0,0 +1,8 @@
1
+// Usage: https://feathericons.com/
2
+import feather from "feather-icons";
3
+
4
+document.addEventListener("DOMContentLoaded", () => {
5
+    feather.replace();
6
+});
7
+
8
+window.feather = feather;

+ 4
- 0
src/js/modules/flatpickr.js View File

@@ -0,0 +1,4 @@
1
+// Usage: https://flatpickr.js.org/
2
+import flatpickr from "flatpickr";
3
+
4
+window.flatpickr = flatpickr;

+ 45
- 0
src/js/modules/sidebar.js View File

@@ -0,0 +1,45 @@
1
+// Usage: https://github.com/Grsmto/simplebar
2
+import SimpleBar from "simplebar";
3
+
4
+const initialize = () => {
5
+  initializeSimplebar();
6
+  initializeSidebarCollapse();
7
+}
8
+
9
+const initializeSimplebar = () => {
10
+  const simplebarElement = document.getElementsByClassName("js-simplebar")[0];
11
+
12
+  if(simplebarElement){
13
+    const simplebarInstance = new SimpleBar(document.getElementsByClassName("js-simplebar")[0]);
14
+
15
+    /* Recalculate simplebar on sidebar dropdown toggle */
16
+    const sidebarDropdowns = document.querySelectorAll(".js-sidebar [data-bs-parent]");
17
+    
18
+    sidebarDropdowns.forEach(link => {
19
+      link.addEventListener("shown.bs.collapse", () => {
20
+        simplebarInstance.recalculate();
21
+      });
22
+      link.addEventListener("hidden.bs.collapse", () => {
23
+        simplebarInstance.recalculate();
24
+      });
25
+    });
26
+  }
27
+}
28
+
29
+const initializeSidebarCollapse = () => {
30
+  const sidebarElement = document.getElementsByClassName("js-sidebar")[0];
31
+  const sidebarToggleElement = document.getElementsByClassName("js-sidebar-toggle")[0];
32
+
33
+  if(sidebarElement && sidebarToggleElement) {
34
+    sidebarToggleElement.addEventListener("click", () => {
35
+      sidebarElement.classList.toggle("collapsed");
36
+
37
+      sidebarElement.addEventListener("transitionend", () => {
38
+        window.dispatchEvent(new Event("resize"));
39
+      });
40
+    });
41
+  }
42
+}
43
+
44
+// Wait until page is loaded
45
+document.addEventListener("DOMContentLoaded", () => initialize());

+ 27
- 0
src/js/modules/theme.js View File

@@ -0,0 +1,27 @@
1
+/*
2
+ * Add color theme colors to the window object
3
+ * so this can be used by the charts and vector maps
4
+ */
5
+
6
+const theme = {
7
+  "primary": "#3B7DDD",
8
+  "secondary": "#6c757d",
9
+  "success": "#1cbb8c",
10
+  "info": "#17a2b8",
11
+  "warning": "#fcb92c",
12
+  "danger": "#dc3545",
13
+  "white": "#fff",
14
+  "gray-100": "#f8f9fa",
15
+  "gray-200": "#e9ecef",
16
+  "gray-300": "#dee2e6",
17
+  "gray-400": "#ced4da",
18
+  "gray-500": "#adb5bd",
19
+  "gray-600": "#6c757d",
20
+  "gray-700": "#495057",
21
+  "gray-800": "#343a40",
22
+  "gray-900": "#212529",
23
+  "black": "#000"
24
+};
25
+
26
+// Add theme to the window object
27
+window.theme = theme;

+ 3
- 0
src/js/modules/vector-maps.js View File

@@ -0,0 +1,3 @@
1
+// Usage: https://github.com/themustafaomar/jsvectormap
2
+import "jsvectormap"
3
+import "jsvectormap/dist/maps/world.js"

+ 317
- 0
src/scss/1-variables/_app.scss View File

@@ -0,0 +1,317 @@
1
+// Fonts
2
+$font-family-sans-serif: "Inter", "Helvetica Neue", Arial, -apple-system, BlinkMacSystemFont, "Segoe UI", Roboto, "Noto Sans", sans-serif, "Apple Color Emoji", "Segoe UI Emoji", "Segoe UI Symbol", "Noto Color Emoji" !default;
3
+$font-weight-light: 300 !default;
4
+$font-weight-normal: 400 !default;
5
+$font-weight-bold: 600 !default;
6
+$font-size-base: .875rem !default;
7
+$font-size-lg: .925rem !default;
8
+$font-size-sm: .75rem !default;
9
+$small-font-size: 80% !default;
10
+
11
+// Spacer
12
+$spacer: 1rem !default;
13
+
14
+$spacers: (
15
+  0: 0,
16
+  1: ($spacer * .25),
17
+  2: ($spacer * .5),
18
+  3: $spacer,
19
+  4: ($spacer * 1.5),
20
+  5: ($spacer * 3),
21
+  6: ($spacer * 4.5),
22
+  7: ($spacer * 6)
23
+) !default;
24
+
25
+// Grid breakpoints
26
+$grid-breakpoints: (
27
+  xs: 0,
28
+  sm: 576px,
29
+  md: 768px,
30
+  lg: 992px,
31
+  xl: 1200px,
32
+  xxl: 1440px
33
+) !default;
34
+
35
+// Grid gutter
36
+$grid-gutter-width: 24px;
37
+
38
+// Grid containers
39
+$container-max-widths: (
40
+  sm: 540px,
41
+  md: 720px,
42
+  lg: 960px,
43
+  xl: 1200px
44
+) !default;
45
+
46
+$container-padding-x: .75rem !default;
47
+
48
+// Options
49
+$min-contrast-ratio: 3 !default;
50
+$enable-validation-icons: false !default;
51
+$enable-rfs: false !default;
52
+$enable-negative-margins: true !default;
53
+
54
+// Transitions
55
+$transition-base: all .35s ease-in-out !default;
56
+
57
+// Theme colors
58
+$blue:    #3B7DDD !default;
59
+$indigo:  #0a0a0a !default;
60
+$purple:  #6f42c1 !default;
61
+$pink:    #e83e8c !default;
62
+$red:     #dc3545 !default;
63
+$orange:  #fd7e14 !default;
64
+$yellow:  #fcb92c !default;
65
+$green:   #1cbb8c !default;
66
+$teal:    #20c997 !default;
67
+$cyan:    #17a2b8 !default;
68
+
69
+$white:    #fff !default;
70
+$gray-100: #f8f9fa !default;
71
+$gray-200: #e9ecef !default;
72
+$gray-300: #dee2e6 !default;
73
+$gray-400: #ced4da !default;
74
+$gray-500: #adb5bd !default;
75
+$gray-600: #6c757d !default;
76
+$gray-700: #495057 !default;
77
+$gray-800: #343a40 !default;
78
+$gray-900: #212529 !default;
79
+$black: #000 !default;
80
+
81
+$primary:       $blue !default;
82
+$secondary:     $gray-600 !default;
83
+$success:       $green !default;
84
+$info:          $cyan !default;
85
+$warning:       $yellow !default;
86
+$danger:        $red !default;
87
+$light:         #f5f7fb !default;
88
+$dark:          $gray-900 !default;
89
+
90
+$theme-colors: (
91
+  "primary": $primary,
92
+  "secondary": $secondary,
93
+  "success": $success,
94
+  "info": $info,
95
+  "warning": $warning,
96
+  "danger": $danger,
97
+  "light": $light,
98
+  "dark": $dark
99
+) !default;
100
+
101
+// Social colors
102
+$social-colors: (
103
+  "facebook": #3b5998,
104
+  "twitter": #1da1f2,
105
+  "google": #dc4e41,
106
+  "youtube": #f00,
107
+  "vimeo": #1ab7ea,
108
+  "dribbble": #ea4c89,
109
+  "github": #181717,
110
+  "instagram": #e4405f,
111
+  "pinterest": #bd081c,
112
+  "flickr": #0063dc,
113
+  "bitbucket": #0052cc
114
+) !default;
115
+
116
+// Body
117
+$body-bg: #f5f7fb !default;
118
+$body-color: $gray-700 !default;
119
+
120
+// Links
121
+$link-decoration: none !default;
122
+$link-hover-decoration: underline !default;
123
+
124
+// Common
125
+$border-width: 1px !default;
126
+
127
+// Fonts
128
+$line-height-base: 1.5 !default;
129
+$line-height-lg: 1.5 !default;
130
+$line-height-sm: 1.5 !default;
131
+
132
+// Headings
133
+$h1-font-size: $font-size-base * 2 !default;
134
+$h2-font-size: $font-size-base * 1.75 !default;
135
+$h3-font-size: $font-size-base * 1.5 !default;
136
+$h4-font-size: $font-size-base * 1.25 !default;
137
+$h5-font-size: $font-size-base !default;
138
+$h6-font-size: $font-size-base !default;
139
+$headings-color: $black !default;
140
+$headings-font-weight: 400 !default;
141
+
142
+// Displays
143
+$display-font-sizes: (
144
+	1: 6rem,
145
+  2: 5.5rem,
146
+  3: 4.5rem,
147
+  4: 3.5rem,
148
+  5: 3rem,
149
+  6: 2.5rem
150
+  ) !default;
151
+
152
+// Shadows
153
+$box-shadow-sm:    0 0.05rem 0.2rem rgba($black, .05) !default;
154
+$box-shadow:       0 0.1rem 0.2rem rgba($black, .05) !default;
155
+$box-shadow-lg:    0 0.2rem 0.2rem rgba($black, .05) !default;
156
+
157
+// Navbar input
158
+$navbar-input-bg: darken($body-bg, 0.5%) !default;
159
+
160
+// Border radius
161
+$border-radius-sm: .1rem !default;
162
+$border-radius:    .2rem !default;
163
+$border-radius-lg: .3rem !default;
164
+
165
+// Navbar
166
+$navbar-padding-y: $spacer*0.875 !default;
167
+$navbar-padding-x: $spacer*1.375 !default;
168
+$navbar-nav-link-padding-x: .5rem !default;
169
+$navbar-border-bottom: 0 !default;
170
+$navbar-box-shadow: 0 0 2rem 0 rgba($dark, .1) !default;
171
+
172
+// Navbar brand
173
+$navbar-brand-padding-y: $spacer*0.875 !default;
174
+$navbar-brand-padding-x: 0 !default;
175
+$navbar-brand-color: $gray-100 !default;
176
+$navbar-brand-font-weight: $font-weight-normal !default;
177
+$navbar-brand-font-size: 1.15rem !default;
178
+$navbar-brand-icon-color: $primary !default;
179
+
180
+$navbar-bg: $white !default;
181
+
182
+// Footer
183
+$footer-bg: $white !default;
184
+
185
+// Forms
186
+$input-bg: $white !default;
187
+$input-disabled-bg: $gray-200 !default;
188
+$input-color: $gray-700 !default;
189
+$input-btn-border-width: $border-width !default;
190
+$input-btn-line-height: $line-height-base !default;
191
+$input-btn-line-height-sm: $line-height-sm !default;
192
+$input-btn-line-height-lg: $line-height-lg !default;
193
+$input-btn-focus-width: .2rem !default;
194
+$input-btn-padding-y: .3rem !default;
195
+$input-btn-padding-y-sm: .2rem !default;
196
+$input-btn-padding-y-lg: .4rem !default;
197
+$input-btn-padding-x: .85rem !default;
198
+$input-border-width: $input-btn-border-width !default;
199
+$input-height-border: $input-border-width * 2 !default;
200
+$input-height-inner: ($font-size-base * $input-btn-line-height) + ($input-btn-padding-y * 2) !default;
201
+$input-height: calc(#{$input-height-inner} + #{$input-height-border}) !default;
202
+$input-height-inner-sm: ($font-size-sm * $input-btn-line-height-sm) + ($input-btn-padding-y-sm * 2) !default;
203
+$input-height-sm: calc(#{$input-height-inner-sm} + #{$input-height-border}) !default;
204
+$input-height-inner-lg: ($font-size-lg * $input-btn-line-height-lg) + ($input-btn-padding-y-lg * 2) !default;
205
+$input-height-lg: calc(#{$input-height-inner-lg} + #{$input-height-border}) !default;
206
+
207
+// Cards
208
+$card-border-radius: .25rem !default;
209
+$card-inner-border-radius: $card-border-radius !default;
210
+$card-border-width: 0 !default;
211
+$card-border-color: transparent !default;
212
+$card-cap-bg: $white !default;
213
+$card-shadow: 0 0 .875rem 0 rgba($dark, 0.05) !default;
214
+$card-title-font-size: $font-size-lg !default;
215
+$card-title-font-weight: $font-weight-bold !default;
216
+$card-title-color: lighten($gray-600, 15%) !default;
217
+$card-spacer-y: 1.25rem !default;
218
+$card-spacer-x: 1.25rem !default;
219
+$card-cap-padding-y: 1rem !default;
220
+$card-cap-padding-x: $card-spacer-x !default;
221
+
222
+// Tables
223
+$table-cell-padding-y: .75rem !default;
224
+$table-cell-padding-x: .75rem !default;
225
+$table-cell-padding-y-sm: .3rem !default;
226
+$table-cell-padding-x-sm: .3rem !default;
227
+$table-striped-bg: $gray-100 !default;
228
+$table-hover-bg: rgba($black, .0375) !default;
229
+
230
+// Sidebar general
231
+$sidebar-width: 260px !default;
232
+$sidebar-transition: margin-left .35s ease-in-out, left .35s ease-in-out, margin-right .35s ease-in-out, right .35s ease-in-out !default;
233
+$sidebar-bg: #222E3C !default;
234
+
235
+// Sidebar brand
236
+$sidebar-brand-padding-y: 1.15rem !default;
237
+$sidebar-brand-padding-x: 1.5rem !default;
238
+$sidebar-brand-font-weight: $font-weight-bold !default;
239
+$sidebar-brand-font-size: 1.15rem !default;
240
+$sidebar-brand-color: $gray-100 !default;
241
+
242
+// Sidebar header
243
+$sidebar-header-padding: 1.5rem 1.5rem 0.375rem !default;
244
+$sidebar-header-font-size: $font-size-sm !default;
245
+$sidebar-header-color: $gray-400 !default;
246
+
247
+// Sidebar link
248
+$sidebar-link-padding: .625rem 1.625rem !default;
249
+$sidebar-link-font-weight: 400 !default;
250
+$sidebar-link-bg: #222E3C !default;
251
+$sidebar-link-color: rgba($gray-200, 0.5) !default;
252
+$sidebar-link-border-left-color: transparent !default;
253
+
254
+$sidebar-link-hover-font-weight: $font-weight-normal !default;
255
+$sidebar-link-hover-bg: #222E3C !default;
256
+$sidebar-link-hover-color: #{rgba($gray-200, 0.75)} !default;
257
+$sidebar-link-hover-border-left-color: transparent !default;
258
+
259
+$sidebar-link-active-font-weight: $font-weight-normal !default;
260
+$sidebar-link-active-bg: #{linear-gradient(90deg, rgba($primary,0.1) 0%, rgba($primary,0.0875) 50%, rgba($black, 0) 100%)} !default;
261
+$sidebar-link-active-color: $gray-200 !default;
262
+$sidebar-link-active-border-left-color: $primary !default;
263
+
264
+// Sidebar link icon
265
+$sidebar-link-icon-color: #{rgba($gray-200, 0.5)} !default;
266
+$sidebar-link-icon-hover-color: #{rgba($gray-200, 0.75)} !default;
267
+$sidebar-link-icon-active-color: $gray-200 !default;
268
+
269
+// Sidebar bottom
270
+$sidebar-cta-color: $gray-200 !default;
271
+$sidebar-cta-bg: #2B3947 !default;
272
+$sidebar-cta-padding: $spacer*1.5 !default;
273
+$sidebar-cta-margin: $spacer*1.75 !default;
274
+$sidebar-cta-border-radius: $border-radius-lg !default;
275
+
276
+// Transitions
277
+$transition-appearance: background .4s ease-in-out, color .4s ease-in-out !default;
278
+$transition-appearance-slow: background .6s ease-in-out, color .6s ease-in-out !default;
279
+$transition-appearance-fast: background .1s ease-in-out, color .1s ease-in-out !default;
280
+
281
+// Modals
282
+$modal-content-border-width: 0 !default;
283
+$modal-header-border-width: 1px !default;
284
+$modal-footer-border-width: 1px !default;
285
+$modal-xl: 1140px !default;
286
+$modal-lg: 900px !default;
287
+$modal-md: 600px !default;
288
+$modal-sm: 400px !default;
289
+$modal-transition: transform .25s ease-out !default;
290
+
291
+// Badges
292
+$badge-font-size: 80% !default;
293
+$badge-padding-y: .3em !default;
294
+$badge-padding-x: .45em !default;
295
+
296
+// Main
297
+$main-box-shadow: inset .75rem 0px 1.5rem 0px rgba($black, 0.075);
298
+
299
+// Content
300
+$content-padding-desktop: 3rem 3rem 1.5rem !default;
301
+$content-padding-mobile: 1.5rem 1.5rem .75rem !default;
302
+
303
+// Datetimepicker
304
+$bs-datetimepicker-active-bg: $primary !default;
305
+
306
+// Simplebar
307
+$simplebar-scrollbar-bg: $white !default;
308
+
309
+// Hamburger
310
+$hamburger-width-top: 24px !default;
311
+$hamburger-width-middle: 24px !default;
312
+$hamburger-width-bottom: 16px !default;
313
+
314
+// Stats
315
+$stat-bg: lighten($primary, 35%) !default;
316
+$stat-icon-color: $primary !default;
317
+$stat-padding: $spacer * 0.75 !default;

+ 24
- 0
src/scss/2-mixins/_button.scss View File

@@ -0,0 +1,24 @@
1
+@mixin button-color($color) {
2
+  &,
3
+  &:focus,
4
+  &.focus,
5
+  &.disabled,
6
+  &:disabled,
7
+  .show > &.dropdown-toggle {
8
+    color: $color;
9
+  }
10
+}
11
+
12
+@mixin button-color-hover($color) {
13
+  &:hover:not(:disabled):not(.disabled),
14
+  &.hover:not(:disabled):not(.disabled) {
15
+    color: $color;
16
+  }
17
+}
18
+
19
+@mixin button-color-active($color) {
20
+  &:not(:disabled):not(.disabled):active,
21
+  &:not(:disabled):not(.disabled).active {
22
+    color: $color;
23
+  }
24
+}

+ 18
- 0
src/scss/3-components/_avatar.scss View File

@@ -0,0 +1,18 @@
1
+.avatar {
2
+  width: 40px;
3
+  height: 40px;
4
+}
5
+
6
+.avatar-lg {
7
+  width: 64px;
8
+  height: 64px;
9
+}
10
+
11
+.avatar-title {
12
+  display: flex;
13
+  width: 100%;
14
+  height: 100%;
15
+  align-items: center;
16
+  justify-content: center;
17
+  color: $primary;
18
+}

+ 25
- 0
src/scss/3-components/_buttons.scss View File

@@ -0,0 +1,25 @@
1
+.btn .feather {
2
+  width: 14px;
3
+  height: 14px;
4
+}
5
+
6
+@each $color, $value in $theme-colors {
7
+  .btn-#{$color} {
8
+    @include button-color($white);
9
+    @include button-color-hover($white);
10
+  }
11
+}
12
+
13
+@each $color, $value in $social-colors {
14
+  .btn-#{$color} {
15
+    @include button-variant($value, $value);
16
+    @include button-color($white);
17
+    @include button-color-hover($white);
18
+  }
19
+}
20
+
21
+.btn-light,
22
+.btn-white {
23
+  @include button-color($gray-800);
24
+  @include button-color-hover($gray-800);
25
+}

+ 42
- 0
src/scss/3-components/_card.scss View File

@@ -0,0 +1,42 @@
1
+.card {
2
+  margin-bottom: $grid-gutter-width;
3
+  box-shadow: $card-shadow;
4
+}
5
+
6
+.card-header {
7
+  border-bottom-width: 1px;
8
+}
9
+
10
+.card-title {
11
+  font-size: $card-title-font-size;
12
+  font-weight: $card-title-font-weight;
13
+  color: $card-title-color;
14
+}
15
+
16
+.card-subtitle {
17
+  font-weight: $font-weight-normal;
18
+}
19
+
20
+.card-table {
21
+  margin-bottom: 0;
22
+}
23
+
24
+.card-table tr td:first-child,
25
+.card-table tr th:first-child {
26
+  padding-left: $card-spacer-x;
27
+}
28
+
29
+.card-table tr td:last-child,
30
+.card-table tr th:last-child {
31
+  padding-right: $card-spacer-x;
32
+}
33
+
34
+.card-img,
35
+.card-img-top,
36
+.card-img-bottom {
37
+  @include img-fluid;
38
+
39
+  @media all and (-ms-high-contrast:none) {
40
+    height: 100%;
41
+  }
42
+}

+ 26
- 0
src/scss/3-components/_chart.scss View File

@@ -0,0 +1,26 @@
1
+.chart {
2
+  margin: auto;
3
+  position: relative;
4
+  width: 100%;
5
+  min-height: 300px;
6
+
7
+  &-xs {
8
+    min-height: 200px;
9
+  }
10
+
11
+  &-sm {
12
+    min-height: 252px;
13
+  }
14
+
15
+  &-lg {
16
+    min-height: 350px;
17
+  }
18
+
19
+  &-xl {
20
+    min-height: 500px;
21
+  }
22
+
23
+  canvas {
24
+    max-width: 100%;
25
+  }
26
+}

+ 16
- 0
src/scss/3-components/_content.scss View File

@@ -0,0 +1,16 @@
1
+.content {
2
+  padding: $content-padding-mobile;
3
+  flex: 1;
4
+  width: 100vw;
5
+  max-width: 100vw;
6
+  direction: ltr;
7
+
8
+  @include media-breakpoint-up(md) {
9
+    width: auto;
10
+    max-width: auto;
11
+  }
12
+
13
+  @include media-breakpoint-up(lg) {
14
+    padding: $content-padding-desktop;  
15
+  }
16
+}

+ 71
- 0
src/scss/3-components/_dropdown.scss View File

@@ -0,0 +1,71 @@
1
+.navbar-nav .dropdown-menu {
2
+  box-shadow: $box-shadow;
3
+}
4
+
5
+.dropdown .dropdown-menu.show {
6
+  animation-name: dropdownAnimation;
7
+  animation-duration: .25s;
8
+  animation-iteration-count: 1;
9
+  animation-timing-function: ease;
10
+  animation-fill-mode: forwards;
11
+}
12
+
13
+@keyframes dropdownAnimation {
14
+  from {
15
+    opacity: 0;
16
+    transform: translateY(-8px);
17
+  }
18
+  to {
19
+    opacity: 1;
20
+    transform: translate(0);
21
+  }
22
+}
23
+
24
+.dropdown-toggle:after {
25
+  border: solid;
26
+  border-width: 0 2px 2px 0;
27
+  display: inline-block;
28
+  padding: 2px;
29
+  transform: rotate(45deg);
30
+}
31
+
32
+.dropdown-item {
33
+  transition: $transition-appearance-fast;
34
+}
35
+
36
+.dropdown-menu {
37
+  top: auto;
38
+}
39
+
40
+.dropdown-menu-lg {
41
+  min-width: $dropdown-min-width*2;
42
+}
43
+
44
+.dropdown .list-group .list-group-item {
45
+  border-width: 0;
46
+  border-bottom-width: 1px;
47
+  margin-bottom: 0;
48
+
49
+  &:first-child,
50
+  &:last-child {
51
+    border-radius: 0;
52
+  }
53
+
54
+  &:hover {
55
+    background: $gray-100;
56
+  }
57
+}
58
+
59
+.dropdown-menu-header {
60
+  padding: $spacer*0.75;
61
+  text-align: center;
62
+  font-weight: $font-weight-bold;
63
+  border-bottom: 1px solid $gray-300;
64
+}
65
+
66
+.dropdown-menu-footer {
67
+  padding: $spacer*0.5;
68
+  text-align: center;
69
+  display: block;
70
+  font-size: $font-size-sm;
71
+}

+ 15
- 0
src/scss/3-components/_feather.scss View File

@@ -0,0 +1,15 @@
1
+.feather {
2
+  width: 18px;
3
+  height: 18px;
4
+  stroke-width: 2;
5
+}
6
+
7
+.feather-sm {
8
+  width: 14px;
9
+  height: 14px;
10
+}
11
+
12
+.feather-lg {
13
+  width: 36px;
14
+  height: 36px;
15
+}

+ 13
- 0
src/scss/3-components/_footer.scss View File

@@ -0,0 +1,13 @@
1
+footer.footer {
2
+  padding: $spacer $spacer*0.875;
3
+  direction: ltr;
4
+  background: $footer-bg;
5
+
6
+  ul {
7
+    margin-bottom: 0;
8
+  }
9
+
10
+  @include media-breakpoint-down(md) {
11
+    width: 100vw;
12
+  }
13
+}

+ 44
- 0
src/scss/3-components/_hamburger.scss View File

@@ -0,0 +1,44 @@
1
+.hamburger,
2
+.hamburger:before,
3
+.hamburger:after {
4
+  cursor: pointer;
5
+  border-radius: 1px;
6
+  height: 3px;
7
+  width: $hamburger-width-middle;
8
+  background: $gray-700;
9
+  display: block;
10
+  content: '';
11
+  transition: $transition-appearance-fast;
12
+}
13
+
14
+.hamburger {
15
+  position: relative;
16
+}
17
+
18
+.hamburger:before {
19
+  top: -7.5px;
20
+  width: $hamburger-width-top;
21
+  position: absolute;
22
+}
23
+
24
+.hamburger:after {
25
+  bottom: -7.5px;
26
+  width: $hamburger-width-bottom;
27
+  position: absolute;
28
+}
29
+
30
+.sidebar-toggle:hover {
31
+  .hamburger,
32
+  .hamburger:before,
33
+  .hamburger:after {
34
+    background: $primary;
35
+  }
36
+}
37
+
38
+.hamburger-right {
39
+  &,
40
+  &:before,
41
+  &:after {
42
+    right: 0;
43
+  }
44
+}

+ 3
- 0
src/scss/3-components/_list-group.scss View File

@@ -0,0 +1,3 @@
1
+a.list-group-item {
2
+  text-decoration: none;
3
+}

+ 12
- 0
src/scss/3-components/_main.scss View File

@@ -0,0 +1,12 @@
1
+.main {
2
+  display: flex;
3
+  width: 100%;
4
+  min-width: 0;
5
+  min-height: 100vh;
6
+  transition: $sidebar-transition;
7
+  background: $body-bg;
8
+  flex-direction: column;
9
+  overflow: hidden;
10
+  border-top-left-radius: 0;
11
+  border-bottom-left-radius: 0;
12
+}

+ 137
- 0
src/scss/3-components/_navbar.scss View File

@@ -0,0 +1,137 @@
1
+.navbar {
2
+  border-bottom: $navbar-border-bottom;
3
+  box-shadow: $navbar-box-shadow;
4
+
5
+  @include media-breakpoint-down(md) {
6
+    width: 100vw;
7
+  }
8
+}
9
+
10
+.navbar .avatar {
11
+  margin-top: -15px;
12
+  margin-bottom: -15px;
13
+}
14
+
15
+.navbar-nav {
16
+  direction: ltr;
17
+}
18
+
19
+.navbar-align {
20
+  margin-left: auto;
21
+}
22
+
23
+.navbar-bg {
24
+  background: $navbar-bg;
25
+}
26
+
27
+.navbar-brand {
28
+  font-weight: $navbar-brand-font-weight;
29
+  font-size: $navbar-brand-font-size;
30
+  padding: $navbar-brand-padding-y $navbar-brand-padding-x;
31
+  color: $navbar-brand-color;
32
+  display: block;
33
+
34
+  svg,
35
+  .feather {
36
+    color: $navbar-brand-icon-color;
37
+    height: 24px;
38
+    width: 24px;
39
+    margin-left: -0.15rem;
40
+    margin-right: 0.375rem;
41
+    margin-top: -0.375rem;
42
+  }
43
+}
44
+
45
+.nav-icon,
46
+.nav-flag {
47
+  padding: .1rem .8rem;
48
+  display: block;
49
+  font-size: 1.5rem;
50
+  color: $gray-600;
51
+  transition: $transition-appearance-fast;
52
+  line-height: 1.4;
53
+
54
+  &:after {
55
+    display: none !important;
56
+  }
57
+
58
+  &:hover,
59
+  &.active {
60
+    color: $primary;
61
+  }
62
+
63
+  svg,
64
+  .feather {
65
+    width: 20px;
66
+    height: 20px;
67
+  }
68
+}
69
+
70
+.nav-item {
71
+  .indicator {
72
+    background: $primary;
73
+    box-shadow: $box-shadow;
74
+    border-radius: 50%;
75
+    display: block;
76
+    height: 18px;
77
+    width: 18px;
78
+    padding: 1px;
79
+    position: absolute;
80
+    top: 0;
81
+    right: -8px;
82
+    text-align: center;
83
+    transition: top .1s ease-out;
84
+    font-size: 0.675rem;
85
+    color: $white;
86
+  }
87
+
88
+  &:hover .indicator {
89
+    top: -4px;
90
+  }
91
+
92
+  a:focus {
93
+    outline: 0;
94
+  }
95
+}
96
+
97
+@media screen and (-ms-high-contrast: active), (-ms-high-contrast: none) {
98
+  .navbar .avatar {
99
+    max-height: 47px;
100
+  }
101
+}
102
+
103
+@include media-breakpoint-down(sm) {
104
+  .navbar {
105
+    padding: 0.75rem;
106
+  }
107
+
108
+  .nav-icon {
109
+    padding: .1rem .75rem;
110
+  }
111
+
112
+  .dropdown,
113
+  .dropleft,
114
+  .dropright,
115
+  .dropup {
116
+    position: inherit;
117
+  }
118
+
119
+  .navbar-expand .navbar-nav .dropdown-menu-lg {
120
+    min-width: 100%;
121
+  }
122
+
123
+  .nav-item .nav-link:after {
124
+    display: none;
125
+  }
126
+}
127
+
128
+.nav-flag img {
129
+  border-radius: 50%;
130
+  width: 20px;
131
+  height: 20px;
132
+  object-fit: cover;
133
+}
134
+
135
+.navbar input {
136
+  direction: ltr;
137
+}

+ 14
- 0
src/scss/3-components/_reboot.scss View File

@@ -0,0 +1,14 @@
1
+body, html, #root {
2
+  height: 100%;
3
+}
4
+
5
+body {
6
+  overflow-y: scroll;
7
+  opacity: 1 !important;
8
+}
9
+
10
+@media screen and (-ms-high-contrast: active), (-ms-high-contrast: none) {
11
+  html {
12
+    overflow-x: hidden;
13
+  }
14
+}

+ 147
- 0
src/scss/3-components/_sidebar.scss View File

@@ -0,0 +1,147 @@
1
+.sidebar {
2
+  min-width: $sidebar-width;
3
+  max-width: $sidebar-width;
4
+  transition: $sidebar-transition;
5
+  direction: ltr;
6
+  background: $sidebar-bg;
7
+}
8
+
9
+.sidebar-content {
10
+  transition: $sidebar-transition;
11
+  display: flex;
12
+  height: 100vh;
13
+  flex-direction: column;
14
+  background: $sidebar-bg;
15
+}
16
+
17
+.sidebar-nav {
18
+  padding-left: 0;
19
+  margin-bottom: 0;
20
+  list-style: none;
21
+  flex-grow: 1;
22
+}
23
+
24
+// Sidebar links
25
+.sidebar-link,
26
+a.sidebar-link {
27
+  display: block;
28
+  padding: $sidebar-link-padding;
29
+  font-weight: $sidebar-link-font-weight;
30
+  transition: background .1s ease-in-out;
31
+  position: relative;
32
+  text-decoration: none;
33
+  cursor: pointer;
34
+  border-left-style: solid;
35
+  border-left-width: 3px;
36
+  color: $sidebar-link-color;
37
+  background: $sidebar-link-bg;
38
+  border-left-color: $sidebar-link-border-left-color;
39
+
40
+  i,
41
+  svg {
42
+    margin-right: .75rem;
43
+    color: $sidebar-link-icon-color;
44
+  }
45
+}
46
+
47
+.sidebar-link:focus {
48
+  outline: 0;
49
+}
50
+
51
+.sidebar-link:hover {
52
+  color: $sidebar-link-hover-color;
53
+  background: $sidebar-link-hover-bg;
54
+  border-left-color: $sidebar-link-hover-border-left-color;
55
+
56
+  i,
57
+  svg {
58
+    color: $sidebar-link-icon-hover-color;
59
+  }
60
+}
61
+
62
+.sidebar-item.active > .sidebar-link,
63
+.sidebar-item.active .sidebar-link:hover {
64
+  color: $sidebar-link-active-color;
65
+  background: $sidebar-link-active-bg;
66
+  border-left-color: $sidebar-link-active-border-left-color;
67
+
68
+  i,
69
+  svg {
70
+    color: $sidebar-link-icon-active-color;
71
+  }
72
+}
73
+
74
+// Sidebar brand
75
+.sidebar-brand {
76
+  font-weight: $sidebar-brand-font-weight;
77
+  font-size: $sidebar-brand-font-size;
78
+  padding: $sidebar-brand-padding-y $sidebar-brand-padding-x;
79
+  display: block;
80
+  color: $sidebar-brand-color;
81
+
82
+  &:hover {
83
+    text-decoration: none;
84
+    color: $sidebar-brand-color;
85
+  }
86
+
87
+  &:focus {
88
+    outline: 0;
89
+  }
90
+}
91
+
92
+// Toggle states
93
+.sidebar-toggle {
94
+  cursor: pointer;
95
+  width: 26px;
96
+  height: 26px;
97
+  display: flex;
98
+}
99
+
100
+.sidebar {
101
+  &.collapsed {
102
+    margin-left: -$sidebar-width;
103
+  }
104
+
105
+  // Workaround for IE bug, more info:
106
+  // https://stackoverflow.com/a/25850649
107
+  @media (min-width: 1px) and (max-width: #{map-get($grid-breakpoints, 'lg') - .02px}) {
108
+
109
+    // Sidebar default state (on mobile)
110
+    margin-left: -$sidebar-width;
111
+
112
+    // Sidebar collapsed state (on mobile)
113
+    &.collapsed {
114
+      margin-left: 0;
115
+    }
116
+  }
117
+}
118
+
119
+.sidebar-toggle {
120
+  margin-right: $spacer;
121
+}
122
+
123
+// Sidebar header
124
+.sidebar-header {
125
+  background: transparent;
126
+  padding: $sidebar-header-padding;
127
+  font-size: $sidebar-header-font-size;
128
+  color: $sidebar-header-color;
129
+}
130
+
131
+// Badge
132
+.sidebar-badge {
133
+  position: absolute;
134
+  right: 15px;
135
+  top: 14px;
136
+  z-index: 1;
137
+}
138
+
139
+// Sidebar bottom
140
+.sidebar-cta-content {
141
+  padding: $sidebar-cta-padding;
142
+  margin: $sidebar-cta-margin;
143
+  border-radius: $sidebar-cta-border-radius;
144
+
145
+  background: $sidebar-cta-bg;
146
+  color: $sidebar-cta-color;
147
+}

+ 5
- 0
src/scss/3-components/_sizing.scss View File

@@ -0,0 +1,5 @@
1
+.min-vw-50 { min-width: 50vw !important; }
2
+.min-vh-50 { min-height: 50vh !important; }
3
+
4
+.vw-50 { width: 50vw !important; }
5
+.vh-50 { height: 50vh !important; }

+ 16
- 0
src/scss/3-components/_stat.scss View File

@@ -0,0 +1,16 @@
1
+.stat {
2
+  background: $stat-bg;
3
+  border-radius: 50%;
4
+  width: 40px;
5
+  height: 40px;
6
+  align-items: center;
7
+  justify-content: center;
8
+  display: flex;
9
+
10
+  svg {
11
+    width: 18px;
12
+    height: 18px;
13
+    color: $stat-icon-color !important;
14
+    stroke-width: 1.5;
15
+  }
16
+}

+ 13
- 0
src/scss/3-components/_tables.scss View File

@@ -0,0 +1,13 @@
1
+.table {
2
+	thead, tbody, tfoot, tr, td, th {
3
+		border-color: $table-border-color;
4
+	}
5
+	
6
+	> :not(:last-child) > :last-child > * {
7
+		border-color: $table-border-color;
8
+	}
9
+}
10
+
11
+.table > tbody > tr > td {
12
+	vertical-align: middle;
13
+}

+ 21
- 0
src/scss/3-components/_type.scss View File

@@ -0,0 +1,21 @@
1
+.text-sm {
2
+  font-size: $font-size-sm;
3
+}
4
+
5
+.text-lg {
6
+  font-size: $font-size-lg;
7
+}
8
+
9
+b, strong {
10
+	font-weight: $font-weight-bold;
11
+}
12
+
13
+pre.snippet {
14
+  white-space: pre-wrap;
15
+  word-wrap: break-word;
16
+  text-align: justify;
17
+}
18
+
19
+a {
20
+  cursor: pointer;
21
+}

+ 6
- 0
src/scss/3-components/_wrapper.scss View File

@@ -0,0 +1,6 @@
1
+.wrapper {
2
+  align-items: stretch;
3
+  display: flex;
4
+  width: 100%;
5
+  background: $sidebar-bg;
6
+}

+ 10
- 0
src/scss/4-utilities/_cursors.scss View File

@@ -0,0 +1,10 @@
1
+.cursor-grab {
2
+  cursor: move;
3
+  cursor: grab;
4
+  cursor: -moz-grab;
5
+  cursor: -webkit-grab;
6
+}
7
+
8
+.cursor-pointer {
9
+  cursor: pointer;
10
+}

+ 104
- 0
src/scss/5-vendor/_flatpickr.scss View File

@@ -0,0 +1,104 @@
1
+$flatpickr-tile-height: 45px;
2
+
3
+.flatpickr-calendar.inline {
4
+  background: transparent;
5
+  box-shadow: none;
6
+  width: 100%;
7
+  
8
+  .flatpickr-days {
9
+    width: 100%;
10
+  }
11
+
12
+  .dayContainer {
13
+    width: 100%;
14
+    min-width: 100%;
15
+    max-width: 100%;
16
+  }
17
+
18
+  .flatpickr-day {
19
+    border-radius: $border-radius;
20
+    max-width: inherit;
21
+    height: $flatpickr-tile-height;
22
+    line-height: $flatpickr-tile-height;
23
+
24
+    &.today {
25
+      border: 0;
26
+
27
+      &:before {
28
+        content: "";
29
+        display: inline-block;
30
+        border-color: rgba(0,0,0,.2) transparent $primary;
31
+        border-style: solid;
32
+        border-width: 0 0 7px 7px;
33
+        position: absolute;
34
+        bottom: 4px;
35
+        right: 4px;
36
+      }
37
+
38
+      &.selected:before {
39
+        border-color: rgba(0,0,0,.2) transparent $white;
40
+      }
41
+
42
+      &:hover {
43
+        background: #e6e6e6;
44
+        color: $black;
45
+      }
46
+    }
47
+
48
+    &.selected {
49
+      &,
50
+      &:hover,
51
+      &:focus {
52
+        border-radius: $border-radius;
53
+        background: $primary;
54
+        color: $white;
55
+      }
56
+    }
57
+  }
58
+
59
+  .flatpickr-weekdays {
60
+    height: $flatpickr-tile-height;
61
+  }
62
+  .flatpickr-weekday {
63
+    height: $flatpickr-tile-height;
64
+    line-height: $flatpickr-tile-height;
65
+  }
66
+
67
+  .flatpickr-months {
68
+    .flatpickr-month {
69
+      height: $flatpickr-tile-height;
70
+    }
71
+
72
+    .flatpickr-prev-month,
73
+    .flatpickr-next-month {
74
+      height: $flatpickr-tile-height;
75
+    }
76
+  }
77
+
78
+  .flatpickr-current-month {
79
+    padding-top: 0;
80
+    line-height: $flatpickr-tile-height;
81
+    height: $flatpickr-tile-height;
82
+
83
+    .flatpickr-monthDropdown-months {
84
+      appearance: none;
85
+    }
86
+    
87
+    .flatpickr-monthDropdown-months,
88
+    input.cur-year {
89
+      font-weight: $font-weight-normal;
90
+      font-size: $h4-font-size;
91
+    }
92
+  }
93
+
94
+  .flatpickr-prev-month,
95
+  .flatpickr-next-month {
96
+    width: 45px;
97
+    border-radius: $border-radius;
98
+
99
+    &:hover {
100
+      background: #e6e6e6;
101
+      color: $black;
102
+    }
103
+  }
104
+}

+ 17
- 0
src/scss/5-vendor/_simplebar.scss View File

@@ -0,0 +1,17 @@
1
+.simplebar-scrollbar:before {
2
+  background: $simplebar-scrollbar-bg;
3
+}
4
+
5
+.simplebar-content {
6
+  display: flex;
7
+  flex-direction: column;
8
+  height: 100vh;
9
+  padding-bottom: 0 !important;
10
+}
11
+
12
+[data-simplebar] {
13
+  position: sticky;
14
+  top: 0;
15
+  left: 0;
16
+  width: $sidebar-width;
17
+}

+ 71
- 0
src/scss/app.scss View File

@@ -0,0 +1,71 @@
1
+/*!
2
+ * AdminKit v3.0.2 (https://adminkit.io/)
3
+ * Copyright 2021 Paul Laros
4
+ * Copyright 2021 AdminKit
5
+ * Licensed under MIT (https://github.com/adminkit/adminkit/blob/master/LICENSE)
6
+ */
7
+
8
+// Variables
9
+@import "1-variables/app";
10
+
11
+// Bootstrap
12
+@import "~bootstrap/scss/functions";
13
+@import "~bootstrap/scss/variables";
14
+@import "~bootstrap/scss/mixins";
15
+@import "~bootstrap/scss/utilities";
16
+@import "~bootstrap/scss/root";
17
+@import "~bootstrap/scss/reboot";
18
+@import "~bootstrap/scss/type";
19
+@import "~bootstrap/scss/images";
20
+@import "~bootstrap/scss/containers";
21
+@import "~bootstrap/scss/grid";
22
+@import "~bootstrap/scss/tables";
23
+@import "~bootstrap/scss/forms";
24
+@import "~bootstrap/scss/buttons";
25
+@import "~bootstrap/scss/transitions";
26
+@import "~bootstrap/scss/dropdown";
27
+@import "~bootstrap/scss/button-group";
28
+@import "~bootstrap/scss/nav";
29
+@import "~bootstrap/scss/navbar";
30
+@import "~bootstrap/scss/card";
31
+@import "~bootstrap/scss/badge";
32
+@import "~bootstrap/scss/list-group";
33
+@import "~bootstrap/scss/close";
34
+@import "~bootstrap/scss/helpers";
35
+@import "~bootstrap/scss/utilities/api";
36
+
37
+// Theme mixins
38
+@import "2-mixins/button";
39
+
40
+// Theme components
41
+@import "3-components/avatar";
42
+@import "3-components/buttons";
43
+@import "3-components/card";
44
+@import "3-components/chart";
45
+@import "3-components/content";
46
+@import "3-components/dropdown";
47
+@import "3-components/feather";
48
+@import "3-components/footer";
49
+@import "3-components/hamburger";
50
+@import "3-components/list-group";
51
+@import "3-components/main";
52
+@import "3-components/navbar";
53
+@import "3-components/reboot";
54
+@import "3-components/sidebar";
55
+@import "3-components/sizing";
56
+@import "3-components/stat";
57
+@import "3-components/tables";
58
+@import "3-components/type";
59
+@import "3-components/wrapper";
60
+
61
+// Theme utilities
62
+@import "4-utilities/cursors";
63
+
64
+// 3rd party plugins
65
+@import "~jsvectormap/dist/css/jsvectormap";
66
+@import "~simplebar/dist/simplebar";
67
+@import "~flatpickr/dist/flatpickr";
68
+
69
+// 3rd party plugin styles
70
+@import "5-vendor/flatpickr";
71
+@import "5-vendor/simplebar";

+ 15229
- 0
static/css/app.css
File diff suppressed because it is too large
View File


+ 1
- 0
static/css/app.css.map
File diff suppressed because it is too large
View File


+ 0
- 0
static/fonts/.gitkeep View File


BIN
static/img/avatars/avatar-2.jpg View File


BIN
static/img/avatars/avatar-3.jpg View File


BIN
static/img/avatars/avatar-4.jpg View File


BIN
static/img/avatars/avatar-5.jpg View File


BIN
static/img/avatars/avatar.jpg View File


BIN
static/img/icons/icon-48x48.png View File


BIN
static/img/photos/unsplash-1.jpg View File


BIN
static/img/photos/unsplash-2.jpg View File


BIN
static/img/photos/unsplash-3.jpg View File


+ 1173
- 0
static/index.html
File diff suppressed because it is too large
View File


+ 3
- 0
static/js/app.js
File diff suppressed because it is too large
View File


+ 514
- 0
static/js/app.js.LICENSE.txt View File

@@ -0,0 +1,514 @@
1
+/*!
2
+  * Bootstrap v5.1.1 (https://getbootstrap.com/)
3
+  * Copyright 2011-2021 The Bootstrap Authors (https://github.com/twbs/bootstrap/graphs/contributors)
4
+  * Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE)
5
+  */
6
+
7
+/*!
8
+  Copyright (c) 2016 Jed Watson.
9
+  Licensed under the MIT License (MIT), see
10
+  http://jedwatson.github.io/classnames
11
+*/
12
+
13
+/*!
14
+ * Chart.js v2.9.4
15
+ * https://www.chartjs.org
16
+ * (c) 2020 Chart.js Contributors
17
+ * Released under the MIT License
18
+ */
19
+
20
+/*! ../../internals/path */
21
+
22
+/*! ../../modules/es.array.from */
23
+
24
+/*! ../../modules/es.string.iterator */
25
+
26
+/*! ../dist/icons.json */
27
+
28
+/*! ../internals/a-function */
29
+
30
+/*! ../internals/an-object */
31
+
32
+/*! ../internals/array-from */
33
+
34
+/*! ../internals/array-includes */
35
+
36
+/*! ../internals/bind-context */
37
+
38
+/*! ../internals/call-with-safe-iteration-closing */
39
+
40
+/*! ../internals/check-correctness-of-iteration */
41
+
42
+/*! ../internals/classof */
43
+
44
+/*! ../internals/classof-raw */
45
+
46
+/*! ../internals/copy-constructor-properties */
47
+
48
+/*! ../internals/correct-prototype-getter */
49
+
50
+/*! ../internals/create-iterator-constructor */
51
+
52
+/*! ../internals/create-property */
53
+
54
+/*! ../internals/create-property-descriptor */
55
+
56
+/*! ../internals/define-iterator */
57
+
58
+/*! ../internals/descriptors */
59
+
60
+/*! ../internals/document-create-element */
61
+
62
+/*! ../internals/enum-bug-keys */
63
+
64
+/*! ../internals/export */
65
+
66
+/*! ../internals/fails */
67
+
68
+/*! ../internals/function-to-string */
69
+
70
+/*! ../internals/get-iterator-method */
71
+
72
+/*! ../internals/global */
73
+
74
+/*! ../internals/has */
75
+
76
+/*! ../internals/hidden-keys */
77
+
78
+/*! ../internals/hide */
79
+
80
+/*! ../internals/html */
81
+
82
+/*! ../internals/ie8-dom-define */
83
+
84
+/*! ../internals/indexed-object */
85
+
86
+/*! ../internals/internal-state */
87
+
88
+/*! ../internals/is-array-iterator-method */
89
+
90
+/*! ../internals/is-forced */
91
+
92
+/*! ../internals/is-object */
93
+
94
+/*! ../internals/is-pure */
95
+
96
+/*! ../internals/iterators */
97
+
98
+/*! ../internals/iterators-core */
99
+
100
+/*! ../internals/native-symbol */
101
+
102
+/*! ../internals/native-weak-map */
103
+
104
+/*! ../internals/object-create */
105
+
106
+/*! ../internals/object-define-properties */
107
+
108
+/*! ../internals/object-define-property */
109
+
110
+/*! ../internals/object-get-own-property-descriptor */
111
+
112
+/*! ../internals/object-get-own-property-names */
113
+
114
+/*! ../internals/object-get-own-property-symbols */
115
+
116
+/*! ../internals/object-get-prototype-of */
117
+
118
+/*! ../internals/object-keys */
119
+
120
+/*! ../internals/object-keys-internal */
121
+
122
+/*! ../internals/object-property-is-enumerable */
123
+
124
+/*! ../internals/object-set-prototype-of */
125
+
126
+/*! ../internals/own-keys */
127
+
128
+/*! ../internals/redefine */
129
+
130
+/*! ../internals/require-object-coercible */
131
+
132
+/*! ../internals/set-global */
133
+
134
+/*! ../internals/set-to-string-tag */
135
+
136
+/*! ../internals/shared */
137
+
138
+/*! ../internals/shared-key */
139
+
140
+/*! ../internals/string-at */
141
+
142
+/*! ../internals/to-absolute-index */
143
+
144
+/*! ../internals/to-indexed-object */
145
+
146
+/*! ../internals/to-integer */
147
+
148
+/*! ../internals/to-length */
149
+
150
+/*! ../internals/to-object */
151
+
152
+/*! ../internals/to-primitive */
153
+
154
+/*! ../internals/uid */
155
+
156
+/*! ../internals/validate-set-prototype-of-arguments */
157
+
158
+/*! ../internals/well-known-symbol */
159
+
160
+/*! ./../../webpack/buildin/global.js */
161
+
162
+/*! ./default-attrs.json */
163
+
164
+/*! ./icon */
165
+
166
+/*! ./icons */
167
+
168
+/*! ./replace */
169
+
170
+/*! ./tags.json */
171
+
172
+/*! ./to-svg */
173
+
174
+/*! /home/travis/build/feathericons/feather/src/index.js */
175
+
176
+/*! classnames/dedupe */
177
+
178
+/*! core-js/es/array/from */
179
+
180
+/*! exports provided: activity, airplay, alert-circle, alert-octagon, alert-triangle, align-center, align-justify, align-left, align-right, anchor, aperture, archive, arrow-down-circle, arrow-down-left, arrow-down-right, arrow-down, arrow-left-circle, arrow-left, arrow-right-circle, arrow-right, arrow-up-circle, arrow-up-left, arrow-up-right, arrow-up, at-sign, award, bar-chart-2, bar-chart, battery-charging, battery, bell-off, bell, bluetooth, bold, book-open, book, bookmark, box, briefcase, calendar, camera-off, camera, cast, check-circle, check-square, check, chevron-down, chevron-left, chevron-right, chevron-up, chevrons-down, chevrons-left, chevrons-right, chevrons-up, chrome, circle, clipboard, clock, cloud-drizzle, cloud-lightning, cloud-off, cloud-rain, cloud-snow, cloud, code, codepen, codesandbox, coffee, columns, command, compass, copy, corner-down-left, corner-down-right, corner-left-down, corner-left-up, corner-right-down, corner-right-up, corner-up-left, corner-up-right, cpu, credit-card, crop, crosshair, database, delete, disc, divide-circle, divide-square, divide, dollar-sign, download-cloud, download, dribbble, droplet, edit-2, edit-3, edit, external-link, eye-off, eye, facebook, fast-forward, feather, figma, file-minus, file-plus, file-text, file, film, filter, flag, folder-minus, folder-plus, folder, framer, frown, gift, git-branch, git-commit, git-merge, git-pull-request, github, gitlab, globe, grid, hard-drive, hash, headphones, heart, help-circle, hexagon, home, image, inbox, info, instagram, italic, key, layers, layout, life-buoy, link-2, link, linkedin, list, loader, lock, log-in, log-out, mail, map-pin, map, maximize-2, maximize, meh, menu, message-circle, message-square, mic-off, mic, minimize-2, minimize, minus-circle, minus-square, minus, monitor, moon, more-horizontal, more-vertical, mouse-pointer, move, music, navigation-2, navigation, octagon, package, paperclip, pause-circle, pause, pen-tool, percent, phone-call, phone-forwarded, phone-incoming, phone-missed, phone-off, phone-outgoing, phone, pie-chart, play-circle, play, plus-circle, plus-square, plus, pocket, power, printer, radio, refresh-ccw, refresh-cw, repeat, rewind, rotate-ccw, rotate-cw, rss, save, scissors, search, send, server, settings, share-2, share, shield-off, shield, shopping-bag, shopping-cart, shuffle, sidebar, skip-back, skip-forward, slack, slash, sliders, smartphone, smile, speaker, square, star, stop-circle, sun, sunrise, sunset, tablet, tag, target, terminal, thermometer, thumbs-down, thumbs-up, toggle-left, toggle-right, tool, trash-2, trash, trello, trending-down, trending-up, triangle, truck, tv, twitch, twitter, type, umbrella, underline, unlock, upload-cloud, upload, user-check, user-minus, user-plus, user-x, user, users, video-off, video, voicemail, volume-1, volume-2, volume-x, volume, watch, wifi-off, wifi, wind, x-circle, x-octagon, x-square, x, youtube, zap-off, zap, zoom-in, zoom-out, default */
181
+
182
+/*! exports provided: activity, airplay, alert-circle, alert-octagon, alert-triangle, align-center, align-justify, align-left, align-right, anchor, archive, at-sign, award, aperture, bar-chart, bar-chart-2, battery, battery-charging, bell, bell-off, bluetooth, book-open, book, bookmark, box, briefcase, calendar, camera, cast, circle, clipboard, clock, cloud-drizzle, cloud-lightning, cloud-rain, cloud-snow, cloud, codepen, codesandbox, code, coffee, columns, command, compass, copy, corner-down-left, corner-down-right, corner-left-down, corner-left-up, corner-right-down, corner-right-up, corner-up-left, corner-up-right, cpu, credit-card, crop, crosshair, database, delete, disc, dollar-sign, droplet, edit, edit-2, edit-3, eye, eye-off, external-link, facebook, fast-forward, figma, file-minus, file-plus, file-text, film, filter, flag, folder-minus, folder-plus, folder, framer, frown, gift, git-branch, git-commit, git-merge, git-pull-request, github, gitlab, globe, hard-drive, hash, headphones, heart, help-circle, hexagon, home, image, inbox, instagram, key, layers, layout, life-bouy, link, link-2, linkedin, list, lock, log-in, log-out, mail, map-pin, map, maximize, maximize-2, meh, menu, message-circle, message-square, mic-off, mic, minimize, minimize-2, minus, monitor, moon, more-horizontal, more-vertical, mouse-pointer, move, music, navigation, navigation-2, octagon, package, paperclip, pause, pause-circle, pen-tool, percent, phone-call, phone-forwarded, phone-incoming, phone-missed, phone-off, phone-outgoing, phone, play, pie-chart, play-circle, plus, plus-circle, plus-square, pocket, power, printer, radio, refresh-cw, refresh-ccw, repeat, rewind, rotate-ccw, rotate-cw, rss, save, scissors, search, send, settings, share-2, shield, shield-off, shopping-bag, shopping-cart, shuffle, skip-back, skip-forward, slack, slash, sliders, smartphone, smile, speaker, star, stop-circle, sun, sunrise, sunset, tablet, tag, target, terminal, thermometer, thumbs-down, thumbs-up, toggle-left, toggle-right, tool, trash, trash-2, triangle, truck, tv, twitch, twitter, type, umbrella, unlock, user-check, user-minus, user-plus, user-x, user, users, video-off, video, voicemail, volume, volume-1, volume-2, volume-x, watch, wifi-off, wifi, wind, x-circle, x-octagon, x-square, x, youtube, zap-off, zap, zoom-in, zoom-out, default */
183
+
184
+/*! exports provided: xmlns, width, height, viewBox, fill, stroke, stroke-width, stroke-linecap, stroke-linejoin, default */
185
+
186
+/*! no static exports found */
187
+
188
+/*!*********************!*\
189
+  !*** ./src/icon.js ***!
190
+  \*********************/
191
+
192
+/*!**********************!*\
193
+  !*** ./src/icons.js ***!
194
+  \**********************/
195
+
196
+/*!**********************!*\
197
+  !*** ./src/index.js ***!
198
+  \**********************/
199
+
200
+/*!***********************!*\
201
+  !*** ./src/tags.json ***!
202
+  \***********************/
203
+
204
+/*!***********************!*\
205
+  !*** ./src/to-svg.js ***!
206
+  \***********************/
207
+
208
+/*!************************!*\
209
+  !*** ./src/replace.js ***!
210
+  \************************/
211
+
212
+/*!*************************!*\
213
+  !*** ./dist/icons.json ***!
214
+  \*************************/
215
+
216
+/*!********************************!*\
217
+  !*** ./src/default-attrs.json ***!
218
+  \********************************/
219
+
220
+/*!***********************************!*\
221
+  !*** (webpack)/buildin/global.js ***!
222
+  \***********************************/
223
+
224
+/*!*******************************************!*\
225
+  !*** ./node_modules/classnames/dedupe.js ***!
226
+  \*******************************************/
227
+
228
+/*!***********************************************!*\
229
+  !*** ./node_modules/core-js/es/array/from.js ***!
230
+  \***********************************************/
231
+
232
+/*!***********************************************!*\
233
+  !*** ./node_modules/core-js/internals/has.js ***!
234
+  \***********************************************/
235
+
236
+/*!***********************************************!*\
237
+  !*** ./node_modules/core-js/internals/uid.js ***!
238
+  \***********************************************/
239
+
240
+/*!************************************************!*\
241
+  !*** ./node_modules/core-js/internals/hide.js ***!
242
+  \************************************************/
243
+
244
+/*!************************************************!*\
245
+  !*** ./node_modules/core-js/internals/html.js ***!
246
+  \************************************************/
247
+
248
+/*!************************************************!*\
249
+  !*** ./node_modules/core-js/internals/path.js ***!
250
+  \************************************************/
251
+
252
+/*!*************************************************!*\
253
+  !*** ./node_modules/core-js/internals/fails.js ***!
254
+  \*************************************************/
255
+
256
+/*!**************************************************!*\
257
+  !*** ./node_modules/core-js/internals/export.js ***!
258
+  \**************************************************/
259
+
260
+/*!**************************************************!*\
261
+  !*** ./node_modules/core-js/internals/global.js ***!
262
+  \**************************************************/
263
+
264
+/*!**************************************************!*\
265
+  !*** ./node_modules/core-js/internals/shared.js ***!
266
+  \**************************************************/
267
+
268
+/*!**************************************************!*\
269
+  !*** multi core-js/es/array/from ./src/index.js ***!
270
+  \**************************************************/
271
+
272
+/*!***************************************************!*\
273
+  !*** ./node_modules/core-js/internals/classof.js ***!
274
+  \***************************************************/
275
+
276
+/*!***************************************************!*\
277
+  !*** ./node_modules/core-js/internals/is-pure.js ***!
278
+  \***************************************************/
279
+
280
+/*!****************************************************!*\
281
+  !*** ./node_modules/core-js/internals/own-keys.js ***!
282
+  \****************************************************/
283
+
284
+/*!****************************************************!*\
285
+  !*** ./node_modules/core-js/internals/redefine.js ***!
286
+  \****************************************************/
287
+
288
+/*!*****************************************************!*\
289
+  !*** ./node_modules/core-js/internals/an-object.js ***!
290
+  \*****************************************************/
291
+
292
+/*!*****************************************************!*\
293
+  !*** ./node_modules/core-js/internals/is-forced.js ***!
294
+  \*****************************************************/
295
+
296
+/*!*****************************************************!*\
297
+  !*** ./node_modules/core-js/internals/is-object.js ***!
298
+  \*****************************************************/
299
+
300
+/*!*****************************************************!*\
301
+  !*** ./node_modules/core-js/internals/iterators.js ***!
302
+  \*****************************************************/
303
+
304
+/*!*****************************************************!*\
305
+  !*** ./node_modules/core-js/internals/string-at.js ***!
306
+  \*****************************************************/
307
+
308
+/*!*****************************************************!*\
309
+  !*** ./node_modules/core-js/internals/to-length.js ***!
310
+  \*****************************************************/
311
+
312
+/*!*****************************************************!*\
313
+  !*** ./node_modules/core-js/internals/to-object.js ***!
314
+  \*****************************************************/
315
+
316
+/*!******************************************************!*\
317
+  !*** ./node_modules/core-js/internals/a-function.js ***!
318
+  \******************************************************/
319
+
320
+/*!******************************************************!*\
321
+  !*** ./node_modules/core-js/internals/array-from.js ***!
322
+  \******************************************************/
323
+
324
+/*!******************************************************!*\
325
+  !*** ./node_modules/core-js/internals/set-global.js ***!
326
+  \******************************************************/
327
+
328
+/*!******************************************************!*\
329
+  !*** ./node_modules/core-js/internals/shared-key.js ***!
330
+  \******************************************************/
331
+
332
+/*!******************************************************!*\
333
+  !*** ./node_modules/core-js/internals/to-integer.js ***!
334
+  \******************************************************/
335
+
336
+/*!*******************************************************!*\
337
+  !*** ./node_modules/core-js/internals/classof-raw.js ***!
338
+  \*******************************************************/
339
+
340
+/*!*******************************************************!*\
341
+  !*** ./node_modules/core-js/internals/descriptors.js ***!
342
+  \*******************************************************/
343
+
344
+/*!*******************************************************!*\
345
+  !*** ./node_modules/core-js/internals/hidden-keys.js ***!
346
+  \*******************************************************/
347
+
348
+/*!*******************************************************!*\
349
+  !*** ./node_modules/core-js/internals/object-keys.js ***!
350
+  \*******************************************************/
351
+
352
+/*!*******************************************************!*\
353
+  !*** ./node_modules/core-js/modules/es.array.from.js ***!
354
+  \*******************************************************/
355
+
356
+/*!********************************************************!*\
357
+  !*** ./node_modules/core-js/internals/bind-context.js ***!
358
+  \********************************************************/
359
+
360
+/*!********************************************************!*\
361
+  !*** ./node_modules/core-js/internals/to-primitive.js ***!
362
+  \********************************************************/
363
+
364
+/*!*********************************************************!*\
365
+  !*** ./node_modules/core-js/internals/enum-bug-keys.js ***!
366
+  \*********************************************************/
367
+
368
+/*!*********************************************************!*\
369
+  !*** ./node_modules/core-js/internals/native-symbol.js ***!
370
+  \*********************************************************/
371
+
372
+/*!*********************************************************!*\
373
+  !*** ./node_modules/core-js/internals/object-create.js ***!
374
+  \*********************************************************/
375
+
376
+/*!**********************************************************!*\
377
+  !*** ./node_modules/core-js/internals/array-includes.js ***!
378
+  \**********************************************************/
379
+
380
+/*!**********************************************************!*\
381
+  !*** ./node_modules/core-js/internals/ie8-dom-define.js ***!
382
+  \**********************************************************/
383
+
384
+/*!**********************************************************!*\
385
+  !*** ./node_modules/core-js/internals/indexed-object.js ***!
386
+  \**********************************************************/
387
+
388
+/*!**********************************************************!*\
389
+  !*** ./node_modules/core-js/internals/internal-state.js ***!
390
+  \**********************************************************/
391
+
392
+/*!**********************************************************!*\
393
+  !*** ./node_modules/core-js/internals/iterators-core.js ***!
394
+  \**********************************************************/
395
+
396
+/*!***********************************************************!*\
397
+  !*** ./node_modules/core-js/internals/create-property.js ***!
398
+  \***********************************************************/
399
+
400
+/*!***********************************************************!*\
401
+  !*** ./node_modules/core-js/internals/define-iterator.js ***!
402
+  \***********************************************************/
403
+
404
+/*!***********************************************************!*\
405
+  !*** ./node_modules/core-js/internals/native-weak-map.js ***!
406
+  \***********************************************************/
407
+
408
+/*!************************************************************!*\
409
+  !*** ./node_modules/core-js/modules/es.string.iterator.js ***!
410
+  \************************************************************/
411
+
412
+/*!*************************************************************!*\
413
+  !*** ./node_modules/core-js/internals/set-to-string-tag.js ***!
414
+  \*************************************************************/
415
+
416
+/*!*************************************************************!*\
417
+  !*** ./node_modules/core-js/internals/to-absolute-index.js ***!
418
+  \*************************************************************/
419
+
420
+/*!*************************************************************!*\
421
+  !*** ./node_modules/core-js/internals/to-indexed-object.js ***!
422
+  \*************************************************************/
423
+
424
+/*!*************************************************************!*\
425
+  !*** ./node_modules/core-js/internals/well-known-symbol.js ***!
426
+  \*************************************************************/
427
+
428
+/*!**************************************************************!*\
429
+  !*** ./node_modules/core-js/internals/function-to-string.js ***!
430
+  \**************************************************************/
431
+
432
+/*!***************************************************************!*\
433
+  !*** ./node_modules/core-js/internals/get-iterator-method.js ***!
434
+  \***************************************************************/
435
+
436
+/*!****************************************************************!*\
437
+  !*** ./node_modules/core-js/internals/object-keys-internal.js ***!
438
+  \****************************************************************/
439
+
440
+/*!******************************************************************!*\
441
+  !*** ./node_modules/core-js/internals/object-define-property.js ***!
442
+  \******************************************************************/
443
+
444
+/*!*******************************************************************!*\
445
+  !*** ./node_modules/core-js/internals/document-create-element.js ***!
446
+  \*******************************************************************/
447
+
448
+/*!*******************************************************************!*\
449
+  !*** ./node_modules/core-js/internals/object-get-prototype-of.js ***!
450
+  \*******************************************************************/
451
+
452
+/*!*******************************************************************!*\
453
+  !*** ./node_modules/core-js/internals/object-set-prototype-of.js ***!
454
+  \*******************************************************************/
455
+
456
+/*!********************************************************************!*\
457
+  !*** ./node_modules/core-js/internals/correct-prototype-getter.js ***!
458
+  \********************************************************************/
459
+
460
+/*!********************************************************************!*\
461
+  !*** ./node_modules/core-js/internals/is-array-iterator-method.js ***!
462
+  \********************************************************************/
463
+
464
+/*!********************************************************************!*\
465
+  !*** ./node_modules/core-js/internals/object-define-properties.js ***!
466
+  \********************************************************************/
467
+
468
+/*!********************************************************************!*\
469
+  !*** ./node_modules/core-js/internals/require-object-coercible.js ***!
470
+  \********************************************************************/
471
+
472
+/*!**********************************************************************!*\
473
+  !*** ./node_modules/core-js/internals/create-property-descriptor.js ***!
474
+  \**********************************************************************/
475
+
476
+/*!***********************************************************************!*\
477
+  !*** ./node_modules/core-js/internals/copy-constructor-properties.js ***!
478
+  \***********************************************************************/
479
+
480
+/*!***********************************************************************!*\
481
+  !*** ./node_modules/core-js/internals/create-iterator-constructor.js ***!
482
+  \***********************************************************************/
483
+
484
+/*!*************************************************************************!*\
485
+  !*** ./node_modules/core-js/internals/object-get-own-property-names.js ***!
486
+  \*************************************************************************/
487
+
488
+/*!*************************************************************************!*\
489
+  !*** ./node_modules/core-js/internals/object-property-is-enumerable.js ***!
490
+  \*************************************************************************/
491
+
492
+/*!**************************************************************************!*\
493
+  !*** ./node_modules/core-js/internals/check-correctness-of-iteration.js ***!
494
+  \**************************************************************************/
495
+
496
+/*!***************************************************************************!*\
497
+  !*** ./node_modules/core-js/internals/object-get-own-property-symbols.js ***!
498
+  \***************************************************************************/
499
+
500
+/*!****************************************************************************!*\
501
+  !*** ./node_modules/core-js/internals/call-with-safe-iteration-closing.js ***!
502
+  \****************************************************************************/
503
+
504
+/*!******************************************************************************!*\
505
+  !*** ./node_modules/core-js/internals/object-get-own-property-descriptor.js ***!
506
+  \******************************************************************************/
507
+
508
+/*!*******************************************************************************!*\
509
+  !*** ./node_modules/core-js/internals/validate-set-prototype-of-arguments.js ***!
510
+  \*******************************************************************************/
511
+
512
+//! moment.js
513
+
514
+//! moment.js locale configuration

+ 1
- 0
static/js/app.js.map
File diff suppressed because it is too large
View File


+ 8
- 0
static/js/circle-progress.js
File diff suppressed because it is too large
View File


+ 120
- 0
webpack.config.js View File

@@ -0,0 +1,120 @@
1
+const Webpack = require("webpack");
2
+const Path = require("path");
3
+const TerserPlugin = require("terser-webpack-plugin");
4
+const MiniCssExtractPlugin = require("mini-css-extract-plugin");
5
+const CssMinimizerPlugin = require("css-minimizer-webpack-plugin");
6
+const CopyWebpackPlugin = require("copy-webpack-plugin");
7
+const FileManagerPlugin = require("filemanager-webpack-plugin");
8
+
9
+const opts = {
10
+  rootDir: process.cwd(),
11
+  devBuild: process.env.NODE_ENV !== "production"
12
+};
13
+
14
+module.exports = {
15
+  entry: {
16
+    app: "./src/js/app.js"
17
+  },
18
+  mode: process.env.NODE_ENV === "production" ? "production" : "development",
19
+  devtool:
20
+    process.env.NODE_ENV === "production" ? "source-map" : "inline-source-map",
21
+  output: {
22
+    path: Path.join(opts.rootDir, "dist"),
23
+    pathinfo: opts.devBuild,
24
+    filename: "js/[name].js",
25
+    chunkFilename: 'js/[name].js',
26
+  },
27
+  performance: { hints: false },
28
+  optimization: {
29
+    minimizer: [
30
+      new TerserPlugin({
31
+        parallel: true,
32
+        terserOptions: {
33
+          ecma: 5
34
+        }
35
+      }),
36
+      new CssMinimizerPlugin({})
37
+    ],
38
+    runtimeChunk: false
39
+  },
40
+  plugins: [
41
+    // Extract css files to seperate bundle
42
+    new MiniCssExtractPlugin({
43
+      filename: "css/app.css",
44
+      chunkFilename: "css/app.css"
45
+    }),
46
+    // Copy fonts and images to dist
47
+    new CopyWebpackPlugin({
48
+      patterns: [
49
+        { from: "src/fonts", to: "fonts" },
50
+        { from: "src/img", to: "img" }
51
+      ]
52
+    }),
53
+    // Copy dist folder to static
54
+    new FileManagerPlugin({
55
+      events: {
56
+        onEnd: {
57
+          copy: [
58
+            { source: "./dist/", destination: "./static" }
59
+          ]
60
+        }
61
+      }
62
+    }),
63
+  ],
64
+  module: {
65
+    rules: [
66
+      // Babel-loader
67
+      {
68
+        test: /\.js$/,
69
+        exclude: /(node_modules)/,
70
+        use: {
71
+          loader: "babel-loader",
72
+          options: {
73
+            cacheDirectory: true
74
+          }
75
+        }
76
+      },
77
+      // Css-loader & sass-loader
78
+      {
79
+        test: /\.(sa|sc|c)ss$/,
80
+        use: [
81
+          MiniCssExtractPlugin.loader,
82
+          "css-loader",
83
+          "postcss-loader",
84
+          "sass-loader"
85
+        ]
86
+      },
87
+      // Load fonts
88
+      {
89
+        test: /\.(woff(2)?|ttf|eot|svg)(\?v=\d+\.\d+\.\d+)?$/,
90
+        type: "asset/resource",
91
+        generator: {
92
+          filename: "fonts/[name][ext]"
93
+        }
94
+      },
95
+      // Load images
96
+      {
97
+        test: /\.(png|jpg|jpeg|gif)(\?v=\d+\.\d+\.\d+)?$/,
98
+        type: "asset/resource",
99
+        generator: {
100
+          filename: "img/[name][ext]"
101
+        }
102
+      },
103
+    ]
104
+  },
105
+  resolve: {
106
+    extensions: [".js", ".scss"],
107
+    modules: ["node_modules"],
108
+    alias: {
109
+      request$: "xhr"
110
+    }
111
+  },
112
+  devServer: {
113
+    static: {
114
+      directory: Path.join(__dirname, "static")
115
+    },
116
+    compress: true,
117
+    port: 8080,
118
+    open: true
119
+  }
120
+};

Loading…
Cancel
Save