init
commit
4ef189d95a
|
|
@ -0,0 +1,18 @@
|
||||||
|
root = true
|
||||||
|
|
||||||
|
[*]
|
||||||
|
charset = utf-8
|
||||||
|
end_of_line = lf
|
||||||
|
insert_final_newline = true
|
||||||
|
indent_style = space
|
||||||
|
indent_size = 4
|
||||||
|
trim_trailing_whitespace = true
|
||||||
|
|
||||||
|
[*.md]
|
||||||
|
trim_trailing_whitespace = false
|
||||||
|
|
||||||
|
[*.{yml,yaml}]
|
||||||
|
indent_size = 2
|
||||||
|
|
||||||
|
[docker-compose.yml]
|
||||||
|
indent_size = 4
|
||||||
|
|
@ -0,0 +1,48 @@
|
||||||
|
APP_NAME=Laravel
|
||||||
|
APP_ENV=testing
|
||||||
|
APP_KEY=base64:nkWw/7lEOZCPLLEaa1oWsHOgPQGxMszomZoJvgy/XHk=
|
||||||
|
APP_DEBUG=true
|
||||||
|
APP_URL=http://127.0.0.1:8300
|
||||||
|
|
||||||
|
LOG_CHANNEL=stack
|
||||||
|
|
||||||
|
DB_CONNECTION=mysql
|
||||||
|
DB_HOST=127.0.0.1
|
||||||
|
DB_PORT=3306
|
||||||
|
DB_DATABASE=laravel
|
||||||
|
DB_USERNAME=root
|
||||||
|
DB_PASSWORD=123456
|
||||||
|
|
||||||
|
CODECOV_TOKEN=8124bc76-384b-4528-8875-a33ee1e1ee19
|
||||||
|
|
||||||
|
BROADCAST_DRIVER=log
|
||||||
|
CACHE_DRIVER=file
|
||||||
|
QUEUE_CONNECTION=sync
|
||||||
|
SESSION_DRIVER=file
|
||||||
|
SESSION_LIFETIME=120
|
||||||
|
|
||||||
|
REDIS_HOST=127.0.0.1
|
||||||
|
REDIS_PASSWORD=null
|
||||||
|
REDIS_PORT=6379
|
||||||
|
|
||||||
|
MAIL_MAILER=smtp
|
||||||
|
MAIL_HOST=smtp.mailtrap.io
|
||||||
|
MAIL_PORT=2525
|
||||||
|
MAIL_USERNAME=null
|
||||||
|
MAIL_PASSWORD=null
|
||||||
|
MAIL_ENCRYPTION=null
|
||||||
|
MAIL_FROM_ADDRESS=null
|
||||||
|
MAIL_FROM_NAME="${APP_NAME}"
|
||||||
|
|
||||||
|
AWS_ACCESS_KEY_ID=
|
||||||
|
AWS_SECRET_ACCESS_KEY=
|
||||||
|
AWS_DEFAULT_REGION=us-east-1
|
||||||
|
AWS_BUCKET=
|
||||||
|
|
||||||
|
PUSHER_APP_ID=
|
||||||
|
PUSHER_APP_KEY=
|
||||||
|
PUSHER_APP_SECRET=
|
||||||
|
PUSHER_APP_CLUSTER=mt1
|
||||||
|
|
||||||
|
MIX_PUSHER_APP_KEY="${PUSHER_APP_KEY}"
|
||||||
|
MIX_PUSHER_APP_CLUSTER="${PUSHER_APP_CLUSTER}"
|
||||||
|
|
@ -0,0 +1,2 @@
|
||||||
|
resources/* linguist-vendored
|
||||||
|
*.js linguist-language=php
|
||||||
|
|
@ -0,0 +1,21 @@
|
||||||
|
# Number of days of inactivity before an issue becomes stale
|
||||||
|
daysUntilStale: 180
|
||||||
|
# Number of days of inactivity before a stale issue is closed
|
||||||
|
daysUntilClose: 7
|
||||||
|
# Issues with these labels will never be considered stale
|
||||||
|
exemptLabels:
|
||||||
|
- pinned
|
||||||
|
- security
|
||||||
|
- bug
|
||||||
|
- unconfirmed
|
||||||
|
- enhancement
|
||||||
|
- feature
|
||||||
|
# Label to use when marking an issue as stale
|
||||||
|
staleLabel: wontfix
|
||||||
|
# Comment to post when marking an issue as stale. Set to `false` to disable
|
||||||
|
markComment: >
|
||||||
|
This issue has been automatically marked as stale because it has not had
|
||||||
|
recent activity. It will be closed if no further activity occurs. Thank you
|
||||||
|
for your contributions.
|
||||||
|
# Comment to post when closing a stale issue. Set to `false` to disable
|
||||||
|
closeComment: false
|
||||||
|
|
@ -0,0 +1,238 @@
|
||||||
|
name: Laravel Dusk
|
||||||
|
|
||||||
|
on:
|
||||||
|
push:
|
||||||
|
branches: [ 2.0 ]
|
||||||
|
pull_request:
|
||||||
|
branches: [ 2.0 ]
|
||||||
|
|
||||||
|
jobs:
|
||||||
|
laravel5:
|
||||||
|
runs-on: ubuntu-latest
|
||||||
|
|
||||||
|
steps:
|
||||||
|
- uses: shivammathur/setup-php@b7d1d9c9a92d8d8463ce36d7f60da34d461724f8
|
||||||
|
with:
|
||||||
|
php-version: '7.2'
|
||||||
|
|
||||||
|
- uses: actions/checkout@v2
|
||||||
|
|
||||||
|
- name: Composer Update
|
||||||
|
run: composer self-update --2
|
||||||
|
|
||||||
|
- name: Setup MySQL
|
||||||
|
# You may pin to the exact commit or the version.
|
||||||
|
# uses: mirromutth/mysql-action@de1fba8b3f90ce8db80f663a7043be3cf3231248
|
||||||
|
uses: mirromutth/mysql-action@v1.1
|
||||||
|
with:
|
||||||
|
# Version of MySQL to use
|
||||||
|
mysql version: 5.7
|
||||||
|
# MYSQL_ROOT_PASSWORD - root superuser password
|
||||||
|
mysql root password: 123456
|
||||||
|
# MYSQL_DATABASE - name for the default database that is created
|
||||||
|
mysql database: laravel
|
||||||
|
# MYSQL_USER - create the specified user with superuser power for created database
|
||||||
|
mysql user: root
|
||||||
|
# MYSQL_PASSWORD - specified superuser password which user is power for created database
|
||||||
|
mysql password: 123456
|
||||||
|
|
||||||
|
- name: Install Dependencies
|
||||||
|
run: |
|
||||||
|
composer create-project --prefer-dist laravel/laravel laravel-tests 5.*
|
||||||
|
sh ./tests/bin/install-dep.sh
|
||||||
|
|
||||||
|
- name: Install Admin
|
||||||
|
run: sh ./tests/bin/install-admin.sh
|
||||||
|
|
||||||
|
# - name: Install Xvfb
|
||||||
|
# run: sudo apt-get install xvfb
|
||||||
|
|
||||||
|
- name: Start Server
|
||||||
|
run: sh ./tests/bin/start.sh
|
||||||
|
|
||||||
|
- name: Run test suite
|
||||||
|
run: cd ./laravel-tests && php artisan dusk
|
||||||
|
|
||||||
|
laravel6:
|
||||||
|
runs-on: ubuntu-latest
|
||||||
|
|
||||||
|
steps:
|
||||||
|
- uses: shivammathur/setup-php@b7d1d9c9a92d8d8463ce36d7f60da34d461724f8
|
||||||
|
with:
|
||||||
|
php-version: '7.3'
|
||||||
|
|
||||||
|
- uses: actions/checkout@v2
|
||||||
|
|
||||||
|
- name: Composer Update
|
||||||
|
run: composer self-update --2
|
||||||
|
|
||||||
|
- name: Setup MySQL
|
||||||
|
# You may pin to the exact commit or the version.
|
||||||
|
# uses: mirromutth/mysql-action@de1fba8b3f90ce8db80f663a7043be3cf3231248
|
||||||
|
uses: mirromutth/mysql-action@v1.1
|
||||||
|
with:
|
||||||
|
# Version of MySQL to use
|
||||||
|
mysql version: 5.7
|
||||||
|
# MYSQL_ROOT_PASSWORD - root superuser password
|
||||||
|
mysql root password: 123456
|
||||||
|
# MYSQL_DATABASE - name for the default database that is created
|
||||||
|
mysql database: laravel
|
||||||
|
# MYSQL_USER - create the specified user with superuser power for created database
|
||||||
|
mysql user: root
|
||||||
|
# MYSQL_PASSWORD - specified superuser password which user is power for created database
|
||||||
|
mysql password: 123456
|
||||||
|
|
||||||
|
- name: Install Dependencies
|
||||||
|
run: |
|
||||||
|
composer create-project --prefer-dist laravel/laravel laravel-tests 6.*
|
||||||
|
sh ./tests/bin/install-dep.sh
|
||||||
|
|
||||||
|
- name: Install Admin
|
||||||
|
run: sh ./tests/bin/install-admin.sh
|
||||||
|
|
||||||
|
# - name: Install Xvfb
|
||||||
|
# run: sudo apt-get install xvfb
|
||||||
|
|
||||||
|
- name: Start Server
|
||||||
|
run: sh ./tests/bin/start.sh
|
||||||
|
|
||||||
|
- name: Run test suite
|
||||||
|
run: cd ./laravel-tests && php artisan dusk
|
||||||
|
|
||||||
|
laravel7:
|
||||||
|
runs-on: ubuntu-latest
|
||||||
|
|
||||||
|
steps:
|
||||||
|
- uses: shivammathur/setup-php@b7d1d9c9a92d8d8463ce36d7f60da34d461724f8
|
||||||
|
with:
|
||||||
|
php-version: '7.3'
|
||||||
|
|
||||||
|
- uses: actions/checkout@v2
|
||||||
|
|
||||||
|
- name: Composer Update
|
||||||
|
run: composer self-update --2
|
||||||
|
|
||||||
|
- name: Setup MySQL
|
||||||
|
# You may pin to the exact commit or the version.
|
||||||
|
# uses: mirromutth/mysql-action@de1fba8b3f90ce8db80f663a7043be3cf3231248
|
||||||
|
uses: mirromutth/mysql-action@v1.1
|
||||||
|
with:
|
||||||
|
# Version of MySQL to use
|
||||||
|
mysql version: 5.7
|
||||||
|
# MYSQL_ROOT_PASSWORD - root superuser password
|
||||||
|
mysql root password: 123456
|
||||||
|
# MYSQL_DATABASE - name for the default database that is created
|
||||||
|
mysql database: laravel
|
||||||
|
# MYSQL_USER - create the specified user with superuser power for created database
|
||||||
|
mysql user: root
|
||||||
|
# MYSQL_PASSWORD - specified superuser password which user is power for created database
|
||||||
|
mysql password: 123456
|
||||||
|
|
||||||
|
- name: Install Dependencies
|
||||||
|
run: |
|
||||||
|
composer create-project --prefer-dist laravel/laravel laravel-tests 7.*
|
||||||
|
sh ./tests/bin/install-dep.sh
|
||||||
|
|
||||||
|
- name: Install Admin
|
||||||
|
run: sh ./tests/bin/install-admin.sh
|
||||||
|
|
||||||
|
# - name: Install Xvfb
|
||||||
|
# run: sudo apt-get install xvfb
|
||||||
|
|
||||||
|
- name: Start Server
|
||||||
|
run: sh ./tests/bin/start.sh
|
||||||
|
|
||||||
|
- name: Run test suite
|
||||||
|
run: cd ./laravel-tests && php artisan dusk
|
||||||
|
|
||||||
|
laravel8:
|
||||||
|
runs-on: ubuntu-latest
|
||||||
|
|
||||||
|
steps:
|
||||||
|
- uses: shivammathur/setup-php@b7d1d9c9a92d8d8463ce36d7f60da34d461724f8
|
||||||
|
with:
|
||||||
|
php-version: '8.0'
|
||||||
|
|
||||||
|
- uses: actions/checkout@v2
|
||||||
|
|
||||||
|
- name: Composer Update
|
||||||
|
run: composer self-update --2
|
||||||
|
|
||||||
|
- name: Setup MySQL
|
||||||
|
# You may pin to the exact commit or the version.
|
||||||
|
# uses: mirromutth/mysql-action@de1fba8b3f90ce8db80f663a7043be3cf3231248
|
||||||
|
uses: mirromutth/mysql-action@v1.1
|
||||||
|
with:
|
||||||
|
# Version of MySQL to use
|
||||||
|
mysql version: 5.7
|
||||||
|
# MYSQL_ROOT_PASSWORD - root superuser password
|
||||||
|
mysql root password: 123456
|
||||||
|
# MYSQL_DATABASE - name for the default database that is created
|
||||||
|
mysql database: laravel
|
||||||
|
# MYSQL_USER - create the specified user with superuser power for created database
|
||||||
|
mysql user: root
|
||||||
|
# MYSQL_PASSWORD - specified superuser password which user is power for created database
|
||||||
|
mysql password: 123456
|
||||||
|
|
||||||
|
- name: Install Dependencies
|
||||||
|
run: |
|
||||||
|
composer create-project --prefer-dist laravel/laravel laravel-tests 8.*
|
||||||
|
sh ./tests/bin/install-dep.sh
|
||||||
|
|
||||||
|
- name: Install Admin
|
||||||
|
run: sh ./tests/bin/install-admin.sh
|
||||||
|
|
||||||
|
- name: Install Xvfb
|
||||||
|
run: sudo apt-get install xvfb
|
||||||
|
|
||||||
|
- name: Start Server
|
||||||
|
run: sh ./tests/bin/start.sh
|
||||||
|
|
||||||
|
- name: Run test suite
|
||||||
|
run: cd ./laravel-tests && php artisan dusk
|
||||||
|
|
||||||
|
laravel9:
|
||||||
|
runs-on: ubuntu-latest
|
||||||
|
|
||||||
|
steps:
|
||||||
|
- uses: shivammathur/setup-php@b7d1d9c9a92d8d8463ce36d7f60da34d461724f8
|
||||||
|
with:
|
||||||
|
php-version: '8.0'
|
||||||
|
|
||||||
|
- uses: actions/checkout@v2
|
||||||
|
|
||||||
|
- name: Composer Update
|
||||||
|
run: composer self-update --2
|
||||||
|
|
||||||
|
- name: Setup MySQL
|
||||||
|
# You may pin to the exact commit or the version.
|
||||||
|
# uses: mirromutth/mysql-action@de1fba8b3f90ce8db80f663a7043be3cf3231248
|
||||||
|
uses: mirromutth/mysql-action@v1.1
|
||||||
|
with:
|
||||||
|
# Version of MySQL to use
|
||||||
|
mysql version: 5.7
|
||||||
|
# MYSQL_ROOT_PASSWORD - root superuser password
|
||||||
|
mysql root password: 123456
|
||||||
|
# MYSQL_DATABASE - name for the default database that is created
|
||||||
|
mysql database: laravel
|
||||||
|
# MYSQL_USER - create the specified user with superuser power for created database
|
||||||
|
mysql user: root
|
||||||
|
# MYSQL_PASSWORD - specified superuser password which user is power for created database
|
||||||
|
mysql password: 123456
|
||||||
|
|
||||||
|
- name: Install Dependencies
|
||||||
|
run: |
|
||||||
|
composer create-project --prefer-dist laravel/laravel laravel-tests 9.*
|
||||||
|
sh ./tests/bin/install-dep.sh
|
||||||
|
|
||||||
|
- name: Install Admin
|
||||||
|
run: sh ./tests/bin/install-admin.sh
|
||||||
|
|
||||||
|
- name: Install Xvfb
|
||||||
|
run: sudo apt-get install xvfb
|
||||||
|
|
||||||
|
- name: Start Server
|
||||||
|
run: sh ./tests/bin/start.sh
|
||||||
|
|
||||||
|
- name: Run test suite
|
||||||
|
run: cd ./laravel-tests && php artisan dusk
|
||||||
|
|
@ -0,0 +1,12 @@
|
||||||
|
/vendor/
|
||||||
|
composer.lock
|
||||||
|
.idea
|
||||||
|
.php_cs.cache
|
||||||
|
/node_modules
|
||||||
|
package-lock.json
|
||||||
|
mix-manifest.json
|
||||||
|
/images/
|
||||||
|
pre-dist
|
||||||
|
/laravel-tests
|
||||||
|
*.bak.*
|
||||||
|
.DS_Store
|
||||||
|
|
@ -0,0 +1 @@
|
||||||
|
preset: laravel
|
||||||
|
|
@ -0,0 +1,20 @@
|
||||||
|
The MIT License (MIT)
|
||||||
|
|
||||||
|
Copyright (c) 2019 Jiang qinghua, Jens Segers
|
||||||
|
|
||||||
|
Permission is hereby granted, free of charge, to any person obtaining a copy of
|
||||||
|
this software and associated documentation files (the "Software"), to deal in
|
||||||
|
the Software without restriction, including without limitation the rights to
|
||||||
|
use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of
|
||||||
|
the Software, and to permit persons to whom the Software is furnished to do so,
|
||||||
|
subject to the following conditions:
|
||||||
|
|
||||||
|
The above copyright notice and this permission notice shall be included in all
|
||||||
|
copies or substantial portions of the Software.
|
||||||
|
|
||||||
|
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
|
||||||
|
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS
|
||||||
|
FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR
|
||||||
|
COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER
|
||||||
|
IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN
|
||||||
|
CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
|
||||||
|
|
@ -0,0 +1,193 @@
|
||||||
|
|
||||||
|
<div align="center">
|
||||||
|
<img src="https://cdn.learnku.com/uploads/images/202009/27/38389/WFQxJ7qZ1k.png!large" height="80">
|
||||||
|
</div>
|
||||||
|
<br>
|
||||||
|
|
||||||
|
<p align="center">
|
||||||
|
<a href="https://github.com/jqhph/dcat-admin/actions">
|
||||||
|
<img src="https://github.com/jqhph/dcat-admin/workflows/Laravel%20Dusk/badge.svg" alt="Build Status">
|
||||||
|
</a>
|
||||||
|
<a href="https://styleci.io/repos/182349597">
|
||||||
|
<img src="https://github.styleci.io/repos/182349597/shield" alt="StyleCI">
|
||||||
|
</a>
|
||||||
|
<a href="https://packagist.org/packages/dcat/laravel-admin" ><img src="https://poser.pugx.org/dcat/laravel-admin/v/stable" /></a>
|
||||||
|
<a href="https://packagist.org/packages/dcat/laravel-admin"><img src="https://img.shields.io/packagist/dt/dcat/laravel-admin.svg?color=" /></a>
|
||||||
|
<a><img src="https://img.shields.io/badge/php-7.1+-59a9f8.svg?style=flat" /></a>
|
||||||
|
<a><img src="https://img.shields.io/badge/laravel-5.5+-59a9f8.svg?style=flat" ></a>
|
||||||
|
</p>
|
||||||
|
|
||||||
|
<p align=""><code>Dcat Admin</code>是一个基于<a href="https://www.laravel-admin.org/" target="_blank">laravel-admin</a>二次开发而成的后台系统构建工具,只需很少的代码即可快速构建出一个功能完善的高颜值后台系统。内置丰富的后台常用组件,开箱即用,让开发者告别冗杂的HTML代码,对后端开发者非常友好。</p>
|
||||||
|
|
||||||
|
|
||||||
|
- [官方网站](http://www.dcatadmin.com)
|
||||||
|
- [中文文档](https://learnku.com/docs/dcat-admin)
|
||||||
|
- [English documentions](http://www.dcatadmin.com/docs/en-2.x/quick-start.html)
|
||||||
|
- [Demo / 在线演示](http://103.39.211.179:8080/admin)
|
||||||
|
- [Demo源码](https://github.com/jqhph/dcat-admin-demo)
|
||||||
|
- [Demo源码 (码云)](https://gitee.com/jqhph/dcat-admin-demo)
|
||||||
|
- [扩展](#)
|
||||||
|
|
||||||
|
|
||||||
|

|
||||||
|
|
||||||
|
|
||||||
|
### 功能特性
|
||||||
|
|
||||||
|
- [x] 简洁优雅、灵活可扩展的API
|
||||||
|
- [x] 用户管理
|
||||||
|
- [x] RBAC权限管理,支持无限极权限节点
|
||||||
|
- [x] 菜单管理
|
||||||
|
- [x] 使用pjax构建无刷新页面,支持**按需加载**静态资源,可以无限扩展组件而不影响整体性能
|
||||||
|
- [x] 松耦合的页面构建与数据操作设计,可轻松切换数据源
|
||||||
|
- [x] 自定义页面
|
||||||
|
- [x] 自定义主题配色
|
||||||
|
- [x] 多主题切换功能,内置多种主题色
|
||||||
|
- [x] 可轻松构建无菜单栏的独立页面(如可用于构建弹窗选择器等功能)
|
||||||
|
- [x] 插件功能
|
||||||
|
- [x] 可视化代码生成器,可根据数据表一键生成增删改查页面
|
||||||
|
- [x] 数据表格构建工具,内置丰富的表格常用功能(如组合表头、数据导出、搜索、快捷创建、批量操作等)
|
||||||
|
- [x] 树状表格功能构建工具,支持分页和点击加载
|
||||||
|
- [x] 数据表单构建工具,内置丰富的表单类型,支持表单异步提交
|
||||||
|
- [x] 分步表单构建工具
|
||||||
|
- [x] 弹窗表单构建工具
|
||||||
|
- [x] 数据详情页构建工具
|
||||||
|
- [x] 无限层级树状页面构建工具,支持用拖拽的方式实现数据的层级、排序等操作
|
||||||
|
- [x] 内置丰富的常用页面组件(如图表、数据统计卡片、下拉菜单、Tab卡片、提示工具等)
|
||||||
|
- [x] `Section`功能(类似`Wordpress`的`Filter`和`blade`模板的`section`标签)
|
||||||
|
- [x] 异步文件上传表单,支持分块多线程上传
|
||||||
|
- [x] 多应用
|
||||||
|
- [ ] 插件市场,只需在管理页面轻轻点击鼠标即可完成插件的安装、更新和卸载等操作
|
||||||
|
|
||||||
|
|
||||||
|
### 环境
|
||||||
|
- PHP >= 7.1.0
|
||||||
|
- Laravel 5.5.0 ~ 9.*
|
||||||
|
- Fileinfo PHP Extension
|
||||||
|
|
||||||
|
### 安装
|
||||||
|
|
||||||
|
> 如果安装过程中出现`composer`下载过慢或安装失败的情况,请运行命令`composer config -g repo.packagist composer https://mirrors.aliyun.com/composer/`把`composer`镜像更换为阿里云镜像。
|
||||||
|
|
||||||
|
首先需要安装`laravel`框架,如已安装可以跳过此步骤。如果您是第一次使用`laravel`,请务必先阅读文档 [安装 《Laravel中文文档》](https://learnku.com/docs/laravel/8.x/installation/9354) !
|
||||||
|
```bash
|
||||||
|
composer create-project --prefer-dist laravel/laravel 项目名称 7.*
|
||||||
|
# 或
|
||||||
|
composer create-project --prefer-dist laravel/laravel 项目名称
|
||||||
|
```
|
||||||
|
|
||||||
|
安装完`laravel`之后需要修改`.env`文件,设置数据库连接设置正确
|
||||||
|
|
||||||
|
```dotenv
|
||||||
|
DB_CONNECTION=mysql
|
||||||
|
DB_HOST=127.0.0.1
|
||||||
|
DB_PORT=3306
|
||||||
|
DB_DATABASE=dcat-admin
|
||||||
|
DB_USERNAME=root
|
||||||
|
DB_PASSWORD=
|
||||||
|
```
|
||||||
|
|
||||||
|
安装`dcat-admin`
|
||||||
|
|
||||||
|
|
||||||
|
```
|
||||||
|
cd {项目名称}
|
||||||
|
|
||||||
|
composer require dcat/laravel-admin
|
||||||
|
```
|
||||||
|
|
||||||
|
然后运行下面的命令来发布资源:
|
||||||
|
|
||||||
|
```
|
||||||
|
php artisan admin:publish
|
||||||
|
```
|
||||||
|
|
||||||
|
在该命令会生成配置文件`config/admin.php`,可以在里面修改安装的地址、数据库连接、以及表名,建议都是用默认配置不修改。
|
||||||
|
|
||||||
|
然后运行下面的命令完成安装:
|
||||||
|
|
||||||
|
> 执行这一步命令可能会报以下错误`Specified key was too long ... 767 bytes`,如果出现这个报错,请在`app/Providers/AppServiceProvider.php`文件的`boot`方法中加上代码`\Schema::defaultStringLength(191);`,然后删除掉数据库中的所有数据表,再重新运行一遍`php artisan admin:install`命令即可。
|
||||||
|
|
||||||
|
```
|
||||||
|
php artisan admin:install
|
||||||
|
```
|
||||||
|
|
||||||
|
上述步骤操作完成之后就可以配置`web`服务了,**注意需要把`web`目录指向`public`目录**!如果用的是`nginx`,还需要在配置中加上伪静态配置
|
||||||
|
```dotenv
|
||||||
|
location / {
|
||||||
|
try_files $uri $uri/ /index.php?$query_string;
|
||||||
|
}
|
||||||
|
```
|
||||||
|
|
||||||
|
启动服务后,在浏览器打开 `http://localhost/admin`,使用用户名 `admin` 和密码 `admin`登陆。
|
||||||
|
|
||||||
|
|
||||||
|
<a name="extensions"></a>
|
||||||
|
### 扩展
|
||||||
|
|
||||||
|
| 扩展 | 描述 | dcat-admin 版本 |
|
||||||
|
| ------------------------------------------------ | ---------------------------------------- |---------------------------------------- |
|
||||||
|
| [mosiboom/dcat-iframe-tab](https://github.com/mosiboom/dcat-iframe-tab) | IFRAME TAB标签切换 | 2.x |
|
||||||
|
| [super-eggs/dcat-distpicker](https://github.com/super-eggs/dcat-distpicker) | 省市区联动 | 2.x |
|
||||||
|
| [ueditor](https://github.com/jqhph/dcat-admin-ueditor) | 百度在线编辑器 | 1.x |
|
||||||
|
| [grid-sortable](https://github.com/jqhph/dcat-admin-grid-sortable) | 表格拖曳排序工具 | 1.x |
|
||||||
|
|
||||||
|
|
||||||
|
### 鸣谢
|
||||||
|
`Dcat Admin` 基于以下组件:
|
||||||
|
|
||||||
|
+ [Laravel](https://laravel.com/)
|
||||||
|
+ [Laravel Admin](https://www.laravel-admin.org/)
|
||||||
|
+ [AdminLTE3](https://github.com/ColorlibHQ/AdminLTE)
|
||||||
|
+ [bootstrap4](https://getbootstrap.com/)
|
||||||
|
+ [jQuery3](https://jquery.com/)
|
||||||
|
+ [Eonasdan Datetimepicker](https://github.com/Eonasdan/bootstrap-datetimepicker/)
|
||||||
|
+ [font-awesome](http://fontawesome.io)
|
||||||
|
+ [jquery-form](https://github.com/jquery-form/form)
|
||||||
|
+ [moment](http://momentjs.com/)
|
||||||
|
+ [webuploader](http://fex.baidu.com/webuploader/)
|
||||||
|
+ [jquery-pjax](https://github.com/defunkt/jquery-pjax)
|
||||||
|
+ [Nestable](http://dbushell.github.io/Nestable/)
|
||||||
|
+ [toastr](http://codeseven.github.io/toastr/)
|
||||||
|
+ [editor-md](https://github.com/pandao/editor.md)
|
||||||
|
+ [fontawesome-iconpicker](https://github.com/itsjavi/fontawesome-iconpicker)
|
||||||
|
+ [layer弹出层](http://layer.layui.com/)
|
||||||
|
+ [char.js](https://www.chartjs.org)
|
||||||
|
+ [nprogress](https://ricostacruz.com/nprogress/)
|
||||||
|
+ [bootstrap-validator](https://github.com/1000hz/bootstrap-validator)
|
||||||
|
+ [Google map](https://www.google.com/maps)
|
||||||
|
+ [Tencent map](http://lbs.qq.com/)
|
||||||
|
|
||||||
|
### Contributors
|
||||||
|
|
||||||
|
#### Code Contributors
|
||||||
|
|
||||||
|
This project exists thanks to all the people who contribute. [[Contribute](CONTRIBUTING.md)].
|
||||||
|
<a href="https://github.com/jqhph/dcat-admin/graphs/contributors"><img src="https://opencollective.com/dcat-admin/contributors.svg?width=890&button=false" /></a>
|
||||||
|
|
||||||
|
### Financial Contributors
|
||||||
|
|
||||||
|
Become a financial contributor and help us sustain our community. [[Contribute](https://opencollective.com/dcat-admin/contribute)]
|
||||||
|
|
||||||
|
#### Individuals
|
||||||
|
|
||||||
|
<a href="https://opencollective.com/dcat-admin"><img src="https://opencollective.com/dcat-admin/individuals.svg?width=890"></a>
|
||||||
|
|
||||||
|
#### Organizations
|
||||||
|
|
||||||
|
Support this project with your organization. Your logo will show up here with a link to your website. [[Contribute](https://opencollective.com/dcat-admin/contribute)]
|
||||||
|
|
||||||
|
<a href="https://opencollective.com/dcat-admin/organization/0/website"><img src="https://opencollective.com/dcat-admin/organization/0/avatar.svg"></a>
|
||||||
|
<a href="https://opencollective.com/dcat-admin/organization/1/website"><img src="https://opencollective.com/dcat-admin/organization/1/avatar.svg"></a>
|
||||||
|
<a href="https://opencollective.com/dcat-admin/organization/2/website"><img src="https://opencollective.com/dcat-admin/organization/2/avatar.svg"></a>
|
||||||
|
<a href="https://opencollective.com/dcat-admin/organization/3/website"><img src="https://opencollective.com/dcat-admin/organization/3/avatar.svg"></a>
|
||||||
|
<a href="https://opencollective.com/dcat-admin/organization/4/website"><img src="https://opencollective.com/dcat-admin/organization/4/avatar.svg"></a>
|
||||||
|
<a href="https://opencollective.com/dcat-admin/organization/5/website"><img src="https://opencollective.com/dcat-admin/organization/5/avatar.svg"></a>
|
||||||
|
<a href="https://opencollective.com/dcat-admin/organization/6/website"><img src="https://opencollective.com/dcat-admin/organization/6/avatar.svg"></a>
|
||||||
|
<a href="https://opencollective.com/dcat-admin/organization/7/website"><img src="https://opencollective.com/dcat-admin/organization/7/avatar.svg"></a>
|
||||||
|
<a href="https://opencollective.com/dcat-admin/organization/8/website"><img src="https://opencollective.com/dcat-admin/organization/8/avatar.svg"></a>
|
||||||
|
<a href="https://opencollective.com/dcat-admin/organization/9/website"><img src="https://opencollective.com/dcat-admin/organization/9/avatar.svg"></a>
|
||||||
|
|
||||||
|
### License
|
||||||
|
------------
|
||||||
|
`dcat-admin` is licensed under [The MIT License (MIT)](LICENSE).
|
||||||
|
|
@ -0,0 +1,51 @@
|
||||||
|
{
|
||||||
|
"name": "dcat/laravel-admin",
|
||||||
|
"description": "dcat admin",
|
||||||
|
"type": "library",
|
||||||
|
"keywords": ["dcat", "laravel", "admin", "grid", "form", "laravel admin"],
|
||||||
|
"homepage": "https://github.com/jqhph/dcat-admin",
|
||||||
|
"license": "MIT",
|
||||||
|
"authors": [
|
||||||
|
{
|
||||||
|
"name": "jqh",
|
||||||
|
"email": "841324345@qq.com"
|
||||||
|
}
|
||||||
|
],
|
||||||
|
"require": {
|
||||||
|
"php": ">=7.1.0",
|
||||||
|
"laravel/framework": "~5.5|~6.0|~7.0|~8.0|~9.0",
|
||||||
|
"spatie/eloquent-sortable": "3.*|4.*",
|
||||||
|
"doctrine/dbal": "^2.6|^3.0"
|
||||||
|
},
|
||||||
|
"require-dev": {
|
||||||
|
"laravel/dusk": "~5.9|~6",
|
||||||
|
"phpstan/phpstan": "^0.12.0",
|
||||||
|
"phpunit/phpunit": "^7.5|~9",
|
||||||
|
"fzaninotto/faker": "^1.4",
|
||||||
|
"mockery/mockery": "^1.0"
|
||||||
|
},
|
||||||
|
"autoload": {
|
||||||
|
"psr-4": {
|
||||||
|
"Dcat\\Admin\\": "src/"
|
||||||
|
},
|
||||||
|
"files": [
|
||||||
|
"src/Support/helpers.php"
|
||||||
|
]
|
||||||
|
},
|
||||||
|
"autoload-dev": {
|
||||||
|
"psr-4": {
|
||||||
|
"Dcat\\Admin\\Tests\\": "tests/"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"scripts": {
|
||||||
|
"phpstan": "vendor/bin/phpstan analyse",
|
||||||
|
"test": "vendor/bin/phpunit"
|
||||||
|
},
|
||||||
|
"extra": {
|
||||||
|
"laravel": {
|
||||||
|
"providers": [
|
||||||
|
"Dcat\\Admin\\AdminServiceProvider"
|
||||||
|
]
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
@ -0,0 +1,368 @@
|
||||||
|
<?php
|
||||||
|
|
||||||
|
return [
|
||||||
|
|
||||||
|
/*
|
||||||
|
|--------------------------------------------------------------------------
|
||||||
|
| dcat-admin name
|
||||||
|
|--------------------------------------------------------------------------
|
||||||
|
|
|
||||||
|
| This value is the name of dcat-admin, This setting is displayed on the
|
||||||
|
| login page.
|
||||||
|
|
|
||||||
|
*/
|
||||||
|
'name' => 'Dcat Admin',
|
||||||
|
|
||||||
|
/*
|
||||||
|
|--------------------------------------------------------------------------
|
||||||
|
| dcat-admin logo
|
||||||
|
|--------------------------------------------------------------------------
|
||||||
|
|
|
||||||
|
| The logo of all admin pages. You can also set it as an image by using a
|
||||||
|
| `img` tag, eg '<img src="http://logo-url" alt="Admin logo">'.
|
||||||
|
|
|
||||||
|
*/
|
||||||
|
'logo' => '<img src="/vendor/dcat-admin/images/logo.png" width="35"> Dcat Admin',
|
||||||
|
|
||||||
|
/*
|
||||||
|
|--------------------------------------------------------------------------
|
||||||
|
| dcat-admin mini logo
|
||||||
|
|--------------------------------------------------------------------------
|
||||||
|
|
|
||||||
|
| The logo of all admin pages when the sidebar menu is collapsed. You can
|
||||||
|
| also set it as an image by using a `img` tag, eg
|
||||||
|
| '<img src="http://logo-url" alt="Admin logo">'.
|
||||||
|
|
|
||||||
|
*/
|
||||||
|
'logo-mini' => '<img src="/vendor/dcat-admin/images/logo.png">',
|
||||||
|
|
||||||
|
/*
|
||||||
|
|--------------------------------------------------------------------------
|
||||||
|
| dcat-admin favicon
|
||||||
|
|--------------------------------------------------------------------------
|
||||||
|
|
|
||||||
|
*/
|
||||||
|
'favicon' => null,
|
||||||
|
|
||||||
|
/*
|
||||||
|
|--------------------------------------------------------------------------
|
||||||
|
| User default avatar
|
||||||
|
|--------------------------------------------------------------------------
|
||||||
|
|
|
||||||
|
| Set a default avatar for newly created users.
|
||||||
|
|
|
||||||
|
*/
|
||||||
|
'default_avatar' => '@admin/images/default-avatar.jpg',
|
||||||
|
|
||||||
|
/*
|
||||||
|
|--------------------------------------------------------------------------
|
||||||
|
| dcat-admin route settings
|
||||||
|
|--------------------------------------------------------------------------
|
||||||
|
|
|
||||||
|
| The routing configuration of the admin page, including the path prefix,
|
||||||
|
| the controller namespace, and the default middleware. If you want to
|
||||||
|
| access through the root path, just set the prefix to empty string.
|
||||||
|
|
|
||||||
|
*/
|
||||||
|
'route' => [
|
||||||
|
'domain' => env('ADMIN_ROUTE_DOMAIN'),
|
||||||
|
|
||||||
|
'prefix' => env('ADMIN_ROUTE_PREFIX', 'admin'),
|
||||||
|
|
||||||
|
'namespace' => 'App\\Admin\\Controllers',
|
||||||
|
|
||||||
|
'middleware' => ['web', 'admin'],
|
||||||
|
|
||||||
|
'enable_session_middleware' => false,
|
||||||
|
],
|
||||||
|
|
||||||
|
/*
|
||||||
|
|--------------------------------------------------------------------------
|
||||||
|
| dcat-admin install directory
|
||||||
|
|--------------------------------------------------------------------------
|
||||||
|
|
|
||||||
|
| The installation directory of the controller and routing configuration
|
||||||
|
| files of the administration page. The default is `app/Admin`, which must
|
||||||
|
| be set before running `artisan admin::install` to take effect.
|
||||||
|
|
|
||||||
|
*/
|
||||||
|
'directory' => app_path('Admin'),
|
||||||
|
|
||||||
|
/*
|
||||||
|
|--------------------------------------------------------------------------
|
||||||
|
| dcat-admin html title
|
||||||
|
|--------------------------------------------------------------------------
|
||||||
|
|
|
||||||
|
| Html title for all pages.
|
||||||
|
|
|
||||||
|
*/
|
||||||
|
'title' => 'Admin',
|
||||||
|
|
||||||
|
/*
|
||||||
|
|--------------------------------------------------------------------------
|
||||||
|
| Assets hostname
|
||||||
|
|--------------------------------------------------------------------------
|
||||||
|
|
|
||||||
|
*/
|
||||||
|
'assets_server' => env('ADMIN_ASSETS_SERVER'),
|
||||||
|
|
||||||
|
/*
|
||||||
|
|--------------------------------------------------------------------------
|
||||||
|
| Access via `https`
|
||||||
|
|--------------------------------------------------------------------------
|
||||||
|
|
|
||||||
|
| If your page is going to be accessed via https, set it to `true`.
|
||||||
|
|
|
||||||
|
*/
|
||||||
|
'https' => env('ADMIN_HTTPS', false),
|
||||||
|
|
||||||
|
/*
|
||||||
|
|--------------------------------------------------------------------------
|
||||||
|
| dcat-admin auth setting
|
||||||
|
|--------------------------------------------------------------------------
|
||||||
|
|
|
||||||
|
| Authentication settings for all admin pages. Include an authentication
|
||||||
|
| guard and a user provider setting of authentication driver.
|
||||||
|
|
|
||||||
|
| You can specify a controller for `login` `logout` and other auth routes.
|
||||||
|
|
|
||||||
|
*/
|
||||||
|
'auth' => [
|
||||||
|
'enable' => true,
|
||||||
|
|
||||||
|
'controller' => App\Admin\Controllers\AuthController::class,
|
||||||
|
|
||||||
|
'guard' => 'admin',
|
||||||
|
|
||||||
|
'guards' => [
|
||||||
|
'admin' => [
|
||||||
|
'driver' => 'session',
|
||||||
|
'provider' => 'admin',
|
||||||
|
],
|
||||||
|
],
|
||||||
|
|
||||||
|
'providers' => [
|
||||||
|
'admin' => [
|
||||||
|
'driver' => 'eloquent',
|
||||||
|
'model' => Dcat\Admin\Models\Administrator::class,
|
||||||
|
],
|
||||||
|
],
|
||||||
|
|
||||||
|
// Add "remember me" to login form
|
||||||
|
'remember' => true,
|
||||||
|
|
||||||
|
// All method to path like: auth/users/*/edit
|
||||||
|
// or specific method to path like: get:auth/users.
|
||||||
|
'except' => [
|
||||||
|
'auth/login',
|
||||||
|
'auth/logout',
|
||||||
|
],
|
||||||
|
|
||||||
|
'enable_session_middleware' => false,
|
||||||
|
],
|
||||||
|
|
||||||
|
/*
|
||||||
|
|--------------------------------------------------------------------------
|
||||||
|
| The global Grid setting
|
||||||
|
|--------------------------------------------------------------------------
|
||||||
|
*/
|
||||||
|
'grid' => [
|
||||||
|
|
||||||
|
// The global Grid action display class.
|
||||||
|
'grid_action_class' => Dcat\Admin\Grid\Displayers\DropdownActions::class,
|
||||||
|
|
||||||
|
// The global Grid batch action display class.
|
||||||
|
'batch_action_class' => Dcat\Admin\Grid\Tools\BatchActions::class,
|
||||||
|
|
||||||
|
// The global Grid pagination display class.
|
||||||
|
'paginator_class' => Dcat\Admin\Grid\Tools\Paginator::class,
|
||||||
|
|
||||||
|
'actions' => [
|
||||||
|
'view' => Dcat\Admin\Grid\Actions\Show::class,
|
||||||
|
'edit' => Dcat\Admin\Grid\Actions\Edit::class,
|
||||||
|
'quick_edit' => Dcat\Admin\Grid\Actions\QuickEdit::class,
|
||||||
|
'delete' => Dcat\Admin\Grid\Actions\Delete::class,
|
||||||
|
'batch_delete' => Dcat\Admin\Grid\Tools\BatchDelete::class,
|
||||||
|
],
|
||||||
|
|
||||||
|
// The global Grid column selector setting.
|
||||||
|
'column_selector' => [
|
||||||
|
'store' => Dcat\Admin\Grid\ColumnSelector\SessionStore::class,
|
||||||
|
'store_params' => [
|
||||||
|
'driver' => 'file',
|
||||||
|
],
|
||||||
|
],
|
||||||
|
],
|
||||||
|
|
||||||
|
/*
|
||||||
|
|--------------------------------------------------------------------------
|
||||||
|
| dcat-admin helpers setting.
|
||||||
|
|--------------------------------------------------------------------------
|
||||||
|
*/
|
||||||
|
'helpers' => [
|
||||||
|
'enable' => true,
|
||||||
|
],
|
||||||
|
|
||||||
|
/*
|
||||||
|
|--------------------------------------------------------------------------
|
||||||
|
| dcat-admin permission setting
|
||||||
|
|--------------------------------------------------------------------------
|
||||||
|
|
|
||||||
|
| Permission settings for all admin pages.
|
||||||
|
|
|
||||||
|
*/
|
||||||
|
'permission' => [
|
||||||
|
// Whether enable permission.
|
||||||
|
'enable' => true,
|
||||||
|
|
||||||
|
// All method to path like: auth/users/*/edit
|
||||||
|
// or specific method to path like: get:auth/users.
|
||||||
|
'except' => [
|
||||||
|
'/',
|
||||||
|
'auth/login',
|
||||||
|
'auth/logout',
|
||||||
|
'auth/setting',
|
||||||
|
],
|
||||||
|
],
|
||||||
|
|
||||||
|
/*
|
||||||
|
|--------------------------------------------------------------------------
|
||||||
|
| dcat-admin menu setting
|
||||||
|
|--------------------------------------------------------------------------
|
||||||
|
|
|
||||||
|
*/
|
||||||
|
'menu' => [
|
||||||
|
'cache' => [
|
||||||
|
// enable cache or not
|
||||||
|
'enable' => false,
|
||||||
|
'store' => 'file',
|
||||||
|
],
|
||||||
|
|
||||||
|
// Whether enable menu bind to a permission.
|
||||||
|
'bind_permission' => true,
|
||||||
|
|
||||||
|
// Whether enable role bind to menu.
|
||||||
|
'role_bind_menu' => true,
|
||||||
|
|
||||||
|
// Whether enable permission bind to menu.
|
||||||
|
'permission_bind_menu' => true,
|
||||||
|
|
||||||
|
'default_icon' => 'feather icon-circle',
|
||||||
|
],
|
||||||
|
|
||||||
|
/*
|
||||||
|
|--------------------------------------------------------------------------
|
||||||
|
| dcat-admin upload setting
|
||||||
|
|--------------------------------------------------------------------------
|
||||||
|
|
|
||||||
|
| File system configuration for form upload files and images, including
|
||||||
|
| disk and upload path.
|
||||||
|
|
|
||||||
|
*/
|
||||||
|
'upload' => [
|
||||||
|
|
||||||
|
// Disk in `config/filesystem.php`.
|
||||||
|
'disk' => 'public',
|
||||||
|
|
||||||
|
// Image and file upload path under the disk above.
|
||||||
|
'directory' => [
|
||||||
|
'image' => 'images',
|
||||||
|
'file' => 'files',
|
||||||
|
],
|
||||||
|
|
||||||
|
],
|
||||||
|
|
||||||
|
/*
|
||||||
|
|--------------------------------------------------------------------------
|
||||||
|
| dcat-admin database settings
|
||||||
|
|--------------------------------------------------------------------------
|
||||||
|
|
|
||||||
|
| Here are database settings for dcat-admin builtin model & tables.
|
||||||
|
|
|
||||||
|
*/
|
||||||
|
'database' => [
|
||||||
|
|
||||||
|
// Database connection for following tables.
|
||||||
|
'connection' => '',
|
||||||
|
|
||||||
|
// User tables and model.
|
||||||
|
'users_table' => 'admin_users',
|
||||||
|
'users_model' => Dcat\Admin\Models\Administrator::class,
|
||||||
|
|
||||||
|
// Role table and model.
|
||||||
|
'roles_table' => 'admin_roles',
|
||||||
|
'roles_model' => Dcat\Admin\Models\Role::class,
|
||||||
|
|
||||||
|
// Permission table and model.
|
||||||
|
'permissions_table' => 'admin_permissions',
|
||||||
|
'permissions_model' => Dcat\Admin\Models\Permission::class,
|
||||||
|
|
||||||
|
// Menu table and model.
|
||||||
|
'menu_table' => 'admin_menu',
|
||||||
|
'menu_model' => Dcat\Admin\Models\Menu::class,
|
||||||
|
|
||||||
|
// Pivot table for table above.
|
||||||
|
'role_users_table' => 'admin_role_users',
|
||||||
|
'role_permissions_table' => 'admin_role_permissions',
|
||||||
|
'role_menu_table' => 'admin_role_menu',
|
||||||
|
'permission_menu_table' => 'admin_permission_menu',
|
||||||
|
'settings_table' => 'admin_settings',
|
||||||
|
'extensions_table' => 'admin_extensions',
|
||||||
|
'extension_histories_table' => 'admin_extension_histories',
|
||||||
|
],
|
||||||
|
|
||||||
|
/*
|
||||||
|
|--------------------------------------------------------------------------
|
||||||
|
| Application layout
|
||||||
|
|--------------------------------------------------------------------------
|
||||||
|
|
|
||||||
|
| This value is the layout of admin pages.
|
||||||
|
*/
|
||||||
|
'layout' => [
|
||||||
|
// default, blue, blue-light, green
|
||||||
|
'color' => 'default',
|
||||||
|
|
||||||
|
// sidebar-separate
|
||||||
|
'body_class' => [],
|
||||||
|
|
||||||
|
'horizontal_menu' => false,
|
||||||
|
|
||||||
|
'sidebar_collapsed' => false,
|
||||||
|
|
||||||
|
// light, primary, dark
|
||||||
|
'sidebar_style' => 'light',
|
||||||
|
|
||||||
|
'dark_mode_switch' => false,
|
||||||
|
|
||||||
|
// bg-primary, bg-info, bg-warning, bg-success, bg-danger, bg-dark
|
||||||
|
'navbar_color' => '',
|
||||||
|
],
|
||||||
|
|
||||||
|
/*
|
||||||
|
|--------------------------------------------------------------------------
|
||||||
|
| The exception handler class
|
||||||
|
|--------------------------------------------------------------------------
|
||||||
|
|
|
||||||
|
*/
|
||||||
|
'exception_handler' => Dcat\Admin\Exception\Handler::class,
|
||||||
|
|
||||||
|
/*
|
||||||
|
|--------------------------------------------------------------------------
|
||||||
|
| Enable default breadcrumb
|
||||||
|
|--------------------------------------------------------------------------
|
||||||
|
|
|
||||||
|
| Whether enable default breadcrumb for every page content.
|
||||||
|
*/
|
||||||
|
'enable_default_breadcrumb' => true,
|
||||||
|
|
||||||
|
/*
|
||||||
|
|--------------------------------------------------------------------------
|
||||||
|
| Extension
|
||||||
|
|--------------------------------------------------------------------------
|
||||||
|
*/
|
||||||
|
'extension' => [
|
||||||
|
// When you use command `php artisan admin:ext-make` to generate extensions,
|
||||||
|
// the extension files will be generated in this directory.
|
||||||
|
'dir' => base_path('dcat-admin-extensions'),
|
||||||
|
],
|
||||||
|
];
|
||||||
|
|
@ -0,0 +1,110 @@
|
||||||
|
<?php
|
||||||
|
|
||||||
|
use Illuminate\Database\Migrations\Migration;
|
||||||
|
use Illuminate\Database\Schema\Blueprint;
|
||||||
|
use Illuminate\Support\Facades\Schema;
|
||||||
|
|
||||||
|
class CreateAdminTables extends Migration
|
||||||
|
{
|
||||||
|
public function getConnection()
|
||||||
|
{
|
||||||
|
return $this->config('database.connection') ?: config('database.default');
|
||||||
|
}
|
||||||
|
|
||||||
|
public function config($key)
|
||||||
|
{
|
||||||
|
return config('admin.'.$key);
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Run the migrations.
|
||||||
|
*
|
||||||
|
* @return void
|
||||||
|
*/
|
||||||
|
public function up()
|
||||||
|
{
|
||||||
|
Schema::create($this->config('database.users_table'), function (Blueprint $table) {
|
||||||
|
$table->bigIncrements('id');
|
||||||
|
$table->string('username', 120)->unique();
|
||||||
|
$table->string('password', 80);
|
||||||
|
$table->string('name');
|
||||||
|
$table->string('avatar')->nullable();
|
||||||
|
$table->string('remember_token', 100)->nullable();
|
||||||
|
$table->timestamps();
|
||||||
|
});
|
||||||
|
|
||||||
|
Schema::create($this->config('database.roles_table'), function (Blueprint $table) {
|
||||||
|
$table->bigIncrements('id');
|
||||||
|
$table->string('name', 50);
|
||||||
|
$table->string('slug', 50)->unique();
|
||||||
|
$table->timestamps();
|
||||||
|
});
|
||||||
|
|
||||||
|
Schema::create($this->config('database.permissions_table'), function (Blueprint $table) {
|
||||||
|
$table->bigIncrements('id');
|
||||||
|
$table->string('name', 50);
|
||||||
|
$table->string('slug', 50)->unique();
|
||||||
|
$table->string('http_method')->nullable();
|
||||||
|
$table->text('http_path')->nullable();
|
||||||
|
$table->integer('order')->default(0);
|
||||||
|
$table->bigInteger('parent_id')->default(0);
|
||||||
|
$table->timestamps();
|
||||||
|
});
|
||||||
|
|
||||||
|
Schema::create($this->config('database.menu_table'), function (Blueprint $table) {
|
||||||
|
$table->bigIncrements('id');
|
||||||
|
$table->bigInteger('parent_id')->default(0);
|
||||||
|
$table->integer('order')->default(0);
|
||||||
|
$table->string('title', 50);
|
||||||
|
$table->string('icon', 50)->nullable();
|
||||||
|
$table->string('uri', 50)->nullable();
|
||||||
|
|
||||||
|
$table->timestamps();
|
||||||
|
});
|
||||||
|
|
||||||
|
Schema::create($this->config('database.role_users_table'), function (Blueprint $table) {
|
||||||
|
$table->bigInteger('role_id');
|
||||||
|
$table->bigInteger('user_id');
|
||||||
|
$table->unique(['role_id', 'user_id']);
|
||||||
|
$table->timestamps();
|
||||||
|
});
|
||||||
|
|
||||||
|
Schema::create($this->config('database.role_permissions_table'), function (Blueprint $table) {
|
||||||
|
$table->bigInteger('role_id');
|
||||||
|
$table->bigInteger('permission_id');
|
||||||
|
$table->unique(['role_id', 'permission_id']);
|
||||||
|
$table->timestamps();
|
||||||
|
});
|
||||||
|
|
||||||
|
Schema::create($this->config('database.role_menu_table'), function (Blueprint $table) {
|
||||||
|
$table->bigInteger('role_id');
|
||||||
|
$table->bigInteger('menu_id');
|
||||||
|
$table->unique(['role_id', 'menu_id']);
|
||||||
|
$table->timestamps();
|
||||||
|
});
|
||||||
|
|
||||||
|
Schema::create($this->config('database.permission_menu_table'), function (Blueprint $table) {
|
||||||
|
$table->bigInteger('permission_id');
|
||||||
|
$table->bigInteger('menu_id');
|
||||||
|
$table->unique(['permission_id', 'menu_id']);
|
||||||
|
$table->timestamps();
|
||||||
|
});
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Reverse the migrations.
|
||||||
|
*
|
||||||
|
* @return void
|
||||||
|
*/
|
||||||
|
public function down()
|
||||||
|
{
|
||||||
|
Schema::dropIfExists($this->config('database.users_table'));
|
||||||
|
Schema::dropIfExists($this->config('database.roles_table'));
|
||||||
|
Schema::dropIfExists($this->config('database.permissions_table'));
|
||||||
|
Schema::dropIfExists($this->config('database.menu_table'));
|
||||||
|
Schema::dropIfExists($this->config('database.role_users_table'));
|
||||||
|
Schema::dropIfExists($this->config('database.role_permissions_table'));
|
||||||
|
Schema::dropIfExists($this->config('database.role_menu_table'));
|
||||||
|
Schema::dropIfExists($this->config('database.permission_menu_table'));
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
@ -0,0 +1,42 @@
|
||||||
|
<?php
|
||||||
|
|
||||||
|
use Illuminate\Database\Migrations\Migration;
|
||||||
|
use Illuminate\Database\Schema\Blueprint;
|
||||||
|
use Illuminate\Support\Facades\Schema;
|
||||||
|
|
||||||
|
class CreateAdminSettingsTable extends Migration
|
||||||
|
{
|
||||||
|
public function getConnection()
|
||||||
|
{
|
||||||
|
return $this->config('database.connection') ?: config('database.default');
|
||||||
|
}
|
||||||
|
|
||||||
|
public function config($key)
|
||||||
|
{
|
||||||
|
return config('admin.'.$key);
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Run the migrations.
|
||||||
|
*
|
||||||
|
* @return void
|
||||||
|
*/
|
||||||
|
public function up()
|
||||||
|
{
|
||||||
|
Schema::create($this->config('database.settings_table') ?: 'admin_settings', function (Blueprint $table) {
|
||||||
|
$table->string('slug', 100)->primary();
|
||||||
|
$table->longText('value');
|
||||||
|
$table->timestamps();
|
||||||
|
});
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Reverse the migrations.
|
||||||
|
*
|
||||||
|
* @return void
|
||||||
|
*/
|
||||||
|
public function down()
|
||||||
|
{
|
||||||
|
Schema::dropIfExists($this->config('database.settings_table') ?: 'admin_settings');
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
@ -0,0 +1,61 @@
|
||||||
|
<?php
|
||||||
|
|
||||||
|
use Illuminate\Database\Migrations\Migration;
|
||||||
|
use Illuminate\Database\Schema\Blueprint;
|
||||||
|
use Illuminate\Support\Facades\Schema;
|
||||||
|
|
||||||
|
class CreateAdminExtensionsTable extends Migration
|
||||||
|
{
|
||||||
|
public function getConnection()
|
||||||
|
{
|
||||||
|
return $this->config('database.connection') ?: config('database.default');
|
||||||
|
}
|
||||||
|
|
||||||
|
public function config($key)
|
||||||
|
{
|
||||||
|
return config('admin.'.$key);
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Run the migrations.
|
||||||
|
*
|
||||||
|
* @return void
|
||||||
|
*/
|
||||||
|
public function up()
|
||||||
|
{
|
||||||
|
Schema::create($this->config('database.extensions_table') ?: 'admin_extensions', function (Blueprint $table) {
|
||||||
|
$table->increments('id')->unsigned();
|
||||||
|
$table->string('name', 100)->unique();
|
||||||
|
$table->string('version', 20)->default('');
|
||||||
|
$table->tinyInteger('is_enabled')->default(0);
|
||||||
|
$table->text('options')->nullable();
|
||||||
|
$table->timestamps();
|
||||||
|
|
||||||
|
$table->engine = 'InnoDB';
|
||||||
|
});
|
||||||
|
|
||||||
|
Schema::create($this->config('database.extension_histories_table') ?: 'admin_extension_histories', function (Blueprint $table) {
|
||||||
|
$table->bigIncrements('id')->unsigned();
|
||||||
|
$table->string('name', 100);
|
||||||
|
$table->tinyInteger('type')->default(1);
|
||||||
|
$table->string('version', 20)->default(0);
|
||||||
|
$table->text('detail')->nullable();
|
||||||
|
|
||||||
|
$table->index('name');
|
||||||
|
$table->timestamps();
|
||||||
|
|
||||||
|
$table->engine = 'InnoDB';
|
||||||
|
});
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Reverse the migrations.
|
||||||
|
*
|
||||||
|
* @return void
|
||||||
|
*/
|
||||||
|
public function down()
|
||||||
|
{
|
||||||
|
Schema::dropIfExists($this->config('database.extensions_table') ?: 'admin_extensions');
|
||||||
|
Schema::dropIfExists($this->config('database.extension_histories_table') ?: 'admin_extension_histories');
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
@ -0,0 +1,44 @@
|
||||||
|
<?php
|
||||||
|
|
||||||
|
use Illuminate\Database\Migrations\Migration;
|
||||||
|
use Illuminate\Database\Schema\Blueprint;
|
||||||
|
use Illuminate\Support\Facades\Schema;
|
||||||
|
|
||||||
|
class UpdateAdminMenuTable extends Migration
|
||||||
|
{
|
||||||
|
public function getConnection()
|
||||||
|
{
|
||||||
|
return $this->config('database.connection') ?: config('database.default');
|
||||||
|
}
|
||||||
|
|
||||||
|
public function config($key)
|
||||||
|
{
|
||||||
|
return config('admin.'.$key);
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Run the migrations.
|
||||||
|
*
|
||||||
|
* @return void
|
||||||
|
*/
|
||||||
|
public function up()
|
||||||
|
{
|
||||||
|
Schema::table($this->config('database.menu_table'), function (Blueprint $table) {
|
||||||
|
$table->tinyInteger('show')->default(1)->after('uri');
|
||||||
|
$table->string('extension', 50)->default('')->after('uri');
|
||||||
|
});
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Reverse the migrations.
|
||||||
|
*
|
||||||
|
* @return void
|
||||||
|
*/
|
||||||
|
public function down()
|
||||||
|
{
|
||||||
|
Schema::table($this->config('database.menu_table'), function (Blueprint $table) {
|
||||||
|
$table->dropColumn('show');
|
||||||
|
$table->dropColumn('extension');
|
||||||
|
});
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
@ -0,0 +1,8 @@
|
||||||
|
- Laravel Version: #.#.#
|
||||||
|
- PHP Version: #.#.#
|
||||||
|
- Dcat Admin Version: #.#.#
|
||||||
|
|
||||||
|
### Description:
|
||||||
|
|
||||||
|
|
||||||
|
### Steps To Reproduce:
|
||||||
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
|
|
@ -0,0 +1,23 @@
|
||||||
|
{
|
||||||
|
"private": true,
|
||||||
|
"scripts": {
|
||||||
|
"dev": "npm run development",
|
||||||
|
"development": "cross-env NODE_ENV=development node_modules/webpack/bin/webpack.js --progress --hide-modules --config=node_modules/laravel-mix/setup/webpack.config.js",
|
||||||
|
"watch": "npm run development -- --watch",
|
||||||
|
"watch-poll": "npm run watch -- --watch-poll",
|
||||||
|
"hot": "cross-env NODE_ENV=development node_modules/webpack-dev-server/bin/webpack-dev-server.js --inline --hot --config=node_modules/laravel-mix/setup/webpack.config.js",
|
||||||
|
"prod": "npm run production",
|
||||||
|
"production": "cross-env NODE_ENV=production node_modules/webpack/bin/webpack.js --no-progress --hide-modules --config=node_modules/laravel-mix/setup/webpack.config.js"
|
||||||
|
},
|
||||||
|
"devDependencies": {
|
||||||
|
"cross-env": "^5.2.1",
|
||||||
|
"laravel-mix": "^4.1.4",
|
||||||
|
"lodash": "^4.17.15",
|
||||||
|
"resolve-url-loader": "^2.3.1",
|
||||||
|
"rtlcss": "^2.4.0",
|
||||||
|
"sass": "^1.22.12",
|
||||||
|
"sass-loader": "^7.3.1",
|
||||||
|
"vue-template-compiler": "^2.6.12",
|
||||||
|
"webpack-cli": "^3.3.5"
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
@ -0,0 +1,26 @@
|
||||||
|
<?xml version="1.0" encoding="UTF-8"?>
|
||||||
|
<phpunit backupGlobals="false"
|
||||||
|
backupStaticAttributes="false"
|
||||||
|
bootstrap="vendor/autoload.php"
|
||||||
|
colors="true"
|
||||||
|
convertErrorsToExceptions="true"
|
||||||
|
convertNoticesToExceptions="true"
|
||||||
|
convertWarningsToExceptions="true"
|
||||||
|
processIsolation="false"
|
||||||
|
stopOnFailure="false">
|
||||||
|
<testsuites>
|
||||||
|
<testsuite name="Browser Test Suite">
|
||||||
|
<directory suffix="Test.php">./tests/Browser</directory>
|
||||||
|
</testsuite>
|
||||||
|
|
||||||
|
<testsuite name="Feature">
|
||||||
|
<directory suffix="Test.php">./tests/Feature</directory>
|
||||||
|
</testsuite>
|
||||||
|
|
||||||
|
</testsuites>
|
||||||
|
<filter>
|
||||||
|
<whitelist processUncoveredFilesFromWhitelist="true">
|
||||||
|
<directory suffix=".php">./app</directory>
|
||||||
|
</whitelist>
|
||||||
|
</filter>
|
||||||
|
</phpunit>
|
||||||
|
|
@ -0,0 +1,44 @@
|
||||||
|
{
|
||||||
|
"esnext": true,
|
||||||
|
"verbose": true,
|
||||||
|
"disallowEmptyBlocks": true,
|
||||||
|
"disallowKeywords": ["with"],
|
||||||
|
"disallowMixedSpacesAndTabs": true,
|
||||||
|
"disallowMultipleLineStrings": true,
|
||||||
|
"disallowMultipleVarDecl": true,
|
||||||
|
"disallowQuotedKeysInObjects": "allButReserved",
|
||||||
|
"disallowSpaceAfterPrefixUnaryOperators": ["++", "--", "+", "-", "~", "!"],
|
||||||
|
"disallowSpaceBeforeBinaryOperators": [","],
|
||||||
|
"disallowSpaceBeforePostfixUnaryOperators": ["++", "--"],
|
||||||
|
"disallowSpacesInFunctionDeclaration": { "beforeOpeningRoundBrace": true },
|
||||||
|
"disallowSpacesInNamedFunctionExpression": { "beforeOpeningRoundBrace": true },
|
||||||
|
"disallowSpacesInsideArrayBrackets": true,
|
||||||
|
"disallowSpacesInsideParentheses": true,
|
||||||
|
"disallowTrailingComma": true,
|
||||||
|
"disallowTrailingWhitespace": true,
|
||||||
|
"requireCamelCaseOrUpperCaseIdentifiers": true,
|
||||||
|
"requireCapitalizedConstructors": true,
|
||||||
|
"requireCommaBeforeLineBreak": true,
|
||||||
|
"requireDollarBeforejQueryAssignment": true,
|
||||||
|
"requireDotNotation": true,
|
||||||
|
"requireLineFeedAtFileEnd": true,
|
||||||
|
"requirePaddingNewLinesAfterUseStrict": true,
|
||||||
|
"requirePaddingNewLinesBeforeExport": true,
|
||||||
|
"requireSpaceAfterBinaryOperators": ["+", "-", "/", "*", "=", "==", "===", "!=", "!==", ">", "<", ">=", "<="],
|
||||||
|
"requireSpaceAfterKeywords": ["if", "else", "for", "while", "do", "switch", "return", "try", "catch"],
|
||||||
|
"requireSpaceAfterLineComment": true,
|
||||||
|
"requireSpaceBeforeBinaryOperators": ["+", "-", "/", "*", "=", "==", "===", "!=", "!==", ">", "<", ">=", "<="],
|
||||||
|
"requireSpaceBetweenArguments": true,
|
||||||
|
"requireSpacesInAnonymousFunctionExpression": { "beforeOpeningCurlyBrace": true, "beforeOpeningRoundBrace": true, "allExcept": ["shorthand"] },
|
||||||
|
"requireSpacesInConditionalExpression": true,
|
||||||
|
"requireSpacesInForStatement": true,
|
||||||
|
"requireSpacesInFunctionDeclaration": { "beforeOpeningCurlyBrace": true },
|
||||||
|
"requireSpacesInFunctionExpression": { "beforeOpeningCurlyBrace": true },
|
||||||
|
"requireSpacesInNamedFunctionExpression": { "beforeOpeningCurlyBrace": true },
|
||||||
|
"requireSpacesInsideObjectBrackets": "allButNested",
|
||||||
|
"validateAlignedFunctionParameters": true,
|
||||||
|
"validateIndentation": 2,
|
||||||
|
"validateLineBreaks": "LF",
|
||||||
|
"validateNewlineAfterArrayElements": true,
|
||||||
|
"validateQuoteMarks": "'"
|
||||||
|
}
|
||||||
|
|
@ -0,0 +1,23 @@
|
||||||
|
import ControlSidebar from './ControlSidebar'
|
||||||
|
import Layout from './Layout'
|
||||||
|
import PushMenu from './PushMenu'
|
||||||
|
import Treeview from './Treeview'
|
||||||
|
import DirectChat from './DirectChat'
|
||||||
|
import TodoList from './TodoList'
|
||||||
|
import CardWidget from './CardWidget'
|
||||||
|
import CardRefresh from './CardRefresh'
|
||||||
|
import Dropdown from './Dropdown'
|
||||||
|
import Toasts from './Toasts'
|
||||||
|
|
||||||
|
export {
|
||||||
|
ControlSidebar,
|
||||||
|
Layout,
|
||||||
|
PushMenu,
|
||||||
|
Treeview,
|
||||||
|
DirectChat,
|
||||||
|
TodoList,
|
||||||
|
CardWidget,
|
||||||
|
CardRefresh,
|
||||||
|
Dropdown,
|
||||||
|
Toasts
|
||||||
|
}
|
||||||
|
|
@ -0,0 +1,168 @@
|
||||||
|
/**
|
||||||
|
* --------------------------------------------
|
||||||
|
* AdminLTE CardRefresh.js
|
||||||
|
* License MIT
|
||||||
|
* --------------------------------------------
|
||||||
|
*/
|
||||||
|
|
||||||
|
const CardRefresh = (($) => {
|
||||||
|
/**
|
||||||
|
* Constants
|
||||||
|
* ====================================================
|
||||||
|
*/
|
||||||
|
|
||||||
|
const NAME = 'CardRefresh'
|
||||||
|
const DATA_KEY = 'lte.cardrefresh'
|
||||||
|
const EVENT_KEY = `.${DATA_KEY}`
|
||||||
|
const JQUERY_NO_CONFLICT = $.fn[NAME]
|
||||||
|
|
||||||
|
const Event = {
|
||||||
|
LOADED: `loaded${EVENT_KEY}`,
|
||||||
|
OVERLAY_ADDED: `overlay.added${EVENT_KEY}`,
|
||||||
|
OVERLAY_REMOVED: `overlay.removed${EVENT_KEY}`,
|
||||||
|
}
|
||||||
|
|
||||||
|
const ClassName = {
|
||||||
|
CARD: 'card',
|
||||||
|
}
|
||||||
|
|
||||||
|
const Selector = {
|
||||||
|
CARD: `.${ClassName.CARD}`,
|
||||||
|
DATA_REFRESH: '[data-card-widget="card-refresh"]',
|
||||||
|
}
|
||||||
|
|
||||||
|
const Default = {
|
||||||
|
source: '',
|
||||||
|
sourceSelector: '',
|
||||||
|
params: {},
|
||||||
|
trigger: Selector.DATA_REFRESH,
|
||||||
|
content: '.card-body',
|
||||||
|
loadInContent: true,
|
||||||
|
loadOnInit: true,
|
||||||
|
responseType: '',
|
||||||
|
overlayTemplate: '<div class="overlay"><i class="fas fa-2x fa-sync-alt fa-spin"></i></div>',
|
||||||
|
onLoadStart: function () {
|
||||||
|
},
|
||||||
|
onLoadDone: function (response) {
|
||||||
|
return response;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
class CardRefresh {
|
||||||
|
constructor(element, settings) {
|
||||||
|
this._element = element
|
||||||
|
this._parent = element.parents(Selector.CARD).first()
|
||||||
|
this._settings = $.extend({}, Default, settings)
|
||||||
|
this._overlay = $(this._settings.overlayTemplate)
|
||||||
|
|
||||||
|
if (element.hasClass(ClassName.CARD)) {
|
||||||
|
this._parent = element
|
||||||
|
}
|
||||||
|
|
||||||
|
if (this._settings.source === '') {
|
||||||
|
throw new Error('Source url was not defined. Please specify a url in your CardRefresh source option.');
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
load() {
|
||||||
|
this._addOverlay()
|
||||||
|
this._settings.onLoadStart.call($(this))
|
||||||
|
|
||||||
|
$.get(this._settings.source, this._settings.params, function (response) {
|
||||||
|
if (this._settings.loadInContent) {
|
||||||
|
if (this._settings.sourceSelector != '') {
|
||||||
|
response = $(response).find(this._settings.sourceSelector).html()
|
||||||
|
}
|
||||||
|
|
||||||
|
this._parent.find(this._settings.content).html(response)
|
||||||
|
}
|
||||||
|
|
||||||
|
this._settings.onLoadDone.call($(this), response)
|
||||||
|
this._removeOverlay();
|
||||||
|
}.bind(this), this._settings.responseType !== '' && this._settings.responseType)
|
||||||
|
|
||||||
|
const loadedEvent = $.Event(Event.LOADED)
|
||||||
|
$(this._element).trigger(loadedEvent)
|
||||||
|
}
|
||||||
|
|
||||||
|
_addOverlay() {
|
||||||
|
this._parent.append(this._overlay)
|
||||||
|
|
||||||
|
const overlayAddedEvent = $.Event(Event.OVERLAY_ADDED)
|
||||||
|
$(this._element).trigger(overlayAddedEvent)
|
||||||
|
};
|
||||||
|
|
||||||
|
_removeOverlay() {
|
||||||
|
this._parent.find(this._overlay).remove()
|
||||||
|
|
||||||
|
const overlayRemovedEvent = $.Event(Event.OVERLAY_REMOVED)
|
||||||
|
$(this._element).trigger(overlayRemovedEvent)
|
||||||
|
};
|
||||||
|
|
||||||
|
|
||||||
|
// Private
|
||||||
|
|
||||||
|
_init(card) {
|
||||||
|
$(this).find(this._settings.trigger).on('click', () => {
|
||||||
|
this.load()
|
||||||
|
})
|
||||||
|
|
||||||
|
if (this._settings.loadOnInit) {
|
||||||
|
this.load()
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
// Static
|
||||||
|
|
||||||
|
static _jQueryInterface(config) {
|
||||||
|
let data = $(this).data(DATA_KEY)
|
||||||
|
const _options = $.extend({}, Default, $(this).data())
|
||||||
|
|
||||||
|
if (!data) {
|
||||||
|
data = new CardRefresh($(this), _options)
|
||||||
|
$(this).data(DATA_KEY, typeof config === 'string' ? data: config)
|
||||||
|
}
|
||||||
|
|
||||||
|
if (typeof config === 'string' && config.match(/load/)) {
|
||||||
|
data[config]()
|
||||||
|
} else {
|
||||||
|
data._init($(this))
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Data API
|
||||||
|
* ====================================================
|
||||||
|
*/
|
||||||
|
|
||||||
|
$(document).on('click', Selector.DATA_REFRESH, function (event) {
|
||||||
|
if (event) {
|
||||||
|
event.preventDefault()
|
||||||
|
}
|
||||||
|
|
||||||
|
CardRefresh._jQueryInterface.call($(this), 'load')
|
||||||
|
})
|
||||||
|
|
||||||
|
$(document).ready(function () {
|
||||||
|
$(Selector.DATA_REFRESH).each(function() {
|
||||||
|
CardRefresh._jQueryInterface.call($(this))
|
||||||
|
})
|
||||||
|
})
|
||||||
|
|
||||||
|
/**
|
||||||
|
* jQuery API
|
||||||
|
* ====================================================
|
||||||
|
*/
|
||||||
|
|
||||||
|
$.fn[NAME] = CardRefresh._jQueryInterface
|
||||||
|
$.fn[NAME].Constructor = CardRefresh
|
||||||
|
$.fn[NAME].noConflict = function () {
|
||||||
|
$.fn[NAME] = JQUERY_NO_CONFLICT
|
||||||
|
return CardRefresh._jQueryInterface
|
||||||
|
}
|
||||||
|
|
||||||
|
return CardRefresh
|
||||||
|
})(jQuery)
|
||||||
|
|
||||||
|
export default CardRefresh
|
||||||
|
|
@ -0,0 +1,253 @@
|
||||||
|
/**
|
||||||
|
* --------------------------------------------
|
||||||
|
* AdminLTE CardWidget.js
|
||||||
|
* License MIT
|
||||||
|
* --------------------------------------------
|
||||||
|
*/
|
||||||
|
|
||||||
|
const CardWidget = (($) => {
|
||||||
|
/**
|
||||||
|
* Constants
|
||||||
|
* ====================================================
|
||||||
|
*/
|
||||||
|
|
||||||
|
const NAME = 'CardWidget'
|
||||||
|
const DATA_KEY = 'lte.cardwidget'
|
||||||
|
const EVENT_KEY = `.${DATA_KEY}`
|
||||||
|
const JQUERY_NO_CONFLICT = $.fn[NAME]
|
||||||
|
|
||||||
|
const Event = {
|
||||||
|
EXPANDED: `expanded${EVENT_KEY}`,
|
||||||
|
COLLAPSED: `collapsed${EVENT_KEY}`,
|
||||||
|
MAXIMIZED: `maximized${EVENT_KEY}`,
|
||||||
|
MINIMIZED: `minimized${EVENT_KEY}`,
|
||||||
|
REMOVED: `removed${EVENT_KEY}`
|
||||||
|
}
|
||||||
|
|
||||||
|
const ClassName = {
|
||||||
|
CARD: 'card',
|
||||||
|
COLLAPSED: 'collapsed-card',
|
||||||
|
COLLAPSING: 'collapsing-card',
|
||||||
|
EXPANDING: 'expanding-card',
|
||||||
|
WAS_COLLAPSED: 'was-collapsed',
|
||||||
|
MAXIMIZED: 'maximized-card',
|
||||||
|
}
|
||||||
|
|
||||||
|
const Selector = {
|
||||||
|
DATA_REMOVE: '[data-card-widget="remove"]',
|
||||||
|
DATA_COLLAPSE: '[data-card-widget="collapse"]',
|
||||||
|
DATA_MAXIMIZE: '[data-card-widget="maximize"]',
|
||||||
|
CARD: `.${ClassName.CARD}`,
|
||||||
|
CARD_HEADER: '.card-header',
|
||||||
|
CARD_BODY: '.card-body',
|
||||||
|
CARD_FOOTER: '.card-footer',
|
||||||
|
COLLAPSED: `.${ClassName.COLLAPSED}`,
|
||||||
|
}
|
||||||
|
|
||||||
|
const Default = {
|
||||||
|
animationSpeed: 'normal',
|
||||||
|
collapseTrigger: Selector.DATA_COLLAPSE,
|
||||||
|
removeTrigger: Selector.DATA_REMOVE,
|
||||||
|
maximizeTrigger: Selector.DATA_MAXIMIZE,
|
||||||
|
collapseIcon: 'fa-minus',
|
||||||
|
expandIcon: 'fa-plus',
|
||||||
|
maximizeIcon: 'fa-expand',
|
||||||
|
minimizeIcon: 'fa-compress',
|
||||||
|
}
|
||||||
|
|
||||||
|
class CardWidget {
|
||||||
|
constructor(element, settings) {
|
||||||
|
this._element = element
|
||||||
|
this._parent = element.parents(Selector.CARD).first()
|
||||||
|
|
||||||
|
if (element.hasClass(ClassName.CARD)) {
|
||||||
|
this._parent = element
|
||||||
|
}
|
||||||
|
|
||||||
|
this._settings = $.extend({}, Default, settings)
|
||||||
|
}
|
||||||
|
|
||||||
|
collapse() {
|
||||||
|
this._parent.addClass(ClassName.COLLAPSING).children(`${Selector.CARD_BODY}, ${Selector.CARD_FOOTER}`)
|
||||||
|
.slideUp(this._settings.animationSpeed, () => {
|
||||||
|
this._parent.addClass(ClassName.COLLAPSED).removeClass(ClassName.COLLAPSING)
|
||||||
|
})
|
||||||
|
|
||||||
|
this._parent.find('> ' + Selector.CARD_HEADER + ' ' + this._settings.collapseTrigger + ' .' + this._settings.collapseIcon)
|
||||||
|
.addClass(this._settings.expandIcon)
|
||||||
|
.removeClass(this._settings.collapseIcon)
|
||||||
|
|
||||||
|
const collapsed = $.Event(Event.COLLAPSED)
|
||||||
|
|
||||||
|
this._element.trigger(collapsed, this._parent)
|
||||||
|
}
|
||||||
|
|
||||||
|
expand() {
|
||||||
|
this._parent.addClass(ClassName.EXPANDING).children(`${Selector.CARD_BODY}, ${Selector.CARD_FOOTER}`)
|
||||||
|
.slideDown(this._settings.animationSpeed, () => {
|
||||||
|
this._parent.removeClass(ClassName.COLLAPSED).removeClass(ClassName.EXPANDING)
|
||||||
|
})
|
||||||
|
|
||||||
|
this._parent.find('> ' + Selector.CARD_HEADER + ' ' + this._settings.collapseTrigger + ' .' + this._settings.expandIcon)
|
||||||
|
.addClass(this._settings.collapseIcon)
|
||||||
|
.removeClass(this._settings.expandIcon)
|
||||||
|
|
||||||
|
const expanded = $.Event(Event.EXPANDED)
|
||||||
|
|
||||||
|
this._element.trigger(expanded, this._parent)
|
||||||
|
}
|
||||||
|
|
||||||
|
remove() {
|
||||||
|
this._parent.slideUp()
|
||||||
|
|
||||||
|
const removed = $.Event(Event.REMOVED)
|
||||||
|
|
||||||
|
this._element.trigger(removed, this._parent)
|
||||||
|
}
|
||||||
|
|
||||||
|
toggle() {
|
||||||
|
if (this._parent.hasClass(ClassName.COLLAPSED)) {
|
||||||
|
this.expand()
|
||||||
|
return
|
||||||
|
}
|
||||||
|
|
||||||
|
this.collapse()
|
||||||
|
}
|
||||||
|
|
||||||
|
maximize() {
|
||||||
|
this._parent.find(this._settings.maximizeTrigger + ' .' + this._settings.maximizeIcon)
|
||||||
|
.addClass(this._settings.minimizeIcon)
|
||||||
|
.removeClass(this._settings.maximizeIcon)
|
||||||
|
this._parent.css({
|
||||||
|
'height': this._parent.height(),
|
||||||
|
'width': this._parent.width(),
|
||||||
|
'transition': 'all .15s'
|
||||||
|
}).delay(150).queue(function(){
|
||||||
|
$(this).addClass(ClassName.MAXIMIZED)
|
||||||
|
$('html').addClass(ClassName.MAXIMIZED)
|
||||||
|
if ($(this).hasClass(ClassName.COLLAPSED)) {
|
||||||
|
$(this).addClass(ClassName.WAS_COLLAPSED)
|
||||||
|
}
|
||||||
|
$(this).dequeue()
|
||||||
|
})
|
||||||
|
|
||||||
|
const maximized = $.Event(Event.MAXIMIZED)
|
||||||
|
|
||||||
|
this._element.trigger(maximized, this._parent)
|
||||||
|
}
|
||||||
|
|
||||||
|
minimize() {
|
||||||
|
this._parent.find(this._settings.maximizeTrigger + ' .' + this._settings.minimizeIcon)
|
||||||
|
.addClass(this._settings.maximizeIcon)
|
||||||
|
.removeClass(this._settings.minimizeIcon)
|
||||||
|
this._parent.css('cssText', 'height:' + this._parent[0].style.height + ' !important;' +
|
||||||
|
'width:' + this._parent[0].style.width + ' !important; transition: all .15s;'
|
||||||
|
).delay(10).queue(function(){
|
||||||
|
$(this).removeClass(ClassName.MAXIMIZED)
|
||||||
|
$('html').removeClass(ClassName.MAXIMIZED)
|
||||||
|
$(this).css({
|
||||||
|
'height': 'inherit',
|
||||||
|
'width': 'inherit'
|
||||||
|
})
|
||||||
|
if ($(this).hasClass(ClassName.WAS_COLLAPSED)) {
|
||||||
|
$(this).removeClass(ClassName.WAS_COLLAPSED)
|
||||||
|
}
|
||||||
|
$(this).dequeue()
|
||||||
|
})
|
||||||
|
|
||||||
|
const MINIMIZED = $.Event(Event.MINIMIZED)
|
||||||
|
|
||||||
|
this._element.trigger(MINIMIZED, this._parent)
|
||||||
|
}
|
||||||
|
|
||||||
|
toggleMaximize() {
|
||||||
|
if (this._parent.hasClass(ClassName.MAXIMIZED)) {
|
||||||
|
this.minimize()
|
||||||
|
return
|
||||||
|
}
|
||||||
|
|
||||||
|
this.maximize()
|
||||||
|
}
|
||||||
|
|
||||||
|
// Private
|
||||||
|
|
||||||
|
_init(card) {
|
||||||
|
this._parent = card
|
||||||
|
|
||||||
|
$(this).find(this._settings.collapseTrigger).click(() => {
|
||||||
|
this.toggle()
|
||||||
|
})
|
||||||
|
|
||||||
|
$(this).find(this._settings.maximizeTrigger).click(() => {
|
||||||
|
this.toggleMaximize()
|
||||||
|
})
|
||||||
|
|
||||||
|
$(this).find(this._settings.removeTrigger).click(() => {
|
||||||
|
this.remove()
|
||||||
|
})
|
||||||
|
}
|
||||||
|
|
||||||
|
// Static
|
||||||
|
|
||||||
|
static _jQueryInterface(config) {
|
||||||
|
let data = $(this).data(DATA_KEY)
|
||||||
|
const _options = $.extend({}, Default, $(this).data())
|
||||||
|
|
||||||
|
if (!data) {
|
||||||
|
data = new CardWidget($(this), _options)
|
||||||
|
$(this).data(DATA_KEY, typeof config === 'string' ? data: config)
|
||||||
|
}
|
||||||
|
|
||||||
|
if (typeof config === 'string' && config.match(/collapse|expand|remove|toggle|maximize|minimize|toggleMaximize/)) {
|
||||||
|
data[config]()
|
||||||
|
} else if (typeof config === 'object') {
|
||||||
|
data._init($(this))
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Data API
|
||||||
|
* ====================================================
|
||||||
|
*/
|
||||||
|
|
||||||
|
$(document).on('click', Selector.DATA_COLLAPSE, function (event) {
|
||||||
|
if (event) {
|
||||||
|
event.preventDefault()
|
||||||
|
}
|
||||||
|
|
||||||
|
CardWidget._jQueryInterface.call($(this), 'toggle')
|
||||||
|
})
|
||||||
|
|
||||||
|
$(document).on('click', Selector.DATA_REMOVE, function (event) {
|
||||||
|
if (event) {
|
||||||
|
event.preventDefault()
|
||||||
|
}
|
||||||
|
|
||||||
|
CardWidget._jQueryInterface.call($(this), 'remove')
|
||||||
|
})
|
||||||
|
|
||||||
|
$(document).on('click', Selector.DATA_MAXIMIZE, function (event) {
|
||||||
|
if (event) {
|
||||||
|
event.preventDefault()
|
||||||
|
}
|
||||||
|
|
||||||
|
CardWidget._jQueryInterface.call($(this), 'toggleMaximize')
|
||||||
|
})
|
||||||
|
|
||||||
|
/**
|
||||||
|
* jQuery API
|
||||||
|
* ====================================================
|
||||||
|
*/
|
||||||
|
|
||||||
|
$.fn[NAME] = CardWidget._jQueryInterface
|
||||||
|
$.fn[NAME].Constructor = CardWidget
|
||||||
|
$.fn[NAME].noConflict = function () {
|
||||||
|
$.fn[NAME] = JQUERY_NO_CONFLICT
|
||||||
|
return CardWidget._jQueryInterface
|
||||||
|
}
|
||||||
|
|
||||||
|
return CardWidget
|
||||||
|
})(jQuery)
|
||||||
|
|
||||||
|
export default CardWidget
|
||||||
|
|
@ -0,0 +1,292 @@
|
||||||
|
/**
|
||||||
|
* --------------------------------------------
|
||||||
|
* AdminLTE ControlSidebar.js
|
||||||
|
* License MIT
|
||||||
|
* --------------------------------------------
|
||||||
|
*/
|
||||||
|
|
||||||
|
const ControlSidebar = (($) => {
|
||||||
|
/**
|
||||||
|
* Constants
|
||||||
|
* ====================================================
|
||||||
|
*/
|
||||||
|
|
||||||
|
const NAME = 'ControlSidebar'
|
||||||
|
const DATA_KEY = 'lte.controlsidebar'
|
||||||
|
const EVENT_KEY = `.${DATA_KEY}`
|
||||||
|
const JQUERY_NO_CONFLICT = $.fn[NAME]
|
||||||
|
const DATA_API_KEY = '.data-api'
|
||||||
|
|
||||||
|
const Event = {
|
||||||
|
COLLAPSED: `collapsed${EVENT_KEY}`,
|
||||||
|
EXPANDED: `expanded${EVENT_KEY}`,
|
||||||
|
}
|
||||||
|
|
||||||
|
const Selector = {
|
||||||
|
CONTROL_SIDEBAR: '.control-sidebar',
|
||||||
|
CONTROL_SIDEBAR_CONTENT: '.control-sidebar-content',
|
||||||
|
DATA_TOGGLE: '[data-widget="control-sidebar"]',
|
||||||
|
CONTENT: '.content-wrapper',
|
||||||
|
HEADER: '.main-header',
|
||||||
|
FOOTER: '.main-footer',
|
||||||
|
}
|
||||||
|
|
||||||
|
const ClassName = {
|
||||||
|
CONTROL_SIDEBAR_ANIMATE: 'control-sidebar-animate',
|
||||||
|
CONTROL_SIDEBAR_OPEN: 'control-sidebar-open',
|
||||||
|
CONTROL_SIDEBAR_SLIDE: 'control-sidebar-slide-open',
|
||||||
|
LAYOUT_FIXED: 'layout-fixed',
|
||||||
|
NAVBAR_FIXED: 'layout-navbar-fixed',
|
||||||
|
NAVBAR_SM_FIXED: 'layout-sm-navbar-fixed',
|
||||||
|
NAVBAR_MD_FIXED: 'layout-md-navbar-fixed',
|
||||||
|
NAVBAR_LG_FIXED: 'layout-lg-navbar-fixed',
|
||||||
|
NAVBAR_XL_FIXED: 'layout-xl-navbar-fixed',
|
||||||
|
FOOTER_FIXED: 'layout-footer-fixed',
|
||||||
|
FOOTER_SM_FIXED: 'layout-sm-footer-fixed',
|
||||||
|
FOOTER_MD_FIXED: 'layout-md-footer-fixed',
|
||||||
|
FOOTER_LG_FIXED: 'layout-lg-footer-fixed',
|
||||||
|
FOOTER_XL_FIXED: 'layout-xl-footer-fixed',
|
||||||
|
}
|
||||||
|
|
||||||
|
const Default = {
|
||||||
|
controlsidebarSlide: true,
|
||||||
|
scrollbarTheme : 'os-theme-light',
|
||||||
|
scrollbarAutoHide: 'l',
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Class Definition
|
||||||
|
* ====================================================
|
||||||
|
*/
|
||||||
|
|
||||||
|
class ControlSidebar {
|
||||||
|
constructor(element, config) {
|
||||||
|
this._element = element
|
||||||
|
this._config = config
|
||||||
|
|
||||||
|
this._init()
|
||||||
|
}
|
||||||
|
|
||||||
|
// Public
|
||||||
|
|
||||||
|
collapse() {
|
||||||
|
// Show the control sidebar
|
||||||
|
if (this._config.controlsidebarSlide) {
|
||||||
|
$('html').addClass(ClassName.CONTROL_SIDEBAR_ANIMATE)
|
||||||
|
$('body').removeClass(ClassName.CONTROL_SIDEBAR_SLIDE).delay(300).queue(function(){
|
||||||
|
$(Selector.CONTROL_SIDEBAR).hide()
|
||||||
|
$('html').removeClass(ClassName.CONTROL_SIDEBAR_ANIMATE)
|
||||||
|
$(this).dequeue()
|
||||||
|
})
|
||||||
|
} else {
|
||||||
|
$('body').removeClass(ClassName.CONTROL_SIDEBAR_OPEN)
|
||||||
|
}
|
||||||
|
|
||||||
|
const collapsedEvent = $.Event(Event.COLLAPSED)
|
||||||
|
$(this._element).trigger(collapsedEvent)
|
||||||
|
}
|
||||||
|
|
||||||
|
show() {
|
||||||
|
// Collapse the control sidebar
|
||||||
|
if (this._config.controlsidebarSlide) {
|
||||||
|
$('html').addClass(ClassName.CONTROL_SIDEBAR_ANIMATE)
|
||||||
|
$(Selector.CONTROL_SIDEBAR).show().delay(10).queue(function(){
|
||||||
|
$('body').addClass(ClassName.CONTROL_SIDEBAR_SLIDE).delay(300).queue(function(){
|
||||||
|
$('html').removeClass(ClassName.CONTROL_SIDEBAR_ANIMATE)
|
||||||
|
$(this).dequeue()
|
||||||
|
})
|
||||||
|
$(this).dequeue()
|
||||||
|
})
|
||||||
|
} else {
|
||||||
|
$('body').addClass(ClassName.CONTROL_SIDEBAR_OPEN)
|
||||||
|
}
|
||||||
|
|
||||||
|
const expandedEvent = $.Event(Event.EXPANDED)
|
||||||
|
$(this._element).trigger(expandedEvent)
|
||||||
|
}
|
||||||
|
|
||||||
|
toggle() {
|
||||||
|
const shouldClose = $('body').hasClass(ClassName.CONTROL_SIDEBAR_OPEN) || $('body')
|
||||||
|
.hasClass(ClassName.CONTROL_SIDEBAR_SLIDE)
|
||||||
|
if (shouldClose) {
|
||||||
|
// Close the control sidebar
|
||||||
|
this.collapse()
|
||||||
|
} else {
|
||||||
|
// Open the control sidebar
|
||||||
|
this.show()
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
// Private
|
||||||
|
|
||||||
|
_init() {
|
||||||
|
this._fixHeight()
|
||||||
|
this._fixScrollHeight()
|
||||||
|
|
||||||
|
$(window).resize(() => {
|
||||||
|
this._fixHeight()
|
||||||
|
this._fixScrollHeight()
|
||||||
|
})
|
||||||
|
|
||||||
|
$(window).scroll(() => {
|
||||||
|
if ($('body').hasClass(ClassName.CONTROL_SIDEBAR_OPEN) || $('body').hasClass(ClassName.CONTROL_SIDEBAR_SLIDE)) {
|
||||||
|
this._fixScrollHeight()
|
||||||
|
}
|
||||||
|
})
|
||||||
|
}
|
||||||
|
|
||||||
|
_fixScrollHeight() {
|
||||||
|
const heights = {
|
||||||
|
scroll: $(document).height(),
|
||||||
|
window: $(window).height(),
|
||||||
|
header: $(Selector.HEADER).outerHeight(),
|
||||||
|
footer: $(Selector.FOOTER).outerHeight(),
|
||||||
|
}
|
||||||
|
const positions = {
|
||||||
|
bottom: Math.abs((heights.window + $(window).scrollTop()) - heights.scroll),
|
||||||
|
top: $(window).scrollTop(),
|
||||||
|
}
|
||||||
|
|
||||||
|
let navbarFixed = false;
|
||||||
|
let footerFixed = false;
|
||||||
|
|
||||||
|
if ($('body').hasClass(ClassName.LAYOUT_FIXED)) {
|
||||||
|
if (
|
||||||
|
$('body').hasClass(ClassName.NAVBAR_FIXED)
|
||||||
|
|| $('body').hasClass(ClassName.NAVBAR_SM_FIXED)
|
||||||
|
|| $('body').hasClass(ClassName.NAVBAR_MD_FIXED)
|
||||||
|
|| $('body').hasClass(ClassName.NAVBAR_LG_FIXED)
|
||||||
|
|| $('body').hasClass(ClassName.NAVBAR_XL_FIXED)
|
||||||
|
) {
|
||||||
|
if ($(Selector.HEADER).css("position") === "fixed") {
|
||||||
|
navbarFixed = true;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
if (
|
||||||
|
$('body').hasClass(ClassName.FOOTER_FIXED)
|
||||||
|
|| $('body').hasClass(ClassName.FOOTER_SM_FIXED)
|
||||||
|
|| $('body').hasClass(ClassName.FOOTER_MD_FIXED)
|
||||||
|
|| $('body').hasClass(ClassName.FOOTER_LG_FIXED)
|
||||||
|
|| $('body').hasClass(ClassName.FOOTER_XL_FIXED)
|
||||||
|
) {
|
||||||
|
if ($(Selector.FOOTER).css("position") === "fixed") {
|
||||||
|
footerFixed = true;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
if (positions.top === 0 && positions.bottom === 0) {
|
||||||
|
$(Selector.CONTROL_SIDEBAR).css('bottom', heights.footer);
|
||||||
|
$(Selector.CONTROL_SIDEBAR).css('top', heights.header);
|
||||||
|
$(Selector.CONTROL_SIDEBAR + ', ' + Selector.CONTROL_SIDEBAR + ' ' + Selector.CONTROL_SIDEBAR_CONTENT).css('height', heights.window - (heights.header + heights.footer))
|
||||||
|
} else if (positions.bottom <= heights.footer) {
|
||||||
|
if (footerFixed === false) {
|
||||||
|
$(Selector.CONTROL_SIDEBAR).css('bottom', heights.footer - positions.bottom);
|
||||||
|
$(Selector.CONTROL_SIDEBAR + ', ' + Selector.CONTROL_SIDEBAR + ' ' + Selector.CONTROL_SIDEBAR_CONTENT).css('height', heights.window - (heights.footer - positions.bottom))
|
||||||
|
} else {
|
||||||
|
$(Selector.CONTROL_SIDEBAR).css('bottom', heights.footer);
|
||||||
|
}
|
||||||
|
} else if (positions.top <= heights.header) {
|
||||||
|
if (navbarFixed === false) {
|
||||||
|
$(Selector.CONTROL_SIDEBAR).css('top', heights.header - positions.top);
|
||||||
|
$(Selector.CONTROL_SIDEBAR + ', ' + Selector.CONTROL_SIDEBAR + ' ' + Selector.CONTROL_SIDEBAR_CONTENT).css('height', heights.window - (heights.header - positions.top))
|
||||||
|
} else {
|
||||||
|
$(Selector.CONTROL_SIDEBAR).css('top', heights.header);
|
||||||
|
}
|
||||||
|
} else {
|
||||||
|
if (navbarFixed === false) {
|
||||||
|
$(Selector.CONTROL_SIDEBAR).css('top', 0);
|
||||||
|
$(Selector.CONTROL_SIDEBAR + ', ' + Selector.CONTROL_SIDEBAR + ' ' + Selector.CONTROL_SIDEBAR_CONTENT).css('height', heights.window)
|
||||||
|
} else {
|
||||||
|
$(Selector.CONTROL_SIDEBAR).css('top', heights.header);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
_fixHeight() {
|
||||||
|
const heights = {
|
||||||
|
window: $(window).height(),
|
||||||
|
header: $(Selector.HEADER).outerHeight(),
|
||||||
|
footer: $(Selector.FOOTER).outerHeight(),
|
||||||
|
}
|
||||||
|
|
||||||
|
if ($('body').hasClass(ClassName.LAYOUT_FIXED)) {
|
||||||
|
let sidebarHeight = heights.window - heights.header;
|
||||||
|
|
||||||
|
if (
|
||||||
|
$('body').hasClass(ClassName.FOOTER_FIXED)
|
||||||
|
|| $('body').hasClass(ClassName.FOOTER_SM_FIXED)
|
||||||
|
|| $('body').hasClass(ClassName.FOOTER_MD_FIXED)
|
||||||
|
|| $('body').hasClass(ClassName.FOOTER_LG_FIXED)
|
||||||
|
|| $('body').hasClass(ClassName.FOOTER_XL_FIXED)
|
||||||
|
) {
|
||||||
|
if ($(Selector.FOOTER).css("position") === "fixed") {
|
||||||
|
sidebarHeight = heights.window - heights.header - heights.footer;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
$(Selector.CONTROL_SIDEBAR + ' ' + Selector.CONTROL_SIDEBAR_CONTENT).css('height', sidebarHeight)
|
||||||
|
|
||||||
|
if (typeof $.fn.overlayScrollbars !== 'undefined') {
|
||||||
|
$(Selector.CONTROL_SIDEBAR + ' ' + Selector.CONTROL_SIDEBAR_CONTENT).overlayScrollbars({
|
||||||
|
className : this._config.scrollbarTheme,
|
||||||
|
sizeAutoCapable : true,
|
||||||
|
scrollbars : {
|
||||||
|
autoHide: this._config.scrollbarAutoHide,
|
||||||
|
clickScrolling : true
|
||||||
|
}
|
||||||
|
})
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
// Static
|
||||||
|
|
||||||
|
static _jQueryInterface(operation) {
|
||||||
|
return this.each(function () {
|
||||||
|
let data = $(this).data(DATA_KEY)
|
||||||
|
const _options = $.extend({}, Default, $(this).data())
|
||||||
|
|
||||||
|
if (!data) {
|
||||||
|
data = new ControlSidebar(this, _options)
|
||||||
|
$(this).data(DATA_KEY, data)
|
||||||
|
}
|
||||||
|
|
||||||
|
if (data[operation] === 'undefined') {
|
||||||
|
throw new Error(`${operation} is not a function`)
|
||||||
|
}
|
||||||
|
|
||||||
|
data[operation]()
|
||||||
|
})
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
*
|
||||||
|
* Data Api implementation
|
||||||
|
* ====================================================
|
||||||
|
*/
|
||||||
|
$(document).on('click', Selector.DATA_TOGGLE, function (event) {
|
||||||
|
event.preventDefault()
|
||||||
|
|
||||||
|
ControlSidebar._jQueryInterface.call($(this), 'toggle')
|
||||||
|
})
|
||||||
|
|
||||||
|
/**
|
||||||
|
* jQuery API
|
||||||
|
* ====================================================
|
||||||
|
*/
|
||||||
|
|
||||||
|
$.fn[NAME] = ControlSidebar._jQueryInterface
|
||||||
|
$.fn[NAME].Constructor = ControlSidebar
|
||||||
|
$.fn[NAME].noConflict = function () {
|
||||||
|
$.fn[NAME] = JQUERY_NO_CONFLICT
|
||||||
|
return ControlSidebar._jQueryInterface
|
||||||
|
}
|
||||||
|
|
||||||
|
return ControlSidebar
|
||||||
|
})(jQuery)
|
||||||
|
|
||||||
|
export default ControlSidebar
|
||||||
|
|
||||||
|
|
@ -0,0 +1,92 @@
|
||||||
|
/**
|
||||||
|
* --------------------------------------------
|
||||||
|
* AdminLTE DirectChat.js
|
||||||
|
* License MIT
|
||||||
|
* --------------------------------------------
|
||||||
|
*/
|
||||||
|
|
||||||
|
const DirectChat = (($) => {
|
||||||
|
/**
|
||||||
|
* Constants
|
||||||
|
* ====================================================
|
||||||
|
*/
|
||||||
|
|
||||||
|
const NAME = 'DirectChat'
|
||||||
|
const DATA_KEY = 'lte.directchat'
|
||||||
|
const EVENT_KEY = `.${DATA_KEY}`
|
||||||
|
const JQUERY_NO_CONFLICT = $.fn[NAME]
|
||||||
|
const DATA_API_KEY = '.data-api'
|
||||||
|
|
||||||
|
const Event = {
|
||||||
|
TOGGLED: `toggled{EVENT_KEY}`
|
||||||
|
}
|
||||||
|
|
||||||
|
const Selector = {
|
||||||
|
DATA_TOGGLE: '[data-widget="chat-pane-toggle"]',
|
||||||
|
DIRECT_CHAT: '.direct-chat'
|
||||||
|
};
|
||||||
|
|
||||||
|
const ClassName = {
|
||||||
|
DIRECT_CHAT_OPEN: 'direct-chat-contacts-open'
|
||||||
|
};
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Class Definition
|
||||||
|
* ====================================================
|
||||||
|
*/
|
||||||
|
|
||||||
|
class DirectChat {
|
||||||
|
constructor(element, config) {
|
||||||
|
this._element = element
|
||||||
|
}
|
||||||
|
|
||||||
|
toggle() {
|
||||||
|
$(this._element).parents(Selector.DIRECT_CHAT).first().toggleClass(ClassName.DIRECT_CHAT_OPEN);
|
||||||
|
|
||||||
|
const toggledEvent = $.Event(Event.TOGGLED)
|
||||||
|
$(this._element).trigger(toggledEvent)
|
||||||
|
}
|
||||||
|
|
||||||
|
// Static
|
||||||
|
|
||||||
|
static _jQueryInterface(config) {
|
||||||
|
return this.each(function () {
|
||||||
|
let data = $(this).data(DATA_KEY)
|
||||||
|
|
||||||
|
if (!data) {
|
||||||
|
data = new DirectChat($(this))
|
||||||
|
$(this).data(DATA_KEY, data)
|
||||||
|
}
|
||||||
|
|
||||||
|
data[config]()
|
||||||
|
})
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
*
|
||||||
|
* Data Api implementation
|
||||||
|
* ====================================================
|
||||||
|
*/
|
||||||
|
|
||||||
|
$(document).on('click', Selector.DATA_TOGGLE, function (event) {
|
||||||
|
if (event) event.preventDefault();
|
||||||
|
DirectChat._jQueryInterface.call($(this), 'toggle');
|
||||||
|
});
|
||||||
|
|
||||||
|
/**
|
||||||
|
* jQuery API
|
||||||
|
* ====================================================
|
||||||
|
*/
|
||||||
|
|
||||||
|
$.fn[NAME] = DirectChat._jQueryInterface
|
||||||
|
$.fn[NAME].Constructor = DirectChat
|
||||||
|
$.fn[NAME].noConflict = function () {
|
||||||
|
$.fn[NAME] = JQUERY_NO_CONFLICT
|
||||||
|
return DirectChat._jQueryInterface
|
||||||
|
}
|
||||||
|
|
||||||
|
return DirectChat
|
||||||
|
})(jQuery)
|
||||||
|
|
||||||
|
export default DirectChat
|
||||||
|
|
@ -0,0 +1,142 @@
|
||||||
|
/**
|
||||||
|
* --------------------------------------------
|
||||||
|
* AdminLTE Dropdown.js
|
||||||
|
* License MIT
|
||||||
|
* --------------------------------------------
|
||||||
|
*/
|
||||||
|
|
||||||
|
const Dropdown = (($) => {
|
||||||
|
/**
|
||||||
|
* Constants
|
||||||
|
* ====================================================
|
||||||
|
*/
|
||||||
|
|
||||||
|
const NAME = 'Dropdown'
|
||||||
|
const DATA_KEY = 'lte.dropdown'
|
||||||
|
const EVENT_KEY = `.${DATA_KEY}`
|
||||||
|
const JQUERY_NO_CONFLICT = $.fn[NAME]
|
||||||
|
|
||||||
|
const Selector = {
|
||||||
|
NAVBAR: '.navbar',
|
||||||
|
DROPDOWN_MENU: '.dropdown-menu',
|
||||||
|
DROPDOWN_MENU_ACTIVE: '.dropdown-menu.show',
|
||||||
|
DROPDOWN_TOGGLE: '[data-toggle="dropdown"]',
|
||||||
|
}
|
||||||
|
|
||||||
|
const ClassName = {
|
||||||
|
DROPDOWN_HOVER: 'dropdown-hover',
|
||||||
|
DROPDOWN_RIGHT: 'dropdown-menu-right'
|
||||||
|
}
|
||||||
|
|
||||||
|
const Default = {
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Class Definition
|
||||||
|
* ====================================================
|
||||||
|
*/
|
||||||
|
|
||||||
|
class Dropdown {
|
||||||
|
constructor(element, config) {
|
||||||
|
this._config = config
|
||||||
|
this._element = element
|
||||||
|
}
|
||||||
|
|
||||||
|
// Public
|
||||||
|
|
||||||
|
toggleSubmenu() {
|
||||||
|
this._element.siblings().toggleClass("show")
|
||||||
|
|
||||||
|
if (! this._element.next().hasClass('show')) {
|
||||||
|
this._element.parents('.dropdown-menu').first().find('.show').removeClass("show")
|
||||||
|
}
|
||||||
|
|
||||||
|
this._element.parents('li.nav-item.dropdown.show').on('hidden.bs.dropdown', function(e) {
|
||||||
|
$('.dropdown-submenu .show').removeClass("show")
|
||||||
|
})
|
||||||
|
}
|
||||||
|
|
||||||
|
fixPosition() {
|
||||||
|
let elm = $(Selector.DROPDOWN_MENU_ACTIVE)
|
||||||
|
|
||||||
|
if (elm.length !== 0) {
|
||||||
|
if (elm.hasClass(ClassName.DROPDOWN_RIGHT)) {
|
||||||
|
elm.css('left', 'inherit')
|
||||||
|
elm.css('right', 0)
|
||||||
|
} else {
|
||||||
|
elm.css('left', 0)
|
||||||
|
elm.css('right', 'inherit')
|
||||||
|
}
|
||||||
|
|
||||||
|
let offset = elm.offset()
|
||||||
|
let width = elm.width()
|
||||||
|
let windowWidth = $(window).width()
|
||||||
|
let visiblePart = windowWidth - offset.left
|
||||||
|
|
||||||
|
if (offset.left < 0) {
|
||||||
|
elm.css('left', 'inherit')
|
||||||
|
elm.css('right', (offset.left - 5))
|
||||||
|
} else {
|
||||||
|
if (visiblePart < width) {
|
||||||
|
elm.css('left', 'inherit')
|
||||||
|
elm.css('right', 0)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
// Static
|
||||||
|
|
||||||
|
static _jQueryInterface(config) {
|
||||||
|
return this.each(function () {
|
||||||
|
let data = $(this).data(DATA_KEY)
|
||||||
|
const _config = $.extend({}, Default, $(this).data())
|
||||||
|
|
||||||
|
if (!data) {
|
||||||
|
data = new Dropdown($(this), _config)
|
||||||
|
$(this).data(DATA_KEY, data)
|
||||||
|
}
|
||||||
|
|
||||||
|
if (config === 'toggleSubmenu' || config == 'fixPosition') {
|
||||||
|
data[config]()
|
||||||
|
}
|
||||||
|
})
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Data API
|
||||||
|
* ====================================================
|
||||||
|
*/
|
||||||
|
// $(Selector.DROPDOWN_TOGGLE).on("click", function(event) {
|
||||||
|
// event.preventDefault()
|
||||||
|
// event.stopPropagation()
|
||||||
|
//
|
||||||
|
// Dropdown._jQueryInterface.call($(this), 'toggleSubmenu')
|
||||||
|
// });
|
||||||
|
//
|
||||||
|
// $(Selector.DROPDOWN_TOGGLE).on("click", function(event) {
|
||||||
|
// event.preventDefault()
|
||||||
|
//
|
||||||
|
// setTimeout(function() {
|
||||||
|
// Dropdown._jQueryInterface.call($(this), 'fixPosition')
|
||||||
|
// }, 1)
|
||||||
|
// });
|
||||||
|
|
||||||
|
/**
|
||||||
|
* jQuery API
|
||||||
|
* ====================================================
|
||||||
|
*/
|
||||||
|
|
||||||
|
$.fn[NAME] = Dropdown._jQueryInterface
|
||||||
|
$.fn[NAME].Constructor = Dropdown
|
||||||
|
$.fn[NAME].noConflict = function () {
|
||||||
|
$.fn[NAME] = JQUERY_NO_CONFLICT
|
||||||
|
return Dropdown._jQueryInterface
|
||||||
|
}
|
||||||
|
|
||||||
|
return Dropdown
|
||||||
|
})(jQuery)
|
||||||
|
|
||||||
|
export default Dropdown
|
||||||
|
|
@ -0,0 +1,242 @@
|
||||||
|
/**
|
||||||
|
* --------------------------------------------
|
||||||
|
* AdminLTE Layout.js
|
||||||
|
* License MIT
|
||||||
|
* --------------------------------------------
|
||||||
|
*/
|
||||||
|
|
||||||
|
const Layout = (($) => {
|
||||||
|
/**
|
||||||
|
* Constants
|
||||||
|
* ====================================================
|
||||||
|
*/
|
||||||
|
|
||||||
|
const NAME = 'Layout'
|
||||||
|
const DATA_KEY = 'lte.layout'
|
||||||
|
const EVENT_KEY = `.${DATA_KEY}`
|
||||||
|
const JQUERY_NO_CONFLICT = $.fn[NAME]
|
||||||
|
|
||||||
|
const Event = {
|
||||||
|
SIDEBAR: 'sidebar'
|
||||||
|
}
|
||||||
|
|
||||||
|
const Selector = {
|
||||||
|
HEADER : '.main-header',
|
||||||
|
MAIN_SIDEBAR : '.main-sidebar',
|
||||||
|
SIDEBAR : '.main-sidebar .sidebar',
|
||||||
|
CONTENT : '.content-wrapper',
|
||||||
|
BRAND : '.brand-link',
|
||||||
|
CONTENT_HEADER : '.content-header',
|
||||||
|
WRAPPER : '.wrapper',
|
||||||
|
CONTROL_SIDEBAR: '.control-sidebar',
|
||||||
|
CONTROL_SIDEBAR_CONTENT: '.control-sidebar-content',
|
||||||
|
CONTROL_SIDEBAR_BTN: '[data-widget="control-sidebar"]',
|
||||||
|
LAYOUT_FIXED : '.layout-fixed',
|
||||||
|
FOOTER : '.main-footer',
|
||||||
|
PUSHMENU_BTN : '[data-widget="pushmenu"]',
|
||||||
|
LOGIN_BOX : '.login-box',
|
||||||
|
REGISTER_BOX : '.register-box'
|
||||||
|
}
|
||||||
|
|
||||||
|
const ClassName = {
|
||||||
|
HOLD : 'hold-transition',
|
||||||
|
SIDEBAR : 'main-sidebar',
|
||||||
|
CONTENT_FIXED : 'content-fixed',
|
||||||
|
SIDEBAR_FOCUSED: 'sidebar-focused',
|
||||||
|
LAYOUT_FIXED : 'layout-fixed',
|
||||||
|
NAVBAR_FIXED : 'layout-navbar-fixed',
|
||||||
|
FOOTER_FIXED : 'layout-footer-fixed',
|
||||||
|
LOGIN_PAGE : 'login-page',
|
||||||
|
REGISTER_PAGE : 'register-page',
|
||||||
|
CONTROL_SIDEBAR_SLIDE_OPEN: 'control-sidebar-slide-open',
|
||||||
|
CONTROL_SIDEBAR_OPEN: 'control-sidebar-open',
|
||||||
|
}
|
||||||
|
|
||||||
|
const Default = {
|
||||||
|
scrollbarTheme : 'os-theme-light',
|
||||||
|
scrollbarAutoHide: 'l',
|
||||||
|
panelAutoHeight: true,
|
||||||
|
loginRegisterAutoHeight: true,
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Class Definition
|
||||||
|
* ====================================================
|
||||||
|
*/
|
||||||
|
|
||||||
|
class Layout {
|
||||||
|
constructor(element, config) {
|
||||||
|
this._config = config
|
||||||
|
this._element = element
|
||||||
|
|
||||||
|
this._init()
|
||||||
|
}
|
||||||
|
|
||||||
|
// Public
|
||||||
|
|
||||||
|
fixLayoutHeight(extra = null) {
|
||||||
|
let control_sidebar = 0
|
||||||
|
|
||||||
|
if ($('body').hasClass(ClassName.CONTROL_SIDEBAR_SLIDE_OPEN) || $('body').hasClass(ClassName.CONTROL_SIDEBAR_OPEN) || extra == 'control_sidebar') {
|
||||||
|
control_sidebar = $(Selector.CONTROL_SIDEBAR_CONTENT).height()
|
||||||
|
}
|
||||||
|
|
||||||
|
const heights = {
|
||||||
|
window: $(window).height(),
|
||||||
|
header: $(Selector.HEADER).length !== 0 ? $(Selector.HEADER).outerHeight() : 0,
|
||||||
|
footer: $(Selector.FOOTER).length !== 0 ? $(Selector.FOOTER).outerHeight() : 0,
|
||||||
|
sidebar: $(Selector.SIDEBAR).length !== 0 ? $(Selector.SIDEBAR).height() : 0,
|
||||||
|
control_sidebar: control_sidebar,
|
||||||
|
}
|
||||||
|
|
||||||
|
const max = this._max(heights)
|
||||||
|
let offset = this._config.panelAutoHeight
|
||||||
|
|
||||||
|
if (offset === true) {
|
||||||
|
offset = 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
if (offset !== false) {
|
||||||
|
if (max == heights.control_sidebar) {
|
||||||
|
$(Selector.CONTENT).css('min-height', (max + offset))
|
||||||
|
} else if (max == heights.window) {
|
||||||
|
$(Selector.CONTENT).css('min-height', (max + offset) - heights.header - heights.footer)
|
||||||
|
} else {
|
||||||
|
$(Selector.CONTENT).css('min-height', (max + offset) - heights.header)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
if ($('body').hasClass(ClassName.LAYOUT_FIXED)) {
|
||||||
|
if (offset !== false) {
|
||||||
|
$(Selector.CONTENT).css('min-height', (max + offset) - heights.header - heights.footer)
|
||||||
|
}
|
||||||
|
|
||||||
|
if (typeof $.fn.overlayScrollbars !== 'undefined') {
|
||||||
|
$(Selector.SIDEBAR).overlayScrollbars({
|
||||||
|
className : this._config.scrollbarTheme,
|
||||||
|
sizeAutoCapable : true,
|
||||||
|
scrollbars : {
|
||||||
|
autoHide: this._config.scrollbarAutoHide,
|
||||||
|
clickScrolling : true
|
||||||
|
}
|
||||||
|
})
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
fixLoginRegisterHeight() {
|
||||||
|
if ($(Selector.LOGIN_BOX + ', ' + Selector.REGISTER_BOX).length === 0) {
|
||||||
|
$('body, html').css('height', 'auto')
|
||||||
|
} else if ($(Selector.LOGIN_BOX + ', ' + Selector.REGISTER_BOX).length !== 0) {
|
||||||
|
let box_height = $(Selector.LOGIN_BOX + ', ' + Selector.REGISTER_BOX).height()
|
||||||
|
|
||||||
|
if ($('body').css('min-height') !== box_height) {
|
||||||
|
$('body').css('min-height', box_height)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
// Private
|
||||||
|
|
||||||
|
_init() {
|
||||||
|
// Activate layout height watcher
|
||||||
|
this.fixLayoutHeight()
|
||||||
|
|
||||||
|
if (this._config.loginRegisterAutoHeight === true) {
|
||||||
|
this.fixLoginRegisterHeight()
|
||||||
|
} else if (Number.isInteger(this._config.loginRegisterAutoHeight)) {
|
||||||
|
setInterval(this.fixLoginRegisterHeight, this._config.loginRegisterAutoHeight);
|
||||||
|
}
|
||||||
|
|
||||||
|
$(Selector.SIDEBAR)
|
||||||
|
.on('collapsed.lte.treeview expanded.lte.treeview', () => {
|
||||||
|
this.fixLayoutHeight()
|
||||||
|
})
|
||||||
|
|
||||||
|
$(Selector.PUSHMENU_BTN)
|
||||||
|
.on('collapsed.lte.pushmenu shown.lte.pushmenu', () => {
|
||||||
|
this.fixLayoutHeight()
|
||||||
|
})
|
||||||
|
|
||||||
|
$(Selector.CONTROL_SIDEBAR_BTN)
|
||||||
|
.on('collapsed.lte.controlsidebar', () => {
|
||||||
|
this.fixLayoutHeight()
|
||||||
|
})
|
||||||
|
.on('expanded.lte.controlsidebar', () => {
|
||||||
|
this.fixLayoutHeight('control_sidebar')
|
||||||
|
})
|
||||||
|
|
||||||
|
$(window).resize(() => {
|
||||||
|
this.fixLayoutHeight()
|
||||||
|
})
|
||||||
|
|
||||||
|
$('body.hold-transition').removeClass('hold-transition')
|
||||||
|
}
|
||||||
|
|
||||||
|
_max(numbers) {
|
||||||
|
// Calculate the maximum number in a list
|
||||||
|
let max = 0
|
||||||
|
|
||||||
|
Object.keys(numbers).forEach((key) => {
|
||||||
|
if (numbers[key] > max) {
|
||||||
|
max = numbers[key]
|
||||||
|
}
|
||||||
|
})
|
||||||
|
|
||||||
|
return max
|
||||||
|
}
|
||||||
|
|
||||||
|
// Static
|
||||||
|
|
||||||
|
static _jQueryInterface(config = '') {
|
||||||
|
return this.each(function () {
|
||||||
|
let data = $(this).data(DATA_KEY)
|
||||||
|
const _options = $.extend({}, Default, $(this).data())
|
||||||
|
|
||||||
|
if (!data) {
|
||||||
|
data = new Layout($(this), _options)
|
||||||
|
$(this).data(DATA_KEY, data)
|
||||||
|
}
|
||||||
|
|
||||||
|
if (config === 'init' || config === '') {
|
||||||
|
data['_init']()
|
||||||
|
} else if (config === 'fixLayoutHeight' || config === 'fixLoginRegisterHeight') {
|
||||||
|
data[config]()
|
||||||
|
}
|
||||||
|
})
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Data API
|
||||||
|
* ====================================================
|
||||||
|
*/
|
||||||
|
|
||||||
|
$(window).on('load', () => {
|
||||||
|
Layout._jQueryInterface.call($('body'))
|
||||||
|
})
|
||||||
|
|
||||||
|
$(Selector.SIDEBAR + ' a').on('focusin', () => {
|
||||||
|
$(Selector.MAIN_SIDEBAR).addClass(ClassName.SIDEBAR_FOCUSED);
|
||||||
|
})
|
||||||
|
|
||||||
|
$(Selector.SIDEBAR + ' a').on('focusout', () => {
|
||||||
|
$(Selector.MAIN_SIDEBAR).removeClass(ClassName.SIDEBAR_FOCUSED);
|
||||||
|
})
|
||||||
|
|
||||||
|
/**
|
||||||
|
* jQuery API
|
||||||
|
* ====================================================
|
||||||
|
*/
|
||||||
|
|
||||||
|
$.fn[NAME] = Layout._jQueryInterface
|
||||||
|
$.fn[NAME].Constructor = Layout
|
||||||
|
$.fn[NAME].noConflict = function () {
|
||||||
|
$.fn[NAME] = JQUERY_NO_CONFLICT
|
||||||
|
return Layout._jQueryInterface
|
||||||
|
}
|
||||||
|
|
||||||
|
return Layout
|
||||||
|
})(jQuery)
|
||||||
|
|
||||||
|
export default Layout
|
||||||
|
|
@ -0,0 +1,225 @@
|
||||||
|
/**
|
||||||
|
* --------------------------------------------
|
||||||
|
* AdminLTE PushMenu.js
|
||||||
|
* License MIT
|
||||||
|
* --------------------------------------------
|
||||||
|
*/
|
||||||
|
|
||||||
|
const PushMenu = (($) => {
|
||||||
|
/**
|
||||||
|
* Constants
|
||||||
|
* ====================================================
|
||||||
|
*/
|
||||||
|
|
||||||
|
const NAME = 'PushMenu'
|
||||||
|
const DATA_KEY = 'lte.pushmenu'
|
||||||
|
const EVENT_KEY = `.${DATA_KEY}`
|
||||||
|
const JQUERY_NO_CONFLICT = $.fn[NAME]
|
||||||
|
|
||||||
|
const Event = {
|
||||||
|
COLLAPSED: `collapsed${EVENT_KEY}`,
|
||||||
|
SHOWN: `shown${EVENT_KEY}`
|
||||||
|
}
|
||||||
|
|
||||||
|
const Default = {
|
||||||
|
autoCollapseSize: 992,
|
||||||
|
enableRemember: false,
|
||||||
|
noTransitionAfterReload: true
|
||||||
|
}
|
||||||
|
|
||||||
|
const Selector = {
|
||||||
|
TOGGLE_BUTTON: '[data-widget="pushmenu"]',
|
||||||
|
SIDEBAR_MINI: '.sidebar-mini',
|
||||||
|
SIDEBAR_COLLAPSED: '.sidebar-collapse',
|
||||||
|
BODY: 'body',
|
||||||
|
OVERLAY: '#sidebar-overlay',
|
||||||
|
WRAPPER: '.wrapper'
|
||||||
|
}
|
||||||
|
|
||||||
|
const ClassName = {
|
||||||
|
COLLAPSED: 'sidebar-collapse',
|
||||||
|
OPEN: 'sidebar-open',
|
||||||
|
CLOSED: 'sidebar-closed'
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Class Definition
|
||||||
|
* ====================================================
|
||||||
|
*/
|
||||||
|
|
||||||
|
class PushMenu {
|
||||||
|
constructor(element, options) {
|
||||||
|
this._element = element
|
||||||
|
this._options = $.extend({}, Default, options)
|
||||||
|
|
||||||
|
if (!$(Selector.OVERLAY).length) {
|
||||||
|
this._addOverlay()
|
||||||
|
}
|
||||||
|
|
||||||
|
this._init()
|
||||||
|
}
|
||||||
|
|
||||||
|
// Public
|
||||||
|
|
||||||
|
expand() {
|
||||||
|
if (this._options.autoCollapseSize) {
|
||||||
|
if ($(window).width() <= this._options.autoCollapseSize) {
|
||||||
|
$(Selector.BODY).addClass(ClassName.OPEN)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
$(Selector.BODY).removeClass(ClassName.COLLAPSED).removeClass(ClassName.CLOSED)
|
||||||
|
|
||||||
|
if(this._options.enableRemember) {
|
||||||
|
localStorage.setItem(`remember${EVENT_KEY}`, ClassName.OPEN)
|
||||||
|
}
|
||||||
|
|
||||||
|
const shownEvent = $.Event(Event.SHOWN)
|
||||||
|
$(this._element).trigger(shownEvent)
|
||||||
|
}
|
||||||
|
|
||||||
|
collapse() {
|
||||||
|
if (this._options.autoCollapseSize) {
|
||||||
|
if ($(window).width() <= this._options.autoCollapseSize) {
|
||||||
|
$(Selector.BODY).removeClass(ClassName.OPEN).addClass(ClassName.CLOSED)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
$(Selector.BODY).addClass(ClassName.COLLAPSED)
|
||||||
|
|
||||||
|
if(this._options.enableRemember) {
|
||||||
|
localStorage.setItem(`remember${EVENT_KEY}`, ClassName.COLLAPSED)
|
||||||
|
}
|
||||||
|
|
||||||
|
const collapsedEvent = $.Event(Event.COLLAPSED)
|
||||||
|
$(this._element).trigger(collapsedEvent)
|
||||||
|
}
|
||||||
|
|
||||||
|
toggle() {
|
||||||
|
if (!$(Selector.BODY).hasClass(ClassName.COLLAPSED)) {
|
||||||
|
this.collapse()
|
||||||
|
} else {
|
||||||
|
this.expand()
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
autoCollapse(resize = false) {
|
||||||
|
if (this._options.autoCollapseSize) {
|
||||||
|
if ($(window).width() <= this._options.autoCollapseSize) {
|
||||||
|
if (!$(Selector.BODY).hasClass(ClassName.OPEN)) {
|
||||||
|
this.collapse()
|
||||||
|
}
|
||||||
|
} else if (resize == true) {
|
||||||
|
if ($(Selector.BODY).hasClass(ClassName.OPEN)) {
|
||||||
|
$(Selector.BODY).removeClass(ClassName.OPEN)
|
||||||
|
} else if($(Selector.BODY).hasClass(ClassName.CLOSED)) {
|
||||||
|
this.expand()
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
remember() {
|
||||||
|
if(this._options.enableRemember) {
|
||||||
|
let toggleState = localStorage.getItem(`remember${EVENT_KEY}`)
|
||||||
|
if (toggleState == ClassName.COLLAPSED){
|
||||||
|
if (this._options.noTransitionAfterReload) {
|
||||||
|
$("body").addClass('hold-transition').addClass(ClassName.COLLAPSED).delay(50).queue(function() {
|
||||||
|
$(this).removeClass('hold-transition')
|
||||||
|
$(this).dequeue()
|
||||||
|
})
|
||||||
|
} else {
|
||||||
|
$("body").addClass(ClassName.COLLAPSED)
|
||||||
|
}
|
||||||
|
} else {
|
||||||
|
if (this._options.noTransitionAfterReload) {
|
||||||
|
$("body").addClass('hold-transition').removeClass(ClassName.COLLAPSED).delay(50).queue(function() {
|
||||||
|
$(this).removeClass('hold-transition')
|
||||||
|
$(this).dequeue()
|
||||||
|
})
|
||||||
|
} else {
|
||||||
|
$("body").removeClass(ClassName.COLLAPSED)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
// Private
|
||||||
|
|
||||||
|
_init() {
|
||||||
|
this.remember()
|
||||||
|
this.autoCollapse()
|
||||||
|
|
||||||
|
$(window).resize(() => {
|
||||||
|
this.autoCollapse(true)
|
||||||
|
})
|
||||||
|
}
|
||||||
|
|
||||||
|
_addOverlay() {
|
||||||
|
const overlay = $('<div />', {
|
||||||
|
id: 'sidebar-overlay'
|
||||||
|
})
|
||||||
|
|
||||||
|
overlay.on('click', () => {
|
||||||
|
this.collapse()
|
||||||
|
})
|
||||||
|
|
||||||
|
$(Selector.WRAPPER).append(overlay)
|
||||||
|
}
|
||||||
|
|
||||||
|
// Static
|
||||||
|
|
||||||
|
static _jQueryInterface(operation) {
|
||||||
|
return this.each(function () {
|
||||||
|
let data = $(this).data(DATA_KEY)
|
||||||
|
const _options = $.extend({}, Default, $(this).data())
|
||||||
|
|
||||||
|
if (!data) {
|
||||||
|
data = new PushMenu(this, _options)
|
||||||
|
$(this).data(DATA_KEY, data)
|
||||||
|
}
|
||||||
|
|
||||||
|
if (typeof operation === 'string' && operation.match(/collapse|expand|toggle/)) {
|
||||||
|
data[operation]()
|
||||||
|
}
|
||||||
|
})
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Data API
|
||||||
|
* ====================================================
|
||||||
|
*/
|
||||||
|
|
||||||
|
$(document).on('click', Selector.TOGGLE_BUTTON, (event) => {
|
||||||
|
event.preventDefault()
|
||||||
|
|
||||||
|
let button = event.currentTarget
|
||||||
|
|
||||||
|
if ($(button).data('widget') !== 'pushmenu') {
|
||||||
|
button = $(button).closest(Selector.TOGGLE_BUTTON)
|
||||||
|
}
|
||||||
|
|
||||||
|
PushMenu._jQueryInterface.call($(button), 'toggle')
|
||||||
|
})
|
||||||
|
|
||||||
|
$(window).on('load', () => {
|
||||||
|
PushMenu._jQueryInterface.call($(Selector.TOGGLE_BUTTON))
|
||||||
|
})
|
||||||
|
|
||||||
|
/**
|
||||||
|
* jQuery API
|
||||||
|
* ====================================================
|
||||||
|
*/
|
||||||
|
|
||||||
|
$.fn[NAME] = PushMenu._jQueryInterface
|
||||||
|
$.fn[NAME].Constructor = PushMenu
|
||||||
|
$.fn[NAME].noConflict = function () {
|
||||||
|
$.fn[NAME] = JQUERY_NO_CONFLICT
|
||||||
|
return PushMenu._jQueryInterface
|
||||||
|
}
|
||||||
|
|
||||||
|
return PushMenu
|
||||||
|
})(jQuery)
|
||||||
|
|
||||||
|
export default PushMenu
|
||||||
|
|
@ -0,0 +1,127 @@
|
||||||
|
/**
|
||||||
|
* --------------------------------------------
|
||||||
|
* AdminLTE SiteSearch.js
|
||||||
|
* License MIT
|
||||||
|
* --------------------------------------------
|
||||||
|
*/
|
||||||
|
|
||||||
|
const SiteSearch = (($) => {
|
||||||
|
/**
|
||||||
|
* Constants
|
||||||
|
* ====================================================
|
||||||
|
*/
|
||||||
|
|
||||||
|
const NAME = 'SiteSearch'
|
||||||
|
const DATA_KEY = 'lte.site-search'
|
||||||
|
const EVENT_KEY = `.${DATA_KEY}`
|
||||||
|
const JQUERY_NO_CONFLICT = $.fn[NAME]
|
||||||
|
|
||||||
|
const Event = {}
|
||||||
|
|
||||||
|
const Selector = {
|
||||||
|
TOGGLE_BUTTON : '[data-widget="site-search"]',
|
||||||
|
SEARCH_BLOCK : '.site-search-block',
|
||||||
|
SEARCH_BACKDROP: '.site-search-backdrop',
|
||||||
|
SEARCH_INPUT : '.site-search-block .form-control'
|
||||||
|
}
|
||||||
|
|
||||||
|
const ClassName = {
|
||||||
|
OPEN: 'site-search-open'
|
||||||
|
}
|
||||||
|
|
||||||
|
const Default = {
|
||||||
|
transitionSpeed: 300
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Class Definition
|
||||||
|
* ====================================================
|
||||||
|
*/
|
||||||
|
|
||||||
|
class SiteSearch {
|
||||||
|
|
||||||
|
constructor(_element, _options) {
|
||||||
|
this.element = _element
|
||||||
|
this.options = $.extend({}, Default, _options)
|
||||||
|
}
|
||||||
|
|
||||||
|
// Public
|
||||||
|
|
||||||
|
open() {
|
||||||
|
$(Selector.SEARCH_BLOCK).slideDown(this.options.transitionSpeed)
|
||||||
|
$(Selector.SEARCH_BACKDROP).show(0)
|
||||||
|
$(Selector.SEARCH_INPUT).focus()
|
||||||
|
$(Selector.SEARCH_BLOCK).addClass(ClassName.OPEN)
|
||||||
|
}
|
||||||
|
|
||||||
|
close() {
|
||||||
|
$(Selector.SEARCH_BLOCK).slideUp(this.options.transitionSpeed)
|
||||||
|
$(Selector.SEARCH_BACKDROP).hide(0)
|
||||||
|
$(Selector.SEARCH_BLOCK).removeClass(ClassName.OPEN)
|
||||||
|
}
|
||||||
|
|
||||||
|
toggle() {
|
||||||
|
if ($(Selector.SEARCH_BLOCK).hasClass(ClassName.OPEN)) {
|
||||||
|
this.close()
|
||||||
|
} else {
|
||||||
|
this.open()
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
// Static
|
||||||
|
|
||||||
|
static _jQueryInterface(options) {
|
||||||
|
return this.each(function () {
|
||||||
|
let data = $(this).data(DATA_KEY)
|
||||||
|
|
||||||
|
if (!data) {
|
||||||
|
data = new SiteSearch(this, options)
|
||||||
|
$(this).data(DATA_KEY, data)
|
||||||
|
}
|
||||||
|
|
||||||
|
if (!/toggle|close/.test(options)) {
|
||||||
|
throw Error(`Undefined method ${options}`)
|
||||||
|
}
|
||||||
|
|
||||||
|
data[options]()
|
||||||
|
})
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Data API
|
||||||
|
* ====================================================
|
||||||
|
*/
|
||||||
|
$(document).on('click', Selector.TOGGLE_BUTTON, (event) => {
|
||||||
|
event.preventDefault()
|
||||||
|
|
||||||
|
let button = $(event.currentTarget)
|
||||||
|
|
||||||
|
if (button.data('widget') !== 'site-search') {
|
||||||
|
button = button.closest(Selector.TOGGLE_BUTTON)
|
||||||
|
}
|
||||||
|
|
||||||
|
SiteSearch._jQueryInterface.call(button, 'toggle')
|
||||||
|
})
|
||||||
|
|
||||||
|
$(document).on('click', Selector.SEARCH_BACKDROP, (event) => {
|
||||||
|
const backdrop = $(event.currentTarget)
|
||||||
|
SiteSearch._jQueryInterface.call(backdrop, 'close')
|
||||||
|
})
|
||||||
|
|
||||||
|
/**
|
||||||
|
* jQuery API
|
||||||
|
* ====================================================
|
||||||
|
*/
|
||||||
|
|
||||||
|
$.fn[NAME] = SiteSearch._jQueryInterface
|
||||||
|
$.fn[NAME].Constructor = SiteSearch
|
||||||
|
$.fn[NAME].noConflict = function () {
|
||||||
|
$.fn[NAME] = JQUERY_NO_CONFLICT
|
||||||
|
return SiteSearch._jQueryInterface
|
||||||
|
}
|
||||||
|
|
||||||
|
return SiteSearch
|
||||||
|
})(jQuery)
|
||||||
|
|
||||||
|
export default SiteSearch
|
||||||
|
|
@ -0,0 +1,229 @@
|
||||||
|
/**
|
||||||
|
* --------------------------------------------
|
||||||
|
* AdminLTE Toasts.js
|
||||||
|
* License MIT
|
||||||
|
* --------------------------------------------
|
||||||
|
*/
|
||||||
|
|
||||||
|
const Toasts = (($) => {
|
||||||
|
/**
|
||||||
|
* Constants
|
||||||
|
* ====================================================
|
||||||
|
*/
|
||||||
|
|
||||||
|
const NAME = 'Toasts'
|
||||||
|
const DATA_KEY = 'lte.toasts'
|
||||||
|
const EVENT_KEY = `.${DATA_KEY}`
|
||||||
|
const JQUERY_NO_CONFLICT = $.fn[NAME]
|
||||||
|
|
||||||
|
const Event = {
|
||||||
|
INIT: `init${EVENT_KEY}`,
|
||||||
|
CREATED: `created${EVENT_KEY}`,
|
||||||
|
REMOVED: `removed${EVENT_KEY}`,
|
||||||
|
}
|
||||||
|
|
||||||
|
const Selector = {
|
||||||
|
BODY: 'toast-body',
|
||||||
|
CONTAINER_TOP_RIGHT: '#toastsContainerTopRight',
|
||||||
|
CONTAINER_TOP_LEFT: '#toastsContainerTopLeft',
|
||||||
|
CONTAINER_BOTTOM_RIGHT: '#toastsContainerBottomRight',
|
||||||
|
CONTAINER_BOTTOM_LEFT: '#toastsContainerBottomLeft',
|
||||||
|
}
|
||||||
|
|
||||||
|
const ClassName = {
|
||||||
|
TOP_RIGHT: 'toasts-top-right',
|
||||||
|
TOP_LEFT: 'toasts-top-left',
|
||||||
|
BOTTOM_RIGHT: 'toasts-bottom-right',
|
||||||
|
BOTTOM_LEFT: 'toasts-bottom-left',
|
||||||
|
FADE: 'fade',
|
||||||
|
}
|
||||||
|
|
||||||
|
const Position = {
|
||||||
|
TOP_RIGHT: 'topRight',
|
||||||
|
TOP_LEFT: 'topLeft',
|
||||||
|
BOTTOM_RIGHT: 'bottomRight',
|
||||||
|
BOTTOM_LEFT: 'bottomLeft',
|
||||||
|
}
|
||||||
|
|
||||||
|
const Id = {
|
||||||
|
CONTAINER_TOP_RIGHT: 'toastsContainerTopRight',
|
||||||
|
CONTAINER_TOP_LEFT: 'toastsContainerTopLeft',
|
||||||
|
CONTAINER_BOTTOM_RIGHT: 'toastsContainerBottomRight',
|
||||||
|
CONTAINER_BOTTOM_LEFT: 'toastsContainerBottomLeft',
|
||||||
|
}
|
||||||
|
|
||||||
|
const Default = {
|
||||||
|
position: Position.TOP_RIGHT,
|
||||||
|
fixed: true,
|
||||||
|
autohide: false,
|
||||||
|
autoremove: true,
|
||||||
|
delay: 1000,
|
||||||
|
fade: true,
|
||||||
|
icon: null,
|
||||||
|
image: null,
|
||||||
|
imageAlt: null,
|
||||||
|
imageHeight: '25px',
|
||||||
|
title: null,
|
||||||
|
subtitle: null,
|
||||||
|
close: true,
|
||||||
|
body: null,
|
||||||
|
class: null,
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Class Definition
|
||||||
|
* ====================================================
|
||||||
|
*/
|
||||||
|
class Toasts {
|
||||||
|
constructor(element, config) {
|
||||||
|
this._config = config
|
||||||
|
|
||||||
|
this._prepareContainer();
|
||||||
|
|
||||||
|
const initEvent = $.Event(Event.INIT)
|
||||||
|
$('body').trigger(initEvent)
|
||||||
|
}
|
||||||
|
|
||||||
|
// Public
|
||||||
|
|
||||||
|
create() {
|
||||||
|
var toast = $('<div class="toast" role="alert" aria-live="assertive" aria-atomic="true"/>')
|
||||||
|
|
||||||
|
toast.data('autohide', this._config.autohide)
|
||||||
|
toast.data('animation', this._config.fade)
|
||||||
|
|
||||||
|
if (this._config.class) {
|
||||||
|
toast.addClass(this._config.class)
|
||||||
|
}
|
||||||
|
|
||||||
|
if (this._config.delay && this._config.delay != 500) {
|
||||||
|
toast.data('delay', this._config.delay)
|
||||||
|
}
|
||||||
|
|
||||||
|
var toast_header = $('<div class="toast-header">')
|
||||||
|
|
||||||
|
if (this._config.image != null) {
|
||||||
|
var toast_image = $('<img />').addClass('rounded mr-2').attr('src', this._config.image).attr('alt', this._config.imageAlt)
|
||||||
|
|
||||||
|
if (this._config.imageHeight != null) {
|
||||||
|
toast_image.height(this._config.imageHeight).width('auto')
|
||||||
|
}
|
||||||
|
|
||||||
|
toast_header.append(toast_image)
|
||||||
|
}
|
||||||
|
|
||||||
|
if (this._config.icon != null) {
|
||||||
|
toast_header.append($('<i />').addClass('mr-2').addClass(this._config.icon))
|
||||||
|
}
|
||||||
|
|
||||||
|
if (this._config.title != null) {
|
||||||
|
toast_header.append($('<strong />').addClass('mr-auto').html(this._config.title))
|
||||||
|
}
|
||||||
|
|
||||||
|
if (this._config.subtitle != null) {
|
||||||
|
toast_header.append($('<small />').html(this._config.subtitle))
|
||||||
|
}
|
||||||
|
|
||||||
|
if (this._config.close == true) {
|
||||||
|
var toast_close = $('<button data-dismiss="toast" />').attr('type', 'button').addClass('ml-2 mb-1 close').attr('aria-label', 'Close').append('<span aria-hidden="true">×</span>')
|
||||||
|
|
||||||
|
if (this._config.title == null) {
|
||||||
|
toast_close.toggleClass('ml-2 ml-auto')
|
||||||
|
}
|
||||||
|
|
||||||
|
toast_header.append(toast_close)
|
||||||
|
}
|
||||||
|
|
||||||
|
toast.append(toast_header)
|
||||||
|
|
||||||
|
if (this._config.body != null) {
|
||||||
|
toast.append($('<div class="toast-body" />').html(this._config.body))
|
||||||
|
}
|
||||||
|
|
||||||
|
$(this._getContainerId()).prepend(toast)
|
||||||
|
|
||||||
|
const createdEvent = $.Event(Event.CREATED)
|
||||||
|
$('body').trigger(createdEvent)
|
||||||
|
|
||||||
|
toast.toast('show')
|
||||||
|
|
||||||
|
|
||||||
|
if (this._config.autoremove) {
|
||||||
|
toast.on('hidden.bs.toast', function () {
|
||||||
|
$(this).delay(200).remove();
|
||||||
|
|
||||||
|
const removedEvent = $.Event(Event.REMOVED)
|
||||||
|
$('body').trigger(removedEvent)
|
||||||
|
})
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
// Static
|
||||||
|
|
||||||
|
_getContainerId() {
|
||||||
|
if (this._config.position == Position.TOP_RIGHT) {
|
||||||
|
return Selector.CONTAINER_TOP_RIGHT;
|
||||||
|
} else if (this._config.position == Position.TOP_LEFT) {
|
||||||
|
return Selector.CONTAINER_TOP_LEFT;
|
||||||
|
} else if (this._config.position == Position.BOTTOM_RIGHT) {
|
||||||
|
return Selector.CONTAINER_BOTTOM_RIGHT;
|
||||||
|
} else if (this._config.position == Position.BOTTOM_LEFT) {
|
||||||
|
return Selector.CONTAINER_BOTTOM_LEFT;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
_prepareContainer() {
|
||||||
|
if ($(this._getContainerId()).length === 0) {
|
||||||
|
var container = $('<div />').attr('id', this._getContainerId().replace('#', ''))
|
||||||
|
if (this._config.position == Position.TOP_RIGHT) {
|
||||||
|
container.addClass(ClassName.TOP_RIGHT)
|
||||||
|
} else if (this._config.position == Position.TOP_LEFT) {
|
||||||
|
container.addClass(ClassName.TOP_LEFT)
|
||||||
|
} else if (this._config.position == Position.BOTTOM_RIGHT) {
|
||||||
|
container.addClass(ClassName.BOTTOM_RIGHT)
|
||||||
|
} else if (this._config.position == Position.BOTTOM_LEFT) {
|
||||||
|
container.addClass(ClassName.BOTTOM_LEFT)
|
||||||
|
}
|
||||||
|
|
||||||
|
$('body').append(container)
|
||||||
|
}
|
||||||
|
|
||||||
|
if (this._config.fixed) {
|
||||||
|
$(this._getContainerId()).addClass('fixed')
|
||||||
|
} else {
|
||||||
|
$(this._getContainerId()).removeClass('fixed')
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
// Static
|
||||||
|
|
||||||
|
static _jQueryInterface(option, config) {
|
||||||
|
return this.each(function () {
|
||||||
|
const _options = $.extend({}, Default, config)
|
||||||
|
var toast = new Toasts($(this), _options)
|
||||||
|
|
||||||
|
if (option === 'create') {
|
||||||
|
toast[option]()
|
||||||
|
}
|
||||||
|
})
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* jQuery API
|
||||||
|
* ====================================================
|
||||||
|
*/
|
||||||
|
|
||||||
|
$.fn[NAME] = Toasts._jQueryInterface
|
||||||
|
$.fn[NAME].Constructor = Toasts
|
||||||
|
$.fn[NAME].noConflict = function () {
|
||||||
|
$.fn[NAME] = JQUERY_NO_CONFLICT
|
||||||
|
return Toasts._jQueryInterface
|
||||||
|
}
|
||||||
|
|
||||||
|
return Toasts
|
||||||
|
})(jQuery)
|
||||||
|
|
||||||
|
export default Toasts
|
||||||
|
|
@ -0,0 +1,122 @@
|
||||||
|
/**
|
||||||
|
* --------------------------------------------
|
||||||
|
* AdminLTE TodoList.js
|
||||||
|
* License MIT
|
||||||
|
* --------------------------------------------
|
||||||
|
*/
|
||||||
|
|
||||||
|
const TodoList = (($) => {
|
||||||
|
/**
|
||||||
|
* Constants
|
||||||
|
* ====================================================
|
||||||
|
*/
|
||||||
|
|
||||||
|
const NAME = 'TodoList'
|
||||||
|
const DATA_KEY = 'lte.todolist'
|
||||||
|
const EVENT_KEY = `.${DATA_KEY}`
|
||||||
|
const JQUERY_NO_CONFLICT = $.fn[NAME]
|
||||||
|
|
||||||
|
const Selector = {
|
||||||
|
DATA_TOGGLE: '[data-widget="todo-list"]'
|
||||||
|
}
|
||||||
|
|
||||||
|
const ClassName = {
|
||||||
|
TODO_LIST_DONE: 'done'
|
||||||
|
}
|
||||||
|
|
||||||
|
const Default = {
|
||||||
|
onCheck: function (item) {
|
||||||
|
return item;
|
||||||
|
},
|
||||||
|
onUnCheck: function (item) {
|
||||||
|
return item;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Class Definition
|
||||||
|
* ====================================================
|
||||||
|
*/
|
||||||
|
|
||||||
|
class TodoList {
|
||||||
|
constructor(element, config) {
|
||||||
|
this._config = config
|
||||||
|
this._element = element
|
||||||
|
|
||||||
|
this._init()
|
||||||
|
}
|
||||||
|
|
||||||
|
// Public
|
||||||
|
|
||||||
|
toggle(item) {
|
||||||
|
item.parents('li').toggleClass(ClassName.TODO_LIST_DONE);
|
||||||
|
if (! $(item).prop('checked')) {
|
||||||
|
this.unCheck($(item));
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
this.check(item);
|
||||||
|
}
|
||||||
|
|
||||||
|
check (item) {
|
||||||
|
this._config.onCheck.call(item);
|
||||||
|
}
|
||||||
|
|
||||||
|
unCheck (item) {
|
||||||
|
this._config.onUnCheck.call(item);
|
||||||
|
}
|
||||||
|
|
||||||
|
// Private
|
||||||
|
|
||||||
|
_init() {
|
||||||
|
var that = this
|
||||||
|
$(Selector.DATA_TOGGLE).find('input:checkbox:checked').parents('li').toggleClass(ClassName.TODO_LIST_DONE)
|
||||||
|
$(Selector.DATA_TOGGLE).on('change', 'input:checkbox', (event) => {
|
||||||
|
that.toggle($(event.target))
|
||||||
|
})
|
||||||
|
}
|
||||||
|
|
||||||
|
// Static
|
||||||
|
|
||||||
|
static _jQueryInterface(config) {
|
||||||
|
return this.each(function () {
|
||||||
|
let data = $(this).data(DATA_KEY)
|
||||||
|
const _options = $.extend({}, Default, $(this).data())
|
||||||
|
|
||||||
|
if (!data) {
|
||||||
|
data = new TodoList($(this), _options)
|
||||||
|
$(this).data(DATA_KEY, data)
|
||||||
|
}
|
||||||
|
|
||||||
|
if (config === 'init') {
|
||||||
|
data[config]()
|
||||||
|
}
|
||||||
|
})
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Data API
|
||||||
|
* ====================================================
|
||||||
|
*/
|
||||||
|
|
||||||
|
$(window).on('load', () => {
|
||||||
|
TodoList._jQueryInterface.call($(Selector.DATA_TOGGLE))
|
||||||
|
})
|
||||||
|
|
||||||
|
/**
|
||||||
|
* jQuery API
|
||||||
|
* ====================================================
|
||||||
|
*/
|
||||||
|
|
||||||
|
$.fn[NAME] = TodoList._jQueryInterface
|
||||||
|
$.fn[NAME].Constructor = TodoList
|
||||||
|
$.fn[NAME].noConflict = function () {
|
||||||
|
$.fn[NAME] = JQUERY_NO_CONFLICT
|
||||||
|
return TodoList._jQueryInterface
|
||||||
|
}
|
||||||
|
|
||||||
|
return TodoList
|
||||||
|
})(jQuery)
|
||||||
|
|
||||||
|
export default TodoList
|
||||||
|
|
@ -0,0 +1,185 @@
|
||||||
|
/**
|
||||||
|
* --------------------------------------------
|
||||||
|
* AdminLTE Treeview.js
|
||||||
|
* License MIT
|
||||||
|
* --------------------------------------------
|
||||||
|
*/
|
||||||
|
|
||||||
|
const Treeview = (($) => {
|
||||||
|
/**
|
||||||
|
* Constants
|
||||||
|
* ====================================================
|
||||||
|
*/
|
||||||
|
|
||||||
|
const NAME = 'Treeview'
|
||||||
|
const DATA_KEY = 'lte.treeview'
|
||||||
|
const EVENT_KEY = `.${DATA_KEY}`
|
||||||
|
const JQUERY_NO_CONFLICT = $.fn[NAME]
|
||||||
|
|
||||||
|
const Event = {
|
||||||
|
SELECTED : `selected${EVENT_KEY}`,
|
||||||
|
EXPANDED : `expanded${EVENT_KEY}`,
|
||||||
|
COLLAPSED : `collapsed${EVENT_KEY}`,
|
||||||
|
LOAD_DATA_API: `load${EVENT_KEY}`
|
||||||
|
}
|
||||||
|
|
||||||
|
const Selector = {
|
||||||
|
LI : '.nav-item',
|
||||||
|
LINK : '.nav-link',
|
||||||
|
TREEVIEW_MENU: '.nav-treeview',
|
||||||
|
OPEN : '.menu-open',
|
||||||
|
DATA_WIDGET : '[data-widget="treeview"]'
|
||||||
|
}
|
||||||
|
|
||||||
|
const ClassName = {
|
||||||
|
LI : 'nav-item',
|
||||||
|
LINK : 'nav-link',
|
||||||
|
TREEVIEW_MENU : 'nav-treeview',
|
||||||
|
OPEN : 'menu-open',
|
||||||
|
SIDEBAR_COLLAPSED: 'sidebar-collapse'
|
||||||
|
}
|
||||||
|
|
||||||
|
const Default = {
|
||||||
|
trigger : `${Selector.DATA_WIDGET} ${Selector.LINK}`,
|
||||||
|
animationSpeed : 300,
|
||||||
|
accordion : true,
|
||||||
|
expandSidebar : false,
|
||||||
|
sidebarButtonSelector: '[data-widget="pushmenu"]'
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Class Definition
|
||||||
|
* ====================================================
|
||||||
|
*/
|
||||||
|
class Treeview {
|
||||||
|
constructor(element, config) {
|
||||||
|
this._config = config
|
||||||
|
this._element = element
|
||||||
|
}
|
||||||
|
|
||||||
|
// Public
|
||||||
|
|
||||||
|
init() {
|
||||||
|
this._setupListeners()
|
||||||
|
}
|
||||||
|
|
||||||
|
expand(treeviewMenu, parentLi) {
|
||||||
|
const expandedEvent = $.Event(Event.EXPANDED)
|
||||||
|
|
||||||
|
if (this._config.accordion) {
|
||||||
|
const openMenuLi = parentLi.siblings(Selector.OPEN).first()
|
||||||
|
const openTreeview = openMenuLi.find(Selector.TREEVIEW_MENU).first()
|
||||||
|
this.collapse(openTreeview, openMenuLi)
|
||||||
|
}
|
||||||
|
|
||||||
|
treeviewMenu.stop().slideDown(this._config.animationSpeed, () => {
|
||||||
|
parentLi.addClass(ClassName.OPEN)
|
||||||
|
$(this._element).trigger(expandedEvent)
|
||||||
|
})
|
||||||
|
|
||||||
|
if (this._config.expandSidebar) {
|
||||||
|
this._expandSidebar()
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
collapse(treeviewMenu, parentLi) {
|
||||||
|
const collapsedEvent = $.Event(Event.COLLAPSED)
|
||||||
|
|
||||||
|
treeviewMenu.stop().slideUp(this._config.animationSpeed, () => {
|
||||||
|
parentLi.removeClass(ClassName.OPEN)
|
||||||
|
$(this._element).trigger(collapsedEvent)
|
||||||
|
treeviewMenu.find(`${Selector.OPEN} > ${Selector.TREEVIEW_MENU}`).slideUp()
|
||||||
|
treeviewMenu.find(Selector.OPEN).removeClass(ClassName.OPEN)
|
||||||
|
})
|
||||||
|
}
|
||||||
|
|
||||||
|
toggle(event) {
|
||||||
|
|
||||||
|
const $relativeTarget = $(event.currentTarget)
|
||||||
|
const $parent = $relativeTarget.parent()
|
||||||
|
|
||||||
|
let treeviewMenu = $parent.find('> ' + Selector.TREEVIEW_MENU)
|
||||||
|
|
||||||
|
if (!treeviewMenu.is(Selector.TREEVIEW_MENU)) {
|
||||||
|
|
||||||
|
if (!$parent.is(Selector.LI)) {
|
||||||
|
treeviewMenu = $parent.parent().find('> ' + Selector.TREEVIEW_MENU)
|
||||||
|
}
|
||||||
|
|
||||||
|
if (!treeviewMenu.is(Selector.TREEVIEW_MENU)) {
|
||||||
|
return
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
event.preventDefault()
|
||||||
|
|
||||||
|
const parentLi = $relativeTarget.parents(Selector.LI).first()
|
||||||
|
const isOpen = parentLi.hasClass(ClassName.OPEN)
|
||||||
|
|
||||||
|
if (isOpen) {
|
||||||
|
this.collapse($(treeviewMenu), parentLi)
|
||||||
|
} else {
|
||||||
|
this.expand($(treeviewMenu), parentLi)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
// Private
|
||||||
|
|
||||||
|
_setupListeners() {
|
||||||
|
$(document).on('click', this._config.trigger, (event) => {
|
||||||
|
this.toggle(event)
|
||||||
|
})
|
||||||
|
}
|
||||||
|
|
||||||
|
_expandSidebar() {
|
||||||
|
if ($('body').hasClass(ClassName.SIDEBAR_COLLAPSED)) {
|
||||||
|
$(this._config.sidebarButtonSelector).PushMenu('expand')
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
// Static
|
||||||
|
|
||||||
|
static _jQueryInterface(config) {
|
||||||
|
return this.each(function () {
|
||||||
|
let data = $(this).data(DATA_KEY)
|
||||||
|
const _options = $.extend({}, Default, $(this).data())
|
||||||
|
|
||||||
|
if (!data) {
|
||||||
|
data = new Treeview($(this), _options)
|
||||||
|
$(this).data(DATA_KEY, data)
|
||||||
|
}
|
||||||
|
|
||||||
|
if (config === 'init') {
|
||||||
|
data[config]()
|
||||||
|
}
|
||||||
|
})
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Data API
|
||||||
|
* ====================================================
|
||||||
|
*/
|
||||||
|
|
||||||
|
$(window).on(Event.LOAD_DATA_API, () => {
|
||||||
|
$(Selector.DATA_WIDGET).each(function () {
|
||||||
|
Treeview._jQueryInterface.call($(this), 'init')
|
||||||
|
})
|
||||||
|
})
|
||||||
|
|
||||||
|
/**
|
||||||
|
* jQuery API
|
||||||
|
* ====================================================
|
||||||
|
*/
|
||||||
|
|
||||||
|
$.fn[NAME] = Treeview._jQueryInterface
|
||||||
|
$.fn[NAME].Constructor = Treeview
|
||||||
|
$.fn[NAME].noConflict = function () {
|
||||||
|
$.fn[NAME] = JQUERY_NO_CONFLICT
|
||||||
|
return Treeview._jQueryInterface
|
||||||
|
}
|
||||||
|
|
||||||
|
return Treeview
|
||||||
|
})(jQuery)
|
||||||
|
|
||||||
|
export default Treeview
|
||||||
|
|
@ -0,0 +1,23 @@
|
||||||
|
{
|
||||||
|
"adjoining-classes": false,
|
||||||
|
"box-sizing": false,
|
||||||
|
"box-model": false,
|
||||||
|
"compatible-vendor-prefixes": false,
|
||||||
|
"floats": false,
|
||||||
|
"font-sizes": false,
|
||||||
|
"gradients": false,
|
||||||
|
"important": false,
|
||||||
|
"known-properties": false,
|
||||||
|
"outline-none": false,
|
||||||
|
"qualified-headings": false,
|
||||||
|
"regex-selectors": false,
|
||||||
|
"shorthand": false,
|
||||||
|
"text-indent": false,
|
||||||
|
"unique-headings": false,
|
||||||
|
"universal-selector": false,
|
||||||
|
"unqualified-attributes": false,
|
||||||
|
"ids": false,
|
||||||
|
"fallback-colors": false,
|
||||||
|
"vendor-prefix": false,
|
||||||
|
"import": false
|
||||||
|
}
|
||||||
|
|
@ -0,0 +1,20 @@
|
||||||
|
/*!
|
||||||
|
* AdminLTE v3.0.4
|
||||||
|
* Only Components
|
||||||
|
* Author: Colorlib
|
||||||
|
* Website: AdminLTE.io <http://adminlte.io>
|
||||||
|
* License: Open source - MIT <http://opensource.org/licenses/MIT>
|
||||||
|
*/
|
||||||
|
// Bootstrap
|
||||||
|
// ---------------------------------------------------
|
||||||
|
@import '~bootstrap/scss/functions';
|
||||||
|
@import 'bootstrap-variables';
|
||||||
|
@import '~bootstrap/scss/mixins';
|
||||||
|
// @import '~bootstrap/scss/bootstrap';
|
||||||
|
|
||||||
|
// Variables and Mixins
|
||||||
|
// ---------------------------------------------------
|
||||||
|
@import 'variables';
|
||||||
|
@import 'mixins';
|
||||||
|
|
||||||
|
@import 'parts/components';
|
||||||
|
|
@ -0,0 +1,20 @@
|
||||||
|
/*!
|
||||||
|
* AdminLTE v3.0.4
|
||||||
|
* Only Core
|
||||||
|
* Author: Colorlib
|
||||||
|
* Website: AdminLTE.io <http://adminlte.io>
|
||||||
|
* License: Open source - MIT <http://opensource.org/licenses/MIT>
|
||||||
|
*/
|
||||||
|
// Bootstrap
|
||||||
|
// ---------------------------------------------------
|
||||||
|
@import '~bootstrap/scss/functions';
|
||||||
|
@import 'bootstrap-variables';
|
||||||
|
@import '~bootstrap/scss/bootstrap';
|
||||||
|
|
||||||
|
// Variables and Mixins
|
||||||
|
// ---------------------------------------------------
|
||||||
|
@import 'variables';
|
||||||
|
@import 'mixins';
|
||||||
|
|
||||||
|
@import 'parts/core';
|
||||||
|
@import 'parts/miscellaneous';
|
||||||
|
|
@ -0,0 +1,20 @@
|
||||||
|
/*!
|
||||||
|
* AdminLTE v3.0.4
|
||||||
|
* Only Extra Components
|
||||||
|
* Author: Colorlib
|
||||||
|
* Website: AdminLTE.io <http://adminlte.io>
|
||||||
|
* License: Open source - MIT <http://opensource.org/licenses/MIT>
|
||||||
|
*/
|
||||||
|
// Bootstrap
|
||||||
|
// ---------------------------------------------------
|
||||||
|
@import '~bootstrap/scss/functions';
|
||||||
|
@import 'bootstrap-variables';
|
||||||
|
@import '~bootstrap/scss/mixins';
|
||||||
|
// @import '~bootstrap/scss/bootstrap';
|
||||||
|
|
||||||
|
// Variables and Mixins
|
||||||
|
// ---------------------------------------------------
|
||||||
|
@import 'variables';
|
||||||
|
@import 'mixins';
|
||||||
|
|
||||||
|
@import 'parts/extra-components';
|
||||||
|
|
@ -0,0 +1,20 @@
|
||||||
|
/*!
|
||||||
|
* AdminLTE v3.0.4
|
||||||
|
* Only Pages
|
||||||
|
* Author: Colorlib
|
||||||
|
* Website: AdminLTE.io <http://adminlte.io>
|
||||||
|
* License: Open source - MIT <http://opensource.org/licenses/MIT>
|
||||||
|
*/
|
||||||
|
// Bootstrap
|
||||||
|
// ---------------------------------------------------
|
||||||
|
@import '~bootstrap/scss/functions';
|
||||||
|
@import 'bootstrap-variables';
|
||||||
|
@import '~bootstrap/scss/mixins';
|
||||||
|
@import '~bootstrap/scss/close';
|
||||||
|
|
||||||
|
// Variables and Mixins
|
||||||
|
// ---------------------------------------------------
|
||||||
|
@import 'variables';
|
||||||
|
@import 'mixins';
|
||||||
|
|
||||||
|
@import 'parts/pages';
|
||||||
|
|
@ -0,0 +1,20 @@
|
||||||
|
/*!
|
||||||
|
* AdminLTE v3.0.4
|
||||||
|
* Only Plugins
|
||||||
|
* Author: Colorlib
|
||||||
|
* Website: AdminLTE.io <http://adminlte.io>
|
||||||
|
* License: Open source - MIT <http://opensource.org/licenses/MIT>
|
||||||
|
*/
|
||||||
|
// Bootstrap
|
||||||
|
// ---------------------------------------------------
|
||||||
|
@import '~bootstrap/scss/functions';
|
||||||
|
@import 'bootstrap-variables';
|
||||||
|
@import '~bootstrap/scss/mixins';
|
||||||
|
// @import '~bootstrap/scss/bootstrap';
|
||||||
|
|
||||||
|
// Variables and Mixins
|
||||||
|
// ---------------------------------------------------
|
||||||
|
@import 'variables';
|
||||||
|
@import 'mixins';
|
||||||
|
|
||||||
|
@import 'parts/plugins';
|
||||||
|
|
@ -0,0 +1,27 @@
|
||||||
|
/*!
|
||||||
|
* AdminLTE v3.0.4
|
||||||
|
* Author: Colorlib
|
||||||
|
* Website: AdminLTE.io <http://adminlte.io>
|
||||||
|
* License: Open source - MIT <http://opensource.org/licenses/MIT>
|
||||||
|
*/
|
||||||
|
//
|
||||||
|
// ------------------------------------------------------------------
|
||||||
|
// This file is to be included in your custom SCSS. Before importing
|
||||||
|
// this file, you should include your custom AdminLTE and Bootstrap
|
||||||
|
// variables followed by bootstrap.scss and then this file. It's
|
||||||
|
// ok to import this file without custom variables too!
|
||||||
|
// NOTE: be sure to keep the license notice in the generated css.
|
||||||
|
// ------------------------------------------------------------------
|
||||||
|
//
|
||||||
|
// Variables and Mixins
|
||||||
|
// ---------------------------------------------------
|
||||||
|
@import 'bootstrap-variables';
|
||||||
|
@import 'variables';
|
||||||
|
@import 'mixins';
|
||||||
|
|
||||||
|
@import 'parts/core';
|
||||||
|
@import 'parts/components';
|
||||||
|
@import 'parts/extra-components';
|
||||||
|
@import 'parts/pages';
|
||||||
|
@import 'parts/plugins';
|
||||||
|
@import 'parts/miscellaneous';
|
||||||
|
|
@ -0,0 +1,24 @@
|
||||||
|
/*!
|
||||||
|
* AdminLTE v3.0.4
|
||||||
|
* Author: Colorlib
|
||||||
|
* Website: AdminLTE.io <http://adminlte.io>
|
||||||
|
* License: Open source - MIT <http://opensource.org/licenses/MIT>
|
||||||
|
*/
|
||||||
|
// Bootstrap
|
||||||
|
// ---------------------------------------------------
|
||||||
|
@import '../../dcat/sass/variables/variables';
|
||||||
|
@import '../../sass/bootstrap';
|
||||||
|
@import '../../sass/bootstrap-extended';
|
||||||
|
|
||||||
|
// Variables and Mixins
|
||||||
|
// ---------------------------------------------------
|
||||||
|
@import 'variables';
|
||||||
|
@import 'mixins';
|
||||||
|
|
||||||
|
@import 'parts/core';
|
||||||
|
@import 'parts/components';
|
||||||
|
@import 'parts/extra-components';
|
||||||
|
@import 'parts/pages';
|
||||||
|
@import 'parts/plugins';
|
||||||
|
@import 'parts/miscellaneous';
|
||||||
|
|
||||||
|
|
@ -0,0 +1,36 @@
|
||||||
|
//
|
||||||
|
// Component: Alert
|
||||||
|
//
|
||||||
|
|
||||||
|
.alert {
|
||||||
|
.icon {
|
||||||
|
margin-right: 10px;
|
||||||
|
}
|
||||||
|
|
||||||
|
.close {
|
||||||
|
color: $black;
|
||||||
|
opacity: .2;
|
||||||
|
|
||||||
|
&:hover {
|
||||||
|
opacity: .5;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
a {
|
||||||
|
color: $white;
|
||||||
|
text-decoration: underline;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
//Alert Variants
|
||||||
|
@each $color, $value in $theme-colors {
|
||||||
|
.alert-#{$color} {
|
||||||
|
color: color-yiq($value);
|
||||||
|
background: $value;
|
||||||
|
border-color: darken($value, 5%);
|
||||||
|
}
|
||||||
|
|
||||||
|
.alert-default-#{$color} {
|
||||||
|
@include alert-variant(theme-color-level($color, $alert-bg-level), theme-color-level($color, $alert-border-level), theme-color-level($color, $alert-color-level));
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
@ -0,0 +1,910 @@
|
||||||
|
// Variables
|
||||||
|
//
|
||||||
|
// Variables should follow the `$component-state-property-size` formula for
|
||||||
|
// consistent naming. Ex: $nav-link-disabled-color and $modal-content-box-shadow-xs.
|
||||||
|
|
||||||
|
|
||||||
|
//
|
||||||
|
// Color system
|
||||||
|
//
|
||||||
|
|
||||||
|
// stylelint-disable
|
||||||
|
$white: #ffffff !default;
|
||||||
|
$gray-100: #f8f9fa !default;
|
||||||
|
$gray-200: #e9ecef !default;
|
||||||
|
$gray-300: #dee2e6 !default;
|
||||||
|
$gray-400: #ced4da !default;
|
||||||
|
$gray-500: #adb5bd !default;
|
||||||
|
$gray-600: #6c757d !default;
|
||||||
|
$gray-700: #495057 !default;
|
||||||
|
$gray-800: #343a40 !default;
|
||||||
|
$gray-900: #212529 !default;
|
||||||
|
$black: #000 !default;
|
||||||
|
|
||||||
|
$grays: () !default;
|
||||||
|
$grays: map-merge((
|
||||||
|
"100": $gray-100,
|
||||||
|
"200": $gray-200,
|
||||||
|
"300": $gray-300,
|
||||||
|
"400": $gray-400,
|
||||||
|
"500": $gray-500,
|
||||||
|
"600": $gray-600,
|
||||||
|
"700": $gray-700,
|
||||||
|
"800": $gray-800,
|
||||||
|
"900": $gray-900
|
||||||
|
), $grays);
|
||||||
|
|
||||||
|
$blue: #007bff !default;
|
||||||
|
$indigo: #6610f2 !default;
|
||||||
|
$purple: #6f42c1 !default;
|
||||||
|
$pink: #e83e8c !default;
|
||||||
|
$red: #dc3545 !default;
|
||||||
|
$orange: #fd7e14 !default;
|
||||||
|
$yellow: #ffc107 !default;
|
||||||
|
$green: #28a745 !default;
|
||||||
|
$teal: #20c997 !default;
|
||||||
|
$cyan: #17a2b8 !default;
|
||||||
|
|
||||||
|
$colors: () !default;
|
||||||
|
$colors: map-merge((
|
||||||
|
"blue": $blue,
|
||||||
|
"indigo": $indigo,
|
||||||
|
"purple": $purple,
|
||||||
|
"pink": $pink,
|
||||||
|
"red": $red,
|
||||||
|
"orange": $orange,
|
||||||
|
"yellow": $yellow,
|
||||||
|
"green": $green,
|
||||||
|
"teal": $teal,
|
||||||
|
"cyan": $cyan,
|
||||||
|
"white": $white,
|
||||||
|
"gray": $gray-600,
|
||||||
|
"gray-dark": $gray-800
|
||||||
|
), $colors);
|
||||||
|
|
||||||
|
$primary: $blue !default;
|
||||||
|
$secondary: $gray-600 !default;
|
||||||
|
$success: $green !default;
|
||||||
|
$info: $cyan !default;
|
||||||
|
$warning: $yellow !default;
|
||||||
|
$danger: $red !default;
|
||||||
|
$light: $gray-100 !default;
|
||||||
|
$dark: $gray-800 !default;
|
||||||
|
|
||||||
|
$theme-colors: () !default;
|
||||||
|
$theme-colors: map-merge((
|
||||||
|
"primary": $primary,
|
||||||
|
"secondary": $secondary,
|
||||||
|
"success": $success,
|
||||||
|
"info": $info,
|
||||||
|
"warning": $warning,
|
||||||
|
"danger": $danger,
|
||||||
|
"light": $light,
|
||||||
|
"dark": $dark
|
||||||
|
), $theme-colors);
|
||||||
|
// stylelint-enable
|
||||||
|
|
||||||
|
// Set a specific jump point for requesting color jumps
|
||||||
|
$theme-color-interval: 8% !default;
|
||||||
|
|
||||||
|
// The yiq lightness value that determines when the lightness of color changes from "dark" to "light". Acceptable values are between 0 and 255.
|
||||||
|
$yiq-contrasted-threshold: 150 !default;
|
||||||
|
|
||||||
|
// Customize the light and dark text colors for use in our YIQ color contrast function.
|
||||||
|
$yiq-text-dark: #1F2D3D !default;
|
||||||
|
$yiq-text-light: $white !default;
|
||||||
|
|
||||||
|
// Options
|
||||||
|
//
|
||||||
|
// Quickly modify global styling by enabling or disabling optional features.
|
||||||
|
|
||||||
|
$enable-caret: true !default;
|
||||||
|
$enable-rounded: true !default;
|
||||||
|
$enable-shadows: true !default;
|
||||||
|
$enable-gradients: false !default;
|
||||||
|
$enable-transitions: true !default;
|
||||||
|
$enable-prefers-reduced-motion-media-query: true !default;
|
||||||
|
$enable-hover-media-query: false !default; // Deprecated, no longer affects any compiled CSS
|
||||||
|
$enable-grid-classes: true !default;
|
||||||
|
$enable-pointer-cursor-for-buttons: true !default;
|
||||||
|
$enable-print-styles: true !default;
|
||||||
|
$enable-responsive-font-sizes: false !default;
|
||||||
|
$enable-validation-icons: true !default;
|
||||||
|
$enable-deprecation-messages: true !default;
|
||||||
|
|
||||||
|
// Spacing
|
||||||
|
//
|
||||||
|
// Control the default styling of most Bootstrap elements by modifying these
|
||||||
|
// variables. Mostly focused on spacing.
|
||||||
|
// You can add more entries to the $spacers map, should you need more variation.
|
||||||
|
|
||||||
|
// stylelint-disable
|
||||||
|
$spacer: 1rem !default;
|
||||||
|
$spacers: () !default;
|
||||||
|
$spacers: map-merge((
|
||||||
|
0: 0,
|
||||||
|
1: ($spacer * .25),
|
||||||
|
2: ($spacer * .5),
|
||||||
|
3: $spacer,
|
||||||
|
4: ($spacer * 1.5),
|
||||||
|
5: ($spacer * 3)
|
||||||
|
), $spacers);
|
||||||
|
|
||||||
|
// This variable affects the `.h-*` and `.w-*` classes.
|
||||||
|
$sizes: () !default;
|
||||||
|
$sizes: map-merge((
|
||||||
|
25: 25%,
|
||||||
|
50: 50%,
|
||||||
|
75: 75%,
|
||||||
|
100: 100%
|
||||||
|
), $sizes);
|
||||||
|
// stylelint-enable
|
||||||
|
|
||||||
|
// Body
|
||||||
|
//
|
||||||
|
// Settings for the `<body>` element.
|
||||||
|
|
||||||
|
$body-bg: $white !default;
|
||||||
|
$body-color: $gray-900 !default;
|
||||||
|
|
||||||
|
// Links
|
||||||
|
//
|
||||||
|
// Style anchor elements.
|
||||||
|
|
||||||
|
$link-color: theme-color("primary") !default;
|
||||||
|
$link-decoration: none !default;
|
||||||
|
$link-hover-color: darken($link-color, 15%) !default;
|
||||||
|
$link-hover-decoration: none !default;
|
||||||
|
|
||||||
|
// Paragraphs
|
||||||
|
//
|
||||||
|
// Style p element.
|
||||||
|
|
||||||
|
$paragraph-margin-bottom: 1rem !default;
|
||||||
|
|
||||||
|
|
||||||
|
// Grid breakpoints
|
||||||
|
//
|
||||||
|
// Define the minimum dimensions at which your layout will change,
|
||||||
|
// adapting to different screen sizes, for use in media queries.
|
||||||
|
|
||||||
|
$grid-breakpoints: (
|
||||||
|
xs: 0,
|
||||||
|
sm: 576px,
|
||||||
|
md: 768px,
|
||||||
|
lg: 992px,
|
||||||
|
xl: 1200px
|
||||||
|
) !default;
|
||||||
|
|
||||||
|
@include _assert-ascending($grid-breakpoints, "$grid-breakpoints");
|
||||||
|
@include _assert-starts-at-zero($grid-breakpoints);
|
||||||
|
|
||||||
|
|
||||||
|
// Grid containers
|
||||||
|
//
|
||||||
|
// Define the maximum width of `.container` for different screen sizes.
|
||||||
|
|
||||||
|
$container-max-widths: (
|
||||||
|
sm: 540px,
|
||||||
|
md: 720px,
|
||||||
|
lg: 960px,
|
||||||
|
xl: 1140px
|
||||||
|
) !default;
|
||||||
|
|
||||||
|
@include _assert-ascending($container-max-widths, "$container-max-widths");
|
||||||
|
|
||||||
|
|
||||||
|
// Grid columns
|
||||||
|
//
|
||||||
|
// Set the number of columns and specify the width of the gutters.
|
||||||
|
|
||||||
|
$grid-columns: 12 !default;
|
||||||
|
$grid-gutter-width: 15px !default;
|
||||||
|
|
||||||
|
// Components
|
||||||
|
//
|
||||||
|
// Define common padding and border radius sizes and more.
|
||||||
|
|
||||||
|
$line-height-lg: 1.5 !default;
|
||||||
|
$line-height-sm: 1.5 !default;
|
||||||
|
|
||||||
|
$border-width: 1px !default;
|
||||||
|
$border-color: $gray-300 !default;
|
||||||
|
|
||||||
|
$border-radius: .25rem !default;
|
||||||
|
$border-radius-lg: .3rem !default;
|
||||||
|
$border-radius-sm: .2rem !default;
|
||||||
|
|
||||||
|
$component-active-color: $white !default;
|
||||||
|
$component-active-bg: theme-color("primary") !default;
|
||||||
|
|
||||||
|
$caret-width: .3em !default;
|
||||||
|
|
||||||
|
$transition-base: all .2s ease-in-out !default;
|
||||||
|
$transition-fade: opacity .15s linear !default;
|
||||||
|
$transition-collapse: height .35s ease !default;
|
||||||
|
|
||||||
|
|
||||||
|
// Fonts
|
||||||
|
//
|
||||||
|
// Font, line-height, and color for body text, headings, and more.
|
||||||
|
|
||||||
|
// stylelint-disable value-keyword-case
|
||||||
|
$font-family-sans-serif: "Source Sans Pro", -apple-system, BlinkMacSystemFont, "Segoe UI", Roboto, "Helvetica Neue", Arial, sans-serif, "Apple Color Emoji", "Segoe UI Emoji", "Segoe UI Symbol" !default;
|
||||||
|
$font-family-monospace: SFMono-Regular, Menlo, Monaco, Consolas, "Liberation Mono", "Courier New", monospace !default;
|
||||||
|
$font-family-base: $font-family-sans-serif !default;
|
||||||
|
// stylelint-enable value-keyword-case
|
||||||
|
|
||||||
|
$font-size-base: 1rem !default; // Assumes the browser default, typically `16px`
|
||||||
|
$font-size-lg: ($font-size-base * 1.25) !default;
|
||||||
|
$font-size-sm: ($font-size-base * .875) !default;
|
||||||
|
|
||||||
|
$font-weight-light: 300 !default;
|
||||||
|
$font-weight-normal: 400 !default;
|
||||||
|
$font-weight-bold: 700 !default;
|
||||||
|
|
||||||
|
$font-weight-base: $font-weight-normal !default;
|
||||||
|
$line-height-base: 1.5 !default;
|
||||||
|
|
||||||
|
$h1-font-size: $font-size-base * 2.5 !default;
|
||||||
|
$h2-font-size: $font-size-base * 2 !default;
|
||||||
|
$h3-font-size: $font-size-base * 1.75 !default;
|
||||||
|
$h4-font-size: $font-size-base * 1.5 !default;
|
||||||
|
$h5-font-size: $font-size-base * 1.25 !default;
|
||||||
|
$h6-font-size: $font-size-base !default;
|
||||||
|
|
||||||
|
$headings-margin-bottom: ($spacer / 2) !default;
|
||||||
|
$headings-font-family: inherit !default;
|
||||||
|
$headings-font-weight: 500 !default;
|
||||||
|
$headings-line-height: 1.2 !default;
|
||||||
|
$headings-color: inherit !default;
|
||||||
|
|
||||||
|
$display1-size: 6rem !default;
|
||||||
|
$display2-size: 5.5rem !default;
|
||||||
|
$display3-size: 4.5rem !default;
|
||||||
|
$display4-size: 3.5rem !default;
|
||||||
|
|
||||||
|
$display1-weight: 300 !default;
|
||||||
|
$display2-weight: 300 !default;
|
||||||
|
$display3-weight: 300 !default;
|
||||||
|
$display4-weight: 300 !default;
|
||||||
|
$display-line-height: $headings-line-height !default;
|
||||||
|
|
||||||
|
$lead-font-size: ($font-size-base * 1.25) !default;
|
||||||
|
$lead-font-weight: 300 !default;
|
||||||
|
|
||||||
|
$small-font-size: 80% !default;
|
||||||
|
|
||||||
|
$text-muted: $gray-600 !default;
|
||||||
|
|
||||||
|
$blockquote-small-color: $gray-600 !default;
|
||||||
|
$blockquote-font-size: ($font-size-base * 1.25) !default;
|
||||||
|
|
||||||
|
$hr-border-color: rgba($black, .1) !default;
|
||||||
|
$hr-border-width: $border-width !default;
|
||||||
|
|
||||||
|
$mark-padding: .2em !default;
|
||||||
|
|
||||||
|
$dt-font-weight: $font-weight-bold !default;
|
||||||
|
|
||||||
|
$kbd-box-shadow: inset 0 -.1rem 0 rgba($black, .25) !default;
|
||||||
|
$nested-kbd-font-weight: $font-weight-bold !default;
|
||||||
|
|
||||||
|
$list-inline-padding: .5rem !default;
|
||||||
|
|
||||||
|
$mark-bg: #fcf8e3 !default;
|
||||||
|
|
||||||
|
$hr-margin-y: $spacer !default;
|
||||||
|
|
||||||
|
|
||||||
|
// Tables
|
||||||
|
//
|
||||||
|
// Customizes the `.table` component with basic values, each used across all table variations.
|
||||||
|
|
||||||
|
$table-cell-padding: .75rem !default;
|
||||||
|
$table-cell-padding-sm: .3rem !default;
|
||||||
|
|
||||||
|
$table-bg: transparent !default;
|
||||||
|
$table-accent-bg: rgba($black, .05) !default;
|
||||||
|
$table-hover-bg: rgba($black, .075) !default;
|
||||||
|
$table-active-bg: $table-hover-bg !default;
|
||||||
|
|
||||||
|
$table-border-width: $border-width !default;
|
||||||
|
$table-border-color: $gray-300 !default;
|
||||||
|
|
||||||
|
$table-head-bg: $gray-200 !default;
|
||||||
|
$table-head-color: $gray-700 !default;
|
||||||
|
|
||||||
|
$table-dark-bg: $gray-900 !default;
|
||||||
|
$table-dark-accent-bg: rgba($white, .05) !default;
|
||||||
|
$table-dark-hover-bg: rgba($white, .075) !default;
|
||||||
|
$table-dark-border-color: lighten($gray-900, 10%) !default;
|
||||||
|
$table-dark-color: $body-bg !default;
|
||||||
|
|
||||||
|
|
||||||
|
// Buttons + Forms
|
||||||
|
//
|
||||||
|
// Shared variables that are reassigned to `$input-` and `$btn-` specific variables.
|
||||||
|
|
||||||
|
$input-btn-padding-y: .375rem !default;
|
||||||
|
$input-btn-padding-x: .75rem !default;
|
||||||
|
$input-btn-line-height: $line-height-base !default;
|
||||||
|
|
||||||
|
$input-btn-focus-width: .2rem !default;
|
||||||
|
$input-btn-focus-color: rgba($component-active-bg, .25) !default;
|
||||||
|
$input-btn-focus-box-shadow: 0 0 0 $input-btn-focus-width $input-btn-focus-color !default;
|
||||||
|
|
||||||
|
$input-btn-padding-y-sm: .25rem !default;
|
||||||
|
$input-btn-padding-x-sm: .5rem !default;
|
||||||
|
$input-btn-line-height-sm: $line-height-sm !default;
|
||||||
|
|
||||||
|
$input-btn-padding-y-lg: .5rem !default;
|
||||||
|
$input-btn-padding-x-lg: 1rem !default;
|
||||||
|
$input-btn-line-height-lg: $line-height-lg !default;
|
||||||
|
|
||||||
|
$input-btn-border-width: $border-width !default;
|
||||||
|
|
||||||
|
|
||||||
|
// Buttons
|
||||||
|
//
|
||||||
|
// For each of Bootstrap's buttons, define text, background, and border color.
|
||||||
|
|
||||||
|
$btn-padding-y: $input-btn-padding-y !default;
|
||||||
|
$btn-padding-x: $input-btn-padding-x !default;
|
||||||
|
$btn-line-height: $input-btn-line-height !default;
|
||||||
|
|
||||||
|
$btn-padding-y-sm: $input-btn-padding-y-sm !default;
|
||||||
|
$btn-padding-x-sm: $input-btn-padding-x-sm !default;
|
||||||
|
$btn-line-height-sm: $input-btn-line-height-sm !default;
|
||||||
|
|
||||||
|
$btn-padding-y-lg: $input-btn-padding-y-lg !default;
|
||||||
|
$btn-padding-x-lg: $input-btn-padding-x-lg !default;
|
||||||
|
$btn-line-height-lg: $input-btn-line-height-lg !default;
|
||||||
|
|
||||||
|
$btn-border-width: $input-btn-border-width !default;
|
||||||
|
|
||||||
|
$btn-font-weight: $font-weight-normal !default;
|
||||||
|
$btn-box-shadow: none !default;
|
||||||
|
$btn-focus-width: 0 !default;
|
||||||
|
$btn-focus-box-shadow: none !default;
|
||||||
|
$btn-disabled-opacity: .65 !default;
|
||||||
|
$btn-active-box-shadow: none !default;
|
||||||
|
|
||||||
|
$btn-link-disabled-color: $gray-600 !default;
|
||||||
|
|
||||||
|
$btn-block-spacing-y: .5rem !default;
|
||||||
|
|
||||||
|
// Allows for customizing button radius independently from global border radius
|
||||||
|
$btn-border-radius: $border-radius !default;
|
||||||
|
$btn-border-radius-lg: $border-radius-lg !default;
|
||||||
|
$btn-border-radius-sm: $border-radius-sm !default;
|
||||||
|
|
||||||
|
$btn-transition: color .15s ease-in-out, background-color .15s ease-in-out, border-color .15s ease-in-out, box-shadow .15s ease-in-out !default;
|
||||||
|
|
||||||
|
|
||||||
|
// Forms
|
||||||
|
|
||||||
|
$input-padding-y: $input-btn-padding-y !default;
|
||||||
|
$input-padding-x: $input-btn-padding-x !default;
|
||||||
|
$input-line-height: $input-btn-line-height !default;
|
||||||
|
|
||||||
|
$input-padding-y-sm: $input-btn-padding-y-sm !default;
|
||||||
|
$input-padding-x-sm: $input-btn-padding-x-sm !default;
|
||||||
|
$input-line-height-sm: $input-btn-line-height-sm !default;
|
||||||
|
|
||||||
|
$input-padding-y-lg: $input-btn-padding-y-lg !default;
|
||||||
|
$input-padding-x-lg: $input-btn-padding-x-lg !default;
|
||||||
|
$input-line-height-lg: $input-btn-line-height-lg !default;
|
||||||
|
|
||||||
|
$input-bg: $white !default;
|
||||||
|
$input-disabled-bg: $gray-200 !default;
|
||||||
|
|
||||||
|
$input-color: $gray-700 !default;
|
||||||
|
$input-border-color: $gray-400 !default;
|
||||||
|
$input-border-width: $input-btn-border-width !default;
|
||||||
|
$input-box-shadow: inset 0 0 0 rgba($black, 0) !default;
|
||||||
|
|
||||||
|
$input-border-radius: $border-radius !default;
|
||||||
|
$input-border-radius-lg: $border-radius-lg !default;
|
||||||
|
$input-border-radius-sm: $border-radius-sm !default;
|
||||||
|
|
||||||
|
$input-focus-bg: $input-bg !default;
|
||||||
|
$input-focus-border-color: lighten($component-active-bg, 25%) !default;
|
||||||
|
$input-focus-color: $input-color !default;
|
||||||
|
$input-focus-width: 0 !default;
|
||||||
|
$input-focus-box-shadow: none !default;
|
||||||
|
|
||||||
|
$input-placeholder-color: lighten($gray-600, 15%) !default;
|
||||||
|
|
||||||
|
$input-height-border: $input-border-width * 2 !default;
|
||||||
|
|
||||||
|
$input-height-inner: ($font-size-base * $input-btn-line-height) + ($input-btn-padding-y * 2) !default;
|
||||||
|
$input-height-inner-half: calc(#{$input-line-height * .5em} + #{$input-padding-y}) !default;
|
||||||
|
$input-height-inner-quarter: calc(#{$input-line-height * .25em} + #{$input-padding-y / 2}) !default;
|
||||||
|
|
||||||
|
$input-height: calc(#{$input-height-inner} + #{$input-height-border}) !default;
|
||||||
|
|
||||||
|
$input-height-inner-sm: ($font-size-sm * $input-btn-line-height-sm) + ($input-btn-padding-y-sm * 2) !default;
|
||||||
|
$input-height-sm: calc(#{$input-height-inner-sm} + #{$input-height-border}) !default;
|
||||||
|
|
||||||
|
$input-height-inner-lg: ($font-size-lg * $input-btn-line-height-lg) + ($input-btn-padding-y-lg * 2) !default;
|
||||||
|
$input-height-lg: calc(#{$input-height-inner-lg} + #{$input-height-border}) !default;
|
||||||
|
|
||||||
|
$input-transition: border-color .15s ease-in-out, box-shadow .15s ease-in-out !default;
|
||||||
|
|
||||||
|
$form-text-margin-top: .25rem !default;
|
||||||
|
|
||||||
|
$form-check-input-gutter: 1.25rem !default;
|
||||||
|
$form-check-input-margin-y: .3rem !default;
|
||||||
|
$form-check-input-margin-x: .25rem !default;
|
||||||
|
|
||||||
|
$form-check-inline-margin-x: .75rem !default;
|
||||||
|
$form-check-inline-input-margin-x: .3125rem !default;
|
||||||
|
|
||||||
|
$form-group-margin-bottom: 1rem !default;
|
||||||
|
|
||||||
|
$input-group-addon-color: $input-color !default;
|
||||||
|
$input-group-addon-bg: $gray-200 !default;
|
||||||
|
$input-group-addon-border-color: $input-border-color !default;
|
||||||
|
|
||||||
|
$custom-control-gutter: .5rem !default;
|
||||||
|
$custom-control-spacer-x: 1rem !default;
|
||||||
|
|
||||||
|
$custom-control-indicator-size: 1rem !default;
|
||||||
|
$custom-control-indicator-bg: $gray-300 !default;
|
||||||
|
$custom-control-indicator-bg-size: 50% 50% !default;
|
||||||
|
$custom-control-indicator-box-shadow: inset 0 .25rem .25rem rgba($black, .1) !default;
|
||||||
|
|
||||||
|
$custom-control-indicator-disabled-bg: $gray-200 !default;
|
||||||
|
$custom-control-label-disabled-color: $gray-600 !default;
|
||||||
|
|
||||||
|
$custom-control-indicator-checked-color: $component-active-color !default;
|
||||||
|
$custom-control-indicator-checked-bg: $component-active-bg !default;
|
||||||
|
$custom-control-indicator-checked-disabled-bg: rgba(theme-color("primary"), .5) !default;
|
||||||
|
$custom-control-indicator-checked-box-shadow: none !default;
|
||||||
|
|
||||||
|
$custom-control-indicator-focus-box-shadow: 0 0 0 1px $body-bg, $input-btn-focus-box-shadow !default;
|
||||||
|
|
||||||
|
$custom-control-indicator-active-color: $component-active-color !default;
|
||||||
|
$custom-control-indicator-active-bg: lighten($component-active-bg, 35%) !default;
|
||||||
|
$custom-control-indicator-active-box-shadow: none !default;
|
||||||
|
|
||||||
|
$custom-checkbox-indicator-border-radius: $border-radius !default;
|
||||||
|
$custom-checkbox-indicator-icon-checked: str-replace(url("data:image/svg+xml;charset=utf8,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 8 8'%3E%3Cpath fill='#{$custom-control-indicator-checked-color}' d='M6.564.75l-3.59 3.612-1.538-1.55L0 4.26 2.974 7.25 8 2.193z'/%3E%3C/svg%3E"), "#", "%23") !default;
|
||||||
|
|
||||||
|
$custom-checkbox-indicator-indeterminate-bg: $component-active-bg !default;
|
||||||
|
$custom-checkbox-indicator-indeterminate-color: $custom-control-indicator-checked-color !default;
|
||||||
|
$custom-checkbox-indicator-icon-indeterminate: str-replace(url("data:image/svg+xml;charset=utf8,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 4 4'%3E%3Cpath stroke='#{$custom-checkbox-indicator-indeterminate-color}' d='M0 2h4'/%3E%3C/svg%3E"), "#", "%23") !default;
|
||||||
|
$custom-checkbox-indicator-indeterminate-box-shadow: none !default;
|
||||||
|
|
||||||
|
$custom-radio-indicator-border-radius: 50% !default;
|
||||||
|
$custom-radio-indicator-icon-checked: str-replace(url("data:image/svg+xml;charset=utf8,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='-4 -4 8 8'%3E%3Ccircle r='3' fill='#{$custom-control-indicator-checked-color}'/%3E%3C/svg%3E"), "#", "%23") !default;
|
||||||
|
|
||||||
|
$custom-select-padding-y: .375rem !default;
|
||||||
|
$custom-select-padding-x: .75rem !default;
|
||||||
|
$custom-select-height: $input-height !default;
|
||||||
|
$custom-select-indicator-padding: 1rem !default; // Extra padding to account for the presence of the background-image based indicator
|
||||||
|
$custom-select-line-height: $input-btn-line-height !default;
|
||||||
|
$custom-select-color: $input-color !default;
|
||||||
|
$custom-select-disabled-color: $gray-600 !default;
|
||||||
|
$custom-select-bg: $white !default;
|
||||||
|
$custom-select-disabled-bg: $gray-200 !default;
|
||||||
|
$custom-select-bg-size: 8px 10px !default; // In pixels because image dimensions
|
||||||
|
$custom-select-indicator-color: $gray-800 !default;
|
||||||
|
$custom-select-indicator: str-replace(url("data:image/svg+xml;charset=utf8,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 4 5'%3E%3Cpath fill='#{$custom-select-indicator-color}' d='M2 0L0 2h4zm0 5L0 3h4z'/%3E%3C/svg%3E"), "#", "%23") !default;
|
||||||
|
$custom-select-border-width: $input-btn-border-width !default;
|
||||||
|
$custom-select-border-color: $input-border-color !default;
|
||||||
|
$custom-select-border-radius: $border-radius !default;
|
||||||
|
|
||||||
|
$custom-select-focus-border-color: $input-focus-border-color !default;
|
||||||
|
$custom-select-focus-box-shadow: none !default;
|
||||||
|
|
||||||
|
$custom-select-font-size-sm: 75% !default;
|
||||||
|
$custom-select-height-sm: $input-height-sm !default;
|
||||||
|
|
||||||
|
$custom-select-font-size-lg: 125% !default;
|
||||||
|
$custom-select-height-lg: $input-height-lg !default;
|
||||||
|
|
||||||
|
$custom-file-height: $input-height !default;
|
||||||
|
$custom-file-focus-border-color: $input-focus-border-color !default;
|
||||||
|
$custom-file-focus-box-shadow: $custom-select-focus-box-shadow !default;
|
||||||
|
|
||||||
|
$custom-file-padding-y: $input-btn-padding-y !default;
|
||||||
|
$custom-file-padding-x: $input-btn-padding-x !default;
|
||||||
|
$custom-file-line-height: $input-btn-line-height !default;
|
||||||
|
$custom-file-color: $input-color !default;
|
||||||
|
$custom-file-bg: $input-bg !default;
|
||||||
|
$custom-file-border-width: $input-btn-border-width !default;
|
||||||
|
$custom-file-border-color: $input-border-color !default;
|
||||||
|
$custom-file-border-radius: $input-border-radius !default;
|
||||||
|
$custom-file-box-shadow: $custom-select-focus-box-shadow !default;
|
||||||
|
$custom-file-button-color: $custom-file-color !default;
|
||||||
|
$custom-file-button-bg: $input-group-addon-bg !default;
|
||||||
|
$custom-file-text: (
|
||||||
|
en: "Browse"
|
||||||
|
) !default;
|
||||||
|
|
||||||
|
$custom-range-thumb-focus-box-shadow: 0 0 0 1px $body-bg, $input-btn-focus-box-shadow !default;
|
||||||
|
|
||||||
|
|
||||||
|
// Form validation
|
||||||
|
$form-feedback-margin-top: $form-text-margin-top !default;
|
||||||
|
$form-feedback-font-size: $small-font-size !default;
|
||||||
|
$form-feedback-valid-color: theme-color("success") !default;
|
||||||
|
$form-feedback-invalid-color: theme-color("danger") !default;
|
||||||
|
|
||||||
|
|
||||||
|
// Dropdowns
|
||||||
|
//
|
||||||
|
// Dropdown menu container and contents.
|
||||||
|
|
||||||
|
$dropdown-min-width: 10rem !default;
|
||||||
|
$dropdown-padding-y: .5rem !default;
|
||||||
|
$dropdown-spacer: .125rem !default;
|
||||||
|
$dropdown-bg: $white !default;
|
||||||
|
$dropdown-border-color: rgba($black, .15) !default;
|
||||||
|
$dropdown-border-radius: $border-radius !default;
|
||||||
|
$dropdown-border-width: $border-width !default;
|
||||||
|
$dropdown-divider-bg: $gray-200 !default;
|
||||||
|
$dropdown-box-shadow: 0 .5rem 1rem rgba($black, .175) !default;
|
||||||
|
|
||||||
|
$dropdown-link-color: $gray-900 !default;
|
||||||
|
$dropdown-link-hover-color: darken($gray-900, 5%) !default;
|
||||||
|
$dropdown-link-hover-bg: $gray-100 !default;
|
||||||
|
|
||||||
|
$dropdown-link-active-color: $component-active-color !default;
|
||||||
|
$dropdown-link-active-bg: $component-active-bg !default;
|
||||||
|
|
||||||
|
$dropdown-link-disabled-color: $gray-600 !default;
|
||||||
|
|
||||||
|
$dropdown-item-padding-y: .25rem !default;
|
||||||
|
$dropdown-item-padding-x: 1rem !default;
|
||||||
|
|
||||||
|
$dropdown-header-color: $gray-600 !default;
|
||||||
|
|
||||||
|
|
||||||
|
// Z-index master list
|
||||||
|
//
|
||||||
|
// Warning: Avoid customizing these values. They're used for a bird's eye view
|
||||||
|
// of components dependent on the z-axis and are designed to all work together.
|
||||||
|
|
||||||
|
$zindex-dropdown: 1000 !default;
|
||||||
|
$zindex-sticky: 1020 !default;
|
||||||
|
$zindex-fixed: 1030 !default;
|
||||||
|
$zindex-modal-backdrop: 1040 !default;
|
||||||
|
$zindex-modal: 1050 !default;
|
||||||
|
$zindex-popover: 1060 !default;
|
||||||
|
$zindex-tooltip: 1070 !default;
|
||||||
|
|
||||||
|
// Navs
|
||||||
|
|
||||||
|
$nav-link-padding-y: .5rem !default;
|
||||||
|
$nav-link-padding-x: 1rem !default;
|
||||||
|
$nav-link-disabled-color: $gray-600 !default;
|
||||||
|
|
||||||
|
$nav-tabs-border-color: $gray-300 !default;
|
||||||
|
$nav-tabs-border-width: $border-width !default;
|
||||||
|
$nav-tabs-border-radius: $border-radius !default;
|
||||||
|
$nav-tabs-link-hover-border-color: $gray-200 $gray-200 $nav-tabs-border-color !default;
|
||||||
|
$nav-tabs-link-active-color: $gray-700 !default;
|
||||||
|
$nav-tabs-link-active-bg: $body-bg !default;
|
||||||
|
$nav-tabs-link-active-border-color: $gray-300 $gray-300 $nav-tabs-link-active-bg !default;
|
||||||
|
|
||||||
|
$nav-pills-border-radius: $border-radius !default;
|
||||||
|
$nav-pills-link-active-color: $component-active-color !default;
|
||||||
|
$nav-pills-link-active-bg: $component-active-bg !default;
|
||||||
|
|
||||||
|
// Navbar
|
||||||
|
|
||||||
|
$navbar-padding-y: ($spacer / 2) !default;
|
||||||
|
$navbar-padding-x: ($spacer / 2) !default;
|
||||||
|
|
||||||
|
$navbar-nav-link-padding-x: 1rem !default;
|
||||||
|
|
||||||
|
$navbar-brand-font-size: $font-size-lg !default;
|
||||||
|
// Compute the navbar-brand padding-y so the navbar-brand will have the same height as navbar-text and nav-link
|
||||||
|
$nav-link-height: ($font-size-base * $line-height-base + $nav-link-padding-y * 2) !default;
|
||||||
|
$navbar-brand-height: $navbar-brand-font-size * $line-height-base !default;
|
||||||
|
$navbar-brand-padding-y: ($nav-link-height - $navbar-brand-height) / 2 !default;
|
||||||
|
|
||||||
|
$navbar-toggler-padding-y: .25rem !default;
|
||||||
|
$navbar-toggler-padding-x: .75rem !default;
|
||||||
|
$navbar-toggler-font-size: $font-size-lg !default;
|
||||||
|
$navbar-toggler-border-radius: $btn-border-radius !default;
|
||||||
|
|
||||||
|
$navbar-dark-color: rgba($white, .75) !default;
|
||||||
|
$navbar-dark-hover-color: rgba($white, 1) !default;
|
||||||
|
$navbar-dark-active-color: $white !default;
|
||||||
|
$navbar-dark-disabled-color: rgba($white, .25) !default;
|
||||||
|
$navbar-dark-toggler-icon-bg: str-replace(url("data:image/svg+xml;charset=utf8,%3Csvg viewBox='0 0 30 30' xmlns='http://www.w3.org/2000/svg'%3E%3Cpath stroke='#{$navbar-dark-color}' stroke-width='2' stroke-linecap='round' stroke-miterlimit='10' d='M4 7h22M4 15h22M4 23h22'/%3E%3C/svg%3E"), "#", "%23") !default;
|
||||||
|
$navbar-dark-toggler-border-color: rgba($white, .1) !default;
|
||||||
|
|
||||||
|
$navbar-light-color: rgba($black, .5) !default;
|
||||||
|
$navbar-light-hover-color: rgba($black, .7) !default;
|
||||||
|
$navbar-light-active-color: rgba($black, .9) !default;
|
||||||
|
$navbar-light-disabled-color: rgba($black, .3) !default;
|
||||||
|
$navbar-light-toggler-icon-bg: str-replace(url("data:image/svg+xml;charset=utf8,%3Csvg viewBox='0 0 30 30' xmlns='http://www.w3.org/2000/svg'%3E%3Cpath stroke='#{$navbar-light-color}' stroke-width='2' stroke-linecap='round' stroke-miterlimit='10' d='M4 7h22M4 15h22M4 23h22'/%3E%3C/svg%3E"), "#", "%23") !default;
|
||||||
|
$navbar-light-toggler-border-color: rgba($black, .1) !default;
|
||||||
|
|
||||||
|
// Pagination
|
||||||
|
|
||||||
|
$pagination-padding-y: .5rem !default;
|
||||||
|
$pagination-padding-x: .75rem !default;
|
||||||
|
$pagination-padding-y-sm: .25rem !default;
|
||||||
|
$pagination-padding-x-sm: .5rem !default;
|
||||||
|
$pagination-padding-y-lg: .75rem !default;
|
||||||
|
$pagination-padding-x-lg: 1.5rem !default;
|
||||||
|
$pagination-line-height: 1.25 !default;
|
||||||
|
|
||||||
|
$pagination-color: $link-color !default;
|
||||||
|
$pagination-bg: $white !default;
|
||||||
|
$pagination-border-width: $border-width !default;
|
||||||
|
$pagination-border-color: $gray-300 !default;
|
||||||
|
|
||||||
|
$pagination-focus-box-shadow: $input-btn-focus-box-shadow !default;
|
||||||
|
|
||||||
|
$pagination-hover-color: $link-hover-color !default;
|
||||||
|
$pagination-hover-bg: $gray-200 !default;
|
||||||
|
$pagination-hover-border-color: $gray-300 !default;
|
||||||
|
|
||||||
|
$pagination-active-color: $component-active-color !default;
|
||||||
|
$pagination-active-bg: $component-active-bg !default;
|
||||||
|
$pagination-active-border-color: $pagination-active-bg !default;
|
||||||
|
|
||||||
|
$pagination-disabled-color: $gray-600 !default;
|
||||||
|
$pagination-disabled-bg: $white !default;
|
||||||
|
$pagination-disabled-border-color: $gray-300 !default;
|
||||||
|
|
||||||
|
|
||||||
|
// Jumbotron
|
||||||
|
|
||||||
|
$jumbotron-padding: 2rem !default;
|
||||||
|
$jumbotron-bg: $gray-200 !default;
|
||||||
|
|
||||||
|
|
||||||
|
// Cards
|
||||||
|
|
||||||
|
$card-spacer-y: .75rem !default;
|
||||||
|
$card-spacer-x: 1.25rem !default;
|
||||||
|
$card-border-width: 0 !default; //$border-width !default;
|
||||||
|
$card-border-radius: $border-radius !default;
|
||||||
|
$card-border-color: rgba($black, .125) !default;
|
||||||
|
$card-inner-border-radius: calc(#{$card-border-radius} - #{$card-border-width}) !default;
|
||||||
|
$card-cap-bg: rgba($black, .03) !default;
|
||||||
|
$card-bg: $white !default;
|
||||||
|
|
||||||
|
$card-img-overlay-padding: 1.25rem !default;
|
||||||
|
|
||||||
|
$card-group-margin: ($grid-gutter-width / 2) !default;
|
||||||
|
$card-deck-margin: $card-group-margin !default;
|
||||||
|
|
||||||
|
$card-columns-count: 3 !default;
|
||||||
|
$card-columns-gap: 1.25rem !default;
|
||||||
|
$card-columns-margin: $card-spacer-y !default;
|
||||||
|
|
||||||
|
|
||||||
|
// Tooltips
|
||||||
|
|
||||||
|
$tooltip-font-size: $font-size-sm !default;
|
||||||
|
$tooltip-max-width: 200px !default;
|
||||||
|
$tooltip-color: $white !default;
|
||||||
|
$tooltip-bg: $black !default;
|
||||||
|
$tooltip-border-radius: $border-radius !default;
|
||||||
|
$tooltip-opacity: .9 !default;
|
||||||
|
$tooltip-padding-y: .25rem !default;
|
||||||
|
$tooltip-padding-x: .5rem !default;
|
||||||
|
$tooltip-margin: 0 !default;
|
||||||
|
|
||||||
|
$tooltip-arrow-width: .8rem !default;
|
||||||
|
$tooltip-arrow-height: .4rem !default;
|
||||||
|
$tooltip-arrow-color: $tooltip-bg !default;
|
||||||
|
|
||||||
|
// Form tooltips must come after regular tooltips
|
||||||
|
$form-feedback-tooltip-padding-y: $tooltip-padding-y !default;
|
||||||
|
$form-feedback-tooltip-padding-x: $tooltip-padding-x !default;
|
||||||
|
$form-feedback-tooltip-font-size: $tooltip-font-size !default;
|
||||||
|
$form-feedback-tooltip-line-height: $line-height-base !default;
|
||||||
|
$form-feedback-tooltip-opacity: $tooltip-opacity !default;
|
||||||
|
$form-feedback-tooltip-border-radius: $tooltip-border-radius !default;
|
||||||
|
|
||||||
|
// Popovers
|
||||||
|
|
||||||
|
$popover-font-size: $font-size-sm !default;
|
||||||
|
$popover-bg: $white !default;
|
||||||
|
$popover-max-width: 276px !default;
|
||||||
|
$popover-border-width: $border-width !default;
|
||||||
|
$popover-border-color: rgba($black, .2) !default;
|
||||||
|
$popover-border-radius: $border-radius-lg !default;
|
||||||
|
$popover-box-shadow: 0 .25rem .5rem rgba($black, .2) !default;
|
||||||
|
|
||||||
|
$popover-header-bg: darken($popover-bg, 3%) !default;
|
||||||
|
$popover-header-color: $headings-color !default;
|
||||||
|
$popover-header-padding-y: .5rem !default;
|
||||||
|
$popover-header-padding-x: .75rem !default;
|
||||||
|
|
||||||
|
$popover-body-color: $body-color !default;
|
||||||
|
$popover-body-padding-y: $popover-header-padding-y !default;
|
||||||
|
$popover-body-padding-x: $popover-header-padding-x !default;
|
||||||
|
|
||||||
|
$popover-arrow-width: 1rem !default;
|
||||||
|
$popover-arrow-height: .5rem !default;
|
||||||
|
$popover-arrow-color: $popover-bg !default;
|
||||||
|
|
||||||
|
$popover-arrow-outer-color: fade-in($popover-border-color, .05) !default;
|
||||||
|
|
||||||
|
|
||||||
|
// Badges
|
||||||
|
|
||||||
|
$badge-font-size: 75% !default;
|
||||||
|
$badge-font-weight: $font-weight-bold !default;
|
||||||
|
$badge-padding-y: .25em !default;
|
||||||
|
$badge-padding-x: .4em !default;
|
||||||
|
$badge-border-radius: $border-radius !default;
|
||||||
|
|
||||||
|
$badge-pill-padding-x: .6em !default;
|
||||||
|
// Use a higher than normal value to ensure completely rounded edges when
|
||||||
|
// customizing padding or font-size on labels.
|
||||||
|
$badge-pill-border-radius: 10rem !default;
|
||||||
|
|
||||||
|
|
||||||
|
// Modals
|
||||||
|
|
||||||
|
// Padding applied to the modal body
|
||||||
|
$modal-inner-padding: 1rem !default;
|
||||||
|
|
||||||
|
$modal-dialog-margin: .5rem !default;
|
||||||
|
$modal-dialog-margin-y-sm-up: 1.75rem !default;
|
||||||
|
|
||||||
|
$modal-title-line-height: $line-height-base !default;
|
||||||
|
|
||||||
|
$modal-content-bg: $white !default;
|
||||||
|
$modal-content-border-color: rgba($black, .2) !default;
|
||||||
|
$modal-content-border-width: $border-width !default;
|
||||||
|
$modal-content-box-shadow-xs: 0 .25rem .5rem rgba($black, .5) !default;
|
||||||
|
$modal-content-box-shadow-sm-up: 0 .5rem 1rem rgba($black, .5) !default;
|
||||||
|
|
||||||
|
$modal-backdrop-bg: $black !default;
|
||||||
|
$modal-backdrop-opacity: .5 !default;
|
||||||
|
$modal-header-border-color: $gray-200 !default;
|
||||||
|
$modal-footer-border-color: $modal-header-border-color !default;
|
||||||
|
$modal-header-border-width: $modal-content-border-width !default;
|
||||||
|
$modal-footer-border-width: $modal-header-border-width !default;
|
||||||
|
$modal-header-padding: 1rem !default;
|
||||||
|
|
||||||
|
$modal-lg: 800px !default;
|
||||||
|
$modal-md: 500px !default;
|
||||||
|
$modal-sm: 300px !default;
|
||||||
|
|
||||||
|
$modal-transition: transform .3s ease-out !default;
|
||||||
|
|
||||||
|
|
||||||
|
// Alerts
|
||||||
|
//
|
||||||
|
// Define alert colors, border radius, and padding.
|
||||||
|
|
||||||
|
$alert-padding-y: .75rem !default;
|
||||||
|
$alert-padding-x: 1.25rem !default;
|
||||||
|
$alert-margin-bottom: 1rem !default;
|
||||||
|
$alert-border-radius: $border-radius !default;
|
||||||
|
$alert-link-font-weight: $font-weight-bold !default;
|
||||||
|
$alert-border-width: $border-width !default;
|
||||||
|
|
||||||
|
$alert-bg-level: -10 !default;
|
||||||
|
$alert-border-level: -9 !default;
|
||||||
|
$alert-color-level: 6 !default;
|
||||||
|
|
||||||
|
|
||||||
|
// Progress bars
|
||||||
|
|
||||||
|
$progress-height: 1rem !default;
|
||||||
|
$progress-font-size: ($font-size-base * .75) !default;
|
||||||
|
$progress-bg: $gray-200 !default;
|
||||||
|
$progress-border-radius: $border-radius !default;
|
||||||
|
$progress-box-shadow: inset 0 .1rem .1rem rgba($black, .1) !default;
|
||||||
|
$progress-bar-color: $white !default;
|
||||||
|
$progress-bar-bg: theme-color("primary") !default;
|
||||||
|
$progress-bar-animation-timing: 1s linear infinite !default;
|
||||||
|
$progress-bar-transition: width .6s ease !default;
|
||||||
|
|
||||||
|
// List group
|
||||||
|
|
||||||
|
$list-group-bg: $white !default;
|
||||||
|
$list-group-border-color: rgba($black, .125) !default;
|
||||||
|
$list-group-border-width: $border-width !default;
|
||||||
|
$list-group-border-radius: $border-radius !default;
|
||||||
|
|
||||||
|
$list-group-item-padding-y: .75rem !default;
|
||||||
|
$list-group-item-padding-x: 1.25rem !default;
|
||||||
|
|
||||||
|
$list-group-hover-bg: $gray-100 !default;
|
||||||
|
$list-group-active-color: $component-active-color !default;
|
||||||
|
$list-group-active-bg: $component-active-bg !default;
|
||||||
|
$list-group-active-border-color: $list-group-active-bg !default;
|
||||||
|
|
||||||
|
$list-group-disabled-color: $gray-600 !default;
|
||||||
|
$list-group-disabled-bg: $list-group-bg !default;
|
||||||
|
|
||||||
|
$list-group-action-color: $gray-700 !default;
|
||||||
|
$list-group-action-hover-color: $list-group-action-color !default;
|
||||||
|
|
||||||
|
$list-group-action-active-color: $body-color !default;
|
||||||
|
$list-group-action-active-bg: $gray-200 !default;
|
||||||
|
|
||||||
|
|
||||||
|
// Image thumbnails
|
||||||
|
|
||||||
|
$thumbnail-padding: .25rem !default;
|
||||||
|
$thumbnail-bg: $body-bg !default;
|
||||||
|
$thumbnail-border-width: $border-width !default;
|
||||||
|
$thumbnail-border-color: $gray-300 !default;
|
||||||
|
$thumbnail-border-radius: $border-radius !default;
|
||||||
|
$thumbnail-box-shadow: 0 1px 2px rgba($black, .075) !default;
|
||||||
|
|
||||||
|
|
||||||
|
// Figures
|
||||||
|
|
||||||
|
$figure-caption-font-size: 90% !default;
|
||||||
|
$figure-caption-color: $gray-600 !default;
|
||||||
|
|
||||||
|
|
||||||
|
// Breadcrumbs
|
||||||
|
|
||||||
|
$breadcrumb-padding-y: .75rem !default;
|
||||||
|
$breadcrumb-padding-x: 1rem !default;
|
||||||
|
$breadcrumb-item-padding: .5rem !default;
|
||||||
|
|
||||||
|
$breadcrumb-margin-bottom: 1rem !default;
|
||||||
|
|
||||||
|
$breadcrumb-bg: $gray-200 !default;
|
||||||
|
$breadcrumb-divider-color: $gray-600 !default;
|
||||||
|
$breadcrumb-active-color: $gray-600 !default;
|
||||||
|
$breadcrumb-divider: "/" !default;
|
||||||
|
|
||||||
|
|
||||||
|
// Carousel
|
||||||
|
|
||||||
|
$carousel-control-color: $white !default;
|
||||||
|
$carousel-control-width: 15% !default;
|
||||||
|
$carousel-control-opacity: .5 !default;
|
||||||
|
|
||||||
|
$carousel-indicator-width: 30px !default;
|
||||||
|
$carousel-indicator-height: 3px !default;
|
||||||
|
$carousel-indicator-spacer: 3px !default;
|
||||||
|
$carousel-indicator-active-bg: $white !default;
|
||||||
|
|
||||||
|
$carousel-caption-width: 70% !default;
|
||||||
|
$carousel-caption-color: $white !default;
|
||||||
|
|
||||||
|
$carousel-control-icon-width: 20px !default;
|
||||||
|
|
||||||
|
$carousel-control-prev-icon-bg: str-replace(url("data:image/svg+xml;charset=utf8,%3Csvg xmlns='http://www.w3.org/2000/svg' fill='#{$carousel-control-color}' viewBox='0 0 8 8'%3E%3Cpath d='M5.25 0l-4 4 4 4 1.5-1.5-2.5-2.5 2.5-2.5-1.5-1.5z'/%3E%3C/svg%3E"), "#", "%23") !default;
|
||||||
|
$carousel-control-next-icon-bg: str-replace(url("data:image/svg+xml;charset=utf8,%3Csvg xmlns='http://www.w3.org/2000/svg' fill='#{$carousel-control-color}' viewBox='0 0 8 8'%3E%3Cpath d='M2.75 0l-1.5 1.5 2.5 2.5-2.5 2.5 1.5 1.5 4-4-4-4z'/%3E%3C/svg%3E"), "#", "%23") !default;
|
||||||
|
|
||||||
|
$carousel-transition: transform .6s ease !default;
|
||||||
|
|
||||||
|
|
||||||
|
// Close
|
||||||
|
|
||||||
|
$close-font-size: $font-size-base * 1.5 !default;
|
||||||
|
$close-font-weight: $font-weight-bold !default;
|
||||||
|
$close-color: $black !default;
|
||||||
|
$close-text-shadow: 0 1px 0 $white !default;
|
||||||
|
|
||||||
|
// Code
|
||||||
|
|
||||||
|
$code-font-size: 87.5% !default;
|
||||||
|
$code-color: $pink !default;
|
||||||
|
|
||||||
|
$kbd-padding-y: .2rem !default;
|
||||||
|
$kbd-padding-x: .4rem !default;
|
||||||
|
$kbd-font-size: $code-font-size !default;
|
||||||
|
$kbd-color: $white !default;
|
||||||
|
$kbd-bg: $gray-900 !default;
|
||||||
|
|
||||||
|
$pre-color: $gray-900 !default;
|
||||||
|
$pre-scrollable-max-height: 340px !default;
|
||||||
|
|
||||||
|
|
||||||
|
// Printing
|
||||||
|
$print-page-size: a3 !default;
|
||||||
|
$print-body-min-width: map-get($grid-breakpoints, "lg") !default;
|
||||||
|
|
@ -0,0 +1,76 @@
|
||||||
|
//
|
||||||
|
// Component: Brand
|
||||||
|
//
|
||||||
|
|
||||||
|
.brand-link {
|
||||||
|
$brand-link-padding-y: $navbar-brand-padding-y + $navbar-padding-y;
|
||||||
|
display: block;
|
||||||
|
font-size: $navbar-brand-font-size;
|
||||||
|
line-height: $line-height-lg;
|
||||||
|
padding: $brand-link-padding-y $sidebar-padding-x;
|
||||||
|
transition: width $transition-speed $transition-fn;
|
||||||
|
white-space: nowrap;
|
||||||
|
|
||||||
|
&:hover {
|
||||||
|
color: $white;
|
||||||
|
text-decoration: none;
|
||||||
|
}
|
||||||
|
|
||||||
|
.text-sm & {
|
||||||
|
font-size: inherit;
|
||||||
|
}
|
||||||
|
|
||||||
|
[class*='sidebar-dark'] & {
|
||||||
|
border-bottom: 0;
|
||||||
|
color: rgba($white, .8);
|
||||||
|
}
|
||||||
|
|
||||||
|
[class*='sidebar-light'] & {
|
||||||
|
border-bottom: 0;
|
||||||
|
color: rgba($black, .8);
|
||||||
|
}
|
||||||
|
|
||||||
|
.brand-image {
|
||||||
|
float: left;
|
||||||
|
line-height: .8;
|
||||||
|
margin-left: .8rem;
|
||||||
|
margin-right: .5rem;
|
||||||
|
margin-top: -3px;
|
||||||
|
max-height: 33px;
|
||||||
|
width: auto;
|
||||||
|
}
|
||||||
|
|
||||||
|
.brand-image-xs {
|
||||||
|
float: left;
|
||||||
|
line-height: .8;
|
||||||
|
margin-top: -.1rem;
|
||||||
|
max-height: 33px;
|
||||||
|
width: auto;
|
||||||
|
}
|
||||||
|
|
||||||
|
.brand-image-xl {
|
||||||
|
line-height: .8;
|
||||||
|
max-height: 40px;
|
||||||
|
width: auto;
|
||||||
|
}
|
||||||
|
|
||||||
|
&.text-sm,
|
||||||
|
.text-sm & {
|
||||||
|
.brand-image {
|
||||||
|
height: 29px;
|
||||||
|
margin-bottom: -.25rem;
|
||||||
|
margin-left: .95rem;
|
||||||
|
margin-top: -.25rem;
|
||||||
|
}
|
||||||
|
|
||||||
|
.brand-image-xs {
|
||||||
|
margin-top: -.2rem;
|
||||||
|
max-height: 29px;
|
||||||
|
}
|
||||||
|
|
||||||
|
.brand-image-xl {
|
||||||
|
margin-top: -.225rem;
|
||||||
|
max-height: 38px;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
@ -0,0 +1,109 @@
|
||||||
|
//
|
||||||
|
// Component: Button
|
||||||
|
//
|
||||||
|
|
||||||
|
.btn {
|
||||||
|
border-width: 1px;
|
||||||
|
&.disabled,
|
||||||
|
&:disabled {
|
||||||
|
cursor: not-allowed;
|
||||||
|
}
|
||||||
|
|
||||||
|
// Flat buttons
|
||||||
|
&.btn-flat {
|
||||||
|
@include border-radius(0);
|
||||||
|
border-width: 1px;
|
||||||
|
box-shadow: none;
|
||||||
|
}
|
||||||
|
|
||||||
|
// input file btn
|
||||||
|
&.btn-file {
|
||||||
|
overflow: hidden;
|
||||||
|
position: relative;
|
||||||
|
|
||||||
|
> input[type='file'] {
|
||||||
|
background: $white;
|
||||||
|
cursor: inherit;
|
||||||
|
display: block;
|
||||||
|
font-size: 100px;
|
||||||
|
min-height: 100%;
|
||||||
|
min-width: 100%;
|
||||||
|
opacity: 0;
|
||||||
|
outline: none;
|
||||||
|
position: absolute;
|
||||||
|
right: 0;
|
||||||
|
text-align: right;
|
||||||
|
top: 0;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
.text-sm & {
|
||||||
|
font-size: $font-size-sm !important;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
// Button color variations
|
||||||
|
.btn-default {
|
||||||
|
background-color: $button-default-background-color;
|
||||||
|
border-color: $button-default-background-color;
|
||||||
|
color: $button-default-color;
|
||||||
|
|
||||||
|
&:hover,
|
||||||
|
&:active,
|
||||||
|
&.hover {
|
||||||
|
background-color: darken($button-default-background-color, 5%);
|
||||||
|
color: darken($button-default-color, 10%);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
// Application buttons
|
||||||
|
.btn-app {
|
||||||
|
@include border-radius(3px);
|
||||||
|
background-color: $button-default-background-color;
|
||||||
|
border: 1px solid $button-default-border-color;
|
||||||
|
color: $gray-600;
|
||||||
|
font-size: 12px;
|
||||||
|
height: 60px;
|
||||||
|
margin: 0 0 10px 10px;
|
||||||
|
min-width: 80px;
|
||||||
|
padding: 15px 5px;
|
||||||
|
position: relative;
|
||||||
|
text-align: center;
|
||||||
|
|
||||||
|
// Icons within the btn
|
||||||
|
> .fa,
|
||||||
|
> .fas,
|
||||||
|
> .far,
|
||||||
|
> .fab,
|
||||||
|
> .glyphicon,
|
||||||
|
> .ion {
|
||||||
|
display: block;
|
||||||
|
font-size: 20px;
|
||||||
|
}
|
||||||
|
|
||||||
|
&:hover {
|
||||||
|
background: $button-default-background-color;
|
||||||
|
border-color: darken($button-default-border-color, 20%);
|
||||||
|
color: $button-default-color;
|
||||||
|
}
|
||||||
|
|
||||||
|
&:active,
|
||||||
|
&:focus {
|
||||||
|
@include box-shadow(inset 0 3px 5px rgba($black, 0.125));
|
||||||
|
}
|
||||||
|
|
||||||
|
// The badge
|
||||||
|
> .badge {
|
||||||
|
font-size: 10px;
|
||||||
|
font-weight: 400;
|
||||||
|
position: absolute;
|
||||||
|
right: -10px;
|
||||||
|
top: -3px;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
// Extra Button Size
|
||||||
|
|
||||||
|
.btn-xs {
|
||||||
|
@include button-size($button-padding-y-xs, $button-padding-x-xs, $button-font-size-xs, $button-line-height-xs, $button-border-radius-xs);
|
||||||
|
}
|
||||||
|
|
@ -0,0 +1,51 @@
|
||||||
|
//
|
||||||
|
// Component: Callout
|
||||||
|
//
|
||||||
|
|
||||||
|
// Base styles (regardless of theme)
|
||||||
|
.callout {
|
||||||
|
@if $enable-rounded {
|
||||||
|
@include border-radius($border-radius);
|
||||||
|
}
|
||||||
|
|
||||||
|
@if $enable-shadows {
|
||||||
|
box-shadow: map-get($elevations, 1);
|
||||||
|
} @else {
|
||||||
|
border: 1px solid $gray-300;
|
||||||
|
}
|
||||||
|
|
||||||
|
background-color: $white;
|
||||||
|
border-left: 5px solid $gray-200;
|
||||||
|
margin-bottom: map-get($spacers, 3);
|
||||||
|
padding: 1rem;
|
||||||
|
|
||||||
|
a {
|
||||||
|
color: $gray-700;
|
||||||
|
text-decoration: underline;
|
||||||
|
|
||||||
|
&:hover {
|
||||||
|
color: $gray-200;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
p:last-child {
|
||||||
|
margin-bottom: 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
// Themes for different contexts
|
||||||
|
&.callout-danger {
|
||||||
|
border-left-color: darken(theme-color('danger'), 10%);
|
||||||
|
}
|
||||||
|
|
||||||
|
&.callout-warning {
|
||||||
|
border-left-color: darken(theme-color('warning'), 10%);
|
||||||
|
}
|
||||||
|
|
||||||
|
&.callout-info {
|
||||||
|
border-left-color: darken(theme-color('info'), 10%);
|
||||||
|
}
|
||||||
|
|
||||||
|
&.callout-success {
|
||||||
|
border-left-color: darken(theme-color('success'), 10%);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
@ -0,0 +1,474 @@
|
||||||
|
//
|
||||||
|
// Component: Cards
|
||||||
|
//
|
||||||
|
|
||||||
|
// Color variants
|
||||||
|
@each $name, $color in $theme-colors {
|
||||||
|
@include cards-variant($name, $color);
|
||||||
|
}
|
||||||
|
|
||||||
|
@each $name, $color in $colors {
|
||||||
|
@include cards-variant($name, $color);
|
||||||
|
}
|
||||||
|
|
||||||
|
.card {
|
||||||
|
@include box-shadow($card-shadow);
|
||||||
|
margin-bottom: map-get($spacers, 3);
|
||||||
|
border: 0;
|
||||||
|
&.bg-dark {
|
||||||
|
.card-header {
|
||||||
|
border-color: $card-dark-border-color;
|
||||||
|
}
|
||||||
|
|
||||||
|
&,
|
||||||
|
.card-body {
|
||||||
|
color: $white;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
&.maximized-card {
|
||||||
|
height: 100% !important;
|
||||||
|
left: 0;
|
||||||
|
max-height: 100% !important;
|
||||||
|
max-width: 100% !important;
|
||||||
|
position: fixed;
|
||||||
|
top: 0;
|
||||||
|
width: 100% !important;
|
||||||
|
z-index: 9999;
|
||||||
|
|
||||||
|
&.was-collapsed .card-body {
|
||||||
|
display: block !important;
|
||||||
|
}
|
||||||
|
|
||||||
|
[data-widget='collapse'] {
|
||||||
|
display: none;
|
||||||
|
}
|
||||||
|
|
||||||
|
.card-header,
|
||||||
|
.card-footer {
|
||||||
|
@include border-radius(0 !important);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
// collapsed mode
|
||||||
|
&.collapsed-card {
|
||||||
|
.card-body,
|
||||||
|
.card-footer {
|
||||||
|
display: none;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
.nav.flex-column {
|
||||||
|
> li {
|
||||||
|
border-bottom: 1px solid $card-border-color;
|
||||||
|
margin: 0;
|
||||||
|
|
||||||
|
&:last-of-type {
|
||||||
|
border-bottom: 0;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
// fixed height to 300px
|
||||||
|
&.height-control {
|
||||||
|
.card-body {
|
||||||
|
max-height: 300px;
|
||||||
|
overflow: auto;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
.border-right {
|
||||||
|
border-right: 1px solid $card-border-color;
|
||||||
|
}
|
||||||
|
|
||||||
|
.border-left {
|
||||||
|
border-left: 1px solid $card-border-color;
|
||||||
|
}
|
||||||
|
|
||||||
|
&.card-tabs {
|
||||||
|
&:not(.card-outline) {
|
||||||
|
& > .card-header {
|
||||||
|
border-bottom: 0;
|
||||||
|
|
||||||
|
.nav-item {
|
||||||
|
&:first-child .nav-link {
|
||||||
|
margin-left: -1px;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
&.card-outline {
|
||||||
|
.nav-item {
|
||||||
|
border-bottom: 0;
|
||||||
|
|
||||||
|
&:first-child .nav-link {
|
||||||
|
border-left: 0;
|
||||||
|
margin-left: 0;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
.card-tools {
|
||||||
|
margin: .3rem .5rem;
|
||||||
|
}
|
||||||
|
|
||||||
|
&:not(.expanding-card).collapsed-card {
|
||||||
|
.card-header {
|
||||||
|
border-bottom: 0;
|
||||||
|
|
||||||
|
.nav-tabs {
|
||||||
|
border-bottom: 0;
|
||||||
|
|
||||||
|
.nav-item {
|
||||||
|
margin-bottom: 0;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
&.expanding-card {
|
||||||
|
.card-header {
|
||||||
|
.nav-tabs {
|
||||||
|
.nav-item {
|
||||||
|
margin-bottom: -1px;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
&.card-outline-tabs {
|
||||||
|
border-top: 0;
|
||||||
|
|
||||||
|
.card-header {
|
||||||
|
.nav-item {
|
||||||
|
&:first-child .nav-link {
|
||||||
|
border-left: 0;
|
||||||
|
margin-left: 0;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
a {
|
||||||
|
border-top: 3px solid transparent;
|
||||||
|
|
||||||
|
&:hover {
|
||||||
|
border-top: 3px solid $nav-tabs-border-color;
|
||||||
|
}
|
||||||
|
|
||||||
|
&.active {
|
||||||
|
&:hover {
|
||||||
|
margin-top: 0;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
.card-tools {
|
||||||
|
margin: .5rem .5rem .3rem;
|
||||||
|
}
|
||||||
|
|
||||||
|
&:not(.expanding-card).collapsed-card .card-header {
|
||||||
|
border-bottom: 0;
|
||||||
|
|
||||||
|
.nav-tabs {
|
||||||
|
border-bottom: 0;
|
||||||
|
|
||||||
|
.nav-item {
|
||||||
|
margin-bottom: 0;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
&.expanding-card {
|
||||||
|
.card-header {
|
||||||
|
.nav-tabs {
|
||||||
|
.nav-item {
|
||||||
|
margin-bottom: -1px;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
// Maximized Card Body Scroll fix
|
||||||
|
html.maximized-card {
|
||||||
|
overflow: hidden;
|
||||||
|
}
|
||||||
|
|
||||||
|
// Add clearfix to header, body and footer
|
||||||
|
//.card-header,
|
||||||
|
//.card-body,
|
||||||
|
//.card-footer {
|
||||||
|
// @include clearfix;
|
||||||
|
//}
|
||||||
|
|
||||||
|
// Box header
|
||||||
|
.card-header {
|
||||||
|
background-color: transparent;
|
||||||
|
border-bottom: 0;
|
||||||
|
padding: (($card-spacer-y / 2) * 2) $card-spacer-x;
|
||||||
|
position: relative;
|
||||||
|
|
||||||
|
@if $enable-rounded {
|
||||||
|
@include border-top-radius($border-radius);
|
||||||
|
}
|
||||||
|
|
||||||
|
.collapsed-card & {
|
||||||
|
border-bottom: 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
> .card-tools {
|
||||||
|
float: right;
|
||||||
|
margin-right: -$card-spacer-x / 2;
|
||||||
|
|
||||||
|
.input-group,
|
||||||
|
.nav,
|
||||||
|
.pagination {
|
||||||
|
margin-bottom: -$card-spacer-y / 2.5;
|
||||||
|
margin-top: -$card-spacer-y / 2.5;
|
||||||
|
}
|
||||||
|
|
||||||
|
[data-toggle='tooltip'] {
|
||||||
|
position: relative;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
.card-title {
|
||||||
|
float: left;
|
||||||
|
font-size: $card-title-font-size;
|
||||||
|
font-weight: $card-title-font-weight;
|
||||||
|
margin: 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
.card-text {
|
||||||
|
clear: both;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
// Box Tools Buttons
|
||||||
|
.btn-tool {
|
||||||
|
background: transparent;
|
||||||
|
color: $gray-500;
|
||||||
|
font-size: $font-size-sm;
|
||||||
|
margin: -(($card-spacer-y / 2) * 2) 0;
|
||||||
|
padding: .25rem .5rem;
|
||||||
|
|
||||||
|
.btn-group.show &,
|
||||||
|
&:hover {
|
||||||
|
color: $gray-700;
|
||||||
|
}
|
||||||
|
|
||||||
|
.show &,
|
||||||
|
&:focus {
|
||||||
|
box-shadow: none !important;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
.text-sm {
|
||||||
|
.card-title {
|
||||||
|
font-size: $card-title-font-size-sm;
|
||||||
|
}
|
||||||
|
|
||||||
|
.nav-link {
|
||||||
|
padding: $card-nav-link-padding-sm-y $card-nav-link-padding-sm-x;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
// Box Body
|
||||||
|
.card-body {
|
||||||
|
// @include border-radius-sides(0, 0, $border-radius, $border-radius);
|
||||||
|
// .no-header & {
|
||||||
|
// @include border-top-radius($border-radius);
|
||||||
|
// }
|
||||||
|
|
||||||
|
// Tables within the box body
|
||||||
|
> .table {
|
||||||
|
margin-bottom: 0;
|
||||||
|
|
||||||
|
> thead > tr > th,
|
||||||
|
> thead > tr > td {
|
||||||
|
border-top-width: 0;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
// Calendar within the box body
|
||||||
|
.fc {
|
||||||
|
margin-top: 5px;
|
||||||
|
}
|
||||||
|
|
||||||
|
.full-width-chart {
|
||||||
|
margin: -19px;
|
||||||
|
}
|
||||||
|
|
||||||
|
&.p-0 .full-width-chart {
|
||||||
|
margin: -9px;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
.chart-legend {
|
||||||
|
@include list-unstyled;
|
||||||
|
margin: 10px 0;
|
||||||
|
|
||||||
|
> li {
|
||||||
|
@media (max-width: map-get($grid-breakpoints, sm)) {
|
||||||
|
float: left;
|
||||||
|
margin-right: 10px;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
// Comment Box
|
||||||
|
.card-comments {
|
||||||
|
background: $gray-100;
|
||||||
|
|
||||||
|
.card-comment {
|
||||||
|
@include clearfix;
|
||||||
|
border-bottom: 1px solid $gray-200;
|
||||||
|
padding: 8px 0;
|
||||||
|
|
||||||
|
&:last-of-type {
|
||||||
|
border-bottom: 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
&:first-of-type {
|
||||||
|
padding-top: 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
img {
|
||||||
|
height: $card-img-size;
|
||||||
|
width: $card-img-size;
|
||||||
|
float: left;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
.comment-text {
|
||||||
|
color: lighten($gray-700, 20%);
|
||||||
|
margin-left: 40px;
|
||||||
|
}
|
||||||
|
|
||||||
|
.username {
|
||||||
|
color: $gray-700;
|
||||||
|
display: block;
|
||||||
|
font-weight: 600;
|
||||||
|
}
|
||||||
|
|
||||||
|
.text-muted {
|
||||||
|
font-size: 12px;
|
||||||
|
font-weight: 400;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
// Widgets
|
||||||
|
//-----------
|
||||||
|
|
||||||
|
// Widget: TODO LIST
|
||||||
|
.todo-list {
|
||||||
|
list-style: none;
|
||||||
|
margin: 0;
|
||||||
|
overflow: auto;
|
||||||
|
padding: 0;
|
||||||
|
|
||||||
|
// Todo list element
|
||||||
|
> li {
|
||||||
|
@include border-radius(2px);
|
||||||
|
background: $gray-100;
|
||||||
|
border-left: 2px solid $gray-200;
|
||||||
|
color: $gray-700;
|
||||||
|
margin-bottom: 2px;
|
||||||
|
padding: 10px;
|
||||||
|
|
||||||
|
&:last-of-type {
|
||||||
|
margin-bottom: 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
> input[type='checkbox'] {
|
||||||
|
margin: 0 10px 0 5px;
|
||||||
|
}
|
||||||
|
|
||||||
|
.text {
|
||||||
|
display: inline-block;
|
||||||
|
font-weight: 600;
|
||||||
|
margin-left: 5px;
|
||||||
|
}
|
||||||
|
|
||||||
|
// Time labels
|
||||||
|
.badge {
|
||||||
|
font-size: .7rem;
|
||||||
|
margin-left: 10px;
|
||||||
|
}
|
||||||
|
|
||||||
|
// Tools and options box
|
||||||
|
.tools {
|
||||||
|
color: theme-color('danger');
|
||||||
|
display: none;
|
||||||
|
float: right;
|
||||||
|
|
||||||
|
// icons
|
||||||
|
> .fa,
|
||||||
|
> .fas,
|
||||||
|
> .far,
|
||||||
|
> .fab,
|
||||||
|
> .glyphicon,
|
||||||
|
> .ion {
|
||||||
|
cursor: pointer;
|
||||||
|
margin-right: 5px;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
&:hover .tools {
|
||||||
|
display: inline-block;
|
||||||
|
}
|
||||||
|
|
||||||
|
&.done {
|
||||||
|
color: darken($gray-500, 25%);
|
||||||
|
|
||||||
|
.text {
|
||||||
|
font-weight: 500;
|
||||||
|
text-decoration: line-through;
|
||||||
|
}
|
||||||
|
|
||||||
|
.badge {
|
||||||
|
background: $gray-500 !important;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
// Color variants
|
||||||
|
@each $name, $color in $theme-colors {
|
||||||
|
.#{$name} {
|
||||||
|
border-left-color: $color;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
@each $name, $color in $colors {
|
||||||
|
.#{$name} {
|
||||||
|
border-left-color: $color;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
.handle {
|
||||||
|
cursor: move;
|
||||||
|
display: inline-block;
|
||||||
|
margin: 0 5px;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
// END TODO WIDGET
|
||||||
|
|
||||||
|
// Input in box
|
||||||
|
.card-input {
|
||||||
|
max-width: 200px;
|
||||||
|
}
|
||||||
|
|
||||||
|
// Nav Tabs override
|
||||||
|
.card-default {
|
||||||
|
.nav-item {
|
||||||
|
&:first-child .nav-link {
|
||||||
|
border-left: 0;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
@ -0,0 +1,24 @@
|
||||||
|
//
|
||||||
|
// Component: Carousel
|
||||||
|
//
|
||||||
|
|
||||||
|
.carousel-control {
|
||||||
|
&.left,
|
||||||
|
&.right {
|
||||||
|
background-image: none;
|
||||||
|
}
|
||||||
|
|
||||||
|
> .fa,
|
||||||
|
> .fas,
|
||||||
|
> .far,
|
||||||
|
> .fab,
|
||||||
|
> .glyphicon,
|
||||||
|
> .ion {
|
||||||
|
display: inline-block;
|
||||||
|
font-size: 40px;
|
||||||
|
margin-top: -20px;
|
||||||
|
position: absolute;
|
||||||
|
top: 50%;
|
||||||
|
z-index: 5;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
@ -0,0 +1,91 @@
|
||||||
|
//
|
||||||
|
// Misc: Colors
|
||||||
|
//
|
||||||
|
|
||||||
|
// Background colors (theme colors)
|
||||||
|
@each $name, $color in $theme-colors {
|
||||||
|
@include background-variant($name, $color);
|
||||||
|
}
|
||||||
|
|
||||||
|
// Background colors (colors)
|
||||||
|
@each $name, $color in $colors {
|
||||||
|
@include background-variant($name, $color);
|
||||||
|
}
|
||||||
|
|
||||||
|
.bg-gray {
|
||||||
|
background-color: $gray-500;
|
||||||
|
color: color-yiq($gray-500);
|
||||||
|
}
|
||||||
|
|
||||||
|
.bg-gray-light {
|
||||||
|
background-color: lighten($gray-200, 3%);
|
||||||
|
color: color-yiq(lighten($gray-200, 3%)) !important;
|
||||||
|
}
|
||||||
|
|
||||||
|
.bg-black {
|
||||||
|
background-color: $black;
|
||||||
|
color: color-yiq($black) !important;
|
||||||
|
}
|
||||||
|
|
||||||
|
.bg-white {
|
||||||
|
background-color: $white;
|
||||||
|
color: color-yiq($white) !important;
|
||||||
|
}
|
||||||
|
|
||||||
|
// Gradient Background colors (theme colors)
|
||||||
|
@each $name, $color in $theme-colors {
|
||||||
|
@include background-gradient-variant($name, $color);
|
||||||
|
}
|
||||||
|
|
||||||
|
// Gradient Background colors (colors)
|
||||||
|
@each $name, $color in $colors {
|
||||||
|
@include background-gradient-variant($name, $color);
|
||||||
|
}
|
||||||
|
|
||||||
|
// Backgrund Color Disabled
|
||||||
|
[class^='bg-'].disabled {
|
||||||
|
opacity: .65;
|
||||||
|
}
|
||||||
|
|
||||||
|
// Text muted hover
|
||||||
|
a.text-muted:hover {
|
||||||
|
color: theme-color(primary) !important;
|
||||||
|
}
|
||||||
|
|
||||||
|
// Link Styles
|
||||||
|
.link-muted {
|
||||||
|
color: darken($gray-500, 30%);
|
||||||
|
|
||||||
|
&:hover,
|
||||||
|
&:focus {
|
||||||
|
color: darken($gray-500, 40%);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
.link-black {
|
||||||
|
color: $gray-600;
|
||||||
|
|
||||||
|
&:hover,
|
||||||
|
&:focus {
|
||||||
|
color: lighten($gray-500, 20%);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
// Accent colors (theme colors)
|
||||||
|
@each $name, $color in $theme-colors {
|
||||||
|
@include accent-variant($name, $color);
|
||||||
|
}
|
||||||
|
|
||||||
|
// Accent colors (colors)
|
||||||
|
@each $name, $color in $colors {
|
||||||
|
@include accent-variant($name, $color);
|
||||||
|
}
|
||||||
|
|
||||||
|
// Accent button override fix
|
||||||
|
[class*="accent-"] {
|
||||||
|
@each $name, $color in $theme-colors {
|
||||||
|
a.btn-#{$name} {
|
||||||
|
color: color-yiq($color);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
@ -0,0 +1,178 @@
|
||||||
|
//
|
||||||
|
// Component: Control Sidebar
|
||||||
|
//
|
||||||
|
|
||||||
|
html.control-sidebar-animate {
|
||||||
|
overflow-x: hidden;
|
||||||
|
}
|
||||||
|
|
||||||
|
.control-sidebar {
|
||||||
|
bottom: $main-footer-height;
|
||||||
|
position: absolute;
|
||||||
|
top: $main-header-height;
|
||||||
|
z-index: $zindex-control-sidebar;
|
||||||
|
|
||||||
|
&,
|
||||||
|
&::before {
|
||||||
|
bottom: $main-footer-height;
|
||||||
|
display: none;
|
||||||
|
right: -$control-sidebar-width;
|
||||||
|
width: $control-sidebar-width;
|
||||||
|
@include transition(right $transition-speed $transition-fn, display $transition-speed $transition-fn);
|
||||||
|
}
|
||||||
|
|
||||||
|
&::before {
|
||||||
|
content: '';
|
||||||
|
display: block;
|
||||||
|
position: fixed;
|
||||||
|
top: 0;
|
||||||
|
z-index: -1;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
body.text-sm {
|
||||||
|
.control-sidebar {
|
||||||
|
bottom: $main-footer-height-sm;
|
||||||
|
top: $main-header-height-sm;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
.main-header.text-sm ~ .control-sidebar {
|
||||||
|
top: $main-header-height-sm;
|
||||||
|
}
|
||||||
|
|
||||||
|
.main-footer.text-sm ~ .control-sidebar {
|
||||||
|
bottom: $main-footer-height-sm;
|
||||||
|
}
|
||||||
|
|
||||||
|
.control-sidebar-push-slide {
|
||||||
|
.content-wrapper,
|
||||||
|
.main-footer {
|
||||||
|
@include transition(margin-right $transition-speed $transition-fn);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
// Control sidebar open state
|
||||||
|
.control-sidebar-open {
|
||||||
|
.control-sidebar {
|
||||||
|
display: block;
|
||||||
|
|
||||||
|
&,
|
||||||
|
&::before {
|
||||||
|
right: 0;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
&.control-sidebar-push,
|
||||||
|
&.control-sidebar-push-slide {
|
||||||
|
.content-wrapper,
|
||||||
|
.main-footer {
|
||||||
|
margin-right: $control-sidebar-width;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
// Control sidebar slide over content state
|
||||||
|
.control-sidebar-slide-open {
|
||||||
|
.control-sidebar {
|
||||||
|
display: block;
|
||||||
|
|
||||||
|
&,
|
||||||
|
&::before {
|
||||||
|
right: 0;
|
||||||
|
@include transition(right $transition-speed $transition-fn, display $transition-speed $transition-fn);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
&.control-sidebar-push,
|
||||||
|
&.control-sidebar-push-slide {
|
||||||
|
.content-wrapper,
|
||||||
|
.main-footer {
|
||||||
|
margin-right: $control-sidebar-width;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
// Dark skin
|
||||||
|
.control-sidebar-dark {
|
||||||
|
&,
|
||||||
|
a,
|
||||||
|
.nav-link {
|
||||||
|
color: $sidebar-dark-color;
|
||||||
|
}
|
||||||
|
|
||||||
|
// Background
|
||||||
|
& {
|
||||||
|
background: $sidebar-dark-bg;
|
||||||
|
}
|
||||||
|
|
||||||
|
a:hover {
|
||||||
|
color: $sidebar-dark-hover-color;
|
||||||
|
}
|
||||||
|
|
||||||
|
// Headers and labels
|
||||||
|
h1,
|
||||||
|
h2,
|
||||||
|
h3,
|
||||||
|
h4,
|
||||||
|
h5,
|
||||||
|
h6,
|
||||||
|
label {
|
||||||
|
color: $sidebar-dark-hover-color;
|
||||||
|
}
|
||||||
|
|
||||||
|
// Tabs
|
||||||
|
.nav-tabs {
|
||||||
|
background-color: $sidebar-dark-hover-bg;
|
||||||
|
border-bottom: 0;
|
||||||
|
margin-bottom: 5px;
|
||||||
|
|
||||||
|
.nav-item {
|
||||||
|
margin: 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
.nav-link {
|
||||||
|
border-radius: 0;
|
||||||
|
padding: 10px 20px;
|
||||||
|
position: relative;
|
||||||
|
text-align: center;
|
||||||
|
|
||||||
|
&,
|
||||||
|
&:hover,
|
||||||
|
&:active,
|
||||||
|
&:focus,
|
||||||
|
&.active {
|
||||||
|
border: 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
&:hover,
|
||||||
|
&:active,
|
||||||
|
&:focus,
|
||||||
|
&.active {
|
||||||
|
border-bottom-color: transparent;
|
||||||
|
border-left-color: transparent;
|
||||||
|
border-top-color: transparent;
|
||||||
|
color: $sidebar-dark-hover-color;
|
||||||
|
}
|
||||||
|
|
||||||
|
&.active {
|
||||||
|
background-color: $sidebar-dark-bg;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
.tab-pane {
|
||||||
|
padding: 10px 15px;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
// Light skin
|
||||||
|
.control-sidebar-light {
|
||||||
|
color: lighten($sidebar-light-color, 10%);
|
||||||
|
|
||||||
|
// Background
|
||||||
|
& {
|
||||||
|
background: $sidebar-light-bg;
|
||||||
|
border-left: $main-header-bottom-border;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
@ -0,0 +1,224 @@
|
||||||
|
//
|
||||||
|
// Component: Direct Chat
|
||||||
|
//
|
||||||
|
|
||||||
|
.direct-chat {
|
||||||
|
.card-body {
|
||||||
|
overflow-x: hidden;
|
||||||
|
padding: 0;
|
||||||
|
position: relative;
|
||||||
|
}
|
||||||
|
|
||||||
|
&.chat-pane-open {
|
||||||
|
.direct-chat-contacts {
|
||||||
|
@include translate(0, 0);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
&.timestamp-light {
|
||||||
|
.direct-chat-timestamp {
|
||||||
|
color: lighten(color-yiq($yiq-text-light), 10%);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
&.timestamp-dark {
|
||||||
|
.direct-chat-timestamp {
|
||||||
|
color: darken(color-yiq($yiq-text-dark), 20%);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
.direct-chat-messages {
|
||||||
|
@include translate(0, 0);
|
||||||
|
height: 250px;
|
||||||
|
overflow: auto;
|
||||||
|
padding: 10px;
|
||||||
|
}
|
||||||
|
|
||||||
|
.direct-chat-msg,
|
||||||
|
.direct-chat-text {
|
||||||
|
display: block;
|
||||||
|
}
|
||||||
|
|
||||||
|
.direct-chat-msg {
|
||||||
|
@include clearfix;
|
||||||
|
margin-bottom: 10px;
|
||||||
|
}
|
||||||
|
|
||||||
|
.direct-chat-messages,
|
||||||
|
.direct-chat-contacts {
|
||||||
|
transition: transform .5s ease-in-out;
|
||||||
|
}
|
||||||
|
|
||||||
|
.direct-chat-text {
|
||||||
|
@if $enable-rounded {
|
||||||
|
@include border-radius($border-radius-lg);
|
||||||
|
}
|
||||||
|
|
||||||
|
background: $direct-chat-default-msg-bg;
|
||||||
|
border: 1px solid $direct-chat-default-msg-border-color;
|
||||||
|
color: $direct-chat-default-font-color;
|
||||||
|
margin: 5px 0 0 50px;
|
||||||
|
padding: 5px 10px;
|
||||||
|
position: relative;
|
||||||
|
|
||||||
|
//Create the arrow
|
||||||
|
&::after,
|
||||||
|
&::before {
|
||||||
|
border: solid transparent;
|
||||||
|
border-right-color: $direct-chat-default-msg-border-color;
|
||||||
|
content: ' ';
|
||||||
|
height: 0;
|
||||||
|
pointer-events: none;
|
||||||
|
position: absolute;
|
||||||
|
right: 100%;
|
||||||
|
top: 15px;
|
||||||
|
width: 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
&::after {
|
||||||
|
border-width: 5px;
|
||||||
|
margin-top: -5px;
|
||||||
|
}
|
||||||
|
|
||||||
|
&::before {
|
||||||
|
border-width: 6px;
|
||||||
|
margin-top: -6px;
|
||||||
|
}
|
||||||
|
|
||||||
|
.right & {
|
||||||
|
margin-left: 0;
|
||||||
|
margin-right: 50px;
|
||||||
|
|
||||||
|
&::after,
|
||||||
|
&::before {
|
||||||
|
border-left-color: $direct-chat-default-msg-border-color;
|
||||||
|
border-right-color: transparent;
|
||||||
|
left: 100%;
|
||||||
|
right: auto;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
.direct-chat-img {
|
||||||
|
@include border-radius(50%);
|
||||||
|
float: left;
|
||||||
|
height: 40px;
|
||||||
|
width: 40px;
|
||||||
|
|
||||||
|
.right & {
|
||||||
|
float: right;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
.direct-chat-infos {
|
||||||
|
display: block;
|
||||||
|
font-size: $font-size-sm;
|
||||||
|
margin-bottom: 2px;
|
||||||
|
}
|
||||||
|
|
||||||
|
.direct-chat-name {
|
||||||
|
font-weight: 600;
|
||||||
|
}
|
||||||
|
|
||||||
|
.direct-chat-timestamp {
|
||||||
|
color: darken($gray-500, 25%);
|
||||||
|
}
|
||||||
|
|
||||||
|
//Direct chat contacts pane
|
||||||
|
.direct-chat-contacts-open {
|
||||||
|
.direct-chat-contacts {
|
||||||
|
@include translate(0, 0);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
.direct-chat-contacts {
|
||||||
|
@include translate(101%, 0);
|
||||||
|
background: $dark;
|
||||||
|
bottom: 0;
|
||||||
|
color: $white;
|
||||||
|
height: 250px;
|
||||||
|
overflow: auto;
|
||||||
|
position: absolute;
|
||||||
|
top: 0;
|
||||||
|
width: 100%;
|
||||||
|
}
|
||||||
|
|
||||||
|
.direct-chat-contacts-light {
|
||||||
|
background: $light;
|
||||||
|
|
||||||
|
.contacts-list-name {
|
||||||
|
color: $gray-700;
|
||||||
|
}
|
||||||
|
|
||||||
|
.contacts-list-date {
|
||||||
|
color: $gray-600;
|
||||||
|
}
|
||||||
|
|
||||||
|
.contacts-list-msg {
|
||||||
|
color: darken($gray-600, 10%);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
//Contacts list -- for displaying contacts in direct chat contacts pane
|
||||||
|
.contacts-list {
|
||||||
|
@include list-unstyled;
|
||||||
|
|
||||||
|
> li {
|
||||||
|
@include clearfix;
|
||||||
|
border-bottom: 1px solid rgba($black, 0.2);
|
||||||
|
margin: 0;
|
||||||
|
padding: 10px;
|
||||||
|
|
||||||
|
&:last-of-type {
|
||||||
|
border-bottom: 0;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
.contacts-list-img {
|
||||||
|
@include border-radius(50%);
|
||||||
|
float: left;
|
||||||
|
width: 40px;
|
||||||
|
}
|
||||||
|
|
||||||
|
.contacts-list-info {
|
||||||
|
color: $white;
|
||||||
|
margin-left: 45px;
|
||||||
|
}
|
||||||
|
|
||||||
|
.contacts-list-name,
|
||||||
|
.contacts-list-status {
|
||||||
|
display: block;
|
||||||
|
}
|
||||||
|
|
||||||
|
.contacts-list-name {
|
||||||
|
font-weight: 600;
|
||||||
|
}
|
||||||
|
|
||||||
|
.contacts-list-status {
|
||||||
|
font-size: $font-size-sm;
|
||||||
|
}
|
||||||
|
|
||||||
|
.contacts-list-date {
|
||||||
|
color: $gray-400;
|
||||||
|
font-weight: normal;
|
||||||
|
}
|
||||||
|
|
||||||
|
.contacts-list-msg {
|
||||||
|
color: darken($gray-400, 10%);
|
||||||
|
}
|
||||||
|
|
||||||
|
// Color variants
|
||||||
|
@each $name, $color in $theme-colors {
|
||||||
|
.direct-chat-#{$name} {
|
||||||
|
@include direct-chat-variant($color);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
@each $name, $color in $colors {
|
||||||
|
.direct-chat-#{$name} {
|
||||||
|
@include direct-chat-variant($color);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
@ -0,0 +1,272 @@
|
||||||
|
//
|
||||||
|
// Component: Dropdown
|
||||||
|
//
|
||||||
|
|
||||||
|
// General Dropdown Rules
|
||||||
|
//.dropdown-item {
|
||||||
|
// &:first-of-type {
|
||||||
|
// @include border-top-radius($border-radius);
|
||||||
|
// }
|
||||||
|
// &:last-of-type {
|
||||||
|
// @include border-bottom-radius($border-radius);
|
||||||
|
// }
|
||||||
|
//}
|
||||||
|
|
||||||
|
.text-sm {
|
||||||
|
.dropdown-menu {
|
||||||
|
font-size: $font-size-sm !important;
|
||||||
|
}
|
||||||
|
|
||||||
|
.dropdown-toggle::after {
|
||||||
|
vertical-align: .2rem
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
.dropdown-item-title {
|
||||||
|
font-size: $font-size-base;
|
||||||
|
margin: 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
.dropdown-icon {
|
||||||
|
&::after {
|
||||||
|
margin-left: 0;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
// Dropdown Sizes
|
||||||
|
.dropdown-menu-lg {
|
||||||
|
max-width: 300px;
|
||||||
|
min-width: 280px;
|
||||||
|
padding: 0;
|
||||||
|
|
||||||
|
.dropdown-divider {
|
||||||
|
margin: 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
.dropdown-item {
|
||||||
|
padding: $dropdown-padding-y $dropdown-item-padding-x;
|
||||||
|
}
|
||||||
|
|
||||||
|
p {
|
||||||
|
margin: 0;
|
||||||
|
white-space: normal;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
// Dropdown Submenu
|
||||||
|
.dropdown-submenu {
|
||||||
|
position: relative;
|
||||||
|
|
||||||
|
& > a:after {
|
||||||
|
@include caret-right;
|
||||||
|
float: right;
|
||||||
|
margin-left: .5rem;
|
||||||
|
margin-top: .5rem;
|
||||||
|
}
|
||||||
|
|
||||||
|
& > .dropdown-menu {
|
||||||
|
left: 100%;
|
||||||
|
margin-left: 0px;
|
||||||
|
margin-top: 0px;
|
||||||
|
top: 0;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
// Dropdown Hover
|
||||||
|
.dropdown-hover {
|
||||||
|
&:hover,
|
||||||
|
&.nav-item.dropdown:hover,
|
||||||
|
.dropdown-submenu:hover,
|
||||||
|
&.dropdown-submenu:hover {
|
||||||
|
> .dropdown-menu {
|
||||||
|
display: block;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
// Dropdown Sizes
|
||||||
|
.dropdown-menu-xl {
|
||||||
|
max-width: 420px;
|
||||||
|
min-width: 360px;
|
||||||
|
padding: 0;
|
||||||
|
|
||||||
|
.dropdown-divider {
|
||||||
|
margin: 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
.dropdown-item {
|
||||||
|
padding: $dropdown-padding-y $dropdown-item-padding-x;
|
||||||
|
}
|
||||||
|
|
||||||
|
p {
|
||||||
|
margin: 0;
|
||||||
|
white-space: normal;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
// Dropdown header and footer
|
||||||
|
.dropdown-footer,
|
||||||
|
.dropdown-header {
|
||||||
|
display: block;
|
||||||
|
font-size: $font-size-sm;
|
||||||
|
padding: .5rem $dropdown-item-padding-x;
|
||||||
|
text-align: center;
|
||||||
|
}
|
||||||
|
|
||||||
|
// Add fade animation to dropdown menus by appending
|
||||||
|
// the class .animated-dropdown-menu to the .dropdown-menu ul (or ol)
|
||||||
|
.open:not(.dropup) > .animated-dropdown-menu {
|
||||||
|
@include animation(flipInX .7s both);
|
||||||
|
backface-visibility: visible !important;
|
||||||
|
}
|
||||||
|
|
||||||
|
@keyframes flipInX {
|
||||||
|
0% {
|
||||||
|
transform: perspective(400px) rotate3d(1, 0, 0, 90deg);
|
||||||
|
transition-timing-function: ease-in;
|
||||||
|
opacity: 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
40% {
|
||||||
|
transform: perspective(400px) rotate3d(1, 0, 0, -20deg);
|
||||||
|
transition-timing-function: ease-in;
|
||||||
|
}
|
||||||
|
|
||||||
|
60% {
|
||||||
|
transform: perspective(400px) rotate3d(1, 0, 0, 10deg);
|
||||||
|
opacity: 1;
|
||||||
|
}
|
||||||
|
|
||||||
|
80% {
|
||||||
|
transform: perspective(400px) rotate3d(1, 0, 0, -5deg);
|
||||||
|
}
|
||||||
|
|
||||||
|
100% {
|
||||||
|
transform: perspective(400px);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
// Fix dropdown menu in navbars
|
||||||
|
.navbar-custom-menu > .navbar-nav {
|
||||||
|
> li {
|
||||||
|
position: relative;
|
||||||
|
> .dropdown-menu {
|
||||||
|
position: absolute;
|
||||||
|
right: 0;
|
||||||
|
left: auto;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
@include media-breakpoint-down(sm) {
|
||||||
|
.navbar-custom-menu > .navbar-nav {
|
||||||
|
float: right;
|
||||||
|
> li {
|
||||||
|
position: static;
|
||||||
|
> .dropdown-menu {
|
||||||
|
position: absolute;
|
||||||
|
right: 5%;
|
||||||
|
left: auto;
|
||||||
|
border: 1px solid #ddd;
|
||||||
|
background: $white;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
// User Menu
|
||||||
|
.navbar-nav > .user-menu {
|
||||||
|
> .nav-link:after {
|
||||||
|
content:none;
|
||||||
|
}
|
||||||
|
|
||||||
|
> .dropdown-menu {
|
||||||
|
@include border-top-radius(0);
|
||||||
|
padding: 0;
|
||||||
|
width: 280px;
|
||||||
|
|
||||||
|
&,
|
||||||
|
> .user-body {
|
||||||
|
@include border-bottom-radius(4px);
|
||||||
|
}
|
||||||
|
|
||||||
|
// Header menu
|
||||||
|
> li.user-header {
|
||||||
|
height: 175px;
|
||||||
|
padding: 10px;
|
||||||
|
text-align: center;
|
||||||
|
|
||||||
|
// User image
|
||||||
|
> img {
|
||||||
|
z-index: 5;
|
||||||
|
height: 90px;
|
||||||
|
width: 90px;
|
||||||
|
border: 3px solid;
|
||||||
|
border-color: transparent;
|
||||||
|
border-color: rgba(255, 255, 255, 0.2);
|
||||||
|
}
|
||||||
|
|
||||||
|
> p {
|
||||||
|
z-index: 5;
|
||||||
|
font-size: 17px;
|
||||||
|
//text-shadow: 2px 2px 3px #333333;
|
||||||
|
margin-top: 10px;
|
||||||
|
|
||||||
|
> small {
|
||||||
|
display: block;
|
||||||
|
font-size: 12px;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
// Menu Body
|
||||||
|
> .user-body {
|
||||||
|
@include clearfix;
|
||||||
|
border-bottom: 1px solid $gray-700;
|
||||||
|
border-top: 1px solid $gray-300;
|
||||||
|
padding: 15px;
|
||||||
|
|
||||||
|
a {
|
||||||
|
@include media-breakpoint-up(sm) {
|
||||||
|
background: $white !important;
|
||||||
|
color: $gray-700 !important;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
// Menu Footer
|
||||||
|
> .user-footer {
|
||||||
|
@include clearfix;
|
||||||
|
background-color: $gray-100;
|
||||||
|
padding: 10px;
|
||||||
|
|
||||||
|
.btn-default {
|
||||||
|
color: $gray-600;
|
||||||
|
|
||||||
|
&:hover {
|
||||||
|
@include media-breakpoint-up(sm) {
|
||||||
|
background-color: $gray-100;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
.user-image {
|
||||||
|
@include media-breakpoint-up(sm) {
|
||||||
|
float: none;
|
||||||
|
line-height: 10px;
|
||||||
|
margin-right: .4rem;
|
||||||
|
margin-top: -8px;
|
||||||
|
}
|
||||||
|
|
||||||
|
border-radius: 50%;
|
||||||
|
float: left;
|
||||||
|
height: $sidebar-user-image-width;
|
||||||
|
margin-right: 10px;
|
||||||
|
margin-top: -2px;
|
||||||
|
width: $sidebar-user-image-width;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
@ -0,0 +1,14 @@
|
||||||
|
//
|
||||||
|
// Component: Elevation
|
||||||
|
//
|
||||||
|
|
||||||
|
.elevation-0 {
|
||||||
|
box-shadow: none !important;
|
||||||
|
}
|
||||||
|
|
||||||
|
// Background colors (colors)
|
||||||
|
@each $name, $value in $elevations {
|
||||||
|
.elevation-#{$name} {
|
||||||
|
box-shadow: $value !important;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
@ -0,0 +1,277 @@
|
||||||
|
//
|
||||||
|
// Component: Forms
|
||||||
|
//
|
||||||
|
|
||||||
|
.form-group {
|
||||||
|
&.has-icon {
|
||||||
|
position: relative;
|
||||||
|
|
||||||
|
.form-control {
|
||||||
|
padding-right: 35px;
|
||||||
|
}
|
||||||
|
|
||||||
|
.form-icon {
|
||||||
|
background-color: transparent;
|
||||||
|
border: 0;
|
||||||
|
cursor: pointer;
|
||||||
|
font-size: 1rem;
|
||||||
|
// margin-top: -3px;
|
||||||
|
padding: $input-btn-padding-y $input-btn-padding-x;
|
||||||
|
position: absolute;
|
||||||
|
right: 3px;
|
||||||
|
top: 0;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
// Button groups
|
||||||
|
.btn-group-vertical {
|
||||||
|
.btn {
|
||||||
|
&.btn-flat:first-of-type,
|
||||||
|
&.btn-flat:last-of-type {
|
||||||
|
@include border-radius(0);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
// Support icons in form-control
|
||||||
|
.form-control-feedback {
|
||||||
|
&.fa,
|
||||||
|
&.fas,
|
||||||
|
&.far,
|
||||||
|
&.fab,
|
||||||
|
&.glyphicon,
|
||||||
|
&.ion {
|
||||||
|
line-height: $input-height;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
.input-lg + .form-control-feedback,
|
||||||
|
.input-group-lg + .form-control-feedback {
|
||||||
|
&.fa,
|
||||||
|
&.fas,
|
||||||
|
&.far,
|
||||||
|
&.fab,
|
||||||
|
&.glyphicon,
|
||||||
|
&.ion {
|
||||||
|
line-height: $input-height-lg;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
.form-group-lg {
|
||||||
|
.form-control + .form-control-feedback {
|
||||||
|
&.fa,
|
||||||
|
&.fas,
|
||||||
|
&.far,
|
||||||
|
&.fab,
|
||||||
|
&.glyphicon,
|
||||||
|
&.ion {
|
||||||
|
line-height: $input-height-lg;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
.input-sm + .form-control-feedback,
|
||||||
|
.input-group-sm + .form-control-feedback {
|
||||||
|
&.fa,
|
||||||
|
&.fas,
|
||||||
|
&.far,
|
||||||
|
&.fab,
|
||||||
|
&.glyphicon,
|
||||||
|
&.ion {
|
||||||
|
line-height: $input-height-sm;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
.form-group-sm {
|
||||||
|
.form-control + .form-control-feedback {
|
||||||
|
&.fa,
|
||||||
|
&.fas,
|
||||||
|
&.far,
|
||||||
|
&.fab,
|
||||||
|
&.glyphicon,
|
||||||
|
&.ion {
|
||||||
|
line-height: $input-height-sm;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
//label:not(.form-check-label):not(.custom-file-label) {
|
||||||
|
// font-weight: $font-weight-bold;
|
||||||
|
//}
|
||||||
|
|
||||||
|
.warning-feedback {
|
||||||
|
@include font-size($form-feedback-font-size);
|
||||||
|
color: theme-color('warning');
|
||||||
|
display: none;
|
||||||
|
margin-top: $form-feedback-margin-top;
|
||||||
|
width: 100%;
|
||||||
|
}
|
||||||
|
|
||||||
|
.warning-tooltip {
|
||||||
|
@include border-radius($form-feedback-tooltip-border-radius);
|
||||||
|
@include font-size($form-feedback-tooltip-font-size);
|
||||||
|
background-color: rgba(theme-color('warning'), $form-feedback-tooltip-opacity);
|
||||||
|
color: color-yiq(theme-color('warning'));
|
||||||
|
display: none;
|
||||||
|
line-height: $form-feedback-tooltip-line-height;
|
||||||
|
margin-top: .1rem;
|
||||||
|
max-width: 100%; // Contain to parent when possible
|
||||||
|
padding: $form-feedback-tooltip-padding-y $form-feedback-tooltip-padding-x;
|
||||||
|
position: absolute;
|
||||||
|
top: 100%;
|
||||||
|
z-index: 5;
|
||||||
|
}
|
||||||
|
|
||||||
|
.form-control {
|
||||||
|
&.is-warning {
|
||||||
|
border-color: theme-color('warning');
|
||||||
|
|
||||||
|
@if $enable-validation-icons {
|
||||||
|
// padding-right: $input-height-inner;
|
||||||
|
// background-image: none;
|
||||||
|
// background-repeat: no-repeat;
|
||||||
|
// background-position: center right $input-height-inner-quarter;
|
||||||
|
// background-size: $input-height-inner-half $input-height-inner-half;
|
||||||
|
}
|
||||||
|
|
||||||
|
&:focus {
|
||||||
|
border-color: theme-color('warning');
|
||||||
|
box-shadow: 0 0 0 $input-focus-width rgba(theme-color('warning'), .25);
|
||||||
|
}
|
||||||
|
|
||||||
|
~ .warning-feedback,
|
||||||
|
~ .warning-tooltip {
|
||||||
|
display: block;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
// stylelint-disable-next-line selector-no-qualifying-type
|
||||||
|
textarea.form-control {
|
||||||
|
&.is-warning {
|
||||||
|
@if $enable-validation-icons {
|
||||||
|
padding-right: $input-height-inner;
|
||||||
|
background-position: top $input-height-inner-quarter right $input-height-inner-quarter;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
.custom-select {
|
||||||
|
&.is-warning {
|
||||||
|
border-color: theme-color('warning');
|
||||||
|
|
||||||
|
@if $enable-validation-icons {
|
||||||
|
// padding-right: $custom-select-feedback-icon-padding-right;
|
||||||
|
// background: $custom-select-background, none $custom-select-bg no-repeat $custom-select-feedback-icon-position / $custom-select-feedback-icon-size;
|
||||||
|
}
|
||||||
|
|
||||||
|
&:focus {
|
||||||
|
border-color: theme-color('warning');
|
||||||
|
box-shadow: 0 0 0 $input-focus-width rgba(theme-color('warning'), .25);
|
||||||
|
}
|
||||||
|
|
||||||
|
~ .warning-feedback,
|
||||||
|
~ .warning-tooltip {
|
||||||
|
display: block;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
.form-control-file {
|
||||||
|
&.is-warning {
|
||||||
|
~ .warning-feedback,
|
||||||
|
~ .warning-tooltip {
|
||||||
|
display: block;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
.form-check-input {
|
||||||
|
&.is-warning {
|
||||||
|
~ .form-check-label {
|
||||||
|
color: theme-color('warning');
|
||||||
|
}
|
||||||
|
|
||||||
|
~ .warning-feedback,
|
||||||
|
~ .warning-tooltip {
|
||||||
|
display: block;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
.custom-control-input.is-warning {
|
||||||
|
~ .custom-control-label {
|
||||||
|
color: theme-color('warning');
|
||||||
|
|
||||||
|
&::before {
|
||||||
|
border-color: theme-color('warning');
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
~ .warning-feedback,
|
||||||
|
~ .warning-tooltip {
|
||||||
|
display: block;
|
||||||
|
}
|
||||||
|
|
||||||
|
&:checked {
|
||||||
|
~ .custom-control-label::before {
|
||||||
|
@include gradient-bg(lighten(theme-color('warning'), 10%));
|
||||||
|
border-color: lighten(theme-color('warning'), 10%);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
&:focus {
|
||||||
|
~ .custom-control-label::before {
|
||||||
|
box-shadow: 0 0 0 $input-focus-width rgba(theme-color('warning'), .25);
|
||||||
|
}
|
||||||
|
|
||||||
|
&:not(:checked) ~ .custom-control-label::before {
|
||||||
|
border-color: theme-color('warning');
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
// custom file
|
||||||
|
.custom-file-input {
|
||||||
|
&.is-warning {
|
||||||
|
~ .custom-file-label {
|
||||||
|
border-color: theme-color('warning');
|
||||||
|
}
|
||||||
|
|
||||||
|
~ .warning-feedback,
|
||||||
|
~ .warning-tooltip {
|
||||||
|
display: block;
|
||||||
|
}
|
||||||
|
|
||||||
|
&:focus {
|
||||||
|
~ .custom-file-label {
|
||||||
|
border-color: theme-color('warning');
|
||||||
|
box-shadow: 0 0 0 $input-focus-width rgba(theme-color('warning'), .25);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
// custom switch color variations
|
||||||
|
.custom-switch {
|
||||||
|
@each $name, $color in $theme-colors {
|
||||||
|
@include custom-switch-variant($name, $color);
|
||||||
|
}
|
||||||
|
|
||||||
|
@each $name, $color in $colors {
|
||||||
|
@include custom-switch-variant($name, $color);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
// custom range color variations
|
||||||
|
.custom-range {
|
||||||
|
@each $name, $color in $theme-colors {
|
||||||
|
@include custom-range-variant($name, $color);
|
||||||
|
}
|
||||||
|
|
||||||
|
@each $name, $color in $colors {
|
||||||
|
@include custom-range-variant($name, $color);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
@ -0,0 +1,140 @@
|
||||||
|
//
|
||||||
|
// Component: Info Box
|
||||||
|
//
|
||||||
|
|
||||||
|
.info-box {
|
||||||
|
@include box-shadow($card-shadow);
|
||||||
|
@include border-radius($border-radius);
|
||||||
|
|
||||||
|
background: $white;
|
||||||
|
display: flex;
|
||||||
|
margin-bottom: map-get($spacers, 3);
|
||||||
|
min-height: 80px;
|
||||||
|
padding: .5rem;
|
||||||
|
position: relative;
|
||||||
|
|
||||||
|
.progress {
|
||||||
|
background-color: rgba($black, .125);
|
||||||
|
height: 2px;
|
||||||
|
margin: 5px 0;
|
||||||
|
|
||||||
|
.progress-bar {
|
||||||
|
background-color: $white;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
.info-box-icon {
|
||||||
|
@if $enable-rounded {
|
||||||
|
border-radius: $border-radius;
|
||||||
|
}
|
||||||
|
|
||||||
|
align-items: center;
|
||||||
|
display: flex;
|
||||||
|
font-size: 1.875rem;
|
||||||
|
justify-content: center;
|
||||||
|
text-align: center;
|
||||||
|
width: 70px;
|
||||||
|
|
||||||
|
> img {
|
||||||
|
max-width: 100%;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
.info-box-content {
|
||||||
|
flex: 1;
|
||||||
|
padding: 5px 10px;
|
||||||
|
}
|
||||||
|
|
||||||
|
.info-box-number {
|
||||||
|
display: block;
|
||||||
|
font-weight: $font-weight-bold;
|
||||||
|
}
|
||||||
|
|
||||||
|
.progress-description,
|
||||||
|
.info-box-text {
|
||||||
|
display: block;
|
||||||
|
overflow: hidden;
|
||||||
|
text-overflow: ellipsis;
|
||||||
|
white-space: nowrap;
|
||||||
|
}
|
||||||
|
|
||||||
|
@each $name, $color in $theme-colors {
|
||||||
|
.info-box {
|
||||||
|
.bg-#{$name},
|
||||||
|
.bg-gradient-#{$name} {
|
||||||
|
color: color-yiq($color);
|
||||||
|
|
||||||
|
.progress-bar {
|
||||||
|
background-color: color-yiq($color);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
.info-box-more {
|
||||||
|
display: block;
|
||||||
|
}
|
||||||
|
|
||||||
|
.progress-description {
|
||||||
|
margin: 0;
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
@include media-breakpoint-up(md) {
|
||||||
|
.col-xl-2 &,
|
||||||
|
.col-lg-2 &,
|
||||||
|
.col-md-2 & {
|
||||||
|
.progress-description {
|
||||||
|
display: none;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
.col-xl-3 &,
|
||||||
|
.col-lg-3 &,
|
||||||
|
.col-md-3 & {
|
||||||
|
.progress-description {
|
||||||
|
display: none;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
@include media-breakpoint-up(lg) {
|
||||||
|
.col-xl-2 &,
|
||||||
|
.col-lg-2 &,
|
||||||
|
.col-md-2 & {
|
||||||
|
.progress-description {
|
||||||
|
@include font-size(.75rem);
|
||||||
|
display: block;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
.col-xl-3 &,
|
||||||
|
.col-lg-3 &,
|
||||||
|
.col-md-3 & {
|
||||||
|
.progress-description {
|
||||||
|
@include font-size(.75rem);
|
||||||
|
display: block;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
@include media-breakpoint-up(xl) {
|
||||||
|
.col-xl-2 &,
|
||||||
|
.col-lg-2 &,
|
||||||
|
.col-md-2 & {
|
||||||
|
.progress-description {
|
||||||
|
@include font-size(1rem);
|
||||||
|
display: block;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
.col-xl-3 &,
|
||||||
|
.col-lg-3 &,
|
||||||
|
.col-md-3 & {
|
||||||
|
.progress-description {
|
||||||
|
@include font-size(1rem);
|
||||||
|
display: block;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
@ -0,0 +1,633 @@
|
||||||
|
//
|
||||||
|
// Core: Layout
|
||||||
|
//
|
||||||
|
|
||||||
|
html.scroll-smooth {
|
||||||
|
scroll-behavior: smooth;
|
||||||
|
}
|
||||||
|
|
||||||
|
html,
|
||||||
|
body,
|
||||||
|
.wrapper {
|
||||||
|
min-height: 100%;
|
||||||
|
}
|
||||||
|
|
||||||
|
.wrapper {
|
||||||
|
position: relative;
|
||||||
|
|
||||||
|
& .content-wrapper {
|
||||||
|
min-height: calc(100vh - #{$main-header-height} - #{$main-footer-height});
|
||||||
|
}
|
||||||
|
|
||||||
|
.layout-boxed & {
|
||||||
|
@include box-shadow(0 0 10 rgba($black, .3));
|
||||||
|
|
||||||
|
&,
|
||||||
|
&::before {
|
||||||
|
margin: 0 auto;
|
||||||
|
max-width: $boxed-layout-max-width;
|
||||||
|
}
|
||||||
|
|
||||||
|
& .main-sidebar {
|
||||||
|
left: inherit;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
@supports not (-webkit-touch-callout: none) {
|
||||||
|
.layout-fixed & .sidebar {
|
||||||
|
height: calc(100vh - (#{$main-header-height-inner} + #{$main-header-bottom-border-width}));
|
||||||
|
}
|
||||||
|
.layout-fixed.text-sm & .sidebar {
|
||||||
|
height: calc(100vh - (#{$main-header-height-sm-inner} + #{$main-header-bottom-border-width}));
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
.layout-navbar-fixed.layout-fixed & {
|
||||||
|
.control-sidebar {
|
||||||
|
top: $main-header-height;
|
||||||
|
}
|
||||||
|
|
||||||
|
.main-header.text-sm ~ .control-sidebar {
|
||||||
|
top: $main-header-height-sm;
|
||||||
|
}
|
||||||
|
|
||||||
|
.sidebar {
|
||||||
|
margin-top: $main-header-height;
|
||||||
|
}
|
||||||
|
|
||||||
|
.brand-link.text-sm ~ .sidebar {
|
||||||
|
margin-top: $main-header-height-sm;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
.layout-navbar-fixed.layout-fixed.text-sm & {
|
||||||
|
.control-sidebar {
|
||||||
|
top: $main-header-height-sm;
|
||||||
|
}
|
||||||
|
|
||||||
|
.sidebar {
|
||||||
|
margin-top: $main-header-height-sm;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
.layout-navbar-fixed.sidebar-mini.sidebar-collapse &,
|
||||||
|
.layout-navbar-fixed.sidebar-mini-md.sidebar-collapse & {
|
||||||
|
.brand-link {
|
||||||
|
height: $main-header-height;
|
||||||
|
width: $sidebar-mini-width;
|
||||||
|
|
||||||
|
&.text-sm {
|
||||||
|
height: $main-header-height-sm;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
.layout-navbar-fixed.sidebar-mini.sidebar-collapse.text-sm &,
|
||||||
|
.layout-navbar-fixed.sidebar-mini-md.sidebar-collapse.text-sm & {
|
||||||
|
.brand-link {
|
||||||
|
height: $main-header-height-sm;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
body:not(.layout-fixed).layout-navbar-fixed & {
|
||||||
|
.main-sidebar {
|
||||||
|
margin-top: calc(#{$main-header-height} / -1);
|
||||||
|
|
||||||
|
.sidebar {
|
||||||
|
margin-top: $main-header-height;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
body:not(.layout-fixed).layout-navbar-fixed.text-sm & {
|
||||||
|
.main-sidebar {
|
||||||
|
margin-top: calc(#{$main-header-height-sm} / -1);
|
||||||
|
|
||||||
|
.sidebar {
|
||||||
|
margin-top: $main-header-height-sm;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
.layout-navbar-fixed & {
|
||||||
|
.control-sidebar {
|
||||||
|
top: 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
a.anchor {
|
||||||
|
display: block;
|
||||||
|
position: relative;
|
||||||
|
top: calc((#{$main-header-height-inner} + #{$main-header-bottom-border-width} + (#{$main-header-link-padding-y} * 2)) / -1);
|
||||||
|
}
|
||||||
|
|
||||||
|
.main-sidebar:hover {
|
||||||
|
.brand-link {
|
||||||
|
transition: width $transition-speed $transition-fn;
|
||||||
|
width: $sidebar-width;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
.brand-link {
|
||||||
|
overflow: hidden;
|
||||||
|
position: fixed;
|
||||||
|
top: 0;
|
||||||
|
transition: width $transition-speed $transition-fn;
|
||||||
|
width: $sidebar-width;
|
||||||
|
z-index: $zindex-main-header + 1;
|
||||||
|
}
|
||||||
|
|
||||||
|
// Sidebar variants brand-link fix
|
||||||
|
@each $name, $color in $theme-colors {
|
||||||
|
.sidebar-dark-#{$name} .brand-link:not([class*="navbar"]) {
|
||||||
|
background-color: $sidebar-dark-bg;
|
||||||
|
}
|
||||||
|
|
||||||
|
.sidebar-light-#{$name} .brand-link:not([class*="navbar"]) {
|
||||||
|
background-color: $sidebar-light-bg;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
.content-wrapper {
|
||||||
|
margin-top: $main-header-height;
|
||||||
|
}
|
||||||
|
|
||||||
|
.main-header.text-sm ~ .content-wrapper {
|
||||||
|
margin-top: $main-header-height-sm;
|
||||||
|
}
|
||||||
|
|
||||||
|
.main-header {
|
||||||
|
left: 0;
|
||||||
|
position: fixed;
|
||||||
|
right: 0;
|
||||||
|
top: 0;
|
||||||
|
z-index: $zindex-main-header - 1;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
.layout-navbar-fixed.text-sm & {
|
||||||
|
.content-wrapper {
|
||||||
|
margin-top: $main-header-height-sm;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
.layout-navbar-not-fixed & {
|
||||||
|
.brand-link {
|
||||||
|
position: static;
|
||||||
|
}
|
||||||
|
|
||||||
|
.sidebar,
|
||||||
|
.content-wrapper {
|
||||||
|
margin-top: 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
.main-header {
|
||||||
|
position: static;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
.layout-navbar-not-fixed.layout-fixed & {
|
||||||
|
.sidebar {
|
||||||
|
margin-top: 0;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
@each $breakpoint in map-keys($grid-breakpoints) {
|
||||||
|
@include media-breakpoint-up($breakpoint) {
|
||||||
|
$infix: breakpoint-infix($breakpoint, $grid-breakpoints);
|
||||||
|
|
||||||
|
.layout#{$infix}-navbar-fixed.layout-fixed & {
|
||||||
|
.control-sidebar {
|
||||||
|
top: $main-header-height;
|
||||||
|
}
|
||||||
|
|
||||||
|
.text-sm & .main-header ~ .control-sidebar,
|
||||||
|
.main-header.text-sm ~ .control-sidebar {
|
||||||
|
top: $main-header-height-sm;
|
||||||
|
}
|
||||||
|
|
||||||
|
.sidebar {
|
||||||
|
margin-top: $main-header-height;
|
||||||
|
}
|
||||||
|
|
||||||
|
.text-sm & .brand-link ~ .sidebar,
|
||||||
|
.brand-link.text-sm ~ .sidebar {
|
||||||
|
margin-top: $main-header-height-sm;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
.layout#{$infix}-navbar-fixed.layout-fixed.text-sm & {
|
||||||
|
.control-sidebar {
|
||||||
|
top: $main-header-height-sm;
|
||||||
|
}
|
||||||
|
|
||||||
|
.sidebar {
|
||||||
|
margin-top: $main-header-height-sm;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
.layout#{$infix}-navbar-fixed & {
|
||||||
|
.control-sidebar {
|
||||||
|
top: 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
a.anchor {
|
||||||
|
display: block;
|
||||||
|
position: relative;
|
||||||
|
top: calc((#{$main-header-height-inner} + #{$main-header-bottom-border-width} + (#{$main-header-link-padding-y} * 2)) / -1);
|
||||||
|
}
|
||||||
|
|
||||||
|
&.sidebar-collapse {
|
||||||
|
.brand-link {
|
||||||
|
height: $main-header-height;
|
||||||
|
transition: width $transition-speed $transition-fn;
|
||||||
|
width: $sidebar-mini-width;
|
||||||
|
|
||||||
|
.text-sm &,
|
||||||
|
&.text-sm {
|
||||||
|
height: $main-header-height-sm;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
.main-sidebar:hover {
|
||||||
|
.brand-link {
|
||||||
|
transition: width $transition-speed $transition-fn;
|
||||||
|
width: $sidebar-width;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
.brand-link {
|
||||||
|
overflow: hidden;
|
||||||
|
position: fixed;
|
||||||
|
top: 0;
|
||||||
|
transition: width $transition-speed $transition-fn;
|
||||||
|
width: $sidebar-width;
|
||||||
|
z-index: $zindex-main-header + 1;
|
||||||
|
}
|
||||||
|
|
||||||
|
// Sidebar variants brand-link fix
|
||||||
|
@each $name, $color in $theme-colors {
|
||||||
|
.sidebar-dark-#{$name} .brand-link:not([class*="navbar"]) {
|
||||||
|
background-color: $sidebar-dark-bg;
|
||||||
|
}
|
||||||
|
|
||||||
|
.sidebar-light-#{$name} .brand-link:not([class*="navbar"]) {
|
||||||
|
background-color: $sidebar-light-bg;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
.content-wrapper {
|
||||||
|
margin-top: $main-header-height;
|
||||||
|
}
|
||||||
|
|
||||||
|
.text-sm & .main-header ~ .content-wrapper,
|
||||||
|
.main-header.text-sm ~ .content-wrapper {
|
||||||
|
margin-top: $main-header-height-sm;
|
||||||
|
}
|
||||||
|
|
||||||
|
.main-header {
|
||||||
|
left: 0;
|
||||||
|
position: fixed;
|
||||||
|
right: 0;
|
||||||
|
top: 0;
|
||||||
|
z-index: $zindex-main-sidebar - 1;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
.layout#{$infix}-navbar-fixed.text-sm & {
|
||||||
|
.content-wrapper {
|
||||||
|
margin-top: $main-header-height-sm;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
body:not(.layout-fixed).layout#{$infix}-navbar-fixed & {
|
||||||
|
.main-sidebar {
|
||||||
|
margin-top: calc(#{$main-header-height} / -1);
|
||||||
|
|
||||||
|
.sidebar {
|
||||||
|
margin-top: $main-header-height;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
body:not(.layout-fixed).layout#{$infix}-navbar-fixed.text-sm & {
|
||||||
|
.main-sidebar {
|
||||||
|
margin-top: calc(#{$main-header-height-sm} / -1);
|
||||||
|
|
||||||
|
.sidebar {
|
||||||
|
margin-top: $main-header-height-sm;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
.layout#{$infix}-navbar-not-fixed & {
|
||||||
|
.brand-link {
|
||||||
|
position: static;
|
||||||
|
}
|
||||||
|
|
||||||
|
.sidebar,
|
||||||
|
.content-wrapper {
|
||||||
|
margin-top: 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
.main-header {
|
||||||
|
position: static;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
.layout#{$infix}-navbar-not-fixed.layout-fixed & {
|
||||||
|
.sidebar {
|
||||||
|
margin-top: 0;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
.layout-footer-fixed & {
|
||||||
|
.control-sidebar {
|
||||||
|
bottom: 0;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
.layout-footer-fixed & {
|
||||||
|
.main-footer {
|
||||||
|
bottom: 0;
|
||||||
|
left: 0;
|
||||||
|
position: fixed;
|
||||||
|
right: 0;
|
||||||
|
z-index: $zindex-main-footer;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
.layout-footer-not-fixed & {
|
||||||
|
.main-footer {
|
||||||
|
position: static;
|
||||||
|
}
|
||||||
|
|
||||||
|
.content-wrapper {
|
||||||
|
margin-bottom: 0;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
@each $breakpoint in map-keys($grid-breakpoints) {
|
||||||
|
@include media-breakpoint-up($breakpoint) {
|
||||||
|
$infix: breakpoint-infix($breakpoint, $grid-breakpoints);
|
||||||
|
.layout#{$infix}-footer-fixed & {
|
||||||
|
.control-sidebar {
|
||||||
|
bottom: 0;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
.layout#{$infix}-footer-fixed & {
|
||||||
|
.main-footer {
|
||||||
|
bottom: 0;
|
||||||
|
left: 0;
|
||||||
|
position: fixed;
|
||||||
|
right: 0;
|
||||||
|
z-index: $zindex-main-footer;
|
||||||
|
}
|
||||||
|
|
||||||
|
.content-wrapper {
|
||||||
|
padding-bottom: $main-footer-height;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
.layout#{$infix}-footer-not-fixed & {
|
||||||
|
.main-footer {
|
||||||
|
position: static;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
.layout-top-nav & {
|
||||||
|
margin-left: 0;
|
||||||
|
|
||||||
|
.main-header {
|
||||||
|
.brand-image {
|
||||||
|
margin-top: -.5rem;
|
||||||
|
margin-right: .2rem;
|
||||||
|
height: 33px;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
& .main-sidebar {
|
||||||
|
bottom: inherit;
|
||||||
|
height: inherit;
|
||||||
|
}
|
||||||
|
|
||||||
|
& .content-wrapper,
|
||||||
|
& .main-header,
|
||||||
|
& .main-footer {
|
||||||
|
margin-left: 0;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
body.sidebar-collapse:not(.sidebar-mini-md):not(.sidebar-mini) {
|
||||||
|
.content-wrapper,
|
||||||
|
.main-footer,
|
||||||
|
.main-header {
|
||||||
|
&,
|
||||||
|
&::before {
|
||||||
|
margin-left: 0;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
body:not(.sidebar-mini-md) {
|
||||||
|
.content-wrapper,
|
||||||
|
.main-footer,
|
||||||
|
.main-header {
|
||||||
|
@include media-breakpoint-up(md) {
|
||||||
|
@include transition(margin-left $transition-speed $transition-fn);
|
||||||
|
|
||||||
|
margin-left: $sidebar-width;
|
||||||
|
|
||||||
|
.sidebar-collapse & {
|
||||||
|
margin-left: 0;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
@include media-breakpoint-down(md) {
|
||||||
|
&,
|
||||||
|
&::before {
|
||||||
|
margin-left: 0;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
.sidebar-mini-md {
|
||||||
|
.content-wrapper,
|
||||||
|
.main-footer,
|
||||||
|
.main-header {
|
||||||
|
@include media-breakpoint-up(md) {
|
||||||
|
@include transition(margin-left $transition-speed $transition-fn);
|
||||||
|
|
||||||
|
margin-left: $sidebar-width;
|
||||||
|
|
||||||
|
.sidebar-collapse & {
|
||||||
|
margin-left: $sidebar-mini-width;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
@include media-breakpoint-down(md) {
|
||||||
|
&,
|
||||||
|
&::before {
|
||||||
|
margin-left: $sidebar-mini-width;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
.content-wrapper {
|
||||||
|
background: $main-bg;
|
||||||
|
|
||||||
|
> .content {
|
||||||
|
padding: $content-padding-y $content-padding-x;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
.main-sidebar {
|
||||||
|
&,
|
||||||
|
&::before {
|
||||||
|
$local-sidebar-transition: margin-left $transition-speed $transition-fn, width $transition-speed $transition-fn;
|
||||||
|
@include transition($local-sidebar-transition);
|
||||||
|
width: $sidebar-width;
|
||||||
|
}
|
||||||
|
|
||||||
|
.sidebar-collapse:not(.sidebar-mini):not(.sidebar-mini-md) & {
|
||||||
|
&,
|
||||||
|
&::before {
|
||||||
|
box-shadow: none !important;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
.sidebar-collapse & {
|
||||||
|
&,
|
||||||
|
&::before {
|
||||||
|
margin-left: -$sidebar-width;
|
||||||
|
}
|
||||||
|
|
||||||
|
.nav-sidebar.nav-child-indent .nav-treeview {
|
||||||
|
padding: 0;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
@include media-breakpoint-down(sm) {
|
||||||
|
&,
|
||||||
|
&::before {
|
||||||
|
box-shadow: none !important;
|
||||||
|
margin-left: -$sidebar-width;
|
||||||
|
}
|
||||||
|
|
||||||
|
.sidebar-open & {
|
||||||
|
&,
|
||||||
|
&::before {
|
||||||
|
margin-left: 0;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
:not(.layout-fixed) {
|
||||||
|
.main-sidebar {
|
||||||
|
height: inherit;
|
||||||
|
min-height: 100%;
|
||||||
|
position: absolute;
|
||||||
|
top: 0;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
.layout-fixed {
|
||||||
|
.brand-link {
|
||||||
|
width: $sidebar-width;
|
||||||
|
}
|
||||||
|
|
||||||
|
.main-sidebar {
|
||||||
|
bottom: 0;
|
||||||
|
float: none;
|
||||||
|
height: 100vh;
|
||||||
|
left: 0;
|
||||||
|
position: fixed;
|
||||||
|
top: 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
.control-sidebar {
|
||||||
|
bottom: 0;
|
||||||
|
float: none;
|
||||||
|
height: 100vh;
|
||||||
|
position: fixed;
|
||||||
|
top: 0;
|
||||||
|
|
||||||
|
.control-sidebar-content {
|
||||||
|
height: calc(100vh - #{$main-header-height});
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
@supports (-webkit-touch-callout: none) {
|
||||||
|
.layout-fixed {
|
||||||
|
.main-sidebar {
|
||||||
|
height: inherit;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
.main-footer {
|
||||||
|
background: $main-footer-bg;
|
||||||
|
border-top: $main-footer-border-top;
|
||||||
|
//color: lighten($gray-700, 25%);
|
||||||
|
padding: .5rem 1rem;
|
||||||
|
font-size: 90%;
|
||||||
|
|
||||||
|
.text-sm &,
|
||||||
|
&.text-sm {
|
||||||
|
padding: $main-footer-padding-sm;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
.content-header {
|
||||||
|
padding: 15px $content-padding-x;
|
||||||
|
|
||||||
|
.text-sm & {
|
||||||
|
padding: 10px $content-padding-x;
|
||||||
|
}
|
||||||
|
|
||||||
|
h1 {
|
||||||
|
font-size: 1.8rem;
|
||||||
|
margin: 0;
|
||||||
|
|
||||||
|
.text-sm & {
|
||||||
|
font-size: 1.5rem;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
.breadcrumb {
|
||||||
|
background: transparent;
|
||||||
|
line-height: 1.8rem;
|
||||||
|
margin-bottom: 0;
|
||||||
|
padding: 0;
|
||||||
|
font-size: 97%;
|
||||||
|
|
||||||
|
.text-sm & {
|
||||||
|
line-height: 1.5rem;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
.hold-transition {
|
||||||
|
.content-wrapper,
|
||||||
|
.main-header,
|
||||||
|
.main-sidebar,
|
||||||
|
.main-sidebar *,
|
||||||
|
.control-sidebar,
|
||||||
|
.control-sidebar *,
|
||||||
|
.main-footer {
|
||||||
|
transition: none !important;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
@ -0,0 +1,138 @@
|
||||||
|
//
|
||||||
|
// Component: Main Header
|
||||||
|
//
|
||||||
|
|
||||||
|
.main-header {
|
||||||
|
border-bottom: $main-header-bottom-border;
|
||||||
|
z-index: $zindex-main-header;
|
||||||
|
|
||||||
|
.nav-link {
|
||||||
|
height: $nav-link-height;
|
||||||
|
position: relative;
|
||||||
|
}
|
||||||
|
|
||||||
|
.text-sm &,
|
||||||
|
&.text-sm {
|
||||||
|
.nav-link {
|
||||||
|
height: $nav-link-sm-height;
|
||||||
|
padding: $nav-link-sm-padding-y $nav-link-padding-x;
|
||||||
|
|
||||||
|
> .fa,
|
||||||
|
> .fas,
|
||||||
|
> .far,
|
||||||
|
> .fab,
|
||||||
|
> .glyphicon,
|
||||||
|
> .ion {
|
||||||
|
font-size: $font-size-sm;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
.navbar-nav {
|
||||||
|
.nav-item {
|
||||||
|
margin: 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
&[class*='-right'] {
|
||||||
|
.dropdown-menu {
|
||||||
|
left: auto;
|
||||||
|
margin-top: -3px;
|
||||||
|
right: 0;
|
||||||
|
|
||||||
|
@media (max-width: breakpoint-max(xs)) {
|
||||||
|
left: 0;
|
||||||
|
right: auto;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
// Add this class to images within a nav-link
|
||||||
|
.navbar-img {
|
||||||
|
height: $main-header-height / 2;
|
||||||
|
width: auto;
|
||||||
|
}
|
||||||
|
|
||||||
|
// Navbar badge
|
||||||
|
.navbar-badge {
|
||||||
|
font-size: .6rem;
|
||||||
|
font-weight: 300;
|
||||||
|
padding: 2px 4px;
|
||||||
|
position: absolute;
|
||||||
|
right: 5px;
|
||||||
|
top: 9px;
|
||||||
|
}
|
||||||
|
|
||||||
|
.btn-navbar {
|
||||||
|
background-color: transparent;
|
||||||
|
border-left-width: 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
.form-control-navbar {
|
||||||
|
border-right-width: 0;
|
||||||
|
|
||||||
|
& + .input-group-append {
|
||||||
|
margin-left: 0;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
.form-control-navbar,
|
||||||
|
.btn-navbar {
|
||||||
|
transition: none;
|
||||||
|
}
|
||||||
|
|
||||||
|
.navbar-dark {
|
||||||
|
.form-control-navbar,
|
||||||
|
.btn-navbar {
|
||||||
|
background-color: $main-header-dark-form-control-bg;
|
||||||
|
border: $main-header-dark-form-control-border;
|
||||||
|
}
|
||||||
|
|
||||||
|
.form-control-navbar {
|
||||||
|
&::placeholder {
|
||||||
|
color: $main-header-dark-placeholder-color;
|
||||||
|
}
|
||||||
|
|
||||||
|
+ .input-group-append > .btn-navbar {
|
||||||
|
color: $main-header-dark-placeholder-color;
|
||||||
|
}
|
||||||
|
|
||||||
|
&:focus {
|
||||||
|
&,
|
||||||
|
& + .input-group-append .btn-navbar {
|
||||||
|
background-color: $main-header-dark-form-control-focused-bg;
|
||||||
|
border: $main-header-dark-form-control-focused-border !important;
|
||||||
|
color: $main-header-dark-form-control-focused-color;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
.navbar-light {
|
||||||
|
.form-control-navbar,
|
||||||
|
.btn-navbar {
|
||||||
|
background-color: $main-header-light-form-control-bg;
|
||||||
|
border: $main-header-light-form-control-border;
|
||||||
|
}
|
||||||
|
|
||||||
|
.form-control-navbar {
|
||||||
|
&::placeholder {
|
||||||
|
color: $main-header-light-placeholder-color;
|
||||||
|
}
|
||||||
|
|
||||||
|
+ .input-group-append > .btn-navbar {
|
||||||
|
color: $main-header-light-placeholder-color;
|
||||||
|
}
|
||||||
|
|
||||||
|
&:focus {
|
||||||
|
&,
|
||||||
|
& + .input-group-append .btn-navbar {
|
||||||
|
background-color: $main-header-light-form-control-focused-bg;
|
||||||
|
border: $main-header-light-form-control-focused-border !important;
|
||||||
|
color: $main-header-light-form-control-focused-color;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
@ -0,0 +1,992 @@
|
||||||
|
//
|
||||||
|
// Component: Main Sidebar
|
||||||
|
//
|
||||||
|
|
||||||
|
.main-sidebar {
|
||||||
|
height: 100vh;
|
||||||
|
overflow-y: hidden;
|
||||||
|
z-index: $zindex-main-sidebar;
|
||||||
|
|
||||||
|
// Remove Firefox Focusring
|
||||||
|
a {
|
||||||
|
&:-moz-focusring {
|
||||||
|
border: 0;
|
||||||
|
outline: none;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
.nav .nav-item .nav-link {
|
||||||
|
padding: $sidebar-item-padding!important;
|
||||||
|
//margin-right: .5rem;
|
||||||
|
}
|
||||||
|
|
||||||
|
.nav-treeview.nav {
|
||||||
|
.nav-item .nav-link {
|
||||||
|
padding: $sidebar-tree-item-padding!important;
|
||||||
|
//margin-right: 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
//.nav-item .nav-link.active {
|
||||||
|
// // padding: 8px 10px 8px 15px!important;
|
||||||
|
// //}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
.sidebar {
|
||||||
|
height: calc(100% - (#{$main-header-height-inner} + #{$main-header-bottom-border-width}));
|
||||||
|
overflow-y: auto;
|
||||||
|
padding-bottom: $sidebar-padding-y;
|
||||||
|
padding-left: $sidebar-padding-x;
|
||||||
|
padding-right: $sidebar-padding-x;
|
||||||
|
padding-top: $sidebar-padding-y;
|
||||||
|
}
|
||||||
|
|
||||||
|
// Sidebar user panel
|
||||||
|
.user-panel {
|
||||||
|
position: relative;
|
||||||
|
|
||||||
|
[class*='sidebar-dark'] & {
|
||||||
|
border-bottom: 1px solid lighten($dark, 12%);
|
||||||
|
}
|
||||||
|
|
||||||
|
[class*='sidebar-light'] & {
|
||||||
|
border-bottom: 1px solid $gray-300;
|
||||||
|
}
|
||||||
|
|
||||||
|
&,
|
||||||
|
.info {
|
||||||
|
overflow: hidden;
|
||||||
|
white-space: nowrap;
|
||||||
|
}
|
||||||
|
|
||||||
|
.image {
|
||||||
|
display: inline-block;
|
||||||
|
padding-left: $nav-link-padding-x - .2;
|
||||||
|
}
|
||||||
|
|
||||||
|
img {
|
||||||
|
height: auto;
|
||||||
|
width: $sidebar-user-image-width;
|
||||||
|
}
|
||||||
|
|
||||||
|
.info {
|
||||||
|
display: inline-block;
|
||||||
|
padding: 5px 5px 5px 10px;
|
||||||
|
}
|
||||||
|
|
||||||
|
.status,
|
||||||
|
.dropdown-menu {
|
||||||
|
font-size: $font-size-sm;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
// Sidebar navigation menu
|
||||||
|
.nav-sidebar {
|
||||||
|
// All levels
|
||||||
|
.nav-item {
|
||||||
|
> .nav-link {
|
||||||
|
margin-bottom: .2rem;
|
||||||
|
|
||||||
|
.right {
|
||||||
|
@include transition(transform $transition-fn $transition-speed);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
.nav-link > .right,
|
||||||
|
.nav-link > p > .right {
|
||||||
|
position: absolute;
|
||||||
|
right: 1rem;
|
||||||
|
top: .9rem;
|
||||||
|
|
||||||
|
i,
|
||||||
|
span {
|
||||||
|
margin-left: .5rem;
|
||||||
|
}
|
||||||
|
|
||||||
|
&:nth-child(2) {
|
||||||
|
right: 2.2rem;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
.menu-open {
|
||||||
|
//background: $sidebar-dark-submenu-bg;
|
||||||
|
|
||||||
|
> .nav-treeview {
|
||||||
|
display: block;
|
||||||
|
border-radius: 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
> .nav-link {
|
||||||
|
i.right {
|
||||||
|
@include rotate(-90deg);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
// First Level
|
||||||
|
> .nav-item {
|
||||||
|
margin-bottom: 0;
|
||||||
|
|
||||||
|
.nav-icon {
|
||||||
|
margin-left: .05rem;
|
||||||
|
font-size: 1.2rem;
|
||||||
|
margin-right: .2rem;
|
||||||
|
text-align: center;
|
||||||
|
width: $sidebar-nav-icon-width;
|
||||||
|
|
||||||
|
&.fa,
|
||||||
|
&.fas,
|
||||||
|
&.far,
|
||||||
|
&.fab,
|
||||||
|
&.glyphicon,
|
||||||
|
&.ion {
|
||||||
|
font-size: 1.1rem;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
.float-right {
|
||||||
|
margin-top: 3px;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
// Tree view menu
|
||||||
|
.nav-treeview {
|
||||||
|
display: none;
|
||||||
|
list-style: none;
|
||||||
|
padding: 0;
|
||||||
|
|
||||||
|
> .nav-item {
|
||||||
|
> .nav-link {
|
||||||
|
> .nav-icon {
|
||||||
|
width: $sidebar-nav-icon-width;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
&.nav-child-indent {
|
||||||
|
.nav-treeview {
|
||||||
|
transition: padding $transition-speed $transition-fn;
|
||||||
|
padding-left: 1rem;
|
||||||
|
|
||||||
|
.text-sm & {
|
||||||
|
padding-left: .5rem;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
&.nav-legacy {
|
||||||
|
.nav-treeview {
|
||||||
|
.nav-treeview {
|
||||||
|
padding-left: 2rem;
|
||||||
|
margin-left: -1rem;
|
||||||
|
|
||||||
|
.text-sm & {
|
||||||
|
padding-left: 1rem;
|
||||||
|
margin-left: -.5rem;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
.nav-header {
|
||||||
|
font-size: .9rem;
|
||||||
|
padding: $nav-link-padding-y;
|
||||||
|
|
||||||
|
&:not(:first-of-type) {
|
||||||
|
padding: 1.7rem 1rem .5rem;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
.nav-link p {
|
||||||
|
display: inline-block;
|
||||||
|
margin: 0;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
#sidebar-overlay {
|
||||||
|
@include media-breakpoint-down(md) {
|
||||||
|
.sidebar-open & {
|
||||||
|
display: block;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
background-color: rgba($black, 0.1);
|
||||||
|
bottom: 0;
|
||||||
|
display: none;
|
||||||
|
left: 0;
|
||||||
|
position: fixed;
|
||||||
|
right: 0;
|
||||||
|
top: 0;
|
||||||
|
z-index: $zindex-main-sidebar - 1;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
[class*='sidebar-light-'] {
|
||||||
|
// Sidebar background color
|
||||||
|
background-color: $sidebar-light-bg;
|
||||||
|
|
||||||
|
// User Panel (resides in the sidebar)
|
||||||
|
.user-panel {
|
||||||
|
a:hover {
|
||||||
|
color: $sidebar-light-hover-color;
|
||||||
|
}
|
||||||
|
|
||||||
|
.status {
|
||||||
|
background: $sidebar-light-hover-bg;
|
||||||
|
color: $sidebar-light-color;
|
||||||
|
|
||||||
|
&:hover,
|
||||||
|
&:focus,
|
||||||
|
&:active {
|
||||||
|
background: darken($sidebar-light-hover-bg, 3%);
|
||||||
|
color: $sidebar-light-hover-color;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
.dropdown-menu {
|
||||||
|
@include box-shadow(0 2px 4px rgba(0, 0, 0, .4));
|
||||||
|
border-color: darken($sidebar-light-hover-bg, 5%);
|
||||||
|
}
|
||||||
|
|
||||||
|
.dropdown-item {
|
||||||
|
color: $body-color;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
// Sidebar Menu. First level links
|
||||||
|
.nav-sidebar > .nav-item {
|
||||||
|
// links
|
||||||
|
> .nav-link {
|
||||||
|
// border-left: 3px solid transparent;
|
||||||
|
&:active,
|
||||||
|
&:focus {
|
||||||
|
color: $sidebar-light-color;
|
||||||
|
}
|
||||||
|
|
||||||
|
i {
|
||||||
|
margin-right: .75rem;
|
||||||
|
font-size: 1.2rem;
|
||||||
|
}
|
||||||
|
p i {
|
||||||
|
margin-right: 0;
|
||||||
|
margin-top: 1px;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
// Hover and active states
|
||||||
|
&.menu-open > .nav-link,
|
||||||
|
&:hover > .nav-link {
|
||||||
|
background-color: $sidebar-light-hover-bg;
|
||||||
|
color: $sidebar-light-hover-color;
|
||||||
|
}
|
||||||
|
|
||||||
|
> .nav-link.active {
|
||||||
|
color: $sidebar-light-active-color;
|
||||||
|
|
||||||
|
@if $enable-shadows {
|
||||||
|
box-shadow: map-get($elevations, 1);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
// First Level Submenu
|
||||||
|
> .nav-treeview {
|
||||||
|
background: $sidebar-light-submenu-bg;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
// Section Heading
|
||||||
|
.nav-header {
|
||||||
|
background: inherit;
|
||||||
|
color: darken($sidebar-light-color, 5%);
|
||||||
|
}
|
||||||
|
|
||||||
|
// All links within the sidebar menu
|
||||||
|
.sidebar {
|
||||||
|
a {
|
||||||
|
color: $sidebar-light-color;
|
||||||
|
|
||||||
|
&:hover {
|
||||||
|
text-decoration: none;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
// All submenus
|
||||||
|
.nav-treeview {
|
||||||
|
> .nav-item {
|
||||||
|
> .nav-link {
|
||||||
|
color: $sidebar-light-submenu-color;
|
||||||
|
|
||||||
|
i {
|
||||||
|
margin-right: .75rem;
|
||||||
|
margin-left: 3px;
|
||||||
|
}
|
||||||
|
p i {
|
||||||
|
margin-right: 0;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
> .nav-link.active {
|
||||||
|
&,
|
||||||
|
&:hover {
|
||||||
|
@include sidebar-color($primary)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
> .nav-link:hover {
|
||||||
|
background-color: $sidebar-light-submenu-hover-bg;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
// Flat style
|
||||||
|
.nav-flat {
|
||||||
|
.nav-item {
|
||||||
|
.nav-treeview {
|
||||||
|
.nav-treeview {
|
||||||
|
border-color: $sidebar-light-submenu-active-bg;
|
||||||
|
}
|
||||||
|
|
||||||
|
> .nav-item {
|
||||||
|
> .nav-link {
|
||||||
|
&,
|
||||||
|
&.active {
|
||||||
|
border-color: $sidebar-light-submenu-active-bg;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
[class*='sidebar-dark-'] {
|
||||||
|
// Sidebar background color
|
||||||
|
//background-color: $sidebar-dark-bg;#7b8b9f
|
||||||
|
background-image: linear-gradient(0deg, lighten($sidebar-dark-bg, 25%), $sidebar-dark-bg);
|
||||||
|
|
||||||
|
//.nav .nav-item .nav-link {
|
||||||
|
//
|
||||||
|
//}
|
||||||
|
|
||||||
|
.nav-treeview.nav {
|
||||||
|
.nav-item .nav-link {
|
||||||
|
//padding: 7px 0 7px 15px!important;
|
||||||
|
font-size: 1rem!important;
|
||||||
|
margin-bottom: 0
|
||||||
|
}
|
||||||
|
|
||||||
|
//.nav-item .nav-link.active {
|
||||||
|
// padding: $sidebar-tree-item-padding!important;
|
||||||
|
//}
|
||||||
|
}
|
||||||
|
|
||||||
|
.nav-sidebar .nav-link > p > .right {
|
||||||
|
right: .5rem
|
||||||
|
}
|
||||||
|
|
||||||
|
// User Panel (resides in the sidebar)
|
||||||
|
.user-panel {
|
||||||
|
a:hover {
|
||||||
|
color: $sidebar-dark-hover-color;
|
||||||
|
}
|
||||||
|
|
||||||
|
.status {
|
||||||
|
background: $sidebar-dark-hover-bg;
|
||||||
|
color: $sidebar-dark-color;
|
||||||
|
|
||||||
|
&:hover,
|
||||||
|
&:focus,
|
||||||
|
&:active {
|
||||||
|
background: darken($sidebar-dark-hover-bg, 3%);
|
||||||
|
color: $sidebar-dark-hover-color;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
.dropdown-menu {
|
||||||
|
@include box-shadow(0 2px 4px rgba(0, 0, 0, .4));
|
||||||
|
border-color: darken($sidebar-dark-hover-bg, 5%);
|
||||||
|
}
|
||||||
|
|
||||||
|
.dropdown-item {
|
||||||
|
color: $body-color;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
// Sidebar Menu. First level links
|
||||||
|
.nav-sidebar > .nav-item {
|
||||||
|
// links
|
||||||
|
> .nav-link {
|
||||||
|
// border-left: 3px solid transparent;
|
||||||
|
&:active {
|
||||||
|
color: $sidebar-dark-active-color;
|
||||||
|
//background: $sidebar-dark-active-bg;
|
||||||
|
font-weight: bold;
|
||||||
|
}
|
||||||
|
&:hover {
|
||||||
|
color: $sidebar-dark-hover-color;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
i {
|
||||||
|
margin-right: .75rem;
|
||||||
|
color: $sidebar-dark-icon-color;
|
||||||
|
}
|
||||||
|
|
||||||
|
// Hover and active states
|
||||||
|
&.menu-open > .nav-link,
|
||||||
|
&:hover > .nav-link,
|
||||||
|
& > .nav-link:focus {
|
||||||
|
background-color: $sidebar-dark-hover-bg;
|
||||||
|
color: $sidebar-dark-hover-color;
|
||||||
|
}
|
||||||
|
|
||||||
|
> .nav-link.active {
|
||||||
|
color: $sidebar-dark-active-color;
|
||||||
|
background: $sidebar-dark-active-bg;
|
||||||
|
font-weight: bold;
|
||||||
|
|
||||||
|
@if $enable-shadows {
|
||||||
|
box-shadow: map-get($elevations, 1);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
// First Level Submenu
|
||||||
|
> .nav-treeview {
|
||||||
|
//background: $sidebar-dark-submenu-bg;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
// Section Heading
|
||||||
|
.nav-header {
|
||||||
|
background: inherit; //darken($sidebar-dark-bg, 3%);
|
||||||
|
color: lighten($sidebar-dark-color, 5%);
|
||||||
|
}
|
||||||
|
|
||||||
|
// All links within the sidebar menu
|
||||||
|
.sidebar {
|
||||||
|
a {
|
||||||
|
color: $sidebar-dark-color;
|
||||||
|
|
||||||
|
&:hover,
|
||||||
|
&:focus {
|
||||||
|
text-decoration: none;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
// All submenus
|
||||||
|
.nav-treeview {
|
||||||
|
> .nav-item {
|
||||||
|
> .nav-link {
|
||||||
|
color: $sidebar-dark-submenu-color;
|
||||||
|
|
||||||
|
&:hover,
|
||||||
|
&:focus {
|
||||||
|
background-color: $sidebar-dark-submenu-hover-bg;
|
||||||
|
color: $sidebar-dark-submenu-hover-color;
|
||||||
|
font-weight: bold;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
> .nav-link.active {
|
||||||
|
&,
|
||||||
|
&:hover,
|
||||||
|
&:focus {
|
||||||
|
font-weight: bold;
|
||||||
|
background-color: $sidebar-dark-submenu-active-bg;
|
||||||
|
color: $sidebar-dark-submenu-active-color;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
// Flat Style
|
||||||
|
.nav-flat {
|
||||||
|
.nav-item {
|
||||||
|
.nav-treeview {
|
||||||
|
.nav-treeview {
|
||||||
|
border-color: $sidebar-dark-submenu-active-bg;
|
||||||
|
}
|
||||||
|
|
||||||
|
> .nav-item {
|
||||||
|
> .nav-link {
|
||||||
|
&,
|
||||||
|
&.active {
|
||||||
|
border-color: $sidebar-dark-submenu-active-bg;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
// colors
|
||||||
|
//.sidebar-dark-white {
|
||||||
|
// .nav-item {
|
||||||
|
// & > .nav-link.active {
|
||||||
|
// background: rgba($white, .8)!important;
|
||||||
|
// box-shadow: none;
|
||||||
|
// }
|
||||||
|
// }
|
||||||
|
//}
|
||||||
|
.sidebar-light-primary {
|
||||||
|
.nav-item {
|
||||||
|
& > .nav-link.active {
|
||||||
|
@include sidebar-color($primary)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
.active-bg-light {
|
||||||
|
.nav-item {
|
||||||
|
& > .nav-link.active {
|
||||||
|
@include sidebar-color-snd($primary)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
.sidebar-mini .main-sidebar:not(.sidebar-no-expand),
|
||||||
|
.sidebar-mini-md .main-sidebar:not(.sidebar-no-expand),
|
||||||
|
.sidebar-mini .main-sidebar:not(.sidebar-no-expand):hover,
|
||||||
|
.sidebar-mini-md .main-sidebar:not(.sidebar-no-expand):hover,
|
||||||
|
.sidebar-mini .main-sidebar.sidebar-focused,
|
||||||
|
.sidebar-mini-md .main-sidebar.sidebar-focused {
|
||||||
|
.nav-compact.nav-sidebar.nav-child-indent:not(.nav-flat) .nav-treeview {
|
||||||
|
padding-left: 1rem;
|
||||||
|
margin-left: -.5rem;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
// Nav Flat
|
||||||
|
.nav-flat {
|
||||||
|
margin: (-$sidebar-padding-x/2) (-$sidebar-padding-x) 0;
|
||||||
|
|
||||||
|
.nav-item {
|
||||||
|
> .nav-link {
|
||||||
|
border-radius: 0;
|
||||||
|
margin-bottom: 0;
|
||||||
|
|
||||||
|
> .nav-icon {
|
||||||
|
margin-left: .55rem;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
&:not(.nav-child-indent) {
|
||||||
|
.nav-treeview {
|
||||||
|
.nav-item {
|
||||||
|
> .nav-link {
|
||||||
|
> .nav-icon {
|
||||||
|
margin-left: .4rem;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
&.nav-child-indent {
|
||||||
|
.nav-treeview {
|
||||||
|
padding-left: 0;
|
||||||
|
|
||||||
|
.nav-icon {
|
||||||
|
margin-left: .85rem;
|
||||||
|
}
|
||||||
|
|
||||||
|
.nav-treeview {
|
||||||
|
border-left: .2rem solid;
|
||||||
|
|
||||||
|
.nav-icon {
|
||||||
|
margin-left: 1.15rem;
|
||||||
|
}
|
||||||
|
|
||||||
|
.nav-treeview {
|
||||||
|
.nav-icon {
|
||||||
|
margin-left: 1.45rem;
|
||||||
|
}
|
||||||
|
|
||||||
|
.nav-treeview {
|
||||||
|
.nav-icon {
|
||||||
|
margin-left: 1.75rem;
|
||||||
|
}
|
||||||
|
|
||||||
|
.nav-treeview {
|
||||||
|
.nav-icon {
|
||||||
|
margin-left: 2.05rem;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
.sidebar-collapse &.nav-child-indent {
|
||||||
|
.nav-treeview {
|
||||||
|
.nav-icon {
|
||||||
|
margin-left: .55rem;
|
||||||
|
}
|
||||||
|
|
||||||
|
.nav-link {
|
||||||
|
padding-left: calc(#{$nav-link-padding-x} - .2rem);
|
||||||
|
}
|
||||||
|
|
||||||
|
.nav-treeview {
|
||||||
|
.nav-icon {
|
||||||
|
margin-left: .35rem;
|
||||||
|
}
|
||||||
|
|
||||||
|
.nav-treeview {
|
||||||
|
.nav-icon {
|
||||||
|
margin-left: .15rem;
|
||||||
|
}
|
||||||
|
|
||||||
|
.nav-treeview {
|
||||||
|
.nav-icon {
|
||||||
|
margin-left: -.15rem;
|
||||||
|
}
|
||||||
|
|
||||||
|
.nav-treeview {
|
||||||
|
.nav-icon {
|
||||||
|
margin-left: -.35rem;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
.sidebar-mini .main-sidebar:not(.sidebar-no-expand):hover &,
|
||||||
|
.sidebar-mini-md .main-sidebar:not(.sidebar-no-expand):hover &,
|
||||||
|
.sidebar-mini .main-sidebar.sidebar-focused &,
|
||||||
|
.sidebar-mini-md .main-sidebar.sidebar-focused & {
|
||||||
|
&.nav-compact.nav-sidebar .nav-treeview {
|
||||||
|
.nav-icon {
|
||||||
|
margin-left: .4rem;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
&.nav-sidebar.nav-child-indent .nav-treeview {
|
||||||
|
.nav-icon {
|
||||||
|
margin-left: .85rem;
|
||||||
|
}
|
||||||
|
|
||||||
|
.nav-treeview {
|
||||||
|
.nav-icon {
|
||||||
|
margin-left: 1.15rem;
|
||||||
|
}
|
||||||
|
|
||||||
|
.nav-treeview {
|
||||||
|
.nav-icon {
|
||||||
|
margin-left: 1.45rem;
|
||||||
|
}
|
||||||
|
|
||||||
|
.nav-treeview {
|
||||||
|
.nav-icon {
|
||||||
|
margin-left: 1.75rem;
|
||||||
|
}
|
||||||
|
|
||||||
|
.nav-treeview {
|
||||||
|
.nav-icon {
|
||||||
|
margin-left: 2.05rem;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
.nav-icon {
|
||||||
|
@include transition(margin-left $transition-fn $transition-speed);
|
||||||
|
}
|
||||||
|
|
||||||
|
.nav-treeview {
|
||||||
|
.nav-icon {
|
||||||
|
margin-left: -.2rem;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
&.nav-sidebar > .nav-item {
|
||||||
|
.nav-treeview,
|
||||||
|
> .nav-treeview {
|
||||||
|
background: rgba($white, .05);
|
||||||
|
|
||||||
|
.nav-item {
|
||||||
|
> .nav-link {
|
||||||
|
border-left: .2rem solid;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
.nav-legacy {
|
||||||
|
margin: (-$sidebar-padding-x/2) (-$sidebar-padding-x) 0;
|
||||||
|
|
||||||
|
&.nav-sidebar .nav-item {
|
||||||
|
> .nav-link {
|
||||||
|
border-radius: 0;
|
||||||
|
margin-bottom: 0;
|
||||||
|
|
||||||
|
> .nav-icon {
|
||||||
|
margin-left: .55rem;
|
||||||
|
|
||||||
|
.text-sm & {
|
||||||
|
margin-left: .75rem;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
&.nav-sidebar > .nav-item {
|
||||||
|
> .nav-link {
|
||||||
|
&.active {
|
||||||
|
background: inherit;
|
||||||
|
border-left: 3px solid transparent;
|
||||||
|
box-shadow: none;
|
||||||
|
|
||||||
|
> .nav-icon {
|
||||||
|
margin-left: calc(.55rem - 3px);
|
||||||
|
|
||||||
|
.text-sm & {
|
||||||
|
margin-left: calc(.75rem - 3px);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
.text-sm &.nav-sidebar.nav-flat .nav-treeview {
|
||||||
|
.nav-item {
|
||||||
|
> .nav-link {
|
||||||
|
> .nav-icon {
|
||||||
|
margin-left: calc(.75rem - 3px);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
.sidebar-mini &,
|
||||||
|
.sidebar-mini-md & {
|
||||||
|
> .nav-item .nav-link {
|
||||||
|
.nav-icon {
|
||||||
|
@include transition(margin-left $transition-fn $transition-speed);
|
||||||
|
margin-left: .75rem;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
.sidebar-mini.sidebar-collapse .main-sidebar.sidebar-focused &.nav-child-indent,
|
||||||
|
.sidebar-mini.sidebar-collapse .main-sidebar:hover &.nav-child-indent,
|
||||||
|
.sidebar-mini-md.sidebar-collapse .main-sidebar.sidebar-focused &.nav-child-indent,
|
||||||
|
.sidebar-mini-md.sidebar-collapse .main-sidebar:hover &.nav-child-indent {
|
||||||
|
.nav-treeview {
|
||||||
|
padding-left: 1rem;
|
||||||
|
|
||||||
|
.nav-treeview {
|
||||||
|
padding-left: 2rem;
|
||||||
|
margin-left: -1rem;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
.sidebar-mini.sidebar-collapse.text-sm .main-sidebar.sidebar-focused &.nav-child-indent,
|
||||||
|
.sidebar-mini.sidebar-collapse.text-sm .main-sidebar:hover &.nav-child-indent,
|
||||||
|
.sidebar-mini-md.sidebar-collapse.text-sm .main-sidebar.sidebar-focused &.nav-child-indent,
|
||||||
|
.sidebar-mini-md.sidebar-collapse.text-sm .main-sidebar:hover &.nav-child-indent {
|
||||||
|
.nav-treeview {
|
||||||
|
padding-left: .5rem;
|
||||||
|
|
||||||
|
.nav-treeview {
|
||||||
|
padding-left: 1rem;
|
||||||
|
margin-left: -.5rem;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
.sidebar-mini.sidebar-collapse &,
|
||||||
|
.sidebar-mini-md.sidebar-collapse & {
|
||||||
|
> .nav-item > .nav-link {
|
||||||
|
.nav-icon {
|
||||||
|
margin-left: .55rem;
|
||||||
|
}
|
||||||
|
|
||||||
|
&.active {
|
||||||
|
> .nav-icon{
|
||||||
|
margin-left: .36rem;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
&.nav-child-indent {
|
||||||
|
.nav-treeview {
|
||||||
|
.nav-treeview {
|
||||||
|
padding-left: 0;
|
||||||
|
margin-left: 0;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
.sidebar-mini.sidebar-collapse.text-sm &,
|
||||||
|
.sidebar-mini-md.sidebar-collapse.text-sm & {
|
||||||
|
> .nav-item > .nav-link {
|
||||||
|
.nav-icon {
|
||||||
|
margin-left: .75rem;
|
||||||
|
}
|
||||||
|
|
||||||
|
&.active {
|
||||||
|
> .nav-icon{
|
||||||
|
margin-left: calc(.75rem - 3px);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
[class*='sidebar-dark'] & {
|
||||||
|
&.nav-sidebar > .nav-item {
|
||||||
|
.nav-treeview,
|
||||||
|
> .nav-treeview {
|
||||||
|
background: rgba($white, .05);
|
||||||
|
}
|
||||||
|
|
||||||
|
> .nav-link.active {
|
||||||
|
color: $sidebar-dark-active-color;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
.nav-treeview > .nav-item > .nav-link {
|
||||||
|
&.active,
|
||||||
|
&:focus,
|
||||||
|
&:hover {
|
||||||
|
background: none;
|
||||||
|
color: $sidebar-dark-active-color;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
[class*='sidebar-light'] & {
|
||||||
|
&.nav-sidebar > .nav-item {
|
||||||
|
.nav-treeview,
|
||||||
|
> .nav-treeview {
|
||||||
|
background: rgba($black, .05);
|
||||||
|
}
|
||||||
|
|
||||||
|
> .nav-link.active {
|
||||||
|
color: $sidebar-light-active-color;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
.nav-treeview > .nav-item > .nav-link {
|
||||||
|
&.active,
|
||||||
|
&:focus,
|
||||||
|
&:hover {
|
||||||
|
background: none;
|
||||||
|
color: $sidebar-light-active-color;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
.nav-collapse-hide-child {
|
||||||
|
.menu-open > .nav-treeview {
|
||||||
|
max-height: min-content;
|
||||||
|
opacity: 1;
|
||||||
|
}
|
||||||
|
|
||||||
|
.sidebar-collapse & {
|
||||||
|
.menu-open > .nav-treeview {
|
||||||
|
max-height: 0;
|
||||||
|
opacity: 0;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
.sidebar-mini.sidebar-collapse .main-sidebar.sidebar-focused &,
|
||||||
|
.sidebar-mini.sidebar-collapse .main-sidebar:hover &,
|
||||||
|
.sidebar-mini-md.sidebar-collapse .main-sidebar.sidebar-focused &,
|
||||||
|
.sidebar-mini-md.sidebar-collapse .main-sidebar:hover & {
|
||||||
|
.menu-open > .nav-treeview {
|
||||||
|
max-height: min-content;
|
||||||
|
opacity: 1;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
// Nav Compact
|
||||||
|
.nav-compact {
|
||||||
|
.nav-link,
|
||||||
|
.nav-header {
|
||||||
|
padding-top: ($nav-link-padding-y / 2);
|
||||||
|
padding-bottom: ($nav-link-padding-y / 2);
|
||||||
|
}
|
||||||
|
|
||||||
|
.nav-header:not(:first-of-type) {
|
||||||
|
padding-top: ($nav-link-padding-y * 1.5);
|
||||||
|
padding-bottom: ($nav-link-padding-y / 2);
|
||||||
|
}
|
||||||
|
|
||||||
|
.nav-link > .right,
|
||||||
|
.nav-link > p > .right {
|
||||||
|
top: .465rem;
|
||||||
|
}
|
||||||
|
|
||||||
|
.text-sm & {
|
||||||
|
.nav-link > .right,
|
||||||
|
.nav-link > p > .right {
|
||||||
|
top: .7rem;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
// Sidebar Form Control
|
||||||
|
[class*='sidebar-dark'] {
|
||||||
|
.form-control-sidebar,
|
||||||
|
.btn-sidebar {
|
||||||
|
background: lighten($sidebar-dark-bg, 5%);
|
||||||
|
border: 1px solid lighten($sidebar-dark-bg, 15%);
|
||||||
|
color: lighten(color-yiq(lighten($sidebar-dark-bg, 5%)), 15%);
|
||||||
|
}
|
||||||
|
|
||||||
|
.form-control-sidebar:focus,
|
||||||
|
.btn-sidebar:focus {
|
||||||
|
border: 1px solid lighten($sidebar-dark-bg, 30%);
|
||||||
|
}
|
||||||
|
|
||||||
|
.btn-sidebar:hover {
|
||||||
|
background: lighten($sidebar-dark-bg, 7.5%);
|
||||||
|
}
|
||||||
|
|
||||||
|
.btn-sidebar:focus {
|
||||||
|
background: lighten($sidebar-dark-bg, 10%);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
[class*='sidebar-light'] {
|
||||||
|
.form-control-sidebar,
|
||||||
|
.btn-sidebar {
|
||||||
|
background: darken($sidebar-light-bg, 5%);
|
||||||
|
border: 1px solid darken($sidebar-light-bg, 15%);
|
||||||
|
color: color-yiq(darken($sidebar-light-bg, 5%));
|
||||||
|
}
|
||||||
|
|
||||||
|
.form-control-sidebar:focus,
|
||||||
|
.btn-sidebar:focus {
|
||||||
|
border: 1px solid darken($sidebar-light-bg, 30%);
|
||||||
|
}
|
||||||
|
|
||||||
|
.btn-sidebar:hover {
|
||||||
|
background: darken($sidebar-light-bg, 7.5%);
|
||||||
|
}
|
||||||
|
|
||||||
|
.btn-sidebar:focus {
|
||||||
|
background: darken($sidebar-light-bg, 10%);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
@ -0,0 +1,479 @@
|
||||||
|
//
|
||||||
|
// Misc: Miscellaneous
|
||||||
|
//
|
||||||
|
|
||||||
|
.border-transparent {
|
||||||
|
border-color: transparent !important;
|
||||||
|
}
|
||||||
|
|
||||||
|
// Description Blocks
|
||||||
|
.description-block {
|
||||||
|
display: block;
|
||||||
|
margin: 10px 0;
|
||||||
|
text-align: center;
|
||||||
|
|
||||||
|
&.margin-bottom {
|
||||||
|
margin-bottom: 25px;
|
||||||
|
}
|
||||||
|
|
||||||
|
> .description-header {
|
||||||
|
font-size: 16px;
|
||||||
|
font-weight: 600;
|
||||||
|
margin: 0;
|
||||||
|
padding: 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
> .description-text {
|
||||||
|
text-transform: uppercase;
|
||||||
|
}
|
||||||
|
|
||||||
|
// Description Block Extension
|
||||||
|
.description-icon {
|
||||||
|
font-size: 16px;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
// List utility classes
|
||||||
|
.list-group-unbordered {
|
||||||
|
> .list-group-item {
|
||||||
|
border-left: 0;
|
||||||
|
border-radius: 0;
|
||||||
|
border-right: 0;
|
||||||
|
padding-left: 0;
|
||||||
|
padding-right: 0;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
.list-header {
|
||||||
|
color: $gray-600;
|
||||||
|
font-size: 15px;
|
||||||
|
font-weight: bold;
|
||||||
|
padding: 10px 4px;
|
||||||
|
}
|
||||||
|
|
||||||
|
.list-seperator {
|
||||||
|
background: $card-border-color;
|
||||||
|
height: 1px;
|
||||||
|
margin: 15px 0 9px;
|
||||||
|
}
|
||||||
|
|
||||||
|
.list-link {
|
||||||
|
> a {
|
||||||
|
color: $gray-600;
|
||||||
|
padding: 4px;
|
||||||
|
|
||||||
|
&:hover {
|
||||||
|
color: $gray-900;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
// User block
|
||||||
|
.user-block {
|
||||||
|
float: left;
|
||||||
|
|
||||||
|
img {
|
||||||
|
float: left;
|
||||||
|
height: 40px;
|
||||||
|
width: 40px;
|
||||||
|
}
|
||||||
|
|
||||||
|
.username,
|
||||||
|
.description,
|
||||||
|
.comment {
|
||||||
|
display: block;
|
||||||
|
margin-left: 50px;
|
||||||
|
}
|
||||||
|
|
||||||
|
.username {
|
||||||
|
font-size: 16px;
|
||||||
|
font-weight: 600;
|
||||||
|
margin-top: -1px;
|
||||||
|
}
|
||||||
|
|
||||||
|
.description {
|
||||||
|
color: $gray-600;
|
||||||
|
font-size: 13px;
|
||||||
|
margin-top: -3px;
|
||||||
|
}
|
||||||
|
|
||||||
|
&.user-block-sm {
|
||||||
|
img {
|
||||||
|
width: $img-size-sm;
|
||||||
|
height: $img-size-sm;
|
||||||
|
}
|
||||||
|
|
||||||
|
.username,
|
||||||
|
.description,
|
||||||
|
.comment {
|
||||||
|
margin-left: 40px;
|
||||||
|
}
|
||||||
|
|
||||||
|
.username {
|
||||||
|
font-size: 14px;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
// Image sizes
|
||||||
|
.img-sm,
|
||||||
|
.img-md,
|
||||||
|
.img-lg {
|
||||||
|
float: left;
|
||||||
|
}
|
||||||
|
|
||||||
|
.img-sm {
|
||||||
|
height: $img-size-sm;
|
||||||
|
width: $img-size-sm;
|
||||||
|
|
||||||
|
+ .img-push {
|
||||||
|
margin-left: $img-size-sm + $img-size-push;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
.img-md {
|
||||||
|
width: $img-size-md;
|
||||||
|
height: $img-size-md;
|
||||||
|
|
||||||
|
+ .img-push {
|
||||||
|
margin-left: $img-size-md + $img-size-push;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
.img-lg {
|
||||||
|
width: $img-size-lg;
|
||||||
|
height: $img-size-lg;
|
||||||
|
|
||||||
|
+ .img-push {
|
||||||
|
margin-left: $img-size-lg + $img-size-push;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
// Image bordered
|
||||||
|
.img-bordered {
|
||||||
|
border: 3px solid $gray-500;
|
||||||
|
padding: 3px;
|
||||||
|
}
|
||||||
|
|
||||||
|
.img-bordered-sm {
|
||||||
|
border: 2px solid $gray-500;
|
||||||
|
padding: 2px;
|
||||||
|
}
|
||||||
|
|
||||||
|
// Rounded and Circle Images
|
||||||
|
.img-rounded {
|
||||||
|
@include border-radius($border-radius)
|
||||||
|
}
|
||||||
|
|
||||||
|
.img-circle {
|
||||||
|
@include border-radius(50%);
|
||||||
|
}
|
||||||
|
|
||||||
|
// Image sizes
|
||||||
|
.img-size-64,
|
||||||
|
.img-size-50,
|
||||||
|
.img-size-32 {
|
||||||
|
height: auto;
|
||||||
|
}
|
||||||
|
|
||||||
|
.img-size-64 {
|
||||||
|
width: 64px;
|
||||||
|
}
|
||||||
|
|
||||||
|
.img-size-50 {
|
||||||
|
width: 50px;
|
||||||
|
}
|
||||||
|
|
||||||
|
.img-size-32 {
|
||||||
|
width: 32px;
|
||||||
|
}
|
||||||
|
|
||||||
|
// Block sizes
|
||||||
|
.size-32,
|
||||||
|
.size-40,
|
||||||
|
.size-50 {
|
||||||
|
display: block;
|
||||||
|
text-align: center;
|
||||||
|
}
|
||||||
|
|
||||||
|
.size-32 {
|
||||||
|
height: 32px;
|
||||||
|
line-height: 32px;
|
||||||
|
width: 32px;
|
||||||
|
}
|
||||||
|
|
||||||
|
.size-40 {
|
||||||
|
height: 40px;
|
||||||
|
line-height: 40px;
|
||||||
|
width: 40px;
|
||||||
|
}
|
||||||
|
|
||||||
|
.size-50 {
|
||||||
|
height: 50px;
|
||||||
|
line-height: 50px;
|
||||||
|
width: 50px;
|
||||||
|
}
|
||||||
|
|
||||||
|
// General attachemnt block
|
||||||
|
.attachment-block {
|
||||||
|
background: $gray-100;
|
||||||
|
border: 1px solid $card-border-color;
|
||||||
|
margin-bottom: 10px;
|
||||||
|
padding: 5px;
|
||||||
|
|
||||||
|
.attachment-img {
|
||||||
|
float: left;
|
||||||
|
height: auto;
|
||||||
|
max-height: 100px;
|
||||||
|
max-width: 100px;
|
||||||
|
}
|
||||||
|
|
||||||
|
.attachment-pushed {
|
||||||
|
margin-left: 110px;
|
||||||
|
}
|
||||||
|
|
||||||
|
.attachment-heading {
|
||||||
|
margin: 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
.attachment-text {
|
||||||
|
color: $gray-700;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
// Overlays for Card, InfoBox & SmallBox
|
||||||
|
.card,
|
||||||
|
.overlay-wrapper,
|
||||||
|
.info-box,
|
||||||
|
.small-box {
|
||||||
|
// Box overlay for LOADING STATE effect
|
||||||
|
> .overlay,
|
||||||
|
> .loading-img {
|
||||||
|
height: 100%;
|
||||||
|
left: 0;
|
||||||
|
position: absolute;
|
||||||
|
top: 0;
|
||||||
|
width: 100%;
|
||||||
|
}
|
||||||
|
|
||||||
|
.overlay {
|
||||||
|
@include border-radius($border-radius);
|
||||||
|
align-items: center;
|
||||||
|
background: rgba($white, 0.7);
|
||||||
|
display: flex;
|
||||||
|
justify-content: center;
|
||||||
|
z-index: 50;
|
||||||
|
|
||||||
|
> .fa,
|
||||||
|
> .fas,
|
||||||
|
> .far,
|
||||||
|
> .fab,
|
||||||
|
> .glyphicon,
|
||||||
|
> .ion {
|
||||||
|
color: $gray-800;
|
||||||
|
}
|
||||||
|
|
||||||
|
&.dark {
|
||||||
|
background: rgba($black, 0.5);
|
||||||
|
|
||||||
|
> .fa,
|
||||||
|
> .fas,
|
||||||
|
> .far,
|
||||||
|
> .fab,
|
||||||
|
> .glyphicon,
|
||||||
|
> .ion {
|
||||||
|
color: $gray-400;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
.tab-pane {
|
||||||
|
// Box overlay for LOADING STATE effect on Tab Panels
|
||||||
|
> .overlay-wrapper {
|
||||||
|
position: relative;
|
||||||
|
> .overlay {
|
||||||
|
border-top-left-radius: 0;
|
||||||
|
border-top-right-radius: 0;
|
||||||
|
flex-direction: column;
|
||||||
|
margin-top: -$card-spacer-x;
|
||||||
|
margin-left: -$card-spacer-x;
|
||||||
|
height: calc(100% + 2 * #{$card-spacer-x});
|
||||||
|
width: calc(100% + 2 * #{$card-spacer-x});
|
||||||
|
|
||||||
|
&.dark {
|
||||||
|
color: $white;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
// Ribbon
|
||||||
|
.ribbon-wrapper {
|
||||||
|
height: $ribbon-wrapper-size;
|
||||||
|
overflow: hidden;
|
||||||
|
position: absolute;
|
||||||
|
right: -2px;
|
||||||
|
top: -2px;
|
||||||
|
width: $ribbon-wrapper-size;
|
||||||
|
z-index: 10;
|
||||||
|
|
||||||
|
&.ribbon-lg {
|
||||||
|
height: $ribbon-lg-wrapper-size;
|
||||||
|
width: $ribbon-lg-wrapper-size;
|
||||||
|
|
||||||
|
.ribbon {
|
||||||
|
right: $ribbon-lg-right;
|
||||||
|
top: $ribbon-lg-top;
|
||||||
|
width: $ribbon-lg-width;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
&.ribbon-xl {
|
||||||
|
height: $ribbon-xl-wrapper-size;
|
||||||
|
width: $ribbon-xl-wrapper-size;
|
||||||
|
|
||||||
|
.ribbon {
|
||||||
|
right: $ribbon-xl-right;
|
||||||
|
top: $ribbon-xl-top;
|
||||||
|
width: $ribbon-xl-width;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
.ribbon {
|
||||||
|
box-shadow: 0 0 $ribbon-border-size rgba($black, .3);
|
||||||
|
font-size: $ribbon-font-size;
|
||||||
|
line-height: $ribbon-line-height;
|
||||||
|
padding: $ribbon-padding;
|
||||||
|
position: relative;
|
||||||
|
right: $ribbon-right;
|
||||||
|
text-align: center;
|
||||||
|
text-shadow: 0 -1px 0 rgba($black, .4);
|
||||||
|
text-transform: uppercase;
|
||||||
|
top: $ribbon-top;
|
||||||
|
transform: rotate(45deg);
|
||||||
|
width: $ribbon-width;
|
||||||
|
|
||||||
|
&::before,
|
||||||
|
&::after {
|
||||||
|
border-left: $ribbon-border-size solid transparent;
|
||||||
|
border-right: $ribbon-border-size solid transparent;
|
||||||
|
border-top: $ribbon-border-size solid #9e9e9e;
|
||||||
|
bottom: -$ribbon-border-size;
|
||||||
|
content: '';
|
||||||
|
position: absolute;
|
||||||
|
}
|
||||||
|
|
||||||
|
&::before {
|
||||||
|
left: 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
&::after {
|
||||||
|
right: 0;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
// Scroll To Top
|
||||||
|
.back-to-top {
|
||||||
|
bottom: 1.25rem;
|
||||||
|
position: fixed;
|
||||||
|
right: 1.25rem;
|
||||||
|
z-index: $zindex-control-sidebar + 1;
|
||||||
|
|
||||||
|
&:focus {
|
||||||
|
box-shadow: none;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
// Pre
|
||||||
|
pre {
|
||||||
|
padding: .75rem;
|
||||||
|
}
|
||||||
|
|
||||||
|
// Blockquotes styles
|
||||||
|
blockquote {
|
||||||
|
background: $white;
|
||||||
|
border-left: .7rem solid $primary;
|
||||||
|
margin: 1.5em .7rem;
|
||||||
|
padding: 0.5em .7rem;
|
||||||
|
|
||||||
|
.box & {
|
||||||
|
background: $gray-200;
|
||||||
|
}
|
||||||
|
|
||||||
|
p:last-child {
|
||||||
|
margin-bottom: 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
h1,
|
||||||
|
h2,
|
||||||
|
h3,
|
||||||
|
h4,
|
||||||
|
h5,
|
||||||
|
h6 {
|
||||||
|
color: $primary;
|
||||||
|
font-size: 1.25rem;
|
||||||
|
font-weight: 600;
|
||||||
|
}
|
||||||
|
|
||||||
|
@each $color, $value in $theme-colors {
|
||||||
|
&.quote-#{$color} {
|
||||||
|
border-color: $value;
|
||||||
|
|
||||||
|
h1,
|
||||||
|
h2,
|
||||||
|
h3,
|
||||||
|
h4,
|
||||||
|
h5,
|
||||||
|
h6 {
|
||||||
|
color: $value;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
@each $color, $value in $colors {
|
||||||
|
&.quote-#{$color} {
|
||||||
|
border-color: $value;
|
||||||
|
|
||||||
|
h1,
|
||||||
|
h2,
|
||||||
|
h3,
|
||||||
|
h4,
|
||||||
|
h5,
|
||||||
|
h6 {
|
||||||
|
color: $value;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
// Tab Custom Content
|
||||||
|
|
||||||
|
.tab-custom-content {
|
||||||
|
border-top: $nav-tabs-border-width solid $nav-tabs-border-color;
|
||||||
|
margin-top: .5rem;
|
||||||
|
padding-top: .5rem;
|
||||||
|
}
|
||||||
|
|
||||||
|
.nav + .tab-custom-content {
|
||||||
|
border-top: none;
|
||||||
|
border-bottom: $nav-tabs-border-width solid $nav-tabs-border-color;
|
||||||
|
margin-top: 0;
|
||||||
|
margin-bottom: .5rem;
|
||||||
|
padding-bottom: .5rem;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
// Badge BTN Style
|
||||||
|
.badge-btn {
|
||||||
|
border-radius: $button-border-radius-xs;
|
||||||
|
font-size: $button-font-size-xs;
|
||||||
|
font-weight: 400;
|
||||||
|
padding: $button-padding-y-xs*2 $button-padding-x-xs*2;
|
||||||
|
}
|
||||||
|
|
||||||
|
.badge-btn.badge-pill {
|
||||||
|
padding: .375rem .6rem;
|
||||||
|
}
|
||||||
|
|
@ -0,0 +1,13 @@
|
||||||
|
//
|
||||||
|
// General: Mixins
|
||||||
|
//
|
||||||
|
|
||||||
|
@import 'mixins/cards';
|
||||||
|
@import 'mixins/sidebar';
|
||||||
|
@import 'mixins/navbar';
|
||||||
|
@import 'mixins/accent';
|
||||||
|
@import 'mixins/custom-forms';
|
||||||
|
@import 'mixins/backgrounds';
|
||||||
|
@import 'mixins/direct-chat';
|
||||||
|
@import 'mixins/toasts';
|
||||||
|
@import 'mixins/miscellaneous';
|
||||||
|
|
@ -0,0 +1,40 @@
|
||||||
|
//
|
||||||
|
// Component: Modals
|
||||||
|
//
|
||||||
|
|
||||||
|
// Overlay
|
||||||
|
.modal-dialog {
|
||||||
|
.overlay {
|
||||||
|
background-color: $black;
|
||||||
|
display: block;
|
||||||
|
height: 100%;
|
||||||
|
left: 0;
|
||||||
|
opacity: .7;
|
||||||
|
position: absolute;
|
||||||
|
top: 0;
|
||||||
|
width: 100%;
|
||||||
|
z-index: ($zindex-modal + 2);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
// BG Color Variations Fixes
|
||||||
|
.modal-content {
|
||||||
|
&.bg-warning {
|
||||||
|
.modal-header,
|
||||||
|
.modal-footer {
|
||||||
|
border-color: $gray-800;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
&.bg-primary,
|
||||||
|
&.bg-secondary,
|
||||||
|
&.bg-info,
|
||||||
|
&.bg-danger,
|
||||||
|
&.bg-success, {
|
||||||
|
.close {
|
||||||
|
color: $white;
|
||||||
|
text-shadow: 0 1px 0 #000;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
@ -0,0 +1,100 @@
|
||||||
|
//
|
||||||
|
// Component: Nav
|
||||||
|
//
|
||||||
|
|
||||||
|
.nav-pills {
|
||||||
|
.nav-link {
|
||||||
|
color: $gray-600;
|
||||||
|
|
||||||
|
&:not(.active):hover {
|
||||||
|
color: theme-color('primary');
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
.nav-item {
|
||||||
|
&.dropdown.show {
|
||||||
|
.nav-link:hover {
|
||||||
|
color: $dropdown-link-active-color;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
// Vertical Tabs
|
||||||
|
.nav-tabs.flex-column {
|
||||||
|
border-bottom: 0;
|
||||||
|
border-right: $nav-tabs-border-width solid $nav-tabs-border-color;
|
||||||
|
|
||||||
|
.nav-link {
|
||||||
|
border-bottom-left-radius: $nav-tabs-border-radius;
|
||||||
|
border-top-right-radius: 0;
|
||||||
|
margin-right: -$nav-tabs-border-width;
|
||||||
|
|
||||||
|
@include hover-focus {
|
||||||
|
border-color: $gray-200 transparent $gray-200 $gray-200;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
.nav-link.active,
|
||||||
|
.nav-item.show .nav-link {
|
||||||
|
border-color: $gray-300 transparent $gray-300 $gray-300;
|
||||||
|
}
|
||||||
|
|
||||||
|
&.nav-tabs-right {
|
||||||
|
border-left: $nav-tabs-border-width solid $nav-tabs-border-color;
|
||||||
|
border-right: 0;
|
||||||
|
|
||||||
|
.nav-link {
|
||||||
|
border-bottom-left-radius: 0;
|
||||||
|
border-bottom-right-radius: $nav-tabs-border-radius;
|
||||||
|
border-top-left-radius: 0;
|
||||||
|
border-top-right-radius: $nav-tabs-border-radius;
|
||||||
|
margin-left: -$nav-tabs-border-width;
|
||||||
|
|
||||||
|
@include hover-focus {
|
||||||
|
border-color: $gray-200 $gray-200 $gray-200 transparent;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
.nav-link.active,
|
||||||
|
.nav-item.show .nav-link {
|
||||||
|
border-color: $gray-300 $gray-300 $gray-300 transparent;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
.navbar-no-expand {
|
||||||
|
flex-direction: row;
|
||||||
|
|
||||||
|
.nav-link {
|
||||||
|
padding-left: $navbar-nav-link-padding-x;
|
||||||
|
padding-right: $navbar-nav-link-padding-x;
|
||||||
|
}
|
||||||
|
|
||||||
|
.dropdown-menu {
|
||||||
|
position: absolute;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
// Color variants
|
||||||
|
@each $color, $value in $theme-colors {
|
||||||
|
@if $color == dark or $color == light {
|
||||||
|
.navbar-#{$color} {
|
||||||
|
background-color: $value;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
@each $color, $value in $theme-colors {
|
||||||
|
@if $color != dark and $color != light {
|
||||||
|
.navbar-#{$color} {
|
||||||
|
background-color: $value;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
@each $color, $value in $colors {
|
||||||
|
.navbar-#{$color} {
|
||||||
|
background-color: $value;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
@ -0,0 +1,52 @@
|
||||||
|
//
|
||||||
|
// Misc: Print
|
||||||
|
//
|
||||||
|
|
||||||
|
@media print {
|
||||||
|
//Add to elements that you do not want to show when printing
|
||||||
|
.no-print {
|
||||||
|
display: none !important;
|
||||||
|
}
|
||||||
|
|
||||||
|
//Elements that we want to hide when printing
|
||||||
|
.main-sidebar,
|
||||||
|
.main-header,
|
||||||
|
.content-header {
|
||||||
|
@extend .no-print;
|
||||||
|
}
|
||||||
|
|
||||||
|
//This is the only element that should appear, so let's remove the margins
|
||||||
|
.content-wrapper,
|
||||||
|
.main-footer {
|
||||||
|
@include translate(0, 0);
|
||||||
|
margin-left: 0 !important;
|
||||||
|
min-height: 0 !important;
|
||||||
|
}
|
||||||
|
|
||||||
|
.layout-fixed .content-wrapper {
|
||||||
|
padding-top: 0 !important;
|
||||||
|
}
|
||||||
|
|
||||||
|
//Invoice printing
|
||||||
|
.invoice {
|
||||||
|
border: 0;
|
||||||
|
margin: 0;
|
||||||
|
padding: 0;
|
||||||
|
width: 100%;
|
||||||
|
}
|
||||||
|
|
||||||
|
.invoice-col {
|
||||||
|
float: left;
|
||||||
|
width: 33.3333333%;
|
||||||
|
}
|
||||||
|
|
||||||
|
//Make sure table content displays properly
|
||||||
|
.table-responsive {
|
||||||
|
overflow: auto;
|
||||||
|
|
||||||
|
> .table tr th,
|
||||||
|
> .table tr td {
|
||||||
|
white-space: normal !important;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
@ -0,0 +1,54 @@
|
||||||
|
//
|
||||||
|
// Component: Products
|
||||||
|
//
|
||||||
|
|
||||||
|
.products-list {
|
||||||
|
list-style: none;
|
||||||
|
margin: 0;
|
||||||
|
padding: 0;
|
||||||
|
|
||||||
|
> .item {
|
||||||
|
@include clearfix;
|
||||||
|
|
||||||
|
@if $enable-rounded {
|
||||||
|
@include border-radius($border-radius);
|
||||||
|
}
|
||||||
|
|
||||||
|
background: $white;
|
||||||
|
padding: 10px 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
.product-img {
|
||||||
|
float: left;
|
||||||
|
|
||||||
|
img {
|
||||||
|
height: 50px;
|
||||||
|
width: 50px;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
.product-info {
|
||||||
|
margin-left: 60px;
|
||||||
|
}
|
||||||
|
|
||||||
|
.product-title {
|
||||||
|
font-weight: 600;
|
||||||
|
}
|
||||||
|
|
||||||
|
.product-description {
|
||||||
|
color: $gray-600;
|
||||||
|
display: block;
|
||||||
|
overflow: hidden;
|
||||||
|
text-overflow: ellipsis;
|
||||||
|
white-space: nowrap;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
.product-list-in-card > .item {
|
||||||
|
@include border-radius(0);
|
||||||
|
border-bottom: 1px solid $card-border-color;
|
||||||
|
|
||||||
|
&:last-of-type {
|
||||||
|
border-bottom-width: 0;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
@ -0,0 +1,66 @@
|
||||||
|
//
|
||||||
|
// Component: Progress Bar
|
||||||
|
//
|
||||||
|
|
||||||
|
//General CSS
|
||||||
|
.progress {
|
||||||
|
@include box-shadow(none);
|
||||||
|
@include border-radius($progress-bar-border-radius);
|
||||||
|
|
||||||
|
// Vertical bars
|
||||||
|
&.vertical {
|
||||||
|
display: inline-block;
|
||||||
|
height: 200px;
|
||||||
|
margin-right: 10px;
|
||||||
|
position: relative;
|
||||||
|
width: 30px;
|
||||||
|
|
||||||
|
> .progress-bar {
|
||||||
|
bottom: 0;
|
||||||
|
position: absolute;
|
||||||
|
width: 100%;
|
||||||
|
}
|
||||||
|
|
||||||
|
//Sizes
|
||||||
|
&.sm,
|
||||||
|
&.progress-sm {
|
||||||
|
width: 20px;
|
||||||
|
}
|
||||||
|
|
||||||
|
&.xs,
|
||||||
|
&.progress-xs {
|
||||||
|
width: 10px;
|
||||||
|
}
|
||||||
|
|
||||||
|
&.xxs,
|
||||||
|
&.progress-xxs {
|
||||||
|
width: 3px;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
.progress-group {
|
||||||
|
margin-bottom: map-get($spacers, 2);
|
||||||
|
}
|
||||||
|
|
||||||
|
// size variation
|
||||||
|
.progress-sm {
|
||||||
|
height: 10px;
|
||||||
|
}
|
||||||
|
|
||||||
|
.progress-xs {
|
||||||
|
height: 7px;
|
||||||
|
}
|
||||||
|
|
||||||
|
.progress-xxs {
|
||||||
|
height: 3px;
|
||||||
|
}
|
||||||
|
|
||||||
|
// Remove margins from progress bars when put in a table
|
||||||
|
.table {
|
||||||
|
tr > td {
|
||||||
|
.progress {
|
||||||
|
margin: 0;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
@ -0,0 +1,191 @@
|
||||||
|
//
|
||||||
|
// Component: Sidebar Mini
|
||||||
|
//
|
||||||
|
|
||||||
|
// Logo style
|
||||||
|
.logo-xs,
|
||||||
|
.logo-xl {
|
||||||
|
opacity: 1;
|
||||||
|
position: absolute;
|
||||||
|
visibility: visible;
|
||||||
|
|
||||||
|
&.brand-image-xs {
|
||||||
|
left: 18px;
|
||||||
|
top: 12px;
|
||||||
|
}
|
||||||
|
|
||||||
|
&.brand-image-xl {
|
||||||
|
left: 12px;
|
||||||
|
top: 6px;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
.logo-xs {
|
||||||
|
opacity: 0;
|
||||||
|
visibility: hidden;
|
||||||
|
|
||||||
|
&.brand-image-xl {
|
||||||
|
left: 16px;
|
||||||
|
top: 8px;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
.brand-link {
|
||||||
|
&.logo-switch {
|
||||||
|
&::before {
|
||||||
|
content: '\00a0';
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
// Add sidebar-mini class to the body tag to activate this feature
|
||||||
|
.sidebar-mini {
|
||||||
|
@include media-breakpoint-up(lg) {
|
||||||
|
@include sidebar-mini-breakpoint;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
@include media-breakpoint-down(md) {
|
||||||
|
.sidebar-mini.sidebar-collapse .main-sidebar {
|
||||||
|
box-shadow: none !important;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
.sidebar-mini-md {
|
||||||
|
@include media-breakpoint-up(md) {
|
||||||
|
@include sidebar-mini-breakpoint;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
.sidebar-collapse {
|
||||||
|
.main-sidebar.sidebar-focused,
|
||||||
|
.main-sidebar:hover {
|
||||||
|
.nav-header {
|
||||||
|
display: inline-block;
|
||||||
|
}
|
||||||
|
|
||||||
|
//.nav .menu-open .nav-treeview {
|
||||||
|
// display: block!important;
|
||||||
|
//}
|
||||||
|
|
||||||
|
.nav-sidebar > .nav-item > .nav-link i {
|
||||||
|
font-size: 1.2rem;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
.main-sidebar {
|
||||||
|
.nav .nav-item .nav-link {
|
||||||
|
padding: 10px 21px !important;
|
||||||
|
}
|
||||||
|
|
||||||
|
//.nav .menu-open .nav-treeview {
|
||||||
|
// display: none!important;
|
||||||
|
//}
|
||||||
|
}
|
||||||
|
|
||||||
|
// 导航栏
|
||||||
|
.header-navbar.floating-nav {
|
||||||
|
width: calc(100vw - (100vw - 100%) - 70px - #{$sidebar-mini-width});
|
||||||
|
}
|
||||||
|
|
||||||
|
.header-navbar.fixed-top {
|
||||||
|
left: #{$sidebar-mini-width};
|
||||||
|
}
|
||||||
|
|
||||||
|
.nav-sidebar > .nav-item > .nav-link i {
|
||||||
|
font-size: 1.3rem;
|
||||||
|
}
|
||||||
|
|
||||||
|
.sidebar-no-expand.main-sidebar.sidebar-focused,
|
||||||
|
.sidebar-no-expand.main-sidebar:hover {
|
||||||
|
width: $sidebar-mini-width;
|
||||||
|
|
||||||
|
.nav-header {
|
||||||
|
display: none;
|
||||||
|
}
|
||||||
|
|
||||||
|
.brand-link {
|
||||||
|
width: $sidebar-mini-width !important;
|
||||||
|
}
|
||||||
|
|
||||||
|
.user-panel .image {
|
||||||
|
float: none !important;
|
||||||
|
}
|
||||||
|
|
||||||
|
.logo-xs {
|
||||||
|
opacity: 1;
|
||||||
|
visibility: visible;
|
||||||
|
}
|
||||||
|
|
||||||
|
.logo-xl {
|
||||||
|
opacity: 0;
|
||||||
|
visibility: hidden;
|
||||||
|
}
|
||||||
|
|
||||||
|
.nav-sidebar.nav-child-indent .nav-treeview {
|
||||||
|
padding-left: 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
.brand-text,
|
||||||
|
.user-panel > .info,
|
||||||
|
.nav-sidebar .nav-link p {
|
||||||
|
margin-left: -10px;
|
||||||
|
opacity: 0;
|
||||||
|
visibility: hidden;
|
||||||
|
width: 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
.nav-sidebar > .nav-item .nav-icon {
|
||||||
|
margin-right: 0;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
.nav-sidebar {
|
||||||
|
position: relative;
|
||||||
|
|
||||||
|
&:hover {
|
||||||
|
overflow: visible;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
.sidebar-form,
|
||||||
|
.nav-sidebar > .nav-header {
|
||||||
|
overflow: hidden;
|
||||||
|
text-overflow: clip;
|
||||||
|
}
|
||||||
|
|
||||||
|
.nav-sidebar .nav-item > .nav-link {
|
||||||
|
position: relative;
|
||||||
|
|
||||||
|
> .float-right {
|
||||||
|
margin-top: -7px;
|
||||||
|
position: absolute;
|
||||||
|
right: 10px;
|
||||||
|
top: 50%;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
// 导航栏兼容
|
||||||
|
@include media-breakpoint-down(sm) {
|
||||||
|
.sidebar-mini-md.sidebar-collapse .main-sidebar {
|
||||||
|
box-shadow: none !important;
|
||||||
|
}
|
||||||
|
|
||||||
|
.sidebar-collapse .header-navbar.fixed-top {
|
||||||
|
left: 0;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
@media (max-width: 1201px) {
|
||||||
|
.sidebar-collapse .header-navbar.fixed-top {
|
||||||
|
left: 0;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
.sidebar .nav-link p,
|
||||||
|
.main-sidebar .brand-text,
|
||||||
|
.main-sidebar .logo-xs,
|
||||||
|
.main-sidebar .logo-xl,
|
||||||
|
.sidebar .user-panel .info {
|
||||||
|
@include transition(margin-left $transition-speed linear, opacity $transition-speed ease, visibility $transition-speed ease)
|
||||||
|
}
|
||||||
|
|
@ -0,0 +1,152 @@
|
||||||
|
//
|
||||||
|
// Component: Small Box
|
||||||
|
//
|
||||||
|
|
||||||
|
.small-box {
|
||||||
|
@include border-radius($border-radius);
|
||||||
|
@include box-shadow($card-shadow);
|
||||||
|
|
||||||
|
display: block;
|
||||||
|
margin-bottom: 20px;
|
||||||
|
position: relative;
|
||||||
|
|
||||||
|
// content wrapper
|
||||||
|
> .inner {
|
||||||
|
padding: 10px;
|
||||||
|
}
|
||||||
|
|
||||||
|
> .small-box-footer {
|
||||||
|
background: rgba($black, 0.1);
|
||||||
|
color: rgba($white, 0.8);
|
||||||
|
display: block;
|
||||||
|
padding: 3px 0;
|
||||||
|
position: relative;
|
||||||
|
text-align: center;
|
||||||
|
text-decoration: none;
|
||||||
|
z-index: 10;
|
||||||
|
|
||||||
|
&:hover {
|
||||||
|
background: rgba($black, 0.15);
|
||||||
|
color: $white;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
h3 {
|
||||||
|
@include font-size(2.2rem);
|
||||||
|
font-weight: bold;
|
||||||
|
margin: 0 0 10px 0;
|
||||||
|
padding: 0;
|
||||||
|
white-space: nowrap;
|
||||||
|
}
|
||||||
|
|
||||||
|
@include media-breakpoint-up(lg) {
|
||||||
|
.col-xl-2 &,
|
||||||
|
.col-lg-2 &,
|
||||||
|
.col-md-2 & {
|
||||||
|
h3 {
|
||||||
|
@include font-size(1.6rem);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
.col-xl-3 &,
|
||||||
|
.col-lg-3 &,
|
||||||
|
.col-md-3 & {
|
||||||
|
h3 {
|
||||||
|
@include font-size(1.6rem);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
@include media-breakpoint-up(xl) {
|
||||||
|
.col-xl-2 &,
|
||||||
|
.col-lg-2 &,
|
||||||
|
.col-md-2 & {
|
||||||
|
h3 {
|
||||||
|
@include font-size(2.2rem);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
.col-xl-3 &,
|
||||||
|
.col-lg-3 &,
|
||||||
|
.col-md-3 & {
|
||||||
|
h3 {
|
||||||
|
@include font-size(2.2rem);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
p {
|
||||||
|
font-size: 1rem;
|
||||||
|
|
||||||
|
> small {
|
||||||
|
color: $gray-100;
|
||||||
|
display: block;
|
||||||
|
font-size: 0.9rem;
|
||||||
|
margin-top: 5px;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
h3,
|
||||||
|
p {
|
||||||
|
z-index: 5;
|
||||||
|
}
|
||||||
|
|
||||||
|
// the icon
|
||||||
|
.icon {
|
||||||
|
color: rgba($black, 0.15);
|
||||||
|
z-index: 0;
|
||||||
|
|
||||||
|
> i {
|
||||||
|
font-size: 90px;
|
||||||
|
position: absolute;
|
||||||
|
right: 15px;
|
||||||
|
top: 15px;
|
||||||
|
transition: all $transition-speed linear;
|
||||||
|
|
||||||
|
&.fa,
|
||||||
|
&.fas,
|
||||||
|
&.far,
|
||||||
|
&.fab,
|
||||||
|
&.glyphicon,
|
||||||
|
&.ion {
|
||||||
|
font-size: 70px;
|
||||||
|
top: 20px;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
// Small box hover state
|
||||||
|
&:hover {
|
||||||
|
text-decoration: none;
|
||||||
|
|
||||||
|
// Animate icons on small box hover
|
||||||
|
.icon > i {
|
||||||
|
font-size: 95px;
|
||||||
|
|
||||||
|
&.fa,
|
||||||
|
&.fas,
|
||||||
|
&.far,
|
||||||
|
&.fab,
|
||||||
|
&.glyphicon,
|
||||||
|
&.ion {
|
||||||
|
font-size: 75px;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
@include media-breakpoint-down(sm) {
|
||||||
|
// No need for icons on very small devices
|
||||||
|
.small-box {
|
||||||
|
text-align: center;
|
||||||
|
|
||||||
|
.icon {
|
||||||
|
display: none;
|
||||||
|
}
|
||||||
|
|
||||||
|
p {
|
||||||
|
font-size: 12px;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
@ -0,0 +1,93 @@
|
||||||
|
//
|
||||||
|
// Component: Social Widgets
|
||||||
|
//
|
||||||
|
|
||||||
|
//General widget style
|
||||||
|
.card-widget {
|
||||||
|
border: 0;
|
||||||
|
position: relative;
|
||||||
|
}
|
||||||
|
|
||||||
|
//User Widget Style 1
|
||||||
|
.widget-user {
|
||||||
|
|
||||||
|
//User name container
|
||||||
|
.widget-user-header {
|
||||||
|
@if $enable-rounded {
|
||||||
|
@include border-top-radius($border-radius);
|
||||||
|
}
|
||||||
|
|
||||||
|
height: 135px;
|
||||||
|
padding: 1rem;
|
||||||
|
text-align: center;
|
||||||
|
}
|
||||||
|
|
||||||
|
//User name
|
||||||
|
.widget-user-username {
|
||||||
|
font-size: 25px;
|
||||||
|
font-weight: 300;
|
||||||
|
margin-bottom: 0;
|
||||||
|
margin-top: 0;
|
||||||
|
text-shadow: 0 1px 1px rgba($black, 0.2);
|
||||||
|
}
|
||||||
|
|
||||||
|
//User single line description
|
||||||
|
.widget-user-desc {
|
||||||
|
margin-top: 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
//User image container
|
||||||
|
.widget-user-image {
|
||||||
|
left: 50%;
|
||||||
|
margin-left: -45px;
|
||||||
|
position: absolute;
|
||||||
|
top: 80px;
|
||||||
|
|
||||||
|
> img {
|
||||||
|
border: 3px solid $white;
|
||||||
|
height: auto;
|
||||||
|
width: 90px;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
.card-footer {
|
||||||
|
padding-top: 50px;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
//User Widget Style 2
|
||||||
|
.widget-user-2 {
|
||||||
|
|
||||||
|
//User name container
|
||||||
|
.widget-user-header {
|
||||||
|
@include border-top-radius($border-radius);
|
||||||
|
padding: 1rem;
|
||||||
|
}
|
||||||
|
|
||||||
|
//User name
|
||||||
|
.widget-user-username {
|
||||||
|
font-size: 25px;
|
||||||
|
font-weight: 300;
|
||||||
|
margin-bottom: 5px;
|
||||||
|
margin-top: 5px;
|
||||||
|
}
|
||||||
|
|
||||||
|
//User single line description
|
||||||
|
.widget-user-desc {
|
||||||
|
margin-top: 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
.widget-user-username,
|
||||||
|
.widget-user-desc {
|
||||||
|
margin-left: 75px;
|
||||||
|
}
|
||||||
|
|
||||||
|
//User image container
|
||||||
|
.widget-user-image {
|
||||||
|
> img {
|
||||||
|
float: left;
|
||||||
|
height: auto;
|
||||||
|
width: 65px;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
@ -0,0 +1,74 @@
|
||||||
|
//
|
||||||
|
// Component: Table
|
||||||
|
//
|
||||||
|
|
||||||
|
.table {
|
||||||
|
&:not(.table-dark) {
|
||||||
|
color: inherit;
|
||||||
|
}
|
||||||
|
|
||||||
|
// fixed table head
|
||||||
|
&.table-head-fixed {
|
||||||
|
thead tr:nth-child(1) th {
|
||||||
|
background-color: $white;
|
||||||
|
border-bottom: 0;
|
||||||
|
box-shadow: inset 0 1px 0 $table-border-color,
|
||||||
|
inset 0 -1px 0 $table-border-color;
|
||||||
|
position: sticky;
|
||||||
|
top: 0;
|
||||||
|
z-index: 10;
|
||||||
|
}
|
||||||
|
|
||||||
|
&.table-dark {
|
||||||
|
thead tr {
|
||||||
|
&:nth-child(1) th {
|
||||||
|
background-color: $table-dark-bg;
|
||||||
|
box-shadow: inset 0 1px 0 $table-dark-border-color,
|
||||||
|
inset 0 -1px 0 $table-dark-border-color;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
// no border
|
||||||
|
&.no-border {
|
||||||
|
&,
|
||||||
|
td,
|
||||||
|
th {
|
||||||
|
border: 0;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
// .text-center in tables
|
||||||
|
&.text-center {
|
||||||
|
&,
|
||||||
|
td,
|
||||||
|
th {
|
||||||
|
text-align: center;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
&.table-valign-middle {
|
||||||
|
thead > tr > th,
|
||||||
|
thead > tr > td,
|
||||||
|
tbody > tr > th,
|
||||||
|
tbody > tr > td {
|
||||||
|
vertical-align: middle;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
.card-body.p-0 & {
|
||||||
|
thead > tr > th,
|
||||||
|
thead > tr > td,
|
||||||
|
tbody > tr > th,
|
||||||
|
tbody > tr > td {
|
||||||
|
&:first-of-type {
|
||||||
|
padding-left: map-get($spacers, 4);
|
||||||
|
}
|
||||||
|
|
||||||
|
&:last-of-type {
|
||||||
|
padding-right: map-get($spacers, 4);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
Some files were not shown because too many files have changed in this diff Show More
Loading…
Reference in New Issue