chore: rename folders
@@ -0,0 +1,14 @@
|
||||
{
|
||||
"presets": [
|
||||
["env", { "modules": false }],
|
||||
"stage-2"
|
||||
],
|
||||
"plugins": ["transform-runtime"],
|
||||
"comments": false,
|
||||
"env": {
|
||||
"test": {
|
||||
"presets": ["env", "stage-2"],
|
||||
"plugins": [ "istanbul" ]
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,9 @@
|
||||
root = true
|
||||
|
||||
[*]
|
||||
charset = utf-8
|
||||
indent_style = space
|
||||
indent_size = 2
|
||||
end_of_line = lf
|
||||
insert_final_newline = true
|
||||
trim_trailing_whitespace = true
|
||||
@@ -0,0 +1,2 @@
|
||||
build/*.js
|
||||
config/*.js
|
||||
@@ -0,0 +1,27 @@
|
||||
// http://eslint.org/docs/user-guide/configuring
|
||||
|
||||
module.exports = {
|
||||
root: true,
|
||||
parser: 'babel-eslint',
|
||||
parserOptions: {
|
||||
sourceType: 'module'
|
||||
},
|
||||
env: {
|
||||
browser: true,
|
||||
},
|
||||
// https://github.com/feross/standard/blob/master/RULES.md#javascript-standard-style
|
||||
extends: 'standard',
|
||||
// required to lint *.vue files
|
||||
plugins: [
|
||||
'html'
|
||||
],
|
||||
// add your custom rules here
|
||||
'rules': {
|
||||
// allow paren-less arrow functions
|
||||
'arrow-parens': 0,
|
||||
// allow async-await
|
||||
'generator-star-spacing': 0,
|
||||
// allow debugger during development
|
||||
'no-debugger': process.env.NODE_ENV === 'production' ? 2 : 0
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,9 @@
|
||||
.DS_Store
|
||||
node_modules/
|
||||
dist/
|
||||
npm-debug.log*
|
||||
yarn-debug.log*
|
||||
yarn-error.log*
|
||||
test/unit/coverage
|
||||
test/e2e/reports
|
||||
selenium-debug.log
|
||||
@@ -0,0 +1,8 @@
|
||||
// https://github.com/michael-ciniawsky/postcss-load-config
|
||||
|
||||
module.exports = {
|
||||
"plugins": {
|
||||
// to edit target browsers: use "browserlist" field in package.json
|
||||
"autoprefixer": {}
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,30 @@
|
||||
# core-ui
|
||||
|
||||
> Open Source Admin Template
|
||||
|
||||
## Build Setup
|
||||
|
||||
``` bash
|
||||
# install dependencies
|
||||
npm install
|
||||
|
||||
# serve with hot reload at localhost:8080
|
||||
npm run dev
|
||||
|
||||
# build for production with minification
|
||||
npm run build
|
||||
|
||||
# build for production and view the bundle analyzer report
|
||||
npm run build --report
|
||||
|
||||
# run unit tests
|
||||
npm run unit
|
||||
|
||||
# run e2e tests
|
||||
npm run e2e
|
||||
|
||||
# run all tests
|
||||
npm test
|
||||
```
|
||||
|
||||
For detailed explanation on how things work, checkout the [guide](http://vuejs-templates.github.io/webpack/) and [docs for vue-loader](http://vuejs.github.io/vue-loader).
|
||||
@@ -0,0 +1,35 @@
|
||||
require('./check-versions')()
|
||||
|
||||
process.env.NODE_ENV = 'production'
|
||||
|
||||
var ora = require('ora')
|
||||
var rm = require('rimraf')
|
||||
var path = require('path')
|
||||
var chalk = require('chalk')
|
||||
var webpack = require('webpack')
|
||||
var config = require('../config')
|
||||
var webpackConfig = require('./webpack.prod.conf')
|
||||
|
||||
var spinner = ora('building for production...')
|
||||
spinner.start()
|
||||
|
||||
rm(path.join(config.build.assetsRoot, config.build.assetsSubDirectory), err => {
|
||||
if (err) throw err
|
||||
webpack(webpackConfig, function (err, stats) {
|
||||
spinner.stop()
|
||||
if (err) throw err
|
||||
process.stdout.write(stats.toString({
|
||||
colors: true,
|
||||
modules: false,
|
||||
children: false,
|
||||
chunks: false,
|
||||
chunkModules: false
|
||||
}) + '\n\n')
|
||||
|
||||
console.log(chalk.cyan(' Build complete.\n'))
|
||||
console.log(chalk.yellow(
|
||||
' Tip: built files are meant to be served over an HTTP server.\n' +
|
||||
' Opening index.html over file:// won\'t work.\n'
|
||||
))
|
||||
})
|
||||
})
|
||||
@@ -0,0 +1,48 @@
|
||||
var chalk = require('chalk')
|
||||
var semver = require('semver')
|
||||
var packageConfig = require('../package.json')
|
||||
var shell = require('shelljs')
|
||||
function exec (cmd) {
|
||||
return require('child_process').execSync(cmd).toString().trim()
|
||||
}
|
||||
|
||||
var versionRequirements = [
|
||||
{
|
||||
name: 'node',
|
||||
currentVersion: semver.clean(process.version),
|
||||
versionRequirement: packageConfig.engines.node
|
||||
},
|
||||
]
|
||||
|
||||
if (shell.which('npm')) {
|
||||
versionRequirements.push({
|
||||
name: 'npm',
|
||||
currentVersion: exec('npm --version'),
|
||||
versionRequirement: packageConfig.engines.npm
|
||||
})
|
||||
}
|
||||
|
||||
module.exports = function () {
|
||||
var warnings = []
|
||||
for (var i = 0; i < versionRequirements.length; i++) {
|
||||
var mod = versionRequirements[i]
|
||||
if (!semver.satisfies(mod.currentVersion, mod.versionRequirement)) {
|
||||
warnings.push(mod.name + ': ' +
|
||||
chalk.red(mod.currentVersion) + ' should be ' +
|
||||
chalk.green(mod.versionRequirement)
|
||||
)
|
||||
}
|
||||
}
|
||||
|
||||
if (warnings.length) {
|
||||
console.log('')
|
||||
console.log(chalk.yellow('To use this template, you must update following to modules:'))
|
||||
console.log()
|
||||
for (var i = 0; i < warnings.length; i++) {
|
||||
var warning = warnings[i]
|
||||
console.log(' ' + warning)
|
||||
}
|
||||
console.log()
|
||||
process.exit(1)
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,9 @@
|
||||
/* eslint-disable */
|
||||
require('eventsource-polyfill')
|
||||
var hotClient = require('webpack-hot-middleware/client?noInfo=true&reload=true')
|
||||
|
||||
hotClient.subscribe(function (event) {
|
||||
if (event.action === 'reload') {
|
||||
window.location.reload()
|
||||
}
|
||||
})
|
||||
@@ -0,0 +1,91 @@
|
||||
require('./check-versions')()
|
||||
|
||||
var config = require('../config')
|
||||
if (!process.env.NODE_ENV) {
|
||||
process.env.NODE_ENV = JSON.parse(config.dev.env.NODE_ENV)
|
||||
}
|
||||
|
||||
var opn = require('opn')
|
||||
var path = require('path')
|
||||
var express = require('express')
|
||||
var webpack = require('webpack')
|
||||
var proxyMiddleware = require('http-proxy-middleware')
|
||||
var webpackConfig = process.env.NODE_ENV === 'testing'
|
||||
? require('./webpack.prod.conf')
|
||||
: require('./webpack.dev.conf')
|
||||
|
||||
// default port where dev server listens for incoming traffic
|
||||
var port = process.env.PORT || config.dev.port
|
||||
// automatically open browser, if not set will be false
|
||||
var autoOpenBrowser = !!config.dev.autoOpenBrowser
|
||||
// Define HTTP proxies to your custom API backend
|
||||
// https://github.com/chimurai/http-proxy-middleware
|
||||
var proxyTable = config.dev.proxyTable
|
||||
|
||||
var app = express()
|
||||
var compiler = webpack(webpackConfig)
|
||||
|
||||
var devMiddleware = require('webpack-dev-middleware')(compiler, {
|
||||
publicPath: webpackConfig.output.publicPath,
|
||||
quiet: true
|
||||
})
|
||||
|
||||
var hotMiddleware = require('webpack-hot-middleware')(compiler, {
|
||||
log: () => {}
|
||||
})
|
||||
// force page reload when html-webpack-plugin template changes
|
||||
compiler.plugin('compilation', function (compilation) {
|
||||
compilation.plugin('html-webpack-plugin-after-emit', function (data, cb) {
|
||||
hotMiddleware.publish({ action: 'reload' })
|
||||
cb()
|
||||
})
|
||||
})
|
||||
|
||||
// proxy api requests
|
||||
Object.keys(proxyTable).forEach(function (context) {
|
||||
var options = proxyTable[context]
|
||||
if (typeof options === 'string') {
|
||||
options = { target: options }
|
||||
}
|
||||
app.use(proxyMiddleware(options.filter || context, options))
|
||||
})
|
||||
|
||||
// handle fallback for HTML5 history API
|
||||
app.use(require('connect-history-api-fallback')())
|
||||
|
||||
// serve webpack bundle output
|
||||
app.use(devMiddleware)
|
||||
|
||||
// enable hot-reload and state-preserving
|
||||
// compilation error display
|
||||
app.use(hotMiddleware)
|
||||
|
||||
// serve pure static assets
|
||||
var staticPath = path.posix.join(config.dev.assetsPublicPath, config.dev.assetsSubDirectory)
|
||||
app.use(staticPath, express.static('./static'))
|
||||
|
||||
var uri = 'http://localhost:' + port
|
||||
|
||||
var _resolve
|
||||
var readyPromise = new Promise(resolve => {
|
||||
_resolve = resolve
|
||||
})
|
||||
|
||||
console.log('> Starting dev server...')
|
||||
devMiddleware.waitUntilValid(() => {
|
||||
console.log('> Listening at ' + uri + '\n')
|
||||
// when env is testing, don't need open it
|
||||
if (autoOpenBrowser && process.env.NODE_ENV !== 'testing') {
|
||||
opn(uri)
|
||||
}
|
||||
_resolve()
|
||||
})
|
||||
|
||||
var server = app.listen(port)
|
||||
|
||||
module.exports = {
|
||||
ready: readyPromise,
|
||||
close: () => {
|
||||
server.close()
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,72 @@
|
||||
var path = require('path')
|
||||
var config = require('../config')
|
||||
var ExtractTextPlugin = require('extract-text-webpack-plugin')
|
||||
|
||||
exports.assetsPath = function (_path) {
|
||||
var assetsSubDirectory = process.env.NODE_ENV === 'production'
|
||||
? config.build.assetsSubDirectory
|
||||
: config.dev.assetsSubDirectory
|
||||
return path.posix.join(assetsSubDirectory, _path)
|
||||
}
|
||||
|
||||
exports.cssLoaders = function (options) {
|
||||
options = options || {}
|
||||
|
||||
var cssLoader = {
|
||||
loader: 'css-loader',
|
||||
options: {
|
||||
minimize: process.env.NODE_ENV === 'production',
|
||||
sourceMap: options.sourceMap,
|
||||
alias: { '../img': '../static/img' }
|
||||
}
|
||||
}
|
||||
|
||||
// generate loader string to be used with extract text plugin
|
||||
function generateLoaders (loader, loaderOptions) {
|
||||
var loaders = [cssLoader]
|
||||
if (loader) {
|
||||
loaders.push({
|
||||
loader: loader + '-loader',
|
||||
options: Object.assign({}, loaderOptions, {
|
||||
sourceMap: options.sourceMap
|
||||
})
|
||||
})
|
||||
}
|
||||
|
||||
// Extract CSS when that option is specified
|
||||
// (which is the case during production build)
|
||||
if (options.extract) {
|
||||
return ExtractTextPlugin.extract({
|
||||
use: loaders,
|
||||
fallback: 'vue-style-loader'
|
||||
})
|
||||
} else {
|
||||
return ['vue-style-loader'].concat(loaders)
|
||||
}
|
||||
}
|
||||
|
||||
// https://vue-loader.vuejs.org/en/configurations/extract-css.html
|
||||
return {
|
||||
css: generateLoaders(),
|
||||
postcss: generateLoaders(),
|
||||
less: generateLoaders('less'),
|
||||
sass: generateLoaders('sass', { indentedSyntax: true }),
|
||||
scss: generateLoaders('sass'),
|
||||
stylus: generateLoaders('stylus'),
|
||||
styl: generateLoaders('stylus')
|
||||
}
|
||||
}
|
||||
|
||||
// Generate loaders for standalone style files (outside of .vue)
|
||||
exports.styleLoaders = function (options) {
|
||||
var output = []
|
||||
var loaders = exports.cssLoaders(options)
|
||||
for (var extension in loaders) {
|
||||
var loader = loaders[extension]
|
||||
output.push({
|
||||
test: new RegExp('\\.' + extension + '$'),
|
||||
use: loader
|
||||
})
|
||||
}
|
||||
return output
|
||||
}
|
||||
@@ -0,0 +1,12 @@
|
||||
var utils = require('./utils')
|
||||
var config = require('../config')
|
||||
var isProduction = process.env.NODE_ENV === 'production'
|
||||
|
||||
module.exports = {
|
||||
loaders: utils.cssLoaders({
|
||||
sourceMap: isProduction
|
||||
? config.build.productionSourceMap
|
||||
: config.dev.cssSourceMap,
|
||||
extract: isProduction
|
||||
})
|
||||
}
|
||||
@@ -0,0 +1,76 @@
|
||||
var path = require('path')
|
||||
var utils = require('./utils')
|
||||
var config = require('../config')
|
||||
var vueLoaderConfig = require('./vue-loader.conf')
|
||||
|
||||
function resolve (dir) {
|
||||
return path.join(__dirname, '..', dir)
|
||||
}
|
||||
|
||||
module.exports = {
|
||||
entry: {
|
||||
app: './src/main.js'
|
||||
},
|
||||
output: {
|
||||
path: config.build.assetsRoot,
|
||||
filename: '[name].js',
|
||||
publicPath: process.env.NODE_ENV === 'production'
|
||||
? config.build.assetsPublicPath
|
||||
: config.dev.assetsPublicPath
|
||||
},
|
||||
resolve: {
|
||||
extensions: ['.js', '.vue', '.json'],
|
||||
alias: {
|
||||
'vue$': 'vue/dist/vue.esm.js',
|
||||
'@': resolve('src')
|
||||
}
|
||||
},
|
||||
module: {
|
||||
rules: [
|
||||
{
|
||||
test: /\.(js|vue)$/,
|
||||
loader: 'eslint-loader',
|
||||
enforce: 'pre',
|
||||
include: [resolve('src'), resolve('test')],
|
||||
options: {
|
||||
formatter: require('eslint-friendly-formatter')
|
||||
}
|
||||
},
|
||||
{
|
||||
test: /\.vue$/,
|
||||
loader: 'vue-loader',
|
||||
options: vueLoaderConfig
|
||||
},
|
||||
{
|
||||
test: /\.js$/,
|
||||
loader: 'babel-loader',
|
||||
include: [resolve('src'), resolve('test')]
|
||||
},
|
||||
{
|
||||
test: /\.(png|jpe?g|gif|svg)(\?.*)?$/,
|
||||
exclude: [/fonts/],
|
||||
use: {
|
||||
loader: 'file-loader',
|
||||
options: {
|
||||
name: '[name].[hash:7].[ext]',
|
||||
publicPath: '../../',
|
||||
outputPath: utils.assetsPath('img/'),
|
||||
emitFile: true
|
||||
}
|
||||
}
|
||||
},
|
||||
{
|
||||
test: /\.(woff2?|ttf|eot|svg)(\?v=\d+\.\d+\.\d+)?$/,
|
||||
exclude: [/flags/],
|
||||
use: {
|
||||
loader: 'file-loader',
|
||||
options: {
|
||||
name: '[name].[hash:7].[ext]',
|
||||
publicPath: '../../',
|
||||
outputPath: utils.assetsPath('fonts/')
|
||||
}
|
||||
}
|
||||
}
|
||||
]
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,45 @@
|
||||
var path = require('path')
|
||||
var utils = require('./utils')
|
||||
var webpack = require('webpack')
|
||||
var config = require('../config')
|
||||
var merge = require('webpack-merge')
|
||||
var baseWebpackConfig = require('./webpack.base.conf')
|
||||
var CopyWebpackPlugin = require('copy-webpack-plugin')
|
||||
var HtmlWebpackPlugin = require('html-webpack-plugin')
|
||||
var FriendlyErrorsPlugin = require('friendly-errors-webpack-plugin')
|
||||
|
||||
// add hot-reload related code to entry chunks
|
||||
Object.keys(baseWebpackConfig.entry).forEach(function (name) {
|
||||
baseWebpackConfig.entry[name] = ['./build/dev-client'].concat(baseWebpackConfig.entry[name])
|
||||
})
|
||||
|
||||
module.exports = merge(baseWebpackConfig, {
|
||||
module: {
|
||||
rules: utils.styleLoaders({ sourceMap: config.dev.cssSourceMap })
|
||||
},
|
||||
// cheap-module-eval-source-map is faster for development
|
||||
devtool: '#cheap-module-eval-source-map',
|
||||
plugins: [
|
||||
new webpack.DefinePlugin({
|
||||
'process.env': config.dev.env
|
||||
}),
|
||||
// https://github.com/glenjamin/webpack-hot-middleware#installation--usage
|
||||
new webpack.HotModuleReplacementPlugin(),
|
||||
new webpack.NoEmitOnErrorsPlugin(),
|
||||
// https://github.com/ampedandwired/html-webpack-plugin
|
||||
new HtmlWebpackPlugin({
|
||||
filename: 'index.html',
|
||||
template: 'index.html',
|
||||
inject: true
|
||||
}),
|
||||
new FriendlyErrorsPlugin(),
|
||||
// copy custom static assets
|
||||
new CopyWebpackPlugin([
|
||||
{
|
||||
from: path.resolve(__dirname, '../static'),
|
||||
to: config.build.assetsSubDirectory,
|
||||
ignore: ['.*']
|
||||
}
|
||||
])
|
||||
]
|
||||
})
|
||||
@@ -0,0 +1,124 @@
|
||||
var path = require('path')
|
||||
var utils = require('./utils')
|
||||
var webpack = require('webpack')
|
||||
var config = require('../config')
|
||||
var merge = require('webpack-merge')
|
||||
var baseWebpackConfig = require('./webpack.base.conf')
|
||||
var CopyWebpackPlugin = require('copy-webpack-plugin')
|
||||
var HtmlWebpackPlugin = require('html-webpack-plugin')
|
||||
var ExtractTextPlugin = require('extract-text-webpack-plugin')
|
||||
var OptimizeCSSPlugin = require('optimize-css-assets-webpack-plugin')
|
||||
|
||||
var env = process.env.NODE_ENV === 'testing'
|
||||
? require('../config/test.env')
|
||||
: config.build.env
|
||||
|
||||
var webpackConfig = merge(baseWebpackConfig, {
|
||||
module: {
|
||||
rules: utils.styleLoaders({
|
||||
sourceMap: config.build.productionSourceMap,
|
||||
extract: true
|
||||
})
|
||||
},
|
||||
devtool: config.build.productionSourceMap ? '#source-map' : false,
|
||||
output: {
|
||||
path: config.build.assetsRoot,
|
||||
filename: utils.assetsPath('js/[name].[chunkhash].js'),
|
||||
chunkFilename: utils.assetsPath('js/[id].[chunkhash].js')
|
||||
},
|
||||
plugins: [
|
||||
// http://vuejs.github.io/vue-loader/en/workflow/production.html
|
||||
new webpack.DefinePlugin({
|
||||
'process.env': env
|
||||
}),
|
||||
new webpack.optimize.UglifyJsPlugin({
|
||||
compress: {
|
||||
warnings: false
|
||||
},
|
||||
sourceMap: true
|
||||
}),
|
||||
// extract css into its own file
|
||||
new ExtractTextPlugin({
|
||||
filename: utils.assetsPath('css/[name].[contenthash].css')
|
||||
}),
|
||||
// Compress extracted CSS. We are using this plugin so that possible
|
||||
// duplicated CSS from different components can be deduped.
|
||||
new OptimizeCSSPlugin({
|
||||
cssProcessorOptions: {
|
||||
safe: true
|
||||
}
|
||||
}),
|
||||
// generate dist index.html with correct asset hash for caching.
|
||||
// you can customize output by editing /index.html
|
||||
// see https://github.com/ampedandwired/html-webpack-plugin
|
||||
new HtmlWebpackPlugin({
|
||||
filename: process.env.NODE_ENV === 'testing'
|
||||
? 'index.html'
|
||||
: config.build.index,
|
||||
template: 'index.html',
|
||||
inject: true,
|
||||
minify: {
|
||||
removeComments: true,
|
||||
collapseWhitespace: true,
|
||||
removeAttributeQuotes: true
|
||||
// more options:
|
||||
// https://github.com/kangax/html-minifier#options-quick-reference
|
||||
},
|
||||
// necessary to consistently work with multiple chunks via CommonsChunkPlugin
|
||||
chunksSortMode: 'dependency'
|
||||
}),
|
||||
// split vendor js into its own file
|
||||
new webpack.optimize.CommonsChunkPlugin({
|
||||
name: 'vendor',
|
||||
minChunks: function (module, count) {
|
||||
// any required modules inside node_modules are extracted to vendor
|
||||
return (
|
||||
module.resource &&
|
||||
/\.js$/.test(module.resource) &&
|
||||
module.resource.indexOf(
|
||||
path.join(__dirname, '../node_modules')
|
||||
) === 0
|
||||
)
|
||||
}
|
||||
}),
|
||||
// extract webpack runtime and module manifest to its own file in order to
|
||||
// prevent vendor hash from being updated whenever app bundle is updated
|
||||
new webpack.optimize.CommonsChunkPlugin({
|
||||
name: 'manifest',
|
||||
chunks: ['vendor']
|
||||
}),
|
||||
// copy custom static assets
|
||||
new CopyWebpackPlugin([
|
||||
{
|
||||
from: path.resolve(__dirname, '../static'),
|
||||
to: config.build.assetsSubDirectory,
|
||||
ignore: ['.*']
|
||||
}
|
||||
])
|
||||
]
|
||||
})
|
||||
|
||||
if (config.build.productionGzip) {
|
||||
var CompressionWebpackPlugin = require('compression-webpack-plugin')
|
||||
|
||||
webpackConfig.plugins.push(
|
||||
new CompressionWebpackPlugin({
|
||||
asset: '[path].gz[query]',
|
||||
algorithm: 'gzip',
|
||||
test: new RegExp(
|
||||
'\\.(' +
|
||||
config.build.productionGzipExtensions.join('|') +
|
||||
')$'
|
||||
),
|
||||
threshold: 10240,
|
||||
minRatio: 0.8
|
||||
})
|
||||
)
|
||||
}
|
||||
|
||||
if (config.build.bundleAnalyzerReport) {
|
||||
var BundleAnalyzerPlugin = require('webpack-bundle-analyzer').BundleAnalyzerPlugin
|
||||
webpackConfig.plugins.push(new BundleAnalyzerPlugin())
|
||||
}
|
||||
|
||||
module.exports = webpackConfig
|
||||
@@ -0,0 +1,31 @@
|
||||
// This is the webpack config used for unit tests.
|
||||
|
||||
var utils = require('./utils')
|
||||
var webpack = require('webpack')
|
||||
var merge = require('webpack-merge')
|
||||
var baseConfig = require('./webpack.base.conf')
|
||||
|
||||
var webpackConfig = merge(baseConfig, {
|
||||
// use inline sourcemap for karma-sourcemap-loader
|
||||
module: {
|
||||
rules: utils.styleLoaders()
|
||||
},
|
||||
devtool: '#inline-source-map',
|
||||
resolveLoader: {
|
||||
alias: {
|
||||
// necessary to to make lang="scss" work in test when using vue-loader's ?inject option
|
||||
// see discussion at https://github.com/vuejs/vue-loader/issues/724
|
||||
'scss-loader': 'sass-loader'
|
||||
}
|
||||
},
|
||||
plugins: [
|
||||
new webpack.DefinePlugin({
|
||||
'process.env': require('../config/test.env')
|
||||
})
|
||||
]
|
||||
})
|
||||
|
||||
// no need for app entry during tests
|
||||
delete webpackConfig.entry
|
||||
|
||||
module.exports = webpackConfig
|
||||
@@ -0,0 +1,6 @@
|
||||
var merge = require('webpack-merge')
|
||||
var prodEnv = require('./prod.env')
|
||||
|
||||
module.exports = merge(prodEnv, {
|
||||
NODE_ENV: '"development"'
|
||||
})
|
||||
@@ -0,0 +1,38 @@
|
||||
// see http://vuejs-templates.github.io/webpack for documentation.
|
||||
var path = require('path')
|
||||
|
||||
module.exports = {
|
||||
build: {
|
||||
env: require('./prod.env'),
|
||||
index: path.resolve(__dirname, '../dist/index.html'),
|
||||
assetsRoot: path.resolve(__dirname, '../dist'),
|
||||
assetsSubDirectory: 'static',
|
||||
assetsPublicPath: './',
|
||||
productionSourceMap: true,
|
||||
// Gzip off by default as many popular static hosts such as
|
||||
// Surge or Netlify already gzip all static assets for you.
|
||||
// Before setting to `true`, make sure to:
|
||||
// npm install --save-dev compression-webpack-plugin
|
||||
productionGzip: false,
|
||||
productionGzipExtensions: ['js', 'css'],
|
||||
// Run the build command with an extra argument to
|
||||
// View the bundle analyzer report after build finishes:
|
||||
// `npm run build --report`
|
||||
// Set to `true` or `false` to always turn it on or off
|
||||
bundleAnalyzerReport: process.env.npm_config_report
|
||||
},
|
||||
dev: {
|
||||
env: require('./dev.env'),
|
||||
port: 8080,
|
||||
autoOpenBrowser: true,
|
||||
assetsSubDirectory: 'static',
|
||||
assetsPublicPath: '',
|
||||
proxyTable: {},
|
||||
// CSS Sourcemaps off by default because relative paths are "buggy"
|
||||
// with this option, according to the CSS-Loader README
|
||||
// (https://github.com/webpack/css-loader#sourcemaps)
|
||||
// In our experience, they generally work as expected,
|
||||
// just be aware of this issue when enabling this option.
|
||||
cssSourceMap: false
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,3 @@
|
||||
module.exports = {
|
||||
NODE_ENV: '"production"'
|
||||
}
|
||||
@@ -0,0 +1,6 @@
|
||||
var merge = require('webpack-merge')
|
||||
var devEnv = require('./dev.env')
|
||||
|
||||
module.exports = merge(devEnv, {
|
||||
NODE_ENV: '"testing"'
|
||||
})
|
||||
@@ -0,0 +1,42 @@
|
||||
<!DOCTYPE html>
|
||||
<html>
|
||||
<head>
|
||||
<meta charset="utf-8">
|
||||
<meta http-equiv="X-UA-Compatible" content="IE=edge">
|
||||
<meta name="viewport" content="width=device-width, initial-scale=1, shrink-to-fit=no">
|
||||
<title>CoreUI - Open Source Bootstrap Admin Template</title>
|
||||
</head>
|
||||
|
||||
<!-- BODY options, add following classes to body to change options
|
||||
|
||||
// Header options
|
||||
1. '.header-fixed' - Fixed Header
|
||||
|
||||
// Brand options
|
||||
1. '.brand-minimized' - Minimized brand (Only symbol)
|
||||
|
||||
// Sidebar options
|
||||
1. '.sidebar-fixed' - Fixed Sidebar
|
||||
2. '.sidebar-hidden' - Hidden Sidebar
|
||||
3. '.sidebar-off-canvas' - Off Canvas Sidebar
|
||||
4. '.sidebar-minimized' - Minimized Sidebar (Only icons)
|
||||
5. '.sidebar-compact' - Compact Sidebar
|
||||
|
||||
// Aside options
|
||||
1. '.aside-menu-fixed' - Fixed Aside Menu
|
||||
2. '.aside-menu-hidden' - Hidden Aside Menu
|
||||
3. '.aside-menu-off-canvas' - Off Canvas Aside Menu
|
||||
|
||||
// Breadcrumb options
|
||||
1. '.breadcrumb-fixed' - Fixed Breadcrumb
|
||||
|
||||
// Footer options
|
||||
1. '.footer-fixed' - Fixed footer
|
||||
|
||||
-->
|
||||
|
||||
<body class="app header-fixed sidebar-fixed aside-menu-fixed aside-menu-hidden">
|
||||
<div id="app"></div>
|
||||
<!-- built files will be auto injected -->
|
||||
</body>
|
||||
</html>
|
||||
@@ -0,0 +1,103 @@
|
||||
{
|
||||
"name": "@coreui/vue",
|
||||
"version": "1.0.10",
|
||||
"description": "Open Source Bootstrap Admin Template",
|
||||
"author": "Łukasz Holeczek",
|
||||
"homepage": "http://coreui.io",
|
||||
"copyright": "Copyright 2018 creativeLabs Łukasz Holeczek",
|
||||
"license": "MIT",
|
||||
"private": true,
|
||||
"scripts": {
|
||||
"dev": "node build/dev-server.js",
|
||||
"start": "node build/dev-server.js",
|
||||
"build": "node build/build.js",
|
||||
"unit": "cross-env BABEL_ENV=test karma start test/unit/karma.conf.js --single-run",
|
||||
"e2e": "node test/e2e/runner.js",
|
||||
"test": "npm run unit && npm run e2e",
|
||||
"lint": "eslint --ext .js,.vue src test/unit/specs test/e2e/specs"
|
||||
},
|
||||
"dependencies": {
|
||||
"bootstrap": "4.0.0",
|
||||
"bootstrap-vue": "2.0.0-rc.1",
|
||||
"chart.js": "2.7.1",
|
||||
"flag-icon-css": "2.9.0",
|
||||
"font-awesome": "^4.7.0",
|
||||
"simple-line-icons": "^2.4.1",
|
||||
"vue": "2.5.13",
|
||||
"vue-chartjs": "3.1.0",
|
||||
"vue-router": "3.0.1"
|
||||
},
|
||||
"devDependencies": {
|
||||
"autoprefixer": "7.2.5",
|
||||
"babel-core": "6.26.0",
|
||||
"babel-eslint": "8.2.1",
|
||||
"babel-loader": "7.1.2",
|
||||
"babel-plugin-transform-runtime": "6.23.0",
|
||||
"babel-preset-env": "1.6.1",
|
||||
"babel-preset-stage-2": "6.24.1",
|
||||
"babel-register": "6.26.0",
|
||||
"chalk": "2.3.0",
|
||||
"connect-history-api-fallback": "1.5.0",
|
||||
"copy-webpack-plugin": "4.3.1",
|
||||
"css-loader": "0.28.9",
|
||||
"eslint": "4.16.0",
|
||||
"eslint-friendly-formatter": "3.0.0",
|
||||
"eslint-loader": "1.9.0",
|
||||
"eslint-plugin-html": "4.0.2",
|
||||
"eslint-plugin-import": "2.8.0",
|
||||
"eslint-plugin-node": "5.2.1",
|
||||
"eslint-config-standard": "11.0.0-beta.0",
|
||||
"eslint-plugin-promise": "3.6.0",
|
||||
"eslint-plugin-standard": "3.0.1",
|
||||
"eventsource-polyfill": "0.9.6",
|
||||
"express": "4.16.2",
|
||||
"extract-text-webpack-plugin": "3.0.2",
|
||||
"file-loader": "1.1.6",
|
||||
"friendly-errors-webpack-plugin": "1.6.1",
|
||||
"html-webpack-plugin": "2.30.1",
|
||||
"http-proxy-middleware": "0.17.4",
|
||||
"cross-env": "5.1.3",
|
||||
"karma": "2.0.0",
|
||||
"karma-coverage": "1.1.1",
|
||||
"karma-mocha": "1.3.0",
|
||||
"karma-phantomjs-launcher": "1.0.4",
|
||||
"karma-phantomjs-shim": "1.5.0",
|
||||
"karma-sinon-chai": "1.3.3",
|
||||
"karma-sourcemap-loader": "0.3.7",
|
||||
"karma-spec-reporter": "0.0.32",
|
||||
"karma-webpack": "2.0.9",
|
||||
"lolex": "2.3.2",
|
||||
"mocha": "5.0.0",
|
||||
"chai": "4.1.2",
|
||||
"sinon": "4.2.2",
|
||||
"sinon-chai": "2.14.0",
|
||||
"inject-loader": "3.0.1",
|
||||
"babel-plugin-istanbul": "4.1.5",
|
||||
"phantomjs-prebuilt": "^2.1.16",
|
||||
"chromedriver": "2.35.0",
|
||||
"cross-spawn": "6.0.4",
|
||||
"nightwatch": "0.9.19",
|
||||
"node-sass": "4.7.2",
|
||||
"sass-loader": "6.0.6",
|
||||
"selenium-server": "3.8.1",
|
||||
"semver": "5.5.0",
|
||||
"shelljs": "0.8.1",
|
||||
"opn": "5.2.0",
|
||||
"optimize-css-assets-webpack-plugin": "3.2.0",
|
||||
"ora": "1.4.0",
|
||||
"rimraf": "2.6.2",
|
||||
"url-loader": "0.6.2",
|
||||
"vue-loader": "14.1.1",
|
||||
"vue-style-loader": "3.1.2",
|
||||
"vue-template-compiler": "2.5.13",
|
||||
"webpack": "3.10.0",
|
||||
"webpack-bundle-analyzer": "2.10.0",
|
||||
"webpack-dev-middleware": "2.0.4",
|
||||
"webpack-hot-middleware": "2.21.0",
|
||||
"webpack-merge": "4.1.1"
|
||||
},
|
||||
"engines": {
|
||||
"node": ">= 8.9.4",
|
||||
"npm": ">= 5.6.0"
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,130 @@
|
||||
// Bootstrap overrides
|
||||
|
||||
//
|
||||
// Color system
|
||||
//
|
||||
|
||||
$white: #fff;
|
||||
$gray-100: #f0f3f5;
|
||||
$gray-200: #c2cfd6;
|
||||
$gray-300: #a4b7c1;
|
||||
$gray-400: #869fac;
|
||||
$gray-500: #678898;
|
||||
$gray-600: #536c79;
|
||||
$gray-700: #3e515b;
|
||||
$gray-800: #29363d;
|
||||
$gray-900: #151b1e;
|
||||
$black: #000 !default;
|
||||
|
||||
$blue: #20a8d8;
|
||||
$indigo: #6610f2 !default;
|
||||
$purple: #6f42c1 !default;
|
||||
$pink: #e83e8c !default;
|
||||
$red: #f86c6b;
|
||||
$orange: #f8cb00;
|
||||
$yellow: #ffc107 !default;
|
||||
$green: #4dbd74;
|
||||
$teal: #20c997 !default;
|
||||
$cyan: #63c2de;
|
||||
|
||||
$colors: (
|
||||
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
|
||||
);
|
||||
|
||||
$theme-colors: (
|
||||
primary: $blue,
|
||||
secondary: $gray-300,
|
||||
success: $green,
|
||||
info: $cyan,
|
||||
warning: $yellow,
|
||||
danger: $red,
|
||||
light: $gray-100,
|
||||
dark: $gray-800,
|
||||
|
||||
blue: $blue,
|
||||
indigo: $indigo,
|
||||
purple: $purple,
|
||||
pink: $pink,
|
||||
red: $red,
|
||||
orange: $orange,
|
||||
yellow: $yellow,
|
||||
green: $green,
|
||||
teal: $teal,
|
||||
cyan: $cyan,
|
||||
|
||||
gray-100: $gray-100,
|
||||
gray-200: $gray-200,
|
||||
gray-300: $gray-300,
|
||||
gray-400: $gray-400,
|
||||
gray-500: $gray-500,
|
||||
gray-600: $gray-600,
|
||||
gray-700: $gray-700,
|
||||
gray-800: $gray-800,
|
||||
gray-900: $gray-900
|
||||
);
|
||||
|
||||
// Options
|
||||
//
|
||||
// Quickly modify global styling by enabling or disabling optional features.
|
||||
|
||||
$enable-transitions: true;
|
||||
$enable-rounded: false;
|
||||
|
||||
// Body
|
||||
//
|
||||
// Settings for the `<body>` element.
|
||||
|
||||
$body-bg: #e4e5e6;
|
||||
|
||||
// Typography
|
||||
//
|
||||
// Font, line-height, and color for body text, headings, and more.
|
||||
|
||||
$font-size-base: 0.875rem;
|
||||
|
||||
// Breadcrumbs
|
||||
|
||||
$breadcrumb-bg: #fff;
|
||||
$breadcrumb-margin-bottom: 1.5rem;
|
||||
|
||||
// Cards
|
||||
|
||||
$card-border-color: $gray-200;
|
||||
$card-cap-bg: $gray-100;
|
||||
|
||||
// Dropdowns
|
||||
|
||||
$dropdown-padding-y: 0;
|
||||
$dropdown-border-color: $gray-200;
|
||||
$dropdown-divider-bg: $gray-100;
|
||||
|
||||
// Buttons
|
||||
|
||||
$btn-secondary-border: $gray-300;
|
||||
|
||||
// Progress bars
|
||||
|
||||
$progress-bg: $gray-100;
|
||||
|
||||
// Tables
|
||||
|
||||
$table-bg-accent: $gray-100;
|
||||
$table-bg-hover: $gray-100;
|
||||
|
||||
// Forms
|
||||
|
||||
$input-group-addon-bg: $gray-100;
|
||||
$input-border-color: $gray-200;
|
||||
$input-group-addon-border-color: $gray-200;
|
||||
@@ -0,0 +1 @@
|
||||
// core overrides
|
||||
@@ -0,0 +1 @@
|
||||
// Here you can add other styles
|
||||
@@ -0,0 +1,27 @@
|
||||
// scss-lint:disable all
|
||||
.animated {
|
||||
animation-duration: 1s;
|
||||
// animation-fill-mode: both;
|
||||
}
|
||||
|
||||
.animated.infinite {
|
||||
animation-iteration-count: infinite;
|
||||
}
|
||||
|
||||
.animated.hinge {
|
||||
animation-duration: 2s;
|
||||
}
|
||||
|
||||
@keyframes fadeIn {
|
||||
from {
|
||||
opacity: 0;
|
||||
}
|
||||
|
||||
to {
|
||||
opacity: 1;
|
||||
}
|
||||
}
|
||||
|
||||
.fadeIn {
|
||||
animation-name: fadeIn;
|
||||
}
|
||||
@@ -0,0 +1,64 @@
|
||||
.aside-menu {
|
||||
z-index: $zindex-sticky - 1;
|
||||
width: $aside-menu-width;
|
||||
color: $aside-menu-color;
|
||||
background: $aside-menu-bg;
|
||||
@include borders($aside-menu-borders);
|
||||
|
||||
.nav-tabs {
|
||||
border-color: $border-color;
|
||||
.nav-link {
|
||||
padding: $aside-menu-nav-padding-y $aside-menu-nav-padding-x;
|
||||
color: $body-color;
|
||||
border-top: 0;
|
||||
&.active {
|
||||
color: theme-color("primary");
|
||||
border-right-color: $border-color;
|
||||
border-left-color: $border-color;
|
||||
}
|
||||
}
|
||||
.nav-item:first-child {
|
||||
.nav-link {
|
||||
border-left: 0;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
.tab-content {
|
||||
position: relative;
|
||||
overflow-x: hidden;
|
||||
overflow-y: auto;
|
||||
border: 0;
|
||||
border-top: 1px solid $border-color;
|
||||
-ms-overflow-style: -ms-autohiding-scrollbar;
|
||||
|
||||
&::-webkit-scrollbar {
|
||||
width: 10px;
|
||||
margin-left: -10px;
|
||||
-webkit-appearance: none;
|
||||
}
|
||||
|
||||
// &::-webkit-scrollbar-button { }
|
||||
|
||||
&::-webkit-scrollbar-track {
|
||||
background-color: lighten($aside-menu-bg, 5%);
|
||||
border-right: 1px solid darken($aside-menu-bg, 5%);
|
||||
border-left: 1px solid darken($aside-menu-bg, 5%);
|
||||
}
|
||||
|
||||
// &::-webkit-scrollbar-track-piece { }
|
||||
|
||||
&::-webkit-scrollbar-thumb {
|
||||
height: 50px;
|
||||
background-color: darken($aside-menu-bg, 10%);
|
||||
background-clip: content-box;
|
||||
border-color: transparent;
|
||||
border-style: solid;
|
||||
border-width: 1px 2px;
|
||||
}
|
||||
|
||||
.tab-pane {
|
||||
padding: 0;
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,51 @@
|
||||
.img-avatar {
|
||||
border-radius: 50em;
|
||||
}
|
||||
|
||||
.avatar {
|
||||
$width: 36px;
|
||||
$status-width: 10px;
|
||||
@include avatar($width,$status-width);
|
||||
}
|
||||
|
||||
.avatar.avatar-xs {
|
||||
$width: 20px;
|
||||
$status-width: 8px;
|
||||
@include avatar($width,$status-width);
|
||||
}
|
||||
|
||||
.avatar.avatar-sm {
|
||||
$width: 24px;
|
||||
$status-width: 8px;
|
||||
@include avatar($width,$status-width);
|
||||
}
|
||||
|
||||
.avatar.avatar-lg {
|
||||
$width: 72px;
|
||||
$status-width: 12px;
|
||||
@include avatar($width,$status-width);
|
||||
}
|
||||
|
||||
.avatars-stack {
|
||||
.avatar.avatar-xs {
|
||||
margin-right: -10px;
|
||||
}
|
||||
|
||||
// .avatar.avatar-sm {
|
||||
//
|
||||
// }
|
||||
|
||||
.avatar {
|
||||
margin-right: -15px;
|
||||
transition: margin-left $layout-transition-speed, margin-right $layout-transition-speed;
|
||||
|
||||
&:hover {
|
||||
margin-right: 0 !important;
|
||||
}
|
||||
}
|
||||
|
||||
// .avatar.avatar-lg {
|
||||
//
|
||||
// }
|
||||
|
||||
}
|
||||
@@ -0,0 +1,3 @@
|
||||
.badge-pill {
|
||||
border-radius: $badge-pill-border-radius;
|
||||
}
|
||||
@@ -0,0 +1,35 @@
|
||||
.breadcrumb-menu {
|
||||
margin-left: auto;
|
||||
|
||||
&::before {
|
||||
display: none;
|
||||
}
|
||||
|
||||
.btn-group {
|
||||
vertical-align: top;
|
||||
}
|
||||
|
||||
.btn {
|
||||
padding: 0 $input-btn-padding-x;
|
||||
color: $text-muted;
|
||||
vertical-align: top;
|
||||
border: 0;
|
||||
|
||||
&:hover, &.active {
|
||||
color: $body-color;
|
||||
background: transparent;
|
||||
}
|
||||
}
|
||||
|
||||
.open {
|
||||
.btn {
|
||||
color: $body-color;
|
||||
background: transparent;
|
||||
}
|
||||
}
|
||||
|
||||
.dropdown-menu {
|
||||
min-width: 180px;
|
||||
line-height: $line-height-base;
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,4 @@
|
||||
.breadcrumb {
|
||||
position: relative;
|
||||
@include borders($breadcrumb-borders);
|
||||
}
|
||||
@@ -0,0 +1,566 @@
|
||||
button {
|
||||
cursor: pointer;
|
||||
}
|
||||
|
||||
.btn-transparent {
|
||||
color: #fff;
|
||||
background-color: transparent;
|
||||
border-color: transparent;
|
||||
}
|
||||
|
||||
.btn {
|
||||
[class^="icon-"], [class*=" icon-"] {
|
||||
display: inline-block;
|
||||
margin-top: -2px;
|
||||
vertical-align: middle;
|
||||
}
|
||||
}
|
||||
|
||||
.btn-facebook,
|
||||
.btn-twitter,
|
||||
.btn-linkedin,
|
||||
.btn-flickr,
|
||||
.btn-tumblr,
|
||||
.btn-xing,
|
||||
.btn-github,
|
||||
.btn-html5,
|
||||
.btn-openid,
|
||||
.btn-stack-overflow,
|
||||
.btn-youtube,
|
||||
.btn-css3,
|
||||
.btn-dribbble,
|
||||
.btn-google-plus,
|
||||
.btn-instagram,
|
||||
.btn-pinterest,
|
||||
.btn-vk,
|
||||
.btn-yahoo,
|
||||
.btn-behance,
|
||||
.btn-dropbox,
|
||||
.btn-reddit,
|
||||
.btn-spotify,
|
||||
.btn-vine,
|
||||
.btn-foursquare,
|
||||
.btn-vimeo {
|
||||
position: relative;
|
||||
overflow: hidden;
|
||||
color: #fff !important;
|
||||
text-align: center;
|
||||
|
||||
&::before {
|
||||
position: absolute;
|
||||
top: 0;
|
||||
left: 0;
|
||||
display: block;
|
||||
font-family: "FontAwesome";
|
||||
font-style: normal;
|
||||
font-weight: normal;
|
||||
-moz-osx-font-smoothing: grayscale;
|
||||
-webkit-font-smoothing: antialiased;
|
||||
}
|
||||
|
||||
&:hover {
|
||||
color: #fff;
|
||||
}
|
||||
|
||||
&.icon {
|
||||
|
||||
span {
|
||||
display: none;
|
||||
}
|
||||
}
|
||||
|
||||
&.text {
|
||||
&::before {
|
||||
display: none;
|
||||
}
|
||||
|
||||
span {
|
||||
margin-left: 0 !important;
|
||||
}
|
||||
}
|
||||
@include button-social-size($input-btn-padding-y, $input-btn-padding-x, $font-size-base, $line-height-base, $btn-border-radius);
|
||||
|
||||
&.btn-lg {
|
||||
@include button-social-size($input-btn-padding-y-lg, $input-btn-padding-x-lg, $font-size-lg, $line-height-lg, $btn-border-radius-lg);
|
||||
}
|
||||
|
||||
&.btn-sm {
|
||||
@include button-social-size($input-btn-padding-y-sm, $input-btn-padding-x-sm, $font-size-sm, $line-height-sm, $btn-border-radius-sm);
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
.btn-facebook {
|
||||
$color: $facebook;
|
||||
|
||||
background: $color;
|
||||
&::before {
|
||||
content: "\f09a";
|
||||
background: darken($color, 5%);
|
||||
|
||||
}
|
||||
|
||||
&:hover {
|
||||
background: darken($color, 5%);
|
||||
|
||||
&::before {
|
||||
background: darken($color, 10%);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
.btn-twitter {
|
||||
$color: $twitter;
|
||||
|
||||
background: $color;
|
||||
&::before {
|
||||
content: "\f099";
|
||||
background: darken($color, 5%);
|
||||
|
||||
}
|
||||
|
||||
&:hover {
|
||||
background: darken($color, 5%);
|
||||
|
||||
&::before {
|
||||
background: darken($color, 10%);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
.btn-linkedin {
|
||||
$color: $linkedin;
|
||||
|
||||
background: $color;
|
||||
&::before {
|
||||
content: "\f0e1";
|
||||
background: darken($color, 5%);
|
||||
|
||||
}
|
||||
|
||||
&:hover {
|
||||
background: darken($color, 5%);
|
||||
|
||||
&::before {
|
||||
background: darken($color, 10%);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
.btn-flickr {
|
||||
$color: $flickr;
|
||||
|
||||
background: $color;
|
||||
&::before {
|
||||
content: "\f16e";
|
||||
background: darken($color, 5%);
|
||||
|
||||
}
|
||||
|
||||
&:hover {
|
||||
background: darken($color, 5%);
|
||||
|
||||
&::before {
|
||||
background: darken($color, 10%);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
.btn-tumblr {
|
||||
$color: $tumblr;
|
||||
|
||||
background: $color;
|
||||
&::before {
|
||||
content: "\f173";
|
||||
background: darken($color, 5%);
|
||||
|
||||
}
|
||||
|
||||
&:hover {
|
||||
background: darken($color, 5%);
|
||||
|
||||
&::before {
|
||||
background: darken($color, 10%);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
.btn-xing {
|
||||
$color: $xing;
|
||||
|
||||
background: $color;
|
||||
&::before {
|
||||
content: "\f168";
|
||||
background: darken($color, 5%);
|
||||
|
||||
}
|
||||
|
||||
&:hover {
|
||||
background: darken($color, 5%);
|
||||
|
||||
&::before {
|
||||
background: darken($color, 10%);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
.btn-github {
|
||||
$color: $github;
|
||||
|
||||
background: $color;
|
||||
&::before {
|
||||
content: "\f09b";
|
||||
background: darken($color, 5%);
|
||||
|
||||
}
|
||||
|
||||
&:hover {
|
||||
background: darken($color, 5%);
|
||||
|
||||
&::before {
|
||||
background: darken($color, 10%);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
.btn-html5 {
|
||||
$color: $html5;
|
||||
|
||||
background: $color;
|
||||
&::before {
|
||||
content: "\f13b";
|
||||
background: darken($color, 5%);
|
||||
|
||||
}
|
||||
|
||||
&:hover {
|
||||
background: darken($color, 5%);
|
||||
|
||||
&::before {
|
||||
background: darken($color, 10%);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
.btn-openid {
|
||||
$color: $openid;
|
||||
|
||||
background: $color;
|
||||
&::before {
|
||||
content: "\f19b";
|
||||
background: darken($color, 5%);
|
||||
|
||||
}
|
||||
|
||||
&:hover {
|
||||
background: darken($color, 5%);
|
||||
|
||||
&::before {
|
||||
background: darken($color, 10%);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
.btn-stack-overflow {
|
||||
$color: $stack-overflow;
|
||||
|
||||
background: $color;
|
||||
&::before {
|
||||
content: "\f16c";
|
||||
background: darken($color, 5%);
|
||||
|
||||
}
|
||||
|
||||
&:hover {
|
||||
background: darken($color, 5%);
|
||||
|
||||
&::before {
|
||||
background: darken($color, 10%);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
.btn-css3 {
|
||||
$color: $css3;
|
||||
|
||||
background: $color;
|
||||
&::before {
|
||||
content: "\f13c";
|
||||
background: darken($color, 5%);
|
||||
|
||||
}
|
||||
|
||||
&:hover {
|
||||
background: darken($color, 5%);
|
||||
|
||||
&::before {
|
||||
background: darken($color, 10%);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
.btn-youtube {
|
||||
$color: $youtube;
|
||||
|
||||
background: $color;
|
||||
&::before {
|
||||
content: "\f167";
|
||||
background: darken($color, 5%);
|
||||
|
||||
}
|
||||
|
||||
&:hover {
|
||||
background: darken($color, 5%);
|
||||
|
||||
&::before {
|
||||
background: darken($color, 10%);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
.btn-dribbble {
|
||||
$color: $dribbble;
|
||||
|
||||
background: $color;
|
||||
&::before {
|
||||
content: "\f17d";
|
||||
background: darken($color, 5%);
|
||||
|
||||
}
|
||||
|
||||
&:hover {
|
||||
background: darken($color, 5%);
|
||||
|
||||
&::before {
|
||||
background: darken($color, 10%);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
.btn-google-plus {
|
||||
$color: $google-plus;
|
||||
|
||||
background: $color;
|
||||
&::before {
|
||||
content: "\f0d5";
|
||||
background: darken($color, 5%);
|
||||
|
||||
}
|
||||
|
||||
&:hover {
|
||||
background: darken($color, 5%);
|
||||
|
||||
&::before {
|
||||
background: darken($color, 10%);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
.btn-instagram {
|
||||
$color: $instagram;
|
||||
|
||||
background: $color;
|
||||
&::before {
|
||||
content: "\f16d";
|
||||
background: darken($color, 5%);
|
||||
|
||||
}
|
||||
|
||||
&:hover {
|
||||
background: darken($color, 5%);
|
||||
|
||||
&::before {
|
||||
background: darken($color, 10%);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
.btn-pinterest {
|
||||
$color: $pinterest;
|
||||
|
||||
background: $color;
|
||||
&::before {
|
||||
content: "\f0d2";
|
||||
background: darken($color, 5%);
|
||||
|
||||
}
|
||||
|
||||
&:hover {
|
||||
background: darken($color, 5%);
|
||||
|
||||
&::before {
|
||||
background: darken($color, 10%);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
.btn-vk {
|
||||
$color: $vk;
|
||||
|
||||
background: $color;
|
||||
&::before {
|
||||
content: "\f189";
|
||||
background: darken($color, 5%);
|
||||
|
||||
}
|
||||
|
||||
&:hover {
|
||||
background: darken($color, 5%);
|
||||
|
||||
&::before {
|
||||
background: darken($color, 10%);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
.btn-yahoo {
|
||||
$color: $yahoo;
|
||||
|
||||
background: $color;
|
||||
&::before {
|
||||
content: "\f19e";
|
||||
background: darken($color, 5%);
|
||||
|
||||
}
|
||||
|
||||
&:hover {
|
||||
background: darken($color, 5%);
|
||||
|
||||
&::before {
|
||||
background: darken($color, 10%);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
.btn-behance {
|
||||
$color: $behance;
|
||||
|
||||
background: $color;
|
||||
&::before {
|
||||
content: "\f1b4";
|
||||
background: darken($color, 5%);
|
||||
|
||||
}
|
||||
|
||||
&:hover {
|
||||
background: darken($color, 5%);
|
||||
|
||||
&::before {
|
||||
background: darken($color, 10%);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
.btn-dropbox {
|
||||
$color: $dropbox;
|
||||
|
||||
background: $color;
|
||||
&::before {
|
||||
content: "\f16b";
|
||||
background: darken($color, 5%);
|
||||
|
||||
}
|
||||
|
||||
&:hover {
|
||||
background: darken($color, 5%);
|
||||
|
||||
&::before {
|
||||
background: darken($color, 10%);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
.btn-reddit {
|
||||
$color: $reddit;
|
||||
|
||||
background: $color;
|
||||
&::before {
|
||||
content: "\f1a1";
|
||||
background: darken($color, 5%);
|
||||
|
||||
}
|
||||
|
||||
&:hover {
|
||||
background: darken($color, 5%);
|
||||
|
||||
&::before {
|
||||
background: darken($color, 10%);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
.btn-spotify {
|
||||
$color: $spotify;
|
||||
|
||||
background: $color;
|
||||
&::before {
|
||||
content: "\f1bc";
|
||||
background: darken($color, 5%);
|
||||
|
||||
}
|
||||
|
||||
&:hover {
|
||||
background: darken($color, 5%);
|
||||
|
||||
&::before {
|
||||
background: darken($color, 10%);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
.btn-vine {
|
||||
$color: $vine;
|
||||
|
||||
background: $color;
|
||||
&::before {
|
||||
content: "\f1ca";
|
||||
background: darken($color, 5%);
|
||||
|
||||
}
|
||||
|
||||
&:hover {
|
||||
background: darken($color, 5%);
|
||||
|
||||
&::before {
|
||||
background: darken($color, 10%);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
.btn-foursquare {
|
||||
$color: $foursquare;
|
||||
|
||||
background: $color;
|
||||
&::before {
|
||||
content: "\f180";
|
||||
background: darken($color, 5%);
|
||||
|
||||
}
|
||||
|
||||
&:hover {
|
||||
background: darken($color, 5%);
|
||||
|
||||
&::before {
|
||||
background: darken($color, 10%);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
.btn-vimeo {
|
||||
$color: $vimeo;
|
||||
|
||||
background: $color;
|
||||
&::before {
|
||||
content: "\f194";
|
||||
background: darken($color, 5%);
|
||||
|
||||
}
|
||||
|
||||
&:hover {
|
||||
background: darken($color, 5%);
|
||||
|
||||
&::before {
|
||||
background: darken($color, 10%);
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,55 @@
|
||||
.callout {
|
||||
position: relative;
|
||||
padding: 0 $spacer;
|
||||
margin: $spacer 0;
|
||||
border: 0 solid $border-color;
|
||||
border-left-width: .25rem;
|
||||
|
||||
@if $enable-rounded {
|
||||
border-radius: .25rem;
|
||||
}
|
||||
|
||||
.chart-wrapper {
|
||||
position: absolute;
|
||||
top: 10px;
|
||||
left: 50%;
|
||||
float: right;
|
||||
width: 50%;
|
||||
}
|
||||
}
|
||||
|
||||
.callout-bordered {
|
||||
border: 1px solid $border-color;
|
||||
border-left-width: .25rem;
|
||||
}
|
||||
.callout code {
|
||||
border-radius: .25rem;
|
||||
}
|
||||
.callout h4 {
|
||||
margin-top: 0;
|
||||
margin-bottom: .25rem;
|
||||
}
|
||||
.callout p:last-child {
|
||||
margin-bottom: 0;
|
||||
}
|
||||
.callout + .callout {
|
||||
margin-top: - .25rem;
|
||||
}
|
||||
|
||||
.callout-default {
|
||||
border-left-color: $text-muted;
|
||||
|
||||
h4 {
|
||||
color: $text-muted;
|
||||
}
|
||||
}
|
||||
|
||||
@each $color, $value in $theme-colors {
|
||||
.callout-#{$color} {
|
||||
border-left-color: $value;
|
||||
|
||||
h4 {
|
||||
color: $value;
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,193 @@
|
||||
.card {
|
||||
margin-bottom: 1.5 * $spacer;
|
||||
|
||||
// Cards with color accent
|
||||
@each $color, $value in $theme-colors {
|
||||
&.bg-#{$color} {
|
||||
border-color: darken($value, 12.5%);
|
||||
.card-header {
|
||||
background-color: darken($value, 3%);
|
||||
border-color: darken($value, 12.5%);
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
.text-white .text-muted {
|
||||
color: rgba(255,255,255,.6) !important;
|
||||
}
|
||||
|
||||
.card-header {
|
||||
|
||||
.icon-bg {
|
||||
display: inline-block;
|
||||
padding: $card-spacer-y $card-spacer-x !important;
|
||||
margin-top: -$card-spacer-y;
|
||||
margin-right: $card-spacer-x;
|
||||
margin-bottom: -$card-spacer-y;
|
||||
margin-left: -$card-spacer-x;
|
||||
line-height: inherit;
|
||||
color: $card-icon-color;
|
||||
vertical-align: bottom;
|
||||
background: $card-icon-bg;
|
||||
border-right: $card-border-width solid $card-border-color;
|
||||
}
|
||||
|
||||
.nav.nav-tabs {
|
||||
margin-top: -$card-spacer-y;
|
||||
margin-bottom: -$card-spacer-y;
|
||||
border-bottom: 0;
|
||||
|
||||
.nav-item {
|
||||
border-top: 0;
|
||||
}
|
||||
|
||||
.nav-link {
|
||||
padding: $card-spacer-y $card-spacer-x / 2;
|
||||
color: $text-muted;
|
||||
border-top: 0;
|
||||
|
||||
&.active {
|
||||
color: $body-color;
|
||||
background: #fff;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
&.card-header-inverse {
|
||||
color: #fff;
|
||||
}
|
||||
|
||||
.btn {
|
||||
margin-top: - $input-btn-padding-y;
|
||||
}
|
||||
.btn-sm {
|
||||
margin-top: - $input-btn-padding-y-sm;
|
||||
}
|
||||
.btn-lg {
|
||||
margin-top: - $input-btn-padding-y-lg;
|
||||
}
|
||||
}
|
||||
//
|
||||
.card-footer {
|
||||
|
||||
ul {
|
||||
display: table;
|
||||
width: 100%;
|
||||
padding: 0;
|
||||
margin: 0;
|
||||
table-layout: fixed;
|
||||
|
||||
li {
|
||||
display: table-cell;
|
||||
padding: 0 $card-spacer-x;
|
||||
text-align: center;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
[class*="card-outline-"] {
|
||||
.card-body {
|
||||
background: #fff !important;
|
||||
}
|
||||
|
||||
&.card-outline-top {
|
||||
border-top-width: 2px;
|
||||
border-right-color: $border-color;
|
||||
border-bottom-color: $border-color;
|
||||
border-left-color: $border-color;
|
||||
}
|
||||
}
|
||||
|
||||
// Cards with color accent
|
||||
@each $color, $value in $theme-colors {
|
||||
.card-accent-#{$color} {
|
||||
@include card-accent-variant($value);
|
||||
}
|
||||
}
|
||||
|
||||
// Card Actions
|
||||
.card-header {
|
||||
> i {
|
||||
margin-right: $spacer / 2;
|
||||
}
|
||||
.card-actions {
|
||||
position: absolute;
|
||||
top: 0;
|
||||
right: 0;
|
||||
//height: inherit;
|
||||
|
||||
a, button {
|
||||
display: block;
|
||||
float: left;
|
||||
width: 50px;
|
||||
padding: $card-spacer-y 0;
|
||||
margin: 0 !important;
|
||||
color: $body-color;
|
||||
text-align: center;
|
||||
background: transparent;
|
||||
border: 0;
|
||||
border-left: 1px solid $border-color;
|
||||
box-shadow: 0;
|
||||
|
||||
&:hover {
|
||||
text-decoration: none;
|
||||
}
|
||||
|
||||
[class^="icon-"], [class*=" icon-"] {
|
||||
display: inline-block;
|
||||
vertical-align: middle;
|
||||
}
|
||||
|
||||
i {
|
||||
display: inline-block;
|
||||
transition: .4s;
|
||||
}
|
||||
|
||||
.r180 {
|
||||
transform: rotate(180deg);
|
||||
}
|
||||
}
|
||||
|
||||
.input-group {
|
||||
width: 230px;
|
||||
margin: 6px;
|
||||
|
||||
.input-group-prepend, .input-group-append {
|
||||
background: #fff;
|
||||
}
|
||||
|
||||
input {
|
||||
border-left: 0;
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
.card-full {
|
||||
margin-top: - $spacer;
|
||||
margin-right: - $grid-gutter-width / 2;
|
||||
margin-left: - $grid-gutter-width / 2;
|
||||
border: 0;
|
||||
border-bottom: $card-border-width solid $border-color;
|
||||
}
|
||||
|
||||
@include media-breakpoint-up(sm) {
|
||||
.card-columns {
|
||||
|
||||
&.cols-2 {
|
||||
column-count: 2;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
.card {
|
||||
&.drag, .drag {
|
||||
cursor: move;
|
||||
}
|
||||
}
|
||||
|
||||
.card-placeholder {
|
||||
background: rgba(0,0,0,.025);
|
||||
border: 1px dashed $gray-300;
|
||||
}
|
||||
@@ -0,0 +1,9 @@
|
||||
.chart-wrapper {
|
||||
canvas {
|
||||
width: 100% !important;
|
||||
}
|
||||
}
|
||||
// scss-lint:disable QualifyingElement
|
||||
base-chart.chart {
|
||||
display: block !important;
|
||||
}
|
||||
@@ -0,0 +1,8 @@
|
||||
// Temp fix for reactstrap
|
||||
.app-header {
|
||||
.navbar-nav {
|
||||
.dropdown-menu-right {
|
||||
right: auto;
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,69 @@
|
||||
// Links, buttons, and more within the dropdown menu
|
||||
.dropdown-item {
|
||||
position: relative;
|
||||
padding: 10px 20px;
|
||||
border-bottom: 1px solid $dropdown-border-color;
|
||||
|
||||
&:last-child {
|
||||
border-bottom: 0;
|
||||
}
|
||||
|
||||
i {
|
||||
display: inline-block;
|
||||
width: 20px;
|
||||
margin-right: 10px;
|
||||
margin-left: -10px;
|
||||
color: $dropdown-border-color;
|
||||
text-align: center;
|
||||
}
|
||||
|
||||
.badge {
|
||||
position: absolute;
|
||||
right: 10px;
|
||||
margin-top: 2px;
|
||||
}
|
||||
}
|
||||
|
||||
// Dropdown section headers
|
||||
.dropdown-header {
|
||||
padding: 8px 20px;
|
||||
background: $dropdown-divider-bg;
|
||||
border-bottom: 1px solid $dropdown-border-color;
|
||||
|
||||
.btn {
|
||||
margin-top: -7px;
|
||||
color: $dropdown-header-color;
|
||||
|
||||
&:hover {
|
||||
color: $body-color;
|
||||
}
|
||||
|
||||
&.pull-right {
|
||||
margin-right: -20px;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
.dropdown-menu-lg {
|
||||
width: 250px;
|
||||
}
|
||||
.app-header {
|
||||
.navbar-nav {
|
||||
.dropdown-menu {
|
||||
position: absolute;
|
||||
}
|
||||
// Menu positioning
|
||||
//
|
||||
// Add extra class to `.dropdown-menu` to flip the alignment of the dropdown
|
||||
// menu with the parent.
|
||||
.dropdown-menu-right {
|
||||
right: 0;
|
||||
left: auto; // Reset the default from `.dropdown-menu`
|
||||
}
|
||||
|
||||
.dropdown-menu-left {
|
||||
right: auto;
|
||||
left: 0;
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,9 @@
|
||||
.app-footer {
|
||||
display: flex;
|
||||
flex-wrap: wrap;
|
||||
align-items: center;
|
||||
padding: 0 $spacer;
|
||||
color: $footer-color;
|
||||
background: $footer-bg;
|
||||
@include borders($footer-borders);
|
||||
}
|
||||
@@ -0,0 +1,15 @@
|
||||
.row.row-equal {
|
||||
padding-right: ($grid-gutter-width / 4);
|
||||
padding-left: ($grid-gutter-width / 4);
|
||||
margin-right: ($grid-gutter-width / -2);
|
||||
margin-left: ($grid-gutter-width / -2);
|
||||
|
||||
[class*="col-"] {
|
||||
padding-right: ($grid-gutter-width / 4);
|
||||
padding-left: ($grid-gutter-width / 4);
|
||||
}
|
||||
}
|
||||
|
||||
.main .container-fluid {
|
||||
padding: 0 30px;
|
||||
}
|
||||
@@ -0,0 +1,5 @@
|
||||
.input-group-prepend,
|
||||
.input-group-append {
|
||||
white-space: nowrap;
|
||||
vertical-align: middle; // Match the inputs
|
||||
}
|
||||
@@ -0,0 +1,387 @@
|
||||
// IE10&11 Flexbox fix
|
||||
@media all and (-ms-high-contrast:none) {
|
||||
html {
|
||||
display: flex;
|
||||
flex-direction: column;
|
||||
}
|
||||
}
|
||||
|
||||
// app-dashboard and app-root are Angular2+ selectors. You can add here your own selectors if you need.
|
||||
.app,
|
||||
app-dashboard,
|
||||
app-root {
|
||||
display: flex;
|
||||
flex-direction: column;
|
||||
min-height: 100vh;
|
||||
}
|
||||
|
||||
.app-header {
|
||||
flex: 0 0 $navbar-height;
|
||||
}
|
||||
|
||||
.app-footer {
|
||||
flex: 0 0 $footer-height;
|
||||
}
|
||||
|
||||
.app-body {
|
||||
display: flex;
|
||||
flex-direction: row;
|
||||
flex-grow: 1;
|
||||
overflow-x: hidden;
|
||||
|
||||
.main {
|
||||
flex: 1;
|
||||
min-width: 0;
|
||||
}
|
||||
|
||||
.sidebar {
|
||||
// $sidebar-width is the width of the columns
|
||||
flex: 0 0 $sidebar-width;
|
||||
// put the nav on the left
|
||||
order: -1;
|
||||
}
|
||||
|
||||
.aside-menu {
|
||||
// $aside-menu-width is the width of the columns
|
||||
flex: 0 0 $aside-menu-width;
|
||||
}
|
||||
}
|
||||
|
||||
//
|
||||
// header
|
||||
//
|
||||
.header-fixed {
|
||||
.app-header {
|
||||
position: fixed;
|
||||
z-index: $zindex-sticky;
|
||||
width: 100%;
|
||||
}
|
||||
.app-body {
|
||||
margin-top: $navbar-height;
|
||||
}
|
||||
}
|
||||
|
||||
//
|
||||
// Sidebar
|
||||
//
|
||||
.sidebar-hidden {
|
||||
.sidebar {
|
||||
margin-left: - $sidebar-width;
|
||||
}
|
||||
}
|
||||
|
||||
.sidebar-fixed {
|
||||
.sidebar {
|
||||
position: fixed;
|
||||
z-index: $zindex-sticky - 1;
|
||||
width: $sidebar-width;
|
||||
height: calc(100vh - #{$navbar-height});
|
||||
// margin-top: - $navbar-height;
|
||||
|
||||
// .sidebar-nav {
|
||||
// height: calc(100vh - #{$navbar-height});
|
||||
// }
|
||||
}
|
||||
|
||||
.main, .app-footer {
|
||||
margin-left: $sidebar-width;
|
||||
}
|
||||
|
||||
&.sidebar-hidden {
|
||||
.main, .app-footer {
|
||||
margin-left: 0;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
.sidebar-off-canvas {
|
||||
.sidebar {
|
||||
position: fixed;
|
||||
z-index: $zindex-sticky - 1;
|
||||
height: calc(100vh - #{$navbar-height});
|
||||
}
|
||||
}
|
||||
|
||||
@include media-breakpoint-up(lg) {
|
||||
.sidebar-compact {
|
||||
.sidebar {
|
||||
flex: 0 0 $sidebar-compact-width;
|
||||
}
|
||||
|
||||
&.sidebar-hidden {
|
||||
.sidebar {
|
||||
margin-left: - $sidebar-compact-width;
|
||||
}
|
||||
}
|
||||
|
||||
&.sidebar-fixed {
|
||||
.main, .app-footer {
|
||||
margin-left: $sidebar-compact-width;
|
||||
}
|
||||
|
||||
.sidebar {
|
||||
width: $sidebar-compact-width;
|
||||
}
|
||||
|
||||
&.sidebar-hidden {
|
||||
.main, .app-footer {
|
||||
margin-left: 0;
|
||||
}
|
||||
}
|
||||
}
|
||||
.sidebar-minimizer {
|
||||
display: none;
|
||||
}
|
||||
}
|
||||
|
||||
.sidebar-minimized {
|
||||
.sidebar {
|
||||
flex: 0 0 $sidebar-minimized-width;
|
||||
}
|
||||
|
||||
&.sidebar-hidden {
|
||||
.sidebar {
|
||||
margin-left: - $sidebar-minimized-width;
|
||||
}
|
||||
}
|
||||
|
||||
&.sidebar-fixed {
|
||||
.main, .app-footer {
|
||||
margin-left: $sidebar-minimized-width;
|
||||
}
|
||||
|
||||
.sidebar {
|
||||
width: $sidebar-minimized-width;
|
||||
}
|
||||
|
||||
&.sidebar-hidden {
|
||||
.main, .app-footer {
|
||||
margin-left: 0;
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
//
|
||||
// Aside Menu
|
||||
//
|
||||
.aside-menu-hidden {
|
||||
.aside-menu {
|
||||
margin-right: - $aside-menu-width;
|
||||
}
|
||||
}
|
||||
|
||||
.aside-menu-fixed {
|
||||
.aside-menu {
|
||||
position: fixed;
|
||||
right: 0;
|
||||
height: 100%;
|
||||
|
||||
.tab-content {
|
||||
height: calc(100vh - #{$aside-menu-nav-padding-y * 2 + $font-size-base} - #{$navbar-height});
|
||||
}
|
||||
}
|
||||
|
||||
.main, .app-footer {
|
||||
margin-right: $aside-menu-width;
|
||||
}
|
||||
|
||||
&.aside-menu-hidden {
|
||||
.main, .app-footer {
|
||||
margin-right: 0;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
.aside-menu-off-canvas {
|
||||
.aside-menu {
|
||||
position: fixed;
|
||||
right: 0;
|
||||
z-index: $zindex-sticky - 1;
|
||||
height: 100%;
|
||||
|
||||
.tab-content {
|
||||
height: calc(100vh - #{$aside-menu-nav-padding-y * 2 + $font-size-base} - #{$navbar-height});
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
//
|
||||
// Breadcrumb
|
||||
//
|
||||
.breadcrumb-fixed {
|
||||
.main {
|
||||
$breadcrumb-height: 2 * $breadcrumb-padding-y + $font-size-base + 1.5 * $spacer;
|
||||
padding-top: $breadcrumb-height;
|
||||
}
|
||||
|
||||
.breadcrumb {
|
||||
position: fixed;
|
||||
top: $navbar-height;
|
||||
right: 0;
|
||||
left: 0;
|
||||
z-index: $zindex-sticky - 2;
|
||||
}
|
||||
|
||||
// if sidebar + main + aside
|
||||
.main:nth-child(2) {
|
||||
.breadcrumb {
|
||||
right: $aside-menu-width;
|
||||
left: $sidebar-width;
|
||||
}
|
||||
}
|
||||
|
||||
// if sidebar + main
|
||||
.main:first-child {
|
||||
.breadcrumb {
|
||||
right: $aside-menu-width;
|
||||
left: 0;
|
||||
}
|
||||
}
|
||||
|
||||
// if main + aside
|
||||
.main:last-child {
|
||||
.breadcrumb {
|
||||
right: 0;
|
||||
}
|
||||
}
|
||||
|
||||
&.sidebar-minimized {
|
||||
.main .breadcrumb {
|
||||
left: $sidebar-minimized-width;
|
||||
}
|
||||
}
|
||||
|
||||
&.sidebar-hidden, &.sidebar-off-canvas {
|
||||
.main .breadcrumb {
|
||||
left: 0;
|
||||
}
|
||||
}
|
||||
|
||||
&.aside-menu-hidden, &.aside-menu-off-canvas {
|
||||
.main .breadcrumb {
|
||||
right: 0;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
//
|
||||
// Footer
|
||||
//
|
||||
.footer-fixed {
|
||||
.app-footer {
|
||||
position: fixed;
|
||||
right: 0;
|
||||
bottom: 0;
|
||||
left: 0;
|
||||
z-index: $zindex-sticky;
|
||||
height: $footer-height;
|
||||
}
|
||||
|
||||
.app-body {
|
||||
margin-bottom: $footer-height;
|
||||
}
|
||||
}
|
||||
|
||||
//
|
||||
// Animations
|
||||
//
|
||||
.app-header,
|
||||
.app-footer,
|
||||
.sidebar,
|
||||
.main,
|
||||
.aside-menu {
|
||||
transition: margin-left $layout-transition-speed, margin-right $layout-transition-speed, width $layout-transition-speed, flex $layout-transition-speed;
|
||||
}
|
||||
.sidebar-nav {
|
||||
transition: width $layout-transition-speed;
|
||||
}
|
||||
.breadcrumb {
|
||||
transition: left $layout-transition-speed, right $layout-transition-speed, width $layout-transition-speed;
|
||||
}
|
||||
|
||||
//
|
||||
// Mobile layout
|
||||
//
|
||||
|
||||
@include media-breakpoint-down(md) {
|
||||
.app-header.navbar {
|
||||
position: fixed !important;
|
||||
z-index: $zindex-sticky;
|
||||
width: 100%;
|
||||
text-align: center;
|
||||
background-color: $navbar-brand-bg;
|
||||
@include borders($navbar-brand-border);
|
||||
|
||||
.navbar-toggler {
|
||||
@if (lightness( $navbar-brand-bg ) > 40) {
|
||||
color: $navbar-color;
|
||||
} @else {
|
||||
color: #fff;
|
||||
}
|
||||
}
|
||||
|
||||
.navbar-brand {
|
||||
position: absolute;
|
||||
left: 50%;
|
||||
margin-left: - ($navbar-brand-width / 2);
|
||||
}
|
||||
}
|
||||
|
||||
.app-body {
|
||||
margin-top: $navbar-height;
|
||||
}
|
||||
|
||||
.breadcrumb-fixed {
|
||||
.main:nth-child(2) .breadcrumb {
|
||||
right: auto;
|
||||
left: auto;
|
||||
width: 100%;
|
||||
}
|
||||
}
|
||||
|
||||
.sidebar {
|
||||
position: fixed;
|
||||
z-index: $zindex-sticky - 1;
|
||||
width: $mobile-sidebar-width;
|
||||
height: calc(100vh - #{$navbar-height});
|
||||
margin-left: - $mobile-sidebar-width;
|
||||
|
||||
.sidebar-nav,
|
||||
.nav {
|
||||
width: $mobile-sidebar-width;
|
||||
min-height: calc(100vh - #{$navbar-height});
|
||||
}
|
||||
|
||||
.sidebar-minimizer {
|
||||
display: none;
|
||||
}
|
||||
}
|
||||
|
||||
.main, .app-footer {
|
||||
margin-left: 0 !important;
|
||||
}
|
||||
|
||||
// .aside-menu {
|
||||
// margin-right: - $aside-menu-width;
|
||||
// }
|
||||
|
||||
.sidebar-hidden {
|
||||
.sidebar {
|
||||
margin-left: - $mobile-sidebar-width;
|
||||
}
|
||||
}
|
||||
|
||||
.sidebar-mobile-show {
|
||||
.sidebar {
|
||||
width: $mobile-sidebar-width;
|
||||
margin-left: 0;
|
||||
}
|
||||
|
||||
.main {
|
||||
margin-right: - $mobile-sidebar-width !important;
|
||||
margin-left: $mobile-sidebar-width !important;
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,128 @@
|
||||
// Angular Version
|
||||
// Make clicks pass-through
|
||||
// scss-lint:disable all
|
||||
#loading-bar,
|
||||
#loading-bar-spinner {
|
||||
-webkit-pointer-events: none;
|
||||
pointer-events: none;
|
||||
-moz-transition: 350ms linear all;
|
||||
-o-transition: 350ms linear all;
|
||||
-webkit-transition: 350ms linear all;
|
||||
transition: 350ms linear all;
|
||||
}
|
||||
|
||||
#loading-bar.ng-enter,
|
||||
#loading-bar.ng-leave.ng-leave-active,
|
||||
#loading-bar-spinner.ng-enter,
|
||||
#loading-bar-spinner.ng-leave.ng-leave-active {
|
||||
opacity: 0;
|
||||
}
|
||||
|
||||
#loading-bar.ng-enter.ng-enter-active,
|
||||
#loading-bar.ng-leave,
|
||||
#loading-bar-spinner.ng-enter.ng-enter-active,
|
||||
#loading-bar-spinner.ng-leave {
|
||||
opacity: 1;
|
||||
}
|
||||
|
||||
#loading-bar .bar {
|
||||
position: fixed;
|
||||
top: 0;
|
||||
left: 0;
|
||||
z-index: 20002;
|
||||
width: 100%;
|
||||
height: 2px;
|
||||
background: theme-color("primary");
|
||||
border-top-right-radius: 1px;
|
||||
border-bottom-right-radius: 1px;
|
||||
-moz-transition: width 350ms;
|
||||
-o-transition: width 350ms;
|
||||
-webkit-transition: width 350ms;
|
||||
transition: width 350ms;
|
||||
}
|
||||
|
||||
// Fancy blur effect
|
||||
#loading-bar .peg {
|
||||
position: absolute;
|
||||
top: 0;
|
||||
right: 0;
|
||||
width: 70px;
|
||||
height: 2px;
|
||||
-moz-border-radius: 100%;
|
||||
-webkit-border-radius: 100%;
|
||||
border-radius: 100%;
|
||||
-moz-box-shadow: #29d 1px 0 6px 1px;
|
||||
-ms-box-shadow: #29d 1px 0 6px 1px;
|
||||
-webkit-box-shadow: #29d 1px 0 6px 1px;
|
||||
box-shadow: #29d 1px 0 6px 1px;
|
||||
opacity: .45;
|
||||
}
|
||||
|
||||
#loading-bar-spinner {
|
||||
position: fixed;
|
||||
top: 10px;
|
||||
left: 10px;
|
||||
z-index: 10002;
|
||||
display: block;
|
||||
}
|
||||
|
||||
#loading-bar-spinner .spinner-icon {
|
||||
width: 14px;
|
||||
height: 14px;
|
||||
|
||||
border: solid 2px transparent;
|
||||
border-top-color: #29d;
|
||||
border-left-color: #29d;
|
||||
border-radius: 50%;
|
||||
|
||||
-moz-animation: loading-bar-spinner 400ms linear infinite;
|
||||
-ms-animation: loading-bar-spinner 400ms linear infinite;
|
||||
-o-animation: loading-bar-spinner 400ms linear infinite;
|
||||
-webkit-animation: loading-bar-spinner 400ms linear infinite;
|
||||
animation: loading-bar-spinner 400ms linear infinite;
|
||||
}
|
||||
|
||||
@-webkit-keyframes loading-bar-spinner {
|
||||
0% { -webkit-transform: rotate(0deg); transform: rotate(0deg); }
|
||||
100% { -webkit-transform: rotate(360deg); transform: rotate(360deg); }
|
||||
}
|
||||
@-moz-keyframes loading-bar-spinner {
|
||||
0% { -moz-transform: rotate(0deg); transform: rotate(0deg); }
|
||||
100% { -moz-transform: rotate(360deg); transform: rotate(360deg); }
|
||||
}
|
||||
@-o-keyframes loading-bar-spinner {
|
||||
0% { -o-transform: rotate(0deg); transform: rotate(0deg); }
|
||||
100% { -o-transform: rotate(360deg); transform: rotate(360deg); }
|
||||
}
|
||||
@-ms-keyframes loading-bar-spinner {
|
||||
0% { -ms-transform: rotate(0deg); transform: rotate(0deg); }
|
||||
100% { -ms-transform: rotate(360deg); transform: rotate(360deg); }
|
||||
}
|
||||
@keyframes loading-bar-spinner {
|
||||
0% { transform: rotate(0deg); transform: rotate(0deg); }
|
||||
100% { transform: rotate(360deg); transform: rotate(360deg); }
|
||||
}
|
||||
|
||||
//Ajax & Static Version
|
||||
.pace {
|
||||
-webkit-pointer-events: none;
|
||||
pointer-events: none;
|
||||
|
||||
-moz-user-select: none;
|
||||
-webkit-user-select: none;
|
||||
user-select: none;
|
||||
}
|
||||
|
||||
.pace-inactive {
|
||||
display: none;
|
||||
}
|
||||
|
||||
.pace .pace-progress {
|
||||
position: fixed;
|
||||
top: 0;
|
||||
right: 100%;
|
||||
z-index: 2000;
|
||||
width: 100%;
|
||||
height: 2px;
|
||||
background: theme-color("primary");
|
||||
}
|
||||
@@ -0,0 +1,116 @@
|
||||
@mixin button-social-size($padding-y, $padding-x, $font-size, $line-height, $border-radius) {
|
||||
padding: $padding-y $padding-x;
|
||||
font-size: $font-size;
|
||||
line-height: $line-height;
|
||||
border: 0;
|
||||
@include border-radius($border-radius);
|
||||
|
||||
&::before {
|
||||
width: ($padding-y * 2) + ($font-size * $line-height);
|
||||
height: ($padding-y * 2) + ($font-size * $line-height);
|
||||
padding: $padding-y 0;
|
||||
font-size: $font-size;
|
||||
line-height: $line-height;
|
||||
@include border-radius($border-radius);
|
||||
}
|
||||
|
||||
span {
|
||||
margin-left: ($padding-y * 2) + ($font-size * $line-height);
|
||||
}
|
||||
|
||||
&.icon {
|
||||
width: ($padding-y * 2) + ($font-size * $line-height);
|
||||
height: ($padding-y * 2) + ($font-size * $line-height);
|
||||
}
|
||||
}
|
||||
|
||||
@mixin avatar($width, $status-width) {
|
||||
position: relative;
|
||||
display: inline-block;
|
||||
width: $width;
|
||||
|
||||
.img-avatar {
|
||||
width: $width;
|
||||
height: $width;
|
||||
}
|
||||
|
||||
.avatar-status {
|
||||
position: absolute;
|
||||
right: 0;
|
||||
bottom: 0;
|
||||
display: block;
|
||||
width: $status-width;
|
||||
height: $status-width;
|
||||
border: 1px solid #fff;
|
||||
border-radius: 50em;
|
||||
}
|
||||
}
|
||||
|
||||
@mixin borders($borders) {
|
||||
@each $border in $borders {
|
||||
$direction: nth($border, 1);
|
||||
@if $direction == "all" {
|
||||
$size: map-get(map-get($borders, $direction), size);
|
||||
$style: map-get(map-get($borders, $direction), style);
|
||||
$color: map-get(map-get($borders, $direction), color);
|
||||
border: $size $style $color;
|
||||
} @else if $direction == "top" {
|
||||
$size: map-get(map-get($borders, $direction), size);
|
||||
$style: map-get(map-get($borders, $direction), style);
|
||||
$color: map-get(map-get($borders, $direction), color);
|
||||
border-top: $size $style $color;
|
||||
} @else if $direction == "right" {
|
||||
$size: map-get(map-get($borders, $direction), size);
|
||||
$style: map-get(map-get($borders, $direction), style);
|
||||
$color: map-get(map-get($borders, $direction), color);
|
||||
border-right: $size $style $color;
|
||||
} @else if $direction == "bottom" {
|
||||
$size: map-get(map-get($borders, $direction), size);
|
||||
$style: map-get(map-get($borders, $direction), style);
|
||||
$color: map-get(map-get($borders, $direction), color);
|
||||
border-bottom: $size $style $color;
|
||||
} @else if $direction == "left" {
|
||||
$size: map-get(map-get($borders, $direction), size);
|
||||
$style: map-get(map-get($borders, $direction), style);
|
||||
$color: map-get(map-get($borders, $direction), color);
|
||||
border-left: $size $style $color;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@mixin sidebar-width($borders, $width) {
|
||||
$sidebar-width: $width;
|
||||
|
||||
@each $border in $borders {
|
||||
$direction: nth($border, 1);
|
||||
@if $direction == "all" {
|
||||
$size: map-get(map-get($borders, $direction), size);
|
||||
$sidebar-width: ($sidebar-width - (2 * $size));
|
||||
} @else if $direction == "right" {
|
||||
$size: map-get(map-get($borders, $direction), size);
|
||||
$sidebar-width: $sidebar-width - $size;
|
||||
} @else if $direction == "left" {
|
||||
$size: map-get(map-get($borders, $direction), size);
|
||||
$sidebar-width: $sidebar-width - $size;
|
||||
}
|
||||
width: $sidebar-width;
|
||||
}
|
||||
}
|
||||
|
||||
@mixin bg-variant($parent, $color) {
|
||||
#{$parent} {
|
||||
@include border-radius($card-border-radius-inner $card-border-radius-inner $card-border-radius-inner $card-border-radius-inner);
|
||||
color: #fff !important;
|
||||
background-color: $color !important;
|
||||
}
|
||||
a#{$parent} {
|
||||
@include hover-focus {
|
||||
background-color: darken($color, 10%);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@mixin card-accent-variant($color) {
|
||||
border-top-width: 2px;
|
||||
border-top-color: $color;
|
||||
}
|
||||
@@ -0,0 +1,13 @@
|
||||
@each $color, $value in $theme-colors {
|
||||
.modal-#{$color} {
|
||||
|
||||
.modal-content {
|
||||
border-color: $value;
|
||||
}
|
||||
|
||||
.modal-header {
|
||||
color: #fff;
|
||||
background-color: $value;
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,35 @@
|
||||
.nav-tabs {
|
||||
.nav-link {
|
||||
color: $gray-600;
|
||||
&:hover {
|
||||
cursor: pointer;
|
||||
}
|
||||
&.active {
|
||||
color: $gray-800;
|
||||
background: #fff;
|
||||
border-color: $border-color;
|
||||
border-bottom-color: #fff;
|
||||
&:focus {
|
||||
background: #fff;
|
||||
border-color: $border-color;
|
||||
border-bottom-color: #fff;
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
.tab-content {
|
||||
margin-top: -1px;
|
||||
background: #fff;
|
||||
border: 1px solid $border-color;
|
||||
.tab-pane {
|
||||
padding: $spacer;
|
||||
}
|
||||
}
|
||||
|
||||
.card-block {
|
||||
.tab-content {
|
||||
margin-top: 0;
|
||||
border: 0;
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,127 @@
|
||||
.app-header.navbar {
|
||||
position: relative;
|
||||
flex-direction: row;
|
||||
height: $navbar-height;
|
||||
padding: 0;
|
||||
margin: 0;
|
||||
background-color: $navbar-bg;
|
||||
@include borders($navbar-border);
|
||||
|
||||
.navbar-brand {
|
||||
display: inline-block;
|
||||
width: $navbar-brand-width;
|
||||
height: $navbar-height;
|
||||
padding: $navbar-padding-y $navbar-padding-x;
|
||||
margin-right: 0;
|
||||
background-color: $navbar-brand-bg;
|
||||
background-image: $navbar-brand-logo;
|
||||
background-repeat: no-repeat;
|
||||
background-position: center center;
|
||||
background-size: $navbar-brand-logo-size;
|
||||
@include borders($navbar-brand-border);
|
||||
}
|
||||
|
||||
.navbar-toggler {
|
||||
min-width: 50px;
|
||||
padding: $navbar-toggler-padding-y 0;
|
||||
|
||||
&:hover .navbar-toggler-icon {
|
||||
background-image: $navbar-toggler-icon-hover;
|
||||
}
|
||||
}
|
||||
|
||||
.navbar-toggler-icon {
|
||||
height: 23px;
|
||||
background-image: $navbar-toggler-icon;
|
||||
}
|
||||
|
||||
.navbar-nav {
|
||||
flex-direction: row;
|
||||
align-items: center;
|
||||
}
|
||||
|
||||
.nav-item {
|
||||
position: relative;
|
||||
min-width: 50px;
|
||||
margin: 0 !important;
|
||||
text-align: center;
|
||||
|
||||
button {
|
||||
margin: 0 auto;
|
||||
}
|
||||
|
||||
.nav-link {
|
||||
padding-top: 0;
|
||||
padding-bottom: 0;
|
||||
background: 0;
|
||||
border: 0;
|
||||
|
||||
.badge {
|
||||
position: absolute;
|
||||
top: 50%;
|
||||
left: 50%;
|
||||
margin-top: -16px;
|
||||
margin-left: 0;
|
||||
}
|
||||
|
||||
> .img-avatar {
|
||||
height: $navbar-height - 20px;
|
||||
margin: 0 10px;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
.dropdown-menu {
|
||||
padding-bottom: 0;
|
||||
line-height: $line-height-base;
|
||||
}
|
||||
|
||||
.dropdown-item {
|
||||
min-width: 180px;
|
||||
}
|
||||
}
|
||||
|
||||
.navbar-brand {
|
||||
color: $navbar-active-color;
|
||||
|
||||
@include hover-focus {
|
||||
color: $navbar-active-color;
|
||||
}
|
||||
}
|
||||
|
||||
.navbar-nav {
|
||||
.nav-link {
|
||||
color: $navbar-color;
|
||||
|
||||
@include hover-focus {
|
||||
color: $navbar-hover-color;
|
||||
}
|
||||
}
|
||||
|
||||
.open > .nav-link,
|
||||
.active > .nav-link,
|
||||
.nav-link.open,
|
||||
.nav-link.active {
|
||||
@include plain-hover-focus {
|
||||
color: $navbar-active-color;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
.navbar-divider {
|
||||
background-color: rgba(0,0,0,.075);
|
||||
}
|
||||
|
||||
@include media-breakpoint-up(lg) {
|
||||
.brand-minimized {
|
||||
.app-header.navbar {
|
||||
.navbar-brand {
|
||||
width: $navbar-brand-minimized-width;
|
||||
background-color: $navbar-brand-minimized-bg;
|
||||
background-image: $navbar-brand-minimized-logo;
|
||||
background-size: $navbar-brand-minimized-logo-size;
|
||||
@include borders($navbar-brand-minimized-border);
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,4 @@
|
||||
// scss-lint:disable QualifyingElement
|
||||
hr.transparent {
|
||||
border-top: 1px solid transparent;
|
||||
}
|
||||
@@ -0,0 +1,15 @@
|
||||
.progress-xs {
|
||||
height: 4px;
|
||||
}
|
||||
|
||||
.progress-sm {
|
||||
height: 8px;
|
||||
}
|
||||
|
||||
// White progress bar
|
||||
.progress-white {
|
||||
background-color: rgba(255,255,255,.2) !important;
|
||||
.progress-bar {
|
||||
background-color: #fff;
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,281 @@
|
||||
//
|
||||
// RTL Support
|
||||
//
|
||||
// scss-lint:disable NestingDepth, SelectorDepth
|
||||
*[dir="rtl"] {
|
||||
direction: rtl;
|
||||
unicode-bidi: embed;
|
||||
|
||||
ul {
|
||||
-webkit-padding-start: 0;
|
||||
}
|
||||
|
||||
table tr th {
|
||||
text-align: right;
|
||||
}
|
||||
|
||||
// Breadcrumb
|
||||
|
||||
.breadcrumb-item {
|
||||
float: right;
|
||||
}
|
||||
|
||||
.breadcrumb-menu {
|
||||
right: auto;
|
||||
left: $breadcrumb-padding-x;
|
||||
}
|
||||
|
||||
// Dropdown
|
||||
.dropdown-item {
|
||||
text-align: right;
|
||||
|
||||
i {
|
||||
margin-right: -10px;
|
||||
margin-left: 10px;
|
||||
}
|
||||
|
||||
.badge {
|
||||
right: auto;
|
||||
left: 10px;
|
||||
}
|
||||
}
|
||||
|
||||
//
|
||||
// Sidebar
|
||||
//
|
||||
.sidebar-hidden {
|
||||
.sidebar {
|
||||
margin-right: - $sidebar-width;
|
||||
}
|
||||
}
|
||||
|
||||
.sidebar-fixed {
|
||||
.main, .app-footer {
|
||||
margin-right: $sidebar-width;
|
||||
}
|
||||
|
||||
&.sidebar-hidden {
|
||||
.main, .app-footer {
|
||||
margin-right: 0;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
.sidebar-minimized {
|
||||
.sidebar {
|
||||
flex: 0 0 $sidebar-minimized-width;
|
||||
}
|
||||
|
||||
&.sidebar-hidden {
|
||||
.sidebar {
|
||||
margin-right: - $sidebar-minimized-width;
|
||||
margin-left: 0;
|
||||
}
|
||||
}
|
||||
|
||||
&.sidebar-fixed {
|
||||
.main, .app-footer {
|
||||
margin-right: $sidebar-minimized-width;
|
||||
}
|
||||
|
||||
&.sidebar-hidden {
|
||||
.main, .app-footer {
|
||||
margin-left: 0;
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
//
|
||||
// Aside Menu
|
||||
//
|
||||
.aside-menu-hidden {
|
||||
.aside-menu {
|
||||
margin-right: 0;
|
||||
margin-left: - $aside-menu-width;
|
||||
}
|
||||
}
|
||||
|
||||
.aside-menu-fixed {
|
||||
.aside-menu {
|
||||
right: auto;
|
||||
left: 0;
|
||||
}
|
||||
|
||||
.main, .app-footer {
|
||||
//margin-right: 0;
|
||||
margin-left: $aside-menu-width;
|
||||
}
|
||||
|
||||
&.aside-menu-hidden {
|
||||
.main, .app-footer {
|
||||
margin-left: 0;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
.aside-menu-off-canvas {
|
||||
.aside-menu {
|
||||
position: fixed;
|
||||
right: 0;
|
||||
z-index: $zindex-sticky - 1;
|
||||
height: 100%;
|
||||
|
||||
.tab-content {
|
||||
height: calc(100vh - #{$aside-menu-nav-padding-y * 2 + $font-size-base} - #{$navbar-height});
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
// Sidebar Menu
|
||||
.sidebar {
|
||||
.sidebar-nav {
|
||||
.nav {
|
||||
.nav-item {
|
||||
.nav-link {
|
||||
direction: rtl;
|
||||
i {
|
||||
margin: 0 0 0 ($sidebar-nav-link-padding-x / 2);
|
||||
}
|
||||
.badge {
|
||||
float: left;
|
||||
margin-top: 2px;
|
||||
// margin-left: 10px;
|
||||
}
|
||||
&.nav-dropdown-toggle {
|
||||
&::before {
|
||||
position: absolute;
|
||||
right: auto !important;
|
||||
left: $sidebar-nav-link-padding-x;
|
||||
transform: rotate(180deg);
|
||||
}
|
||||
}
|
||||
}
|
||||
&.nav-dropdown {
|
||||
&.open {
|
||||
> .nav-link.nav-dropdown-toggle::before {
|
||||
transform: rotate(270deg);
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
.sidebar-minimized .sidebar {
|
||||
.nav-link {
|
||||
padding-right: 0;
|
||||
i {
|
||||
float: right;
|
||||
padding: 0;
|
||||
margin: 0;
|
||||
}
|
||||
.badge {
|
||||
right: auto;
|
||||
left: 15px;
|
||||
}
|
||||
}
|
||||
.nav > .nav-dropdown {
|
||||
|
||||
&:hover {
|
||||
> .nav-dropdown-items {
|
||||
right: $sidebar-minimized-width;
|
||||
left: 0;
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
// Horizontal bars
|
||||
.horizontal-bars {
|
||||
|
||||
li {
|
||||
|
||||
.bars {
|
||||
padding-right: 100px;
|
||||
padding-left: 0;
|
||||
|
||||
.progress:first-child {
|
||||
margin-bottom: 2px;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
&.type-2 {
|
||||
|
||||
li {
|
||||
|
||||
i {
|
||||
margin-right: 5px;
|
||||
margin-left: $spacer;
|
||||
}
|
||||
|
||||
.value {
|
||||
float: left;
|
||||
font-weight: 600;
|
||||
}
|
||||
|
||||
.bars {
|
||||
padding: 0;
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
// Icon list
|
||||
.icons-list {
|
||||
|
||||
li {
|
||||
position: relative;
|
||||
height: 40px;
|
||||
vertical-align: middle;
|
||||
|
||||
i {
|
||||
float: right;
|
||||
}
|
||||
|
||||
.desc {
|
||||
margin-right: 50px;
|
||||
margin-left: 0;
|
||||
}
|
||||
|
||||
.value {
|
||||
right: auto;
|
||||
left: 45px;
|
||||
text-align: left;
|
||||
|
||||
strong {
|
||||
display: block;
|
||||
margin-top: -3px;
|
||||
}
|
||||
}
|
||||
|
||||
.actions {
|
||||
right: auto;
|
||||
left: 10px;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
// Callouts
|
||||
.callout {
|
||||
border: 0 solid $border-color;
|
||||
border-right-width: .25rem;
|
||||
|
||||
@each $color, $value in $theme-colors {
|
||||
&.callout-#{$color} {
|
||||
border-right-color: $value;
|
||||
}
|
||||
}
|
||||
|
||||
.chart-wrapper {
|
||||
left: 0;
|
||||
float: left;
|
||||
}
|
||||
}
|
||||
|
||||
.callout-default {
|
||||
border-right-color: $text-muted;
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,454 @@
|
||||
// scss-lint:disable NestingDepth, SelectorDepth
|
||||
.sidebar {
|
||||
display: flex;
|
||||
flex-direction: column;
|
||||
padding: $sidebar-padding;
|
||||
color: $sidebar-color;
|
||||
background: $sidebar-bg;
|
||||
@include borders($sidebar-borders);
|
||||
|
||||
.sidebar-close {
|
||||
position: absolute;
|
||||
right: 0;
|
||||
display: none;
|
||||
padding: 0 $spacer;
|
||||
font-size: 24px;
|
||||
font-weight: 800;
|
||||
line-height: $navbar-height;
|
||||
color: $sidebar-color;
|
||||
background: 0;
|
||||
border: 0;
|
||||
opacity: .8;
|
||||
|
||||
&:hover {
|
||||
opacity: 1;
|
||||
}
|
||||
}
|
||||
|
||||
// Will be added soon
|
||||
// .sidebar-brand { }
|
||||
|
||||
.sidebar-header {
|
||||
flex: 0 0 $sidebar-header-height;
|
||||
padding: $sidebar-header-padding-y $sidebar-header-padding-x;
|
||||
text-align: center;
|
||||
background: $sidebar-header-bg;
|
||||
}
|
||||
|
||||
.sidebar-form .form-control {
|
||||
color: $sidebar-form-color;
|
||||
background: $sidebar-form-bg;
|
||||
border: $sidebar-form-border;
|
||||
|
||||
&::placeholder {
|
||||
color: $sidebar-form-placeholder-color;
|
||||
}
|
||||
}
|
||||
|
||||
.sidebar-nav {
|
||||
position: relative;
|
||||
flex: 1;
|
||||
overflow-x: hidden;
|
||||
overflow-y: auto;
|
||||
-ms-overflow-style: -ms-autohiding-scrollbar;
|
||||
@include sidebar-width($sidebar-borders, $sidebar-width);
|
||||
|
||||
&::-webkit-scrollbar {
|
||||
position: absolute;
|
||||
width: 10px;
|
||||
margin-left: -10px;
|
||||
-webkit-appearance: none;
|
||||
}
|
||||
|
||||
&::-webkit-scrollbar-track {
|
||||
background-color: lighten($sidebar-bg, 5%);
|
||||
border-right: 1px solid darken($sidebar-bg, 5%);
|
||||
border-left: 1px solid darken($sidebar-bg, 5%);
|
||||
}
|
||||
|
||||
&::-webkit-scrollbar-thumb {
|
||||
height: 50px;
|
||||
background-color: darken($sidebar-bg, 10%);
|
||||
background-clip: content-box;
|
||||
border-color: transparent;
|
||||
border-style: solid;
|
||||
border-width: 1px 2px;
|
||||
}
|
||||
}
|
||||
|
||||
.nav {
|
||||
@include sidebar-width($sidebar-borders, $sidebar-width);
|
||||
flex-direction: column;
|
||||
min-height: 100%;
|
||||
}
|
||||
|
||||
.nav-title {
|
||||
padding: $sidebar-nav-title-padding-y $sidebar-nav-title-padding-x;
|
||||
font-size: 11px;
|
||||
font-weight: 600;
|
||||
color: $sidebar-nav-title-color;
|
||||
text-transform: uppercase;
|
||||
}
|
||||
|
||||
.nav-divider, .divider {
|
||||
height: 10px;
|
||||
}
|
||||
|
||||
.nav-item {
|
||||
position: relative;
|
||||
margin: 0;
|
||||
transition: background .3s ease-in-out;
|
||||
}
|
||||
|
||||
.nav-dropdown-items {
|
||||
max-height: 0;
|
||||
padding: 0;
|
||||
margin: 0;
|
||||
overflow-y: hidden;
|
||||
transition: max-height .3s ease-in-out;
|
||||
|
||||
.nav-item {
|
||||
padding: 0;
|
||||
list-style: none;
|
||||
}
|
||||
}
|
||||
|
||||
.nav-link {
|
||||
display: block;
|
||||
padding: $sidebar-nav-link-padding-y $sidebar-nav-link-padding-x;
|
||||
color: $sidebar-nav-link-color;
|
||||
text-decoration: none;
|
||||
background: $sidebar-nav-link-bg;
|
||||
@include borders($sidebar-nav-link-borders);
|
||||
@if $enable-sidebar-nav-rounded {
|
||||
border-radius: $border-radius;
|
||||
}
|
||||
|
||||
i {
|
||||
display: inline-block;
|
||||
width: 20px;
|
||||
margin: 0 ($sidebar-nav-link-padding-x / 2) 0 0;
|
||||
font-size: 14px;
|
||||
color: $sidebar-nav-link-icon-color;
|
||||
text-align: center;
|
||||
}
|
||||
|
||||
.badge {
|
||||
float: right;
|
||||
margin-top: 2px;
|
||||
}
|
||||
|
||||
&.active {
|
||||
color: $sidebar-nav-link-active-color;
|
||||
background: $sidebar-nav-link-active-bg;
|
||||
@include borders($sidebar-nav-link-active-borders);
|
||||
|
||||
i {
|
||||
color: $sidebar-nav-link-active-icon-color;
|
||||
}
|
||||
}
|
||||
|
||||
&:hover {
|
||||
color: $sidebar-nav-link-hover-color;
|
||||
background: $sidebar-nav-link-hover-bg;
|
||||
@include borders($sidebar-nav-link-hover-borders);
|
||||
|
||||
i {
|
||||
color: $sidebar-nav-link-hover-icon-color;
|
||||
}
|
||||
|
||||
&.nav-dropdown-toggle::before {
|
||||
background-image: $sidebar-nav-dropdown-indicator-hover;
|
||||
}
|
||||
}
|
||||
|
||||
@each $color, $value in $theme-colors {
|
||||
&.nav-link-#{$color} {
|
||||
background: $value;
|
||||
i {
|
||||
color: rgba(255,255,255,.7);
|
||||
}
|
||||
&:hover {
|
||||
background: darken($value,5%) !important;
|
||||
i {
|
||||
color: #fff;
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
// ex. <a class="nav-link nav-dropdown-toggle" href="#">Components</a>
|
||||
.nav-dropdown-toggle {
|
||||
position: relative;
|
||||
|
||||
&::before {
|
||||
position: absolute;
|
||||
top: 50%;
|
||||
right: $sidebar-nav-link-padding-x;
|
||||
display: block;
|
||||
width: 8px;
|
||||
height: 8px;
|
||||
padding: 0;
|
||||
margin-top: -4px;
|
||||
content: "";
|
||||
background-image: $sidebar-nav-dropdown-indicator;
|
||||
background-repeat: no-repeat;
|
||||
background-position: center;
|
||||
transition: transform .3s;
|
||||
}
|
||||
}
|
||||
|
||||
// ex. <li class="nav-item nav-dropdown">
|
||||
.nav-dropdown.open {
|
||||
background: $sidebar-nav-dropdown-bg;
|
||||
@include borders($sidebar-nav-dropdown-borders);
|
||||
@if $enable-sidebar-nav-rounded {
|
||||
border-radius: $border-radius;
|
||||
}
|
||||
> .nav-dropdown-items {
|
||||
max-height: 1500px;
|
||||
}
|
||||
|
||||
.nav-link {
|
||||
color: $sidebar-nav-dropdown-color;
|
||||
border-left: 0 !important;
|
||||
}
|
||||
|
||||
> .nav-link.nav-dropdown-toggle::before {
|
||||
transform: rotate(-90deg);
|
||||
}
|
||||
|
||||
.nav-dropdown.open {
|
||||
border-left: 0;
|
||||
}
|
||||
}
|
||||
|
||||
.nav-label {
|
||||
display: block;
|
||||
padding: ($sidebar-nav-link-padding-y / 8) $sidebar-nav-link-padding-x;
|
||||
color: $sidebar-nav-title-color;
|
||||
|
||||
&:hover {
|
||||
color: $sidebar-color;
|
||||
text-decoration: none;
|
||||
}
|
||||
|
||||
i {
|
||||
width: 20px;
|
||||
margin: -3px ($sidebar-nav-link-padding-x / 2) 0 0;
|
||||
font-size: 10px;
|
||||
color: $sidebar-nav-link-icon-color;
|
||||
text-align: center;
|
||||
vertical-align: middle;
|
||||
}
|
||||
}
|
||||
|
||||
@if (lightness( $sidebar-bg ) < 40) {
|
||||
.progress {
|
||||
background-color: lighten($sidebar-bg, 15%) !important;
|
||||
}
|
||||
}
|
||||
|
||||
.sidebar-footer {
|
||||
flex: 0 0 $sidebar-footer-height;
|
||||
padding: $sidebar-footer-padding-y $sidebar-footer-padding-x;
|
||||
background: $sidebar-footer-bg;
|
||||
@include borders($sidebar-footer-borders);
|
||||
}
|
||||
|
||||
.sidebar-minimizer {
|
||||
position: relative;
|
||||
flex: 0 0 $sidebar-minimizer-height;
|
||||
background-color: $sidebar-minimizer-bg;
|
||||
border: 0;
|
||||
@include borders($sidebar-minimizer-borders);
|
||||
|
||||
&::before {
|
||||
position: absolute;
|
||||
top: 0;
|
||||
right: 0;
|
||||
width: $sidebar-minimizer-height;
|
||||
height: $sidebar-minimizer-height;
|
||||
content: "";
|
||||
background-image: $sidebar-minimizer-indicator;
|
||||
background-repeat: no-repeat;
|
||||
background-position: center;
|
||||
background-size: $sidebar-minimizer-height / 4;
|
||||
transition: .3s;
|
||||
}
|
||||
|
||||
&:focus,
|
||||
&.focus {
|
||||
outline: 0;
|
||||
}
|
||||
|
||||
&:hover {
|
||||
background-color: $sidebar-minimizer-hover-bg;
|
||||
&::before {
|
||||
background-image: $sidebar-minimizer-hover-indicator;
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@include media-breakpoint-up(lg) {
|
||||
.sidebar-compact {
|
||||
.sidebar {
|
||||
.sidebar-nav {
|
||||
@include sidebar-width($sidebar-borders, $sidebar-compact-width);
|
||||
}
|
||||
|
||||
.nav {
|
||||
@include sidebar-width($sidebar-borders, $sidebar-compact-width);
|
||||
|
||||
.nav-title {
|
||||
text-align: center;
|
||||
}
|
||||
|
||||
.nav-item {
|
||||
width: $sidebar-compact-width;
|
||||
border-left: 0 !important;
|
||||
|
||||
.nav-link {
|
||||
text-align: center;
|
||||
|
||||
i {
|
||||
display: block;
|
||||
width: 100%;
|
||||
margin: $spacer / 4 0;
|
||||
font-size: 24px;
|
||||
}
|
||||
|
||||
.badge {
|
||||
position: absolute;
|
||||
top: 18px;
|
||||
right: 10px;
|
||||
}
|
||||
|
||||
&.nav-dropdown-toggle {
|
||||
|
||||
&::before {
|
||||
top: 30px;
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
// Minimized Sidebar
|
||||
.sidebar-minimized {
|
||||
.hidden-cn {
|
||||
display: none;
|
||||
}
|
||||
.sidebar {
|
||||
z-index: $zindex-sticky - 1;
|
||||
|
||||
.sidebar-nav {
|
||||
overflow: visible;
|
||||
@include sidebar-width($sidebar-borders, $sidebar-minimized-width);
|
||||
}
|
||||
|
||||
.nav {
|
||||
@include sidebar-width($sidebar-borders, $sidebar-minimized-width);
|
||||
}
|
||||
|
||||
.nav-divider, .divider,
|
||||
.nav-title,
|
||||
.sidebar-footer,
|
||||
.sidebar-form,
|
||||
.sidebar-header {
|
||||
display: none;
|
||||
}
|
||||
|
||||
.sidebar-minimizer::before {
|
||||
width: 100%;
|
||||
transform: rotate(-180deg);
|
||||
}
|
||||
|
||||
.nav-item {
|
||||
width: $sidebar-minimized-width;
|
||||
overflow: hidden;
|
||||
border-left: 0 !important;
|
||||
|
||||
&:hover {
|
||||
width: $sidebar-width + $sidebar-minimized-width;
|
||||
overflow: visible;
|
||||
|
||||
> .nav-link {
|
||||
background: $sidebar-nav-link-hover-bg;
|
||||
|
||||
i {
|
||||
color: $sidebar-nav-link-hover-color;
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
.nav-link {
|
||||
position: relative;
|
||||
padding-left: 0;
|
||||
margin: 0;
|
||||
white-space: nowrap;
|
||||
border-left: 0 !important;
|
||||
|
||||
i {
|
||||
display: block;
|
||||
float: left;
|
||||
width: $sidebar-minimized-height;
|
||||
// padding: 0;
|
||||
// margin: 0 !important;
|
||||
font-size: 18px;
|
||||
}
|
||||
|
||||
.badge {
|
||||
position: absolute;
|
||||
right: 15px;
|
||||
display: none;
|
||||
}
|
||||
|
||||
&:hover {
|
||||
width: $sidebar-width + $sidebar-minimized-width;
|
||||
background: $sidebar-nav-link-hover-bg;
|
||||
|
||||
.badge {
|
||||
display: inline;
|
||||
}
|
||||
}
|
||||
|
||||
&.nav-dropdown-toggle::before {
|
||||
display: none;
|
||||
}
|
||||
}
|
||||
|
||||
.nav-dropdown-items {
|
||||
.nav-item {
|
||||
width: $sidebar-width;
|
||||
|
||||
.nav-link {
|
||||
width: $sidebar-width;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
.nav > .nav-dropdown {
|
||||
> .nav-dropdown-items {
|
||||
display: none;
|
||||
max-height: 1000px;
|
||||
background: $sidebar-bg;
|
||||
}
|
||||
|
||||
&:hover {
|
||||
background: $sidebar-nav-link-hover-bg;
|
||||
> .nav-dropdown-items {
|
||||
position: absolute;
|
||||
left: $sidebar-minimized-width;
|
||||
display: inline;
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,301 @@
|
||||
@mixin switch-size($width, $height, $font-size, $handle-margin) {
|
||||
width: $width;
|
||||
height: $height;
|
||||
|
||||
.switch-label {
|
||||
font-size: $font-size;
|
||||
}
|
||||
|
||||
.switch-handle {
|
||||
width: $height - $handle-margin * 2;
|
||||
height: $height - $handle-margin * 2;
|
||||
}
|
||||
|
||||
.switch-input:checked ~ .switch-handle {
|
||||
left: $width - $height + $handle-margin;
|
||||
}
|
||||
}
|
||||
|
||||
@mixin switch($type, $width, $height, $font-size, $handle-margin) {
|
||||
position: relative;
|
||||
display: inline-block;
|
||||
vertical-align: top;
|
||||
width: $width;
|
||||
height: $height;
|
||||
background-color: transparent;
|
||||
cursor: pointer;
|
||||
|
||||
.switch-input {
|
||||
position: absolute;
|
||||
top: 0;
|
||||
left: 0;
|
||||
opacity: 0;
|
||||
}
|
||||
|
||||
.switch-label {
|
||||
position: relative;
|
||||
display: block;
|
||||
height: inherit;
|
||||
@if $type == icon {
|
||||
font-family: FontAwesome;
|
||||
}
|
||||
font-size: $font-size;
|
||||
font-weight: 600;
|
||||
text-transform: uppercase;
|
||||
@if $type == ddd {
|
||||
background-color: $gray-100;
|
||||
} @else {
|
||||
background-color: #fff;
|
||||
}
|
||||
border: 1px solid $border-color;
|
||||
border-radius: 2px;
|
||||
transition: opacity background .15s ease-out;
|
||||
}
|
||||
@if $type == text or $type == icon {
|
||||
.switch-label::before,
|
||||
.switch-label::after {
|
||||
position: absolute;
|
||||
top: 50%;
|
||||
width: 50%;
|
||||
margin-top: -.5em;
|
||||
line-height: 1;
|
||||
text-align: center;
|
||||
transition: inherit;
|
||||
}
|
||||
.switch-label::before {
|
||||
right: 1px;
|
||||
color: $gray-200;
|
||||
content: attr(data-off);
|
||||
}
|
||||
.switch-label::after {
|
||||
left: 1px;
|
||||
color: #fff;
|
||||
content: attr(data-on);
|
||||
opacity: 0;
|
||||
}
|
||||
}
|
||||
.switch-input:checked ~ .switch-label {
|
||||
//background: $gray-lightest;
|
||||
}
|
||||
.switch-input:checked ~ .switch-label::before {
|
||||
opacity: 0;
|
||||
}
|
||||
.switch-input:checked ~ .switch-label::after {
|
||||
opacity: 1;
|
||||
}
|
||||
|
||||
.switch-handle {
|
||||
position: absolute;
|
||||
top: $handle-margin;
|
||||
left: $handle-margin;
|
||||
width: $height - $handle-margin * 2;
|
||||
height: $height - $handle-margin * 2;
|
||||
background: #fff;
|
||||
border: 1px solid $border-color;
|
||||
border-radius: 1px;
|
||||
transition: left .15s ease-out;
|
||||
@if $type == ddd {
|
||||
border: 0;
|
||||
box-shadow: 0 2px 5px rgba(0, 0, 0, .3);
|
||||
}
|
||||
}
|
||||
|
||||
.switch-input:checked ~ .switch-handle {
|
||||
left: $width - $height + $handle-margin;
|
||||
}
|
||||
|
||||
|
||||
@if $type == ddd {
|
||||
@extend .switch-pill;
|
||||
}
|
||||
|
||||
//size variations
|
||||
@if $type == default {
|
||||
|
||||
&.switch-lg {
|
||||
@include switch-size($switch-lg-width, $switch-lg-height, $switch-lg-font-size, $handle-margin);
|
||||
}
|
||||
&.switch-sm {
|
||||
@include switch-size($switch-sm-width, $switch-sm-height, $switch-sm-font-size, $handle-margin);
|
||||
}
|
||||
&.switch-xs {
|
||||
@include switch-size($switch-xs-width, $switch-xs-height, $switch-xs-font-size, $handle-margin);
|
||||
}
|
||||
|
||||
} @else if $type == text {
|
||||
|
||||
&.switch-lg {
|
||||
@include switch-size($switch-text-lg-width, $switch-text-lg-height, $switch-text-lg-font-size, $handle-margin);
|
||||
}
|
||||
&.switch-sm {
|
||||
@include switch-size($switch-text-sm-width, $switch-text-sm-height, $switch-text-sm-font-size, $handle-margin);
|
||||
}
|
||||
&.switch-xs {
|
||||
@include switch-size($switch-text-xs-width, $switch-text-xs-height, $switch-text-xs-font-size, $handle-margin);
|
||||
}
|
||||
|
||||
} @else if $type == icon {
|
||||
|
||||
&.switch-lg {
|
||||
@include switch-size($switch-icon-lg-width, $switch-icon-lg-height, $switch-icon-lg-font-size, $handle-margin);
|
||||
}
|
||||
&.switch-sm {
|
||||
@include switch-size($switch-icon-sm-width, $switch-icon-sm-height, $switch-icon-sm-font-size, $handle-margin);
|
||||
}
|
||||
&.switch-xs {
|
||||
@include switch-size($switch-icon-xs-width, $switch-icon-xs-height, $switch-icon-xs-font-size, $handle-margin);
|
||||
}
|
||||
|
||||
} @else if $type == ddd {
|
||||
|
||||
&.switch-lg {
|
||||
@include switch-size($switch-lg-width, $switch-lg-height, $switch-lg-font-size, 0);
|
||||
}
|
||||
&.switch-sm {
|
||||
@include switch-size($switch-sm-width, $switch-sm-height, $switch-sm-font-size, 0);
|
||||
}
|
||||
&.switch-xs {
|
||||
@include switch-size($switch-xs-width, $switch-xs-height, $switch-xs-font-size, 0);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@mixin switch-variant($color) {
|
||||
> .switch-input:checked ~ .switch-label {
|
||||
background: $color !important;
|
||||
border-color: darken($color,10%);
|
||||
}
|
||||
|
||||
> .switch-input:checked ~ .switch-handle {
|
||||
border-color: darken($color,10%);
|
||||
}
|
||||
}
|
||||
|
||||
@mixin switch-outline-variant($color) {
|
||||
> .switch-input:checked ~ .switch-label {
|
||||
background: #fff !important;
|
||||
border-color: $color;
|
||||
|
||||
&::after {
|
||||
color: $color;
|
||||
}
|
||||
}
|
||||
|
||||
> .switch-input:checked ~ .switch-handle {
|
||||
border-color: $color;
|
||||
}
|
||||
}
|
||||
|
||||
@mixin switch-outline-alt-variant($color) {
|
||||
> .switch-input:checked ~ .switch-label {
|
||||
background: #fff !important;
|
||||
border-color: $color;
|
||||
|
||||
&::after {
|
||||
color: $color;
|
||||
}
|
||||
}
|
||||
|
||||
> .switch-input:checked ~ .switch-handle {
|
||||
background: $color !important;
|
||||
border-color: $color;
|
||||
}
|
||||
}
|
||||
|
||||
$switch-lg-width: 48px;
|
||||
$switch-lg-height: 28px;
|
||||
$switch-lg-font-size: 12px;
|
||||
|
||||
$switch-width: 40px;
|
||||
$switch-height: 24px;
|
||||
$switch-font-size: 10px;
|
||||
|
||||
$handle-margin: 2px;
|
||||
|
||||
$switch-sm-width: 32px;
|
||||
$switch-sm-height: 20px;
|
||||
$switch-sm-font-size: 8px;
|
||||
|
||||
$switch-xs-width: 24px;
|
||||
$switch-xs-height: 16px;
|
||||
$switch-xs-font-size: 7px;
|
||||
|
||||
|
||||
$switch-text-lg-width: 56px;
|
||||
$switch-text-lg-height: 28px;
|
||||
$switch-text-lg-font-size: 12px;
|
||||
|
||||
$switch-text-width: 48px;
|
||||
$switch-text-height: 24px;
|
||||
$switch-text-font-size: 10px;
|
||||
|
||||
$switch-text-sm-width: 40px;
|
||||
$switch-text-sm-height: 20px;
|
||||
$switch-text-sm-font-size: 8px;
|
||||
|
||||
$switch-text-xs-width: 32px;
|
||||
$switch-text-xs-height: 16px;
|
||||
$switch-text-xs-font-size: 7px;
|
||||
|
||||
|
||||
$switch-icon-lg-width: 56px;
|
||||
$switch-icon-lg-height: 28px;
|
||||
$switch-icon-lg-font-size: 12px;
|
||||
|
||||
$switch-icon-width: 48px;
|
||||
$switch-icon-height: 24px;
|
||||
$switch-icon-font-size: 10px;
|
||||
|
||||
$switch-icon-sm-width: 40px;
|
||||
$switch-icon-sm-height: 20px;
|
||||
$switch-icon-sm-font-size: 8px;
|
||||
|
||||
$switch-icon-xs-width: 32px;
|
||||
$switch-icon-xs-height: 16px;
|
||||
$switch-icon-xs-font-size: 7px;
|
||||
|
||||
.switch.switch-default {
|
||||
@include switch('default', $switch-width, $switch-height, $switch-font-size, $handle-margin);
|
||||
}
|
||||
|
||||
.switch.switch-text {
|
||||
@include switch('text', $switch-text-width, $switch-text-height, $switch-text-font-size, $handle-margin);
|
||||
}
|
||||
|
||||
.switch.switch-icon {
|
||||
@include switch('icon', $switch-icon-width, $switch-icon-height, $switch-icon-font-size, $handle-margin);
|
||||
}
|
||||
|
||||
.switch.switch-3d {
|
||||
@include switch('ddd', $switch-width, $switch-height, $switch-font-size, 0);
|
||||
}
|
||||
|
||||
//pills style
|
||||
.switch-pill {
|
||||
.switch-label,
|
||||
.switch-handle {
|
||||
border-radius: 50em !important;
|
||||
}
|
||||
|
||||
.switch-label::before {
|
||||
right: 2px !important;
|
||||
}
|
||||
.switch-label::after {
|
||||
left: 2px !important;
|
||||
}
|
||||
}
|
||||
|
||||
@each $color, $value in $theme-colors {
|
||||
//normal style
|
||||
.switch-#{$color} {
|
||||
@include switch-variant($value);
|
||||
}
|
||||
//outline style
|
||||
.switch-#{$color}-outline {
|
||||
@include switch-outline-variant($value);
|
||||
}
|
||||
//outline alternative style
|
||||
.switch-#{$color}-outline-alt {
|
||||
@include switch-outline-alt-variant($value);
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,20 @@
|
||||
.table-outline {
|
||||
border: 1px solid $table-border-color;
|
||||
|
||||
td {
|
||||
vertical-align: middle;
|
||||
}
|
||||
}
|
||||
|
||||
.table-align-middle {
|
||||
|
||||
td {
|
||||
vertical-align: middle;
|
||||
}
|
||||
}
|
||||
|
||||
.table-clear {
|
||||
td {
|
||||
border: 0;
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,37 @@
|
||||
.pagination-datatables, .pagination {
|
||||
li {
|
||||
@extend .page-item;
|
||||
|
||||
a {
|
||||
@extend .page-link;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
.label-pill {
|
||||
border-radius: 1rem !important;
|
||||
}
|
||||
|
||||
// temp fix for Vue & React
|
||||
|
||||
// Open state for the dropdown
|
||||
.open, .show {
|
||||
// Remove the outline when :focus is triggered
|
||||
> a {
|
||||
outline: 0;
|
||||
}
|
||||
}
|
||||
|
||||
// navbar dropdown fix
|
||||
.navbar .dropdown-toggle {
|
||||
@extend .nav-link;
|
||||
|
||||
.img-avatar {
|
||||
height: $navbar-height - 20px;
|
||||
margin: 0 10px;
|
||||
}
|
||||
}
|
||||
|
||||
.card-block {
|
||||
@extend .card-body;
|
||||
}
|
||||
@@ -0,0 +1,36 @@
|
||||
body {
|
||||
-moz-osx-font-smoothing: grayscale;
|
||||
-webkit-font-smoothing: antialiased;
|
||||
}
|
||||
|
||||
.font-xs {
|
||||
font-size: .75rem !important;
|
||||
}
|
||||
|
||||
.font-sm {
|
||||
font-size: .85rem !important;
|
||||
}
|
||||
|
||||
.font-lg {
|
||||
font-size: 1rem !important;
|
||||
}
|
||||
|
||||
.font-xl {
|
||||
font-size: 1.25rem !important;
|
||||
}
|
||||
|
||||
.font-2xl {
|
||||
font-size: 1.5rem !important;
|
||||
}
|
||||
|
||||
.font-3xl {
|
||||
font-size: 1.75rem !important;
|
||||
}
|
||||
|
||||
.font-4xl {
|
||||
font-size: 2rem !important;
|
||||
}
|
||||
|
||||
.font-5xl {
|
||||
font-size: 2.5rem !important;
|
||||
}
|
||||
@@ -0,0 +1,3 @@
|
||||
@import "utilities/background";
|
||||
@import "utilities/borders";
|
||||
@import "utilities/display";
|
||||
@@ -0,0 +1,219 @@
|
||||
// scss-lint:disable all
|
||||
// Core Admin Variables
|
||||
|
||||
$enable-sidebar-nav-rounded: false !default;
|
||||
|
||||
$border-color: $gray-200 !default;
|
||||
$layout-transition-speed: .25s !default;
|
||||
|
||||
// Social Colors
|
||||
|
||||
$facebook: #3b5998 !default;
|
||||
$twitter: #00aced !default;
|
||||
$linkedin: #4875b4 !default;
|
||||
$google-plus: #d34836 !default;
|
||||
$flickr: #ff0084 !default;
|
||||
$tumblr: #32506d !default;
|
||||
$xing: #026466 !default;
|
||||
$github: #4183c4 !default;
|
||||
$html5: #e34f26 !default;
|
||||
$openid: #f78c40 !default;
|
||||
$stack-overflow: #fe7a15 !default;
|
||||
$youtube: #b00 !default;
|
||||
$css3: #0170ba !default;
|
||||
$dribbble: #ea4c89 !default;
|
||||
$google-plus: #bb4b39 !default;
|
||||
$instagram: #517fa4 !default;
|
||||
$pinterest: #cb2027 !default;
|
||||
$vk: #45668e !default;
|
||||
$yahoo: #400191 !default;
|
||||
$behance: #1769ff !default;
|
||||
$dropbox: #007ee5 !default;
|
||||
$reddit: #ff4500 !default;
|
||||
$spotify: #7ab800 !default;
|
||||
$vine: #00bf8f !default;
|
||||
$foursquare: #1073af !default;
|
||||
$vimeo: #aad450 !default;
|
||||
|
||||
// Navbar
|
||||
|
||||
$navbar-height: 55px !default;
|
||||
$navbar-bg: #fff !default;
|
||||
$navbar-border: (
|
||||
bottom: (
|
||||
size: 1px,
|
||||
style: solid,
|
||||
color: $border-color
|
||||
)
|
||||
) !default;
|
||||
$navbar-brand-width: 155px !default;
|
||||
$navbar-brand-bg: #fff !default;
|
||||
$navbar-brand-logo: url('../img/logo.png') !default;
|
||||
$navbar-brand-logo-size: 70px auto !default;
|
||||
$navbar-brand-border: (
|
||||
bottom: (
|
||||
size: 1px,
|
||||
style: solid,
|
||||
color: $border-color
|
||||
)
|
||||
) !default;
|
||||
|
||||
$navbar-brand-minimized-width: 50px !default;
|
||||
$navbar-brand-minimized-bg: $navbar-brand-bg !default;
|
||||
$navbar-brand-minimized-logo: url('../img/logo-symbol.png') !default;
|
||||
$navbar-brand-minimized-logo-size: 24px !default;
|
||||
$navbar-brand-minimized-border: $navbar-brand-border !default;
|
||||
|
||||
$navbar-color: $gray-600 !default;
|
||||
$navbar-hover-color: $gray-800 !default;
|
||||
$navbar-active-color: $gray-800 !default;
|
||||
$navbar-disabled-color: $gray-300 !default;
|
||||
|
||||
$navbar-toggler-icon: 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-color}' stroke-width='2.25' stroke-linecap='round' stroke-miterlimit='10' d='M4 7h22M4 15h22M4 23h22'/%3E%3C/svg%3E"), "#", "%23") !default;
|
||||
$navbar-toggler-icon-hover: 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-hover-color}' stroke-width='2.25' stroke-linecap='round' stroke-miterlimit='10' d='M4 7h22M4 15h22M4 23h22'/%3E%3C/svg%3E"), "#", "%23") !default;
|
||||
|
||||
// Sidebar
|
||||
|
||||
$sidebar-width: 200px !default;
|
||||
$sidebar-padding: 0 !default;
|
||||
$sidebar-minimized-width: 50px !default;
|
||||
$sidebar-minimized-height: $sidebar-minimized-width !default;
|
||||
$sidebar-compact-width: 150px !default;
|
||||
$sidebar-compact-height: $sidebar-compact-width !default;
|
||||
$sidebar-color: #fff !default;
|
||||
$sidebar-bg: $gray-800 !default;
|
||||
$sidebar-borders: none !default;
|
||||
$mobile-sidebar-width: 220px !default;
|
||||
|
||||
// Sidebar Header
|
||||
|
||||
$sidebar-header-height: auto !default;
|
||||
$sidebar-header-bg: rgba(0,0,0,.2) !default;
|
||||
$sidebar-header-padding-y: .75rem !default;
|
||||
$sidebar-header-padding-x: 1rem !default;
|
||||
|
||||
// Sidebar Form
|
||||
|
||||
$sidebar-form-border: 0 !default;
|
||||
$sidebar-form-bg: darken($sidebar-bg,10%) !default;
|
||||
$sidebar-form-color: #fff !default;
|
||||
$sidebar-form-placeholder-color: rgba(255,255,255,.7) !default;
|
||||
|
||||
// Sidebar Navigation
|
||||
|
||||
$sidebar-nav-color: #fff !default;
|
||||
$sidebar-nav-title-padding-y: .75rem !default;
|
||||
$sidebar-nav-title-padding-x: 1rem !default;
|
||||
$sidebar-nav-title-color: $gray-200 !default;
|
||||
$sidebar-nav-link-padding-y: .75rem !default;
|
||||
$sidebar-nav-link-padding-x: 1rem !default;
|
||||
$sidebar-nav-link-color: #fff !default;
|
||||
$sidebar-nav-link-bg: transparent !default;
|
||||
$sidebar-nav-link-icon-color: $gray-600 !default;
|
||||
$sidebar-nav-link-borders: 0 !default;
|
||||
|
||||
$sidebar-nav-link-hover-color: #fff !default;
|
||||
$sidebar-nav-link-hover-bg: theme-color("primary") !default;
|
||||
$sidebar-nav-link-hover-icon-color: #fff !default;
|
||||
$sidebar-nav-link-hover-borders: 0 !default;
|
||||
|
||||
$sidebar-nav-link-active-color: #fff !default;
|
||||
$sidebar-nav-link-active-bg: lighten($sidebar-bg, 5%) !default;
|
||||
$sidebar-nav-link-active-icon-color: theme-color("primary") !default;
|
||||
$sidebar-nav-link-active-borders: 0 !default;
|
||||
|
||||
$sidebar-nav-dropdown-color: #fff !default;
|
||||
$sidebar-nav-dropdown-bg: rgba(0,0,0,.2) !default;
|
||||
$sidebar-nav-dropdown-borders: 0 !default;
|
||||
$sidebar-nav-dropdown-indicator-color:$gray-600 !default;
|
||||
$sidebar-nav-dropdown-indicator: str-replace(url("data:image/svg+xml;charset=utf8,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 11 14'%3E%3Cpath fill='#{$sidebar-nav-dropdown-indicator-color}' d='M9.148 2.352l-4.148 4.148 4.148 4.148q0.148 0.148 0.148 0.352t-0.148 0.352l-1.297 1.297q-0.148 0.148-0.352 0.148t-0.352-0.148l-5.797-5.797q-0.148-0.148-0.148-0.352t0.148-0.352l5.797-5.797q0.148-0.148 0.352-0.148t0.352 0.148l1.297 1.297q0.148 0.148 0.148 0.352t-0.148 0.352z'/%3E%3C/svg%3E"), "#", "%23") !default;
|
||||
$sidebar-nav-dropdown-indicator-hover-color:$sidebar-nav-link-hover-color;
|
||||
$sidebar-nav-dropdown-indicator-hover:str-replace(url("data:image/svg+xml;charset=utf8,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 11 14'%3E%3Cpath fill='#{$sidebar-nav-dropdown-indicator-hover-color}' d='M9.148 2.352l-4.148 4.148 4.148 4.148q0.148 0.148 0.148 0.352t-0.148 0.352l-1.297 1.297q-0.148 0.148-0.352 0.148t-0.352-0.148l-5.797-5.797q-0.148-0.148-0.148-0.352t0.148-0.352l5.797-5.797q0.148-0.148 0.352-0.148t0.352 0.148l1.297 1.297q0.148 0.148 0.148 0.352t-0.148 0.352z'/%3E%3C/svg%3E"), "#", "%23") !default;
|
||||
|
||||
// Sidebar Footer
|
||||
|
||||
$sidebar-footer-height: auto !default;
|
||||
$sidebar-footer-bg: rgba(0,0,0,.2) !default;
|
||||
$sidebar-footer-padding-y: .75rem !default;
|
||||
$sidebar-footer-padding-x: 1rem !default;
|
||||
$sidebar-footer-borders: 0 !default;
|
||||
|
||||
// Sidebar Minimizer
|
||||
|
||||
$sidebar-minimizer-height: 50px !default;
|
||||
$sidebar-minimizer-bg: rgba(0,0,0,.2) !default;
|
||||
$sidebar-minimizer-borders: 0 !default;
|
||||
$sidebar-minimizer-indicator-color: $gray-600 !default;
|
||||
$sidebar-minimizer-indicator: str-replace(url("data:image/svg+xml;charset=utf8,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 11 14'%3E%3Cpath fill='#{$sidebar-minimizer-indicator-color}' d='M9.148 2.352l-4.148 4.148 4.148 4.148q0.148 0.148 0.148 0.352t-0.148 0.352l-1.297 1.297q-0.148 0.148-0.352 0.148t-0.352-0.148l-5.797-5.797q-0.148-0.148-0.148-0.352t0.148-0.352l5.797-5.797q0.148-0.148 0.352-0.148t0.352 0.148l1.297 1.297q0.148 0.148 0.148 0.352t-0.148 0.352z'/%3E%3C/svg%3E"), "#", "%23") !default;
|
||||
$sidebar-minimizer-hover-bg: rgba(0,0,0,.3) !default;
|
||||
$sidebar-minimizer-hover-indicator-color:$sidebar-nav-link-hover-color !default;
|
||||
$sidebar-minimizer-hover-indicator: str-replace(url("data:image/svg+xml;charset=utf8,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 11 14'%3E%3Cpath fill='#{$sidebar-minimizer-hover-indicator-color}' d='M9.148 2.352l-4.148 4.148 4.148 4.148q0.148 0.148 0.148 0.352t-0.148 0.352l-1.297 1.297q-0.148 0.148-0.352 0.148t-0.352-0.148l-5.797-5.797q-0.148-0.148-0.148-0.352t0.148-0.352l5.797-5.797q0.148-0.148 0.352-0.148t0.352 0.148l1.297 1.297q0.148 0.148 0.148 0.352t-0.148 0.352z'/%3E%3C/svg%3E"), "#", "%23") !default;
|
||||
|
||||
|
||||
// Top Navigation
|
||||
|
||||
$top-nav-bg: #fff !default;
|
||||
$top-nav-color: $body-color !default;
|
||||
$top-nav-borders: (
|
||||
bottom: (
|
||||
size: 1px,
|
||||
style: solid,
|
||||
color: $border-color
|
||||
)
|
||||
) !default;
|
||||
$top-nav-ul-borders: (
|
||||
all: (
|
||||
size: 1px,
|
||||
style: solid,
|
||||
color: $border-color
|
||||
)
|
||||
) !default;
|
||||
|
||||
$top-nav-hover-color: #fff !default;
|
||||
$top-nav-hover-bg: theme-color("primary") !default;
|
||||
$top-nav-active-color: #fff !default;
|
||||
$top-nav-active-bg: theme-color("primary") !default;
|
||||
$top-nav-height: $navbar-height - 15px !default;
|
||||
|
||||
// Breadcrumb
|
||||
$breadcrumb-borders: (
|
||||
bottom: (
|
||||
size: 1px,
|
||||
style: solid,
|
||||
color: $border-color
|
||||
)
|
||||
) !default;
|
||||
|
||||
// Aside
|
||||
|
||||
$aside-menu-width: 250px !default;
|
||||
$aside-menu-color: $gray-800 !default;
|
||||
$aside-menu-bg: #fff !default;
|
||||
$aside-menu-borders: (
|
||||
left: (
|
||||
size: 1px,
|
||||
style: solid,
|
||||
color: $border-color
|
||||
)
|
||||
) !default;
|
||||
|
||||
$aside-menu-nav-padding-y: .75rem !default;
|
||||
$aside-menu-nav-padding-x: 1rem !default;
|
||||
|
||||
// Footer
|
||||
|
||||
$footer-height: 50px !default;
|
||||
$footer-bg: $gray-100 !default;
|
||||
$footer-color: $body-color !default;
|
||||
$footer-borders: (
|
||||
top: (
|
||||
size: 1px,
|
||||
style: solid,
|
||||
color: $border-color
|
||||
)
|
||||
) !default;
|
||||
|
||||
// Cards
|
||||
|
||||
$card-icon-bg: transparent !default;
|
||||
$card-icon-color: $body-color !default;
|
||||
@@ -0,0 +1,253 @@
|
||||
// .social-box
|
||||
.social-box {
|
||||
min-height: 160px;
|
||||
margin-bottom: 2 * $card-spacer-y;
|
||||
text-align: center;
|
||||
background: #fff;
|
||||
border: $card-border-width solid $card-border-color;
|
||||
@include border-radius($card-border-radius);
|
||||
|
||||
i {
|
||||
display: block;
|
||||
margin: -1px -1px 0;
|
||||
font-size: 40px;
|
||||
line-height: 90px;
|
||||
background: $gray-200;
|
||||
|
||||
@include border-radius($card-border-radius $card-border-radius 0 0);
|
||||
}
|
||||
|
||||
.chart-wrapper {
|
||||
height: 90px;
|
||||
margin: -90px 0 0;
|
||||
|
||||
canvas {
|
||||
width: 100% !important;
|
||||
height: 90px !important;
|
||||
}
|
||||
}
|
||||
|
||||
ul {
|
||||
padding: 10px 0;
|
||||
list-style: none;
|
||||
|
||||
|
||||
li {
|
||||
display: block;
|
||||
float: left;
|
||||
width: 50%;
|
||||
|
||||
&:first-child {
|
||||
border-right: 1px solid $border-color;
|
||||
}
|
||||
|
||||
strong {
|
||||
display: block;
|
||||
font-size: 20px;
|
||||
}
|
||||
|
||||
span {
|
||||
font-size: 10px;
|
||||
font-weight: 500;
|
||||
color: $border-color;
|
||||
text-transform: uppercase;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
&.facebook {
|
||||
i {
|
||||
color: #fff;
|
||||
background: $facebook;
|
||||
}
|
||||
}
|
||||
|
||||
&.twitter {
|
||||
i {
|
||||
color: #fff;
|
||||
background: $twitter;
|
||||
}
|
||||
}
|
||||
|
||||
&.linkedin {
|
||||
i {
|
||||
color: #fff;
|
||||
background: $linkedin;
|
||||
}
|
||||
}
|
||||
|
||||
&.google-plus {
|
||||
i {
|
||||
color: #fff;
|
||||
background: $google-plus;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
.horizontal-bars {
|
||||
padding: 0;
|
||||
margin: 0;
|
||||
list-style: none;
|
||||
|
||||
li {
|
||||
position: relative;
|
||||
height: 40px;
|
||||
line-height: 40px;
|
||||
vertical-align: middle;
|
||||
|
||||
.title {
|
||||
width: 100px;
|
||||
font-size: 12px;
|
||||
font-weight: 600;
|
||||
color: $text-muted;
|
||||
vertical-align: middle;
|
||||
}
|
||||
|
||||
.bars {
|
||||
position: absolute;
|
||||
top: 15px;
|
||||
width: 100%;
|
||||
padding-left: 100px;
|
||||
|
||||
.progress:first-child {
|
||||
margin-bottom: 2px;
|
||||
}
|
||||
}
|
||||
|
||||
&.legend {
|
||||
text-align: center;
|
||||
|
||||
.badge {
|
||||
display: inline-block;
|
||||
width: 8px;
|
||||
height: 8px;
|
||||
padding: 0;
|
||||
}
|
||||
}
|
||||
|
||||
&.divider {
|
||||
height: 40px;
|
||||
|
||||
i {
|
||||
margin: 0 !important;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
&.type-2 {
|
||||
|
||||
li {
|
||||
overflow: hidden;
|
||||
|
||||
i {
|
||||
display: inline-block;
|
||||
margin-right: $spacer;
|
||||
margin-left: 5px;
|
||||
font-size: 18px;
|
||||
line-height: 40px;
|
||||
}
|
||||
|
||||
.title {
|
||||
display: inline-block;
|
||||
width: auto;
|
||||
margin-top: -9px;
|
||||
font-size: $font-size-base;
|
||||
font-weight: normal;
|
||||
line-height: 40px;
|
||||
color: $body-color;
|
||||
}
|
||||
|
||||
.value {
|
||||
float: right;
|
||||
font-weight: 600;
|
||||
}
|
||||
|
||||
.bars {
|
||||
position: absolute;
|
||||
top: auto;
|
||||
bottom: 0;
|
||||
padding: 0;
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
.icons-list {
|
||||
padding: 0;
|
||||
margin: 0;
|
||||
list-style: none;
|
||||
|
||||
li {
|
||||
position: relative;
|
||||
height: 40px;
|
||||
vertical-align: middle;
|
||||
|
||||
i {
|
||||
display: block;
|
||||
float: left;
|
||||
width: 35px !important;
|
||||
height: 35px !important;
|
||||
margin: 2px;
|
||||
line-height: 35px !important;
|
||||
text-align: center;
|
||||
}
|
||||
|
||||
.desc {
|
||||
height: 40px;
|
||||
margin-left: 50px;
|
||||
border-bottom: 1px solid $border-color;
|
||||
|
||||
.title {
|
||||
padding: 2px 0 0;
|
||||
margin: 0;
|
||||
}
|
||||
small {
|
||||
display: block;
|
||||
margin-top: -4px;
|
||||
color: $text-muted;
|
||||
}
|
||||
}
|
||||
|
||||
.value {
|
||||
position: absolute;
|
||||
top: 2px;
|
||||
right: 45px;
|
||||
text-align: right;
|
||||
|
||||
strong {
|
||||
display: block;
|
||||
margin-top: -3px;
|
||||
}
|
||||
}
|
||||
|
||||
.actions {
|
||||
position: absolute;
|
||||
top: -4px;
|
||||
right: 10px;
|
||||
width: 40px;
|
||||
height: 40px;
|
||||
line-height: 40px;
|
||||
text-align: center;
|
||||
|
||||
i {
|
||||
float: none;
|
||||
width: auto;
|
||||
height: auto;
|
||||
padding: 0;
|
||||
margin: 0;
|
||||
line-height: normal;
|
||||
}
|
||||
}
|
||||
|
||||
&.divider {
|
||||
height: 40px;
|
||||
|
||||
i {
|
||||
width: auto;
|
||||
height: auto;
|
||||
margin: 2px 0 0;
|
||||
font-size: 18px;
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,47 @@
|
||||
// Import core styles
|
||||
@import "variables";
|
||||
@import "mixins";
|
||||
|
||||
// Additional typography
|
||||
@import "typography";
|
||||
|
||||
// Animations
|
||||
@import "animate";
|
||||
|
||||
// Components
|
||||
@import "aside";
|
||||
@import "avatars";
|
||||
@import "badge";
|
||||
@import "breadcrumb-menu";
|
||||
@import "breadcrumb";
|
||||
@import "buttons";
|
||||
@import "callout";
|
||||
@import "card";
|
||||
@import "charts";
|
||||
@import "dropdown";
|
||||
@import "footer";
|
||||
@import "grid";
|
||||
@import "input-group";
|
||||
@import "loading";
|
||||
@import "modal";
|
||||
@import "nav";
|
||||
@import "navbar";
|
||||
@import "progress";
|
||||
@import "sidebar";
|
||||
@import "switches";
|
||||
@import "tables";
|
||||
@import "widgets";
|
||||
|
||||
// Layout Options
|
||||
@import "layout";
|
||||
|
||||
@import "others";
|
||||
|
||||
// Utility classes
|
||||
@import "utilities";
|
||||
|
||||
// Temporary fixes
|
||||
@import "temp";
|
||||
|
||||
// Right-to-left
|
||||
@import "rtl";
|
||||
@@ -0,0 +1,8 @@
|
||||
.bg-primary,
|
||||
.bg-success,
|
||||
.bg-info,
|
||||
.bg-warning,
|
||||
.bg-danger,
|
||||
.bg-inverse {
|
||||
color: #fff;
|
||||
}
|
||||
@@ -0,0 +1,18 @@
|
||||
//border
|
||||
@each $prop, $abbrev in (border: b) {
|
||||
@each $size in (0,1,2) {
|
||||
@if $size == 0 {
|
||||
.#{$abbrev}-a-#{$size} { #{$prop}: 0 !important; } // a = All sides
|
||||
.#{$abbrev}-t-#{$size} { #{$prop}-top: 0 !important; }
|
||||
.#{$abbrev}-r-#{$size} { #{$prop}-right: 0 !important; }
|
||||
.#{$abbrev}-b-#{$size} { #{$prop}-bottom: 0 !important; }
|
||||
.#{$abbrev}-l-#{$size} { #{$prop}-left: 0 !important; }
|
||||
} @else {
|
||||
.#{$abbrev}-a-#{$size} { #{$prop}: $size * $border-width solid $border-color !important; } // a = All sides
|
||||
.#{$abbrev}-t-#{$size} { #{$prop}-top: $size * $border-width solid $border-color !important; }
|
||||
.#{$abbrev}-r-#{$size} { #{$prop}-right: $size * $border-width solid $border-color !important; }
|
||||
.#{$abbrev}-b-#{$size} { #{$prop}-bottom: $size * $border-width solid $border-color !important; }
|
||||
.#{$abbrev}-l-#{$size} { #{$prop}-left: $size * $border-width solid $border-color !important; }
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,18 @@
|
||||
//
|
||||
// Utilities for common `display` values
|
||||
//
|
||||
|
||||
@each $breakpoint in map-keys($grid-breakpoints) {
|
||||
@include media-breakpoint-down($breakpoint) {
|
||||
$infix: breakpoint-infix($breakpoint, $grid-breakpoints);
|
||||
|
||||
.d#{$infix}-down-none { display: none !important; }
|
||||
// .d#{$infix}-inline { display: inline !important; }
|
||||
// .d#{$infix}-inline-block { display: inline-block !important; }
|
||||
// .d#{$infix}-block { display: block !important; }
|
||||
// .d#{$infix}-table { display: table !important; }
|
||||
// .d#{$infix}-table-cell { display: table-cell !important; }
|
||||
// .d#{$infix}-flex { display: flex !important; }
|
||||
// .d#{$infix}-inline-flex { display: inline-flex !important; }
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,22 @@
|
||||
/*!
|
||||
* CoreUI - Open Source Bootstrap Admin Template
|
||||
* @version v1.0.10
|
||||
* @link http://coreui.io
|
||||
* Copyright (c) 2018 creativeLabs Łukasz Holeczek
|
||||
* @license MIT
|
||||
*/
|
||||
|
||||
// Override Boostrap variables
|
||||
@import "bootstrap-variables";
|
||||
|
||||
// Import Bootstrap source files
|
||||
@import "node_modules/bootstrap/scss/bootstrap";
|
||||
|
||||
// Override core variables
|
||||
@import "core-variables";
|
||||
|
||||
// Import core styles
|
||||
@import "core/core";
|
||||
|
||||
// Custom styles
|
||||
@import "custom";
|
||||
@@ -0,0 +1,6 @@
|
||||
@import "node_modules/bootstrap/scss/functions";
|
||||
@import "../bootstrap-variables";
|
||||
@import "node_modules/bootstrap/scss/variables";
|
||||
@import "node_modules/bootstrap/scss/mixins";
|
||||
@import "../core-variables";
|
||||
@import "../core/variables";
|
||||
@@ -0,0 +1,48 @@
|
||||
// Import variables
|
||||
@import '../variables';
|
||||
|
||||
.chart-legend,
|
||||
.bar-legend,
|
||||
.line-legend,
|
||||
.pie-legend,
|
||||
.radar-legend,
|
||||
.polararea-legend,
|
||||
.doughnut-legend {
|
||||
list-style-type: none;
|
||||
margin-top: 5px;
|
||||
text-align: center;
|
||||
-webkit-padding-start: 0;
|
||||
-moz-padding-start: 0;
|
||||
padding-left: 0;
|
||||
}
|
||||
.chart-legend li,
|
||||
.bar-legend li,
|
||||
.line-legend li,
|
||||
.pie-legend li,
|
||||
.radar-legend li,
|
||||
.polararea-legend li,
|
||||
.doughnut-legend li {
|
||||
display: inline-block;
|
||||
white-space: nowrap;
|
||||
position: relative;
|
||||
margin-bottom: 4px;
|
||||
@include border-radius($border-radius);
|
||||
padding: 2px 8px 2px 28px;
|
||||
font-size: smaller;
|
||||
cursor: default;
|
||||
}
|
||||
.chart-legend li span,
|
||||
.bar-legend li span,
|
||||
.line-legend li span,
|
||||
.pie-legend li span,
|
||||
.radar-legend li span,
|
||||
.polararea-legend li span,
|
||||
.doughnut-legend li span {
|
||||
display: block;
|
||||
position: absolute;
|
||||
left: 0;
|
||||
top: 0;
|
||||
width: 20px;
|
||||
height: 20px;
|
||||
@include border-radius($border-radius);
|
||||
}
|
||||
@@ -0,0 +1,24 @@
|
||||
<template>
|
||||
<router-view></router-view>
|
||||
</template>
|
||||
|
||||
<script>
|
||||
export default {
|
||||
name: 'app'
|
||||
}
|
||||
</script>
|
||||
|
||||
<style>
|
||||
/* Import Font Awesome Icons Set */
|
||||
$fa-font-path: '~font-awesome/fonts/';
|
||||
@import '~font-awesome/css/font-awesome.min.css';
|
||||
/* Import Simple Line Icons Set */
|
||||
$simple-line-font-path: '~simple-line-icons/fonts/';
|
||||
@import '~simple-line-icons/css/simple-line-icons.css';
|
||||
/* Import Bootstrap Vue Styles */
|
||||
@import '~bootstrap-vue/dist/bootstrap-vue.css';
|
||||
</style>
|
||||
<style lang="scss">
|
||||
// Import Main styles for this application
|
||||
@import './scss/style';
|
||||
</style>
|
||||
@@ -0,0 +1,9 @@
|
||||
export default {
|
||||
items: [
|
||||
{
|
||||
name: 'Dashboard',
|
||||
url: '/dashboard',
|
||||
icon: 'icon-speedometer'
|
||||
}
|
||||
]
|
||||
}
|
||||
|
After Width: | Height: | Size: 6.7 KiB |
@@ -0,0 +1,11 @@
|
||||
<template>
|
||||
<aside class="aside-menu">
|
||||
|
||||
</aside>
|
||||
</template>
|
||||
|
||||
<script>
|
||||
export default {
|
||||
name: 'c-aside'
|
||||
}
|
||||
</script>
|
||||
@@ -0,0 +1,34 @@
|
||||
<template>
|
||||
<ol class="breadcrumb">
|
||||
<li class="breadcrumb-item" v-for="(item, index) in list">
|
||||
<span class="active" v-if="isLast(index)">{{ showName(item) }}</span>
|
||||
<router-link :to="item" v-else>{{ showName(item) }}</router-link>
|
||||
</li>
|
||||
</ol>
|
||||
</template>
|
||||
|
||||
<script>
|
||||
export default {
|
||||
props: {
|
||||
list: {
|
||||
type: Array,
|
||||
required: true,
|
||||
default: () => []
|
||||
}
|
||||
},
|
||||
methods: {
|
||||
isLast (index) {
|
||||
return index === this.list.length - 1
|
||||
},
|
||||
showName (item) {
|
||||
if (item.meta && item.meta.label) {
|
||||
item = item.meta && item.meta.label
|
||||
}
|
||||
if (item.name) {
|
||||
item = item.name
|
||||
}
|
||||
return item
|
||||
}
|
||||
}
|
||||
}
|
||||
</script>
|
||||
@@ -0,0 +1,26 @@
|
||||
<template>
|
||||
<div :class="classList">
|
||||
<slot></slot>
|
||||
</div>
|
||||
</template>
|
||||
|
||||
<script>
|
||||
export default {
|
||||
props: {
|
||||
variant: {
|
||||
type: String
|
||||
}
|
||||
},
|
||||
computed: {
|
||||
classList () {
|
||||
return [
|
||||
'callout',
|
||||
this.calloutVariant
|
||||
]
|
||||
},
|
||||
calloutVariant () {
|
||||
return this.variant ? `callout-${this.variant}` : ''
|
||||
}
|
||||
}
|
||||
}
|
||||
</script>
|
||||
@@ -0,0 +1,11 @@
|
||||
<template>
|
||||
<footer class="app-footer">
|
||||
<span><a href="http://coreui.io">CoreUI</a> © 2018 creativeLabs.</span>
|
||||
<span class="ml-auto">Powered by <a href="http://coreui.io">CoreUI</a></span>
|
||||
</footer>
|
||||
</template>
|
||||
<script>
|
||||
export default {
|
||||
name: 'c-footer'
|
||||
}
|
||||
</script>
|
||||
@@ -0,0 +1,37 @@
|
||||
<template>
|
||||
<header class="app-header navbar">
|
||||
<button class="navbar-toggler mobile-sidebar-toggler d-lg-none" type="button" @click="mobileSidebarToggle">
|
||||
<span class="navbar-toggler-icon"></span>
|
||||
</button>
|
||||
<b-link class="navbar-brand" to="#"></b-link>
|
||||
<button class="navbar-toggler sidebar-toggler d-md-down-none mr-auto" type="button" @click="sidebarToggle">
|
||||
<span class="navbar-toggler-icon"></span>
|
||||
</button>
|
||||
<button class="navbar-toggler aside-menu-toggler d-md-down-none" type="button" @click="asideToggle">
|
||||
<span class="navbar-toggler-icon"></span>
|
||||
</button>
|
||||
</header>
|
||||
</template>
|
||||
<script>
|
||||
export default {
|
||||
name: 'c-header',
|
||||
methods: {
|
||||
sidebarToggle (e) {
|
||||
e.preventDefault()
|
||||
document.body.classList.toggle('sidebar-hidden')
|
||||
},
|
||||
sidebarMinimize (e) {
|
||||
e.preventDefault()
|
||||
document.body.classList.toggle('sidebar-minimized')
|
||||
},
|
||||
mobileSidebarToggle (e) {
|
||||
e.preventDefault()
|
||||
document.body.classList.toggle('sidebar-mobile-show')
|
||||
},
|
||||
asideToggle (e) {
|
||||
e.preventDefault()
|
||||
document.body.classList.toggle('aside-menu-hidden')
|
||||
}
|
||||
}
|
||||
}
|
||||
</script>
|
||||
@@ -0,0 +1,98 @@
|
||||
<template>
|
||||
<div class="sidebar">
|
||||
<SidebarHeader/>
|
||||
<SidebarForm/>
|
||||
<nav class="sidebar-nav">
|
||||
<div slot="header"></div>
|
||||
<ul class="nav">
|
||||
<template v-for="(item, index) in navItems">
|
||||
<template v-if="item.title">
|
||||
<SidebarNavTitle :name="item.name" :classes="item.class" :wrapper="item.wrapper"/>
|
||||
</template>
|
||||
<template v-else-if="item.divider">
|
||||
<SidebarNavDivider :classes="item.class"/>
|
||||
</template>
|
||||
<template v-else-if="item.label">
|
||||
<SidebarNavLabel :name="item.name" :url="item.url" :icon="item.icon" :label="item.label" :classes="item.class"/>
|
||||
</template>
|
||||
<template v-else>
|
||||
<template v-if="item.children">
|
||||
<!-- First level dropdown -->
|
||||
<SidebarNavDropdown :name="item.name" :url="item.url" :icon="item.icon">
|
||||
<template v-for="(childL1, index) in item.children">
|
||||
<template v-if="childL1.children">
|
||||
<!-- Second level dropdown -->
|
||||
<SidebarNavDropdown :name="childL1.name" :url="childL1.url" :icon="childL1.icon">
|
||||
<li class="nav-item" v-for="(childL2, index) in childL1.children">
|
||||
<SidebarNavLink :name="childL2.name" :url="childL2.url" :icon="childL2.icon" :badge="childL2.badge" :variant="item.variant"/>
|
||||
</li>
|
||||
</SidebarNavDropdown>
|
||||
</template>
|
||||
<template v-else>
|
||||
<SidebarNavItem :classes="item.class">
|
||||
<SidebarNavLink :name="childL1.name" :url="childL1.url" :icon="childL1.icon" :badge="childL1.badge" :variant="item.variant"/>
|
||||
</SidebarNavItem>
|
||||
</template>
|
||||
</template>
|
||||
</SidebarNavDropdown>
|
||||
</template>
|
||||
<template v-else>
|
||||
<SidebarNavItem :classes="item.class">
|
||||
<SidebarNavLink :name="item.name" :url="item.url" :icon="item.icon" :badge="item.badge" :variant="item.variant"/>
|
||||
</SidebarNavItem>
|
||||
</template>
|
||||
</template>
|
||||
</template>
|
||||
</ul>
|
||||
<slot></slot>
|
||||
</nav>
|
||||
<SidebarFooter/>
|
||||
<SidebarMinimizer/>
|
||||
</div>
|
||||
</template>
|
||||
<script>
|
||||
import SidebarFooter from './SidebarFooter'
|
||||
import SidebarForm from './SidebarForm'
|
||||
import SidebarHeader from './SidebarHeader'
|
||||
import SidebarMinimizer from './SidebarMinimizer'
|
||||
import SidebarNavDivider from './SidebarNavDivider'
|
||||
import SidebarNavDropdown from './SidebarNavDropdown'
|
||||
import SidebarNavLink from './SidebarNavLink'
|
||||
import SidebarNavTitle from './SidebarNavTitle'
|
||||
import SidebarNavItem from './SidebarNavItem'
|
||||
import SidebarNavLabel from './SidebarNavLabel'
|
||||
export default {
|
||||
name: 'sidebar',
|
||||
props: {
|
||||
navItems: {
|
||||
type: Array,
|
||||
required: true,
|
||||
default: () => []
|
||||
}
|
||||
},
|
||||
components: {
|
||||
SidebarFooter,
|
||||
SidebarForm,
|
||||
SidebarHeader,
|
||||
SidebarMinimizer,
|
||||
SidebarNavDivider,
|
||||
SidebarNavDropdown,
|
||||
SidebarNavLink,
|
||||
SidebarNavTitle,
|
||||
SidebarNavItem,
|
||||
SidebarNavLabel
|
||||
},
|
||||
methods: {
|
||||
handleClick (e) {
|
||||
e.preventDefault()
|
||||
e.target.parentElement.classList.toggle('open')
|
||||
}
|
||||
}
|
||||
}
|
||||
</script>
|
||||
|
||||
<style lang="css">
|
||||
.nav-link {
|
||||
cursor:pointer;
|
||||
}
|
||||
</style>
|
||||
@@ -0,0 +1,9 @@
|
||||
<template>
|
||||
<!-- <div class="sidebar-footer"></div> -->
|
||||
</template>
|
||||
<script>
|
||||
|
||||
export default {
|
||||
name: 'sidebar-footer'
|
||||
}
|
||||
</script>
|
||||
@@ -0,0 +1,9 @@
|
||||
<template>
|
||||
<!-- <div class="sidebar-form"></div> -->
|
||||
</template>
|
||||
<script>
|
||||
|
||||
export default {
|
||||
name: 'sidebar-form'
|
||||
}
|
||||
</script>
|
||||
@@ -0,0 +1,9 @@
|
||||
<template>
|
||||
<!-- <div class="sidebar-header"></div> -->
|
||||
</template>
|
||||
<script>
|
||||
|
||||
export default {
|
||||
name: 'sidebar-header'
|
||||
}
|
||||
</script>
|
||||
@@ -0,0 +1,17 @@
|
||||
<template>
|
||||
<button class="sidebar-minimizer" type="button" @click="sidebarMinimize();brandMinimize()"></button>
|
||||
</template>
|
||||
<script>
|
||||
|
||||
export default {
|
||||
name: 'sidebar-minimizer',
|
||||
methods: {
|
||||
sidebarMinimize () {
|
||||
document.body.classList.toggle('sidebar-minimized')
|
||||
},
|
||||
brandMinimize () {
|
||||
document.body.classList.toggle('brand-minimized')
|
||||
}
|
||||
}
|
||||
}
|
||||
</script>
|
||||
@@ -0,0 +1,26 @@
|
||||
<template>
|
||||
<li :class="classList"></li>
|
||||
</template>
|
||||
|
||||
<script>
|
||||
export default {
|
||||
name: 'sidebar-nav-divider',
|
||||
props: {
|
||||
classes: {
|
||||
type: String,
|
||||
default: ''
|
||||
}
|
||||
},
|
||||
computed: {
|
||||
classList () {
|
||||
return [
|
||||
'divider',
|
||||
...this.itemClasses
|
||||
]
|
||||
},
|
||||
itemClasses () {
|
||||
return this.classes ? this.classes.split(' ') : ''
|
||||
}
|
||||
}
|
||||
}
|
||||
</script>
|
||||
@@ -0,0 +1,33 @@
|
||||
<template>
|
||||
<router-link tag="li" class="nav-item nav-dropdown" :to="url" disabled>
|
||||
<div class="nav-link nav-dropdown-toggle" @click="handleClick"><i :class="icon"></i> {{name}}</div>
|
||||
<ul class="nav-dropdown-items">
|
||||
<slot></slot>
|
||||
</ul>
|
||||
</router-link>
|
||||
</template>
|
||||
|
||||
<script>
|
||||
export default {
|
||||
props: {
|
||||
name: {
|
||||
type: String,
|
||||
default: ''
|
||||
},
|
||||
url: {
|
||||
type: String,
|
||||
default: ''
|
||||
},
|
||||
icon: {
|
||||
type: String,
|
||||
default: ''
|
||||
}
|
||||
},
|
||||
methods: {
|
||||
handleClick (e) {
|
||||
e.preventDefault()
|
||||
e.target.parentElement.classList.toggle('open')
|
||||
}
|
||||
}
|
||||
}
|
||||
</script>
|
||||
@@ -0,0 +1,35 @@
|
||||
<template>
|
||||
<li :class="classList" @click="hideMobile">
|
||||
<slot></slot>
|
||||
</li>
|
||||
</template>
|
||||
|
||||
<script>
|
||||
export default {
|
||||
name: 'sidebar-nav-item',
|
||||
props: {
|
||||
classes: {
|
||||
type: String,
|
||||
default: ''
|
||||
}
|
||||
},
|
||||
computed: {
|
||||
classList () {
|
||||
return [
|
||||
'nav-item',
|
||||
...this.itemClasses
|
||||
]
|
||||
},
|
||||
itemClasses () {
|
||||
return this.classes ? this.classes.split(' ') : ''
|
||||
}
|
||||
},
|
||||
methods: {
|
||||
hideMobile () {
|
||||
if (document.body.classList.contains('sidebar-mobile-show')) {
|
||||
document.body.classList.toggle('sidebar-mobile-show')
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
</script>
|
||||
@@ -0,0 +1,59 @@
|
||||
<template>
|
||||
<SidebarNavItem :classes="classList.navItem">
|
||||
<a :class="classList.navLink" :href="url"><i :class="classList.icon"></i> {{name}}</a>
|
||||
</SidebarNavItem>
|
||||
</template>
|
||||
|
||||
<script>
|
||||
import SidebarNavItem from './SidebarNavItem'
|
||||
import SidebarNavLink from './SidebarNavLink'
|
||||
export default {
|
||||
name: 'sidebar-nav-label',
|
||||
components: {
|
||||
SidebarNavItem,
|
||||
SidebarNavLink
|
||||
},
|
||||
props: {
|
||||
name: {
|
||||
type: String,
|
||||
default: ''
|
||||
},
|
||||
url: {
|
||||
type: String,
|
||||
default: '#'
|
||||
},
|
||||
icon: {
|
||||
type: String,
|
||||
default: 'fa fa-circle'
|
||||
},
|
||||
classes: {
|
||||
type: String,
|
||||
default: ''
|
||||
},
|
||||
label: {
|
||||
type: Object,
|
||||
required: true,
|
||||
default: () => {}
|
||||
}
|
||||
},
|
||||
computed: {
|
||||
classList () {
|
||||
const classes = {
|
||||
navItem: ['hidden-cn', ...this.getClasses(this.classes)].join(' '),
|
||||
navLink: 'nav-label',
|
||||
icon: [
|
||||
this.icon ? this.icon : 'fa fa-circle',
|
||||
this.label.variant ? `text-${this.label.variant}` : '',
|
||||
this.label.class ? this.label.class : ''
|
||||
].join(' ')
|
||||
}
|
||||
return classes
|
||||
}
|
||||
},
|
||||
methods: {
|
||||
getClasses (classes) {
|
||||
return classes ? classes.split(' ') : []
|
||||
}
|
||||
}
|
||||
}
|
||||
</script>
|
||||
@@ -0,0 +1,68 @@
|
||||
<template>
|
||||
<div v-if="isExternalLink">
|
||||
<a :href="url" :class="classList">
|
||||
<i :class="icon"></i> {{name}}
|
||||
<b-badge v-if="badge && badge.text" :variant="badge.variant">{{badge.text}}</b-badge>
|
||||
</a>
|
||||
</div>
|
||||
<div v-else>
|
||||
<router-link :to="url" :class="classList">
|
||||
<i :class="icon"></i> {{name}}
|
||||
<b-badge v-if="badge && badge.text" :variant="badge.variant">{{badge.text}}</b-badge>
|
||||
</router-link>
|
||||
</div>
|
||||
</template>
|
||||
|
||||
<script>
|
||||
export default {
|
||||
name: 'sidebar-nav-link',
|
||||
props: {
|
||||
name: {
|
||||
type: String,
|
||||
default: ''
|
||||
},
|
||||
url: {
|
||||
type: String,
|
||||
default: ''
|
||||
},
|
||||
icon: {
|
||||
type: String,
|
||||
default: ''
|
||||
},
|
||||
badge: {
|
||||
type: Object,
|
||||
default: () => {}
|
||||
},
|
||||
variant: {
|
||||
type: String,
|
||||
default: ''
|
||||
},
|
||||
classes: {
|
||||
type: String,
|
||||
default: ''
|
||||
}
|
||||
},
|
||||
computed: {
|
||||
classList () {
|
||||
return [
|
||||
'nav-link',
|
||||
this.linkVariant,
|
||||
...this.itemClasses
|
||||
]
|
||||
},
|
||||
linkVariant () {
|
||||
return this.variant ? `nav-link-${this.variant}` : ''
|
||||
},
|
||||
itemClasses () {
|
||||
return this.classes ? this.classes.split(' ') : []
|
||||
},
|
||||
isExternalLink () {
|
||||
if (this.url.substring(0, 4) === 'http') {
|
||||
return true
|
||||
} else {
|
||||
return false
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
</script>
|
||||
@@ -0,0 +1,42 @@
|
||||
<template>
|
||||
<li :class="classList">
|
||||
<template v-if="wrapper && wrapper.element">
|
||||
<component v-bind:is="wrapper.element" v-bind="wrapper.attributes">
|
||||
{{name}}
|
||||
</component>
|
||||
</template>
|
||||
<template v-else>
|
||||
{{name}}
|
||||
</template>
|
||||
</li>
|
||||
</template>
|
||||
|
||||
<script>
|
||||
export default {
|
||||
props: {
|
||||
name: {
|
||||
type: String,
|
||||
default: ''
|
||||
},
|
||||
classes: {
|
||||
type: String,
|
||||
default: ''
|
||||
},
|
||||
wrapper: {
|
||||
type: Object,
|
||||
default: () => {}
|
||||
}
|
||||
},
|
||||
computed: {
|
||||
classList () {
|
||||
return [
|
||||
'nav-title',
|
||||
...this.itemClasses
|
||||
]
|
||||
},
|
||||
itemClasses () {
|
||||
return this.classes ? this.classes.split(' ') : ''
|
||||
}
|
||||
}
|
||||
}
|
||||
</script>
|
||||
@@ -0,0 +1,94 @@
|
||||
<template>
|
||||
<label :class="classList">
|
||||
<input type="checkbox"
|
||||
class="switch-input"
|
||||
:value="value"
|
||||
:checked="isChecked"
|
||||
@change="handleChange">
|
||||
<template v-if="isOn">
|
||||
<span class="switch-label" :data-on="on" :data-off="off"></span>
|
||||
</template>
|
||||
<template v-else>
|
||||
<span class="switch-label"></span>
|
||||
</template>
|
||||
<span class="switch-handle"></span>
|
||||
</label>
|
||||
</template>
|
||||
|
||||
<script>
|
||||
export default {
|
||||
model: {
|
||||
prop: 'checked',
|
||||
event: 'change'
|
||||
},
|
||||
props: {
|
||||
value: {
|
||||
default: true
|
||||
},
|
||||
uncheckedValue: {
|
||||
default: false
|
||||
},
|
||||
checked: {
|
||||
default: false
|
||||
},
|
||||
type: {
|
||||
type: String,
|
||||
default: 'default'
|
||||
},
|
||||
variant: {
|
||||
type: String,
|
||||
default: ''
|
||||
},
|
||||
pill: {
|
||||
type: Boolean,
|
||||
default: false
|
||||
},
|
||||
on: {
|
||||
type: String,
|
||||
default: null
|
||||
},
|
||||
off: {
|
||||
type: String,
|
||||
default: null
|
||||
},
|
||||
size: {
|
||||
type: String,
|
||||
default: null
|
||||
}
|
||||
},
|
||||
computed: {
|
||||
classList () {
|
||||
return [
|
||||
'switch',
|
||||
this.switchType,
|
||||
this.switchVariant,
|
||||
this.switchPill,
|
||||
this.switchSize
|
||||
]
|
||||
},
|
||||
switchType () {
|
||||
return this.type ? `switch-${this.type}` : `switch-default`
|
||||
},
|
||||
switchVariant () {
|
||||
return this.variant ? `switch-${this.variant}` : `switch-secondary`
|
||||
},
|
||||
switchPill () {
|
||||
return !this.pill ? null : `switch-pill`
|
||||
},
|
||||
switchSize () {
|
||||
return this.size ? `switch-${this.size}` : ''
|
||||
},
|
||||
isChecked () {
|
||||
return this.checked === this.value
|
||||
},
|
||||
isOn () {
|
||||
return !this.on ? null : true
|
||||
}
|
||||
},
|
||||
methods: {
|
||||
handleChange ({ target: { checked } }) {
|
||||
this.$emit('change', checked ? this.value : this.uncheckedValue)
|
||||
}
|
||||
}
|
||||
}
|
||||
</script>
|
||||
@@ -0,0 +1,17 @@
|
||||
import Aside from './Aside.vue'
|
||||
import Breadcrumb from './Breadcrumb.vue'
|
||||
import Callout from './Callout.vue'
|
||||
import Footer from './Footer.vue'
|
||||
import Header from './Header.vue'
|
||||
import Sidebar from './Sidebar/Sidebar.vue'
|
||||
import Switch from './Switch.vue'
|
||||
|
||||
export {
|
||||
Aside,
|
||||
Breadcrumb,
|
||||
Callout,
|
||||
Footer,
|
||||
Header,
|
||||
Sidebar,
|
||||
Switch
|
||||
}
|
||||
@@ -0,0 +1,45 @@
|
||||
<template>
|
||||
<div class="app">
|
||||
<AppHeader/>
|
||||
<div class="app-body">
|
||||
<Sidebar :navItems="nav"/>
|
||||
<main class="main">
|
||||
<breadcrumb :list="list"/>
|
||||
<div class="container-fluid">
|
||||
<router-view></router-view>
|
||||
</div>
|
||||
</main>
|
||||
<AppAside/>
|
||||
</div>
|
||||
<AppFooter/>
|
||||
</div>
|
||||
</template>
|
||||
|
||||
<script>
|
||||
import nav from '../_nav'
|
||||
import { Header as AppHeader, Sidebar, Aside as AppAside, Footer as AppFooter, Breadcrumb } from '../components/'
|
||||
|
||||
export default {
|
||||
name: 'full',
|
||||
components: {
|
||||
AppHeader,
|
||||
Sidebar,
|
||||
AppAside,
|
||||
AppFooter,
|
||||
Breadcrumb
|
||||
},
|
||||
data () {
|
||||
return {
|
||||
nav: nav.items
|
||||
}
|
||||
},
|
||||
computed: {
|
||||
name () {
|
||||
return this.$route.name
|
||||
},
|
||||
list () {
|
||||
return this.$route.matched
|
||||
}
|
||||
}
|
||||
}
|
||||
</script>
|
||||
@@ -0,0 +1,18 @@
|
||||
// The Vue build version to load with the `import` command
|
||||
// (runtime-only or standalone) has been set in webpack.base.conf with an alias.
|
||||
import Vue from 'vue'
|
||||
import BootstrapVue from 'bootstrap-vue'
|
||||
import App from './App'
|
||||
import router from './router'
|
||||
|
||||
Vue.use(BootstrapVue)
|
||||
|
||||
/* eslint-disable no-new */
|
||||
new Vue({
|
||||
el: '#app',
|
||||
router,
|
||||
template: '<App/>',
|
||||
components: {
|
||||
App
|
||||
}
|
||||
})
|
||||
@@ -0,0 +1,32 @@
|
||||
import Vue from 'vue'
|
||||
import Router from 'vue-router'
|
||||
|
||||
// Containers
|
||||
import Full from '@/containers/Full'
|
||||
|
||||
// Views
|
||||
import Dashboard from '@/views/Dashboard'
|
||||
|
||||
Vue.use(Router)
|
||||
|
||||
export default new Router({
|
||||
mode: 'hash',
|
||||
linkActiveClass: 'open active',
|
||||
scrollBehavior: () => ({ y: 0 }),
|
||||
routes: [
|
||||
{
|
||||
path: '/',
|
||||
redirect: '/dashboard',
|
||||
name: 'Home',
|
||||
component: Full,
|
||||
children: [
|
||||
{
|
||||
path: 'dashboard',
|
||||
name: 'Dashboard',
|
||||
component: Dashboard
|
||||
}
|
||||
|
||||
]
|
||||
}
|
||||
]
|
||||
})
|
||||
@@ -0,0 +1,11 @@
|
||||
<template>
|
||||
<div class="animated fadeIn">
|
||||
<p class="text-info">Hello World</p>
|
||||
</div>
|
||||
</template>
|
||||
|
||||
<script>
|
||||
export default {
|
||||
name: 'dashboard'
|
||||
}
|
||||
</script>
|
||||
|
After Width: | Height: | Size: 1.9 KiB |
|
After Width: | Height: | Size: 2.1 KiB |
|
After Width: | Height: | Size: 1.6 KiB |
|
After Width: | Height: | Size: 2.5 KiB |
|
After Width: | Height: | Size: 19 KiB |
|
After Width: | Height: | Size: 1.6 KiB |
|
After Width: | Height: | Size: 2.0 KiB |
|
After Width: | Height: | Size: 20 KiB |