Browse Source

Initial commit

master
Shyim 6 years ago
commit
6e17bdfb16
  1. 31
      .env.dist
  2. 26
      .gitignore
  3. 0
      assets/.gitignore
  4. 39
      bin/console
  5. 18
      bin/phpunit
  6. 81
      composer.json
  7. 5748
      composer.lock
  8. 18
      config/bundles.php
  9. 16
      config/packages/dev/easy_log_handler.yaml
  10. 19
      config/packages/dev/monolog.yaml
  11. 3
      config/packages/dev/routing.yaml
  12. 4
      config/packages/dev/swiftmailer.yaml
  13. 6
      config/packages/dev/web_profiler.yaml
  14. 29
      config/packages/doctrine.yaml
  15. 5
      config/packages/doctrine_migrations.yaml
  16. 30
      config/packages/framework.yaml
  17. 4
      config/packages/lexik_jwt_authentication.yaml
  18. 31
      config/packages/prod/doctrine.yaml
  19. 17
      config/packages/prod/monolog.yaml
  20. 3
      config/packages/routing.yaml
  21. 36
      config/packages/security.yaml
  22. 3
      config/packages/swiftmailer.yaml
  23. 4
      config/packages/test/framework.yaml
  24. 7
      config/packages/test/monolog.yaml
  25. 2
      config/packages/test/swiftmailer.yaml
  26. 6
      config/packages/test/web_profiler.yaml
  27. 7
      config/packages/translation.yaml
  28. 5
      config/packages/twig.yaml
  29. 3
      config/routes.yaml
  30. 6
      config/routes/annotations.yaml
  31. 3
      config/routes/dev/twig.yaml
  32. 7
      config/routes/dev/web_profiler.yaml
  33. 45
      config/services.yaml
  34. 9
      config/services_test.yaml
  35. 35
      phpunit.xml.dist
  36. 39
      public/index.php
  37. 18
      public/theme/.babelrc
  38. 9
      public/theme/.editorconfig
  39. 2
      public/theme/.eslintignore
  40. 27
      public/theme/.eslintrc.js
  41. 14
      public/theme/.gitignore
  42. 8
      public/theme/.postcssrc.js
  43. 21
      public/theme/LICENSE
  44. 45
      public/theme/README.md
  45. 40
      public/theme/build/build.js
  46. 48
      public/theme/build/check-versions.js
  47. 9
      public/theme/build/dev-client.js
  48. 92
      public/theme/build/dev-server.js
  49. 71
      public/theme/build/utils.js
  50. 19
      public/theme/build/vue-loader.conf.js
  51. 74
      public/theme/build/webpack.base.conf.js
  52. 34
      public/theme/build/webpack.custom.js
  53. 35
      public/theme/build/webpack.dev.conf.js
  54. 126
      public/theme/build/webpack.prod.conf.js
  55. 32
      public/theme/build/webpack.test.conf.js
  56. 6
      public/theme/config/dev.env.js
  57. 37
      public/theme/config/index.js
  58. 3
      public/theme/config/prod.env.js
  59. 6
      public/theme/config/test.env.js
  60. 21
      public/theme/index.html
  61. 13954
      public/theme/package-lock.json
  62. 105
      public/theme/package.json
  63. 38
      public/theme/src/App.vue
  64. 61
      public/theme/src/assets/css/demo.css
  65. 90
      public/theme/src/assets/sass/lbd/_alerts.scss
  66. 132
      public/theme/src/assets/sass/lbd/_buttons.scss
  67. 253
      public/theme/src/assets/sass/lbd/_cards.scss
  68. 230
      public/theme/src/assets/sass/lbd/_chartist.scss
  69. 140
      public/theme/src/assets/sass/lbd/_checkbox-radio-switch.scss
  70. 136
      public/theme/src/assets/sass/lbd/_dropdown.scss
  71. 75
      public/theme/src/assets/sass/lbd/_footers.scss
  72. 141
      public/theme/src/assets/sass/lbd/_inputs.scss
  73. 129
      public/theme/src/assets/sass/lbd/_misc.scss
  74. 22
      public/theme/src/assets/sass/lbd/_mixins.scss
  75. 71
      public/theme/src/assets/sass/lbd/_modal.scss
  76. 379
      public/theme/src/assets/sass/lbd/_navbars.scss
  77. 574
      public/theme/src/assets/sass/lbd/_partial-nucleo-icons.scss
  78. 476
      public/theme/src/assets/sass/lbd/_responsive.scss
  79. 430
      public/theme/src/assets/sass/lbd/_sidebar-and-main-panel.scss
  80. 73
      public/theme/src/assets/sass/lbd/_tables.scss
  81. 91
      public/theme/src/assets/sass/lbd/_tooltip.scss
  82. 90
      public/theme/src/assets/sass/lbd/_typography.scss
  83. 265
      public/theme/src/assets/sass/lbd/_variables.scss
  84. 70
      public/theme/src/assets/sass/lbd/mixins/_buttons.scss
  85. 8
      public/theme/src/assets/sass/lbd/mixins/_cards.scss
  86. 85
      public/theme/src/assets/sass/lbd/mixins/_chartist.scss
  87. 13
      public/theme/src/assets/sass/lbd/mixins/_icons.scss
  88. 17
      public/theme/src/assets/sass/lbd/mixins/_inputs.scss
  89. 21
      public/theme/src/assets/sass/lbd/mixins/_labels.scss
  90. 34
      public/theme/src/assets/sass/lbd/mixins/_morphing-buttons.scss
  91. 11
      public/theme/src/assets/sass/lbd/mixins/_navbars.scss
  92. 43
      public/theme/src/assets/sass/lbd/mixins/_social-buttons.scss
  93. 4
      public/theme/src/assets/sass/lbd/mixins/_tabs.scss
  94. 20
      public/theme/src/assets/sass/lbd/mixins/_transparency.scss
  95. 211
      public/theme/src/assets/sass/lbd/mixins/_vendor-prefixes.scss
  96. 227
      public/theme/src/assets/sass/lbd/plugins/_animate.scss
  97. 40
      public/theme/src/assets/sass/light-bootstrap-dashboard.scss
  98. 22
      public/theme/src/components/Dashboard/Layout/Content.vue
  99. 26
      public/theme/src/components/Dashboard/Layout/ContentFooter.vue
  100. 50
      public/theme/src/components/Dashboard/Layout/DashboardLayout.vue
  101. Some files were not shown because too many files have changed in this diff Show More

31
.env.dist

@ -0,0 +1,31 @@ @@ -0,0 +1,31 @@
# This file is a "template" of which env vars need to be defined for your application
# Copy this file to .env file for development, create environment variables when deploying to production
# https://symfony.com/doc/current/best_practices/configuration.html#infrastructure-related-configuration
###> symfony/framework-bundle ###
APP_ENV=dev
APP_SECRET=7b95b76ffab0932d7a1753c0475e61bf
#TRUSTED_PROXIES=127.0.0.1,127.0.0.2
#TRUSTED_HOSTS=localhost,example.com
###< symfony/framework-bundle ###
###> symfony/swiftmailer-bundle ###
# For Gmail as a transport, use: "gmail://username:password@localhost"
# For a generic SMTP server, use: "smtp://localhost:25?encryption=&auth_mode="
# Delivery is disabled by default via "null://localhost"
MAILER_URL=null://localhost
###< symfony/swiftmailer-bundle ###
###> doctrine/doctrine-bundle ###
# Format described at http://docs.doctrine-project.org/projects/doctrine-dbal/en/latest/reference/configuration.html#connecting-using-a-url
# For an SQLite database, use: "sqlite:///%kernel.project_dir%/var/data.db"
# Configure your db driver and server_version in config/packages/doctrine.yaml
DATABASE_URL=mysql://db_user:db_password@127.0.0.1:3306/db_name
###< doctrine/doctrine-bundle ###
###> lexik/jwt-authentication-bundle ###
# Key paths should be relative to the project directory
JWT_PRIVATE_KEY_PATH=config/jwt/private.pem
JWT_PUBLIC_KEY_PATH=config/jwt/public.pem
JWT_PASSPHRASE=a758fddfbc878122f8b37259b8ea14c3
###< lexik/jwt-authentication-bundle ###

26
.gitignore vendored

@ -0,0 +1,26 @@ @@ -0,0 +1,26 @@
###> symfony/framework-bundle ###
/.env
/public/bundles/
/var/
/vendor/
###< symfony/framework-bundle ###
###> symfony/webpack-encore-pack ###
/node_modules/
/public/build/
npm-debug.log
yarn-error.log
###< symfony/webpack-encore-pack ###
###> symfony/phpunit-bridge ###
.phpunit
/phpunit.xml
###< symfony/phpunit-bridge ###
###> symfony/web-server-bundle ###
/.web-server-pid
###< symfony/web-server-bundle ###
.idea
/config/jwt

0
assets/.gitignore vendored

39
bin/console

@ -0,0 +1,39 @@ @@ -0,0 +1,39 @@
#!/usr/bin/env php
<?php
use App\Kernel;
use Symfony\Bundle\FrameworkBundle\Console\Application;
use Symfony\Component\Console\Input\ArgvInput;
use Symfony\Component\Debug\Debug;
use Symfony\Component\Dotenv\Dotenv;
set_time_limit(0);
require __DIR__.'/../vendor/autoload.php';
if (!class_exists(Application::class)) {
throw new \RuntimeException('You need to add "symfony/framework-bundle" as a Composer dependency.');
}
if (!isset($_SERVER['APP_ENV'])) {
if (!class_exists(Dotenv::class)) {
throw new \RuntimeException('APP_ENV environment variable is not defined. You need to define environment variables for configuration or add "symfony/dotenv" as a Composer dependency to load variables from a .env file.');
}
(new Dotenv())->load(__DIR__.'/../.env');
}
$input = new ArgvInput();
$env = $input->getParameterOption(['--env', '-e'], $_SERVER['APP_ENV'] ?? 'dev', true);
$debug = (bool) ($_SERVER['APP_DEBUG'] ?? ('prod' !== $env)) && !$input->hasParameterOption('--no-debug', true);
if ($debug) {
umask(0000);
if (class_exists(Debug::class)) {
Debug::enable();
}
}
$kernel = new Kernel($env, $debug);
$application = new Application($kernel);
$application->run($input);

18
bin/phpunit

@ -0,0 +1,18 @@ @@ -0,0 +1,18 @@
#!/usr/bin/env php
<?php
if (!file_exists(dirname(__DIR__).'/vendor/symfony/phpunit-bridge/bin/simple-phpunit')) {
echo "Unable to find the `simple-phpunit` script in `vendor/symfony/phpunit-bridge/bin/`.\n";
exit(1);
}
if (false === getenv('SYMFONY_PHPUNIT_REMOVE')) {
putenv('SYMFONY_PHPUNIT_REMOVE=symfony/yaml');
}
if (false === getenv('SYMFONY_PHPUNIT_VERSION')) {
putenv('SYMFONY_PHPUNIT_VERSION=6.5');
}
if (false === getenv('SYMFONY_PHPUNIT_DIR')) {
putenv('SYMFONY_PHPUNIT_DIR='.__DIR__.'/.phpunit');
}
require dirname(__DIR__).'/vendor/symfony/phpunit-bridge/bin/simple-phpunit';

81
composer.json

@ -0,0 +1,81 @@ @@ -0,0 +1,81 @@
{
"type": "project",
"license": "proprietary",
"require": {
"php": "^7.1.3",
"ext-iconv": "*",
"lexik/jwt-authentication-bundle": "^2.4",
"sensio/framework-extra-bundle": "^5.1",
"symfony/asset": "^4.0",
"symfony/console": "^4.0",
"symfony/expression-language": "^4.0",
"symfony/flex": "^1.0",
"symfony/form": "^4.0",
"symfony/framework-bundle": "^4.0",
"symfony/lts": "^4@dev",
"symfony/monolog-bundle": "^3.1",
"symfony/orm-pack": "*",
"symfony/process": "^4.0",
"symfony/security-bundle": "^4.0",
"symfony/serializer-pack": "*",
"symfony/swiftmailer-bundle": "^3.1",
"symfony/twig-bundle": "^4.0",
"symfony/validator": "^4.0",
"symfony/web-link": "^4.0",
"symfony/webpack-encore-pack": "*",
"symfony/yaml": "^4.0"
},
"require-dev": {
"symfony/browser-kit": "^4.0",
"symfony/css-selector": "^4.0",
"symfony/debug-pack": "*",
"symfony/dotenv": "^4.0",
"symfony/maker-bundle": "^1.0",
"symfony/phpunit-bridge": "^4.0",
"symfony/profiler-pack": "*",
"symfony/web-server-bundle": "^4.0"
},
"config": {
"preferred-install": {
"*": "dist"
},
"sort-packages": true
},
"autoload": {
"psr-4": {
"App\\": "src/"
}
},
"autoload-dev": {
"psr-4": {
"App\\Tests\\": "tests/"
}
},
"replace": {
"symfony/polyfill-iconv": "*",
"symfony/polyfill-php71": "*",
"symfony/polyfill-php70": "*",
"symfony/polyfill-php56": "*"
},
"scripts": {
"auto-scripts": {
"cache:clear": "symfony-cmd",
"assets:install --symlink --relative %PUBLIC_DIR%": "symfony-cmd"
},
"post-install-cmd": [
"@auto-scripts"
],
"post-update-cmd": [
"@auto-scripts"
]
},
"conflict": {
"symfony/symfony": "*"
},
"extra": {
"symfony": {
"id": "01CBSMXHM5DKB6TZ52002ZR497",
"allow-contrib": false
}
}
}

5748
composer.lock generated

File diff suppressed because it is too large Load Diff

18
config/bundles.php

@ -0,0 +1,18 @@ @@ -0,0 +1,18 @@
<?php
return [
Symfony\Bundle\FrameworkBundle\FrameworkBundle::class => ['all' => true],
Symfony\Bundle\TwigBundle\TwigBundle::class => ['all' => true],
Symfony\Bundle\SwiftmailerBundle\SwiftmailerBundle::class => ['all' => true],
Symfony\Bundle\SecurityBundle\SecurityBundle::class => ['all' => true],
Doctrine\Bundle\DoctrineCacheBundle\DoctrineCacheBundle::class => ['all' => true],
Doctrine\Bundle\DoctrineBundle\DoctrineBundle::class => ['all' => true],
Doctrine\Bundle\MigrationsBundle\DoctrineMigrationsBundle::class => ['all' => true],
Symfony\Bundle\MonologBundle\MonologBundle::class => ['all' => true],
Sensio\Bundle\FrameworkExtraBundle\SensioFrameworkExtraBundle::class => ['all' => true],
Symfony\Bundle\WebProfilerBundle\WebProfilerBundle::class => ['dev' => true, 'test' => true],
Symfony\Bundle\DebugBundle\DebugBundle::class => ['dev' => true, 'test' => true],
Symfony\Bundle\MakerBundle\MakerBundle::class => ['dev' => true],
Symfony\Bundle\WebServerBundle\WebServerBundle::class => ['dev' => true],
Lexik\Bundle\JWTAuthenticationBundle\LexikJWTAuthenticationBundle::class => ['all' => true],
];

16
config/packages/dev/easy_log_handler.yaml

@ -0,0 +1,16 @@ @@ -0,0 +1,16 @@
services:
EasyCorp\EasyLog\EasyLogHandler:
public: false
arguments: ['%kernel.logs_dir%/%kernel.environment%.log']
#// FIXME: How to add this configuration automatically without messing up with the monolog configuration?
#monolog:
# handlers:
# buffered:
# type: buffer
# handler: easylog
# channels: ['!event']
# level: debug
# easylog:
# type: service
# id: EasyCorp\EasyLog\EasyLogHandler

19
config/packages/dev/monolog.yaml

@ -0,0 +1,19 @@ @@ -0,0 +1,19 @@
monolog:
handlers:
main:
type: stream
path: "%kernel.logs_dir%/%kernel.environment%.log"
level: debug
channels: ["!event"]
# uncomment to get logging in your browser
# you may have to allow bigger header sizes in your Web server configuration
#firephp:
# type: firephp
# level: info
#chromephp:
# type: chromephp
# level: info
console:
type: console
process_psr_3_messages: false
channels: ["!event", "!doctrine", "!console"]

3
config/packages/dev/routing.yaml

@ -0,0 +1,3 @@ @@ -0,0 +1,3 @@
framework:
router:
strict_requirements: true

4
config/packages/dev/swiftmailer.yaml

@ -0,0 +1,4 @@ @@ -0,0 +1,4 @@
# See https://symfony.com/doc/current/email/dev_environment.html
swiftmailer:
# send all emails to a specific address
#delivery_addresses: ['me@example.com']

6
config/packages/dev/web_profiler.yaml

@ -0,0 +1,6 @@ @@ -0,0 +1,6 @@
web_profiler:
toolbar: true
intercept_redirects: false
framework:
profiler: { only_exceptions: false }

29
config/packages/doctrine.yaml

@ -0,0 +1,29 @@ @@ -0,0 +1,29 @@
parameters:
# Adds a fallback DATABASE_URL if the env var is not set.
# This allows you to run cache:warmup even if your
# environment variables are not available yet.
# You should not need to change this value.
env(DATABASE_URL): ''
doctrine:
dbal:
# configure these for your database server
driver: 'pdo_mysql'
server_version: '5.7'
charset: utf8mb4
default_table_options:
charset: utf8mb4
collate: utf8mb4_unicode_ci
url: '%env(resolve:DATABASE_URL)%'
orm:
auto_generate_proxy_classes: '%kernel.debug%'
naming_strategy: doctrine.orm.naming_strategy.underscore
auto_mapping: true
mappings:
App:
is_bundle: false
type: annotation
dir: '%kernel.project_dir%/src/Entity'
prefix: 'App\Entity'
alias: App

5
config/packages/doctrine_migrations.yaml

@ -0,0 +1,5 @@ @@ -0,0 +1,5 @@
doctrine_migrations:
dir_name: '%kernel.project_dir%/src/Migrations'
# namespace is arbitrary but should be different from App\Migrations
# as migrations classes should NOT be autoloaded
namespace: DoctrineMigrations

30
config/packages/framework.yaml

@ -0,0 +1,30 @@ @@ -0,0 +1,30 @@
framework:
secret: '%env(APP_SECRET)%'
#default_locale: en
#csrf_protection: true
#http_method_override: true
# Enables session support. Note that the session will ONLY be started if you read or write from it.
# Remove or comment this section to explicitly disable session support.
session:
handler_id: ~
#esi: true
#fragments: true
php_errors:
log: true
cache:
# Put the unique name of your app here: the prefix seed
# is used to compute stable namespaces for cache keys.
#prefix_seed: your_vendor_name/app_name
# The app cache caches to the filesystem by default.
# Other options include:
# Redis
#app: cache.adapter.redis
#default_redis_provider: redis://localhost
# APCu (not recommended with heavy random-write workloads as memory fragmentation can cause perf issues)
#app: cache.adapter.apcu

4
config/packages/lexik_jwt_authentication.yaml

@ -0,0 +1,4 @@ @@ -0,0 +1,4 @@
lexik_jwt_authentication:
private_key_path: '%kernel.project_dir%/%env(JWT_PRIVATE_KEY_PATH)%'
public_key_path: '%kernel.project_dir%/%env(JWT_PUBLIC_KEY_PATH)%'
pass_phrase: '%env(JWT_PASSPHRASE)%'

31
config/packages/prod/doctrine.yaml

@ -0,0 +1,31 @@ @@ -0,0 +1,31 @@
doctrine:
orm:
metadata_cache_driver:
type: service
id: doctrine.system_cache_provider
query_cache_driver:
type: service
id: doctrine.system_cache_provider
result_cache_driver:
type: service
id: doctrine.result_cache_provider
services:
doctrine.result_cache_provider:
class: Symfony\Component\Cache\DoctrineProvider
public: false
arguments:
- '@doctrine.result_cache_pool'
doctrine.system_cache_provider:
class: Symfony\Component\Cache\DoctrineProvider
public: false
arguments:
- '@doctrine.system_cache_pool'
framework:
cache:
pools:
doctrine.result_cache_pool:
adapter: cache.app
doctrine.system_cache_pool:
adapter: cache.system

17
config/packages/prod/monolog.yaml

@ -0,0 +1,17 @@ @@ -0,0 +1,17 @@
monolog:
handlers:
main:
type: fingers_crossed
action_level: error
handler: nested
excluded_404s:
# regex: exclude all 404 errors from the logs
- ^/
nested:
type: stream
path: "%kernel.logs_dir%/%kernel.environment%.log"
level: debug
console:
type: console
process_psr_3_messages: false
channels: ["!event", "!doctrine"]

3
config/packages/routing.yaml

@ -0,0 +1,3 @@ @@ -0,0 +1,3 @@
framework:
router:
strict_requirements: ~

36
config/packages/security.yaml

@ -0,0 +1,36 @@ @@ -0,0 +1,36 @@
security:
providers:
user_db:
entity: { class: App\Entity\User, property: username }
firewalls:
login:
pattern: ^/api/auth/login
stateless: true
anonymous: true
form_login:
check_path: /api/auth/login
success_handler: lexik_jwt_authentication.handler.authentication_success
failure_handler: lexik_jwt_authentication.handler.authentication_failure
require_previous_session: false
api:
pattern: ^/api
stateless: true
guard:
authenticators:
- lexik_jwt_authentication.jwt_token_authenticator
dev:
pattern: ^/(_(profiler|wdt)|css|images|js)/
security: false
main:
anonymous: true
form_login:
login_path: login
check_path: login
access_control:
- { path: ^/api/login, roles: IS_AUTHENTICATED_ANONYMOUSLY }
- { path: ^/api, roles: IS_AUTHENTICATED_FULLY }
encoders:
App\Entity\User: plaintext

3
config/packages/swiftmailer.yaml

@ -0,0 +1,3 @@ @@ -0,0 +1,3 @@
swiftmailer:
url: '%env(MAILER_URL)%'
spool: { type: 'memory' }

4
config/packages/test/framework.yaml

@ -0,0 +1,4 @@ @@ -0,0 +1,4 @@
framework:
test: true
session:
storage_id: session.storage.mock_file

7
config/packages/test/monolog.yaml

@ -0,0 +1,7 @@ @@ -0,0 +1,7 @@
monolog:
handlers:
main:
type: stream
path: "%kernel.logs_dir%/%kernel.environment%.log"
level: debug
channels: ["!event"]

2
config/packages/test/swiftmailer.yaml

@ -0,0 +1,2 @@ @@ -0,0 +1,2 @@
swiftmailer:
disable_delivery: true

6
config/packages/test/web_profiler.yaml

@ -0,0 +1,6 @@ @@ -0,0 +1,6 @@
web_profiler:
toolbar: false
intercept_redirects: false
framework:
profiler: { collect: false }

7
config/packages/translation.yaml

@ -0,0 +1,7 @@ @@ -0,0 +1,7 @@
framework:
default_locale: '%locale%'
translator:
paths:
- '%kernel.project_dir%/translations'
fallbacks:
- '%locale%'

5
config/packages/twig.yaml

@ -0,0 +1,5 @@ @@ -0,0 +1,5 @@
twig:
paths: ['%kernel.project_dir%/templates']
debug: '%kernel.debug%'
strict_variables: '%kernel.debug%'
form_themes: ['bootstrap_3_layout.html.twig']

3
config/routes.yaml

@ -0,0 +1,3 @@ @@ -0,0 +1,3 @@
#index:
# path: /
# controller: App\Controller\DefaultController::index

6
config/routes/annotations.yaml

@ -0,0 +1,6 @@ @@ -0,0 +1,6 @@
controllers:
resource: ../../src/Controller/
type: annotation
api_login_check:
path: /api/auth/login

3
config/routes/dev/twig.yaml

@ -0,0 +1,3 @@ @@ -0,0 +1,3 @@
_errors:
resource: '@TwigBundle/Resources/config/routing/errors.xml'
prefix: /_error

7
config/routes/dev/web_profiler.yaml

@ -0,0 +1,7 @@ @@ -0,0 +1,7 @@
web_profiler_wdt:
resource: '@WebProfilerBundle/Resources/config/routing/wdt.xml'
prefix: /_wdt
web_profiler_profiler:
resource: '@WebProfilerBundle/Resources/config/routing/profiler.xml'
prefix: /_profiler

45
config/services.yaml

@ -0,0 +1,45 @@ @@ -0,0 +1,45 @@
# Put parameters here that don't need to change on each machine where the app is deployed
# https://symfony.com/doc/current/best_practices/configuration.html#application-related-configuration
parameters:
locale: 'en'
appHost: '%env(APP_HOST)%'
nginxFolder: '%env(NGINX_CONFIG_DIR)%'
services:
# default configuration for services in *this* file
_defaults:
autowire: true # Automatically injects dependencies in your services.
autoconfigure: true # Automatically registers your services as commands, event subscribers, etc.
public: false # Allows optimizing the container by removing unused services; this also means
# fetching services directly from the container via $container->get() won't work.
# The best practice is to be explicit about your dependencies anyway.
# makes classes in src/ available to be used as services
# this creates a service per class whose id is the fully-qualified class name
App\:
resource: '../src/*'
exclude: '../src/{Entity,Migrations,Tests,Kernel.php}'
# controllers are imported separately to make sure services can be injected
# as action arguments even if you don't extend any base controller class
App\Controller\:
resource: '../src/Controller'
tags: ['controller.service_arguments']
App\Component\Services\:
resource: '../src/Component/Services'
tags: ['recast.service']
App\Component\ServiceManager:
class: App\Component\ServiceManager
arguments: [!tagged recast.service]
App\Component\NginxConfigGenerator:
class: App\Component\NginxConfigGenerator
autowire: true
bind:
$nginxFolder: '%nginxFolder%'
$appHost: '%appHost%'
# add more service definitions when explicit configuration is needed
# please note that last definitions always *replace* previous ones

9
config/services_test.yaml

@ -0,0 +1,9 @@ @@ -0,0 +1,9 @@
services:
_defaults:
public: true
# If you need to access services in a test, create an alias
# and then fetch that alias from the container. As a convention,
# aliases are prefixed with test. For example:
#
# test.App\Service\MyService: '@App\Service\MyService'

35
phpunit.xml.dist

@ -0,0 +1,35 @@ @@ -0,0 +1,35 @@
<?xml version="1.0" encoding="UTF-8"?>
<!-- https://phpunit.de/manual/current/en/appendixes.configuration.html -->
<phpunit xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:noNamespaceSchemaLocation="http://schema.phpunit.de/6.1/phpunit.xsd"
backupGlobals="false"
colors="true"
bootstrap="vendor/autoload.php"
>
<php>
<ini name="error_reporting" value="-1" />
<env name="KERNEL_CLASS" value="App\Kernel" />
<env name="APP_ENV" value="test" />
<env name="APP_DEBUG" value="1" />
<env name="APP_SECRET" value="s$cretf0rt3st" />
<env name="SHELL_VERBOSITY" value="-1" />
<!-- define your env variables for the test env here -->
</php>
<testsuites>
<testsuite name="Project Test Suite">
<directory>tests/</directory>
</testsuite>
</testsuites>
<filter>
<whitelist>
<directory>./src/</directory>
</whitelist>
</filter>
<listeners>
<listener class="Symfony\Bridge\PhpUnit\SymfonyTestsListener" />
</listeners>
</phpunit>

39
public/index.php

@ -0,0 +1,39 @@ @@ -0,0 +1,39 @@
<?php
use App\Kernel;
use Symfony\Component\Debug\Debug;
use Symfony\Component\Dotenv\Dotenv;
use Symfony\Component\HttpFoundation\Request;
require __DIR__.'/../vendor/autoload.php';
// The check is to ensure we don't use .env in production
if (!isset($_SERVER['APP_ENV'])) {
if (!class_exists(Dotenv::class)) {
throw new \RuntimeException('APP_ENV environment variable is not defined. You need to define environment variables for configuration or add "symfony/dotenv" as a Composer dependency to load variables from a .env file.');
}
(new Dotenv())->load(__DIR__.'/../.env');
}
$env = $_SERVER['APP_ENV'] ?? 'dev';
$debug = (bool) ($_SERVER['APP_DEBUG'] ?? ('prod' !== $env));
if ($debug) {
umask(0000);
Debug::enable();
}
if ($trustedProxies = $_SERVER['TRUSTED_PROXIES'] ?? false) {
Request::setTrustedProxies(explode(',', $trustedProxies), Request::HEADER_X_FORWARDED_ALL ^ Request::HEADER_X_FORWARDED_HOST);
}
if ($trustedHosts = $_SERVER['TRUSTED_HOSTS'] ?? false) {
Request::setTrustedHosts(explode(',', $trustedHosts));
}
$kernel = new Kernel($env, $debug);
$request = Request::createFromGlobals();
$response = $kernel->handle($request);
$response->send();
$kernel->terminate($request, $response);

18
public/theme/.babelrc

@ -0,0 +1,18 @@ @@ -0,0 +1,18 @@
{
"presets": [
["env", {
"modules": false,
"targets": {
"browsers": ["> 1%", "last 2 versions", "not ie <= 8"]
}
}],
"stage-2"
],
"plugins": ["transform-runtime"],
"env": {
"test": {
"presets": ["env", "stage-2"],
"plugins": ["istanbul"]
}
}
}

9
public/theme/.editorconfig

@ -0,0 +1,9 @@ @@ -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

2
public/theme/.eslintignore

@ -0,0 +1,2 @@ @@ -0,0 +1,2 @@
build/*.js
config/*.js

27
public/theme/.eslintrc.js

@ -0,0 +1,27 @@ @@ -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/standard/standard/blob/master/docs/RULES-en.md
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
}
}

14
public/theme/.gitignore vendored

@ -0,0 +1,14 @@ @@ -0,0 +1,14 @@
.DS_Store
node_modules/
dist/
npm-debug.log*
yarn-debug.log*
yarn-error.log*
test/unit/coverage
# Editor directories and files
.idea
*.suo
*.ntvs*
*.njsproj
*.sln

8
public/theme/.postcssrc.js

@ -0,0 +1,8 @@ @@ -0,0 +1,8 @@
// https://github.com/michael-ciniawsky/postcss-load-config
module.exports = {
"plugins": {
// to edit target browsers: use "browserslist" field in package.json
"autoprefixer": {}
}
}

21
public/theme/LICENSE

@ -0,0 +1,21 @@ @@ -0,0 +1,21 @@
MIT License
Copyright (c) 2017 Cristi Jora
Permission is hereby granted, free of charge, to any person obtaining a copy
of this software and associated documentation files (the "Software"), to deal
in the Software without restriction, including without limitation the rights
to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
copies of the Software, and to permit persons to whom the Software is
furnished to do so, subject to the following conditions:
The above copyright notice and this permission notice shall be included in all
copies or substantial portions of the Software.
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
SOFTWARE.

45
public/theme/README.md

@ -0,0 +1,45 @@ @@ -0,0 +1,45 @@
# [Vue Light Bootstrap Dashboard](http://vuejs.creative-tim.com/vue-light-bootstrap-dashboard) [![version][version-badge]][CHANGELOG] [![license][license-badge]][LICENSE]
> Admin dashboard based on light bootstrap dashboard UI template + vue-router
This project is a vue version of [Light bootstrap dashboard](https://www.creative-tim.com/product/light-bootstrap-dashboard)
designed for vue js. The dashboard includes Bootstrap 4, vue-router, chartist, google-maps and several other plugins/components.
Check the [Live Demo here](http://vuejs.creative-tim.com/vue-light-bootstrap-dashboard).
![](static/Dashboard.PNG)
## :rocket: Getting started
Vue Light Bootstrap Dashboard is built on top of Bootstrap 4, Vuejs and Vue-router. To get started do the following steps:
1. Download the project
2. Make sure you have node.js (https://nodejs.org/en/) installed
3. Type `npm install` in the source folder where `package.json` is located
4. Type `npm run dev` to start the development server
The repo uses [vue-cli](https://github.com/vuejs/vue-cli) scaffolding which takes care of the development setup with webpack and all the necessary modern tools to make web development faster and easier.
## [Documentation](https://cristijora.github.io/vue-light-bootstrap-dashboard/documentation/#/buttons)
## :cloud: Build Setup
### install dependencies
`npm install`
### serve with hot reload at localhost:8000
`npm run dev`
### build for production with minification
`npm run build`
### run unit tests
`npm run unit`
### run and watch unit tests
`npm run unit:watch`
## :clipboard: Contribution guide
* `npm install` or `yarn install`
* Please don't use jQuery or jQuery based plugins since there are many pure Vue alternatives
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).
[CHANGELOG]: ./CHANGELOG.md
[LICENSE]: ./LICENSE.md
[version-badge]: https://img.shields.io/badge/version-1.0.0-blue.svg
[license-badge]: https://img.shields.io/badge/license-MIT-blue.svg

40
public/theme/build/build.js

@ -0,0 +1,40 @@ @@ -0,0 +1,40 @@
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')
if (stats.hasErrors()) {
console.log(chalk.red(' Build failed with errors.\n'))
process.exit(1)
}
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'
))
})
})

48
public/theme/build/check-versions.js

@ -0,0 +1,48 @@ @@ -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)
}
}

9
public/theme/build/dev-client.js

@ -0,0 +1,9 @@ @@ -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()
}
})

92
public/theme/build/dev-server.js

@ -0,0 +1,92 @@ @@ -0,0 +1,92 @@
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' || process.env.NODE_ENV === 'production')
? 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: false,
heartbeat: 2000
})
// 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()
}
}

71
public/theme/build/utils.js

@ -0,0 +1,71 @@ @@ -0,0 +1,71 @@
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
}
}
// 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
}

19
public/theme/build/vue-loader.conf.js

@ -0,0 +1,19 @@ @@ -0,0 +1,19 @@
'use strict'
const utils = require('./utils')
const config = require('../config')
const isProduction = process.env.NODE_ENV === 'production'
module.exports = {
loaders: utils.cssLoaders({
sourceMap: isProduction
? config.build.productionSourceMap
: config.dev.cssSourceMap,
extract: isProduction
}),
transformToRequire: {
video: 'src',
source: 'src',
img: 'src',
image: 'xlink:href'
}
}

74
public/theme/build/webpack.base.conf.js

@ -0,0 +1,74 @@ @@ -0,0 +1,74 @@
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.common.js',
'@': resolve('src'),
}
},
module: {
rules: [
{
test: /\.vue$/,
loader: 'vue-loader',
options: vueLoaderConfig
},
{
test: /\.js$/,
loader: 'babel-loader',
include: [resolve('src'), resolve('test')]
},
{
test: /\.(png|jpe?g|gif|svg)(\?.*)?$/,
loader: 'url-loader',
options: {
limit: 10000,
name: utils.assetsPath('img/[name].[hash:7].[ext]')
}
},
{
test: /\.(mp4|webm|ogg|mp3|wav|flac|aac)(\?.*)?$/,
loader: 'url-loader',
options: {
limit: 10000,
name: utils.assetsPath('media/[name].[hash:7].[ext]')
}
},
{
test: /\.(woff2?|eot|ttf|otf)(\?.*)?$/,
loader: 'url-loader',
options: {
limit: 10000,
name: utils.assetsPath('fonts/[name].[hash:7].[ext]')
}
}
]
}
}
/**
* Vue Paper Dashboard PRO Custom configuration. Do not delete this once upgrading to a newer vue-cli version
*/
const merge = require('webpack-merge')
const customWebpackConfig = require('./webpack.custom')
module.exports = merge(customWebpackConfig, module.exports)

34
public/theme/build/webpack.custom.js

@ -0,0 +1,34 @@ @@ -0,0 +1,34 @@
var path = require('path')
function resolve (dir) {
return path.join(__dirname, '..', dir)
}
var webpackConfig = {
resolve: {
alias: {
'src': resolve('src'),
'assets': resolve('src/assets'),
'components': resolve('src/components')
}
},
module: {
rules: []
}
}
var esLintRule = {
test: /\.(js|vue)$/,
loader: 'eslint-loader',
enforce: 'pre',
include: [resolve('src'), resolve('test')],
options: {
formatter: require('eslint-friendly-formatter')
}
}
if(process.env.ENABLE_ESLINT && process.env.ENABLE_ESLINT === 'true'){
webpackConfig.module.rules.unshift(esLintRule) //add eslint
}
module.exports = webpackConfig

35
public/theme/build/webpack.dev.conf.js

@ -0,0 +1,35 @@ @@ -0,0 +1,35 @@
var utils = require('./utils')
var webpack = require('webpack')
var config = require('../config')
var merge = require('webpack-merge')
var baseWebpackConfig = require('./webpack.base.conf')
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()
]
})

126
public/theme/build/webpack.prod.conf.js

@ -0,0 +1,126 @@ @@ -0,0 +1,126 @@
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'
}),
// keep module.id stable when vender modules does not change
new webpack.HashedModuleIdsPlugin(),
// 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

32
public/theme/build/webpack.test.conf.js

@ -0,0 +1,32 @@ @@ -0,0 +1,32 @@
'use strict'
// This is the webpack config used for unit tests.
const utils = require('./utils')
const webpack = require('webpack')
const merge = require('webpack-merge')
const baseWebpackConfig = require('./webpack.base.conf')
const webpackConfig = merge(baseWebpackConfig, {
// 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

6
public/theme/config/dev.env.js

@ -0,0 +1,6 @@ @@ -0,0 +1,6 @@
var merge = require('webpack-merge')
var prodEnv = require('./prod.env')
module.exports = merge(prodEnv, {
NODE_ENV: '"development"'
})

37
public/theme/config/index.js

@ -0,0 +1,37 @@ @@ -0,0 +1,37 @@
// 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: false,
// 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: 8000,
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
}
}

3
public/theme/config/prod.env.js

@ -0,0 +1,3 @@ @@ -0,0 +1,3 @@
module.exports = {
NODE_ENV: '"production"'
}

6
public/theme/config/test.env.js

@ -0,0 +1,6 @@ @@ -0,0 +1,6 @@
var merge = require('webpack-merge')
var devEnv = require('./dev.env')
module.exports = merge(devEnv, {
NODE_ENV: '"testing"'
})

21
public/theme/index.html

@ -0,0 +1,21 @@ @@ -0,0 +1,21 @@
<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8">
<link rel="icon" type="image/png" sizes="96x96" href="static/img/favicon.png">
<meta http-equiv="X-UA-Compatible" content="IE=edge,chrome=1" />
<title>ReCast</title>
<!-- Bootstrap core CSS -->
<meta name="viewport" content="width=device-width, initial-scale=1.0, maximum-scale=1.0, user-scalable=0">
<!-- Fonts and icons -->
<link href="https://maxcdn.bootstrapcdn.com/font-awesome/4.7.0/css/font-awesome.min.css" rel="stylesheet">
<link href='https://fonts.googleapis.com/css?family=Roboto:400,700,300' rel='stylesheet' type='text/css'>
<link href="static/css/nucleo-icons.css" rel="stylesheet" />
</head>
<body>
<div id="app"></div>
<!-- built files will be auto injected -->
</body>
</html>

13954
public/theme/package-lock.json generated

File diff suppressed because it is too large Load Diff

105
public/theme/package.json

@ -0,0 +1,105 @@ @@ -0,0 +1,105 @@
{
"name": "vue-light-bootstrap-dashboard",
"version": "1.0.0",
"description": "Vue light bootstrap dashboard",
"author": "cristijora <joracristi@gmail.com>",
"private": true,
"scripts": {
"dev": "node build/dev-server.js",
"start": "cross-env ENABLE_ESLINT=true node build/dev-server.js",
"build": "cross-env node build/build.js",
"unit": "cross-env BABEL_ENV=test karma start test/unit/karma.conf.js --single-run",
"test": "npm run unit",
"lint": "eslint --ext .js,.vue src test/unit/specs"
},
"dependencies": {
"@websanova/vue-auth": "^2.21.9-beta",
"axios": "^0.18.0",
"bootstrap": "^4.0.0-beta.2",
"chartist": "^0.11.0",
"es6-promise": "^4.1.1",
"google-maps": "^3.2.1",
"v-tooltip": "^2.0.0-rc.1",
"vue": "^2.5.2",
"vue-axios": "^2.1.1",
"vue-clickaway": "^2.1.0",
"vue-notifyjs": "^0.2.0",
"vue-router": "^3.0.1",
"vue2-google-maps": "^0.8.4"
},
"devDependencies": {
"autoprefixer": "^7.1.2",
"babel-core": "^6.22.1",
"babel-eslint": "^7.1.1",
"babel-loader": "^7.1.1",
"babel-plugin-component": "^0.10.1",
"babel-plugin-istanbul": "^4.1.1",
"babel-plugin-transform-runtime": "^6.22.0",
"babel-preset-env": "^1.3.2",
"babel-preset-stage-2": "^6.22.0",
"babel-register": "^6.22.0",
"chai": "^3.5.0",
"chalk": "^2.0.1",
"connect-history-api-fallback": "^1.3.0",
"copy-webpack-plugin": "^4.0.1",
"cross-env": "^5.0.1",
"css-loader": "^0.28.0",
"cssnano": "^3.10.0",
"eslint": "^3.19.0",
"eslint-config-standard": "^6.2.1",
"eslint-friendly-formatter": "^3.0.0",
"eslint-loader": "^1.7.1",
"eslint-plugin-html": "^3.0.0",
"eslint-plugin-promise": "^3.4.0",
"eslint-plugin-standard": "^2.0.1",
"eventsource-polyfill": "^0.9.6",
"express": "^4.14.1",
"extract-text-webpack-plugin": "^2.0.0",
"file-loader": "^0.11.1",
"friendly-errors-webpack-plugin": "^1.1.3",
"function-bind": "^1.1.1",
"html-webpack-plugin": "^2.28.0",
"http-proxy-middleware": "^0.17.3",
"inject-loader": "^3.0.0",
"karma": "^1.4.1",
"karma-coverage": "^1.1.1",
"karma-mocha": "^1.3.0",
"karma-phantomjs-launcher": "^1.0.2",
"karma-phantomjs-shim": "^1.4.0",
"karma-sinon-chai": "^1.3.1",
"karma-sourcemap-loader": "^0.3.7",
"karma-spec-reporter": "0.0.31",
"karma-webpack": "^2.0.2",
"mocha": "^3.2.0",
"node-sass": "^4.5.3",
"opn": "^5.1.0",
"optimize-css-assets-webpack-plugin": "^2.0.0",
"ora": "^1.2.0",
"phantomjs-prebuilt": "^2.1.14",
"rimraf": "^2.6.0",
"sass-loader": "^6.0.6",
"semver": "^5.3.0",
"shelljs": "^0.7.6",
"sinon": "^2.1.0",
"sinon-chai": "^2.8.0",
"url-loader": "^0.5.8",
"vue-loader": "^13.0.4",
"vue-style-loader": "^3.0.1",
"vue-template-compiler": "^2.5.2",
"vue-test-utils": "^1.0.0-beta.3",
"webpack": "^2.6.1",
"webpack-bundle-analyzer": "^2.2.1",
"webpack-dev-middleware": "^1.10.0",
"webpack-hot-middleware": "^2.18.0",
"webpack-merge": "^4.1.0"
},
"engines": {
"node": ">= 4.0.0",
"npm": ">= 3.0.0"
},
"browserslist": [
"> 1%",
"last 2 versions",
"not ie <= 8"
]
}

38
public/theme/src/App.vue

@ -0,0 +1,38 @@ @@ -0,0 +1,38 @@
<template>
<div :class="{'nav-open': $sidebar.showSidebar}">
<notifications></notifications>
<router-view></router-view>
</div>
</template>
<script>
export default {}
</script>
<style lang="scss">
.vue-notifyjs.notifications{
.list-move {
transition: transform 0.3s, opacity 0.4s;
}
.list-item {
display: inline-block;
margin-right: 10px;
}
.list-enter-active {
transition: transform 0.2s ease-in, opacity 0.4s ease-in;
}
.list-leave-active {
transition: transform 1s ease-out, opacity 0.4s ease-out;
}
.list-enter {
opacity: 0;
transform: scale(1.1);
}
.list-leave-to {
opacity: 0;
transform: scale(1.2, 0.7);
}
}
</style>

61
public/theme/src/assets/css/demo.css

@ -0,0 +1,61 @@ @@ -0,0 +1,61 @@
@media (min-width: 992px){
.typo-line{
padding-left: 140px;
margin-bottom: 40px;
position: relative;
}
.typo-line .category{
transform: translateY(-50%);
top: 50%;
left: 0px;
position: absolute;
}
}
.all-icons [class*="pe-"]{
font-size: 40px;
}
.all-icons input{
border: 0;
}
.all-icons .font-icon-detail{
text-align: center;
padding: 45px 0px 30px;
border: 1px solid #e5e5e5;
border-radius: 6px;
margin: 15px 0;
}
.all-icons .font-icon-detail input{
margin: 25px auto 0;
width: 100%;
text-align: center;
display: block;
color: #aaa;
font-size: 13px;
}
#map{
position:relative;
width:100%;
height: calc(100% - 60px);
}
.places-buttons .btn{
margin-bottom: 30px
}
.sidebar .nav > li.active-pro{
position: absolute;
width: 100%;
bottom: 10px;
}
.sidebar .nav > li.active-pro a{
background: rgba(255, 255, 255, 0.14);
opacity: 1;
color: #FFFFFF;
}
.table-upgrade td:nth-child(2),
.table-upgrade td:nth-child(3){
text-align: center;
}

90
public/theme/src/assets/sass/lbd/_alerts.scss

@ -0,0 +1,90 @@ @@ -0,0 +1,90 @@
.alert{
border: 0;
border-radius: 0;
color: #FFFFFF;
padding: 10px 15px;
font-size: 14px;
.container &{
border-radius: 4px;
}
.navbar &{
border-radius: 0;
left: 0;
position: absolute;
right: 0;
top: 85px;
width: 100%;
z-index: 3;
}
.navbar:not(.navbar-transparent) &{
top: 70px;
}
span[data-notify="icon"]{
font-size: 30px;
display: block;
left: 15px;
position: absolute;
top: 50%;
margin-top: -15px;
}
i.nc-simple-remove{
font-size: 12px !important;
font: bold normal normal 14px/1 'nucleo-icons';
}
button.close{
position: absolute;
right: 10px;
top: 50%;
margin-top: -13px;
z-index: 1;
background-color: #FFFFFF;
display: block;
border-radius: 50%;
opacity: .4;
line-height: 9px;
width: 25px;
height: 25px;
outline: 0 !important;
text-align: center;
padding: 3px;
font-weight: 300;
&:hover{
opacity: .55;
}
}
.close ~ span{
display: block;
max-width: 89%;
}
&[data-notify="container"]{
padding: 10px 10px 10px 20px;
border-radius: $border-radius-base;
}
&.alert-with-icon{
padding-left: 65px;
}
}
.alert-primary{
background-color: $blue-navbar;
}
.alert-info{
background-color: $azure-navbar;
}
.alert-success {
background-color: $green-navbar;
}
.alert-warning {
background-color: $orange-navbar;
}
.alert-danger {
background-color: $red-navbar;
}

132
public/theme/src/assets/sass/lbd/_buttons.scss

@ -0,0 +1,132 @@ @@ -0,0 +1,132 @@
.btn{
border-width: $border-thick;
background-color: $transparent-bg;
font-weight: $font-weight-normal;
@include opacity(.8);
padding: $padding-base-vertical $padding-base-horizontal;
@include btn-styles($default-color, $default-states-color);
&:hover,
&:focus{
@include opacity(1);
outline: 0 !important;
box-shadow: none;
}
&:active,
&.active,
.open > &.dropdown-toggle {
@include box-shadow(none);
outline: 0 !important;
}
&.btn-icon{
padding: $padding-base-vertical;
}
}
// Apply the mixin to the buttons
//.btn-default { @include btn-styles($default-color, $default-states-color); }
.btn-primary { @include btn-styles($primary-color, $primary-states-color); }
.btn-success { @include btn-styles($success-color, $success-states-color); }
.btn-info { @include btn-styles($info-color, $info-states-color); }
.btn-warning { @include btn-styles($warning-color, $warning-states-color); }
.btn-danger { @include btn-styles($danger-color, $danger-states-color); }
.btn-neutral {
@include btn-styles($white-color, $white-color);
&:active,
&.active,
.open > &.dropdown-toggle{
background-color: $white-color;
color: $default-color;
}
&.btn-fill,
&.btn-fill:hover,
&.btn-fill:focus{
color: $default-color;
}
&.btn-simple:active,
&.btn-simple.active{
background-color: transparent;
}
}
.btn{
&:disabled,
&[disabled],
&.disabled{
@include opacity(.5);
}
}
.btn-round{
border-width: $border-thin;
border-radius: $btn-round-radius !important;
padding: $padding-round-vertical $padding-round-horizontal;
&.btn-icon{
padding: $padding-round-vertical;
}
}
.btn-simple{
border: $none;
font-size: $font-size-medium;
padding: $padding-base-vertical $padding-base-horizontal;
&.btn-icon{
padding: $padding-base-vertical;
}
}
.btn-lg{
@include btn-size($padding-large-vertical, $padding-large-horizontal, $font-size-large, $border-radius-large);
font-weight: $font-weight-normal;
}
.btn-sm{
@include btn-size($padding-small-vertical, $padding-small-horizontal, $font-size-small, $border-radius-small);
}
.btn-xs {
@include btn-size($padding-xs-vertical, $padding-xs-horizontal, $font-size-small, $border-radius-small);
}
.btn-wd {
min-width: 140px;
}
.btn-group.select{
width: 100%;
}
.btn-group.select .btn{
text-align: left;
}
.btn-group.select .caret{
position: absolute;
top: 50%;
margin-top: -1px;
right: 8px;
}
.btn-social{
opacity: 0.85;
}
.btn-twitter{
border-color: $social-twitter;
color: $social-twitter;
&:hover{
opacity: 1 !important;
border-color: $social-twitter;
color: $social-twitter;
}
}
.btn-facebook{
border-color: $social-facebook;
color: $social-facebook;
&:hover{
opacity: 1 !important;
border-color: $social-facebook;
color: $social-facebook;
}
}

253
public/theme/src/assets/sass/lbd/_cards.scss

@ -0,0 +1,253 @@ @@ -0,0 +1,253 @@
.card{
border-radius: $border-radius-base;
background-color: $white-color;
margin-bottom: 30px;
.card-image{
width: 100%;
overflow: hidden;
height: 260px;
border-radius: $border-radius-base $border-radius-base 0 0;
position: relative;
-webkit-transform-style: preserve-3d;
-moz-transform-style: preserve-3d;
transform-style: preserve-3d;
img {
width: 100%;
}
}
.filter{
position: absolute;
z-index: 2;
background-color: rgba(0,0,0,.68);
top: 0;
left: 0;
width: 100%;
height: 100%;
text-align: center;
@include opacity(0);
.btn{
@include vertical-align();
}
}
&:hover .filter{
@include opacity(1);
}
.btn-hover{
@include opacity(0);
}
&:hover .btn-hover{
@include opacity(1);
}
.card-body{
padding: 15px 15px 10px 15px;
}
.card-header{
padding: 15px 15px 0;
background-color: $white-color;
border-bottom: none !important;
}
.card-category,
label{
font-size: $font-size-base;
font-weight: $font-weight-normal;
color: $dark-gray;
margin-bottom: 0px;
i{
font-size: $font-paragraph;
}
}
label{
font-size: $font-size-small;
margin-bottom: 5px;
text-transform: uppercase;
}
.card-title{
margin: $none;
color: $black-color;
font-weight: $font-weight-light;
}
.avatar{
width: 30px;
height: 30px;
overflow: hidden;
border-radius: 50%;
margin-right: 5px;
}
.description{
font-size: $font-size-base;
color: #333;
}
.card-footer{
padding-top: 0;
background-color: $transparent-bg;
line-height: 30px;
border-top: none !important;
font-size: 14px;
.legend{
padding: 5px 0;
}
hr{
margin-top: 5px;
margin-bottom: 5px;
}
}
.stats{
color: #a9a9a9;
}
.card-footer div{
display: inline-block;
}
.author{
font-size: $font-size-small;
font-weight: $font-weight-bold;
text-transform: uppercase;
}
.author i{
font-size: $font-size-base;
}
h6{
font-size: $font-size-small;
margin: 0;
}
&.card-separator:after{
height: 100%;
right: -15px;
top: 0;
width: 1px;
background-color: $medium-gray;
card-body: "";
position: absolute;
}
.ct-chart{
margin: 30px 0 30px;
height: 245px;
}
.ct-label{
font-size: 1rem !important;
}
.table{
tbody td:first-child,
thead th:first-child{
padding-left: 15px;
}
tbody td:last-child,
thead th:last-child{
padding-right: 15px;
}
}
.alert{
border-radius: $border-radius-base;
position: relative;
&.alert-with-icon{
padding-left: 65px;
}
}
}
.card-stats{
.card-body{
padding: 15px 15px 0px;
.numbers{
font-size: 1.8rem;
text-align: right;
p{
margin-bottom: 0;
}
}
}
.card-footer{
padding: 0px 15px 10px 15px;
}
.icon-big {
font-size: 3em;
min-height: 64px;
i{
line-height: 59px;
}
}
}
.card-user{
.card-image{
height: 110px;
}
.card-image-plain{
height: 0;
margin-top: 110px;
}
.author{
text-align: center;
text-transform: none;
margin-top: -70px;
}
.avatar{
width: 124px;
height: 124px;
border: 5px solid #FFFFFF;
position: relative;
margin-bottom: 15px;
&.border-gray{
border-color: #EEEEEE;
}
}
.title{
line-height: 24px;
}
.card-body{
min-height: 240px;
}
}
.card-user,
.card-price{
.card-footer{
padding: 5px 15px 10px;
}
hr{
margin: 5px 15px;
}
}
.card-plain{
background-color: transparent;
box-shadow: none;
border-radius: 0;
.card-image{
border-radius: 4px;
}
}
.card.card-plain{
border: none !important;
.card-header{
background-color: transparent !important;
}
}

230
public/theme/src/assets/sass/lbd/_chartist.scss

@ -0,0 +1,230 @@ @@ -0,0 +1,230 @@
@mixin ct-responsive-svg-container($width: 100%, $ratio: $ct-container-ratio) {
display: block;
position: relative;
width: $width;
&:before {
display: block;
float: left;
content: "";
width: 0;
height: 0;
padding-bottom: $ratio * 100%;
}
&:after {
content: "";
display: table;
clear: both;
}
> svg {
display: block;
position: absolute;
top: 0;
left: 0;
}
}
@mixin ct-align-justify($ct-text-align: $ct-text-align, $ct-text-justify: $ct-text-justify) {
-webkit-box-align: $ct-text-align;
-webkit-align-items: $ct-text-align;
-ms-flex-align: $ct-text-align;
align-items: $ct-text-align;
-webkit-box-pack: $ct-text-justify;
-webkit-justify-content: $ct-text-justify;
-ms-flex-pack: $ct-text-justify;
justify-content: $ct-text-justify;
// Fallback to text-align for non-flex browsers
@if($ct-text-justify == 'flex-start') {
text-align: left;
} @else if ($ct-text-justify == 'flex-end') {
text-align: right;
} @else {
text-align: center;
}
}
@mixin ct-flex() {
// Fallback to block
display: block;
display: -webkit-box;
display: -moz-box;
display: -ms-flexbox;
display: -webkit-flex;
display: flex;
}
@mixin ct-chart-label($ct-text-color: $ct-text-color, $ct-text-size: $ct-text-size, $ct-text-line-height: $ct-text-line-height) {
fill: $ct-text-color;
color: $ct-text-color;
font-size: $ct-text-size;
line-height: $ct-text-line-height;
}
@mixin ct-chart-grid($ct-grid-color: $ct-grid-color, $ct-grid-width: $ct-grid-width, $ct-grid-dasharray: $ct-grid-dasharray) {
stroke: $ct-grid-color;
stroke-width: $ct-grid-width;
@if ($ct-grid-dasharray) {
stroke-dasharray: $ct-grid-dasharray;
}
}
@mixin ct-chart-point($ct-point-size: $ct-point-size, $ct-point-shape: $ct-point-shape) {
stroke-width: $ct-point-size;
stroke-linecap: $ct-point-shape;
}
@mixin ct-chart-line($ct-line-width: $ct-line-width, $ct-line-dasharray: $ct-line-dasharray) {
fill: none;
stroke-width: $ct-line-width;
@if ($ct-line-dasharray) {
stroke-dasharray: $ct-line-dasharray;
}
}
@mixin ct-chart-area($ct-area-opacity: $ct-area-opacity) {
stroke: none;
fill-opacity: $ct-area-opacity;
}
@mixin ct-chart-bar($ct-bar-width: $ct-bar-width) {
fill: none;
stroke-width: $ct-bar-width;
}
@mixin ct-chart-donut($ct-donut-width: $ct-donut-width) {
fill: none;
stroke-width: $ct-donut-width;
}
@mixin ct-chart-series-color($color) {
.#{$ct-class-point}, .#{$ct-class-line}, .#{$ct-class-bar}, .#{$ct-class-slice-donut} {
stroke: $color;
}
.#{$ct-class-slice-pie}, .#{$ct-class-area} {
fill: $color;
}
}
@mixin ct-chart($ct-container-ratio: $ct-container-ratio, $ct-text-color: $ct-text-color, $ct-text-size: $ct-text-size, $ct-grid-color: $ct-grid-color, $ct-grid-width: $ct-grid-width, $ct-grid-dasharray: $ct-grid-dasharray, $ct-point-size: $ct-point-size, $ct-point-shape: $ct-point-shape, $ct-line-width: $ct-line-width, $ct-bar-width: $ct-bar-width, $ct-donut-width: $ct-donut-width, $ct-series-names: $ct-series-names, $ct-series-colors: $ct-series-colors) {
.#{$ct-class-label} {
@include ct-chart-label($ct-text-color, $ct-text-size);
}
.#{$ct-class-chart-line} .#{$ct-class-label},
.#{$ct-class-chart-bar} .#{$ct-class-label} {
@include ct-flex();
}
.#{$ct-class-label}.#{$ct-class-horizontal}.#{$ct-class-start} {
@include ct-align-justify(flex-end, flex-start);
// Fallback for browsers that don't support foreignObjects
text-anchor: start;
}
.#{$ct-class-label}.#{$ct-class-horizontal}.#{$ct-class-end} {
@include ct-align-justify(flex-start, flex-start);
// Fallback for browsers that don't support foreignObjects
text-anchor: start;
}
.#{$ct-class-label}.#{$ct-class-vertical}.#{$ct-class-start} {
@include ct-align-justify(flex-end, flex-end);
// Fallback for browsers that don't support foreignObjects
text-anchor: end;
}
.#{$ct-class-label}.#{$ct-class-vertical}.#{$ct-class-end} {
@include ct-align-justify(flex-end, flex-start);
// Fallback for browsers that don't support foreignObjects
text-anchor: start;
}
.#{$ct-class-chart-bar} .#{$ct-class-label}.#{$ct-class-horizontal}.#{$ct-class-start} {
@include ct-align-justify(flex-end, center);
// Fallback for browsers that don't support foreignObjects
text-anchor: start;
}
.#{$ct-class-chart-bar} .#{$ct-class-label}.#{$ct-class-horizontal}.#{$ct-class-end} {
@include ct-align-justify(flex-start, center);
// Fallback for browsers that don't support foreignObjects
text-anchor: start;
}
.#{$ct-class-chart-bar}.#{$ct-class-horizontal-bars} .#{$ct-class-label}.#{$ct-class-horizontal}.#{$ct-class-start} {
@include ct-align-justify(flex-end, flex-start);
// Fallback for browsers that don't support foreignObjects
text-anchor: start;
}
.#{$ct-class-chart-bar}.#{$ct-class-horizontal-bars} .#{$ct-class-label}.#{$ct-class-horizontal}.#{$ct-class-end} {
@include ct-align-justify(flex-start, flex-start);
// Fallback for browsers that don't support foreignObjects
text-anchor: start;
}
.#{$ct-class-chart-bar}.#{$ct-class-horizontal-bars} .#{$ct-class-label}.#{$ct-class-vertical}.#{$ct-class-start} {
//@include ct-chart-label($ct-text-color, $ct-text-size, center, $ct-vertical-text-justify);
@include ct-align-justify(center, flex-end);
// Fallback for browsers that don't support foreignObjects
text-anchor: end;
}
.#{$ct-class-chart-bar}.#{$ct-class-horizontal-bars} .#{$ct-class-label}.#{$ct-class-vertical}.#{$ct-class-end} {
@include ct-align-justify(center, flex-start);
// Fallback for browsers that don't support foreignObjects
text-anchor: end;
}
.#{$ct-class-grid} {
@include ct-chart-grid($ct-grid-color, $ct-grid-width, $ct-grid-dasharray);
}
.#{$ct-class-point} {
@include ct-chart-point($ct-point-size, $ct-point-shape);
}
.#{$ct-class-line} {
@include ct-chart-line($ct-line-width);
}
.#{$ct-class-area} {
@include ct-chart-area();
}
.#{$ct-class-bar} {
@include ct-chart-bar($ct-bar-width);
}
.#{$ct-class-slice-donut} {
@include ct-chart-donut($ct-donut-width);
}
@if $ct-include-colored-series {
@for $i from 0 to length($ct-series-names) {
.#{$ct-class-series}-#{nth($ct-series-names, $i + 1)} {
$color: nth($ct-series-colors, $i + 1);
@include ct-chart-series-color($color);
}
}
}
}
@if $ct-include-classes {
@include ct-chart();
@if $ct-include-alternative-responsive-containers {
@for $i from 0 to length($ct-scales-names) {
.#{nth($ct-scales-names, $i + 1)} {
@include ct-responsive-svg-container($ratio: nth($ct-scales, $i + 1));
}
}
}
}

140
public/theme/src/assets/sass/lbd/_checkbox-radio-switch.scss

@ -0,0 +1,140 @@ @@ -0,0 +1,140 @@
.from-check,
.form-check-radio {
margin-bottom: 12px;
position: relative;
}
.form-check{
.form-check-label{
display: inline-block;
position: relative;
cursor: pointer;
padding-left: 35px;
line-height: 26px;
margin-bottom: 0;
}
.form-check-sign::before,
.form-check-sign::after{
font-family: 'FontAwesome';
content: "\f096";
display: inline-block;
color: $info-color;
position: absolute;
width: 19px;
height: 19px;
margin-top: -12px;
margin-left: -23px;
font-size: 21px;
cursor: pointer;
-webkit-transition: opacity 0.3s linear;
-moz-transition: opacity 0.3s linear;
-o-transition: opacity 0.3s linear;
-ms-transition: opacity 0.3s linear;
transition: opacity 0.3s linear;
}
.form-check-sign::after{
font-family: 'FontAwesome';
content: "\f046";
text-align: center;
opacity: 0;
color: $info-color;
border: 0;
background-color: inherit;
}
&.disabled{
.form-check-label{
color: $dark-gray;
opacity: .5;
cursor: not-allowed;
}
}
}
.form-check.disabled .form-check-label,
.form-check.disabled .form-check-label {
}
.form-check input[type="checkbox"],
.form-check-radio input[type="radio"]{
opacity: 0;
position: absolute;
visibility: hidden;
}
.form-check input[type="checkbox"]:checked + .form-check-sign::after{
opacity: 1;
}
.form-control input[type="checkbox"]:disabled + .form-check-sign::before,
.checkbox input[type="checkbox"]:disabled + .form-check-sign::after{
cursor: not-allowed;
}
.form-check .form-check-label input[type="checkbox"]:disabled + .form-check-sign,
.form-check-radio input[type="radio"]:disabled + .form-check-sign{
pointer-events: none !important;
}
.form-check-radio{
.form-check-label{
padding-left: 2rem;
}
&.disabled{
.form-check-label{
color: $dark-gray;
opacity: .5;
cursor: not-allowed;
}
}
}
.form-check-radio .form-check-sign::before{
font-family: 'FontAwesome';
content: "\f10c";
font-size: 22px;
-webkit-font-smoothing: antialiased;
-moz-osx-font-smoothing: grayscale;
display: inline-block;
position: absolute;
opacity: .50;
left: 5px;
top: -5px;
}
.form-check-label input[type="checkbox"]:checked + .form-check-sign:before{
// background-color: #66615B;
}
.form-check-radio input[type="radio"] + .form-check-sign:after,
.form-check-radio input[type="radio"] {
opacity: 0;
-webkit-transition: opacity 0.3s linear;
-moz-transition: opacity 0.3s linear;
-o-transition: opacity 0.3s linear;
-ms-transition: opacity 0.3s linear;
transition: opacity 0.3s linear;
content:" ";
display: block;
}
.form-check-radio input[type="radio"]:checked + .form-check-sign::after {
font-family: 'FontAwesome';
content: "\f192";
top: -5px;
position: absolute;
left: 5px;
opacity: 1;
font-size: 22px;
}
.form-check-radio input[type="radio"]:checked + .form-check-sign::after{
opacity: 1;
}
.form-check-radio input[type="radio"]:disabled + .form-check-sign::before,
.form-check-radio input[type="radio"]:disabled + .form-check-sign::after {
color: $dark-gray;
}

136
public/theme/src/assets/sass/lbd/_dropdown.scss

@ -0,0 +1,136 @@ @@ -0,0 +1,136 @@
.dropdown-menu{
visibility: hidden;
margin: 0;
padding: 0;
border-radius: $border-radius-extreme;
display: block;
z-index: 9000;
position: absolute;
@include opacity(0);
@include box-shadow($dropdown-shadow);
.show &{
@include opacity(1);
visibility: visible;
}
.select &{
border-radius: $border-radius-bottom;
@include box-shadow(none);
@include transform-origin($select-coordinates);
@include transform-scale(1);
@include transition($fast-transition-time, $transition-linear);
margin-top: -20px;
}
.select.show &{
margin-top: -1px;
}
.dropdown-item {
padding: $padding-base-vertical $padding-base-horizontal;
color: #333333;
img{
margin-top: -3px;
}
}
.dropdown-item:focus{
outline: 0 !important;
}
.btn-group.select &{
min-width: 100%;
}
> li:first-child > a{
border-top-left-radius: $border-radius-extreme;
border-top-right-radius: $border-radius-extreme;
}
> li:last-child > a{
border-bottom-left-radius: $border-radius-extreme;
border-bottom-right-radius: $border-radius-extreme;
}
.select & > li:first-child > a{
border-radius: 0;
border-bottom: 0 none;
}
.dropdown-item:hover,
.dropdown-item:focus {
background-color: $smoke-bg;
color: #333333;
opacity: 1;
text-decoration: none;
}
&.dropdown-blue > li > a:hover,
&.dropdown-blue > li > a:focus{
background-color: $light-blue;
}
&.dropdown-azure > li > a:hover,
&.dropdown-azure > li > a:focus{
background-color: $light-azure;
}
&.ct-green > li > a:hover,
&.ct-green > li > a:focus{
background-color: $light-green;
}
&.dropdown-orange > li > a:hover,
&.dropdown-orange > li > a:focus{
background-color: $light-orange;
}
&.dropdown-red > li > a:hover,
&.dropdown-red > li > a:focus{
background-color: $light-red;
}
.dropdown-item{
i[class*="nc-icon"]{
font-size: 18px;
text-align: center;
line-height: 25px;
float: left;
padding-right: 10px;
}
}
&.dropdown-menu-right{
&:before,
&:after{
right: 12px !important;
left: auto !important;
}
}
}
.dropdown-with-icons{
> li > a{
padding-left: 0px;
line-height: 28px;
}
i{
text-align: center;
line-height: 28px;
float: left;
&[class^="pe-"]{
font-size: 24px;
width: 46px;
}
&[class^="fa"]{
font-size: 14px;
width: 38px;
}
}
}
//fix bug for the select items in btn-group
.btn-group.select{
overflow: hidden;
}
.btn-group.select.show{
overflow: visible;
}

75
public/theme/src/assets/sass/lbd/_footers.scss

@ -0,0 +1,75 @@ @@ -0,0 +1,75 @@
.footer{
background-color: $white-color;
.footer-menu{
height: 41px;
}
nav > ul{
list-style: none;
margin: 0;
padding: 0;
font-weight: normal;
a:not(.btn){
color: $dark-gray;
display: block;
margin-bottom: 3px;
&:hover,
&:focus{
color: $default-states-color;
}
}
}
.social-area{
padding: 15px 0;
h5{
padding-bottom: 15px;
}
}
.social-area > a:not(.btn){
color: $dark-gray;
display: inline-block;
vertical-align: top;
padding: $padding-social-a;
font-size: $font-size-large-navbar;
font-weight: normal;
line-height: $line-height;
text-align: center;
&:hover,
&:focus{
color: $default-states-color;
}
}
.copyright{
color: $default-states-color;
padding: 10px 15px;
margin: 10px 3px;
line-height: 20px;
font-size: $font-size-base;
}
hr{
border-color: $medium-gray;
}
.title{
color: $default-states-color;
}
}
.footer-default{
background-color: $smoke-bg;
}
.footer:not(.footer-big){
nav > ul{
font-size: $font-size-base;
li{
margin-left: 20px;
float: left;
}
a{
padding: 10px 0px;
margin: 10px 10px 10px 0px;
}
}
}

141
public/theme/src/assets/sass/lbd/_inputs.scss

@ -0,0 +1,141 @@ @@ -0,0 +1,141 @@
.form-control::-moz-placeholder{
@include placeholder($medium-gray,1);
}
.form-control:-moz-placeholder{
@include placeholder($medium-gray,1);
}
.form-control::-webkit-input-placeholder{
@include placeholder($medium-gray,1);
}
.form-control:-ms-input-placeholder{
@include placeholder($medium-gray,1);
}
.form-control {
background-color: $white-bg;
border: 1px solid $light-gray;
border-radius: $border-radius-base;
color: #565656;
@include input-size($padding-base-vertical, $padding-base-horizontal - 4, $height-base);
@include box-shadow(none);
&:focus{
background-color: $white-bg;
border: 1px solid $medium-dark-gray;
@include box-shadow(none);
outline: 0 !important;
color: #333333;
}
.has-success &,
.has-error &,
.has-success &:focus,
.has-error &:focus{
border-color: $light-gray;
@include box-shadow(none);
}
.has-success &{
color: $success-color;
}
.has-success &:focus{
border-color: $success-color;
}
.has-error &{
color: $danger-color;
}
.has-error &:focus{
border-color: $danger-color;
}
& + .form-control-feedback{
border-radius: $border-radius-large;
font-size: $font-size-base;
margin-top: -7px;
position: absolute;
right: 10px;
top: 50%;
vertical-align: middle;
}
.open &{
border-radius: $border-radius-base $border-radius-base 0 0;
border-bottom-color: transparent;
}
}
.input-lg{
height: 55px;
padding: $padding-large-vertical $padding-large-horizontal;
}
.has-error{
.form-control-feedback{
color: $danger-color;
}
}
.has-success{
.form-control-feedback{
color: $success-color
}
}
.input-group-addon {
background-color: $white-color;
border: 1px solid $light-gray;
border-radius: $border-radius-base;
.has-success &,
.has-error &{
background-color: $white-color;
border: 1px solid $light-gray;
}
.has-error .form-control:focus + &{
border-color: $danger-color;
color: $danger-color;
}
.has-success .form-control:focus + &{
border-color: $success-color;
color: $success-color;
}
.form-control:focus + &,
.form-control:focus ~ &{
background-color: $white-color;
border-color: $dark-gray;
}
}
.input-group .form-control:first-child,
.input-group-addon:first-child,
.input-group-btn:first-child > .dropdown-toggle,
.input-group-btn:last-child > .btn:not(:last-child):not(.dropdown-toggle) {
border-right: 0 none;
}
.input-group .form-control:last-child,
.input-group-addon:last-child,
.input-group-btn:last-child > .dropdown-toggle,
.input-group-btn:first-child > .btn:not(:first-child) {
border-left: 0 none;
}
.form-control[disabled], .form-control[readonly], fieldset[disabled] .form-control {
background-color: $smoke-bg;
color: $default-color;
cursor: not-allowed;
}
.input-group-btn .btn{
border-width: $border-thin;
padding: $padding-round-vertical $padding-base-horizontal;
}
.input-group-btn .btn-default:not(.btn-fill){
border-color: $medium-gray;
}
.input-group-btn:last-child > .btn{
margin-left: 0;
}
.input-group-focus .input-group-addon{
border-color: $dark-gray;
}

129
public/theme/src/assets/sass/lbd/_misc.scss

@ -0,0 +1,129 @@ @@ -0,0 +1,129 @@
/* General overwrite */
body,
.wrapper{
min-height: 100vh;
position: relative;
}
a{
color: $info-color;
&:hover, &:focus{
color: $info-states-color;
text-decoration: none;
}
}
a:focus, a:active,
button::-moz-focus-inner,
input::-moz-focus-inner,
input[type="reset"]::-moz-focus-inner,
input[type="button"]::-moz-focus-inner,
input[type="submit"]::-moz-focus-inner,
select::-moz-focus-inner,
input[type="file"] > input[type="button"]::-moz-focus-inner{
outline:0;
}
.ui-slider-handle:focus,
.navbar-toggle,
input:focus {
outline : 0 !important;
}
/* Animations */
.form-control,
.input-group-addon,
.tagsinput,
.navbar,
.navbar .alert{
@include transition($general-transition-time, $transition-linear);
}
.sidebar .nav a,
.table > tbody > tr .td-actions .btn{
@include transition($fast-transition-time, $transition-ease-in);
}
.btn{
@include transition($ultra-fast-transition-time, $transition-ease-in);
}
.fa{
width: 18px;
text-align: center;
}
.margin-top{
margin-top: 50px;
}
.wrapper{
position: relative;
top: 0;
height: 100vh;
}
// documentation
.page-header{
.page-header-image{
background-position: center center;
background-size: cover;
overflow: hidden;
width: 100%;
z-index: 1;
}
.title-container{
color: #fff;
position: relative;
top: 250px;
z-index: 3;
}
.filter:after{
background: rgba(0, 0, 0, 0) linear-gradient(to bottom, #9368e9 0%, #943bea 100%) repeat scroll 0 0 / 150% 150%;
content: "";
display: block;
height: 100%;
left: 0;
opacity: 0.77;
position: absolute;
top: 0;
width: 100%;
z-index: 2;
}
}
.documentation .page-header,
.documentation .page-header-image,
.documentation .page-header-image .filter:after{
height: 100vh;
}
.documentation .footer{
z-index: 3;
}
.documentation .wrapper{
margin-top: -61px;
height: 100vh;
}
.documentation .navbar{
z-index: 21;
}
.card-tasks{
.card-body{
.table{
td{
font-size: 14px;
.btn{
font-size: 14px;
}
.btn-info{
margin-top: 3px;
padding-right: 0;
}
}
td:last-child{
padding-right: 0;
}
}
}
}

22
public/theme/src/assets/sass/lbd/_mixins.scss

@ -0,0 +1,22 @@ @@ -0,0 +1,22 @@
//Utilities
@import "mixins/transparency";
@import "mixins/vendor-prefixes";
//Components
@import "mixins/buttons";
@import "mixins/inputs";
@import "mixins/labels";
@import "mixins/tabs";
@import "mixins/navbars";
@import "mixins/icons";
@import "mixins/social-buttons";
@import "mixins/morphing-buttons";
@import "mixins/cards";
@import "mixins/chartist";

71
public/theme/src/assets/sass/lbd/_modal.scss

@ -0,0 +1,71 @@ @@ -0,0 +1,71 @@
.modal{
&.show{
.modal-dialog{
-webkit-transform: translate(0, 30%);
-o-transform: translate(0, 30%);
transform: translate(0, 30%);
}
}
&.modal-mini{
.modal-dialog{
max-width: 255px;
margin: 0 auto;
}
}
.modal-content{
.modal-header{
border-bottom: none;
padding-top: 24px;
padding-right: 24px;
padding-bottom: 0;
padding-left: 24px;
.modal-profile{
width: 80px;
height: 80px;
border-radius: 50%;
text-align: center;
line-height: 5.7;
box-shadow: 0px 5px 20px 0px rgba(0, 0, 0, 0.3);
i{
font-size: 32px;
padding-top: 24px;
}
}
}
.modal-body{
padding-top: 24px;
padding-right: 24px;
padding-bottom: 16px;
padding-left: 24px;
line-height: 1.9;
}
.modal-body + .modal-footer{
padding-top: 0;
}
.modal-footer{
border-top: none;
padding-right: 24px;
padding-bottom: 16px;
padding-left: 24px;
-webkit-justify-content: space-between;
justify-content: space-between;
.btn{
margin: 0;
padding-left: 16px;
padding-right: 16px;
width: auto;
&:hover,
&focus{
text-decoration: none;
}
}
}
}
}

379
public/theme/src/assets/sass/lbd/_navbars.scss

@ -0,0 +1,379 @@ @@ -0,0 +1,379 @@
.nav {
.nav-item{
.nav-link:hover,
.nav-link:focus{
background-color: transparent;
}
}
}
.navbar{
border: $none;
font-size: $font-size-navbar;
border-radius: 0;
min-height: 50px;
background-color: $white-navbar;
border-bottom: 1px solid rgba(0, 0, 0, 0.1);
padding: 5px 15px;
.navbar-brand {
font-weight: 400;
margin: 5px 0px;
font-size: 20px;
color: $default-color;
&:hover{
color: #5e5e5e;
}
}
.navbar-toggler{
width: 37px;
height: 27px;
vertical-align: middle;
outline: 0;
cursor: pointer;
&.navbar-toggler-left{
position: relative;
left: 0;
padding-left: 0;
}
& .navbar-toggler-bar{
width: 3px;
height: 3px;
border-radius: 50%;
margin: 0 auto;
}
.burger-lines{
display: block;
position: relative;
background-color: #888;
width: 24px;
height: 2px;
border-radius: 1px;
margin: 4px auto;
}
}
.dropdown.nav-item{
.dropdown-toggle:after{
margin-top: 8px;
}
}
.navbar-nav{
align-items: center;
.nav-item{
.nav-link{
color: $default-color;
padding: $navbar-padding-a;
position: relative;
display: inline-flex;
line-height: 1.2;
&.btn{
margin: $navbar-margin-a-btn;
padding: $padding-base-vertical $padding-base-horizontal;
}
&.btn-round{
margin: $navbar-margin-a-btn-round;
}
[class^="fa"]{
font-size: $font-size-large + 1;
position: relative;
line-height: 40px;
top: 1px;
}
&:hover{
color: $info-color;
}
}
.dropdown-menu{
border-radius: $border-radius-extreme;
margin-top: -5px;
.dropdown-item{
&:first-child{
border-top-left-radius: 10px;
border-top-right-radius: 10px;
}
&:last-child{
border-bottom-left-radius: 10px;
border-bottom-right-radius: 10px;
}
}
.divider{
height: 1px;
margin: 5px 0;
overflow: hidden;
background-color: #e5e5e5;
}
}
}
.notification{
position: absolute;
background-color: #FB404B;
text-align: center;
border-radius: 10px;
min-width: 18px;
padding: 0 5px;
height: 18px;
font-size: 12px;
color: $white-color;
font-weight: bold;
line-height: 18px;
top: 0;
left: 7px;
}
.dropdown-toggle:after{
display: inline-block;
width: 0;
height: 0;
margin-left: 5px;
margin-top: 12px;
vertical-align: middle;
border-top: 4px dashed;
border-top: 4px solid\9;
border-right: 4px solid transparent;
border-left: 4px solid transparent;
}
}
.btn{
margin: $navbar-margin-btn;
font-size: $font-size-base;
}
.btn-simple{
font-size: $font-size-medium;
}
&.fixed{
width: calc(100% - $sidebar-width);
right: 0;
left: auto;
border-radius: 0;
}
.nc-icon{
font-weight: 700;
}
}
.navbar-transparent, [class*="navbar-ct"]{
.navbar-brand{
color: $white-color;
@include opacity(.9);
&:focus,
&:hover{
background-color: transparent;
@include opacity(1);
color: $white-color;
}
}
.navbar-nav{
.nav-item{
.nav-link:not(.btn){
color: $white-color;
border-color: $white-color;
@include opacity(0.8);
}
}
.active,
.nav-item{
.nav-link:not(.btn),
.nav-link:hover:not(.btn),
.nav-link:focus:not(.btn),{
background-color: transparent;
border-radius: 3px;
color: $white-color;
@include opacity(1);
}
}
.nav .nav-item .nav-link.btn:hover{
background-color: transparent;
}
.show{
.nav-link,
.nav-link:hover,
.nav-link:focus{
background-color: transparent;
color: $white-color;
@include opacity(1);
}
}
}
.btn-default{
color: $white-color;
border-color: $white-color;
}
.btn-default.btn-fill{
color: $dark-gray;
background-color: $white-color;
@include opacity(.9);
}
.btn-default.btn-fill:hover,
.btn-default.btn-fill:focus,
.btn-default.btn-fill:active,
.btn-default.btn-fill.active,
.show .dropdown-toggle.btn-fill.btn-default{
border-color: $white-color;
@include opacity(1);
}
}
.navbar-transparent{
.dropdown-menu .divider{
background-color: rgba($white-color,.2);
}
}
.navbar-default {
background-color: $white-navbar;
border-bottom: 1px solid rgba(0, 0, 0, 0.1);
.navbar-nav{
.nav-item{
.nav-link:not(.btn){
color: $dark-gray;
}
}
.active .nav-link,
.active .nav-link:not(.btn):hover,
.active .nav-link:not(.btn):focus,
.nav-item .nav-link:not(.btn):hover,
.nav-item .nav-link:not(.btn):focus{
background-color: transparent;
border-radius: 3px;
color: $info-color;
@include opacity(1);
}
.show{
.nav-link,
.nav-link:hover,
.nav-link:focus{
background-color: transparent;
color: $info-color;
}
}
.navbar-toggle:hover,.navbar-toggle:focus {
background-color: transparent;
}
}
&:not(.navbar-transparent) .btn-default:hover{
color: $info-color;
border-color: $info-color;
}
&:not(.navbar-transparent) .btn-neutral,
&:not(.navbar-transparent) .btn-neutral:hover,
&:not(.navbar-transparent) .btn-neutral:active{
color: $dark-gray;
}
}
/* Navbar with icons */
.navbar-icons{
&.navbar .navbar-brand{
margin-top: 12px;
margin-bottom: 12px;
}
.navbar-nav{
.nav-item{
.nav-link{
text-align: center;
padding: $navbar-padding-a-icons;
margin: $navbar-margin-a-icons;
}
}
[class^="pe"] {
font-size: 30px;
position: relative;
}
p {
margin: 3px 0 0;
}
}
}
.navbar-form{
@include box-shadow(none);
.form-control{
@include light-form();
height: 22px;
font-size: $font-size-navbar;
line-height: $line-height-general;
color: $light-gray;
}
.navbar-transparent & .form-control,
[class*="navbar-ct"] & .form-control{
color: $white-color;
border: $none;
border-bottom: 1px solid rgba($white-color,.6);
}
}
.navbar-ct-blue{
@include navbar-color($blue-navbar);
}
.navbar-ct-azure{
@include navbar-color($azure-navbar);
}
.navbar-ct-green{
@include navbar-color($green-navbar);
}
.navbar-ct-orange{
@include navbar-color($orange-navbar);
}
.navbar-ct-red{
@include navbar-color($red-navbar);
}
.navbar-transparent{
padding-top: 15px;
background-color: transparent;
border-bottom: 1px solid transparent;
}
.navbar-toggle{
margin-top: 19px;
margin-bottom: 19px;
border: $none;
.icon-bar {
background-color: $white-color;
}
.navbar-collapse,
.navbar-form {
border-color: transparent;
}
&.navbar-default .navbar-toggle:hover,
&.navbar-default .navbar-toggle:focus {
background-color: transparent;
}
}

574
public/theme/src/assets/sass/lbd/_partial-nucleo-icons.scss

@ -0,0 +1,574 @@ @@ -0,0 +1,574 @@
/*--------------------------------
nucleo-icons Web Font - built using nucleoapp.com
License - nucleoapp.com/license/
-------------------------------- */
@font-face {
font-family: 'nucleo-icons';
src: url('../fonts/nucleo-icons.eot');
src: url('../fonts/nucleo-icons.eot') format('embedded-opentype'), url('../fonts/nucleo-icons.woff2') format('woff2'), url('../fonts/nucleo-icons.woff') format('woff'), url('../fonts/nucleo-icons.ttf') format('truetype'), url('../fonts/nucleo-icons.svg') format('svg');
font-weight: normal;
font-style: normal;
}
/*------------------------
base class definition
-------------------------*/
.nc-icon {
display: inline-block;
font: normal normal normal 14px/1 'nucleo-icons';
font-size: inherit;
speak: none;
text-transform: none;
/* Better Font Rendering */
-webkit-font-smoothing: antialiased;
-moz-osx-font-smoothing: grayscale;
}
/*------------------------
change icon size
-------------------------*/
.nc-icon.lg {
font-size: 1.33333333em;
vertical-align: -16%;
}
.nc-icon.x2 {
font-size: 2em;
}
.nc-icon.x3 {
font-size: 3em;
}
/*----------------------------------
add a square/circle background
-----------------------------------*/
.nc-icon.square,
.nc-icon.circle {
padding: 0.33333333em;
vertical-align: -16%;
background-color: #eee;
}
.nc-icon.circle {
border-radius: 50%;
}
/*------------------------
list icons
-------------------------*/
.nc-icon-ul {
padding-left: 0;
margin-left: 2.14285714em;
list-style-type: none;
}
.nc-icon-ul > li {
position: relative;
}
.nc-icon-ul > li > .nc-icon {
position: absolute;
left: -1.57142857em;
top: 0.14285714em;
text-align: center;
}
.nc-icon-ul > li > .nc-icon.lg {
top: 0;
left: -1.35714286em;
}
.nc-icon-ul > li > .nc-icon.circle,
.nc-icon-ul > li > .nc-icon.square {
top: -0.19047619em;
left: -1.9047619em;
}
.all-icons{
.font-icon-list{
.font-icon-detail i{
font-size: 32px;
}
}
}
/*------------------------
spinning icons
-------------------------*/
.nc-icon.spin {
-webkit-animation: nc-icon-spin 2s infinite linear;
-moz-animation: nc-icon-spin 2s infinite linear;
animation: nc-icon-spin 2s infinite linear;
}
@-webkit-keyframes nc-icon-spin {
0% {
-webkit-transform: rotate(0deg);
}
100% {
-webkit-transform: rotate(360deg);
}
}
@-moz-keyframes nc-icon-spin {
0% {
-moz-transform: rotate(0deg);
}
100% {
-moz-transform: rotate(360deg);
}
}
@keyframes nc-icon-spin {
0% {
-webkit-transform: rotate(0deg);
-moz-transform: rotate(0deg);
-ms-transform: rotate(0deg);
-o-transform: rotate(0deg);
transform: rotate(0deg);
}
100% {
-webkit-transform: rotate(360deg);
-moz-transform: rotate(360deg);
-ms-transform: rotate(360deg);
-o-transform: rotate(360deg);
transform: rotate(360deg);
}
}
/*------------------------
rotated/flipped icons
-------------------------*/
.nc-icon.rotate-90 {
filter: progid:DXImageTransform.Microsoft.BasicImage(rotation=1);
-webkit-transform: rotate(90deg);
-moz-transform: rotate(90deg);
-ms-transform: rotate(90deg);
-o-transform: rotate(90deg);
transform: rotate(90deg);
}
.nc-icon.rotate-180 {
filter: progid:DXImageTransform.Microsoft.BasicImage(rotation=2);
-webkit-transform: rotate(180deg);
-moz-transform: rotate(180deg);
-ms-transform: rotate(180deg);
-o-transform: rotate(180deg);
transform: rotate(180deg);
}
.nc-icon.rotate-270 {
filter: progid:DXImageTransform.Microsoft.BasicImage(rotation=3);
-webkit-transform: rotate(270deg);
-moz-transform: rotate(270deg);
-ms-transform: rotate(270deg);
-o-transform: rotate(270deg);
transform: rotate(270deg);
}
.nc-icon.flip-y {
filter: progid:DXImageTransform.Microsoft.BasicImage(rotation=0);
-webkit-transform: scale(-1, 1);
-moz-transform: scale(-1, 1);
-ms-transform: scale(-1, 1);
-o-transform: scale(-1, 1);
transform: scale(-1, 1);
}
.nc-icon.flip-x {
filter: progid:DXImageTransform.Microsoft.BasicImage(rotation=2);
-webkit-transform: scale(1, -1);
-moz-transform: scale(1, -1);
-ms-transform: scale(1, -1);
-o-transform: scale(1, -1);
transform: scale(1, -1);
}
/*------------------------
font icons
-------------------------*/
.nc-air-baloon::before {
content: "\ea01";
}
.nc-album-2::before {
content: "\ea02";
}
.nc-alien-33::before {
content: "\ea03";
}
.nc-align-center::before {
content: "\ea04";
}
.nc-align-left-2::before {
content: "\ea05";
}
.nc-ambulance::before {
content: "\ea06";
}
.nc-android::before {
content: "\ea07";
}
.nc-app::before {
content: "\ea08";
}
.nc-apple::before {
content: "\ea09";
}
.nc-atom::before {
content: "\ea0a";
}
.nc-attach-87::before {
content: "\ea0b";
}
.nc-audio-92::before {
content: "\ea0c";
}
.nc-backpack::before {
content: "\ea0d";
}
.nc-badge::before {
content: "\ea0e";
}
.nc-bag::before {
content: "\ea0f";
}
.nc-bank::before {
content: "\ea10";
}
.nc-battery-81::before {
content: "\ea11";
}
.nc-bell-55::before {
content: "\ea12";
}
.nc-bold::before {
content: "\ea13";
}
.nc-bulb-63::before {
content: "\ea14";
}
.nc-bullet-list-67::before {
content: "\ea15";
}
.nc-bus-front-12::before {
content: "\ea16";
}
.nc-button-pause::before {
content: "\ea17";
}
.nc-button-play::before {
content: "\ea18";
}
.nc-button-power::before {
content: "\ea19";
}
.nc-camera-20::before {
content: "\ea1a";
}
.nc-caps-small::before {
content: "\ea1b";
}
.nc-cart-simple::before {
content: "\ea1c";
}
.nc-cctv::before {
content: "\ea1d";
}
.nc-chart-bar-32::before {
content: "\ea1e";
}
.nc-chart-pie-35::before {
content: "\ea1f";
}
.nc-chart-pie-36::before {
content: "\ea20";
}
.nc-chart::before {
content: "\ea21";
}
.nc-chat-round::before {
content: "\ea22";
}
.nc-check-2::before {
content: "\ea23";
}
.nc-circle-09::before {
content: "\ea24";
}
.nc-circle::before {
content: "\ea25";
}
.nc-cloud-download-93::before {
content: "\ea26";
}
.nc-cloud-upload-94::before {
content: "\ea27";
}
.nc-compass-05::before {
content: "\ea28";
}
.nc-controller-modern::before {
content: "\ea29";
}
.nc-credit-card::before {
content: "\ea2a";
}
.nc-delivery-fast::before {
content: "\ea2b";
}
.nc-email-83::before {
content: "\ea2c";
}
.nc-email-85::before {
content: "\ea2d";
}
.nc-explore-2::before {
content: "\ea2e";
}
.nc-fav-remove::before {
content: "\ea2f";
}
.nc-favourite-28::before {
content: "\ea30";
}
.nc-globe-2::before {
content: "\ea31";
}
.nc-grid-45::before {
content: "\ea32";
}
.nc-headphones-2::before {
content: "\ea33";
}
.nc-html5::before {
content: "\ea34";
}
.nc-istanbul::before {
content: "\ea35";
}
.nc-key-25::before {
content: "\ea36";
}
.nc-layers-3::before {
content: "\ea37";
}
.nc-light-3::before {
content: "\ea38";
}
.nc-lock-circle-open::before {
content: "\ea39";
}
.nc-map-big::before {
content: "\ea3a";
}
.nc-mobile::before {
content: "\ea3c";
}
.nc-money-coins::before {
content: "\ea3b";
}
.nc-note-03::before {
content: "\ea3d";
}
.nc-notes::before {
content: "\ea3e";
}
.nc-notification-70::before {
content: "\ea3f";
}
.nc-palette::before {
content: "\ea40";
}
.nc-paper-2::before {
content: "\ea41";
}
.nc-pin-3::before {
content: "\ea42";
}
.nc-planet::before {
content: "\ea43";
}
.nc-preferences-circle-rotate::before {
content: "\ea44";
}
.nc-puzzle-10::before {
content: "\ea45";
}
.nc-quote::before {
content: "\ea46";
}
.nc-refresh-02::before {
content: "\ea47";
}
.nc-ruler-pencil::before {
content: "\ea48";
}
.nc-satisfied::before {
content: "\ea49";
}
.nc-scissors::before {
content: "\ea4a";
}
.nc-send::before {
content: "\ea4b";
}
.nc-settings-90::before {
content: "\ea4c";
}
.nc-settings-gear-64::before {
content: "\ea4d";
}
.nc-settings-tool-66::before {
content: "\ea4e";
}
.nc-simple-add::before {
content: "\ea4f";
}
.nc-simple-delete::before {
content: "\ea50";
}
.nc-simple-remove::before {
content: "\ea51";
}
.nc-single-02::before {
content: "\ea52";
}
.nc-single-copy-04::before {
content: "\ea53";
}
.nc-spaceship::before {
content: "\ea54";
}
.nc-square-pin::before {
content: "\ea55";
}
.nc-stre-down::before {
content: "\ea56";
}
.nc-stre-left::before {
content: "\ea57";
}
.nc-stre-right::before {
content: "\ea58";
}
.nc-stre-up::before {
content: "\ea59";
}
.nc-sun-fog-29::before {
content: "\ea5a";
}
.nc-support-17::before {
content: "\ea5b";
}
.nc-tablet-2::before {
content: "\ea5c";
}
.nc-tag-content::before {
content: "\ea5d";
}
.nc-tap-01::before {
content: "\ea5e";
}
.nc-time-alarm::before {
content: "\ea5f";
}
.nc-tv-2::before {
content: "\ea60";
}
.nc-umbrella-13::before {
content: "\ea61";
}
.nc-vector::before {
content: "\ea62";
}
.nc-watch-time::before {
content: "\ea63";
}
.nc-zoom-split::before {
content: "\ea64";
}
/* all icon font classes list here */

476
public/theme/src/assets/sass/lbd/_responsive.scss

@ -0,0 +1,476 @@ @@ -0,0 +1,476 @@
@media (min-width: 992px){
.navbar-form {
margin-top: 21px;
margin-bottom: 21px;
padding-left: 5px;
padding-right: 5px;
}
.navbar-nav .nav-item .dropdown-menu, .dropdown .dropdown-menu{
@include transform-scale(0);
@include transition($slow-transition-time, $transition-bezier);
}
.navbar-nav .nav-item.show .dropdown-menu, .dropdown.show .dropdown-menu{
@include transform-scale(1);
@include transform-origin($dropdown-coordinates);
}
.close-layer,
.nav-mobile-menu{
display: none !important;
}
.footer{
height: 60px;
.footer-menu{
float: left;
}
.copyright{
float: right;
}
}
.navbar-nav .nav-item .dropdown-menu:before{
border-bottom: 11px solid rgba(0, 0, 0, 0.2);
border-left: 11px solid rgba(0, 0, 0, 0);
border-right: 11px solid rgba(0, 0, 0, 0);
content: "";
display: inline-block;
position: absolute;
left: 12px;
top: -11px;
}
.navbar-nav .nav-item .dropdown-menu:after {
border-bottom: 11px solid #FFFFFF;
border-left: 11px solid rgba(0, 0, 0, 0);
border-right: 11px solid rgba(0, 0, 0, 0);
content: "";
display: inline-block;
position: absolute;
left: 12px;
top: -10px;
}
.navbar-nav.navbar-right .nav-item .dropdown-menu:before{
left: auto;
right: 12px;
}
.navbar-nav.navbar-right .nav-item .dropdown-menu:after{
left: auto;
right: 12px;
}
.footer:not(.footer-big){
nav > ul{
li:first-child{
margin-left: 0;
}
}
}
.card{
form{
[class*="col-"]{
padding: 6px;
}
[class*="col-"]:first-child{
padding-left: 15px;
}
[class*="col-"]:last-child{
padding-right: 15px;
}
}
}
}
/* Changes for small display */
@media (max-width: 991px){
.sidebar{
right: 0 !important;
left: auto;
position: fixed;
@include transform-translate-3d(262px);
@include transition (0.5s, cubic-bezier(0.685, 0.0473, 0.346, 1));
}
.nav-open{
.main-panel{
position: absolute;
left: 0;
@include transform-translate-3d(-250px);
@include transition (0.5s, cubic-bezier(0.685, 0.0473, 0.346, 1));
}
.sidebar{
@include transform-translate-3d(10px);
@include transition (0.5s, cubic-bezier(0.685, 0.0473, 0.346, 1));
}
}
.main-panel{
@include transform-translate-3d(0px);
@include transition (0.5s, cubic-bezier(0.685, 0.0473, 0.346, 1));
}
.nav-item.active-pro{
position: relative !important;
}
.nav-mobile-menu{
border-bottom: 1px solid rgba(255, 255, 255, 0.2);
margin-bottom: 15px;
padding-bottom: 15px;
padding-top: 5px;
.dropdown{
.dropdown-menu{
position: static !important;
float: none;
width: auto;
color: $white-color;
margin-top: 0;
background-color: transparent;
border: 0;
-webkit-box-shadow: none;
box-shadow: none;
@include transition (0.5s, cubic-bezier(0.685, 0.0473, 0.346, 1));
.dropdown-item{
margin: 5px 15px 0px 20px;
border-radius: 4px;
color: $white-color;
opacity: .86;
padding: 8px 50px;
&:hover{
background-color: rgba(255, 255, 255, 0.23)
}
}
}
}
.nav-item{
.nav-link{
span{
display: inline-block !important;
}
.no-icon{
padding-left: 50px;
}
}
}
}
.main-panel{
width: 100%;
}
.navbar-transparent{
padding-top: 15px;
background-color: rgba(0, 0, 0, 0.45);
}
body {
position: relative;
}
.wrapper{
left: 0;
background-color: white;
}
.navbar{
padding-right: 30px;
padding-left: 30px;
}
.navbar-nav{
.nav-item{
float: none;
position: relative;
display: block;
}
}
body > .navbar-collapse {
position: fixed;
display: block;
top: 0;
height: 100%;
right: 0;
left: auto;
z-index: 1032;
visibility: visible;
background-color: #999;
overflow-y: visible;
border-top: none;
text-align: left;
padding: 0;
@include transform-translate-x(260px);
@include transition (0.33s, cubic-bezier(0.685, 0.0473, 0.346, 1));
> ul {
position: relative;
z-index: 4;
overflow-y:scroll;
height: calc(100vh - 61px);
width: 100%;
}
&::before{
top: 0;
left: 0;
height: 100%;
width: 100%;
position: absolute;
background-color: #282828;
display: block;
content: "";
z-index: 1;
}
.logo{
position: relative;
z-index: 4;
}
.nav li > a{
padding: 10px 15px;
}
}
.nav-show .navbar-collapse{
@include transform-translate-x(0px);
}
.nav-show .navbar .container{
left: -250px;
}
.nav-show .wrapper{
left: 0;
@include transform-translate-x(-260px);
}
.navbar-toggle .icon-bar {
display: block;
position: relative;
background: #fff;
width: 24px;
height: 2px;
border-radius: 1px;
margin: 0 auto;
}
.navbar-header .navbar-toggle {
margin: 10px 15px 10px 0;
width: 40px;
height: 40px;
}
.bar1,
.bar2,
.bar3 {
outline: 1px solid transparent;
}
.bar1 {
top: 0px;
@include bar-animation($topbar-back);
}
.bar2 {
opacity: 1;
}
.bar3 {
bottom: 0px;
@include bar-animation($bottombar-back);
}
.toggled .bar1 {
top: 6px;
@include bar-animation($topbar-x);
}
.toggled .bar2 {
opacity: 0;
}
.toggled .bar3 {
bottom: 6px;
@include bar-animation($bottombar-x);
}
@include topbar-x-rotation();
@include topbar-back-rotation();
@include bottombar-x-rotation();
@include bottombar-back-rotation();
@-webkit-keyframes fadeIn {
0% {opacity: 0;}
100% {opacity: 1;}
}
@-moz-keyframes fadeIn {
0% {opacity: 0;}
100% {opacity: 1;}
}
@keyframes fadeIn {
0% {opacity: 0;}
100% {opacity: 1;}
}
.dropdown-menu .divider{
background-color: rgba(229, 229, 229, 0.15);
}
.navbar-nav {
margin: 1px 0;
.show .dropdown-menu .nav-item{
.nav-link{
padding: 10px 15px 10px 60px;
}
}
}
[class*="navbar-"] .navbar-nav {
& > li > a,
> li > a:hover,
> li > a:focus,
.active > a,
.active > a:hover,
.active > a:focus,
.show .dropdown-menu > li > a,
.show .dropdown-menu > li > a:hover,
.show .dropdown-menu > li > a:focus,
.show .dropdown-menu > li > a:active {
color: white;
}
& > li > a,
> li > a:hover,
> li > a:focus{
opacity: .7;
background-color: transparent;
outline: none;
}
.show .dropdown-menu > li > a:hover,
.show .dropdown-menu > li > a:focus{
background-color: rgba(255,255,255, .1);
}
&.navbar-nav .show .dropdown-menu > li > a:active {
opacity: 1;
}
& .dropdown > a{
&:hover .caret {
border-bottom-color: #fff;
border-top-color: #fff;
}
&:active .caret {
border-bottom-color: white;
border-top-color: white;
}
}
}
.navbar-fixed-top {
-webkit-backface-visibility: hidden;
}
#bodyClick {
height: 100%;
width: 100%;
position: fixed;
opacity: 0;
top: 0;
left: auto;
right: 250px;
content: "";
z-index: 9999;
overflow-x: hidden;
}
.social-line .btn{
margin: $margin-bottom;
}
.subscribe-line .form-control{
margin: $margin-bottom;
}
.social-line.pull-right{
float: none;
}
.social-area.pull-right{
float: none !important;
}
.form-control + .form-control-feedback{
margin-top: -8px;
}
.navbar-toggle:hover,.navbar-toggle:focus {
background-color: transparent !important;
}
.btn.dropdown-toggle{
margin-bottom: 0;
}
.media-post .author{
width: 20%;
float: none !important;
display: block;
margin: 0 auto 10px;
}
.media-post .media-body{
width: 100%;
}
.navbar-collapse.collapse{
height: 100% !important;
}
.navbar-collapse.collapse.in {
display: block;
}
.navbar-header .collapse, .navbar-toggle {
display:block !important;
}
.navbar-header {
float:none;
}
.navbar-nav .show .dropdown-menu {
position: static;
float: none;
width: auto;
margin-top: 0;
background-color: transparent;
border: 0;
-webkit-box-shadow: none;
box-shadow: none;
}
.navbar-collapse{
.navbar-nav p{
line-height: 40px !important;
margin: 0;
}
[class^="pe-7s-"]{
float: left;
font-size: 20px;
margin-right: 10px;
}
}
}
//overwrite table responsive for 768px screens
@media (min-width: 992px){
.table-full-width{
margin-left: -15px;
margin-right: -15px;
}
.table-responsive{
overflow: visible;
}
}
@media (max-width: 991px){
.table-responsive {
width: 100%;
margin-bottom: 15px;
overflow-x: scroll;
overflow-y: hidden;
-ms-overflow-style: -ms-autohiding-scrollbar;
-webkit-overflow-scrolling: touch;
}
}

430
public/theme/src/assets/sass/lbd/_sidebar-and-main-panel.scss

@ -0,0 +1,430 @@ @@ -0,0 +1,430 @@
.sidebar,
body > .navbar-collapse{
position: absolute;
top: 0;
bottom: 0;
left: 0;
width: 260px;
display: block;
z-index: 1;
color: #fff;
font-weight: 200;
background-size: cover;
background-position: center center;
.sidebar-wrapper{
position: relative;
max-height: calc(100vh - 75px);
min-height: 100%;
overflow: auto;
width: 260px;
z-index: 4;
padding-bottom: 100px;
}
.sidebar-background{
position: absolute;
z-index: 1;
height: 100%;
width: 100%;
display: block;
top: 0;
left: 0;
background-size: cover;
background-position: center center;
}
.logo{
padding: 10px 5px;
margin: 0 20px;
border-bottom: 1px solid rgba(255, 255, 255, 0.2);
position: relative;
z-index: 4;
p{
float: left;
font-size: 20px;
margin: 10px 10px;
color: $white-color;
line-height: 20px;
font-family: "Helvetica Neue", Helvetica, Arial, sans-serif;
}
.simple-text{
text-transform: uppercase;
padding: $padding-zero;
display: block;
font-size: $font-size-large;
color: $white-color;
text-align: left;
font-weight: $font-weight-normal;
line-height: 40px;
.logo-img{
width: 40px;
display: inline-block;
height: 40px;
margin-left: 0px;
margin-right: 10px;
background: white;
border-radius: 40px;
text-align: center;
img{
max-width: 21px;
}
}
}
}
.logo-tim{
border-radius: 50%;
border: 1px solid #333;
display: block;
height: 61px;
width: 61px;
float: left;
overflow: hidden;
img{
width: 60px;
height: 60px;
}
}
.nav{
margin-top: 20px;
float: none;
display: block;
li{
.nav-link{
color: $white-color;
margin: 5px 15px;
opacity: .86;
border-radius: 4px;
display: block;
padding: 10px 15px;
&:hover{
background: rgba(255, 255, 255, 0.13);
opacity: 1;
}
p{
margin: 0;
line-height: 31px;
font-size: 12px;
font-weight: 600;
text-transform: uppercase;
display: inline-flex;
}
i{
font-size: 28px;
margin-right: 15px;
width: 30px;
text-align: center;
vertical-align: middle;
float: left;
}
}
&:hover .nav-link{
background: rgba(255,255,255,0.13);
opacity: 1;
}
&.active .nav-link{
color: $white-color;
opacity: 1;
background: rgba(255,255,255,0.23);
}
&.separator{
margin: 15px 0;
border-bottom: 1px solid rgba(255, 255, 255, 0.2);
& + .nav-item {
margin-top: 31px;
}
}
}
.caret{
margin-top: 13px;
position: absolute;
right: 30px;
}
.active-pro{
position: absolute;
width: 100%;
bottom: 10px;
a{
color: $white-color !important;
}
}
.nav-link{
color: $white-color;
margin: 5px 15px;
opacity: .86;
border-radius: 4px;
text-transform: uppercase;
line-height: 30px;
font-size: 12px;
font-weight: 600;
}
}
.logo-tim{
border-radius: 50%;
border: 1px solid #333;
display: block;
height: 61px;
width: 61px;
float: left;
overflow: hidden;
img{
width: 60px;
height: 60px;
}
}
&:after,
&:before{
display: block;
content: "";
position: absolute;
width: 100%;
height: 100%;
top: 0;
left: 0;
z-index: 2;
}
&:before{
opacity: .33;
background: #000000;
}
&:after{
@include icon-gradient($new-purple, $purple-color-bottom);
z-index: 3;
opacity: 1;
}
&[data-image]:after,
&.has-image:after{
opacity: .77;
}
&[data-color="black"]:after{
@include icon-gradient($black-color-filter-top, $black-color-filter-bottom);
}
&[data-color="blue"]:after{
@include icon-gradient($new-dark-blue, $blue-color-bottom);
}
&[data-color="azure"]:after{
@include icon-gradient($new-blue, $azure-color-bottom);
}
&[data-color="green"]:after{
@include icon-gradient($new-green, $green-color-bottom);
}
&[data-color="orange"]:after{
@include icon-gradient($new-orange, $orange-color-bottom);
}
&[data-color="red"]:after{
@include icon-gradient($new-red, $red-color-bottom);
}
&[data-color="purple"]:after{
@include icon-gradient($new-purple, $purple-color-bottom);
}
}
.main-panel{
background: rgba(203,203,210,.15);
position: relative;
float: right;
width: $sidebar-width;
min-height: 100%;
> .content{
padding: 30px 15px;
min-height: calc(100% - 123px);
}
> .footer{
border-top: 1px solid #e7e7e7;
}
.navbar{
margin-bottom: 0;
}
}
.sidebar,
.main-panel{
overflow: auto;
max-height: 100%;
height: 100%;
-webkit-transition-property: top,bottom;
transition-property: top,bottom;
-webkit-transition-duration: .2s,.2s;
transition-duration: .2s,.2s;
-webkit-transition-timing-function: linear,linear;
transition-timing-function: linear,linear;
-webkit-overflow-scrolling: touch;
}
.fixed-plugin{
.dropdown{
.dropdown-menu{
@include transform-translate-3d-0(-5%);
border-radius: 10px;
li.adjustments-line{
border-bottom: 1px solid #ddd;
}
li{
padding: 5px 2px !important;
}
.button-container{
a{
font-size: 14px;
}
&.show{
@include transform-translate-3d-0(0%);
transform-origin: 0 0;
left: -303px !important;
}
}
}
}
}
.fixed-plugin .dropdown .dropdown-menu{
@include transform-translate-y-dropdown(-5%);
top: -40px !important;
opacity: 0;
left: -303px !important;
transform-origin: 0 0;
}
.fixed-plugin .dropdown.show .dropdown-menu{
opacity: 1;
@include transform-translate-y-dropdown(0%);
transform-origin: 0 0;
left: -303px !important;
}
.fixed-plugin .dropdown-menu:before,
.fixed-plugin .dropdown-menu:after{
content: "";
display: inline-block;
position: absolute;
top: 65px;
width: 16px;
transform: translateY(-50%);
-webkit-transform: translateY(-50%);
-moz-transform: translateY(-50%);
}
.fixed-plugin .dropdown-menu:before{
border-bottom: 16px solid rgba(0, 0, 0, 0);
border-left: 16px solid rgba(0,0,0,0.2);
border-top: 16px solid rgba(0,0,0,0);
right: -16px;
}
.fixed-plugin .dropdown-menu:after{
border-bottom: 16px solid rgba(0, 0, 0, 0);
border-left: 16px solid #fff;
border-top: 16px solid rgba(0,0,0,0);
right: -15px;
}
.modal{
&.show{
.modal-dialog{
-webkit-transform: translate(0, 30%);
-o-transform: translate(0, 30%);
transform: translate(0, 30%);
}
}
&.modal-mini{
.modal-dialog{
max-width: 255px;
margin: 0 auto;
}
}
.modal-content{
.modal-header{
border-bottom: none;
padding-top: 24px;
padding-right: 24px;
padding-bottom: 0;
padding-left: 24px;
.modal-profile{
width: 80px;
height: 80px;
border-radius: 50%;
text-align: center;
line-height: 5.7;
box-shadow: 0px 5px 20px 0px rgba(0, 0, 0, 0.3);
i{
font-size: 32px;
padding-top: 24px;
}
}
}
.modal-body{
padding-top: 24px;
padding-right: 24px;
padding-bottom: 16px;
padding-left: 24px;
line-height: 1.9;
}
.modal-body + .modal-footer{
padding-top: 0;
}
.modal-footer{
border-top: none;
padding-right: 24px;
padding-bottom: 16px;
padding-left: 24px;
-webkit-justify-content: space-between;
justify-content: space-between;
.btn{
margin: 0;
padding-left: 16px;
padding-right: 16px;
width: auto;
&:hover,
&focus{
text-decoration: none;
}
}
}
}
}

73
public/theme/src/assets/sass/lbd/_tables.scss

@ -0,0 +1,73 @@ @@ -0,0 +1,73 @@
.table{
.radio,
.checkbox{
position: relative;
height: 20px;
display: block;
width: 20px;
padding: 0px 0px;
margin: 0px 5px;
text-align: center;
.icons{
left: 5px;
}
}
> thead > tr > th,
> tbody > tr > th,
> tfoot > tr > th,
> thead > tr > td,
> tbody > tr > td,
> tfoot > tr > td{
padding: 12px 8px;
vertical-align: middle;
}
> thead > tr > th{
border-bottom-width: 1px;
font-size: $font-size-small;
text-transform: uppercase;
color: $dark-gray;
font-weight: $font-weight-normal;
padding-bottom: 5px;
border-top: none !important;
border-bottom: none;
text-align: left !important;
}
.td-actions .btn{
@include opacity(0.36);
&.btn-xs{
padding-left: 3px;
padding-right: 3px;
}
}
.td-actions{
min-width: 90px;
}
> tbody > tr{
position: relative;
&:hover{
.td-actions .btn{
@include opacity(1);
}
}
}
.btn:focus{
box-shadow: none !important;
}
}
.table-upgrade{
.table{
tr{
td{
width: 100%
}
}
}
}

91
public/theme/src/assets/sass/lbd/_tooltip.scss

@ -0,0 +1,91 @@ @@ -0,0 +1,91 @@
.tooltip {
display: block !important;
z-index: 10000;
.tooltip-inner {
background: black;
color: white;
padding: 3px 6px 3px;
}
.tooltip-arrow {
width: 0;
height: 0;
border-style: solid;
position: absolute;
margin: 5px;
border-color: black;
}
&[x-placement^="top"] {
margin-bottom: 5px;
.tooltip-arrow {
border-width: 5px 5px 0 5px;
border-left-color: transparent !important;
border-right-color: transparent !important;
border-bottom-color: transparent !important;
bottom: -5px;
left: calc(50% - 5px);
margin-top: 0;
margin-bottom: 0;
}
}
&[x-placement^="bottom"] {
margin-top: 5px;
.tooltip-arrow {
border-width: 0 5px 5px 5px;
border-left-color: transparent !important;
border-right-color: transparent !important;
border-top-color: transparent !important;
top: -5px;
left: calc(50% - 5px);
margin-top: 0;
margin-bottom: 0;
}
}
&[x-placement^="right"] {
margin-left: 5px;
.tooltip-arrow {
border-width: 5px 5px 5px 0;
border-left-color: transparent !important;
border-top-color: transparent !important;
border-bottom-color: transparent !important;
left: -5px;
top: calc(50% - 5px);
margin-left: 0;
margin-right: 0;
}
}
&[x-placement^="left"] {
margin-right: 5px;
.tooltip-arrow {
border-width: 5px 0 5px 5px;
border-top-color: transparent !important;
border-right-color: transparent !important;
border-bottom-color: transparent !important;
right: -5px;
top: calc(50% - 5px);
margin-left: 0;
margin-right: 0;
}
}
&[aria-hidden='true'] {
visibility: hidden;
opacity: 0;
transition: opacity .15s, visibility .15s;
}
&[aria-hidden='false'] {
visibility: visible;
opacity: 1;
transition: opacity .15s;
}
}

90
public/theme/src/assets/sass/lbd/_typography.scss

@ -0,0 +1,90 @@ @@ -0,0 +1,90 @@
/* Font Smoothing */
body,
h1, .h1,
h2, .h2,
h3, .h3,
h4, .h4,
h5, .h5,
h6, .h6,
p,
.navbar,
.brand,
.btn-simple,
.alert,
a,
.td-name,
td,
button.close{
-moz-osx-font-smoothing: grayscale;
-webkit-font-smoothing: antialiased;
font-family: "Roboto","Helvetica Neue",Arial,sans-serif;
font-weight: $font-weight-normal;
}
h1, .h1, h2, .h2, h3, .h3, h4, .h4{
font-weight: $font-weight-light;
margin: $margin-large-vertical 0 $margin-base-vertical;
}
h1, .h1 {
font-size: $font-size-h1;
}
h2, .h2{
font-size: $font-size-h2;
}
h3, .h3{
font-size: $font-size-h3;
margin: 20px 0 10px;
}
h4, .h4{
font-size: $font-size-h4;
line-height: 30px;
}
h5, .h5 {
font-size: $font-size-h5;
margin-bottom: 15px;
}
h6, .h6{
font-size: $font-size-h6;
font-weight: $font-weight-bold;
text-transform: uppercase;
}
p{
font-size: $font-paragraph;
line-height: $line-height-general;
}
h1 small, h2 small, h3 small, h4 small, h5 small, h6 small, .h1 small, .h2 small, .h3 small, .h4 small, .h5 small, .h6 small, h1 .small, h2 .small, h3 .small, h4 .small, h5 .small, h6 .small, .h1 .small, .h2 .small, .h3 .small, .h4 .small, .h5 .small, .h6 .small {
color: $dark-gray;
font-weight: $font-weight-light;
line-height: $line-height-general;
}
h1 small, h2 small, h3 small, h1 .small, h2 .small, h3 .small {
font-size: 60%;
}
h1 .subtitle{
display: block;
margin: 0 0 $margin-large-vertical;
}
.text-muted{
color: #9A9A9A;
}
.text-primary, .text-primary:hover{
color: #1D62F0 !important;
}
.text-info, .text-info:hover{
color: $info-color !important;
}
.text-success, .text-success:hover{
color: $success-color !important;
}
.text-warning, .text-warning:hover{
color: $warning-color !important;
}
.text-danger, .text-danger:hover{
color: $danger-color !important;
}

265
public/theme/src/assets/sass/lbd/_variables.scss

@ -0,0 +1,265 @@ @@ -0,0 +1,265 @@
//== Buttons
//
//## For each of Bootstrap's buttons, define text, background and border color.
$none: 0 !default;
$border-thin: 1px !default;
$border-thick: 2px !default;
$white-color: #FFFFFF !default;
$white-bg: #FFFFFF !default;
$smoke-bg: #F5F5F5 !default;
$black-bg: rgba(30,30,30,.97) !default;
$black-color: #333333 !default;
$black-hr: #444444 !default;
$light-gray: #E3E3E3 !default;
$medium-gray: #DDDDDD !default;
$medium-dark-gray: #AAAAAA !default;
$dark-gray: #9A9A9A !default;
$transparent-bg: transparent !default;
$default-color: #888888 !default;
$default-bg: #888888 !default;
$default-states-color: #777777 !default;
$primary-color: #3472F7 !default;
$primary-bg: #3472F7 !default;
$primary-states-color: #1D62F0 !default;
$success-color: #87CB16 !default;
$success-bg: #87CB16 !default;
$success-states-color: #049F0C !default;
$info-color: #1DC7EA !default;
$info-bg: #1DC7EA !default;
$info-states-color: lighten($info-color, 8%) !default;
$warning-color: #FF9500 !default;
$warning-bg: #FF9500 !default;
$warning-states-color: #ED8D00 !default;
$danger-color: #FF4A55 !default;
$danger-bg: #FF4A55 !default;
$danger-states-color: #EE2D20 !default;
$link-disabled-color: #666666 !default;
/* light colors */
$light-blue: rgba($primary-color, .2);
$light-azure: rgba($info-color, .2);
$light-green: rgba($success-color, .2);
$light-orange: rgba($warning-color, .2);
$light-red: rgba($danger-color, .2);
//== Components
//
$padding-base-vertical: 8px !default;
$padding-base-horizontal: 16px !default;
$padding-round-vertical: 9px !default;
$padding-round-horizontal: 18px !default;
$padding-simple-vertical: 10px !default;
$padding-simple-horizontal: 18px !default;
$padding-large-vertical: 14px !default;
$padding-large-horizontal: 30px !default;
$padding-small-vertical: 5px !default;
$padding-small-horizontal: 10px !default;
$padding-xs-vertical: 1px !default;
$padding-xs-horizontal: 5px !default;
$padding-label-vertical: 2px !default;
$padding-label-horizontal: 12px !default;
$margin-large-vertical: 30px !default;
$margin-base-vertical: 15px !default;
$padding-zero: 0px !default;
$margin-bottom: 0 0 10px 0 !default;
$border-radius-small: 3px !default;
$border-radius-base: 4px !default;
$border-radius-large: 6px !default;
$border-radius-extreme: 10px !default;
$border-radius-large-top: $border-radius-large $border-radius-large 0 0 !default;
$border-radius-large-bottom: 0 0 $border-radius-large $border-radius-large !default;
$btn-round-radius: 30px !default;
$height-base: 40px !default;
$font-size-base: 14px !default;
$font-size-small: 12px !default;
$font-size-medium: 16px !default;
$font-size-large: 18px !default;
$font-size-large-navbar: 20px !default;
$font-size-h1: 52px !default;
$font-size-h2: 36px !default;
$font-size-h3: 28px !default;
$font-size-h4: 22px !default;
$font-size-h5: 16px !default;
$font-size-h6: 14px !default;
$font-paragraph: 16px !default;
$font-size-navbar: 16px !default;
$font-size-small: 12px !default;
$font-weight-light: 300 !default;
$font-weight-normal: 400 !default;
$font-weight-semi: 500 !default;
$font-weight-bold: 600 !default;
$line-height-general: 1.5 !default;
$line-height: 20px !default;
$line-height-lg: 54px !default;
$sidebar-width: calc(100% - 260px) !default;
$border-radius-top: 10px 10px 0 0 !default;
$border-radius-bottom: 0 0 10px 10px !default;
$dropdown-shadow: 1px 2px 3px rgba(0, 0, 0, 0.125);
$general-transition-time: 300ms !default;
$slow-transition-time: 370ms !default;
$dropdown-coordinates: 29px -50px !default;
$fast-transition-time: 150ms !default;
$ultra-fast-transition-time: 100ms !default;
$select-coordinates: 50% -40px !default;
$transition-linear: linear !default;
$transition-bezier: cubic-bezier(0.34, 1.61, 0.7, 1) !default;
$transition-ease: ease 0s;
$transition-ease-in: ease-in !default;
$transition-ease-out: ease-out !default;
$navbar-padding-a: 10px 15px;
$navbar-margin-a: 10px 3px;
$padding-social-a: 10px 5px;
$navbar-margin-a-btn: 15px 3px;
$navbar-margin-a-btn-round: 16px 3px;
$navbar-padding-a-icons: 6px 15px;
$navbar-margin-a-icons: 6px 3px;
$navbar-padding-brand: 15px 15px;
$navbar-margin-brand: 5px 0px;
$navbar-margin-brand-icons: 12px auto;
$navbar-margin-btn: 15px 3px;
$height-icon: 64px !default;
$width-icon: 64px !default;
$padding-icon: 12px !default;
$border-radius-icon: 15px !default;
$size-icon: 64px;
$size-icon-sm: 32px;
$height-icon-sm: 32px;
$width-icon-sm: 32px;
$padding-icon-sm: 4px;
$border-radius-icon-sm: 7px;
$height-icon-message: 40px;
$width-icon-message: 40px;
$height-icon-message-sm: 20px;
$width-icon-message-sm: 20px;
$default-color-top: #d9d9d9 !default;
$default-color-bottom: #909297 !default;
$blue-color-top: #40B782;
$blue-color-bottom: #40B782;
$azure-color-top: #45c0fd;
$azure-color-bottom: #4091ff;
$green-color-top: #a1eb3a;
$green-color-bottom: #6dc030;
$orange-color-top: #ffb33b;
$orange-color-bottom: #ff5221;
$red-color-top: #ff3b30;
$red-color-bottom: #bb0502;
$purple-color-top: #df55e1;
$purple-color-bottom: #943bea;
$pink-color-top: #ff2a63;
$pink-color-bottom: #ff2e2e;
$black-color-top: #787878;
$black-color-bottom: #343434;
$black-color-filter-top: #292929;
$black-color-filter-bottom: #0e0e0e;
$social-facebook: #3b5998;
$social-twitter: #55acee;
$social-pinterest: #cc2127;
$social-google: #dd4b39;
$social-linkedin: #0976b4;
$social-dribbble: #ea4c89;
$social-github: #333333;
$social-youtube: #e52d27;
$social-stumbleupon: #eb4924;
$social-reddit: #ff4500;
$social-tumblr: #35465c;
$social-behance: #1769ff;
$filter-blue: darken($primary-color, 10%);
$filter-azure: darken($info-color, 10%);
$filter-green: darken($success-color, 10%);
$filter-orange: darken($warning-color, 10%);
$filter-red: darken($danger-color, 10%);
$new-blue: #1DC7EA;
$new-purple: #9368E9;
$new-red: #FB404B;
$new-green: #87CB16;
$new-orange: #FFA534;
$new-dark-blue: #35495E;
$new-black: #5e5e5e;
$topbar-x: topbar-x !default;
$topbar-back: topbar-back !default;
$bottombar-x: bottombar-x !default;
$bottombar-back: bottombar-back !default;
$white-navbar: rgba(#FFFFFF, .96);
$blue-navbar: lighten($new-dark-blue, 10%);
$azure-navbar: lighten($new-blue, 15%);
$green-navbar: lighten($new-green, 10%);
$orange-navbar: lighten($new-orange, 10%);
$red-navbar: lighten($new-red, 10%);

70
public/theme/src/assets/sass/lbd/mixins/_buttons.scss

@ -0,0 +1,70 @@ @@ -0,0 +1,70 @@
// Mixin for generating new styles
@mixin btn-styles($btn-color, $btn-states-color) {
border-color: $btn-color;
color: $btn-color;
&:hover,
&:focus,
&:active,
&.active,
.open > &.dropdown-toggle {
background-color: $transparent-bg;
color: $btn-states-color;
border-color: $btn-states-color;
}
&.disabled,
&:disabled,
&[disabled],
fieldset[disabled] & {
&,
&:hover,
&:focus,
&.focus,
&:active,
&.active {
background-color: $transparent-bg;
border-color: $btn-color;
}
}
&.btn-fill {
color: $white-color;
background-color: $btn-color;
@include opacity(1);
&:hover,
&:focus,
&:active,
&.active,
.open > &.dropdown-toggle{
background-color: $btn-states-color;
color: $white-color;
}
.caret{
border-top-color: $white-color;
}
}
.caret{
border-top-color: $btn-color;
}
}
@mixin btn-size($padding-vertical, $padding-horizontal, $font-size, $border){
font-size: $font-size;
border-radius: $border;
padding: $padding-vertical $padding-horizontal;
&.btn-round{
padding: $padding-vertical + 1 $padding-horizontal;
}
&.btn-simple{
padding: $padding-vertical + 2 $padding-horizontal;
}
}

8
public/theme/src/assets/sass/lbd/mixins/_cards.scss

@ -0,0 +1,8 @@ @@ -0,0 +1,8 @@
@mixin filter($color){
@if $color == #FFFFFF{
background-color: rgba($color,.91);
} @else {
background-color: rgba($color,.69);
}
}

85
public/theme/src/assets/sass/lbd/mixins/_chartist.scss

@ -0,0 +1,85 @@ @@ -0,0 +1,85 @@
// Scales for responsive SVG containers
$ct-scales: ((1), (15/16), (8/9), (5/6), (4/5), (3/4), (2/3), (5/8), (1/1.618), (3/5), (9/16), (8/15), (1/2), (2/5), (3/8), (1/3), (1/4)) !default;
$ct-scales-names: (ct-square, ct-minor-second, ct-major-second, ct-minor-third, ct-major-third, ct-perfect-fourth, ct-perfect-fifth, ct-minor-sixth, ct-golden-section, ct-major-sixth, ct-minor-seventh, ct-major-seventh, ct-octave, ct-major-tenth, ct-major-eleventh, ct-major-twelfth, ct-double-octave) !default;
// Class names to be used when generating CSS
$ct-class-chart: ct-chart !default;
$ct-class-chart-line: ct-chart-line !default;
$ct-class-chart-bar: ct-chart-bar !default;
$ct-class-horizontal-bars: ct-horizontal-bars !default;
$ct-class-chart-pie: ct-chart-pie !default;
$ct-class-chart-donut: ct-chart-donut !default;
$ct-class-label: ct-label !default;
$ct-class-series: ct-series !default;
$ct-class-line: ct-line !default;
$ct-class-point: ct-point !default;
$ct-class-area: ct-area !default;
$ct-class-bar: ct-bar !default;
$ct-class-slice-pie: ct-slice-pie !default;
$ct-class-slice-donut: ct-slice-donut !default;
$ct-class-grid: ct-grid !default;
$ct-class-vertical: ct-vertical !default;
$ct-class-horizontal: ct-horizontal !default;
$ct-class-start: ct-start !default;
$ct-class-end: ct-end !default;
// Container ratio
$ct-container-ratio: (1/1.618) !default;
// Text styles for labels
$ct-text-color: rgba(0, 0, 0, 0.4) !default;
$ct-text-size: 1.3rem !default;
$ct-text-align: flex-start !default;
$ct-text-justify: flex-start !default;
$ct-text-line-height: 1;
// Grid styles
$ct-grid-color: rgba(0, 0, 0, 0.2) !default;
$ct-grid-dasharray: 2px !default;
$ct-grid-width: 1px !default;
// Line chart properties
$ct-line-width: 3px !default;
$ct-line-dasharray: false !default;
$ct-point-size: 8px !default;
// Line chart point, can be either round or square
$ct-point-shape: round !default;
// Area fill transparency between 0 and 1
$ct-area-opacity: 0.8 !default;
// Bar chart bar width
$ct-bar-width: 10px !default;
// Donut width (If donut width is to big it can cause issues where the shape gets distorted)
$ct-donut-width: 60px !default;
// If set to true it will include the default classes and generate CSS output. If you're planning to use the mixins you
// should set this property to false
$ct-include-classes: true !default;
// If this is set to true the CSS will contain colored series. You can extend or change the color with the
// properties below
$ct-include-colored-series: $ct-include-classes !default;
// If set to true this will include all responsive container variations using the scales defined at the top of the script
$ct-include-alternative-responsive-containers: $ct-include-classes !default;
// Series names and colors. This can be extended or customized as desired. Just add more series and colors.
$ct-series-names: (a, b, c, d, e, f, g, h, i, j, k, l, m, n, o) !default;
$ct-series-colors: (
$new-blue,
$new-red,
$new-orange,
$new-purple,
$new-green,
$new-dark-blue,
$new-black,
$social-google,
$social-tumblr,
$social-youtube,
$social-twitter,
$social-pinterest,
$social-behance,
#6188e2,
#a748ca
) !default;

13
public/theme/src/assets/sass/lbd/mixins/_icons.scss

@ -0,0 +1,13 @@ @@ -0,0 +1,13 @@
@mixin icon-background ($icon-url){
background-image : url($icon-url);
}
@mixin icon-shape ($size, $padding, $border-radius) {
height: $size;
width: $size;
padding: $padding;
border-radius: $border-radius;
display: inline-table;
}

17
public/theme/src/assets/sass/lbd/mixins/_inputs.scss

@ -0,0 +1,17 @@ @@ -0,0 +1,17 @@
@mixin input-size($padding-vertical, $padding-horizontal, $height){
padding: $padding-vertical $padding-horizontal;
height: $height;
}
@mixin placeholder($color, $opacity){
color: $color;
@include opacity(1);
}
@mixin light-form(){
border-radius: 0;
border:0;
padding: 0;
background-color: transparent;
}

21
public/theme/src/assets/sass/lbd/mixins/_labels.scss

@ -0,0 +1,21 @@ @@ -0,0 +1,21 @@
@mixin label-style(){
padding: $padding-label-vertical $padding-label-horizontal;
border: 1px solid $default-color;
border-radius: $border-radius-small;
color: $default-color;
font-weight: $font-weight-semi;
font-size: $font-size-small;
text-transform: uppercase;
display: inline-block;
vertical-align: middle;
}
@mixin label-color($color){
border-color: $color;
color: $color;
}
@mixin label-color-fill($color){
border-color: $color;
color: $white-color;
background-color: $color;
}

34
public/theme/src/assets/sass/lbd/mixins/_morphing-buttons.scss

@ -0,0 +1,34 @@ @@ -0,0 +1,34 @@
$prefixes: ('', '-moz-', '-webkit-', '-ms-') !default;
@mixin circle-animation(){
@for $i from 0 to length($prefixes) {
@include circle-animation-details(nth($prefixes, $i + 1));
}
}
@mixin circle-animation-details($name){
#{$name}animation-name: spin;
#{$name}animation-duration: 1250ms;
#{$name}animation-iteration-count: infinite;
#{$name}animation-timing-function: linear;
}
@keyframes spin {
from { transform:rotate(0deg); }
to { transform:rotate(360deg); }
}
@-webkit-keyframes spin {
from { -webkit-transform: rotate(0deg); }
to { -webkit-transform: rotate(360deg); }
}
@-moz-keyframes spin {
from { -moz-transform: rotate(0deg); }
to { -moz-transform: rotate(360deg); }
}
@-ms-keyframes spin {
from { -ms-transform: rotate(0deg); }
to { -ms-transform: rotate(360deg); }
}

11
public/theme/src/assets/sass/lbd/mixins/_navbars.scss

@ -0,0 +1,11 @@ @@ -0,0 +1,11 @@
@mixin navbar-color($color){
background-color: $color;
}
@mixin center-item(){
left: 0;
right: 0;
margin-right: auto;
margin-left: auto;
position: absolute;
}

43
public/theme/src/assets/sass/lbd/mixins/_social-buttons.scss

@ -0,0 +1,43 @@ @@ -0,0 +1,43 @@
@mixin social-buttons-color ($color){
border-color: $color;
color: $color;
&:hover,
&:focus,
&:active,
&.active,
.open > &.dropdown-toggle {
background-color: $transparent-bg;
color: $color;
border-color: $color;
opacity: 1;
}
&:disabled,
&[disabled],
&.disabled {
background-color: $transparent-bg;
border-color: $color;
}
&.btn-fill {
color: $white-color;
background-color: $color;
opacity: 0.9;
&:hover,
&:focus,
&:active,
&.active,
.open > &.dropdown-toggle{
background-color: $color;
color: $white-color;
opacity: 1;
}
}
}

4
public/theme/src/assets/sass/lbd/mixins/_tabs.scss

@ -0,0 +1,4 @@ @@ -0,0 +1,4 @@
@mixin pill-style($color){
border: 1px solid $color;
color: $color;
}

20
public/theme/src/assets/sass/lbd/mixins/_transparency.scss

@ -0,0 +1,20 @@ @@ -0,0 +1,20 @@
// Opacity
@mixin opacity($opacity) {
opacity: $opacity;
// IE8 filter
$opacity-ie: ($opacity * 100);
filter: #{alpha(opacity=$opacity-ie)};
}
@mixin black-filter($opacity){
top: 0;
left: 0;
height: 100%;
width: 100%;
position: absolute;
background-color: rgba(17,17,17,$opacity);
display: block;
content: "";
z-index: 1;
}

211
public/theme/src/assets/sass/lbd/mixins/_vendor-prefixes.scss

@ -0,0 +1,211 @@ @@ -0,0 +1,211 @@
// User select
// For selecting text on the page
@mixin user-select($select) {
-webkit-user-select: $select;
-moz-user-select: $select;
-ms-user-select: $select; // IE10+
user-select: $select;
}
@mixin box-shadow($shadow...) {
-webkit-box-shadow: $shadow; // iOS <4.3 & Android <4.1
box-shadow: $shadow;
}
// Box sizing
@mixin box-sizing($boxmodel) {
-webkit-box-sizing: $boxmodel;
-moz-box-sizing: $boxmodel;
box-sizing: $boxmodel;
}
@mixin transition($time, $type){
-webkit-transition: all $time $type;
-moz-transition: all $time $type;
-o-transition: all $time $type;
-ms-transition: all $time $type;
transition: all $time $type;
}
@mixin transform-scale($value){
-webkit-transform: scale($value);
-moz-transform: scale($value);
-o-transform: scale($value);
-ms-transform: scale($value);
transform: scale($value);
}
@mixin transform-translate-x($value){
-webkit-transform: translate3d($value, 0, 0);
-moz-transform: translate3d($value, 0, 0);
-o-transform: translate3d($value, 0, 0);
-ms-transform: translate3d($value, 0, 0);
transform: translate3d($value, 0, 0);
}
@mixin transform-translate-3d($value){
-webkit-transform: translate3d($value, 0, 0);
-moz-transform: translate3d($value, 0, 0);
-o-transform: translate3d($value, 0, 0);
-ms-transform: translate3d($value, 0, 0);
transform: translate3d($value, 0, 0) !important;
}
@mixin transform-translate-y-dropdown($value){
-webkit-transform: translate3d(0, $value, 0) !important;
-moz-transform: translate3d(0, $value, 0) !important;
-o-transform: translate3d(0, $value, 0) !important;
-ms-transform: translate3d(0, $value, 0) !important;
transform: translate3d(0, $value, 0) !important;
}
@mixin transform-translate-3d-0($value){
-webkit-transform: translate3d(0, $value, 0) !important;
-moz-transform: translate3d(0, $value, 0) !important;
-o-transform: translate3d(0, $value, 0) !important;
-ms-transform: translate3d(0, $value, 0) !important;
transform: translate3d(0, $value, 0) !important;
}
@mixin transform-origin($coordinates){
-webkit-transform-origin: $coordinates;
-moz-transform-origin: $coordinates;
-o-transform-origin: $coordinates;
-ms-transform-origin: $coordinates;
transform-origin: $coordinates;
}
@mixin icon-gradient ($top-color, $bottom-color){
background: $top-color;
background: -moz-linear-gradient(top, $top-color 0%, $bottom-color 100%);
background: -webkit-gradient(linear, left top, left bottom, color-stop(0%,$top-color), color-stop(100%,$bottom-color));
background: -webkit-linear-gradient(top, $top-color 0%,$bottom-color 100%);
background: -o-linear-gradient(top, $top-color 0%,$bottom-color 100%);
background: -ms-linear-gradient(top, $top-color 0%,$bottom-color 100%);
background: linear-gradient(to bottom, $top-color 0%,$bottom-color 100%);
background-size: 150% 150%;
}
@mixin radial-gradient($extern-color, $center-color){
background: $extern-color;
background: -moz-radial-gradient(center, ellipse cover, $center-color 0%, $extern-color 100%); /* FF3.6+ */
background: -webkit-gradient(radial, center center, 0px, center center, 100%, color-stop(0%,$center-color), color-stop(100%,$extern-color)); /* Chrome,Safari4+ */
background: -webkit-radial-gradient(center, ellipse cover, $center-color 0%,$extern-color 100%); /* Chrome10+,Safari5.1+ */
background: -o-radial-gradient(center, ellipse cover, $center-color 0%,$extern-color 100%); /* Opera 12+ */
background: -ms-radial-gradient(center, ellipse cover, $center-color 0%,$extern-color 100%); /* IE10+ */
background: radial-gradient(ellipse at center, $center-color 0%,$extern-color 100%); /* W3C */
background-size: 550% 450%;
}
@mixin vertical-align {
position: relative;
top: 50%;
-webkit-transform: translateY(-50%);
-ms-transform: translateY(-50%);
transform: translateY(-50%);
}
@mixin rotate-180(){
filter: progid:DXImageTransform.Microsoft.BasicImage(rotation=2);
-webkit-transform: rotate(180deg);
-ms-transform: rotate(180deg);
transform: rotate(180deg);
}
@mixin bar-animation($type){
-webkit-animation: $type 500ms linear 0s;
-moz-animation: $type 500ms linear 0s;
animation: $type 500ms 0s;
-webkit-animation-fill-mode: forwards;
-moz-animation-fill-mode: forwards;
animation-fill-mode: forwards;
}
@mixin topbar-x-rotation(){
@keyframes topbar-x {
0% {top: 0px; transform: rotate(0deg); }
45% {top: 6px; transform: rotate(145deg); }
75% {transform: rotate(130deg); }
100% {transform: rotate(135deg); }
}
@-webkit-keyframes topbar-x {
0% {top: 0px; -webkit-transform: rotate(0deg); }
45% {top: 6px; -webkit-transform: rotate(145deg); }
75% {-webkit-transform: rotate(130deg); }
100% { -webkit-transform: rotate(135deg); }
}
@-moz-keyframes topbar-x {
0% {top: 0px; -moz-transform: rotate(0deg); }
45% {top: 6px; -moz-transform: rotate(145deg); }
75% {-moz-transform: rotate(130deg); }
100% { -moz-transform: rotate(135deg); }
}
}
@mixin topbar-back-rotation(){
@keyframes topbar-back {
0% { top: 6px; transform: rotate(135deg); }
45% { transform: rotate(-10deg); }
75% { transform: rotate(5deg); }
100% { top: 0px; transform: rotate(0); }
}
@-webkit-keyframes topbar-back {
0% { top: 6px; -webkit-transform: rotate(135deg); }
45% { -webkit-transform: rotate(-10deg); }
75% { -webkit-transform: rotate(5deg); }
100% { top: 0px; -webkit-transform: rotate(0); }
}
@-moz-keyframes topbar-back {
0% { top: 6px; -moz-transform: rotate(135deg); }
45% { -moz-transform: rotate(-10deg); }
75% { -moz-transform: rotate(5deg); }
100% { top: 0px; -moz-transform: rotate(0); }
}
}
@mixin bottombar-x-rotation(){
@keyframes bottombar-x {
0% {bottom: 0px; transform: rotate(0deg);}
45% {bottom: 6px; transform: rotate(-145deg);}
75% {transform: rotate(-130deg);}
100% {transform: rotate(-135deg);}
}
@-webkit-keyframes bottombar-x {
0% {bottom: 0px; -webkit-transform: rotate(0deg);}
45% {bottom: 6px; -webkit-transform: rotate(-145deg);}
75% {-webkit-transform: rotate(-130deg);}
100% {-webkit-transform: rotate(-135deg);}
}
@-moz-keyframes bottombar-x {
0% {bottom: 0px; -moz-transform: rotate(0deg);}
45% {bottom: 6px; -moz-transform: rotate(-145deg);}
75% {-moz-transform: rotate(-130deg);}
100% {-moz-transform: rotate(-135deg);}
}
}
@mixin bottombar-back-rotation{
@keyframes bottombar-back {
0% { bottom: 6px;transform: rotate(-135deg);}
45% { transform: rotate(10deg);}
75% { transform: rotate(-5deg);}
100% { bottom: 0px;transform: rotate(0);}
}
@-webkit-keyframes bottombar-back {
0% {bottom: 6px;-webkit-transform: rotate(-135deg);}
45% {-webkit-transform: rotate(10deg);}
75% {-webkit-transform: rotate(-5deg);}
100% {bottom: 0px;-webkit-transform: rotate(0);}
}
@-moz-keyframes bottombar-back {
0% {bottom: 6px;-moz-transform: rotate(-135deg);}
45% {-moz-transform: rotate(10deg);}
75% {-moz-transform: rotate(-5deg);}
100% {bottom: 0px;-moz-transform: rotate(0);}
}
}

227
public/theme/src/assets/sass/lbd/plugins/_animate.scss vendored

@ -0,0 +1,227 @@ @@ -0,0 +1,227 @@
// This file was modified by Creative Tim to keep only the animation that we need for Bootstrap Notify
@charset "UTF-8";
/*!
Animate.css - http://daneden.me/animate
Licensed under the MIT license - http://opensource.org/licenses/MIT
Copyright (c) 2015 Daniel Eden
*/
.animated {
-webkit-animation-duration: 1s;
animation-duration: 1s;
-webkit-animation-fill-mode: both;
animation-fill-mode: both;
}
.animated.infinite {
-webkit-animation-iteration-count: infinite;
animation-iteration-count: infinite;
}
.animated.hinge {
-webkit-animation-duration: 2s;
animation-duration: 2s;
}
.animated.bounceIn,
.animated.bounceOut {
-webkit-animation-duration: .75s;
animation-duration: .75s;
}
.animated.flipOutX,
.animated.flipOutY {
-webkit-animation-duration: .75s;
animation-duration: .75s;
}
@-webkit-keyframes shake {
from, to {
-webkit-transform: translate3d(0, 0, 0);
transform: translate3d(0, 0, 0);
}
10%, 30%, 50%, 70%, 90% {
-webkit-transform: translate3d(-10px, 0, 0);
transform: translate3d(-10px, 0, 0);
}
20%, 40%, 60%, 80% {
-webkit-transform: translate3d(10px, 0, 0);
transform: translate3d(10px, 0, 0);
}
}
@keyframes shake {
from, to {
-webkit-transform: translate3d(0, 0, 0);
transform: translate3d(0, 0, 0);
}
10%, 30%, 50%, 70%, 90% {
-webkit-transform: translate3d(-10px, 0, 0);
transform: translate3d(-10px, 0, 0);
}
20%, 40%, 60%, 80% {
-webkit-transform: translate3d(10px, 0, 0);
transform: translate3d(10px, 0, 0);
}
}
.shake {
-webkit-animation-name: shake;
animation-name: shake;
}
@-webkit-keyframes fadeInDown {
from {
opacity: 0;
-webkit-transform: translate3d(0, -100%, 0);
transform: translate3d(0, -100%, 0);
}
to {
opacity: 1;
-webkit-transform: none;
transform: none;
}
}
@keyframes fadeInDown {
from {
opacity: 0;
-webkit-transform: translate3d(0, -100%, 0);
transform: translate3d(0, -100%, 0);
}
to {
opacity: 1;
-webkit-transform: none;
transform: none;
}
}
.fadeInDown {
-webkit-animation-name: fadeInDown;
animation-name: fadeInDown;
}
@-webkit-keyframes fadeOut {
from {
opacity: 1;
}
to {
opacity: 0;
}
}
@keyframes fadeOut {
from {
opacity: 1;
}
to {
opacity: 0;
}
}
.fadeOut {
-webkit-animation-name: fadeOut;
animation-name: fadeOut;
}
@-webkit-keyframes fadeOutDown {
from {
opacity: 1;
}
to {
opacity: 0;
-webkit-transform: translate3d(0, 100%, 0);
transform: translate3d(0, 100%, 0);
}
}
@keyframes fadeOutDown {
from {
opacity: 1;
}
to {
opacity: 0;
-webkit-transform: translate3d(0, 100%, 0);
transform: translate3d(0, 100%, 0);
}
}
.fadeOutDown {
-webkit-animation-name: fadeOutDown;
animation-name: fadeOutDown;
}
@-webkit-keyframes fadeOutUp {
from {
opacity: 1;
}
to {
opacity: 0;
-webkit-transform: translate3d(0, -100%, 0);
transform: translate3d(0, -100%, 0);
}
}
@keyframes fadeOutUp {
from {
opacity: 1;
}
to {
opacity: 0;
-webkit-transform: translate3d(0, -100%, 0);
transform: translate3d(0, -100%, 0);
}
}
.fadeOutUp {
-webkit-animation-name: fadeOutUp;
animation-name: fadeOutUp;
}

40
public/theme/src/assets/sass/light-bootstrap-dashboard.scss vendored

@ -0,0 +1,40 @@ @@ -0,0 +1,40 @@
/*!
=========================================================
* Light Bootstrap Dashboard Vue - v1.0.0 (Bootstrap 4)
=========================================================
* Product Page: http://www.creative-tim.com/product/light-bootstrap-dashboard
* Copyright 2017 Creative Tim (http://www.creative-tim.com)
* Licensed under MIT (https://github.com/creativetimofficial/light-bootstrap-dashboard/blob/master/LICENSE.md)
=========================================================
* The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software.
*/
@import "lbd/variables";
@import "lbd/mixins";
@import "lbd/typography";
// Core CSS
@import "lbd/misc";
@import "lbd/sidebar-and-main-panel";
@import "lbd/buttons";
@import "lbd/inputs";
@import "lbd/alerts";
@import "lbd/tables";
@import "lbd/modal";
@import "lbd/checkbox-radio-switch";
@import "lbd/navbars";
@import "lbd/footers";
// Fancy Stuff
@import "lbd/plugins/animate";
@import "lbd/dropdown";
@import "lbd/cards";
@import "lbd/chartist";
@import "lbd/tooltip";
@import "lbd/responsive";

22
public/theme/src/components/Dashboard/Layout/Content.vue

@ -0,0 +1,22 @@ @@ -0,0 +1,22 @@
<template>
<transition name="fade" mode="out-in">
<router-view></router-view>
</transition>
</template>
<script>
export default {}
</script>
<style>
.fade-enter-active,
.fade-leave-active {
transition: opacity .1s
}
.fade-enter,
.fade-leave-to
/* .fade-leave-active in <2.1.8 */
{
opacity: 0
}
</style>

26
public/theme/src/components/Dashboard/Layout/ContentFooter.vue

@ -0,0 +1,26 @@ @@ -0,0 +1,26 @@
<template>
<footer class="footer">
<div class="container-fluid">
<nav>
<ul class="footer-menu">
<li>
<router-link :to="{path:'/admin'}">Dashboard</router-link>
</li>
</ul>
</nav>
<div class="copyright text-center">
&copy; Coded with
<i class="fa fa-heart heart"></i> by
<a href="https://github.com/cristijora" target="_blank">Cristi Jora</a>.
Designed by <a href="https://www.creative-tim.com/?ref=pdf-vuejs" target="_blank">Creative Tim</a>.
</div>
</div>
</footer>
</template>
<script>
export default {}
</script>
<style>
</style>

50
public/theme/src/components/Dashboard/Layout/DashboardLayout.vue

@ -0,0 +1,50 @@ @@ -0,0 +1,50 @@
<template>
<div class="wrapper">
<side-bar>
<mobile-menu slot="content"></mobile-menu>
<sidebar-link to="/ucp/overview">
<i class="fa fa-line-chart"></i>
<p>Dashboard</p>
</sidebar-link>
<sidebar-link to="/ucp/streams">
<i class="fa fa-signal"></i>
<p>My Streams</p>
</sidebar-link>
</side-bar>
<div class="main-panel">
<top-navbar></top-navbar>
<dashboard-content @click="toggleSidebar">
</dashboard-content>
<content-footer></content-footer>
</div>
</div>
</template>
<style lang="scss">
</style>
<script>
import TopNavbar from './TopNavbar.vue'
import ContentFooter from './ContentFooter.vue'
import DashboardContent from './Content.vue'
import MobileMenu from './MobileMenu.vue'
export default {
components: {
TopNavbar,
ContentFooter,
DashboardContent,
MobileMenu
},
methods: {
toggleSidebar() {
if (this.$sidebar.showSidebar) {
this.$sidebar.displaySidebar(false)
}
}
}
}
</script>

Some files were not shown because too many files have changed in this diff Show More

Loading…
Cancel
Save