├── .browserslistrc
├── .github
├── ISSUE_TEMPLATE
│ ├── bug_report.md
│ └── feature_request.md
└── PULL_REQUEST_TEMPLATE.md
├── .gitignore
├── CODE_OF_CONDUCT.md
├── CONTRIBUTING.md
├── Gruntfile.js
├── LICENSE
├── README.md
├── docs
├── blank-page.html
├── bootstrap-components.html
├── css
│ ├── main.css
│ └── main.min.css
├── dashboard.html
├── docs.html
├── form-components.html
├── form-samples.html
├── images
│ └── banner.jpg
├── index.html
├── js
│ ├── bootstrap.min.js
│ ├── jquery-3.7.0.min.js
│ ├── main.js
│ └── plugins
│ │ ├── chart.js
│ │ └── jquery.dataTables.min.js
├── page-error.html
├── page-invoice.html
├── page-lockscreen.html
├── page-login.html
├── page-mailbox.html
├── page-user.html
├── table-basic.html
├── table-data-table.html
├── ui-cards.html
└── widgets.html
├── node-dev-server.js
├── package-lock.json
├── package.json
└── src
├── pug
├── blank-page.pug
├── bootstrap-components.pug
├── dashboard.pug
├── docs.pug
├── form-components.pug
├── form-samples.pug
├── includes
│ ├── _head.pug
│ ├── _header.pug
│ ├── _javascript.pug
│ ├── _landing-icons.pug
│ └── _sidebar.pug
├── index.pug
├── layouts
│ └── _layout.pug
├── page-error.pug
├── page-invoice.pug
├── page-lockscreen.pug
├── page-login.pug
├── page-mailbox.pug
├── page-user.pug
├── table-basic.pug
├── table-data-table.pug
├── ui-cards.pug
└── widgets.pug
└── sass
├── 1-tools
├── _customize-bootstrap.scss
├── _fonts.scss
└── _vars.scss
├── 2-basics
├── _app.scss
└── _helpers.scss
├── 3-component
├── _app-title.scss
├── _button-spinner.scss
├── _button.scss
├── _chat.scss
├── _dropdown.scss
├── _header.scss
├── _material-half-bg.scss
├── _material-loader.scss
├── _rtl.scss
├── _sidebar-mini.scss
├── _sidebar.scss
├── _tile.scss
└── _widgets.scss
├── 4-pages
├── _docs.scss
├── _error-page.scss
├── _landing-page.scss
├── _lockscreen-material.scss
├── _login-material.scss
├── _mailbox.scss
└── _user-profile.scss
└── main.scss
/.browserslistrc:
--------------------------------------------------------------------------------
1 | last 3 versions
--------------------------------------------------------------------------------
/.github/ISSUE_TEMPLATE/bug_report.md:
--------------------------------------------------------------------------------
1 | ---
2 | name: Bug report
3 | about: Create a report to help us improve
4 |
5 | ---
6 |
7 | **Describe the bug**
8 | A clear and concise description of what the bug is.
9 |
10 | **To Reproduce**
11 | Steps to reproduce the behavior:
12 | 1. Go to '...'
13 | 2. Click on '....'
14 | 3. Scroll down to '....'
15 | 4. See error
16 |
17 | **Expected behavior**
18 | A clear and concise description of what you expected to happen.
19 |
20 | **Screenshots**
21 | If applicable, add screenshots to help explain your problem.
22 |
23 | **Desktop (please complete the following information):**
24 | - OS: [e.g. iOS]
25 | - Browser [e.g. chrome, safari]
26 | - Version [e.g. 22]
27 |
28 | **Smartphone (please complete the following information):**
29 | - Device: [e.g. iPhone6]
30 | - OS: [e.g. iOS8.1]
31 | - Browser [e.g. stock browser, safari]
32 | - Version [e.g. 22]
33 |
34 | **Additional context**
35 | Add any other context about the problem here.
36 |
--------------------------------------------------------------------------------
/.github/ISSUE_TEMPLATE/feature_request.md:
--------------------------------------------------------------------------------
1 | ---
2 | name: Feature request
3 | about: Suggest an idea for this project
4 |
5 | ---
6 |
7 | **Is your feature request related to a problem? Please describe.**
8 | A clear and concise description of what the problem is. Ex. I'm always frustrated when [...]
9 |
10 | **Describe the solution you'd like**
11 | A clear and concise description of what you want to happen.
12 |
13 | **Describe alternatives you've considered**
14 | A clear and concise description of any alternative solutions or features you've considered.
15 |
16 | **Additional context**
17 | Add any other context or screenshots about the feature request here.
18 |
--------------------------------------------------------------------------------
/.github/PULL_REQUEST_TEMPLATE.md:
--------------------------------------------------------------------------------
1 | ## Pull Request Guidelines
2 | Please, go through these steps before you submit a pull request.
3 |
4 | 1. Make sure that your pull request is not a duplicate.
5 | 2. If not, then make sure that:
6 |
7 | 2.1. You have done your changes in a separate branch. Branches MUST have descriptive names that start with either the `fix/` or `feature/` prefixes. Good examples are: `fix/signin-issue` or `feature/issue-templates`.
8 |
9 | 2.2. You have a descriptive commit message with a short title (first line).
10 |
11 | 2.2. You have created one pull request for one purpose only. Create separate branches and separate pull requests for each newly introduced feature or for each fixed issue.
12 |
13 | 2.3. You have only one commit (if not, squash them into one commit).
14 |
15 | 3. **After** these steps, you're ready to open a pull request.
16 |
17 | 3.1. Your pull request MUST NOT target the `master` branch on this repository. Instead target the next version branch. For eg. If the [current stable version](https://github.com/pratikborsadiya/vali-admin/releases/latest) of the theme is `2.3.1` then target the branch for the next version `2.3.2` or `3.0.0` if the next version is a major release. Your changes will be merged in master branch when the next release will happen.
18 |
19 | 3.2. Give a descriptive title to your PR.
20 |
21 | 3.3. Provide a description of your changes.
22 |
23 | 3.4. Put `closes #XXXX` in your comment to auto-close the issue that your PR fixes.
24 |
25 | IMPORTANT: Please review the [CONTRIBUTING.md](../CONTRIBUTING.md) file for detailed contributing guidelines.
26 |
27 | **PLEASE REMOVE THIS TEMPLATE BEFORE SUBMITTING**
--------------------------------------------------------------------------------
/.gitignore:
--------------------------------------------------------------------------------
1 | node_modules/
2 | .DS_Store
3 |
--------------------------------------------------------------------------------
/CODE_OF_CONDUCT.md:
--------------------------------------------------------------------------------
1 | # Contributor Covenant Code of Conduct
2 |
3 | ## Our Pledge
4 |
5 | In the interest of fostering an open and welcoming environment, we as contributors and maintainers pledge to making participation in our project and our community a harassment-free experience for everyone, regardless of age, body size, disability, ethnicity, gender identity and expression, level of experience, nationality, personal appearance, race, religion, or sexual identity and orientation.
6 |
7 | ## Our Standards
8 |
9 | Examples of behavior that contributes to creating a positive environment include:
10 |
11 | * Using welcoming and inclusive language
12 | * Being respectful of differing viewpoints and experiences
13 | * Gracefully accepting constructive criticism
14 | * Focusing on what is best for the community
15 | * Showing empathy towards other community members
16 |
17 | Examples of unacceptable behavior by participants include:
18 |
19 | * The use of sexualized language or imagery and unwelcome sexual attention or advances
20 | * Trolling, insulting/derogatory comments, and personal or political attacks
21 | * Public or private harassment
22 | * Publishing others' private information, such as a physical or electronic address, without explicit permission
23 | * Other conduct which could reasonably be considered inappropriate in a professional setting
24 |
25 | ## Our Responsibilities
26 |
27 | Project maintainers are responsible for clarifying the standards of acceptable behavior and are expected to take appropriate and fair corrective action in response to any instances of unacceptable behavior.
28 |
29 | Project maintainers have the right and responsibility to remove, edit, or reject comments, commits, code, wiki edits, issues, and other contributions that are not aligned to this Code of Conduct, or to ban temporarily or permanently any contributor for other behaviors that they deem inappropriate, threatening, offensive, or harmful.
30 |
31 | ## Scope
32 |
33 | This Code of Conduct applies both within project spaces and in public spaces when an individual is representing the project or its community. Examples of representing a project or community include using an official project e-mail address, posting via an official social media account, or acting as an appointed representative at an online or offline event. Representation of a project may be further defined and clarified by project maintainers.
34 |
35 | ## Enforcement
36 |
37 | Instances of abusive, harassing, or otherwise unacceptable behavior may be reported by contacting the project team at pratikborsadiya@gmail.com. The project team will review and investigate all complaints, and will respond in a way that it deems appropriate to the circumstances. The project team is obligated to maintain confidentiality with regard to the reporter of an incident. Further details of specific enforcement policies may be posted separately.
38 |
39 | Project maintainers who do not follow or enforce the Code of Conduct in good faith may face temporary or permanent repercussions as determined by other members of the project's leadership.
40 |
41 | ## Attribution
42 |
43 | This Code of Conduct is adapted from the [Contributor Covenant][homepage], version 1.4, available at [http://contributor-covenant.org/version/1/4][version]
44 |
45 | [homepage]: http://contributor-covenant.org
46 | [version]: http://contributor-covenant.org/version/1/4/
47 |
--------------------------------------------------------------------------------
/CONTRIBUTING.md:
--------------------------------------------------------------------------------
1 | # Contributing to Vali Admin
2 |
3 | :+1::tada: First off, thanks for taking the time to contribute! :tada::+1:
4 |
5 | The following is a set of guidelines for contributing to Vali Admin. These are mostly guidelines, not rules. Use your best judgment, and feel free to propose changes to this document in a pull request.
6 |
7 | #### Table Of Contents
8 |
9 | [Code of Conduct](#code-of-conduct)
10 |
11 | [How Can I Contribute?](#how-can-i-contribute)
12 | * [Reporting Bugs](#reporting-bugs)
13 | * [Suggesting Enhancements](#suggesting-enhancements)
14 | * [Fixing a bug](#fixing-a-bug)
15 | * [Providing Enhancements](#providing-enhancements)
16 | * [Pull Requests](#pull-requests)
17 |
18 | [Styleguides](#styleguides)
19 | * [Git Commit Messages](#git-commit-messages)
20 |
21 | ## Code of Conduct
22 |
23 | This project and everyone participating in it is governed by the [Contributor Covenant Code of Conduct](CODE_OF_CONDUCT.md). By participating, you are expected to uphold this code. Please report unacceptable behavior to [pratikborsadiya@gmail.com](mailto:pratikborsadiya@gmail.com).
24 |
25 | ## How Can I Contribute?
26 |
27 | ### Reporting Bugs
28 |
29 | This section guides you through submitting a bug report for Vali Admin. Following these guidelines helps maintainers and the community understand your report :pencil:, reproduce the behavior :computer: :computer:, and find related reports :mag_right:.
30 |
31 | Before creating bug reports, please check existing open issues and make sure the issue you are reporting is not already reported and open. When you are creating a bug report, please fill out the required template, the information it asks for helps us resolve issues faster.
32 |
33 | > **Note:** If you find a **Closed** issue that seems like it is the same thing that you're experiencing, open a new issue and include a link to the original issue in the body of your new one.
34 |
35 | #### How Do I Submit A (Good) Bug Report?
36 |
37 | Bugs are tracked as [GitHub issues](https://guides.github.com/features/issues/). Explain the problem and include additional details to help maintainers reproduce the problem:
38 |
39 | * **Use a clear and descriptive title** for the issue to identify the problem.
40 | * **Describe the exact steps which reproduce the problem** in as many details as possible.
41 | * **If you're providing snippets in the issue, use [Markdown code blocks](https://help.github.com/articles/markdown-basics/#multiple-lines)**.
42 | * **Describe the behavior you observed after following the steps** and point out what exactly is the problem with that behavior.
43 | * **Explain which behavior you expected to see instead and why.**
44 | * **Include screenshots and animated GIFs** which show you following the described steps and clearly demonstrate the problem. You can use [this tool](https://www.cockos.com/licecap/) to record GIFs on macOS and Windows, and [this tool](https://github.com/colinkeenan/silentcast) or [this tool](https://github.com/GNOME/byzanz) on Linux.
45 |
46 | ### Suggesting Enhancements
47 |
48 | Just like bugs enhancements can also be suggested as [GitHub issues](https://guides.github.com/features/issues/).
49 |
50 | #### How Do I Submit A (Good) Enhancement Suggestion ?
51 |
52 | * **Use a clear and descriptive title** for the suggestion you are proposing.
53 | * **Include related screenshots or animated GIFs** for better clarity.
54 | * **Describe how would it be useful** for the users.
55 |
56 | ### Fixing a bug
57 |
58 | * If you are considering to fix an open issue please comment on the issue that you are working on fixing the issue and how are you planning to fix it.
59 | * Create a new issue if the one you are fixing is not already open and then comment on the issue that you are fixing it.
60 | * This will let the contributors know that the specific issue is currently being fixed and they shold wait sometime before trying to fix the same issue themselves.
61 |
62 | ### Providing Enhancements
63 | * If you are planning to propose a new feature please open an issue for the same feature request prior to starting work on a feature.
64 | * This will help the contributors and maintainers provide feedback and support for the enhancement you are providing.
65 |
66 | ### Pull requests
67 | Please, go through these steps before you submit a pull request.
68 |
69 | 1. Make sure that your pull request is not a duplicate.
70 | 2. If not, then make sure that:
71 |
72 | 2.1. You have done your changes in a separate branch. Branches MUST have descriptive names that start with either the `fix` or `feature` prefixes. Good examples are: `fix-signin-issue` or `feature-issue-templates`.
73 |
74 | 2.2. You have a descriptive commit message with a short title (first line).
75 |
76 | 2.2. You have created one pull request for one purpose only. Create separate branches and separate pull requests for each newly introduced feature or for each fixed issue.
77 |
78 | 2.3. You have only one commit (if not, squash them into one commit).
79 |
80 | 3. **After** these steps, you're ready to open a pull request.
81 |
82 | 3.1. Your pull request MUST NOT target the `master` branch on this repository. Instead target the next version branch. For eg. If the [current stable version](https://github.com/pratikborsadiya/vali-admin/releases/latest) of the theme is `2.3.1` then target the branch for the next version `2.3.2` or `3.0.0` if the next version is a major release. Your changes will be merged in master branch when the next release will happen.
83 |
84 | 3.2. Give a descriptive title to your PR.
85 |
86 | 3.3. Provide a description of your changes.
87 |
88 | 3.4. Put `closes #XXXX` in your comment to auto-close the issue that your PR fixes.
89 |
90 | ## Styleguides
91 |
92 | ### Git Commit Messages
93 |
94 | * Use the present tense ("Add feature" not "Added feature")
95 | * Use the imperative mood ("Move cursor to..." not "Moves cursor to...")
96 | * Limit the first line to 72 characters or less
97 | * Reference issues and pull requests liberally after the first line
98 |
--------------------------------------------------------------------------------
/Gruntfile.js:
--------------------------------------------------------------------------------
1 | const sass = require('sass');
2 | module.exports = function (grunt) {
3 | grunt.initConfig({
4 | pkg: grunt.file.readJSON('package.json'),
5 | watch: {
6 | options: { livereload: true },
7 | scss: {
8 | files: ['src/sass/**/*.sass', 'src/sass/**/*.scss'],
9 | tasks: ['sass', 'postcss'],
10 | options: {
11 | interrupt: true
12 | }
13 | },
14 | pug: {
15 | files: ['src/pug/**/*.pug'],
16 | tasks: ['pug'],
17 | options: {
18 | interrupt: true
19 | }
20 | }
21 | },
22 | pug: {
23 | compile: {
24 | options: {
25 | pretty: true
26 | },
27 | files: [{
28 | src: ['**/*.pug', '!**/_*.pug'],
29 | dest: "docs/",
30 | ext: ".html",
31 | cwd: "src/pug/",
32 | expand: true
33 | }]
34 | }
35 | },
36 | sass: {
37 | dist: {
38 | options: {
39 | implementation: sass,
40 | outputStyle: 'expanded',
41 | sourceMap: false
42 | },
43 | files: [{
44 | expand: true,
45 | cwd: 'src/sass/',
46 | src: ['*.scss'],
47 | dest: 'docs/css/',
48 | ext: '.css'
49 | }]
50 | }
51 | },
52 | postcss: {
53 | options: {
54 | map: false,
55 | processors: [
56 | require('autoprefixer')({ overrideBrowserslist: 'last 2 versions' }), // add vendor prefixes
57 | ]
58 | },
59 | dist: {
60 | src: ['docs/css/*.css']
61 | }
62 | },
63 | cssmin: {
64 | target: {
65 | files: [{
66 | expand: true,
67 | cwd: 'docs/css',
68 | src: ['*.css', '!*.min.css'],
69 | dest: 'docs/css',
70 | ext: '.min.css'
71 | }]
72 | }
73 | }
74 | });
75 |
76 | // Load the Grunt plugins.
77 | grunt.loadNpmTasks('grunt-sass');
78 | grunt.loadNpmTasks('grunt-postcss');
79 | grunt.loadNpmTasks('grunt-contrib-cssmin');
80 | grunt.loadNpmTasks('grunt-contrib-pug');
81 | grunt.loadNpmTasks('grunt-contrib-watch');
82 |
83 | // Set task aliases
84 | grunt.registerTask('default', ['watch']);
85 | grunt.registerTask('build', ['pug', 'sass', 'postcss', 'cssmin']);
86 | };
87 |
--------------------------------------------------------------------------------
/LICENSE:
--------------------------------------------------------------------------------
1 | MIT License
2 |
3 | Copyright (c) 2016-Present, Pratik Borsadiya
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 must 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 | # Vali Admin
2 |
3 | 
4 |
5 | [](https://badge.fury.io/js/vali-admin)
6 |
7 | Vali is a free, modular and easy to customize admin theme built using [Bootstrap 5](https://getbootstrap.com), [SASS](http://sass-lang.com) and [Pug.js](https://pugjs.org).
8 |
9 | ## Getting started
10 |
11 | Run a `npm install` command in project root directory to install and build dependencies. If you don't want to edit theme you can use the compiled files inside `docs` folder.
12 |
13 | Use `npm run dev` command to watch and compile source files.
14 |
15 | Use `npm run build` command to compile all source files.
16 |
17 | Use `npm run start` command to start a development server using NodeJs.
18 |
19 | > **Note:**
20 | > * The NodeJs server mentioned in `npm run start` command is for development purpose only. DONOT use it as a production server.
21 |
22 | ## Customization
23 | For more information about customizing theme colors please follow the official [documentation](https://pratikborsadiya.in/vali-admin/docs.html).
24 |
25 | ## RTL Support
26 | Please follow the official [documentation](https://pratikborsadiya.in/vali-admin/docs.html) to enable RTL support.
27 |
28 | ## Contributing
29 | Please take a look at [contributing guidelines](CONTRIBUTING.md) if you are considering contributing to the repository.
30 |
31 | ## Contributors
32 |
33 | * **[Pratik Borsadiya](http://pratikborsadiya.in)** - *Project Author*
34 | * **List of [contributors](https://github.com/pratikborsadiya/vali-admin/graphs/contributors)** who participated in this project.
35 |
36 | ## License
37 |
38 | This project is licensed under the [MIT](LICENSE) License
39 |
--------------------------------------------------------------------------------
/docs/blank-page.html:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 |
6 |
7 |
8 |
9 |
10 |
11 |
12 |
13 |
14 |
15 |
16 | Blank Page - Vali Admin
17 |
18 |
19 |
20 |
21 |
22 |
23 |
24 |
25 |
26 |
27 |
84 |
85 |
86 |
129 |
130 |
131 |
132 |
Blank Page
133 |
Start a beautiful journey here
134 |
135 |
139 |
140 |
141 |
142 |
143 |
Create a beautiful dashboard
144 |
145 |
146 |
147 |
148 |
149 |
150 |
151 |
152 |
153 |
154 |
164 |
165 |
--------------------------------------------------------------------------------
/docs/images/banner.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/pratikborsadiya/vali-admin/7130e93e650206d627cbe762ea0827cf592f3b83/docs/images/banner.jpg
--------------------------------------------------------------------------------
/docs/index.html:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 |
6 |
7 |
8 |
9 |
10 |
11 |
12 |
13 |
14 |
15 |
16 |
17 |
18 |
19 | Vali Admin - Free Bootstrap 5 Dashboard Template
20 |
21 |
22 |
23 |
24 |
25 |
26 | chart
27 |
28 |
29 |
30 |
31 |
32 | globe
33 |
34 |
35 |
36 |
37 |
38 | grid
39 |
40 |
41 |
42 |
43 |
44 |
45 | layout
46 |
47 |
48 |
49 |
50 |
51 | smartphone
52 |
53 |
54 |
55 |
56 | zap
57 |
58 |
59 |
60 |
61 |
62 |
63 |
64 |
Vali Admin - A Free Bootstrap 5 Dashboard Template
65 |
Built with PugJS, SASS, and Bootstrap 5
66 |
67 |
68 |
69 |
70 | Features
71 |
72 |
73 |
74 |
75 |
76 |
77 |
78 |
Free to use and open-source
79 |
80 |
81 |
82 |
83 |
84 |
85 |
86 |
Beautiful and mobile responsive
87 |
88 |
89 |
90 |
91 |
92 |
93 |
94 |
Built with Bootstrap 5, SASS and PUG.js
95 |
96 |
97 |
98 |
99 |
100 |
101 |
102 |
Chart.js integration to display responsive charts
103 |
104 |
105 |
106 |
107 |
108 |
109 |
110 |
Seven pre built pages including login, user profile and print friendly invoice page
111 |
112 |
113 |
114 |
115 |
116 |
117 |
118 |
Data tables with sort, search and paginate functions
119 |
120 |
121 |
122 |
123 |
124 |
--------------------------------------------------------------------------------
/docs/js/main.js:
--------------------------------------------------------------------------------
1 | (function () {
2 | "use strict";
3 |
4 | var treeviewMenu = $('.app-menu');
5 |
6 | // Toggle Sidebar
7 | $('[data-toggle="sidebar"]').click(function(event) {
8 | event.preventDefault();
9 | $('.app').toggleClass('sidenav-toggled');
10 | });
11 |
12 | // Activate sidebar treeview toggle
13 | $("[data-toggle='treeview']").click(function(event) {
14 | event.preventDefault();
15 | if(!$(this).parent().hasClass('is-expanded')) {
16 | treeviewMenu.find("[data-toggle='treeview']").parent().removeClass('is-expanded');
17 | }
18 | $(this).parent().toggleClass('is-expanded');
19 | });
20 |
21 | })();
22 |
--------------------------------------------------------------------------------
/docs/page-error.html:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 |
6 |
7 |
8 |
9 |
10 |
11 |
12 |
13 |
14 |
15 |
16 | Error Page - Vali Admin
17 |
18 |
19 |
20 |
21 |
22 |
23 |
24 |
25 |
26 |
27 |
84 |
85 |
86 |
129 |
130 |
131 |
Error 404: Page not found
132 |
The page you have requested is not found.
133 |
Go Back
134 |
135 |
136 |
137 |
138 |
139 |
140 |
141 |
142 |
152 |
153 |
--------------------------------------------------------------------------------
/docs/page-invoice.html:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 |
6 |
7 |
8 |
9 |
10 |
11 |
12 |
13 |
14 |
15 |
16 | Invoice - Vali Admin
17 |
18 |
19 |
20 |
21 |
22 |
23 |
24 |
25 |
26 |
27 |
84 |
85 |
86 |
129 |
130 |
131 |
132 |
Invoice
133 |
A Printable Invoice Format
134 |
135 |
139 |
140 |
141 |
142 |
143 |
144 |
145 |
146 |
147 |
148 |
149 |
Date: 01/01/2016
150 |
151 |
152 |
153 |
From
154 |
Vali Inc. 518 Akshar Avenue Gandhi Marg New Delhi Email: hello@vali.com
155 |
156 |
To
157 |
John Doe 795 Folsom Ave, Suite 600 San Francisco, CA 94107 Phone: (555) 539-1037 Email: john.doe@example.com
158 |
159 |
Invoice #007612 Order ID: 4F3S8JPayment Due: 2/22/2014Account: 968-34567
160 |
161 |
162 |
163 |
164 |
165 |
166 | Qty
167 | Product
168 | Serial #
169 | Description
170 | Subtotal
171 |
172 |
173 |
174 |
175 | 1
176 | The Hunger Games
177 | 455-981-221
178 | El snort testosterone trophy driving gloves handsome
179 | $41.32
180 |
181 |
182 | 1
183 | City of Bones
184 | 247-925-726
185 | Wes Anderson umami biodiesel
186 | $75.52
187 |
188 |
189 | 1
190 | The Maze Runner
191 | 545-457-47
192 | Terry Richardson helvetica tousled street art master
193 | $15.25
194 |
195 |
196 | 1
197 | The Fault in Our Stars
198 | 757-855-857
199 | Tousled lomo letterpress
200 | $03.44
201 |
202 |
203 |
204 |
205 |
206 |
209 |
210 |
211 |
212 |
213 |
214 |
215 |
216 |
217 |
218 |
219 |
220 |
230 |
231 |
--------------------------------------------------------------------------------
/docs/page-lockscreen.html:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 |
6 |
7 |
8 |
9 |
10 |
11 | Lockscreen - Vali Admin
12 |
13 |
14 |
17 |
18 |
19 |
Vali
20 |
21 |
35 |
36 |
37 |
38 |
39 |
40 |
41 |
--------------------------------------------------------------------------------
/docs/page-login.html:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 |
6 |
7 |
8 |
9 |
10 |
11 | Login - Vali Admin
12 |
13 |
14 |
17 |
18 |
19 |
Vali
20 |
21 |
60 |
61 |
62 |
63 |
64 |
65 |
72 |
73 |
--------------------------------------------------------------------------------
/docs/ui-cards.html:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 |
6 |
7 |
8 |
9 |
10 |
11 |
12 |
13 |
14 |
15 |
16 | Cards - Vali Admin
17 |
18 |
19 |
20 |
21 |
22 |
23 |
24 |
25 |
26 |
27 |
84 |
85 |
86 |
129 |
130 |
131 |
132 |
Cards
133 |
Material design inspired cards
134 |
135 |
136 |
137 | UI
138 | Cards
139 |
140 |
141 |
142 |
143 |
144 |
Card Title
145 |
Hey there, I am a very simple card. I am good at containing small bits of information. I am quite convenient because I require little markup to use effectively.
146 |
147 |
148 |
149 |
150 |
151 |
155 |
156 | Card with action button
157 | Hey there, I am a very simple card. I am good at containing small bits of information. I am quite convenient because I require little markup to use effectively.
158 |
159 |
160 |
161 |
162 |
163 |
164 |
165 |
166 |
167 |
All Items
168 |
169 |
170 |
171 | Card with button group
172 | Hey there, I am a very simple card. I am good at containing small bits of information. I am quite convenient because I require little markup to use effectively.
173 |
174 |
175 |
176 |
177 |
178 |
179 |
180 |
181 |
182 |
183 |
184 |
185 |
Loading
186 |
187 |
191 |
192 | Card with action button
193 | Hey there, I am a very simple card. I am good at containing small bits of information. I am quite convenient because I require little markup to use effectively.
194 |
195 |
196 |
197 |
198 |
199 |
200 |
201 |
202 |
203 |
204 |
205 |
215 |
216 |
--------------------------------------------------------------------------------
/docs/widgets.html:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 |
6 |
7 |
8 |
9 |
10 |
11 |
12 |
13 |
14 |
15 |
16 | Widgets - Vali Admin
17 |
18 |
19 |
20 |
21 |
22 |
23 |
24 |
25 |
26 |
27 |
84 |
85 |
86 |
129 |
130 |
131 |
132 |
Widgets
133 |
Widgets to interactively display data
134 |
135 |
140 |
141 |
142 |
150 |
158 |
166 |
174 |
175 |
176 |
184 |
192 |
200 |
208 |
209 |
210 |
211 |
212 |
Chat
213 |
214 |
215 |
216 |
Hello there! Good Morning
217 |
218 |
219 |
Hi Good Morning
220 |
221 |
222 |
How are you?
223 |
224 |
225 |
I'm Fine.
226 |
227 |
228 |
229 |
230 |
231 |
232 |
233 |
234 |
235 |
236 |
237 |
238 |
239 |
240 |
241 |
242 |
243 |
253 |
254 |
--------------------------------------------------------------------------------
/node-dev-server.js:
--------------------------------------------------------------------------------
1 | // Node JS development server for Vali Admin
2 |
3 | const http = require("http");
4 | const url = require("url");
5 | const path = require("path");
6 | const fs = require("fs");
7 | const port = process.argv[2] || 8888;
8 |
9 | http.createServer(function (request, response) {
10 | var uri = url.parse(request.url).pathname,
11 | filename = path.join(process.cwd(), 'docs', uri);
12 | if (uri.includes('..')) {
13 | response.writeHead(403, { 'Content-Type': 'text/plain' });
14 | response.end();
15 | return;
16 | }
17 |
18 | var extname = path.extname(filename);
19 | var contentType = 'text/html';
20 |
21 | switch (extname) {
22 | case '.js': contentType = 'text/javascript'; break;
23 | case '.css': contentType = 'text/css'; break;
24 | case '.ico': contentType = 'image/x-icon'; break;
25 | case '.svg': contentType = 'image/svg+xml'; break;
26 | }
27 |
28 | fs.exists(filename, function (exists) {
29 | if (!exists) {
30 | response.writeHead(404, { "Content-Type": "text/plain" });
31 | response.write("404 Not Found\n");
32 | response.end();
33 | return;
34 | }
35 |
36 | if (fs.statSync(filename).isDirectory()) filename += '/index.html';
37 |
38 | fs.readFile(filename, "binary", function (err, file) {
39 | if (err) {
40 | response.writeHead(500, { "Content-Type": "text/plain" });
41 | response.write(err + "\n");
42 | response.end();
43 | return;
44 | }
45 | response.writeHead(200, { 'Content-Type': contentType });
46 | response.write(file, "binary");
47 | response.end();
48 | });
49 | });
50 | }).listen(parseInt(port, 10));
51 |
52 | console.log("Server is running on http://localhost:" + port);
53 |
--------------------------------------------------------------------------------
/package.json:
--------------------------------------------------------------------------------
1 | {
2 | "name": "vali-admin",
3 | "version": "4.1.0",
4 | "description": "An admin theme built with Bootstrap, sass and PugJs",
5 | "devDependencies": {
6 | "autoprefixer": "^9.8.8",
7 | "grunt": "^1.6.1",
8 | "grunt-contrib-cssmin": "^5.0.0",
9 | "grunt-contrib-pug": "^3.0.0",
10 | "grunt-contrib-watch": "^1.1.0",
11 | "grunt-postcss": "^0.9.0",
12 | "grunt-sass": "^3.1.0",
13 | "sass": "^1.69.3"
14 | },
15 | "scripts": {
16 | "dev": "grunt watch",
17 | "build": "grunt build --verbose",
18 | "start": "node node-dev-server.js"
19 | },
20 | "repository": {
21 | "type": "git",
22 | "url": "git+https://github.com/pratikborsadiya/vali-admin.git"
23 | },
24 | "keywords": [
25 | "admin",
26 | "dashboard",
27 | "theme"
28 | ],
29 | "author": "Pratik Borsadiya",
30 | "license": "MIT",
31 | "bugs": {
32 | "url": "https://github.com/pratikborsadiya/vali-admin/issues"
33 | },
34 | "homepage": "http://pratikborsadiya.in/blog/vali-admin",
35 | "dependencies": {
36 | "bootstrap": "^5.3.2"
37 | },
38 | "files": [
39 | "docs"
40 | ]
41 | }
42 |
--------------------------------------------------------------------------------
/src/pug/blank-page.pug:
--------------------------------------------------------------------------------
1 | extends layouts/_layout.pug
2 |
3 | block variables
4 | - var activePage = 'blank-page';
5 | - var activeGroup = 'pages';
6 |
7 | block title
8 | title Blank Page - Vali Admin
9 |
10 | block content
11 | .app-title
12 | div
13 | h1
14 | i.bi.bi-speedometer
15 | | Blank Page
16 | p Start a beautiful journey here
17 |
18 | ul.app-breadcrumb.breadcrumb
19 | li.breadcrumb-item
20 | i.bi.bi-house-door.fs-6
21 | li.breadcrumb-item
22 | a(href='#') Blank Page
23 |
24 | .row
25 | .col-md-12
26 | .tile
27 | .tile-body Create a beautiful dashboard
--------------------------------------------------------------------------------
/src/pug/dashboard.pug:
--------------------------------------------------------------------------------
1 | extends layouts/_layout.pug
2 |
3 | block variables
4 | - var activePage = 'dashboard';
5 | - var activeGroup = 'none';
6 |
7 | block content
8 | .app-title
9 | div
10 | h1
11 | i.bi.bi-speedometer
12 | | Dashboard
13 | p A free and open source Bootstrap 5 admin template
14 |
15 | ul.app-breadcrumb.breadcrumb
16 | li.breadcrumb-item
17 | i.bi.bi-house-door.fs-6
18 | li.breadcrumb-item
19 | a(href='#') Dashboard
20 |
21 | .row
22 | .col-md-6.col-lg-3
23 | .widget-small.primary.coloured-icon
24 | i.icon.bi.bi-people.fs-1
25 | div.info
26 | h4 Users
27 | p
28 | b 5
29 |
30 | .col-md-6.col-lg-3
31 | .widget-small.info.coloured-icon
32 | i.icon.bi.bi-heart.fs-1
33 | div.info
34 | h4 Likes
35 | p
36 | b 25
37 |
38 | .col-md-6.col-lg-3
39 | .widget-small.warning.coloured-icon
40 | i.icon.bi.bi-folder2.fs-1
41 | div.info
42 | h4 Uploades
43 | p
44 | b 10
45 |
46 | .col-md-6.col-lg-3
47 | .widget-small.danger.coloured-icon
48 | i.icon.bi.bi-star.fs-1
49 | div.info
50 | h4 Stars
51 | p
52 | b 500
53 | .row
54 | .col-md-6
55 | .tile
56 | h3.tile-title Weekly Sales - Last week
57 | .ratio.ratio-16x9
58 | div(id="salesChart")
59 |
60 | .col-md-6
61 | .tile
62 | h3.tile-title Support Requests
63 | .ratio.ratio-16x9
64 | div(id="supportRequestChart")
65 |
66 |
67 | block specific-js
68 | script(type="text/javascript" src="https://cdn.jsdelivr.net/npm/echarts@5.4.3/dist/echarts.min.js")
69 | script(type="text/javascript").
70 | const salesData = {
71 | xAxis: {
72 | type: 'category',
73 | data: ['Mon', 'Tue', 'Wed', 'Thu', 'Fri', 'Sat', 'Sun']
74 | },
75 | yAxis: {
76 | type: 'value',
77 | axisLabel: {
78 | formatter: '${value}'
79 | }
80 | },
81 | series: [
82 | {
83 | data: [150, 230, 224, 218, 135, 147, 260],
84 | type: 'line',
85 | smooth: true
86 | }
87 | ],
88 | tooltip: {
89 | trigger: 'axis',
90 | formatter: "{b0}: ${c0}"
91 | }
92 | }
93 |
94 | const supportRequests = {
95 | tooltip: {
96 | trigger: 'item'
97 | },
98 | legend: {
99 | orient: 'vertical',
100 | left: 'left'
101 | },
102 | series: [
103 | {
104 | name: 'Support Requests',
105 | type: 'pie',
106 | radius: '50%',
107 | data: [
108 | { value: 300, name: 'In Progress' },
109 | { value: 50, name: 'Delayed' },
110 | { value: 100, name: 'Complete' }
111 | ],
112 | emphasis: {
113 | itemStyle: {
114 | shadowBlur: 10,
115 | shadowOffsetX: 0,
116 | shadowColor: 'rgba(0, 0, 0, 0.5)'
117 | }
118 | }
119 | }
120 | ]
121 | };
122 |
123 | const salesChartElement = document.getElementById('salesChart');
124 | const salesChart = echarts.init(salesChartElement, null, { renderer: 'svg' });
125 | salesChart.setOption(salesData);
126 | new ResizeObserver(() => salesChart.resize()).observe(salesChartElement);
127 |
128 | const supportChartElement = document.getElementById("supportRequestChart")
129 | const supportChart = echarts.init(supportChartElement, null, { renderer: 'svg' });
130 | supportChart.setOption(supportRequests);
131 | new ResizeObserver(() => supportChart.resize()).observe(supportChartElement);
132 |
133 |
--------------------------------------------------------------------------------
/src/pug/docs.pug:
--------------------------------------------------------------------------------
1 | extends layouts/_layout.pug
2 |
3 | block variables
4 | - var activePage = 'docs';
5 | - var activeGroup = 'none';
6 |
7 | block title
8 | title Documentation - Vali Admin
9 |
10 | block content
11 | .app-title
12 | div
13 | h1
14 | i.bi.bi-code-square
15 | | Documentation
16 | p Documentation of vali admin
17 |
18 | ul.app-breadcrumb.breadcrumb
19 | li.breadcrumb-item
20 | i.bi.bi-house-door.fs-6
21 | li.breadcrumb-item
22 | a(href='#') Documentation
23 |
24 |
25 | .tile
26 | .tile-body
27 | .docs(style="max-width: 700px;")
28 | h2.docs-title Directory Structure
29 |
30 | pre.directory-structure.
31 | │
32 | ├── docs - compiled files
33 | │ ├── css
34 | │ ├── images
35 | │ └── js
36 | └── src - Layout and style source files
37 | ├── pug - Layout source
38 | └── sass - Style source
39 |
40 | h2.docs-title#Compilation-of-source-files Compilation of source files
41 |
42 | p The theme is built using SASS and PugJs which are in turn compiled into HTML and CSS by Grunt. If you are not familiar with Grunt, #[a(href="https://24ways.org/2013/grunt-is-not-weird-and-hard/", target="_blank", rel="noopener") here] is an article to get started. If you are familiar with Grunt follow the instruction mentioned bellow to edit or customize the source.
43 |
44 | p If you don't want to edit theme you can use the compiled files directly inside #[code docs] folder.
45 |
46 | p Run #[code npm install] command in project root directory to install and build dependencies.
47 |
48 | p Use #[code npm run dev] task to edit and compile source files on the go or use #[code npm run build] task to compile all source files at once.
49 |
50 | h2.docs-title#Layout-Customization Layout Customization
51 |
52 | p The layout is built using PugJs. All the layout source files are located in #[code src/pug] directory. There are two sub directories inside this directory:
53 |
54 | ol
55 | li #[code layout] - Includes common HTML skeleton layout which is extended by all the pages
56 | li #[code includes] - Includes layout partials like sidebar and navbar and footer
57 |
58 | h2.docs-title#Style-Customization Style Customization
59 | p The styles are written in SASS. All the style files are located in #[code src/sass] directory. There is a file in this directory #[code main.sass] which imports all the files and exported as main.css There are four sub directories inside this directory:
60 |
61 | ol
62 | li #[code 1-tools] - It includes styles of all the external libraries and a file #[code _var.scss] which contains the variables required for the application
63 | li #[code 2-basics] - It contains the basic style like overall structure css and theming options
64 | li #[code 3-component] - It contains the styles for the components like card, widgets, sidebar, navbar etc
65 | li #[code 4-pages] - It contains the styles for the specific pages like login page, lock-screen page
66 |
67 | p To customize the primary color of the theme and sidebar you need to change the variables in the #[code 1-tools/_var.scss]. The detailed documentation about changing the colors is mentioned in this file itself.
68 |
69 | p If you don't want to use particular component or plug-in just comment the import statement for that particular component in #[code src/sass/main.scss] and compile the SASS by running #[code npm run build] command.
70 |
71 | h2.docs-title#Compatibility-with-other-frameworks Compatibility with other frameworks
72 | p This theme is not built for a specific framework or technology like Angular or React etc. But due to it's modular nature it's very easy to incorporate it into any front-end or back-end framework like Angular, React or VueJs or Node JS. The CSS is modular enough to be incorporated in any framework. While the Javascript used to make the components interactive can be used from any of the following framework.
73 |
74 | p If you are using Angular you can use #[a(href="https://angular-ui.github.io/bootstrap/", rel="noopener") ui-bootstrap], for React use #[a(href="https://react-bootstrap.github.io/", rel="noopener") React-Bootstrap] and for VueJs you can use #[a(href="https://yuche.github.io/vue-strap/", rel="noopener") VueStrap].
75 |
76 | p If you are using Node JS as your web server you can use pug as your layout engine to render html templates as is without compiling them to HTML. More details are available #[a(href="https://pugjs.org/api/express.html", target="_balnk") here].
77 |
78 | h2.docs-title#RTL-Support RTL Support
79 |
80 | p To enable RTL support
81 | ul
82 | li Uncomment this line #[code @import '3-component/rtl';] in #[code src/sass/main.scss].
83 | li Add #[code dir="rtl"] attribute to #[code <html>] tag in #[code src/pug/layouts/_layout.pug].
84 | li Build the source files using #[code npm run build] command.
85 |
86 | h2.docs-title#Contribution-and-Issues Contribution & Issues
87 |
88 | p If you liked the theme do star and fork it on #[a(href="https://github.com/pratikborsadiya/vali-admin", target="_blank", rel="noopener") GitHub]. If you find anything missing or want to contribute to this documentation, the source is available #[a(href="https://github.com/pratikborsadiya/vali-admin/blob/master/src/pug/docs.pug", target="_blank", rel="noopener") here]. If you have an issue or feature request regarding theme please report it #[a(href="https://github.com/pratikborsadiya/vali-admin/issues/new", target="_blank", rel="noopener") here].
--------------------------------------------------------------------------------
/src/pug/form-components.pug:
--------------------------------------------------------------------------------
1 | extends layouts/_layout.pug
2 |
3 | block variables
4 | - var activePage = 'form-components';
5 | - var activeGroup = 'forms';
6 |
7 | block title
8 | title Form Components - Vali Admin
9 |
10 | block content
11 | .app-title
12 | div
13 | h1
14 | i.bi.bi-ui-checks
15 | | Form Components
16 | p Bootstrap default form components
17 |
18 | ul.app-breadcrumb.breadcrumb
19 | li.breadcrumb-item
20 | i.bi.bi-house-door.fs-6
21 | li.breadcrumb-item
22 | | Forms
23 | li.breadcrumb-item
24 | a(href="#") Form Components
25 |
26 | .row
27 | .col-md-12
28 | .tile
29 | .row
30 | .col-lg-6
31 | form
32 | .mb-3
33 | label.form-label(for='exampleInputEmail1') Email address
34 | input#exampleInputEmail1.form-control(type='email', aria-describedby='emailHelp', placeholder='Enter email')
35 | small#emailHelp.form-text.text-muted We'll never share your email with anyone else.
36 | .mb-3
37 | label.form-label(for='exampleInputPassword1') Password
38 | input#exampleInputPassword1.form-control(type='password', placeholder='Password')
39 | .mb-3
40 | label.form-label(for='exampleSelect1') Example select
41 | select#exampleSelect1.form-control
42 | option 1
43 | option 2
44 | option 3
45 | option 4
46 | option 5
47 | .mb-3
48 | label.form-label(for='exampleSelect2') Example multiple select
49 | select#exampleSelect2.form-control(multiple='')
50 | option 1
51 | option 2
52 | option 3
53 | option 4
54 | option 5
55 | .mb-3
56 | label.form-label(for='exampleTextarea') Example textarea
57 | textarea#exampleTextarea.form-control(rows='3')
58 | .mb-3
59 | label.form-label(for='exampleInputFile') File input
60 | input#exampleInputFile.form-control(type='file', aria-describedby='fileHelp')
61 | div.form-text.text-muted
62 | | This is some placeholder block-level help text for the above input. It's a bit lighter and easily wraps to a new line.
63 | fieldset.mb-3
64 | legend Radio buttons
65 | .form-check
66 | label.form-check-label
67 | input#optionsRadios1.form-check-input(type='radio', name='optionsRadios', value='option1', checked='')
68 | | Option one is this and that—be sure to include why it's great
69 | .form-check
70 | label.form-check-label
71 | input#optionsRadios2.form-check-input(type='radio', name='optionsRadios', value='option2')
72 | | Option two can be something else and selecting it will deselect option one
73 | .form-check.disabled
74 | label.form-check-label
75 | input#optionsRadios3.form-check-input(type='radio', name='optionsRadios', value='option3', disabled)
76 | | Option three is disabled
77 | .form-check
78 | label.form-check-label
79 | input.form-check-input(type='checkbox')
80 | | Check me out
81 |
82 | .col-lg-4.offset-lg-1
83 | form
84 | .mb-3
85 | fieldset(disabled='')
86 | label.form-label(for='disabledInput') Disabled input
87 | input#disabledInput.form-control(type='text', placeholder='Disabled input here...', disabled='')
88 | .mb-3
89 | fieldset
90 | label.form-label(for='readOnlyInput') Readonly input
91 | input#readOnlyInput.form-control(type='text', placeholder='Readonly input here…', readonly='')
92 | .mb-3.has-success
93 | label.form-form-label(for='inputSuccess1') Valid input
94 | input#inputValid.form-control.is-valid(type='text')
95 | .form-control-feedback Success! You've done it.
96 | .mb-3.has-danger
97 | label.form-form-label(for='inputDanger1') Invalid input
98 | input#inputInvalid.form-control.is-invalid(type='text')
99 | .form-control-feedback Sorry, that username's taken. Try another?
100 | .mb-3
101 | label.col-form-label.col-form-label-lg(for='inputLarge') Large input
102 | input#inputLarge.form-control.form-control-lg(type='text')
103 | .mb-3
104 | label.col-form-label(for='inputDefault') Default input
105 | input#inputDefault.form-control(type='text')
106 | .mb-3
107 | label.col-form-label.col-form-label-sm(for='inputSmall') Small input
108 | input#inputSmall.form-control.form-control-sm(type='text')
109 | .mb-3
110 | label.form-label Input addons
111 | .mb-3
112 | label.sr-only(for='exampleInputAmount') Amount (in dollars)
113 | .input-group
114 | .input-group-prepend
115 | span.input-group-text $
116 | input#exampleInputAmount.form-control(type='text', placeholder='Amount')
117 | .input-group-append
118 | span.input-group-text .00
119 | .tile-footer
120 | button.btn.btn-primary(type='submit') Submit
--------------------------------------------------------------------------------
/src/pug/form-samples.pug:
--------------------------------------------------------------------------------
1 | extends layouts/_layout.pug
2 |
3 | block variables
4 | - var activePage = 'form-samples';
5 | - var activeGroup = 'forms';
6 |
7 | block title
8 | title Form Samples - Vali Admin
9 |
10 | block content
11 | .app-title
12 | div
13 | h1
14 | i.bi.bi-ui-checks
15 | | Form Samples
16 | p Sample forms
17 |
18 | ul.app-breadcrumb.breadcrumb
19 | li.breadcrumb-item
20 | i.bi.bi-house-door.fs-6
21 | li.breadcrumb-item
22 | | Forms
23 | li.breadcrumb-item
24 | a(href="#") Sample Forms
25 |
26 | .row
27 | .col-md-6
28 | .tile
29 | h3.tile-title Vertical Form
30 | .tile-body
31 | form
32 | .mb-3
33 | label.form-label Name
34 | input.form-control(type="text", placeholder="Enter full name")
35 |
36 | .mb-3
37 | label.form-label Email
38 | input.form-control(type="email", placeholder="Enter email address")
39 |
40 | .mb-3
41 | label.form-label Address
42 | textarea.form-control(rows="4", placeholder="Enter your address")
43 |
44 | .mb-3
45 | label.form-label Gender
46 | .form-check
47 | label.form-check-label
48 | input.form-check-input(type='radio', name="gender")
49 | | Male
50 | .form-check
51 | label.form-check-label
52 | input.form-check-input(type='radio', name="gender")
53 | | Female
54 |
55 | .mb-3
56 | label.form-label Identity Proof
57 | input.form-control(type="file")
58 |
59 | .mb-3
60 | .form-check
61 | label.form-check-label
62 | input.form-check-input(type='checkbox')
63 | | I accept the terms and conditions
64 |
65 | .tile-footer
66 | button.btn.btn-primary(type="button")
67 | i.bi.bi-check-circle-fill.me-2
68 | | Register
69 | |
70 | a.btn.btn-secondary(href="#")
71 | i.bi.bi-x-circle-fill.me-2
72 | | Cancel
73 |
74 | .col-md-6
75 | .tile
76 | h3.tile-title Register
77 | .tile-body
78 | form.form-horizontal
79 | .mb-3.row
80 | label.form-label.col-md-3 Name
81 | .col-md-8
82 | input.form-control(type="text", placeholder="Enter full name")
83 |
84 | .mb-3.row
85 | label.form-label.col-md-3 Email
86 | .col-md-8
87 | input.form-control.col-md-8(type="email", placeholder="Enter email address")
88 |
89 | .mb-3.row
90 | label.form-label.col-md-3 Address
91 | .col-md-8
92 | textarea.form-control(rows="4", placeholder="Enter your address")
93 |
94 | .mb-3.row
95 | label.form-label.col-md-3 Gender
96 | .col-md-9
97 | .form-check
98 | label.form-check-label
99 | input.form-check-input(type='radio', name="gender")
100 | | Male
101 | .form-check
102 | label.form-check-label
103 | input.form-check-input(type='radio', name="gender")
104 | | Female
105 |
106 | .mb-3.row
107 | label.form-label.col-md-3 Identity Proof
108 | .col-md-8
109 | input.form-control(type="file")
110 |
111 | .mb-3.row
112 | .col-md-8.col-md-offset-3
113 | .form-check
114 | label.form-check-label
115 | input.form-check-input(type='checkbox')
116 | | I accept the terms and conditions
117 |
118 | .tile-footer
119 | .row
120 | .col-md-8.col-md-offset-3
121 | button.btn.btn-primary(type="button")
122 | i.bi.bi-check-circle-fill.me-2
123 | | Register
124 | |
125 | a.btn.btn-secondary(href="#")
126 | i.bi.bi-x-circle-fill.me-2
127 | | Cancel
128 | .clearix
129 |
130 | .col-md-12
131 | .tile
132 | h3.tile-title Subscribe
133 |
134 | .tile-body
135 |
136 | form.row
137 |
138 | .mb-3.col-md-3
139 | label.form-label Name
140 | input.form-control(type="text", placeholder="Enter your name")
141 |
142 | .mb-3.col-md-3
143 | label.form-label Email
144 | input.form-control(type="text", placeholder="Enter your email")
145 |
146 | .mb-3.col-md-4.align-self-end
147 | button.btn.btn-primary(type="button")
148 | i.bi.bi-check-circle-fill.me-2
149 | | Subscribe
150 |
151 |
--------------------------------------------------------------------------------
/src/pug/includes/_head.pug:
--------------------------------------------------------------------------------
1 | meta(charset='utf-8')
2 | meta(http-equiv='X-UA-Compatible', content='IE=edge')
3 | meta(name='viewport', content='width=device-width, initial-scale=1')
4 |
5 | // Main CSS
6 | link(rel='stylesheet', type='text/css', href='css/main.css')
7 | // Font-icon css
8 | link(rel='stylesheet', type='text/css', href='https://cdn.jsdelivr.net/npm/bootstrap-icons@1.10.5/font/bootstrap-icons.css')
--------------------------------------------------------------------------------
/src/pug/includes/_header.pug:
--------------------------------------------------------------------------------
1 | header.app-header
2 | a.app-header__logo(href='index.html') Vali
3 |
4 | // Sidebar toggle button
5 | a.app-sidebar__toggle(href='#', data-toggle='sidebar', aria-label="Hide Sidebar")
6 |
7 | // Navbar Right Menu
8 | ul.app-nav
9 |
10 | li.app-search
11 | input.app-search__input(type="search", placeholder="Search")
12 | button.app-search__button: i.bi.bi-search
13 |
14 | //Notification Menu
15 | li.dropdown
16 | a.app-nav__item(href='#', data-bs-toggle='dropdown' aria-label="Show notifications")
17 | i.bi.bi-bell.fs-5
18 | ul.app-notification.dropdown-menu.dropdown-menu-right
19 | li.app-notification__title You have 4 new notifications.
20 | .app-notification__content
21 | li
22 | a.app-notification__item(href='javascript:;')
23 | span.app-notification__icon
24 | i.bi.bi-envelope.fs-4.text-primary
25 | div
26 | p.app-notification__message Lisa sent you a mail
27 | p.app-notification__meta 2 min ago
28 |
29 | li
30 | a.app-notification__item(href='javascript:;')
31 | span.app-notification__icon
32 | i.bi.bi-exclamation-triangle.fs-4.text-warning
33 | div
34 | p.app-notification__message Mail server not working
35 | p.app-notification__meta 5 min ago
36 |
37 | li
38 | a.app-notification__item(href='javascript:;')
39 | span.app-notification__icon
40 | i.bi.bi-cash.fs-4.text-success
41 | div
42 | p.app-notification__message Transaction complete
43 | p.app-notification__meta 2 days ago
44 |
45 | li
46 | a.app-notification__item(href='javascript:;')
47 | span.app-notification__icon
48 | i.bi.bi-envelope.fs-4.text-primary
49 | div
50 | p.app-notification__message Lisa sent you a mail
51 | p.app-notification__meta 2 min ago
52 |
53 | li
54 | a.app-notification__item(href='javascript:;')
55 | span.app-notification__icon
56 | i.bi.bi-exclamation-triangle.fs-4.text-warning
57 | div
58 | p.app-notification__message Mail server not working
59 | p.app-notification__meta 5 min ago
60 |
61 | li
62 | a.app-notification__item(href='javascript:;')
63 | span.app-notification__icon
64 | i.bi.bi-cash.fs-4.text-success
65 | div
66 | p.app-notification__message Transaction complete
67 | p.app-notification__meta 2 days ago
68 |
69 | li.app-notification__footer
70 | a(href='#') See all notifications.
71 |
72 | // User Menu
73 | li.dropdown
74 | a.app-nav__item(href='#', data-bs-toggle='dropdown' aria-label="Open Profile Menu")
75 | i.bi.bi-person.fs-4
76 | ul.dropdown-menu.settings-menu.dropdown-menu-right
77 | li
78 | a.dropdown-item(href='page-user.html')
79 | i.bi.bi-gear.me-2.fs-5
80 | | Settings
81 | li
82 | a.dropdown-item(href='page-user.html')
83 | i.bi.bi-person.me-2.fs-5
84 | | Profile
85 | li
86 | a.dropdown-item(href='page-login.html')
87 | i.bi.bi-box-arrow-right.me-2.fs-5
88 | | Logout
89 |
--------------------------------------------------------------------------------
/src/pug/includes/_javascript.pug:
--------------------------------------------------------------------------------
1 | // Essential javascripts for application to work
2 | script(src='js/jquery-3.7.0.min.js')
3 | script(src='js/bootstrap.min.js')
4 | script(src='js/main.js')
5 |
--------------------------------------------------------------------------------
/src/pug/includes/_landing-icons.pug:
--------------------------------------------------------------------------------
1 | svg(aria-hidden='true', style='position: absolute; width: 0; height: 0; overflow: hidden;', version='1.1', xmlns='http://www.w3.org/2000/svg', xmlns:xlink='http://www.w3.org/1999/xlink')
2 | defs
3 | symbol#icon-chart(viewbox='0 0 32 32')
4 | title chart
5 | path(stroke-linejoin='round', stroke-linecap='round', stroke-miterlimit='4', stroke-width='2.6667', d='M24 26.667v-13.333')
6 | path(stroke-linejoin='round', stroke-linecap='round', stroke-miterlimit='4', stroke-width='2.6667', d='M16 26.667v-21.333')
7 | path(stroke-linejoin='round', stroke-linecap='round', stroke-miterlimit='4', stroke-width='2.6667', d='M8 26.667v-8')
8 | symbol#icon-globe(viewbox='0 0 32 32')
9 | title globe
10 | path(stroke-linejoin='round', stroke-linecap='round', stroke-miterlimit='4', stroke-width='2.6667', d='M29.333 16c0 7.364-5.97 13.333-13.333 13.333s-13.333-5.97-13.333-13.333c0-7.364 5.97-13.333 13.333-13.333s13.333 5.97 13.333 13.333z')
11 | path(stroke-linejoin='round', stroke-linecap='round', stroke-miterlimit='4', stroke-width='2.6667', d='M2.667 16h26.667')
12 | path(stroke-linejoin='round', stroke-linecap='round', stroke-miterlimit='4', stroke-width='2.6667', d='M16 2.667c3.216 3.512 5.223 8.178 5.333 13.311l0 0.022c-0.111 5.155-2.117 9.822-5.347 13.349l0.014-0.015c-3.216-3.512-5.223-8.178-5.333-13.311l-0-0.022c0.111-5.155 2.117-9.822 5.347-13.349l-0.014 0.015z')
13 | symbol#icon-grid(viewbox='0 0 32 32')
14 | title grid
15 | path(stroke-linejoin='round', stroke-linecap='round', stroke-miterlimit='4', stroke-width='2.6667', d='M4 4h9.333v9.333h-9.333v-9.333z')
16 | path(stroke-linejoin='round', stroke-linecap='round', stroke-miterlimit='4', stroke-width='2.6667', d='M18.667 4h9.333v9.333h-9.333v-9.333z')
17 | path(stroke-linejoin='round', stroke-linecap='round', stroke-miterlimit='4', stroke-width='2.6667', d='M18.667 18.667h9.333v9.333h-9.333v-9.333z')
18 | path(stroke-linejoin='round', stroke-linecap='round', stroke-miterlimit='4', stroke-width='2.6667', d='M4 18.667h9.333v9.333h-9.333v-9.333z')
19 | symbol#icon-layout(viewbox='0 0 32 32')
20 | title layout
21 | path(stroke-linejoin='round', stroke-linecap='round', stroke-miterlimit='4', stroke-width='2.6667', d='M6.667 4h18.667c1.473 0 2.667 1.194 2.667 2.667v18.667c0 1.473-1.194 2.667-2.667 2.667h-18.667c-1.473 0-2.667-1.194-2.667-2.667v-18.667c0-1.473 1.194-2.667 2.667-2.667z')
22 | path(stroke-linejoin='round', stroke-linecap='round', stroke-miterlimit='4', stroke-width='2.6667', d='M4 12h24')
23 | path(stroke-linejoin='round', stroke-linecap='round', stroke-miterlimit='4', stroke-width='2.6667', d='M12 28v-16')
24 | symbol#icon-smartphone(viewbox='0 0 32 32')
25 | title smartphone
26 | path(stroke-linejoin='round', stroke-linecap='round', stroke-miterlimit='4', stroke-width='2.6667', d='M9.333 2.667h13.333c1.473 0 2.667 1.194 2.667 2.667v21.333c0 1.473-1.194 2.667-2.667 2.667h-13.333c-1.473 0-2.667-1.194-2.667-2.667v-21.333c0-1.473 1.194-2.667 2.667-2.667z')
27 | path(stroke-linejoin='round', stroke-linecap='round', stroke-miterlimit='4', stroke-width='2.6667', d='M16 24v0')
28 | symbol#icon-zap(viewbox='0 0 32 32')
29 | title zap
30 | path(stroke-linejoin='round', stroke-linecap='round', stroke-miterlimit='4', stroke-width='2.6667', d='M17.333 2.667l-13.333 16h12l-1.333 10.667 13.333-16h-12l1.333-10.667z')
31 |
--------------------------------------------------------------------------------
/src/pug/includes/_sidebar.pug:
--------------------------------------------------------------------------------
1 | .app-sidebar__overlay(data-toggle="sidebar")
2 | aside.app-sidebar
3 |
4 | .app-sidebar__user
5 | img.app-sidebar__user-avatar(src='https://randomuser.me/api/portraits/men/1.jpg', alt='User Image')
6 | div
7 | p.app-sidebar__user-name John Doe
8 | p.app-sidebar__user-designation Frontend Developer
9 |
10 | ul.app-menu
11 | li
12 | a.app-menu__item(href='dashboard.html' class={'active': activePage == 'dashboard'})
13 | i.app-menu__icon.bi.bi-speedometer
14 | span.app-menu__label Dashboard
15 |
16 | li.treeview(class={'is-expanded': activeGroup == 'ui-elements'})
17 | a.app-menu__item(href='#', data-toggle='treeview')
18 | i.app-menu__icon.bi.bi-laptop
19 | span.app-menu__label UI Elements
20 | i.treeview-indicator.bi.bi-chevron-right
21 | ul.treeview-menu
22 | li
23 | a.treeview-item(href='bootstrap-components.html' class={'active': activePage == 'ui-bootstrap'})
24 | i.icon.bi.bi-circle-fill
25 | | Bootstrap Elements
26 | li
27 | a.treeview-item(href='https://icons.getbootstrap.com/', target="_blank", rel="noopener")
28 | i.icon.bi.bi-circle-fill
29 | | Font Icons
30 | li
31 | a.treeview-item(href='ui-cards.html' class={'active': activePage == 'ui-cards'})
32 | i.icon.bi.bi-circle-fill
33 | | Cards
34 | li
35 | a.treeview-item(href='widgets.html' class={'active': activePage == 'ui-widgets'})
36 | i.icon.bi.bi-circle-fill
37 | | Widgets
38 |
39 | li.treeview(class={'is-expanded': activeGroup == 'forms'})
40 | a.app-menu__item(href='#' data-toggle='treeview')
41 | i.app-menu__icon.bi.bi-ui-checks
42 | span.app-menu__label Forms
43 | i.treeview-indicator.bi.bi-chevron-right
44 | ul.treeview-menu
45 | li
46 | a.treeview-item(href='form-components.html' class={'active': activePage == 'form-components'})
47 | i.icon.bi.bi-circle-fill
48 | | Form Components
49 | li
50 | a.treeview-item(href='form-samples.html' class={'active': activePage == 'form-samples'})
51 | i.icon.bi.bi-circle-fill
52 | | Form Samples
53 |
54 | li.treeview(class={'is-expanded': activeGroup == 'tables'})
55 | a.app-menu__item(href='#' data-toggle='treeview')
56 | i.app-menu__icon.bi.bi-table
57 | span.app-menu__label Tables
58 | i.treeview-indicator.bi.bi-chevron-right
59 | ul.treeview-menu
60 | li
61 | a.treeview-item(href='table-basic.html' class={'active': activePage == 'basic-table'})
62 | i.icon.bi.bi-circle-fill
63 | | Basic Tables
64 | li
65 | a.treeview-item(href='table-data-table.html' class={'active': activePage == 'data-table'})
66 | i.icon.bi.bi-circle-fill
67 | | Data Tables
68 |
69 | li.treeview(class={'is-expanded': activeGroup == 'pages'})
70 | a.app-menu__item(href='#' data-toggle='treeview')
71 | i.app-menu__icon.bi.bi-file-earmark
72 | span.app-menu__label Pages
73 | i.treeview-indicator.bi.bi-chevron-right
74 | ul.treeview-menu
75 | li
76 | a.treeview-item(href='blank-page.html' class={'active': activePage == 'blank-page'})
77 | i.icon.bi.bi-circle-fill
78 | | Blank Page
79 | li
80 | a.treeview-item(href='page-login.html')
81 | i.icon.bi.bi-circle-fill
82 | | Login Page
83 | li
84 | a.treeview-item(href='page-lockscreen.html')
85 | i.icon.bi.bi-circle-fill
86 | | Lockscreen Page
87 | li
88 | a.treeview-item(href='page-user.html' class={'active': activePage == 'user-page'})
89 | i.icon.bi.bi-circle-fill
90 | | User Page
91 | li
92 | a.treeview-item(href='page-invoice.html' class={'active': activePage == 'invoice-page'})
93 | i.icon.bi.bi-circle-fill
94 | | Invoice Page
95 | li
96 | a.treeview-item(href='page-mailbox.html' class={'active': activePage == 'mailbox-page'})
97 | i.icon.bi.bi-circle-fill
98 | | Mailbox
99 | li
100 | a.treeview-item(href='page-error.html' class={'active': activePage == 'error-page'})
101 | i.icon.bi.bi-circle-fill
102 | | Error Page
103 |
104 | li
105 | a.app-menu__item(href='docs.html' class={'active': activePage == 'docs'})
106 | i.app-menu__icon.bi.bi-code-square
107 | span.app-menu__label Docs
--------------------------------------------------------------------------------
/src/pug/index.pug:
--------------------------------------------------------------------------------
1 | doctype html
2 | html
3 | head
4 | meta(charset='utf-8')
5 | meta(http-equiv='X-UA-Compatible', content='IE=edge')
6 | meta(name='viewport', content='width=device-width, initial-scale=1')
7 |
8 | meta(name="description", content="Vali is a responsive and free dashboard theme/template built with Bootstrap 5, SASS and PUG.js.")
9 |
10 | // Twitter meta
11 | meta(property="twitter:card", content="summary_large_image")
12 | meta(property="twitter:site", content="@pratikborsadiya")
13 | meta(property="twitter:creator", content="@pratikborsadiya")
14 |
15 | // Open Graph Meta
16 | meta(property="og:type", content="website")
17 | meta(property="og:site_name", content="Vali Admin")
18 | meta(property="og:title", content="Vali Admin - Free Bootstrap 5 Dashboard Template")
19 | meta(property='og:url', content='http://pratikborsadiya.in/vali-admin')
20 | meta(property='og:image', content='http://pratikborsadiya.in/blog/vali-admin/hero-social.png')
21 | meta(property="og:description", content="Vali is a responsive and free dashboard theme/template built with Bootstrap 5, SASS and PUG.js.")
22 |
23 | title Vali Admin - Free Bootstrap 5 Dashboard Template
24 |
25 | link(rel='stylesheet', type='text/css', href='css/main.css')
26 |
27 | body.landing-page
28 | include includes/_landing-icons.pug
29 | section.landing-hero
30 | .landing-hero-overlay
31 | .landing-hero-content
32 | h1.landing-hero-title Vali Admin - A Free Bootstrap 5 Dashboard Template
33 | p.landing-hero-description Built with PugJS, SASS, and Bootstrap 5
34 |
35 | div
36 | a.btn.btn-primary.me-4(href="dashboard.html") Demo
37 | a.btn.btn-primary(href="https://github.com/pratikborsadiya/vali-admin" target="_blank" rel="noopener") GitHub
38 |
39 | img.landing-hero-banner(src="images/banner.jpg")
40 |
41 | section.features
42 | h1.features-title Features
43 |
44 |
45 | .features-cards
46 | .features-card
47 | .feature-icon-backdrop
48 | svg.feature-icon: use(xlink:href='#icon-globe')
49 | p.feature-description Free to use and open-source
50 | .features-card
51 | .feature-icon-backdrop
52 | svg.feature-icon: use(xlink:href='#icon-smartphone')
53 | p.feature-description Beautiful and mobile responsive
54 | .features-card
55 | .feature-icon-backdrop
56 | svg.feature-icon: use(xlink:href='#icon-zap')
57 | p.feature-description Built with Bootstrap 5, SASS and PUG.js
58 | .features-card
59 | .feature-icon-backdrop
60 | svg.feature-icon: use(xlink:href='#icon-chart')
61 | p.feature-description Chart.js integration to display responsive charts
62 | .features-card
63 | .feature-icon-backdrop
64 | svg.feature-icon: use(xlink:href='#icon-layout')
65 | p.feature-description Seven pre built pages including login, user profile and print friendly invoice page
66 | .features-card
67 | .feature-icon-backdrop
68 | svg.feature-icon: use(xlink:href='#icon-grid')
69 | p.feature-description Data tables with sort, search and paginate functions
70 |
71 | footer.landing-footer Created by #[b Pratik Borsadiya] &
72 | a(href="https://github.com/pratikborsadiya/vali-admin/graphs/contributors" target="_blank" rel="noopener") contributors
--------------------------------------------------------------------------------
/src/pug/layouts/_layout.pug:
--------------------------------------------------------------------------------
1 | doctype html
2 | html(lang="en")
3 |
4 | //- Variables to set active page in sidebar
5 | block variables
6 | - var activePage = 'dashboard';
7 | - var activeGroup = 'none';
8 |
9 | head
10 | meta(name="description", content="Vali is a responsive and free admin theme built with Bootstrap 5, SASS and PUG.js. It's fully customizable and modular.")
11 |
12 | // Twitter meta
13 | meta(property="twitter:card", content="summary_large_image")
14 | meta(property="twitter:site", content="@pratikborsadiya")
15 | meta(property="twitter:creator", content="@pratikborsadiya")
16 |
17 | // Open Graph Meta
18 | meta(property="og:type", content="website")
19 | meta(property="og:site_name", content="Vali Admin")
20 | meta(property="og:title", content="Vali - Free Bootstrap 5 admin theme")
21 | meta(property='og:url', content='http://pratikborsadiya.in/blog/vali-admin')
22 | meta(property='og:image', content='http://pratikborsadiya.in/blog/vali-admin/hero-social.png')
23 | meta(property="og:description", content="Vali is a responsive and free admin theme built with Bootstrap 5, SASS and PUG.js. It's fully customizable and modular.")
24 |
25 | block title
26 | title Vali Admin - Free Bootstrap 5 Admin Template
27 |
28 | include ../includes/_head.pug
29 |
30 | body.app.sidebar-mini
31 |
32 | // Navbar
33 | include ../includes/_header.pug
34 |
35 | // Sidebar menu
36 | include ../includes/_sidebar.pug
37 |
38 | main.app-content
39 | block content
40 |
41 | //- Javascripts
42 | include ../includes/_javascript.pug
43 |
44 | // Page specific javascripts
45 | block specific-js
46 |
47 | // Google analytics script
48 | script(type="text/javascript").
49 | if(document.location.hostname == 'pratikborsadiya.in') {
50 | (function(i,s,o,g,r,a,m){i['GoogleAnalyticsObject']=r;i[r]=i[r]||function(){
51 | (i[r].q=i[r].q||[]).push(arguments)},i[r].l=1*new Date();a=s.createElement(o),
52 | m=s.getElementsByTagName(o)[0];a.async=1;a.src=g;m.parentNode.insertBefore(a,m)
53 | })(window,document,'script','//www.google-analytics.com/analytics.js','ga');
54 | ga('create', 'UA-72504830-1', 'auto');
55 | ga('send', 'pageview');
56 | }
57 |
--------------------------------------------------------------------------------
/src/pug/page-error.pug:
--------------------------------------------------------------------------------
1 | extends layouts/_layout.pug
2 |
3 | block variables
4 | - var activePage = 'error-page';
5 | - var activeGroup = 'pages';
6 |
7 | block title
8 | title Error Page - Vali Admin
9 |
10 | block content
11 | .page-error.tile
12 | h1.text-danger
13 | i.bi.bi-exclamation-circle
14 | | Error 404: Page not found
15 | p The page you have requested is not found.
16 | p: a.btn.btn-primary(href="javascript:window.history.back();") Go Back
17 |
--------------------------------------------------------------------------------
/src/pug/page-invoice.pug:
--------------------------------------------------------------------------------
1 | extends layouts/_layout.pug
2 |
3 | block variables
4 | - var activePage = 'invoice-page';
5 | - var activeGroup = 'pages';
6 |
7 | block title
8 | title Invoice - Vali Admin
9 |
10 | block content
11 | .app-title
12 | div
13 | h1
14 | i.bi.bi-receipt
15 | | Invoice
16 | p A Printable Invoice Format
17 |
18 | ul.app-breadcrumb.breadcrumb
19 | li.breadcrumb-item
20 | i.bi.bi-house-door.fs-6
21 | li.breadcrumb-item
22 | a(href='#') Invoice
23 |
24 | .row
25 | .col-md-12
26 | .tile
27 | section.invoice
28 |
29 | .row.mb-4
30 | .col-6
31 | h2.page-header
32 | i.bi.bi-globe
33 | | Vali Inc
34 | .col-6
35 | h5.text-end Date: 01/01/2016
36 |
37 | .row.invoice-info
38 | .col-4
39 | | From
40 | address
41 | strong Vali Inc.
42 | br
43 | | 518 Akshar Avenue
44 | br
45 | | Gandhi Marg
46 | br
47 | | New Delhi
48 | br
49 | | Email: hello@vali.com
50 |
51 | .col-4
52 | | To
53 | address
54 | strong John Doe
55 | br
56 | | 795 Folsom Ave, Suite 600
57 | br
58 | | San Francisco, CA 94107
59 | br
60 | | Phone: (555) 539-1037
61 | br
62 | | Email: john.doe@example.com
63 |
64 | .col-4
65 | b Invoice #007612
66 | br
67 | br
68 | b Order ID:
69 | | 4F3S8J
70 | br
71 | b Payment Due:
72 | | 2/22/2014
73 | br
74 | b Account:
75 | | 968-34567
76 |
77 | .row
78 | .col-12.table-responsive
79 | table.table.table-striped
80 | thead
81 | tr
82 | th Qty
83 | th Product
84 | th Serial #
85 | th Description
86 | th Subtotal
87 | tbody
88 | tr
89 | td 1
90 | td The Hunger Games
91 | td 455-981-221
92 | td El snort testosterone trophy driving gloves handsome
93 | td $41.32
94 | tr
95 | td 1
96 | td City of Bones
97 | td 247-925-726
98 | td Wes Anderson umami biodiesel
99 | td $75.52
100 | tr
101 | td 1
102 | td The Maze Runner
103 | td 545-457-47
104 | td Terry Richardson helvetica tousled street art master
105 | td $15.25
106 | tr
107 | td 1
108 | td The Fault in Our Stars
109 | td 757-855-857
110 | td Tousled lomo letterpress
111 | td $03.44
112 |
113 | .row.d-print-none.mt-2
114 | .col-12.text-end
115 | a.btn.btn-primary(href='javascript:window.print();')
116 | i.bi.bi-printer.me-2
117 | | Print
118 |
--------------------------------------------------------------------------------
/src/pug/page-lockscreen.pug:
--------------------------------------------------------------------------------
1 | doctype html
2 | html
3 | head
4 | include includes/_head.pug
5 | title Lockscreen - Vali Admin
6 |
7 | body
8 | section.material-half-bg
9 | .cover
10 |
11 | section.lockscreen-content
12 | .logo
13 | h1 Vali
14 |
15 | .lock-box
16 | img.rounded-circle.user-image(src="https://randomuser.me/api/portraits/men/1.jpg")
17 |
18 | h4.text-center.user-name John Doe
19 |
20 | p.text-center.text-muted Account Locked
21 |
22 | form.unlock-form(action="index.html")
23 | .mb-3
24 | label.control-label PASSWORD
25 | input.form-control(type="password", placeholder="Password", autofocus)
26 |
27 | .mb-3.btn-container.d-grid
28 | button.btn.btn-primary.btn-block(type="submit")
29 | i.bi.bi-unlock.me-2.fs-5
30 | | UNLOCK
31 |
32 | p
33 | a(href="page-login.html") Not John ? Login Here.
34 |
35 | include includes/_javascript.pug
36 |
--------------------------------------------------------------------------------
/src/pug/page-login.pug:
--------------------------------------------------------------------------------
1 | doctype html
2 | html
3 | head
4 | include includes/_head.pug
5 | title Login - Vali Admin
6 |
7 | body
8 | section.material-half-bg
9 | .cover
10 |
11 | section.login-content
12 | .logo: h1 Vali
13 |
14 | .login-box
15 | form.login-form(action="index.html")
16 | h3.login-head
17 | i.bi.bi-person.me-2
18 | | SIGN IN
19 | .mb-3
20 | label.form-label USERNAME
21 | input.form-control(type="text", placeholder="Email", autofocus)
22 |
23 | .mb-3
24 | label.form-label PASSWORD
25 | input.form-control(type="password", placeholder="Password")
26 |
27 | .mb-3
28 | .utility
29 | .form-check
30 | label.form-check-label
31 | input.form-check-input(type="checkbox")
32 | span.label-text Stay Signed in
33 | p.semibold-text.mb-2
34 | a(href="#" data-toggle="flip") Forgot Password ?
35 |
36 | .mb-3.btn-container.d-grid
37 | button.btn.btn-primary.btn-block
38 | i.bi.bi-box-arrow-in-right.me-2.fs-5
39 | | SIGN IN
40 |
41 | form.forget-form(action="index.html")
42 | h3.login-head
43 | i.bi.bi-person-lock.me-2
44 | | Forgot Password ?
45 | .mb-3
46 | label.form-label EMAIL
47 | input.form-control(type="text", placeholder="Email")
48 |
49 | .mb-3.btn-container.d-grid
50 | button.btn.btn-primary.btn-block
51 | i.bi.bi-unlock.me-2.fs-5
52 | | RESET
53 |
54 | .mb-3.mt-3
55 | p.semibold-text.mb-0
56 | a(href="#" data-toggle="flip") Back to Login
57 |
58 | include includes/_javascript.pug
59 |
60 | script(type="text/javascript").
61 | // Login Page Flipbox control
62 | $('.login-content [data-toggle="flip"]').click(function() {
63 | $('.login-box').toggleClass('flipped');
64 | return false;
65 | });
--------------------------------------------------------------------------------
/src/pug/page-mailbox.pug:
--------------------------------------------------------------------------------
1 | extends layouts/_layout.pug
2 |
3 | block variables
4 | - var activePage = 'mailbox-page';
5 | - var activeGroup = 'pages';
6 |
7 | block title
8 | title Mailbox - Vali Admin
9 |
10 | block content
11 | .app-title
12 | div
13 | h1
14 | i.bi.bi-envelope-at
15 | | Mailbox
16 | p A Mailbox page sample
17 |
18 | ul.app-breadcrumb.breadcrumb
19 | li.breadcrumb-item
20 | i.bi.bi-house-door.fs-6
21 | li.breadcrumb-item
22 | a(href='#') Mailbox
23 |
24 | .row
25 | .col-md-3
26 |
27 | .d-grid
28 | a.mb-2.btn.btn-primary.btn-block(href="") Compose Mail
29 |
30 | .tile.p-0
31 | h4.tile-title.folder-head Folders
32 | .tile-body
33 | ul.nav.nav-pills.flex-column.mail-nav
34 | li.nav-item
35 | a.nav-link(href='#').d-flex.justify-content-between.align-items-start
36 | span
37 | i.bi.bi-inbox.me-1.fs-5
38 | | Inbox
39 | span.badge.bg-primary.rounded-pill 12
40 | li.nav-item
41 | a.nav-link(href='#')
42 | i.bi.bi-envelope.me-1.fs-5
43 | | Sent
44 | li.nav-item
45 | a.nav-link(href='#')
46 | i.bi.bi-journal-text.me-1.fs-5
47 | | Drafts
48 | li.nav-item
49 | a.nav-link(href='#').d-flex.justify-content-between.align-items-start
50 | span
51 | i.bi.bi-funnel.me-1.fs-5
52 | | Junk
53 | span.badge.bg-primary.rounded-pill 8
54 | li.nav-item
55 | a.nav-link(href='#')
56 | i.bi.bi-trash.me-1.fs-5
57 | | Trash
58 |
59 | .col-md-9
60 | .tile
61 | .mailbox-controls
62 |
63 | .form-check
64 | label
65 | input.form-check-input(type="checkbox")
66 | span.label-text
67 | .btn-group
68 | button.btn.btn-primary.btn-sm(type='button')
69 | i.bi.bi-trash.fs-5
70 | button.btn.btn-primary.btn-sm(type='button')
71 | i.bi.bi-reply.fs-5
72 | button.btn.btn-primary.btn-sm(type='button')
73 | i.bi.bi-share.fs-5
74 | button.btn.btn-primary.btn-sm(type='button')
75 | i.bi.bi-arrow-clockwise.fs-5
76 |
77 |
78 | .table-responsive.mailbox-messages
79 | table.table.table-hover
80 | tbody
81 | tr
82 | td
83 | .form-check
84 | label
85 | input.form-check-input(type="checkbox")
86 | span.label-text
87 | td
88 | a(href='#')
89 | i.bi.bi-star
90 | td
91 | a(href='read-mail.html') John Doe
92 | td.mail-subject
93 | b A report on project almanac
94 | | - Lorem ipsum dolor sit amet adipisicing elit...
95 | td
96 | i.bi.bi-paperclip
97 | td 8 mins ago
98 | tr
99 | td
100 | .form-check
101 | label
102 | input.form-check-input(type="checkbox")
103 | span.label-text
104 | td
105 | a(href='#')
106 | i.bi.bi-star-fill
107 | td
108 | a(href='read-mail.html') John Doe
109 | td
110 | b A report on some good project
111 | | - Lorem ipsum dolor sit amet adipisicing elit...
112 | td
113 |
114 | td 15 mins ago
115 | tr
116 | td
117 | .form-check
118 | label
119 | input.form-check-input(type="checkbox")
120 | span.label-text
121 | td
122 | a(href='#')
123 | i.bi.bi-star
124 | td
125 | a(href='read-mail.html') John Doe
126 | td.mail-subject
127 | b A report on project almanac
128 | | - Lorem ipsum dolor sit amet adipisicing elit...
129 | td
130 | i.bi.bi-paperclip
131 | td 30 mins ago
132 | tr
133 | td
134 | .form-check
135 | label
136 | input.form-check-input(type="checkbox")
137 | span.label-text
138 | td
139 | a(href='#')
140 | i.bi.bi-star-fill
141 | td
142 | a(href='read-mail.html') John Doe
143 | td.mail-subject
144 | b A report on project almanac
145 | | - Lorem ipsum dolor sit amet adipisicing elit...
146 | td
147 | td 25 December
148 | tr
149 | td
150 | .form-check
151 | label
152 | input.form-check-input(type="checkbox")
153 | span.label-text
154 | td
155 | a(href='#')
156 | i.bi.bi-star
157 | td
158 | a(href='read-mail.html') John Doe
159 | td.mail-subject
160 | b A report on project almanac
161 | | - Lorem ipsum dolor sit amet adipisicing elit...
162 | td
163 | i.bi.bi-paperclip
164 | td 20 December
165 | tr
166 | td
167 | .form-check
168 | label
169 | input.form-check-input(type="checkbox")
170 | span.label-text
171 | td
172 | a(href='#')
173 | i.bi.bi-star-fill
174 | td
175 | a(href='read-mail.html') John Doe
176 | td.mail-subject
177 | b A report on project almanac
178 | | - Lorem ipsum dolor sit amet adipisicing elit...
179 | td
180 | td 20 December
181 | tr
182 | td
183 | .form-check
184 | label
185 | input.form-check-input(type="checkbox")
186 | span.label-text
187 | td
188 | a(href='#')
189 | i.bi.bi-star-fill
190 | td
191 | a(href='read-mail.html') John Doe
192 | td.mail-subject
193 | b A report on project almanac
194 | | - Lorem ipsum dolor sit amet adipisicing elit...
195 | td
196 | i.bi.bi-paperclip
197 | td 20 December
198 | tr
199 | td
200 | .form-check
201 | label
202 | input.form-check-input(type="checkbox")
203 | span.label-text
204 | td
205 | a(href='#')
206 | i.bi.bi-star
207 | td
208 | a(href='read-mail.html') John Doe
209 | td.mail-subject
210 | b A report on project almanac
211 | | - Lorem ipsum dolor sit amet adipisicing elit...
212 | td
213 | td 20 December
214 |
215 |
216 | .text-end
217 | span.text-muted.mr-2 Showing 1-15 out of 60
218 | .btn-group.ms-3
219 | button.btn.btn-primary.btn-sm(type='button')
220 | i.bi.bi-chevron-left
221 | button.btn.btn-primary.btn-sm(type='button')
222 | i.bi.bi-chevron-right
223 |
--------------------------------------------------------------------------------
/src/pug/page-user.pug:
--------------------------------------------------------------------------------
1 | extends layouts/_layout.pug
2 |
3 | block variables
4 | - var activePage = 'user-page';
5 | - var activeGroup = 'pages';
6 |
7 | block title
8 | title User Profile - Vali Admin
9 |
10 | block content
11 |
12 | .row.user
13 | .col-md-12
14 | .profile
15 | .info
16 | img.user-img(src="https://randomuser.me/api/portraits/men/1.jpg")
17 | h4 John Doe
18 | p FrontEnd Developer
19 | .cover-image
20 |
21 | .col-md-3
22 | .tile.p-0
23 | ul.nav.flex-column.nav-tabs.user-tabs
24 | li.nav-item
25 | a.nav-link.active(href='#user-timeline' data-bs-toggle='tab') Timeline
26 | li.nav-item
27 | a.nav-link(href='#user-settings' data-bs-toggle='tab') Settings
28 |
29 | .col-md-9
30 | .tab-content
31 | #user-timeline.tab-pane.active
32 | .timeline-post
33 | .post-media
34 | a(href="#")
35 | img(src="https://randomuser.me/api/portraits/men/1.jpg")
36 | .content
37 | h5: a(href="#") John Doe
38 | p.text-muted
39 | small 2 January at 9:30
40 | .post-content
41 | p Lorem ipsum dolor sit amet, consectetur adipisicing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua. Ut enim ad minim veniam, quis tion ullamco laboris nisi ut aliquip ex ea commodo consequat. Duis aute irure dolor in reprehenderit in voluptate velit esse cillum dolore eu fugiat nulla pariatur. Excepteur sint occaecat cupidatat non proident, sunt in culpa qui officia deserunt mollit anim id est laborum.
42 |
43 | ul.post-utility
44 | li.likes
45 | a(href="#")
46 | i.bi.bi-heart.me-1
47 | | Like
48 |
49 | li.shares
50 | a(href="#")
51 | i.bi.bi-share.me-1
52 | | Share
53 |
54 | li.comments
55 | i.bi.bi-chat-square-text.me-1
56 | | 5 Comments
57 |
58 | .timeline-post
59 | .post-media
60 | a(href="#")
61 | img(src="https://randomuser.me/api/portraits/men/1.jpg")
62 | .content
63 | h5: a(href="#") John Doe
64 | p.text-muted
65 | small 2 January at 9:30
66 | .post-content
67 | p Lorem ipsum dolor sit amet, consectetur adipisicing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua. Ut enim ad minim veniam, quis tion ullamco laboris nisi ut aliquip ex ea commodo consequat. Duis aute irure dolor in reprehenderit in voluptate velit esse cillum dolore eu fugiat nulla pariatur. Excepteur sint occaecat cupidatat non proident, sunt in culpa qui officia deserunt mollit anim id est laborum.
68 |
69 | ul.post-utility
70 | li.likes
71 | a(href="#")
72 | i.bi.bi-heart.me-1
73 | | Like
74 |
75 | li.shares
76 | a(href="#")
77 | i.bi.bi-share.me-1
78 | | Share
79 |
80 | li.comments
81 | i.bi.bi-chat-square-text.me-1
82 | | 5 Comments
83 |
84 | #user-settings.tab-pane.fade
85 | .tile.user-settings
86 | h4.line-head Settings
87 |
88 | form
89 | .row.mb-4
90 | .col-md-4
91 | label First Name
92 | input.form-control(type="text")
93 |
94 | .col-md-4
95 | label Last Name
96 | input.form-control(type="text")
97 |
98 | .row
99 | .col-md-8.mb-4
100 | label Email
101 | input.form-control(type="text")
102 |
103 | .clearfix
104 |
105 | .col-md-8.mb-4
106 | label Mobile No
107 | input.form-control(type="text")
108 |
109 | .clearfix
110 |
111 | .col-md-8.mb-4
112 | label Office Phone
113 | input.form-control(type="text")
114 |
115 | .clearfix
116 |
117 | .col-md-8.mb-4
118 | label Home Phone
119 | input.form-control(type="text")
120 |
121 | .row.mb-10
122 | .col-md-12
123 | button.btn.btn-primary(type="button")
124 | i.bi.bi-check-circle-fill.me-2
125 | | Save
126 |
127 |
128 |
--------------------------------------------------------------------------------
/src/pug/table-basic.pug:
--------------------------------------------------------------------------------
1 | extends layouts/_layout.pug
2 |
3 | block variables
4 | - var activePage = 'basic-table';
5 | - var activeGroup = 'tables';
6 |
7 | block title
8 | title Basic Tables - Vali Admin
9 |
10 | block content
11 | .app-title
12 | div
13 | h1
14 | i.bi.bi-table
15 | | Basic Tables
16 | p Basic bootstrap tables
17 |
18 | ul.app-breadcrumb.breadcrumb
19 | li.breadcrumb-item
20 | i.bi.bi-house-door.fs-6
21 | li.breadcrumb-item
22 | | Tables
23 | li.breadcrumb-item.active
24 | a(href="#") Simple Tables
25 |
26 | .row
27 | .col-md-6
28 | .tile
29 | h3.tile-title Simple Table
30 | table.table
31 | thead
32 | tr
33 | th #
34 | th First Name
35 | th Last Name
36 | th Username
37 | tbody
38 | tr
39 | td 1
40 | td Mark
41 | td Otto
42 | td @mdo
43 | tr
44 | td 2
45 | td Jacob
46 | td Thornton
47 | td @fat
48 | tr
49 | td 3
50 | td Larry
51 | td the Bird
52 | td @twitter
53 |
54 | .col-md-6
55 | .tile
56 | h3.tile-title Striped Table
57 | table.table.table-striped
58 | thead
59 | tr
60 | th #
61 | th First Name
62 | th Last Name
63 | th Username
64 | tbody
65 | tr
66 | td 1
67 | td Mark
68 | td Otto
69 | td @mdo
70 | tr
71 | td 2
72 | td Jacob
73 | td Thornton
74 | td @fat
75 | tr
76 | td 3
77 | td Larry
78 | td the Bird
79 | td @twitter
80 | .clearfix
81 |
82 | .col-md-6
83 | .tile
84 | h3.tile-title Bordered Table
85 | table.table.table-bordered
86 | thead
87 | tr
88 | th #
89 | th First Name
90 | th Last Name
91 | th Username
92 | tbody
93 | tr
94 | td 1
95 | td Mark
96 | td Otto
97 | td @mdo
98 | tr
99 | td 2
100 | td Jacob
101 | td Thornton
102 | td @fat
103 | tr
104 | td 3
105 | td Larry
106 | td the Bird
107 | td @twitter
108 |
109 | .col-md-6
110 | .tile
111 | h3.tile-title Table Hover
112 | table.table.table-hover
113 | thead
114 | tr
115 | th #
116 | th First Name
117 | th Last Name
118 | th Username
119 | tbody
120 | tr
121 | td 1
122 | td Mark
123 | td Otto
124 | td @mdo
125 | tr
126 | td 2
127 | td Jacob
128 | td Thornton
129 | td @fat
130 | tr
131 | td 3
132 | td Larry
133 | td the Bird
134 | td @twitter
135 | .clearfix
136 |
137 | .col-md-6
138 | .tile
139 | h3.tile-title Condensed Table
140 | table.table.table-sm
141 | thead
142 | tr
143 | th #
144 | th First Name
145 | th Last Name
146 | th Username
147 | tbody
148 | tr
149 | td 1
150 | td Mark
151 | td Otto
152 | td @mdo
153 | tr
154 | td 2
155 | td Jacob
156 | td Thornton
157 | td @fat
158 | tr
159 | td 3
160 | td Larry
161 | td the Bird
162 | td @twitter
163 | tr
164 | td 4
165 | td Jacob
166 | td Thornton
167 | td @fat
168 | tr
169 | td 5
170 | td Mark
171 | td Otto
172 | td @mdo
173 |
174 | .col-md-6
175 | .tile
176 | h3.tile-title Contextual Classes
177 | table.table
178 | thead
179 | tr
180 | th #
181 | th First Name
182 | th Last Name
183 | th Username
184 | tbody
185 | tr.table-info
186 | td 1
187 | td Mark
188 | td Otto
189 | td @mdo
190 | tr.table-success
191 | td 2
192 | td Jacob
193 | td Thornton
194 | td @fat
195 | tr.table-danger
196 | td 3
197 | td Larry
198 | td the Bird
199 | td @twitter
200 | tr.table-warning
201 | td 4
202 | td Jacob
203 | td Thornton
204 | td @fat
205 |
206 | .clearfix
207 |
208 | .col-md-12
209 | .tile
210 | h3.tile-title Responsive Table
211 | .table-responsive
212 | table.table
213 | thead
214 | tr
215 | th #
216 | th First Name
217 | th Last Name
218 | th Username
219 | tbody
220 | tr
221 | td 1
222 | td Mark
223 | td Otto
224 | td @mdo
225 | tr
226 | td 2
227 | td Jacob
228 | td Thornton
229 | td @fat
230 | tr
231 | td 3
232 | td Larry
233 | td the Bird
234 | td @twitter
235 | tr
236 | td 4
237 | td Jacob
238 | td Thornton
239 | td @fat
240 |
241 |
--------------------------------------------------------------------------------
/src/pug/table-data-table.pug:
--------------------------------------------------------------------------------
1 | extends layouts/_layout.pug
2 |
3 | block variables
4 | - var activePage = 'data-table';
5 | - var activeGroup = 'tables';
6 |
7 | block title
8 | title Data Table - Vali Admin
9 |
10 | block content
11 | .app-title
12 | div
13 | h1
14 | i.bi.bi-table
15 | | Data Table
16 | p Table to display analytical data effectively
17 |
18 | ul.app-breadcrumb.breadcrumb.side
19 | li.breadcrumb-item
20 | i.bi.bi-house-door.fs-6
21 | li.breadcrumb-item
22 | | Tables
23 | li.breadcrumb-item.active
24 | a(href="#") Data Table
25 |
26 | .row
27 | .col-md-12
28 | .tile
29 | .tile-body
30 | .table-responsive
31 | table.table.table-hover.table-bordered#sampleTable
32 | thead
33 | tr
34 | th Name
35 | th Position
36 | th Office
37 | th Age
38 | th Start date
39 | th Salary
40 | tbody
41 | tr
42 | td Tiger Nixon
43 | td System Architect
44 | td Edinburgh
45 | td 61
46 | td 2011/04/25
47 | td $320,800
48 | tr
49 | td Garrett Winters
50 | td Accountant
51 | td Tokyo
52 | td 63
53 | td 2011/07/25
54 | td $170,750
55 | tr
56 | td Ashton Cox
57 | td Junior Technical Author
58 | td San Francisco
59 | td 66
60 | td 2009/01/12
61 | td $86,000
62 | tr
63 | td Cedric Kelly
64 | td Senior Javascript Developer
65 | td Edinburgh
66 | td 22
67 | td 2012/03/29
68 | td $433,060
69 | tr
70 | td Airi Satou
71 | td Accountant
72 | td Tokyo
73 | td 33
74 | td 2008/11/28
75 | td $162,700
76 | tr
77 | td Brielle Williamson
78 | td Integration Specialist
79 | td New York
80 | td 61
81 | td 2012/12/02
82 | td $372,000
83 | tr
84 | td Herrod Chandler
85 | td Sales Assistant
86 | td San Francisco
87 | td 59
88 | td 2012/08/06
89 | td $137,500
90 | tr
91 | td Rhona Davidson
92 | td Integration Specialist
93 | td Tokyo
94 | td 55
95 | td 2010/10/14
96 | td $327,900
97 | tr
98 | td Colleen Hurst
99 | td Javascript Developer
100 | td San Francisco
101 | td 39
102 | td 2009/09/15
103 | td $205,500
104 | tr
105 | td Sonya Frost
106 | td Software Engineer
107 | td Edinburgh
108 | td 23
109 | td 2008/12/13
110 | td $103,600
111 | tr
112 | td Jena Gaines
113 | td Office Manager
114 | td London
115 | td 30
116 | td 2008/12/19
117 | td $90,560
118 | tr
119 | td Quinn Flynn
120 | td Support Lead
121 | td Edinburgh
122 | td 22
123 | td 2013/03/03
124 | td $342,000
125 | tr
126 | td Charde Marshall
127 | td Regional Director
128 | td San Francisco
129 | td 36
130 | td 2008/10/16
131 | td $470,600
132 | tr
133 | td Haley Kennedy
134 | td Senior Marketing Designer
135 | td London
136 | td 43
137 | td 2012/12/18
138 | td $313,500
139 | tr
140 | td Tatyana Fitzpatrick
141 | td Regional Director
142 | td London
143 | td 19
144 | td 2010/03/17
145 | td $385,750
146 | tr
147 | td Michael Silva
148 | td Marketing Designer
149 | td London
150 | td 66
151 | td 2012/11/27
152 | td $198,500
153 | tr
154 | td Paul Byrd
155 | td Chief Financial Officer (CFO)
156 | td New York
157 | td 64
158 | td 2010/06/09
159 | td $725,000
160 | tr
161 | td Gloria Little
162 | td Systems Administrator
163 | td New York
164 | td 59
165 | td 2009/04/10
166 | td $237,500
167 | tr
168 | td Bradley Greer
169 | td Software Engineer
170 | td London
171 | td 41
172 | td 2012/10/13
173 | td $132,000
174 | tr
175 | td Dai Rios
176 | td Personnel Lead
177 | td Edinburgh
178 | td 35
179 | td 2012/09/26
180 | td $217,500
181 | tr
182 | td Jenette Caldwell
183 | td Development Lead
184 | td New York
185 | td 30
186 | td 2011/09/03
187 | td $345,000
188 | tr
189 | td Yuri Berry
190 | td Chief Marketing Officer (CMO)
191 | td New York
192 | td 40
193 | td 2009/06/25
194 | td $675,000
195 | tr
196 | td Caesar Vance
197 | td Pre-Sales Support
198 | td New York
199 | td 21
200 | td 2011/12/12
201 | td $106,450
202 | tr
203 | td Doris Wilder
204 | td Sales Assistant
205 | td Sidney
206 | td 23
207 | td 2010/09/20
208 | td $85,600
209 | tr
210 | td Angelica Ramos
211 | td Chief Executive Officer (CEO)
212 | td London
213 | td 47
214 | td 2009/10/09
215 | td $1,200,000
216 | tr
217 | td Gavin Joyce
218 | td Developer
219 | td Edinburgh
220 | td 42
221 | td 2010/12/22
222 | td $92,575
223 | tr
224 | td Jennifer Chang
225 | td Regional Director
226 | td Singapore
227 | td 28
228 | td 2010/11/14
229 | td $357,650
230 | tr
231 | td Brenden Wagner
232 | td Software Engineer
233 | td San Francisco
234 | td 28
235 | td 2011/06/07
236 | td $206,850
237 | tr
238 | td Fiona Green
239 | td Chief Operating Officer (COO)
240 | td San Francisco
241 | td 48
242 | td 2010/03/11
243 | td $850,000
244 | tr
245 | td Shou Itou
246 | td Regional Marketing
247 | td Tokyo
248 | td 20
249 | td 2011/08/14
250 | td $163,000
251 | tr
252 | td Michelle House
253 | td Integration Specialist
254 | td Sidney
255 | td 37
256 | td 2011/06/02
257 | td $95,400
258 | tr
259 | td Suki Burks
260 | td Developer
261 | td London
262 | td 53
263 | td 2009/10/22
264 | td $114,500
265 | tr
266 | td Prescott Bartlett
267 | td Technical Author
268 | td London
269 | td 27
270 | td 2011/05/07
271 | td $145,000
272 | tr
273 | td Gavin Cortez
274 | td Team Leader
275 | td San Francisco
276 | td 22
277 | td 2008/10/26
278 | td $235,500
279 | tr
280 | td Martena Mccray
281 | td Post-Sales support
282 | td Edinburgh
283 | td 46
284 | td 2011/03/09
285 | td $324,050
286 | tr
287 | td Unity Butler
288 | td Marketing Designer
289 | td San Francisco
290 | td 47
291 | td 2009/12/09
292 | td $85,675
293 | tr
294 | td Howard Hatfield
295 | td Office Manager
296 | td San Francisco
297 | td 51
298 | td 2008/12/16
299 | td $164,500
300 | tr
301 | td Hope Fuentes
302 | td Secretary
303 | td San Francisco
304 | td 41
305 | td 2010/02/12
306 | td $109,850
307 | tr
308 | td Vivian Harrell
309 | td Financial Controller
310 | td San Francisco
311 | td 62
312 | td 2009/02/14
313 | td $452,500
314 | tr
315 | td Timothy Mooney
316 | td Office Manager
317 | td London
318 | td 37
319 | td 2008/12/11
320 | td $136,200
321 | tr
322 | td Jackson Bradshaw
323 | td Director
324 | td New York
325 | td 65
326 | td 2008/09/26
327 | td $645,750
328 | tr
329 | td Olivia Liang
330 | td Support Engineer
331 | td Singapore
332 | td 64
333 | td 2011/02/03
334 | td $234,500
335 | tr
336 | td Bruno Nash
337 | td Software Engineer
338 | td London
339 | td 38
340 | td 2011/05/03
341 | td $163,500
342 | tr
343 | td Sakura Yamamoto
344 | td Support Engineer
345 | td Tokyo
346 | td 37
347 | td 2009/08/19
348 | td $139,575
349 | tr
350 | td Thor Walton
351 | td Developer
352 | td New York
353 | td 61
354 | td 2013/08/11
355 | td $98,540
356 | tr
357 | td Finn Camacho
358 | td Support Engineer
359 | td San Francisco
360 | td 47
361 | td 2009/07/07
362 | td $87,500
363 | tr
364 | td Serge Baldwin
365 | td Data Coordinator
366 | td Singapore
367 | td 64
368 | td 2012/04/09
369 | td $138,575
370 | tr
371 | td Zenaida Frank
372 | td Software Engineer
373 | td New York
374 | td 63
375 | td 2010/01/04
376 | td $125,250
377 | tr
378 | td Zorita Serrano
379 | td Software Engineer
380 | td San Francisco
381 | td 56
382 | td 2012/06/01
383 | td $115,000
384 | tr
385 | td Jennifer Acosta
386 | td Junior Javascript Developer
387 | td Edinburgh
388 | td 43
389 | td 2013/02/01
390 | td $75,650
391 | tr
392 | td Cara Stevens
393 | td Sales Assistant
394 | td New York
395 | td 46
396 | td 2011/12/06
397 | td $145,600
398 | tr
399 | td Hermione Butler
400 | td Regional Director
401 | td London
402 | td 47
403 | td 2011/03/21
404 | td $356,250
405 | tr
406 | td Lael Greer
407 | td Systems Administrator
408 | td London
409 | td 21
410 | td 2009/02/27
411 | td $103,500
412 | tr
413 | td Jonas Alexander
414 | td Developer
415 | td San Francisco
416 | td 30
417 | td 2010/07/14
418 | td $86,500
419 | tr
420 | td Shad Decker
421 | td Regional Director
422 | td Edinburgh
423 | td 51
424 | td 2008/11/13
425 | td $183,000
426 | tr
427 | td Michael Bruce
428 | td Javascript Developer
429 | td Singapore
430 | td 29
431 | td 2011/06/27
432 | td $183,000
433 | tr
434 | td Donna Snider
435 | td Customer Support
436 | td New York
437 | td 27
438 | td 2011/01/25
439 | td $112,000
440 |
441 | block specific-js
442 | link(rel="stylesheet" href="https://cdn.datatables.net/v/bs5/dt-1.13.4/datatables.min.css")
443 |
444 | // Data table plugin
445 | script(type='text/javascript', src="js/plugins/jquery.dataTables.min.js")
446 | script(type='text/javascript', src="js/plugins/dataTables.bootstrap.min.js")
447 | script(type='text/javascript').
448 | $('#sampleTable').DataTable();
449 |
--------------------------------------------------------------------------------
/src/pug/ui-cards.pug:
--------------------------------------------------------------------------------
1 | extends layouts/_layout.pug
2 |
3 | block variables
4 | - var activePage = 'ui-cards';
5 | - var activeGroup = 'ui-elements';
6 |
7 | block title
8 | title Cards - Vali Admin
9 |
10 | block content
11 | .app-title
12 | div
13 | h1
14 | i.bi.bi-laptop
15 | | Cards
16 | p Material design inspired cards
17 |
18 | ul.app-breadcrumb.breadcrumb
19 | li.breadcrumb-item
20 | i.bi.bi-house-door.fs-6
21 | li.breadcrumb-item UI
22 | li.breadcrumb-item
23 | a(href="#") Cards
24 |
25 | .row
26 | .col-md-6
27 | .tile
28 | h3.tile-title Card Title
29 | .tile-body.
30 | Hey there, I am a very simple card. I am good at containing small bits of information. I am quite convenient because I require little markup to use effectively.
31 | .tile-footer
32 | a.btn.btn-primary(href="#") Link
33 |
34 | .col-md-6
35 | .tile
36 | .tile-title-w-btn
37 | h3.title All Items
38 | p
39 | a.btn.btn-primary.icon-btn(href="")
40 | i.bi.bi-plus-square.me-2
41 | | Add Item
42 | .tile-body.
43 | Card with action button
44 | Hey there, I am a very simple card. I am good at containing small bits of information. I am quite convenient because I require little markup to use effectively.
45 |
46 |
47 | .clearfix
48 |
49 | .col-md-6
50 | .tile
51 | .tile-title-w-btn
52 | h3.title All Items
53 | .btn-group
54 | a.btn.btn-primary(href='#'): i.bi.bi-plus-square.fs-5
55 | a.btn.btn-primary(href='#'): i.bi.bi-pencil-square.fs-5
56 | a.btn.btn-primary(href='#'): i.bi.bi-trash.fs-5
57 | .tile-body.
58 | Card with button group
59 | Hey there, I am a very simple card. I am good at containing small bits of information. I am quite convenient because I require little markup to use effectively.
60 |
61 | .col-md-6
62 | .tile
63 | .overlay
64 | .m-loader.mr-4.
65 |
66 |
67 |
68 | h3.l-text Loading
69 | .tile-title-w-btn
70 | h3.title All Items
71 | p
72 | a.btn.btn-primary.icon-btn(href="")
73 | i.bi.bi-plus-square
74 | | Add Item
75 | .tile-body.
76 | Card with action button
77 | Hey there, I am a very simple card. I am good at containing small bits of information. I am quite convenient because I require little markup to use effectively.
78 |
--------------------------------------------------------------------------------
/src/pug/widgets.pug:
--------------------------------------------------------------------------------
1 | extends layouts/_layout.pug
2 |
3 | block variables
4 | - var activePage = 'ui-widgets';
5 | - var activeGroup = 'ui-elements';
6 |
7 | block title
8 | title Widgets - Vali Admin
9 |
10 | block content
11 | .app-title
12 | div
13 | h1
14 | i.bi.bi-archive
15 | | Widgets
16 | p Widgets to interactively display data
17 |
18 | ul.app-breadcrumb.breadcrumb
19 | li.breadcrumb-item
20 | i.bi.bi-house-door.fs-6
21 | li.breadcrumb-item
22 | | UI
23 | li.breadcrumb-item
24 | a(href='#') Widgets
25 |
26 | .row
27 | .col-md-3
28 | .widget-small.primary
29 | i.icon.bi.bi-people.fs-1
30 | div.info
31 | h4 Users
32 | p
33 | b 5
34 |
35 | .col-md-3
36 | .widget-small.info
37 | i.icon.bi.bi-heart.fs-1
38 | div.info
39 | h4 Likes
40 | p
41 | b 25
42 |
43 | .col-md-3
44 | .widget-small.warning
45 | i.icon.bi.bi-folder2.fs-1
46 | div.info
47 | h4 Uploades
48 | p
49 | b 10
50 |
51 | .col-md-3
52 | .widget-small.danger
53 | i.icon.bi.bi-star.fs-1
54 | div.info
55 | h4 Stars
56 | p
57 | b 500
58 |
59 | .row
60 | .col-md-3
61 | .widget-small.primary.coloured-icon
62 | i.icon.bi.bi-people.fs-1
63 | div.info
64 | h4 Users
65 | p
66 | b 5
67 |
68 | .col-md-3
69 | .widget-small.info.coloured-icon
70 | i.icon.bi.bi-heart.fs-1
71 | div.info
72 | h4 Likes
73 | p
74 | b 25
75 |
76 | .col-md-3
77 | .widget-small.warning.coloured-icon
78 | i.icon.bi.bi-folder2.fs-1
79 | div.info
80 | h4 Uploades
81 | p
82 | b 10
83 |
84 | .col-md-3
85 | .widget-small.danger.coloured-icon
86 | i.icon.bi.bi-star.fs-1
87 | div.info
88 | h4 Stars
89 | p
90 | b 500
91 |
92 | .row
93 | .col-md-6
94 | .tile
95 | h3.tile-title Chat
96 | .messanger
97 | .messages
98 | .message
99 | img(src="https://randomuser.me/api/portraits/men/4.jpg")
100 | p.info Hello there!
101 | br
102 | | Good Morning
103 |
104 | .message.me
105 | img(src="https://randomuser.me/api/portraits/men/1.jpg")
106 | p.info Hi
107 | br
108 | | Good Morning
109 |
110 | .message
111 | img(src="https://randomuser.me/api/portraits/men/4.jpg")
112 | p.info How are you?
113 |
114 | .message.me
115 | img(src="https://randomuser.me/api/portraits/men/1.jpg")
116 | p.info I'm Fine.
117 |
118 | .sender
119 | input(type="text",placeholder="Send Message")
120 | button.btn.btn-primary(type="button")
121 | i.bi.bi-send.fs-5
122 |
123 |
--------------------------------------------------------------------------------
/src/sass/1-tools/_customize-bootstrap.scss:
--------------------------------------------------------------------------------
1 | //
2 | // Customize bootstrap variables to match
3 | // look and feel of the theme
4 | //-----------------------------------------------------
5 |
6 | $primary: $primary-color;
7 |
8 | // Customize typographic styles
9 | $font-size-base: 0.875rem;
10 | $font-family-sans-serif: 'Lato', -apple-system, BlinkMacSystemFont, "Segoe UI", Roboto, "Helvetica Neue", Arial, sans-serif;
11 | $link-color: $primary-color;
12 | $headings-font-weight: bold;
13 |
14 | // Customize Dropdown styles
15 | $dropdown-padding-y: 0;
16 | $dropdown-spacer: 0;
17 | $dropdown-border-width: 0;
18 | $dropdown-item-padding-y: 8px;
19 | $dropdown-item-padding-x: 20px;
20 |
21 | // Customize button styles
22 | $btn-border-radius: 3px;
23 | $btn-border-radius-lg: 3px;
24 | $btn-border-radius-sm: 3px;
25 | $btn-font-weight: 700;
26 | $btn-transition: box-shadow 0.3s cubic-bezier(0.35, 0, 0.25, 1), transform 0.2s cubic-bezier(0.35, 0, 0.25, 1), background-color 0.3s ease-in-out, border-color 0.3s ease-in-out;
27 |
28 | // Custmize form component styles
29 |
30 | $input-border-radius: 4px;
31 | $input-border-radius-lg: 4px;
32 | $input-border-radius-sm: 4px;
33 | $input-focus-border-color: $primary-color;
34 | $input-btn-border-width: 2px;
35 | $input-btn-focus-box-shadow: none;
36 | $input-btn-focus-width: 0;
37 |
--------------------------------------------------------------------------------
/src/sass/1-tools/_fonts.scss:
--------------------------------------------------------------------------------
1 | @import url(https://fonts.googleapis.com/css?family=Lato:300,400,400i,700);
2 | @import url(https://fonts.googleapis.com/css?family=Niconne);
3 |
--------------------------------------------------------------------------------
/src/sass/1-tools/_vars.scss:
--------------------------------------------------------------------------------
1 | //
2 | // Application Variables
3 | //-----------------------------------------------------
4 |
5 | // Primary font
6 | $body-font: 'Lato', -apple-system, BlinkMacSystemFont, "Segoe UI", Roboto, "Helvetica Neue", Arial, sans-serif;
7 |
8 | //
9 | // Theme Colors
10 | //
11 |
12 | $white: #FFF;
13 |
14 | // Primary color is the main color of the application which is used
15 | // for navbar, active links and primary button.
16 |
17 | // ------ Primary Colors from google material design color palette ------
18 | // Blue : #1565C0
19 | // Teal : #00695C
20 | // Green : #2E7D32
21 | // Brown : #4E342E
22 | // Purple: #4527A0
23 |
24 | $primary-color: #00695C;
25 |
26 | // Complementry color is used to indecate the loading bar on the top
27 | // of the page with pace.js plugin
28 | $complementry-color: adjust_hue($primary-color, 180);
29 |
30 | // ------- Sidebar Width --------
31 | $sidebar-width: 230px;
32 |
33 | // ------- Sidebar Colors --------
34 |
35 | // Background color of sidebar
36 | $sidebar-color: #222d32;
37 |
38 | // -- Suggested sidebar background colors
39 | // dark : #222d32
40 | // light : #f8f8f8
41 |
42 | // Sidebar accent varible is used to determine the color of the links
43 | // of the sidebar. The allowed values are 'light' or 'dark' only
44 | $sidebar-accent: dark;
45 |
46 | // The following varibles indecate sidebar link color
47 | // and link hover color when using a dark sidebar color
48 | $sidebar-dark-color: #fff;
49 | $sidebar-dark-link-color: #fff;
50 |
51 | // The following varibles indecate sidebar link color
52 | // and link hover color when using a light sidebar color
53 | $sidebar-light-color: #000;
54 | $sidebar-light-link-color: #333;
55 |
--------------------------------------------------------------------------------
/src/sass/2-basics/_app.scss:
--------------------------------------------------------------------------------
1 | // Page common styles
2 |
3 | ::selection {
4 | color: $white;
5 | background-color: darken($primary-color,10%);
6 | }
7 |
8 | .app {
9 | // On large devices make sidebar visible by default
10 | // adding sidenav-toggled class will close sidebar
11 | @media(min-width: 768px) {
12 | &.sidenav-toggled {
13 | .app-content { margin-left: 0; }
14 | .app-sidebar { left: -$sidebar-width; }
15 | .app-sidebar__overlay { visibility: hidden; }
16 | }
17 | }
18 | // On small devices make sidebar collapsed by default
19 | // adding sidenav-toggled class will open sidebar
20 | @media(max-width: 767px) {
21 | overflow-x: hidden;
22 | .app-sidebar { left: -$sidebar-width; }
23 | .app-sidebar__overlay { visibility: hidden; }
24 | &.sidenav-toggled {
25 | .app-content { margin-left: 0; }
26 | .app-sidebar { left: 0; }
27 | .app-sidebar__overlay { visibility: visible; }
28 | }
29 | }
30 | }
31 |
32 | .app-content {
33 | min-height: calc(100vh - 50px);
34 | margin-top: 50px;
35 | padding: 30px;
36 | background-color: #E5E5E5;
37 | transition: margin-left 0.3s ease;
38 | @media(min-width: 768px) { margin-left: $sidebar-width; }
39 | @media(max-width: 767px) {
40 | margin-top: 50px;
41 | min-width: 100%;
42 | }
43 | @media(max-width: 480px) { padding: 15px; }
44 | @media print {
45 | margin: 0;
46 | padding: 0;
47 | background-color: #fff;
48 | }
49 | }
50 |
--------------------------------------------------------------------------------
/src/sass/2-basics/_helpers.scss:
--------------------------------------------------------------------------------
1 | // Helper Classes
2 |
3 | .light-text { font-weight: 300 !important; }
4 | .semibold-text { font-weight: 600 !important; }
5 | .line-head {
6 | padding-bottom: 10px;
7 | border-bottom: 1px solid #ddd;
8 | }
9 |
--------------------------------------------------------------------------------
/src/sass/3-component/_app-title.scss:
--------------------------------------------------------------------------------
1 | // Componant: Page Title
2 |
3 | .app-title {
4 | display: flex;
5 | align-items: center;
6 | justify-content: space-between;
7 | flex-direction: row;
8 | background-color: #FFF;
9 | margin: (-30px) -30px 30px;
10 | padding: 20px 30px;
11 | box-shadow: 0 1px 2px rgba(0, 0, 0, 0.1);
12 |
13 | @media print { display: none; }
14 | @media (max-width: 480px) {
15 | margin: (-15px) -15px 15px;
16 | padding: 20px;
17 | flex-direction: column;
18 | align-items: flex-start;
19 | }
20 |
21 | h1 {
22 | margin: 0;
23 | font-size: 24px;
24 | font-weight: 400;
25 | }
26 |
27 | p {
28 | margin-bottom: 0;
29 | font-style: italic;
30 | @media (max-width: 480px) { display: none; }
31 | }
32 | }
33 |
34 | .app-breadcrumb {
35 | margin-bottom: 0;
36 | text-align: right;
37 | font-weight: 500;
38 | font-size: 13px;
39 | text-transform: capitalize;
40 | padding: 0;
41 | text-align: left;
42 | padding: 0;
43 | background-color: transparent;
44 | @media (max-width: 480px) { margin-top: 10px; }
45 | }
--------------------------------------------------------------------------------
/src/sass/3-component/_button-spinner.scss:
--------------------------------------------------------------------------------
1 | // Componant: Button Loader
2 |
3 | .btn-spinner {
4 | display: inline-block;
5 | z-index: 2000;
6 | width: 15px;
7 | height: 15px;
8 | position: relative;
9 | top: 2px;
10 | margin-right: 5px;
11 | border: solid 2px transparent;
12 | border-top-color: #fff;
13 | border-left-color: #fff;
14 | border-radius: 10px;
15 | animation: bSpinner 0.8s linear infinite;
16 | }
17 |
18 | @keyframes bSpinner {
19 | 0% { transform: rotate(0deg) }
20 | 100% { transform: rotate(360deg) }
21 | }
22 |
--------------------------------------------------------------------------------
/src/sass/3-component/_button.scss:
--------------------------------------------------------------------------------
1 | // Componant: Dropdown
2 | // Updated styles for bootstrap dropdown
3 |
4 | .btn {
5 | cursor: pointer;
6 | &:not([disabled]):not(.disabled):not(.btn-link):hover,
7 | &:not([disabled]):not(.disabled):not(.btn-link):focus {
8 | text-decoration: none;
9 | transform: translate3d(0, -1px, 0);
10 | box-shadow: 0 4px 8px 0 rgba(0, 0, 0, 0.4);
11 | }
12 | &[disabled] { cursor: not-allowed; }
13 | .icon,
14 | .bi {
15 | font-size: 14px;
16 | margin-right: 5px;
17 | vertical-align: 0px;
18 | }
19 | }
--------------------------------------------------------------------------------
/src/sass/3-component/_chat.scss:
--------------------------------------------------------------------------------
1 | // Componant: ChatBox
2 |
3 | .messanger {
4 | display: flex;
5 | flex-direction: column;
6 |
7 | .messages {
8 | flex: 1;
9 | margin: 10px 0;
10 | padding: 0 10px;
11 | max-height: 260px;
12 | overflow-y: auto;
13 | overflow-x: hidden;
14 |
15 | .message {
16 | display: flex;
17 | margin-bottom: 15px;
18 | align-items: flex-start;
19 |
20 | &.me {
21 | flex-direction: row-reverse;
22 |
23 | img {
24 | margin-right: 0;
25 | margin-left: 15px;
26 | }
27 |
28 | .info {
29 | background-color: $primary-color;
30 | color: $white;
31 |
32 | &:before {
33 | display: none;
34 | }
35 |
36 | &:after {
37 | position: absolute;
38 | right: -13px;
39 | top: 0;
40 | content: "";
41 | width: 0;
42 | height: 0;
43 | border-style: solid;
44 | border-width: 0 16px 16px 0;
45 | border-color: transparent $primary-color transparent transparent;
46 | transform: rotate(270deg);
47 | }
48 | }
49 | }
50 |
51 | img {
52 | border-radius: 50%;
53 | margin-right: 15px;
54 | max-width: 45px;
55 | }
56 |
57 | .info {
58 | margin: 0;
59 | background-color: #ddd;
60 | padding: 5px 10px;
61 | border-radius: 3px;
62 | position: relative;
63 | align-self: flex-start;
64 |
65 | &:before {
66 | position: absolute;
67 | left: -14px;
68 | top: 0;
69 | content: "";
70 | width: 0;
71 | height: 0;
72 | border-style: solid;
73 | border-width: 0 16px 16px 0;
74 | border-color: transparent #ddd transparent transparent;
75 | }
76 | }
77 | }
78 | }
79 |
80 | .sender {
81 | display: flex;
82 |
83 | input[type="text"] {
84 | flex: 1;
85 | border: 1px solid $primary-color;
86 | outline: none;
87 | padding: 5px 10px;
88 | }
89 |
90 | button { border-radius: 0; }
91 | }
92 | }
--------------------------------------------------------------------------------
/src/sass/3-component/_dropdown.scss:
--------------------------------------------------------------------------------
1 | // Componant: Dropdown
2 | // Updated styles for bootstrap dropdown
3 |
4 | .dropdown-menu {
5 | border-radius: 0;
6 | box-shadow: 0 8px 17px 0 rgba(0, 0, 0, 0.2), 0 6px 20px 0 rgba(0, 0, 0, 0.19);
7 | &.dropdown-menu-right {
8 | left: auto;
9 | right: 0;
10 | }
11 | }
12 |
13 | .dropdown-item {
14 | .bi,
15 | .icon {
16 | margin-right: 5px;
17 | vertical-align: middle;
18 | }
19 | }
--------------------------------------------------------------------------------
/src/sass/3-component/_header.scss:
--------------------------------------------------------------------------------
1 | /*----- Componant: Top Navigation Bar ----- */
2 |
3 | .app-header {
4 | position: fixed;
5 | left: 0;
6 | right: 0;
7 | top: 0;
8 | width: 100%;
9 | display: flex;
10 | background-color: $primary-color;
11 | z-index: 1030;
12 | padding-right: 15px;
13 | @media(min-width: 768px) { padding-right: 30px }
14 | @media print { display: none; }
15 | }
16 |
17 | .app-header__logo {
18 | flex: 1 0 auto;
19 | color: #fff;
20 | text-align: center;
21 | font-family: 'Niconne';
22 | padding: 0 15px;
23 | font-size: 26px;
24 | font-weight: 400;
25 | line-height: 50px;
26 | text-decoration: none;
27 | @media(min-width: 768px) {
28 | flex: 0 0 auto;
29 | display: block;
30 | width: $sidebar-width;
31 | @if $sidebar-accent == dark {
32 | background-color: darken( $primary-color, 5% );
33 | }
34 | @if $sidebar-accent == light {
35 | background-color: lighten( $primary-color, 5% );
36 | }
37 | }
38 | &:focus,
39 | &:hover {
40 | text-decoration: none;
41 | color: #fff;
42 | }
43 | }
44 |
45 | .app-sidebar__toggle {
46 | padding: 0 15px;
47 | font-family: bootstrap-icons !important;
48 | color: #fff;
49 | line-height: 2.4;
50 | transition: background-color 0.3s ease;
51 | text-decoration: none;
52 | @media(max-width: 767px) { order: -1; }
53 | &:before {
54 | content: "\f479";
55 | font-size: 21px;
56 | }
57 | &:focus,
58 | &:hover {
59 | color: #fff;
60 | background-color: darken($primary-color, 10);
61 | text-decoration: none;
62 | }
63 | }
64 |
65 | .app-nav {
66 | @extend .list-unstyled;
67 | display: flex;
68 | margin-bottom: 0;
69 | justify-content: flex-end;
70 | @media(min-width: 768px) { flex: 1 0 auto; }
71 | }
72 |
73 | .app-nav__item {
74 | display: block;
75 | padding: 15px;
76 | line-height: 20px;
77 | color: #fff;
78 | transition: background-color 0.3s ease;
79 | &:hover,
80 | &:focus {
81 | background: rgba(0, 0, 0, 0.1);
82 | color: #f6f6f6;
83 | }
84 | }
85 |
86 | .app-search {
87 | position: relative;
88 | display: flex;
89 | align-self: center;
90 | margin-right: 15px;
91 | padding: 10px 0;
92 | @media(max-width: 480px) { display: none; }
93 | }
94 |
95 | .app-search__input {
96 | border: 0;
97 | padding: 5px 10px;
98 | padding-right: 30px;
99 | border-radius: 2px;
100 | background-color: rgba(255,255,255,0.8);
101 | transition: background-color 0.3s ease;
102 | &::placeholder { color: rgba(0,0,0,0.4); }
103 | }
104 | .app-search__button {
105 | position: absolute;
106 | right: 0;
107 | top: 10px;
108 | bottom: 10px;
109 | padding: 0 10px;
110 | border: 0;
111 | color: rgba(0,0,0,0.8);
112 | background: none;
113 | cursor: pointer;
114 | }
115 |
116 | .app-notification { min-width: 270px; }
117 | .app-notification__title {
118 | padding: 8px 20px;
119 | text-align: center;
120 | background-color: transparentize($primary-color, 0.6);
121 | color: #333;
122 | }
123 | .app-notification__footer {
124 | padding: 8px 20px;
125 | text-align: center;
126 | background-color: #eee;
127 | > a { text-decoration: none; }
128 | }
129 | .app-notification__content {
130 | max-height: 220px;
131 | overflow-y: auto;
132 | &::-webkit-scrollbar { width: 6px; }
133 | &::-webkit-scrollbar-thumb { background: rgba(0,0,0,0.2); }
134 | }
135 | .app-notification__item {
136 | display: flex;
137 | padding: 8px 20px;
138 | color: inherit;
139 | border-bottom: 1px solid #ddd;
140 | transition: background-color 0.3s ease;
141 | text-decoration: none;
142 | &:focus,
143 | &:hover {
144 | color: inherit;
145 | text-decoration: none;
146 | background-color: #e0e0e0;
147 | }
148 | }
149 |
150 | .app-notification__message,
151 | .app-notification__meta {
152 | margin-bottom: 0;
153 | }
154 |
155 | .app-notification__icon { padding-right: 10px; }
156 | .app-notification__message { line-height: 1.2; }
157 | .app-notification__meta { @extend .text-muted; }
158 |
--------------------------------------------------------------------------------
/src/sass/3-component/_material-half-bg.scss:
--------------------------------------------------------------------------------
1 | // Componant: Material Half cover background
2 | //-------------------------------------------------
3 |
4 | .material-half-bg {
5 | height: 100vh;
6 | background-color: #e7e7e7;
7 | position: fixed;
8 | top: 0;
9 | left: 0;
10 | right: 0;
11 | bottom: 0;
12 | z-index: -1;
13 | .cover {
14 | background-color: $primary-color;
15 | height: 50vh;
16 | }
17 | }
--------------------------------------------------------------------------------
/src/sass/3-component/_material-loader.scss:
--------------------------------------------------------------------------------
1 | // Componant: Material Loader
2 |
3 | .m-loader {
4 | position: relative;
5 | width: 40px;
6 | &:before {
7 | content: '';
8 | display: block;
9 | padding-top: 100%;
10 | }
11 | }
12 |
13 | .m-circular {
14 | animation: rotate 1.5s linear infinite;
15 | height: 100%;
16 | transform-origin: center center;
17 | width: 100%;
18 | position: absolute;
19 | top: 0;
20 | bottom: 0;
21 | left: 0;
22 | right: 0;
23 | margin: auto;
24 | }
25 | .path {
26 | stroke-dasharray: 1,200;
27 | stroke-dashoffset: 0;
28 | stroke: $primary-color;
29 | animation: dash 1.5s ease-in-out infinite;
30 | stroke-linecap: round;
31 | }
32 | @keyframes rotate {
33 | 100% { transform: rotate(360deg); }
34 | }
35 | @keyframes dash {
36 | 0% {
37 | stroke-dasharray: 1,200;
38 | stroke-dashoffset: 0;
39 | }
40 | 50% {
41 | stroke-dasharray: 89,200;
42 | stroke-dashoffset: -35px;
43 | }
44 | 100% {
45 | stroke-dasharray: 89,200;
46 | stroke-dashoffset: -124px;
47 | }
48 | }
49 |
50 |
51 | // Usage Example
52 | //
53 | //
54 | //
55 | //
56 | //
--------------------------------------------------------------------------------
/src/sass/3-component/_rtl.scss:
--------------------------------------------------------------------------------
1 | // Componant: RTL
2 | // Right to left support
3 |
4 | [dir=rtl] {
5 | body {
6 | text-align: right;
7 | direction: rtl;
8 | }
9 |
10 | .app-sidebar {
11 | left: auto;
12 | right: 0;
13 | }
14 |
15 | .app-sidebar__user-avatar {
16 | margin-left: 15px;
17 | margin-right: 0;
18 | }
19 |
20 | .dropdown-menu.dropdown-menu-right {
21 | right: auto;
22 | left: 0;
23 | }
24 |
25 | .list-unstyled,
26 | .app-nav,
27 | .app-menu,
28 | .user .user-tabs,
29 | .treeview-menu {
30 | padding-right: 0;
31 | }
32 |
33 | .btn .icon,
34 | .btn .bi,
35 | .treeview-item .icon {
36 | margin-right: 0;
37 | margin-left: 5px;
38 | }
39 |
40 | .modal-header .close {
41 | margin-left: 0;
42 | margin-right: auto;
43 | }
44 |
45 | .modal-footer > :not(:last-child) {
46 | margin-right: 0;
47 | margin-left: 0.25rem;
48 | }
49 |
50 | .widget-small .icon { border-radius: 0 4px 4px 0; }
51 |
52 | .user .timeline-post .post-media img {
53 | margin-right: 0;
54 | margin-left: 10px;
55 | }
56 |
57 | table.table-bordered.dataTable th:last-child,
58 | table.table-bordered.dataTable th:last-child,
59 | table.table-bordered.dataTable td:last-child,
60 | table.table-bordered.dataTable td:last-child {
61 | border-right-width: 1px;
62 | }
63 |
64 | @media(min-width: 768px) {
65 | .app-header {
66 | padding-right: 0;
67 | padding-left: 30px;
68 | }
69 | .app-content {
70 | margin-left: 0;
71 | margin-right: 230px;
72 | transition: margin-right 0.3s ease;
73 | }
74 | .sidebar-mini.sidenav-toggled .app-content {
75 | margin-left: 0;
76 | margin-right: 50px;
77 | }
78 | .sidebar-mini.sidenav-toggled .app-menu__label,
79 | .sidebar-mini.sidenav-toggled .treeview-menu {
80 | left: auto;
81 | right: 50px;
82 | }
83 | .sidebar-mini.sidenav-toggled .treeview .app-menu__label {
84 | border-top-left-radius: 4px;
85 | border-top-right-radius: 0;
86 | border-bottom-left-radius: 0;
87 | }
88 | .sidebar-mini.sidenav-toggled .treeview-menu {
89 | border-bottom-right-radius: 0;
90 | border-bottom-left-radius: 4px;
91 | }
92 | .sidebar-mini.sidenav-toggled .app-menu__label {
93 | border-top-right-radius: 0;
94 | border-bottom-right-radius: 0;
95 | border-top-left-radius: 4px;
96 | border-bottom-left-radius: 4px;
97 | }
98 | }
99 |
100 | @media(max-width: 768px) {
101 | .app.sidenav-toggled .app-sidebar {
102 | left: auto;
103 | right: 0;
104 | }
105 | .app .app-sidebar {
106 | left: auto;
107 | right: -230px;
108 | }
109 | }
110 | }
--------------------------------------------------------------------------------
/src/sass/3-component/_sidebar-mini.scss:
--------------------------------------------------------------------------------
1 | // Componant: Sidebar Mini
2 |
3 | @media (min-width: 768px) {
4 | .sidebar-mini.sidenav-toggled {
5 | .app-sidebar__user-name,
6 | .app-sidebar__user-designation,
7 | .treeview-indicator {
8 | display: none;
9 | }
10 | .app-sidebar__user-avatar {
11 | width: 30px;
12 | height: 30px;
13 | }
14 | .app-content { margin-left: 50px; }
15 | .app-sidebar {
16 | left: 0;
17 | width: 50px;
18 | overflow: hidden;
19 | &:hover { overflow: visible; }
20 | }
21 | .app-menu__item {
22 | overflow: hidden;
23 | &:hover {
24 | overflow: visible;
25 | .app-menu__label { opacity: 1; }
26 | & + .treeview-menu { visibility: visible; }
27 | }
28 | }
29 | .app-menu__label {
30 | display: block;
31 | position: absolute;
32 | top: 0;
33 | left: 50px;
34 | min-width: 180px;
35 | padding: 16px 5px 16px 20px;
36 | margin-left: -3px;
37 | line-height: 1;
38 | opacity: 0;
39 | background: darken($sidebar-color, 10);
40 | border-top-right-radius: 4px;
41 | border-bottom-right-radius: 4px;
42 | }
43 | .treeview {
44 | &:hover {
45 | .app-menu__item {
46 | overflow: visible;
47 | background: darken($sidebar-color, 10);
48 | border-left-color: $primary-color;
49 | @if $sidebar-accent == dark { color: $sidebar-dark-link-color }
50 | @if $sidebar-accent == light { color: $primary-color }
51 | }
52 | .app-menu__label { opacity: 1; }
53 | .treeview-menu {
54 | max-height: 100vh;
55 | opacity: 1;
56 | visibility: visible;
57 | z-index: 10;
58 | }
59 | }
60 | .app-menu__label { border-bottom-right-radius: 0; }
61 | }
62 | .treeview-menu {
63 | position: absolute;
64 | left: 50px;
65 | min-width: 180px;
66 | padding: 12px 0;
67 | opacity: 0;
68 | border-bottom-right-radius: 4px;
69 | z-index: 9;
70 | visibility: hidden;
71 | transition: visibility 0.3s ease;
72 | }
73 | }
74 | }
--------------------------------------------------------------------------------
/src/sass/3-component/_sidebar.scss:
--------------------------------------------------------------------------------
1 | // Componant: Sidebar
2 |
3 | .app-sidebar {
4 | position: fixed;
5 | top: 0;
6 | bottom: 0;
7 | left: 0;
8 | padding-top: 70px;
9 | width: $sidebar-width;
10 | overflow: auto;
11 | z-index: 10;
12 | background-color: $sidebar-color;
13 | box-shadow: 0px 8px 17px rgba(0, 0, 0, 0.2);
14 | transition: left 0.3s ease,
15 | width 0.3s ease;
16 | &::-webkit-scrollbar { width: 6px; }
17 | &::-webkit-scrollbar-thumb { background: rgba(0,0,0,0.2); }
18 | @media print { display: none; }
19 | }
20 |
21 | .app-sidebar__overlay {
22 | @media(max-width: 767px) {
23 | position: fixed;
24 | top: 0;
25 | left: 0;
26 | bottom: 0;
27 | right: 0;
28 | z-index: 9;
29 | }
30 | }
31 |
32 | .app-sidebar__user {
33 | display: flex;
34 | align-items: center;
35 | padding: 10px;
36 | margin-bottom: 20px;
37 | @if $sidebar-accent == dark {
38 | color: #fff;
39 | }
40 | }
41 |
42 | .app-sidebar__user-avatar {
43 | @extend .rounded-circle;
44 | flex: 0 0 auto;
45 | margin-right: 15px;
46 | max-width: 45px;
47 | height: auto;
48 | }
49 |
50 | .app-sidebar__user-name {
51 | font-size: 17px;
52 | line-height: 1.3;
53 | }
54 |
55 | .app-sidebar__user-name,
56 | .app-sidebar__user-designation {
57 | white-space: nowrap;
58 | overflow: hidden;
59 | text-overflow: ellipsis;
60 | margin-bottom: 0;
61 | }
62 |
63 | .app-menu {
64 | @extend .list-unstyled;
65 | margin-bottom: 0;
66 | padding-bottom: 40px;
67 | }
68 |
69 | .app-menu__item {
70 | position: relative;
71 | display: flex;
72 | align-items: center;
73 | padding: 12px 15px;
74 | font-size: 1.08em;
75 | border-left: 3px solid transparent;
76 | transition: border-left-color 0.3s ease,
77 | background-color 0.3s ease;
78 | text-decoration: none;
79 | @if $sidebar-accent == dark { color: $sidebar-dark-link-color }
80 | @if $sidebar-accent == light { color: $sidebar-light-link-color }
81 | &.active,
82 | &:hover,
83 | &:focus {
84 | background: darken($sidebar-color, 10);
85 | border-left-color: $primary-color;
86 | text-decoration: none;
87 | @if $sidebar-accent == dark { color: $sidebar-dark-link-color }
88 | @if $sidebar-accent == light { color: $primary-color }
89 | }
90 | }
91 |
92 | .app-menu__icon {
93 | flex: 0 0 auto;
94 | width: 25px;
95 | }
96 |
97 | .app-menu__label {
98 | white-space: nowrap;
99 | flex: 1 1 auto;
100 | }
101 |
102 | .treeview {
103 | &.is-expanded {
104 | [data-toggle='treeview'] {
105 | border-left-color: $primary-color;
106 | background: darken($sidebar-color, 10);
107 | }
108 | .treeview-menu { max-height: 100vh; }
109 | .treeview-indicator { transform: rotate(90deg); }
110 | }
111 | }
112 |
113 | .treeview-menu {
114 | @extend .list-unstyled;
115 | max-height: 0;
116 | overflow: hidden;
117 | transition: max-height 0.3s ease;
118 | @if $sidebar-accent == dark {
119 | background: lighten($sidebar-color, 4)
120 | }
121 | @if $sidebar-accent == light {
122 | background: darken($sidebar-color, 4)
123 | }
124 | }
125 |
126 | .treeview-item {
127 | display: flex;
128 | align-items: center;
129 | padding: 5px 5px 5px 20px;
130 | font-size: 1em;
131 | text-decoration: none;
132 | @if $sidebar-accent == dark { color: $sidebar-dark-link-color }
133 | @if $sidebar-accent == light { color: $sidebar-light-link-color }
134 | &.active,
135 | &:hover,
136 | &:focus {
137 | background: darken($sidebar-color, 10);
138 | text-decoration: none;
139 | @if $sidebar-accent == dark { color: $sidebar-dark-link-color }
140 | @if $sidebar-accent == light { color: $primary-color }
141 | }
142 | .icon { margin-right: 5px; }
143 | }
144 |
145 | .treeview-indicator {
146 | transform-origin: center;
147 | transition: transform 0.3s ease;
148 | }
149 |
--------------------------------------------------------------------------------
/src/sass/3-component/_tile.scss:
--------------------------------------------------------------------------------
1 | // Componant: Card
2 |
3 | .tile {
4 | position: relative;
5 | background: #ffffff;
6 | border-radius: 3px;
7 | padding: 20px;
8 | box-shadow: 0 2px 2px 0 rgba(0, 0, 0, 0.14), 0 1px 5px 0 rgba(0, 0, 0, 0.12), 0 3px 1px -2px rgba(0, 0, 0, 0.2);
9 | margin-bottom: 30px;
10 | transition: all 0.3s ease-in-out;
11 |
12 | @media print {
13 | border: 1px solid #ddd;
14 | box-shadow: none;
15 | }
16 |
17 | &.small { padding: 0; }
18 |
19 | .overlay {
20 | position: absolute;
21 | top: 0;
22 | left: 0;
23 | bottom: 0;
24 | right: 0;
25 | background-color: rgba(255, 255, 255, 0.9);
26 | display: flex;
27 | align-items: center;
28 | justify-content: center;
29 | flex-direction: row;
30 | color: #555;
31 | border-radius: 3px;
32 |
33 | .l-text {
34 | font-size: 24px;
35 | margin-top: 15px;
36 | margin-left: 12px;
37 | }
38 | }
39 |
40 | .tile-title {
41 | margin-top: 0;
42 | margin-bottom: 20px;
43 | font-size: 1.5rem;
44 | }
45 |
46 | .tile-title-w-btn {
47 | display: flex;
48 | justify-content: space-between;
49 | align-items: center;
50 | margin-bottom: 20px;
51 |
52 | p { margin: 0; }
53 |
54 | .title { margin: 0; }
55 |
56 | .side {
57 | margin-bottom: 0;
58 | padding-left: 0;
59 | }
60 |
61 | .btn-group { flex: 0 0 auto; }
62 | }
63 |
64 | .tile-footer {
65 | border-top: 1px solid #ddd;
66 | padding: 20px 0 0 0;
67 | margin-top: 10px;
68 | }
69 | }
--------------------------------------------------------------------------------
/src/sass/3-component/_widgets.scss:
--------------------------------------------------------------------------------
1 | // Componant: Widget
2 |
3 | @use "sass:map";
4 |
5 | .widget-small {
6 | display: flex;
7 | border-radius: 4px;
8 | color: $white;
9 | margin-bottom: 30px;
10 | box-shadow: 0 1px 1px rgba(0, 0, 0, 0.1);
11 |
12 | .icon {
13 | display: flex;
14 | min-width: 85px;
15 | align-items: center;
16 | justify-content: center;
17 | padding: 20px;
18 | background-color: rgba(0, 0, 0, 0.2);
19 | border-radius: 4px 0 0 4px;
20 | font-size: 2.5rem;
21 | }
22 |
23 | .info {
24 | flex: 1;
25 | padding: 0 20px;
26 | align-self: center;
27 |
28 | h4 {
29 | text-transform: uppercase;
30 | margin: 0;
31 | margin-bottom: 5px;
32 | font-weight: 400;
33 | font-size: 1.1rem;
34 | }
35 |
36 | p {
37 | margin: 0;
38 | font-size: 16px;
39 | }
40 | }
41 |
42 | &.primary {
43 | background-color: $primary-color;
44 |
45 | &.coloured-icon {
46 | background-color: #fff;
47 | color: #2a2a2a;
48 |
49 | .icon {
50 | background-color: $primary-color;
51 | color: #fff;
52 | }
53 | }
54 | }
55 |
56 | &.info {
57 | background-color: map.get($theme-colors, "info");
58 |
59 | &.coloured-icon {
60 | background-color: #fff;
61 | color: #2a2a2a;
62 |
63 | .icon {
64 | background-color: map.get($theme-colors, "info");
65 | color: #fff;
66 | }
67 | }
68 | }
69 |
70 | &.warning {
71 | background-color: map.get($theme-colors,"warning");
72 |
73 | &.coloured-icon {
74 | background-color: #fff;
75 | color: #2a2a2a;
76 |
77 | .icon {
78 | background-color: map.get($theme-colors,"warning");
79 | color: #fff;
80 | }
81 | }
82 | }
83 |
84 | &.danger {
85 | background-color: map.get($theme-colors,"danger");
86 |
87 | &.coloured-icon {
88 | background-color: #fff;
89 | color: #2a2a2a;
90 |
91 | .icon {
92 | background-color: map.get($theme-colors,"danger");
93 | color: #fff;
94 | }
95 | }
96 | }
97 | }
--------------------------------------------------------------------------------
/src/sass/4-pages/_docs.scss:
--------------------------------------------------------------------------------
1 | .docs {
2 | font-size: 16px;
3 | }
4 |
5 | .docs-title {
6 | padding-bottom: 10px;
7 | border-bottom: 1px solid #ddd;
8 | font-size: 20px;
9 | &:not(:first-of-type) { margin-top: 30px; }
10 | }
--------------------------------------------------------------------------------
/src/sass/4-pages/_error-page.scss:
--------------------------------------------------------------------------------
1 | // Page: Error
2 |
3 | .page-error {
4 | display: flex;
5 | align-items: center;
6 | justify-content: center;
7 | flex-direction: column;
8 | min-height: calc(100vh - 110px);
9 | margin-bottom: 0;
10 | h1 {
11 | margin: 10px;
12 | font-size: 42px;
13 | }
14 | }
--------------------------------------------------------------------------------
/src/sass/4-pages/_landing-page.scss:
--------------------------------------------------------------------------------
1 | .landing-hero {
2 | position: relative;
3 | background-size: cover;
4 | background-repeat: no-repeat;
5 | background-image: url(https://images.unsplash.com/photo-1487621167305-5d248087c724?ixlib=rb-1.2.1&q=80&fm=jpg&crop=entropy&cs=tinysrgb&w=1600&h=700&fit=crop&ixid=eyJhcHBfaWQiOjF9);
6 | border-bottom: 1px solid #ddd;
7 | }
8 |
9 | .landing-hero-overlay {
10 | position: absolute;
11 | top: 0;
12 | left: 0;
13 | right: 0;
14 | bottom: 0;
15 | background-color: darken($primary-color, 15);
16 | opacity: 0.5;
17 | z-index: 1;
18 | }
19 |
20 | .landing-hero-content {
21 | display: flex;
22 | flex-direction: column;
23 | justify-content: flex-end;;
24 | position: relative;
25 | padding: 60px 30px 0;
26 | z-index: 2;
27 | text-align: center;
28 | color: #fff;
29 | @media(min-width: 768px) { min-height: 100vh; }
30 | }
31 |
32 | .landing-hero-title {
33 | font-size: 26px;
34 | @media(max-width: 480px) { font-size: 20px; }
35 | }
36 |
37 | .landing-hero-description { font-size: 15px; }
38 |
39 | .landing-hero-banner {
40 | display: block;
41 | width: 100%;
42 | max-width: 900px;
43 | margin: 30px auto 0;
44 | border-radius: 6px 6px 0 0;
45 | }
46 |
47 | .features {
48 | padding: 60px 30px;
49 | }
50 |
51 | .features-title {
52 | font-size: 26px;
53 | text-align: center;
54 | margin-bottom: 30px;
55 | }
56 |
57 | .features-cards {
58 | max-width: 760px;
59 | list-style: none;
60 | margin: 0 auto;
61 | padding-left: 0;
62 | display: grid;
63 | grid-gap: 20px;
64 | grid-template-columns: repeat(auto-fill, minmax(300px, 1fr));
65 | }
66 |
67 | .features-card {
68 | border-radius: 4px;
69 | padding: 10px;
70 | font-size: 1.143em;
71 | text-align: center;
72 | }
73 |
74 | .feature-icon-backdrop {
75 | width: 64px;
76 | height: 64px;
77 | margin: 0 auto 8px;
78 | padding: 15px;
79 | border-radius: 50%;
80 | background-color: $primary-color;
81 | }
82 |
83 | .feature-icon {
84 | width: 32px;
85 | height: 32px;
86 | stroke: #fff;
87 | fill: transparent;
88 | }
89 |
90 | .landing-footer {
91 | padding: 20px;
92 | text-align: center;
93 | border-top: 1px solid #ddd;
94 | }
95 |
--------------------------------------------------------------------------------
/src/sass/4-pages/_lockscreen-material.scss:
--------------------------------------------------------------------------------
1 | // Page: Login Material
2 |
3 | .lockscreen-content {
4 | display: flex;
5 | flex-direction: column;
6 | align-items: center;
7 | justify-content: center;
8 | min-height: 100vh;
9 |
10 | .logo {
11 | font-family: "Niconne";
12 | margin-bottom: 40px;
13 | color: #fff;
14 |
15 | h1 {
16 | font-size: 52px;
17 | font-weight: 400;
18 | }
19 | }
20 |
21 | .lock-box {
22 | position: relative;
23 | min-width: 320px;
24 | padding: 20px 40px;
25 | background-color: #fff;
26 | box-shadow: 0px 29px 147.5px 102.5px rgba(0, 0, 0, 0.05), 0px 29px 95px 0px rgba(0, 0, 0, 0.16);
27 | perspective: 800px;
28 | transition: all 0.5s ease-in-out;
29 |
30 | .user-image {
31 | border: 3px solid #fff;
32 | max-width: 100px;
33 | display: block;
34 | margin: 0 auto;
35 | }
36 |
37 | .user-name { margin-bottom: 2px; }
38 |
39 | label {
40 | color: #666;
41 | font-weight: 700;
42 | }
43 | .btn-container { text-align: center; }
44 | }
45 | }
--------------------------------------------------------------------------------
/src/sass/4-pages/_login-material.scss:
--------------------------------------------------------------------------------
1 | // Page: Login Material
2 |
3 | .login-content {
4 | display: flex;
5 | flex-direction: column;
6 | align-items: center;
7 | justify-content: center;
8 | min-height: 100vh;
9 |
10 | .logo {
11 | margin-bottom: 40px;
12 | font-family: "Niconne";
13 | color: #fff;
14 |
15 | h1 {
16 | font-size: 52px;
17 | font-weight: 400;
18 | }
19 | }
20 |
21 | .login-box {
22 | position: relative;
23 | min-width: 350px;
24 | min-height: 390px;
25 | background-color: #fff;
26 | box-shadow: 0px 29px 147.5px 102.5px rgba(0, 0, 0, 0.05), 0px 29px 95px 0px rgba(0, 0, 0, 0.16);
27 | perspective: 800px;
28 | transition: all 0.5s ease-in-out;
29 |
30 | .login-head {
31 | margin-top: 0;
32 | margin-bottom: 20px;
33 | padding-bottom: 20px;
34 | border-bottom: 1px solid #ddd;
35 | text-align: center;
36 | }
37 |
38 | label {
39 | color: #666;
40 | font-weight: 700;
41 | }
42 |
43 | .utility {
44 | display: flex;
45 | padding: 1px;
46 | justify-content: space-between;
47 | align-items: center;
48 | }
49 |
50 | .btn-container {
51 | text-align: center;
52 | margin-bottom: 0;
53 | }
54 |
55 | .login-form, .forget-form {
56 | position: absolute;
57 | top: 0;
58 | bottom: 0;
59 | left: 0;
60 | right: 0;
61 | padding: 40px;
62 | backface-visibility: hidden;
63 | -webkit-backface-visibility: hidden;
64 | transition: all 0.5s ease-in-out;
65 | }
66 |
67 | .forget-form {
68 | opacity: 0;
69 | transform: rotateY(180deg);
70 | }
71 |
72 | &.flipped {
73 | min-height: 300px;
74 |
75 | .login-form {
76 | opacity: 0;
77 | transform: rotateY(-180deg);
78 | }
79 |
80 | .forget-form {
81 | opacity: 1;
82 | transform: rotateY(0deg);
83 | }
84 | }
85 | }
86 | }
87 |
88 | @media (max-width: 351px) {
89 | .login-content {
90 | .login-box {
91 | min-width: 100%;
92 |
93 | .login-form, .forget-form {
94 | width: 100%;
95 | }
96 | }
97 | }
98 | }
--------------------------------------------------------------------------------
/src/sass/4-pages/_mailbox.scss:
--------------------------------------------------------------------------------
1 | // Page: Mailbox
2 |
3 | .folder-head {
4 | padding: 10px;
5 | margin-bottom: 0 !important;
6 | border-bottom: 1px solid #ddd;
7 | }
8 |
9 | .mailbox-controls {
10 | margin-bottom: 10px;
11 | border-bottom: 1px solid #ddd;
12 | padding: 0 0 10px 5px;
13 | display: flex;
14 | align-items: center;
15 | justify-content: space-between;
16 |
17 | .animated-checkbox {
18 | .label-text:before { vertical-align: (-7px) !important; }
19 | }
20 | }
21 |
22 | .mail-nav > li > a {
23 | display: block;
24 | background-color: #fff;
25 | color: #2a2a2a;
26 | border-radius: 0;
27 | font-weight: 500;
28 | }
29 |
30 | .mailbox-messages {
31 | table tr td {
32 | border: 0;
33 | padding: 5px;
34 | }
35 |
36 | .mail-subject {
37 | overflow: hidden;
38 | text-overflow: ellipsis;
39 | white-space: nowrap;
40 | max-width: 500px;
41 | }
42 | }
--------------------------------------------------------------------------------
/src/sass/4-pages/_user-profile.scss:
--------------------------------------------------------------------------------
1 | // Page: User Profile
2 |
3 | .user {
4 | .profile {
5 | margin: -30px -30px 0 -30px;
6 | position: relative;
7 |
8 | .info {
9 | padding: 30px 60px;
10 | text-align: center;
11 | background-color: #fff;
12 | white-space: nowrap;
13 | background-color: rgba(100, 100, 100, 0.9);
14 | color: #fff;
15 | position: absolute;
16 | top: 0;
17 | bottom: 0;
18 | left: 0;
19 |
20 | img {
21 | border-radius: 50%;
22 | max-width: 110px;
23 | margin-bottom: 20px;
24 | margin-top: 10px;
25 | }
26 | }
27 |
28 | .cover-image {
29 | flex: 1;
30 | background-image: url(https://unsplash.com/photos/dH4JzW5h9Ng/download?w=1920);
31 | background-size: cover;
32 | background-position: center;
33 | min-height: 300px;
34 | }
35 | }
36 |
37 | .user-tabs {
38 | margin-top: 20px;
39 |
40 | .nav-link {
41 | border-left: 3px solid transparent;
42 | padding: 12px 15px;
43 | border-bottom: 0;
44 | font-size: 15px;
45 | border-radius: 0;
46 |
47 | &.active {
48 | border-left-color: $primary-color;
49 | border-bottom: 0;
50 | }
51 |
52 | &:hover,
53 | &:active {
54 | background-color: #eee !important;
55 | border-bottom: 0;
56 | }
57 | }
58 | }
59 |
60 | .tab-content { margin: 20px -10px -10px; }
61 |
62 | .timeline-post {
63 | background-color: #fff;
64 | padding: 20px;
65 | margin-bottom: 20px;
66 | box-shadow: 0 2px 2px 0 rgba(0, 0, 0, 0.14), 0 3px 1px -2px rgba(0, 0, 0, 0.2), 0 1px 5px 0 rgba(0, 0, 0, 0.12);
67 |
68 | .post-media {
69 | display: flex;
70 | align-items: flex-start;
71 | margin-bottom: 15px;
72 |
73 | img {
74 | margin-right: 10px;
75 | max-width: 45px;
76 | height: auto;
77 | border-radius: 4px;
78 | }
79 |
80 | h5 {
81 | margin-top: 0;
82 | margin-bottom: 3px;
83 | font-size: 15px;
84 | }
85 | }
86 |
87 | .post-content { margin-bottom: 20px; }
88 |
89 | .post-utility {
90 | display: flex;
91 | list-style: none;
92 | padding-left: 0;
93 | margin-bottom: 0;
94 |
95 | .likes,
96 | .shares {
97 | margin-right: 10px;
98 |
99 | a { color: #555; }
100 | }
101 |
102 | .comments {
103 | color: #555;
104 | flex: 1;
105 | text-align: right;
106 | }
107 | }
108 | }
109 |
110 | .user-settings {
111 | .line-head {
112 | font-size: 18px;
113 | margin-bottom: 30px;
114 | color: #2a2a2a;
115 | }
116 |
117 | label { color: #666; }
118 | }
119 | }
--------------------------------------------------------------------------------
/src/sass/main.scss:
--------------------------------------------------------------------------------
1 | /*!
2 | * Vali Admin
3 | * Author: Pratik Borsadiya
4 | * ================================*/
5 |
6 | // 1 - TOOLS
7 | //---------------------------------------------------
8 |
9 | // This files are essential for the theme
10 | @import '1-tools/fonts';
11 | @import '1-tools/vars';
12 | @import '1-tools/customize-bootstrap';
13 | @import '../../node_modules/bootstrap/scss/bootstrap.scss';
14 |
15 | // 2 - BASICS
16 | //---------------------------------------------------
17 |
18 | // This styles are essential for theme
19 | @import '2-basics/app';
20 | @import '2-basics/helpers';
21 |
22 | // 3 - Component
23 | //---------------------------------------------------
24 |
25 | @import '3-component/header';
26 | @import '3-component/sidebar';
27 | @import '3-component/sidebar-mini';
28 |
29 | // This styles are optional based on your preferance
30 | @import '3-component/dropdown';
31 | @import '3-component/button';
32 | @import '3-component/app-title';
33 | @import '3-component/tile';
34 | @import '3-component/material-half-bg';
35 | @import '3-component/material-loader';
36 | @import '3-component/button-spinner';
37 | @import '3-component/widgets';
38 | @import '3-component/chat';
39 |
40 | // Include the following style if you need RTL support
41 | // Also you will need to add dir="rtl" attribute to HTML tag
42 |
43 | //@import '3-component/rtl';
44 |
45 | // 4 -Pages
46 | //---------------------------------------------------
47 |
48 | // This styles are optional based on your preferance
49 | @import '4-pages/landing-page';
50 | @import '4-pages/docs';
51 | @import '4-pages/login-material';
52 | @import '4-pages/lockscreen-material';
53 | @import '4-pages/error-page';
54 | @import '4-pages/mailbox';
55 | @import '4-pages/user-profile';
56 |
--------------------------------------------------------------------------------