├── LICENCE ├── README.md ├── SECURITY.md ├── admin ├── .htaccess ├── about.php ├── addnew.php ├── authenticate.php ├── backup.php ├── build │ ├── config │ │ ├── index.php │ │ ├── postcss.config.js │ │ └── rollup.config.js │ ├── img │ │ ├── avatar.png │ │ ├── index.php │ │ ├── login-admin.png │ │ └── tutorial.jpg │ ├── index.php │ ├── js │ │ ├── .jscsrc │ │ ├── AdminLTE.js │ │ ├── CardRefresh.js │ │ ├── CardWidget.js │ │ ├── ControlSidebar.js │ │ ├── DirectChat.js │ │ ├── Dropdown.js │ │ ├── Layout.js │ │ ├── PushMenu.js │ │ ├── SiteSearch.js │ │ ├── Toasts.js │ │ ├── TodoList.js │ │ ├── Treeview.js │ │ └── index.php │ └── scss │ │ ├── .csslintrc │ │ ├── AdminLTE-components.scss │ │ ├── AdminLTE-core.scss │ │ ├── AdminLTE-extra-components.scss │ │ ├── AdminLTE-pages.scss │ │ ├── AdminLTE-plugins.scss │ │ ├── AdminLTE-raw.scss │ │ ├── AdminLTE.scss │ │ ├── _alerts.scss │ │ ├── _bootstrap-variables.scss │ │ ├── _brand.scss │ │ ├── _buttons.scss │ │ ├── _callout.scss │ │ ├── _cards.scss │ │ ├── _carousel.scss │ │ ├── _colors.scss │ │ ├── _control-sidebar.scss │ │ ├── _direct-chat.scss │ │ ├── _dropdown.scss │ │ ├── _elevation.scss │ │ ├── _forms.scss │ │ ├── _info-box.scss │ │ ├── _layout.scss │ │ ├── _main-header.scss │ │ ├── _main-sidebar.scss │ │ ├── _miscellaneous.scss │ │ ├── _mixins.scss │ │ ├── _modals.scss │ │ ├── _navs.scss │ │ ├── _print.scss │ │ ├── _products.scss │ │ ├── _progress-bars.scss │ │ ├── _sidebar-mini.scss │ │ ├── _small-box.scss │ │ ├── _social-widgets.scss │ │ ├── _table.scss │ │ ├── _text.scss │ │ ├── _timeline.scss │ │ ├── _toasts.scss │ │ ├── _users-list.scss │ │ ├── _variables.scss │ │ ├── index.php │ │ ├── mixins │ │ ├── _accent.scss │ │ ├── _backgrounds.scss │ │ ├── _cards.scss │ │ ├── _custom-forms.scss │ │ ├── _direct-chat.scss │ │ ├── _miscellaneous.scss │ │ ├── _navbar.scss │ │ ├── _sidebar.scss │ │ └── _toasts.scss │ │ ├── pages │ │ ├── _404_500_errors.scss │ │ ├── _e-commerce.scss │ │ ├── _invoice.scss │ │ ├── _lockscreen.scss │ │ ├── _login_and_register.scss │ │ ├── _mailbox.scss │ │ ├── _profile.scss │ │ └── _projects.scss │ │ ├── parts │ │ ├── _components.scss │ │ ├── _core.scss │ │ ├── _extra-components.scss │ │ ├── _miscellaneous.scss │ │ ├── _pages.scss │ │ └── _plugins.scss │ │ └── plugins │ │ ├── _bootstrap-slider.scss │ │ ├── _bootstrap-switch.scss │ │ ├── _fullcalendar.scss │ │ ├── _icheck-bootstrap.scss │ │ ├── _jqvmap.scss │ │ ├── _mapael.scss │ │ ├── _miscellaneous.scss │ │ ├── _mixins.scss │ │ ├── _pace.scss │ │ ├── _select2.scss │ │ ├── _sweetalert2.scss │ │ └── _toastr.scss ├── configuration.php ├── delete.php ├── dist │ ├── css │ │ ├── adminlte.css │ │ ├── adminlte.css.map │ │ ├── adminlte.min.css │ │ ├── adminlte.min.css.map │ │ ├── alt │ │ │ ├── adminlte.components.css │ │ │ ├── adminlte.components.css.map │ │ │ ├── adminlte.components.min.css │ │ │ ├── adminlte.components.min.css.map │ │ │ ├── adminlte.core.css │ │ │ ├── adminlte.core.css.map │ │ │ ├── adminlte.core.min.css │ │ │ ├── adminlte.core.min.css.map │ │ │ ├── adminlte.extra-components.css │ │ │ ├── adminlte.extra-components.css.map │ │ │ ├── adminlte.extra-components.min.css │ │ │ ├── adminlte.extra-components.min.css.map │ │ │ ├── adminlte.pages.css │ │ │ ├── adminlte.pages.css.map │ │ │ ├── adminlte.pages.min.css │ │ │ ├── adminlte.pages.min.css.map │ │ │ ├── adminlte.plugins.css │ │ │ ├── adminlte.plugins.css.map │ │ │ ├── adminlte.plugins.min.css │ │ │ ├── adminlte.plugins.min.css.map │ │ │ └── index.php │ │ └── index.php │ ├── img │ │ ├── icons.png │ │ └── index.php │ ├── index.php │ └── js │ │ ├── adminlte.js │ │ ├── adminlte.js.map │ │ ├── adminlte.min.js │ │ ├── adminlte.min.js.map │ │ ├── demo.js │ │ └── index.php ├── edit.php ├── gettingstarted.php ├── includes │ ├── export.php │ └── import.php ├── index.php ├── login.php ├── logout.php ├── passwordchange.php ├── plugins │ ├── bootstrap │ │ └── js │ │ │ ├── bootstrap.bundle.js │ │ │ ├── bootstrap.bundle.js.map │ │ │ ├── bootstrap.bundle.min.js │ │ │ ├── bootstrap.bundle.min.js.map │ │ │ ├── bootstrap.js │ │ │ ├── bootstrap.js.map │ │ │ ├── bootstrap.min.js │ │ │ └── bootstrap.min.js.map │ ├── datatables-bs4 │ │ ├── css │ │ │ ├── dataTables.bootstrap4.css │ │ │ └── dataTables.bootstrap4.min.css │ │ └── js │ │ │ ├── dataTables.bootstrap4.js │ │ │ └── dataTables.bootstrap4.min.js │ ├── datatables-responsive │ │ ├── css │ │ │ ├── responsive.bootstrap4.css │ │ │ └── responsive.bootstrap4.min.css │ │ └── js │ │ │ ├── dataTables.responsive.js │ │ │ ├── dataTables.responsive.min.js │ │ │ ├── responsive.bootstrap4.js │ │ │ └── responsive.bootstrap4.min.js │ ├── datatables │ │ ├── jquery.dataTables.js │ │ └── jquery.dataTables.min.js │ ├── flot │ │ ├── jquery.flot.js │ │ └── plugins │ │ │ ├── jquery.flot.axislabels.js │ │ │ ├── jquery.flot.browser.js │ │ │ ├── jquery.flot.categories.js │ │ │ ├── jquery.flot.composeImages.js │ │ │ ├── jquery.flot.crosshair.js │ │ │ ├── jquery.flot.drawSeries.js │ │ │ ├── jquery.flot.errorbars.js │ │ │ ├── jquery.flot.fillbetween.js │ │ │ ├── jquery.flot.flatdata.js │ │ │ ├── jquery.flot.hover.js │ │ │ ├── jquery.flot.image.js │ │ │ ├── jquery.flot.legend.js │ │ │ ├── jquery.flot.logaxis.js │ │ │ ├── jquery.flot.navigate.js │ │ │ ├── jquery.flot.pie.js │ │ │ ├── jquery.flot.resize.js │ │ │ ├── jquery.flot.saturated.js │ │ │ ├── jquery.flot.selection.js │ │ │ ├── jquery.flot.stack.js │ │ │ ├── jquery.flot.symbol.js │ │ │ ├── jquery.flot.threshold.js │ │ │ ├── jquery.flot.time.js │ │ │ ├── jquery.flot.touch.js │ │ │ ├── jquery.flot.touchNavigate.js │ │ │ └── jquery.flot.uiConstants.js │ ├── index.php │ └── jquery │ │ ├── core.js │ │ ├── jquery.js │ │ ├── jquery.min.js │ │ ├── jquery.min.map │ │ ├── jquery.slim.js │ │ ├── jquery.slim.min.js │ │ └── jquery.slim.min.map ├── profile.php ├── support.php ├── templates │ ├── footer.tpl.php │ └── header.tpl.php ├── tutorials.php └── vpcustomization.php ├── assets ├── css │ ├── bootstrap-grid.min.css │ ├── bootstrap-reboot.min.css │ ├── bootstrap.min.css │ ├── dropdown-style.css │ ├── index.php │ ├── mbr-additional.css │ ├── mobirise-icons.css │ ├── socicon-styles.css │ ├── style.css │ ├── styles-socicon.css │ └── tether.min.css ├── img │ ├── 404.png │ ├── index.php │ └── mbr-1920x1276.jpg ├── index.php └── js │ ├── bootstrap.min.js │ ├── formoid.min.js │ ├── index.php │ ├── jarallax.min.js │ ├── jquery.min.js │ ├── jquery.touch-swipe.min.js │ ├── nav-dropdown.js │ ├── navbar-dropdown.js │ ├── popper.min.js │ ├── script.js │ ├── smooth-scroll.js │ └── tether.min.js ├── includes └── check.php ├── index.php ├── install.php ├── maintenance.php ├── tutorials.php └── videos ├── README.md └── index.php /LICENCE: -------------------------------------------------------------------------------- 1 | MIT License 2 | 3 | Copyright (c) 2022 Dimitris T.(https://github.com/dimitrist19) 4 | 5 | Permission is hereby granted, free of charge, to any person obtaining a copy 6 | of this software and associated documentation files (the "Software"), to deal 7 | in the Software without restriction, including without limitation the rights 8 | to use, copy, modify, merge, publish, distribute, sublicense, and/or sell 9 | copies of the Software, and to permit persons to whom the Software is 10 | furnished to do so, subject to the following conditions: 11 | 12 | The above copyright notice and this permission notice shall be included in all 13 | copies or substantial portions of the Software. 14 | 15 | THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR 16 | IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, 17 | FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE 18 | AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER 19 | LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, 20 | OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE 21 | SOFTWARE. -------------------------------------------------------------------------------- /README.md: -------------------------------------------------------------------------------- 1 |

Tutorials Site CMS

2 | Through 'Tutorials Site CMS' you can easily create a video tutorial site for your hosting business! 3 | 4 |

This CMS includes:

5 | 6 | ADMIN INTERFACE: 7 | - One Admin Account (multiple users might be added in a future version) 8 | - Add/Edit/Remove Tutorials (title, embed code, description, further explanation &/or how to) 9 | - Manage your logo, favicon, host name, support url, knowledgebase url and home url 10 | - VistaPanel Customization (Changes tutorial link to your preferred url) 11 | 12 | USER INTERFACE: 13 | - Default Template (you may code your own using html & css) 14 | - Search 15 | - Tutorials List 16 | - Single Tutorial Page 17 | 18 | You may place a feature request in issues section. 19 | 20 |
This CMS is released under the MIT Licence.
21 | 22 |

Get Started

23 |

A) New Installation

24 |
1. Download the files and upload them to your directory 25 |
2. Navigate to your site (you should get redirected to the install.php file) and complete the details needed 26 |
3. Click install and wait for the installer to execute 27 |
4. See the Getting Started guide in the admin panel for further details. 28 | 29 |

B) Update Existing Installation

30 |
1. Download the files and upload them to your directory (replace all files except config.php) 31 |
2. Navigate to your site (you should get redirected to the install.php file) and select the 'Update Option' 32 |
3. Click install and wait for the installer to execute 33 |
4. See the Getting Started guide in the admin panel for further details. 34 | 35 |

Default Login Details

36 |
Username: admin 37 |
Password: pass 38 | 39 |

Support

40 | For issue and bug reports open a github issue. For other support visit the helpdesk: https://service.dtprojects.eu.org/support/ 41 | 42 |

Changelog

43 | For changelog you can visit https://dtprojects.eu.org/tutorials-site-cms/changelog.php 44 | -------------------------------------------------------------------------------- /SECURITY.md: -------------------------------------------------------------------------------- 1 | # Security Policy 2 | 3 | With each new version, possible security problems will be fixed. Therefore any previous versions will be out of support. 4 | 5 | ## Supported Versions 6 | 7 | | Version | Supported | 8 | | ------- | ------------------ | 9 | | 1.3.x | :white_check_mark: | 10 | | 1.0-1.2 | :x: | 11 | 12 | ## Reporting a Vulnerability 13 | 14 | To report a vulnerability please open an issue explaining it. 15 | 16 | It will be investigated and attempt to fix if possible. ETA is not guaranteed and depends from many factors (e.g. the size of the issue). -------------------------------------------------------------------------------- /admin/.htaccess: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/dimitrist19/tutorials-site-cms/1bb1f92ace7ec48094daa422a0b1a61522ba8eec/admin/.htaccess -------------------------------------------------------------------------------- /admin/authenticate.php: -------------------------------------------------------------------------------- 1 | 0) { 10 | require '../config.php'; 11 | if (!isset($_POST['username'], $_POST['password'])) { 12 | 13 | // Could not get the data that should have been sent. 14 | $message = '

Please fill both the username and password field

'; 15 | die(); 16 | } 17 | 18 | // Prepare our SQL, preparing the SQL statement will prevent SQL injection. 19 | 20 | if ($stmt = $conn->prepare('SELECT id, password FROM users WHERE username = ?')) { 21 | 22 | // Bind parameters (s = string, i = int, b = blob, etc), in our case the username is a string so we use "s" 23 | 24 | $stmt->bind_param('s', $_POST['username']); 25 | 26 | $stmt->execute(); 27 | 28 | // Store the result so we can check if the account exists in the database. 29 | 30 | $stmt->store_result(); 31 | 32 | if ($stmt->num_rows > 0) { 33 | 34 | $stmt->bind_result($id, $password); 35 | 36 | $stmt->fetch(); 37 | 38 | // Account exists, now we verify the password. 39 | // Note: remember to use password_hash in your registration file to store the hashed passwords. 40 | 41 | if (password_verify($_POST['password'], $password)) { //(password_verify) 42 | // Verification success! User has loggedin! 43 | // Create sessions so we know the user is logged in, they basically act like cookies but remember the data on the server. 44 | session_regenerate_id(); 45 | 46 | $_SESSION['loggedin'] = true; 47 | 48 | $_SESSION['name'] = $_POST['username']; 49 | 50 | $_SESSION['id'] = $id; 51 | 52 | header('Location: index.php'); 53 | } else { 54 | 55 | $message = '

Incorrect password!

'; 56 | } 57 | } else { 58 | 59 | $message = '

Incorrect username!

'; 60 | } 61 | } 62 | 63 | $stmt->close(); 64 | } 65 | //} 66 | -------------------------------------------------------------------------------- /admin/backup.php: -------------------------------------------------------------------------------- 1 | 13 | 17 | Restore Completed!

'; 22 | } else if (isset($_GET['error'])) { 23 | echo '

Something went wrong! Please try again or ask for help.

'; 24 | } 25 | } 26 | ?> 27 | 28 |
29 | 30 |
31 |
32 |
33 |
34 |

Backup & Restore

35 |
36 |
37 | 41 |
42 |
43 |
44 |
45 | 46 | 47 | 48 |
49 |
50 |
51 |
52 |
53 |
54 |

Backup

55 |
56 | 57 | 58 |
59 |

Create Backup

60 |
Restore
61 | 62 |
63 | 64 | 65 |
66 |
67 |
68 |
69 | 70 | 71 |
72 |
73 | 74 |
75 |
76 | 77 | 80 | 81 | 82 | 83 | 84 | 85 | 86 | 87 | 88 | 89 | 90 | 91 | 92 | 93 | -------------------------------------------------------------------------------- /admin/build/config/index.php: -------------------------------------------------------------------------------- 1 | ({ 4 | map: ctx.file.dirname.includes('examples') ? false : { 5 | inline: false, 6 | annotation: true, 7 | sourcesContent: true 8 | }, 9 | plugins: { 10 | autoprefixer: { 11 | cascade: false 12 | } 13 | } 14 | }) 15 | -------------------------------------------------------------------------------- /admin/build/config/rollup.config.js: -------------------------------------------------------------------------------- 1 | import babel from 'rollup-plugin-babel' 2 | 3 | const pkg = require('../../package') 4 | const year = new Date().getFullYear() 5 | 6 | const globals = { 7 | jquery: 'jQuery' 8 | } 9 | 10 | export default { 11 | input : 'build/js/AdminLTE.js', 12 | output : { 13 | banner: `/*! 14 | * AdminLTE v${pkg.version} (${pkg.homepage}) 15 | * Copyright 2014-${year} ${pkg.author} 16 | * Licensed under MIT (https://github.com/ColorlibHQ/AdminLTE/blob/master/LICENSE) 17 | */`, 18 | file : 'dist/js/adminlte.js', 19 | format: 'umd', 20 | globals, 21 | name : 'adminlte' 22 | }, 23 | plugins: [ 24 | babel({ 25 | exclude: 'node_modules/**', 26 | externalHelpers: true 27 | }) 28 | ] 29 | } 30 | -------------------------------------------------------------------------------- /admin/build/img/avatar.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/dimitrist19/tutorials-site-cms/1bb1f92ace7ec48094daa422a0b1a61522ba8eec/admin/build/img/avatar.png -------------------------------------------------------------------------------- /admin/build/img/index.php: -------------------------------------------------------------------------------- 1 | ", "<", ">=", "<="], 28 | "requireSpaceAfterKeywords": ["if", "else", "for", "while", "do", "switch", "return", "try", "catch"], 29 | "requireSpaceAfterLineComment": true, 30 | "requireSpaceBeforeBinaryOperators": ["+", "-", "/", "*", "=", "==", "===", "!=", "!==", ">", "<", ">=", "<="], 31 | "requireSpaceBetweenArguments": true, 32 | "requireSpacesInAnonymousFunctionExpression": { "beforeOpeningCurlyBrace": true, "beforeOpeningRoundBrace": true, "allExcept": ["shorthand"] }, 33 | "requireSpacesInConditionalExpression": true, 34 | "requireSpacesInForStatement": true, 35 | "requireSpacesInFunctionDeclaration": { "beforeOpeningCurlyBrace": true }, 36 | "requireSpacesInFunctionExpression": { "beforeOpeningCurlyBrace": true }, 37 | "requireSpacesInNamedFunctionExpression": { "beforeOpeningCurlyBrace": true }, 38 | "requireSpacesInsideObjectBrackets": "allButNested", 39 | "validateAlignedFunctionParameters": true, 40 | "validateIndentation": 2, 41 | "validateLineBreaks": "LF", 42 | "validateNewlineAfterArrayElements": true, 43 | "validateQuoteMarks": "'" 44 | } 45 | -------------------------------------------------------------------------------- /admin/build/js/AdminLTE.js: -------------------------------------------------------------------------------- 1 | import ControlSidebar from './ControlSidebar' 2 | import Layout from './Layout' 3 | import PushMenu from './PushMenu' 4 | import Treeview from './Treeview' 5 | import DirectChat from './DirectChat' 6 | import TodoList from './TodoList' 7 | import CardWidget from './CardWidget' 8 | import CardRefresh from './CardRefresh' 9 | import Dropdown from './Dropdown' 10 | import Toasts from './Toasts' 11 | 12 | export { 13 | ControlSidebar, 14 | Layout, 15 | PushMenu, 16 | Treeview, 17 | DirectChat, 18 | TodoList, 19 | CardWidget, 20 | CardRefresh, 21 | Dropdown, 22 | Toasts 23 | } 24 | -------------------------------------------------------------------------------- /admin/build/js/CardRefresh.js: -------------------------------------------------------------------------------- 1 | /** 2 | * -------------------------------------------- 3 | * AdminLTE CardRefresh.js 4 | * License MIT 5 | * -------------------------------------------- 6 | */ 7 | 8 | const CardRefresh = (($) => { 9 | /** 10 | * Constants 11 | * ==================================================== 12 | */ 13 | 14 | const NAME = 'CardRefresh' 15 | const DATA_KEY = 'lte.cardrefresh' 16 | const EVENT_KEY = `.${DATA_KEY}` 17 | const JQUERY_NO_CONFLICT = $.fn[NAME] 18 | 19 | const Event = { 20 | LOADED: `loaded${EVENT_KEY}`, 21 | OVERLAY_ADDED: `overlay.added${EVENT_KEY}`, 22 | OVERLAY_REMOVED: `overlay.removed${EVENT_KEY}`, 23 | } 24 | 25 | const ClassName = { 26 | CARD: 'card', 27 | } 28 | 29 | const Selector = { 30 | CARD: `.${ClassName.CARD}`, 31 | DATA_REFRESH: '[data-card-widget="card-refresh"]', 32 | } 33 | 34 | const Default = { 35 | source: '', 36 | sourceSelector: '', 37 | params: {}, 38 | trigger: Selector.DATA_REFRESH, 39 | content: '.card-body', 40 | loadInContent: true, 41 | loadOnInit: true, 42 | responseType: '', 43 | overlayTemplate: '
', 44 | onLoadStart: function () { 45 | }, 46 | onLoadDone: function (response) { 47 | return response; 48 | } 49 | } 50 | 51 | class CardRefresh { 52 | constructor(element, settings) { 53 | this._element = element 54 | this._parent = element.parents(Selector.CARD).first() 55 | this._settings = $.extend({}, Default, settings) 56 | this._overlay = $(this._settings.overlayTemplate) 57 | 58 | if (element.hasClass(ClassName.CARD)) { 59 | this._parent = element 60 | } 61 | 62 | if (this._settings.source === '') { 63 | throw new Error('Source url was not defined. Please specify a url in your CardRefresh source option.'); 64 | } 65 | } 66 | 67 | load() { 68 | this._addOverlay() 69 | this._settings.onLoadStart.call($(this)) 70 | 71 | $.get(this._settings.source, this._settings.params, function (response) { 72 | if (this._settings.loadInContent) { 73 | if (this._settings.sourceSelector != '') { 74 | response = $(response).find(this._settings.sourceSelector).html() 75 | } 76 | 77 | this._parent.find(this._settings.content).html(response) 78 | } 79 | 80 | this._settings.onLoadDone.call($(this), response) 81 | this._removeOverlay(); 82 | }.bind(this), this._settings.responseType !== '' && this._settings.responseType) 83 | 84 | const loadedEvent = $.Event(Event.LOADED) 85 | $(this._element).trigger(loadedEvent) 86 | } 87 | 88 | _addOverlay() { 89 | this._parent.append(this._overlay) 90 | 91 | const overlayAddedEvent = $.Event(Event.OVERLAY_ADDED) 92 | $(this._element).trigger(overlayAddedEvent) 93 | }; 94 | 95 | _removeOverlay() { 96 | this._parent.find(this._overlay).remove() 97 | 98 | const overlayRemovedEvent = $.Event(Event.OVERLAY_REMOVED) 99 | $(this._element).trigger(overlayRemovedEvent) 100 | }; 101 | 102 | 103 | // Private 104 | 105 | _init(card) { 106 | $(this).find(this._settings.trigger).on('click', () => { 107 | this.load() 108 | }) 109 | 110 | if (this._settings.loadOnInit) { 111 | this.load() 112 | } 113 | } 114 | 115 | // Static 116 | 117 | static _jQueryInterface(config) { 118 | let data = $(this).data(DATA_KEY) 119 | const _options = $.extend({}, Default, $(this).data()) 120 | 121 | if (!data) { 122 | data = new CardRefresh($(this), _options) 123 | $(this).data(DATA_KEY, typeof config === 'string' ? data: config) 124 | } 125 | 126 | if (typeof config === 'string' && config.match(/load/)) { 127 | data[config]() 128 | } else { 129 | data._init($(this)) 130 | } 131 | } 132 | } 133 | 134 | /** 135 | * Data API 136 | * ==================================================== 137 | */ 138 | 139 | $(document).on('click', Selector.DATA_REFRESH, function (event) { 140 | if (event) { 141 | event.preventDefault() 142 | } 143 | 144 | CardRefresh._jQueryInterface.call($(this), 'load') 145 | }) 146 | 147 | $(document).ready(function () { 148 | $(Selector.DATA_REFRESH).each(function() { 149 | CardRefresh._jQueryInterface.call($(this)) 150 | }) 151 | }) 152 | 153 | /** 154 | * jQuery API 155 | * ==================================================== 156 | */ 157 | 158 | $.fn[NAME] = CardRefresh._jQueryInterface 159 | $.fn[NAME].Constructor = CardRefresh 160 | $.fn[NAME].noConflict = function () { 161 | $.fn[NAME] = JQUERY_NO_CONFLICT 162 | return CardRefresh._jQueryInterface 163 | } 164 | 165 | return CardRefresh 166 | })(jQuery) 167 | 168 | export default CardRefresh 169 | -------------------------------------------------------------------------------- /admin/build/js/DirectChat.js: -------------------------------------------------------------------------------- 1 | /** 2 | * -------------------------------------------- 3 | * AdminLTE DirectChat.js 4 | * License MIT 5 | * -------------------------------------------- 6 | */ 7 | 8 | const DirectChat = (($) => { 9 | /** 10 | * Constants 11 | * ==================================================== 12 | */ 13 | 14 | const NAME = 'DirectChat' 15 | const DATA_KEY = 'lte.directchat' 16 | const EVENT_KEY = `.${DATA_KEY}` 17 | const JQUERY_NO_CONFLICT = $.fn[NAME] 18 | const DATA_API_KEY = '.data-api' 19 | 20 | const Event = { 21 | TOGGLED: `toggled{EVENT_KEY}` 22 | } 23 | 24 | const Selector = { 25 | DATA_TOGGLE: '[data-widget="chat-pane-toggle"]', 26 | DIRECT_CHAT: '.direct-chat' 27 | }; 28 | 29 | const ClassName = { 30 | DIRECT_CHAT_OPEN: 'direct-chat-contacts-open' 31 | }; 32 | 33 | /** 34 | * Class Definition 35 | * ==================================================== 36 | */ 37 | 38 | class DirectChat { 39 | constructor(element, config) { 40 | this._element = element 41 | } 42 | 43 | toggle() { 44 | $(this._element).parents(Selector.DIRECT_CHAT).first().toggleClass(ClassName.DIRECT_CHAT_OPEN); 45 | 46 | const toggledEvent = $.Event(Event.TOGGLED) 47 | $(this._element).trigger(toggledEvent) 48 | } 49 | 50 | // Static 51 | 52 | static _jQueryInterface(config) { 53 | return this.each(function () { 54 | let data = $(this).data(DATA_KEY) 55 | 56 | if (!data) { 57 | data = new DirectChat($(this)) 58 | $(this).data(DATA_KEY, data) 59 | } 60 | 61 | data[config]() 62 | }) 63 | } 64 | } 65 | 66 | /** 67 | * 68 | * Data Api implementation 69 | * ==================================================== 70 | */ 71 | 72 | $(document).on('click', Selector.DATA_TOGGLE, function (event) { 73 | if (event) event.preventDefault(); 74 | DirectChat._jQueryInterface.call($(this), 'toggle'); 75 | }); 76 | 77 | /** 78 | * jQuery API 79 | * ==================================================== 80 | */ 81 | 82 | $.fn[NAME] = DirectChat._jQueryInterface 83 | $.fn[NAME].Constructor = DirectChat 84 | $.fn[NAME].noConflict = function () { 85 | $.fn[NAME] = JQUERY_NO_CONFLICT 86 | return DirectChat._jQueryInterface 87 | } 88 | 89 | return DirectChat 90 | })(jQuery) 91 | 92 | export default DirectChat 93 | -------------------------------------------------------------------------------- /admin/build/js/Dropdown.js: -------------------------------------------------------------------------------- 1 | /** 2 | * -------------------------------------------- 3 | * AdminLTE Dropdown.js 4 | * License MIT 5 | * -------------------------------------------- 6 | */ 7 | 8 | const Dropdown = (($) => { 9 | /** 10 | * Constants 11 | * ==================================================== 12 | */ 13 | 14 | const NAME = 'Dropdown' 15 | const DATA_KEY = 'lte.dropdown' 16 | const EVENT_KEY = `.${DATA_KEY}` 17 | const JQUERY_NO_CONFLICT = $.fn[NAME] 18 | 19 | const Selector = { 20 | NAVBAR: '.navbar', 21 | DROPDOWN_MENU: '.dropdown-menu', 22 | DROPDOWN_MENU_ACTIVE: '.dropdown-menu.show', 23 | DROPDOWN_TOGGLE: '[data-toggle="dropdown"]', 24 | } 25 | 26 | const ClassName = { 27 | DROPDOWN_HOVER: 'dropdown-hover', 28 | DROPDOWN_RIGHT: 'dropdown-menu-right' 29 | } 30 | 31 | const Default = { 32 | } 33 | 34 | 35 | /** 36 | * Class Definition 37 | * ==================================================== 38 | */ 39 | 40 | class Dropdown { 41 | constructor(element, config) { 42 | this._config = config 43 | this._element = element 44 | } 45 | 46 | // Public 47 | 48 | toggleSubmenu() { 49 | this._element.siblings().show().toggleClass("show") 50 | 51 | if (! this._element.next().hasClass('show')) { 52 | this._element.parents('.dropdown-menu').first().find('.show').removeClass("show").hide() 53 | } 54 | 55 | this._element.parents('li.nav-item.dropdown.show').on('hidden.bs.dropdown', function(e) { 56 | $('.dropdown-submenu .show').removeClass("show").hide() 57 | }) 58 | } 59 | 60 | fixPosition() { 61 | let elm = $(Selector.DROPDOWN_MENU_ACTIVE) 62 | 63 | if (elm.length !== 0) { 64 | if (elm.hasClass(ClassName.DROPDOWN_RIGHT)) { 65 | elm.css('left', 'inherit') 66 | elm.css('right', 0) 67 | } else { 68 | elm.css('left', 0) 69 | elm.css('right', 'inherit') 70 | } 71 | 72 | let offset = elm.offset() 73 | let width = elm.width() 74 | let windowWidth = $(window).width() 75 | let visiblePart = windowWidth - offset.left 76 | 77 | if (offset.left < 0) { 78 | elm.css('left', 'inherit') 79 | elm.css('right', (offset.left - 5)) 80 | } else { 81 | if (visiblePart < width) { 82 | elm.css('left', 'inherit') 83 | elm.css('right', 0) 84 | } 85 | } 86 | } 87 | } 88 | 89 | // Static 90 | 91 | static _jQueryInterface(config) { 92 | return this.each(function () { 93 | let data = $(this).data(DATA_KEY) 94 | const _config = $.extend({}, Default, $(this).data()) 95 | 96 | if (!data) { 97 | data = new Dropdown($(this), _config) 98 | $(this).data(DATA_KEY, data) 99 | } 100 | 101 | if (config === 'toggleSubmenu' || config == 'fixPosition') { 102 | data[config]() 103 | } 104 | }) 105 | } 106 | } 107 | 108 | /** 109 | * Data API 110 | * ==================================================== 111 | */ 112 | 113 | $(Selector.DROPDOWN_MENU + ' ' + Selector.DROPDOWN_TOGGLE).on("click", function(event) { 114 | event.preventDefault() 115 | event.stopPropagation() 116 | 117 | Dropdown._jQueryInterface.call($(this), 'toggleSubmenu') 118 | }); 119 | 120 | $(Selector.NAVBAR + ' ' + Selector.DROPDOWN_TOGGLE).on("click", function(event) { 121 | event.preventDefault() 122 | 123 | setTimeout(function() { 124 | Dropdown._jQueryInterface.call($(this), 'fixPosition') 125 | }, 1) 126 | }); 127 | 128 | /** 129 | * jQuery API 130 | * ==================================================== 131 | */ 132 | 133 | $.fn[NAME] = Dropdown._jQueryInterface 134 | $.fn[NAME].Constructor = Dropdown 135 | $.fn[NAME].noConflict = function () { 136 | $.fn[NAME] = JQUERY_NO_CONFLICT 137 | return Dropdown._jQueryInterface 138 | } 139 | 140 | return Dropdown 141 | })(jQuery) 142 | 143 | export default Dropdown 144 | -------------------------------------------------------------------------------- /admin/build/js/SiteSearch.js: -------------------------------------------------------------------------------- 1 | /** 2 | * -------------------------------------------- 3 | * AdminLTE SiteSearch.js 4 | * License MIT 5 | * -------------------------------------------- 6 | */ 7 | 8 | const SiteSearch = (($) => { 9 | /** 10 | * Constants 11 | * ==================================================== 12 | */ 13 | 14 | const NAME = 'SiteSearch' 15 | const DATA_KEY = 'lte.site-search' 16 | const EVENT_KEY = `.${DATA_KEY}` 17 | const JQUERY_NO_CONFLICT = $.fn[NAME] 18 | 19 | const Event = {} 20 | 21 | const Selector = { 22 | TOGGLE_BUTTON : '[data-widget="site-search"]', 23 | SEARCH_BLOCK : '.site-search-block', 24 | SEARCH_BACKDROP: '.site-search-backdrop', 25 | SEARCH_INPUT : '.site-search-block .form-control' 26 | } 27 | 28 | const ClassName = { 29 | OPEN: 'site-search-open' 30 | } 31 | 32 | const Default = { 33 | transitionSpeed: 300 34 | } 35 | 36 | /** 37 | * Class Definition 38 | * ==================================================== 39 | */ 40 | 41 | class SiteSearch { 42 | 43 | constructor(_element, _options) { 44 | this.element = _element 45 | this.options = $.extend({}, Default, _options) 46 | } 47 | 48 | // Public 49 | 50 | open() { 51 | $(Selector.SEARCH_BLOCK).slideDown(this.options.transitionSpeed) 52 | $(Selector.SEARCH_BACKDROP).show(0) 53 | $(Selector.SEARCH_INPUT).focus() 54 | $(Selector.SEARCH_BLOCK).addClass(ClassName.OPEN) 55 | } 56 | 57 | close() { 58 | $(Selector.SEARCH_BLOCK).slideUp(this.options.transitionSpeed) 59 | $(Selector.SEARCH_BACKDROP).hide(0) 60 | $(Selector.SEARCH_BLOCK).removeClass(ClassName.OPEN) 61 | } 62 | 63 | toggle() { 64 | if ($(Selector.SEARCH_BLOCK).hasClass(ClassName.OPEN)) { 65 | this.close() 66 | } else { 67 | this.open() 68 | } 69 | } 70 | 71 | // Static 72 | 73 | static _jQueryInterface(options) { 74 | return this.each(function () { 75 | let data = $(this).data(DATA_KEY) 76 | 77 | if (!data) { 78 | data = new SiteSearch(this, options) 79 | $(this).data(DATA_KEY, data) 80 | } 81 | 82 | if (!/toggle|close/.test(options)) { 83 | throw Error(`Undefined method ${options}`) 84 | } 85 | 86 | data[options]() 87 | }) 88 | } 89 | } 90 | 91 | /** 92 | * Data API 93 | * ==================================================== 94 | */ 95 | $(document).on('click', Selector.TOGGLE_BUTTON, (event) => { 96 | event.preventDefault() 97 | 98 | let button = $(event.currentTarget) 99 | 100 | if (button.data('widget') !== 'site-search') { 101 | button = button.closest(Selector.TOGGLE_BUTTON) 102 | } 103 | 104 | SiteSearch._jQueryInterface.call(button, 'toggle') 105 | }) 106 | 107 | $(document).on('click', Selector.SEARCH_BACKDROP, (event) => { 108 | const backdrop = $(event.currentTarget) 109 | SiteSearch._jQueryInterface.call(backdrop, 'close') 110 | }) 111 | 112 | /** 113 | * jQuery API 114 | * ==================================================== 115 | */ 116 | 117 | $.fn[NAME] = SiteSearch._jQueryInterface 118 | $.fn[NAME].Constructor = SiteSearch 119 | $.fn[NAME].noConflict = function () { 120 | $.fn[NAME] = JQUERY_NO_CONFLICT 121 | return SiteSearch._jQueryInterface 122 | } 123 | 124 | return SiteSearch 125 | })(jQuery) 126 | 127 | export default SiteSearch 128 | -------------------------------------------------------------------------------- /admin/build/js/TodoList.js: -------------------------------------------------------------------------------- 1 | /** 2 | * -------------------------------------------- 3 | * AdminLTE TodoList.js 4 | * License MIT 5 | * -------------------------------------------- 6 | */ 7 | 8 | const TodoList = (($) => { 9 | /** 10 | * Constants 11 | * ==================================================== 12 | */ 13 | 14 | const NAME = 'TodoList' 15 | const DATA_KEY = 'lte.todolist' 16 | const EVENT_KEY = `.${DATA_KEY}` 17 | const JQUERY_NO_CONFLICT = $.fn[NAME] 18 | 19 | const Selector = { 20 | DATA_TOGGLE: '[data-widget="todo-list"]' 21 | } 22 | 23 | const ClassName = { 24 | TODO_LIST_DONE: 'done' 25 | } 26 | 27 | const Default = { 28 | onCheck: function (item) { 29 | return item; 30 | }, 31 | onUnCheck: function (item) { 32 | return item; 33 | } 34 | } 35 | 36 | /** 37 | * Class Definition 38 | * ==================================================== 39 | */ 40 | 41 | class TodoList { 42 | constructor(element, config) { 43 | this._config = config 44 | this._element = element 45 | 46 | this._init() 47 | } 48 | 49 | // Public 50 | 51 | toggle(item) { 52 | item.parents('li').toggleClass(ClassName.TODO_LIST_DONE); 53 | if (! $(item).prop('checked')) { 54 | this.unCheck($(item)); 55 | return; 56 | } 57 | 58 | this.check(item); 59 | } 60 | 61 | check (item) { 62 | this._config.onCheck.call(item); 63 | } 64 | 65 | unCheck (item) { 66 | this._config.onUnCheck.call(item); 67 | } 68 | 69 | // Private 70 | 71 | _init() { 72 | var that = this 73 | $(Selector.DATA_TOGGLE).find('input:checkbox:checked').parents('li').toggleClass(ClassName.TODO_LIST_DONE) 74 | $(Selector.DATA_TOGGLE).on('change', 'input:checkbox', (event) => { 75 | that.toggle($(event.target)) 76 | }) 77 | } 78 | 79 | // Static 80 | 81 | static _jQueryInterface(config) { 82 | return this.each(function () { 83 | let data = $(this).data(DATA_KEY) 84 | const _options = $.extend({}, Default, $(this).data()) 85 | 86 | if (!data) { 87 | data = new TodoList($(this), _options) 88 | $(this).data(DATA_KEY, data) 89 | } 90 | 91 | if (config === 'init') { 92 | data[config]() 93 | } 94 | }) 95 | } 96 | } 97 | 98 | /** 99 | * Data API 100 | * ==================================================== 101 | */ 102 | 103 | $(window).on('load', () => { 104 | TodoList._jQueryInterface.call($(Selector.DATA_TOGGLE)) 105 | }) 106 | 107 | /** 108 | * jQuery API 109 | * ==================================================== 110 | */ 111 | 112 | $.fn[NAME] = TodoList._jQueryInterface 113 | $.fn[NAME].Constructor = TodoList 114 | $.fn[NAME].noConflict = function () { 115 | $.fn[NAME] = JQUERY_NO_CONFLICT 116 | return TodoList._jQueryInterface 117 | } 118 | 119 | return TodoList 120 | })(jQuery) 121 | 122 | export default TodoList 123 | -------------------------------------------------------------------------------- /admin/build/js/Treeview.js: -------------------------------------------------------------------------------- 1 | /** 2 | * -------------------------------------------- 3 | * AdminLTE Treeview.js 4 | * License MIT 5 | * -------------------------------------------- 6 | */ 7 | 8 | const Treeview = (($) => { 9 | /** 10 | * Constants 11 | * ==================================================== 12 | */ 13 | 14 | const NAME = 'Treeview' 15 | const DATA_KEY = 'lte.treeview' 16 | const EVENT_KEY = `.${DATA_KEY}` 17 | const JQUERY_NO_CONFLICT = $.fn[NAME] 18 | 19 | const Event = { 20 | SELECTED : `selected${EVENT_KEY}`, 21 | EXPANDED : `expanded${EVENT_KEY}`, 22 | COLLAPSED : `collapsed${EVENT_KEY}`, 23 | LOAD_DATA_API: `load${EVENT_KEY}` 24 | } 25 | 26 | const Selector = { 27 | LI : '.nav-item', 28 | LINK : '.nav-link', 29 | TREEVIEW_MENU: '.nav-treeview', 30 | OPEN : '.menu-open', 31 | DATA_WIDGET : '[data-widget="treeview"]' 32 | } 33 | 34 | const ClassName = { 35 | LI : 'nav-item', 36 | LINK : 'nav-link', 37 | TREEVIEW_MENU : 'nav-treeview', 38 | OPEN : 'menu-open', 39 | SIDEBAR_COLLAPSED: 'sidebar-collapse' 40 | } 41 | 42 | const Default = { 43 | trigger : `${Selector.DATA_WIDGET} ${Selector.LINK}`, 44 | animationSpeed : 300, 45 | accordion : true, 46 | expandSidebar : false, 47 | sidebarButtonSelector: '[data-widget="pushmenu"]' 48 | } 49 | 50 | /** 51 | * Class Definition 52 | * ==================================================== 53 | */ 54 | class Treeview { 55 | constructor(element, config) { 56 | this._config = config 57 | this._element = element 58 | } 59 | 60 | // Public 61 | 62 | init() { 63 | this._setupListeners() 64 | } 65 | 66 | expand(treeviewMenu, parentLi) { 67 | const expandedEvent = $.Event(Event.EXPANDED) 68 | 69 | if (this._config.accordion) { 70 | const openMenuLi = parentLi.siblings(Selector.OPEN).first() 71 | const openTreeview = openMenuLi.find(Selector.TREEVIEW_MENU).first() 72 | this.collapse(openTreeview, openMenuLi) 73 | } 74 | 75 | treeviewMenu.stop().slideDown(this._config.animationSpeed, () => { 76 | parentLi.addClass(ClassName.OPEN) 77 | $(this._element).trigger(expandedEvent) 78 | }) 79 | 80 | if (this._config.expandSidebar) { 81 | this._expandSidebar() 82 | } 83 | } 84 | 85 | collapse(treeviewMenu, parentLi) { 86 | const collapsedEvent = $.Event(Event.COLLAPSED) 87 | 88 | treeviewMenu.stop().slideUp(this._config.animationSpeed, () => { 89 | parentLi.removeClass(ClassName.OPEN) 90 | $(this._element).trigger(collapsedEvent) 91 | treeviewMenu.find(`${Selector.OPEN} > ${Selector.TREEVIEW_MENU}`).slideUp() 92 | treeviewMenu.find(Selector.OPEN).removeClass(ClassName.OPEN) 93 | }) 94 | } 95 | 96 | toggle(event) { 97 | 98 | const $relativeTarget = $(event.currentTarget) 99 | const $parent = $relativeTarget.parent() 100 | 101 | let treeviewMenu = $parent.find('> ' + Selector.TREEVIEW_MENU) 102 | 103 | if (!treeviewMenu.is(Selector.TREEVIEW_MENU)) { 104 | 105 | if (!$parent.is(Selector.LI)) { 106 | treeviewMenu = $parent.parent().find('> ' + Selector.TREEVIEW_MENU) 107 | } 108 | 109 | if (!treeviewMenu.is(Selector.TREEVIEW_MENU)) { 110 | return 111 | } 112 | } 113 | 114 | event.preventDefault() 115 | 116 | const parentLi = $relativeTarget.parents(Selector.LI).first() 117 | const isOpen = parentLi.hasClass(ClassName.OPEN) 118 | 119 | if (isOpen) { 120 | this.collapse($(treeviewMenu), parentLi) 121 | } else { 122 | this.expand($(treeviewMenu), parentLi) 123 | } 124 | } 125 | 126 | // Private 127 | 128 | _setupListeners() { 129 | $(document).on('click', this._config.trigger, (event) => { 130 | this.toggle(event) 131 | }) 132 | } 133 | 134 | _expandSidebar() { 135 | if ($('body').hasClass(ClassName.SIDEBAR_COLLAPSED)) { 136 | $(this._config.sidebarButtonSelector).PushMenu('expand') 137 | } 138 | } 139 | 140 | // Static 141 | 142 | static _jQueryInterface(config) { 143 | return this.each(function () { 144 | let data = $(this).data(DATA_KEY) 145 | const _options = $.extend({}, Default, $(this).data()) 146 | 147 | if (!data) { 148 | data = new Treeview($(this), _options) 149 | $(this).data(DATA_KEY, data) 150 | } 151 | 152 | if (config === 'init') { 153 | data[config]() 154 | } 155 | }) 156 | } 157 | } 158 | 159 | /** 160 | * Data API 161 | * ==================================================== 162 | */ 163 | 164 | $(window).on(Event.LOAD_DATA_API, () => { 165 | $(Selector.DATA_WIDGET).each(function () { 166 | Treeview._jQueryInterface.call($(this), 'init') 167 | }) 168 | }) 169 | 170 | /** 171 | * jQuery API 172 | * ==================================================== 173 | */ 174 | 175 | $.fn[NAME] = Treeview._jQueryInterface 176 | $.fn[NAME].Constructor = Treeview 177 | $.fn[NAME].noConflict = function () { 178 | $.fn[NAME] = JQUERY_NO_CONFLICT 179 | return Treeview._jQueryInterface 180 | } 181 | 182 | return Treeview 183 | })(jQuery) 184 | 185 | export default Treeview 186 | -------------------------------------------------------------------------------- /admin/build/js/index.php: -------------------------------------------------------------------------------- 1 | 6 | * License: Open source - MIT 7 | */ 8 | // Bootstrap 9 | // --------------------------------------------------- 10 | @import '~bootstrap/scss/functions'; 11 | @import 'bootstrap-variables'; 12 | @import '~bootstrap/scss/mixins'; 13 | // @import '~bootstrap/scss/bootstrap'; 14 | 15 | // Variables and Mixins 16 | // --------------------------------------------------- 17 | @import 'variables'; 18 | @import 'mixins'; 19 | 20 | @import 'parts/components'; 21 | -------------------------------------------------------------------------------- /admin/build/scss/AdminLTE-core.scss: -------------------------------------------------------------------------------- 1 | /*! 2 | * AdminLTE v3.0.5 3 | * Only Core 4 | * Author: Colorlib 5 | * Website: AdminLTE.io 6 | * License: Open source - MIT 7 | */ 8 | // Bootstrap 9 | // --------------------------------------------------- 10 | @import '~bootstrap/scss/functions'; 11 | @import 'bootstrap-variables'; 12 | @import '~bootstrap/scss/bootstrap'; 13 | 14 | // Variables and Mixins 15 | // --------------------------------------------------- 16 | @import 'variables'; 17 | @import 'mixins'; 18 | 19 | @import 'parts/core'; 20 | @import 'parts/miscellaneous'; 21 | -------------------------------------------------------------------------------- /admin/build/scss/AdminLTE-extra-components.scss: -------------------------------------------------------------------------------- 1 | /*! 2 | * AdminLTE v3.0.5 3 | * Only Extra Components 4 | * Author: Colorlib 5 | * Website: AdminLTE.io 6 | * License: Open source - MIT 7 | */ 8 | // Bootstrap 9 | // --------------------------------------------------- 10 | @import '~bootstrap/scss/functions'; 11 | @import 'bootstrap-variables'; 12 | @import '~bootstrap/scss/mixins'; 13 | // @import '~bootstrap/scss/bootstrap'; 14 | 15 | // Variables and Mixins 16 | // --------------------------------------------------- 17 | @import 'variables'; 18 | @import 'mixins'; 19 | 20 | @import 'parts/extra-components'; 21 | -------------------------------------------------------------------------------- /admin/build/scss/AdminLTE-pages.scss: -------------------------------------------------------------------------------- 1 | /*! 2 | * AdminLTE v3.0.5 3 | * Only Pages 4 | * Author: Colorlib 5 | * Website: AdminLTE.io 6 | * License: Open source - MIT 7 | */ 8 | // Bootstrap 9 | // --------------------------------------------------- 10 | @import '~bootstrap/scss/functions'; 11 | @import 'bootstrap-variables'; 12 | @import '~bootstrap/scss/mixins'; 13 | @import '~bootstrap/scss/close'; 14 | 15 | // Variables and Mixins 16 | // --------------------------------------------------- 17 | @import 'variables'; 18 | @import 'mixins'; 19 | 20 | @import 'parts/pages'; 21 | -------------------------------------------------------------------------------- /admin/build/scss/AdminLTE-plugins.scss: -------------------------------------------------------------------------------- 1 | /*! 2 | * AdminLTE v3.0.5 3 | * Only Plugins 4 | * Author: Colorlib 5 | * Website: AdminLTE.io 6 | * License: Open source - MIT 7 | */ 8 | // Bootstrap 9 | // --------------------------------------------------- 10 | @import '~bootstrap/scss/functions'; 11 | @import 'bootstrap-variables'; 12 | @import '~bootstrap/scss/mixins'; 13 | // @import '~bootstrap/scss/bootstrap'; 14 | 15 | // Variables and Mixins 16 | // --------------------------------------------------- 17 | @import 'variables'; 18 | @import 'mixins'; 19 | 20 | @import 'parts/plugins'; 21 | -------------------------------------------------------------------------------- /admin/build/scss/AdminLTE-raw.scss: -------------------------------------------------------------------------------- 1 | /*! 2 | * AdminLTE v3.0.5 3 | * Author: Colorlib 4 | * Website: AdminLTE.io 5 | * License: Open source - MIT 6 | */ 7 | // 8 | // ------------------------------------------------------------------ 9 | // This file is to be included in your custom SCSS. Before importing 10 | // this file, you should include your custom AdminLTE and Bootstrap 11 | // variables followed by bootstrap.scss and then this file. It's 12 | // ok to import this file without custom variables too! 13 | // NOTE: be sure to keep the license notice in the generated css. 14 | // ------------------------------------------------------------------ 15 | // 16 | // Variables and Mixins 17 | // --------------------------------------------------- 18 | @import 'bootstrap-variables'; 19 | @import 'variables'; 20 | @import 'mixins'; 21 | 22 | @import 'parts/core'; 23 | @import 'parts/components'; 24 | @import 'parts/extra-components'; 25 | @import 'parts/pages'; 26 | @import 'parts/plugins'; 27 | @import 'parts/miscellaneous'; 28 | -------------------------------------------------------------------------------- /admin/build/scss/AdminLTE.scss: -------------------------------------------------------------------------------- 1 | /*! 2 | * AdminLTE v3.0.5 3 | * Author: Colorlib 4 | * Website: AdminLTE.io 5 | * License: Open source - MIT 6 | */ 7 | // Bootstrap 8 | // --------------------------------------------------- 9 | @import '~bootstrap/scss/functions'; 10 | @import 'bootstrap-variables'; 11 | @import '~bootstrap/scss/bootstrap'; 12 | 13 | // Variables and Mixins 14 | // --------------------------------------------------- 15 | @import 'variables'; 16 | @import 'mixins'; 17 | 18 | @import 'parts/core'; 19 | @import 'parts/components'; 20 | @import 'parts/extra-components'; 21 | @import 'parts/pages'; 22 | @import 'parts/plugins'; 23 | @import 'parts/miscellaneous'; 24 | 25 | -------------------------------------------------------------------------------- /admin/build/scss/_alerts.scss: -------------------------------------------------------------------------------- 1 | // 2 | // Component: Alert 3 | // 4 | 5 | .alert { 6 | .icon { 7 | margin-right: 10px; 8 | } 9 | 10 | .close { 11 | color: $black; 12 | opacity: .2; 13 | 14 | &:hover { 15 | opacity: .5; 16 | } 17 | } 18 | 19 | a { 20 | color: $white; 21 | text-decoration: underline; 22 | } 23 | } 24 | 25 | //Alert Variants 26 | @each $color, $value in $theme-colors { 27 | .alert-#{$color} { 28 | color: color-yiq($value); 29 | background: $value; 30 | border-color: darken($value, 5%); 31 | } 32 | 33 | .alert-default-#{$color} { 34 | @include alert-variant(theme-color-level($color, $alert-bg-level), theme-color-level($color, $alert-border-level), theme-color-level($color, $alert-color-level)); 35 | } 36 | } 37 | -------------------------------------------------------------------------------- /admin/build/scss/_brand.scss: -------------------------------------------------------------------------------- 1 | // 2 | // Component: Brand 3 | // 4 | 5 | .brand-link { 6 | $brand-link-padding-y: $navbar-brand-padding-y + $navbar-padding-y; 7 | display: block; 8 | font-size: $navbar-brand-font-size; 9 | line-height: $line-height-lg; 10 | padding: $brand-link-padding-y $sidebar-padding-x; 11 | transition: width $transition-speed $transition-fn; 12 | white-space: nowrap; 13 | 14 | &:hover { 15 | color: $white; 16 | text-decoration: none; 17 | } 18 | 19 | .text-sm & { 20 | font-size: inherit; 21 | } 22 | 23 | [class*='sidebar-dark'] & { 24 | border-bottom: 1px solid lighten($dark, 10%); 25 | color: rgba($white, .8); 26 | } 27 | 28 | [class*='sidebar-light'] & { 29 | border-bottom: 1px solid $gray-300; 30 | color: rgba($black, .8); 31 | } 32 | 33 | .brand-image { 34 | float: left; 35 | line-height: .8; 36 | margin-left: .8rem; 37 | margin-right: .5rem; 38 | margin-top: -3px; 39 | max-height: 33px; 40 | width: auto; 41 | } 42 | 43 | .brand-image-xs { 44 | float: left; 45 | line-height: .8; 46 | margin-top: -.1rem; 47 | max-height: 33px; 48 | width: auto; 49 | } 50 | 51 | .brand-image-xl { 52 | line-height: .8; 53 | max-height: 40px; 54 | width: auto; 55 | 56 | &.single { 57 | margin-top: -.3rem; 58 | } 59 | } 60 | 61 | &.text-sm, 62 | .text-sm & { 63 | .brand-image { 64 | height: 29px; 65 | margin-bottom: -.25rem; 66 | margin-left: .95rem; 67 | margin-top: -.25rem; 68 | } 69 | 70 | .brand-image-xs { 71 | margin-top: -.2rem; 72 | max-height: 29px; 73 | } 74 | 75 | .brand-image-xl { 76 | margin-top: -.225rem; 77 | max-height: 38px; 78 | } 79 | } 80 | } 81 | -------------------------------------------------------------------------------- /admin/build/scss/_buttons.scss: -------------------------------------------------------------------------------- 1 | // 2 | // Component: Button 3 | // 4 | 5 | .btn { 6 | &.disabled, 7 | &:disabled { 8 | cursor: not-allowed; 9 | } 10 | 11 | // Flat buttons 12 | &.btn-flat { 13 | @include border-radius(0); 14 | border-width: 1px; 15 | box-shadow: none; 16 | } 17 | 18 | // input file btn 19 | &.btn-file { 20 | overflow: hidden; 21 | position: relative; 22 | 23 | > input[type='file'] { 24 | background: $white; 25 | cursor: inherit; 26 | display: block; 27 | font-size: 100px; 28 | min-height: 100%; 29 | min-width: 100%; 30 | opacity: 0; 31 | outline: none; 32 | position: absolute; 33 | right: 0; 34 | text-align: right; 35 | top: 0; 36 | } 37 | } 38 | 39 | .text-sm & { 40 | font-size: $font-size-sm !important; 41 | } 42 | } 43 | 44 | // Button color variations 45 | .btn-default { 46 | background-color: $button-default-background-color; 47 | border-color: $button-default-border-color; 48 | color: $button-default-color; 49 | 50 | &:hover, 51 | &:active, 52 | &.hover { 53 | background-color: darken($button-default-background-color, 5%); 54 | color: darken($button-default-color, 10%); 55 | } 56 | } 57 | 58 | // Application buttons 59 | .btn-app { 60 | @include border-radius(3px); 61 | background-color: $button-default-background-color; 62 | border: 1px solid $button-default-border-color; 63 | color: $gray-600; 64 | font-size: 12px; 65 | height: 60px; 66 | margin: 0 0 10px 10px; 67 | min-width: 80px; 68 | padding: 15px 5px; 69 | position: relative; 70 | text-align: center; 71 | 72 | // Icons within the btn 73 | > .fa, 74 | > .fas, 75 | > .far, 76 | > .fab, 77 | > .glyphicon, 78 | > .ion { 79 | display: block; 80 | font-size: 20px; 81 | } 82 | 83 | &:hover { 84 | background: $button-default-background-color; 85 | border-color: darken($button-default-border-color, 20%); 86 | color: $button-default-color; 87 | } 88 | 89 | &:active, 90 | &:focus { 91 | @include box-shadow(inset 0 3px 5px rgba($black, 0.125)); 92 | } 93 | 94 | // The badge 95 | > .badge { 96 | font-size: 10px; 97 | font-weight: 400; 98 | position: absolute; 99 | right: -10px; 100 | top: -3px; 101 | } 102 | } 103 | 104 | // Extra Button Size 105 | 106 | .btn-xs { 107 | @include button-size($button-padding-y-xs, $button-padding-x-xs, $button-font-size-xs, $button-line-height-xs, $button-border-radius-xs); 108 | } 109 | -------------------------------------------------------------------------------- /admin/build/scss/_callout.scss: -------------------------------------------------------------------------------- 1 | // 2 | // Component: Callout 3 | // 4 | 5 | // Base styles (regardless of theme) 6 | .callout { 7 | @if $enable-rounded { 8 | @include border-radius($border-radius); 9 | } 10 | 11 | @if $enable-shadows { 12 | box-shadow: map-get($elevations, 1); 13 | } @else { 14 | border: 1px solid $gray-300; 15 | } 16 | 17 | background-color: $white; 18 | border-left: 5px solid $gray-200; 19 | margin-bottom: map-get($spacers, 3); 20 | padding: 1rem; 21 | 22 | a { 23 | color: $gray-700; 24 | text-decoration: underline; 25 | 26 | &:hover { 27 | color: $gray-200; 28 | } 29 | } 30 | 31 | p:last-child { 32 | margin-bottom: 0; 33 | } 34 | 35 | // Themes for different contexts 36 | &.callout-danger { 37 | border-left-color: darken(theme-color('danger'), 10%); 38 | } 39 | 40 | &.callout-warning { 41 | border-left-color: darken(theme-color('warning'), 10%); 42 | } 43 | 44 | &.callout-info { 45 | border-left-color: darken(theme-color('info'), 10%); 46 | } 47 | 48 | &.callout-success { 49 | border-left-color: darken(theme-color('success'), 10%); 50 | } 51 | } 52 | -------------------------------------------------------------------------------- /admin/build/scss/_carousel.scss: -------------------------------------------------------------------------------- 1 | // 2 | // Component: Carousel 3 | // 4 | 5 | .carousel-control { 6 | &.left, 7 | &.right { 8 | background-image: none; 9 | } 10 | 11 | > .fa, 12 | > .fas, 13 | > .far, 14 | > .fab, 15 | > .glyphicon, 16 | > .ion { 17 | display: inline-block; 18 | font-size: 40px; 19 | margin-top: -20px; 20 | position: absolute; 21 | top: 50%; 22 | z-index: 5; 23 | } 24 | } 25 | -------------------------------------------------------------------------------- /admin/build/scss/_colors.scss: -------------------------------------------------------------------------------- 1 | // 2 | // Misc: Colors 3 | // 4 | 5 | // Background colors (theme colors) 6 | @each $name, $color in $theme-colors { 7 | @include background-variant($name, $color); 8 | } 9 | 10 | // Background colors (colors) 11 | @each $name, $color in $colors { 12 | @include background-variant($name, $color); 13 | } 14 | 15 | .bg-gray { 16 | background-color: $gray-500; 17 | color: color-yiq($gray-500); 18 | } 19 | 20 | .bg-gray-light { 21 | background-color: lighten($gray-200, 3%); 22 | color: color-yiq(lighten($gray-200, 3%)) !important; 23 | } 24 | 25 | .bg-black { 26 | background-color: $black; 27 | color: color-yiq($black) !important; 28 | } 29 | 30 | .bg-white { 31 | background-color: $white; 32 | color: color-yiq($white) !important; 33 | } 34 | 35 | // Gradient Background colors (theme colors) 36 | @each $name, $color in $theme-colors { 37 | @include background-gradient-variant($name, $color); 38 | } 39 | 40 | // Gradient Background colors (colors) 41 | @each $name, $color in $colors { 42 | @include background-gradient-variant($name, $color); 43 | } 44 | 45 | // Backgrund Color Disabled 46 | [class^='bg-'].disabled { 47 | opacity: .65; 48 | } 49 | 50 | // Text muted hover 51 | a.text-muted:hover { 52 | color: theme-color(primary) !important; 53 | } 54 | 55 | // Link Styles 56 | .link-muted { 57 | color: darken($gray-500, 30%); 58 | 59 | &:hover, 60 | &:focus { 61 | color: darken($gray-500, 40%); 62 | } 63 | } 64 | 65 | .link-black { 66 | color: $gray-600; 67 | 68 | &:hover, 69 | &:focus { 70 | color: lighten($gray-500, 20%); 71 | } 72 | } 73 | 74 | // Accent colors (theme colors) 75 | @each $name, $color in $theme-colors { 76 | @include accent-variant($name, $color); 77 | } 78 | 79 | // Accent colors (colors) 80 | @each $name, $color in $colors { 81 | @include accent-variant($name, $color); 82 | } 83 | 84 | // Accent button override fix 85 | [class*="accent-"] { 86 | @each $name, $color in $theme-colors { 87 | a.btn-#{$name} { 88 | color: color-yiq($color); 89 | } 90 | } 91 | } 92 | -------------------------------------------------------------------------------- /admin/build/scss/_control-sidebar.scss: -------------------------------------------------------------------------------- 1 | // 2 | // Component: Control Sidebar 3 | // 4 | 5 | html.control-sidebar-animate { 6 | overflow-x: hidden; 7 | } 8 | 9 | .control-sidebar { 10 | bottom: $main-footer-height; 11 | position: absolute; 12 | top: $main-header-height; 13 | z-index: $zindex-control-sidebar; 14 | 15 | &, 16 | &::before { 17 | bottom: $main-footer-height; 18 | display: none; 19 | right: -$control-sidebar-width; 20 | width: $control-sidebar-width; 21 | @include transition(right $transition-speed $transition-fn, display $transition-speed $transition-fn); 22 | } 23 | 24 | &::before { 25 | content: ''; 26 | display: block; 27 | position: fixed; 28 | top: 0; 29 | z-index: -1; 30 | } 31 | } 32 | 33 | body.text-sm { 34 | .control-sidebar { 35 | bottom: $main-footer-height-sm; 36 | top: $main-header-height-sm; 37 | } 38 | } 39 | 40 | .main-header.text-sm ~ .control-sidebar { 41 | top: $main-header-height-sm; 42 | } 43 | 44 | .main-footer.text-sm ~ .control-sidebar { 45 | bottom: $main-footer-height-sm; 46 | } 47 | 48 | .control-sidebar-push-slide { 49 | .content-wrapper, 50 | .main-footer { 51 | @include transition(margin-right $transition-speed $transition-fn); 52 | } 53 | } 54 | 55 | // Control sidebar open state 56 | .control-sidebar-open { 57 | .control-sidebar { 58 | display: block; 59 | 60 | &, 61 | &::before { 62 | right: 0; 63 | } 64 | } 65 | 66 | &.control-sidebar-push, 67 | &.control-sidebar-push-slide { 68 | .content-wrapper, 69 | .main-footer { 70 | margin-right: $control-sidebar-width; 71 | } 72 | } 73 | } 74 | 75 | // Control sidebar slide over content state 76 | .control-sidebar-slide-open { 77 | .control-sidebar { 78 | display: block; 79 | 80 | &, 81 | &::before { 82 | right: 0; 83 | @include transition(right $transition-speed $transition-fn, display $transition-speed $transition-fn); 84 | } 85 | } 86 | 87 | &.control-sidebar-push, 88 | &.control-sidebar-push-slide { 89 | .content-wrapper, 90 | .main-footer { 91 | margin-right: $control-sidebar-width; 92 | } 93 | } 94 | } 95 | 96 | // Dark skin 97 | .control-sidebar-dark { 98 | &, 99 | a, 100 | .nav-link { 101 | color: $sidebar-dark-color; 102 | } 103 | 104 | // Background 105 | & { 106 | background: $sidebar-dark-bg; 107 | } 108 | 109 | a:hover { 110 | color: $sidebar-dark-hover-color; 111 | } 112 | 113 | // Headers and labels 114 | h1, 115 | h2, 116 | h3, 117 | h4, 118 | h5, 119 | h6, 120 | label { 121 | color: $sidebar-dark-hover-color; 122 | } 123 | 124 | // Tabs 125 | .nav-tabs { 126 | background-color: $sidebar-dark-hover-bg; 127 | border-bottom: 0; 128 | margin-bottom: 5px; 129 | 130 | .nav-item { 131 | margin: 0; 132 | } 133 | 134 | .nav-link { 135 | border-radius: 0; 136 | padding: 10px 20px; 137 | position: relative; 138 | text-align: center; 139 | 140 | &, 141 | &:hover, 142 | &:active, 143 | &:focus, 144 | &.active { 145 | border: 0; 146 | } 147 | 148 | &:hover, 149 | &:active, 150 | &:focus, 151 | &.active { 152 | border-bottom-color: transparent; 153 | border-left-color: transparent; 154 | border-top-color: transparent; 155 | color: $sidebar-dark-hover-color; 156 | } 157 | 158 | &.active { 159 | background-color: $sidebar-dark-bg; 160 | } 161 | } 162 | } 163 | 164 | .tab-pane { 165 | padding: 10px 15px; 166 | } 167 | } 168 | 169 | // Light skin 170 | .control-sidebar-light { 171 | color: lighten($sidebar-light-color, 10%); 172 | 173 | // Background 174 | & { 175 | background: $sidebar-light-bg; 176 | border-left: $main-header-bottom-border; 177 | } 178 | } 179 | -------------------------------------------------------------------------------- /admin/build/scss/_direct-chat.scss: -------------------------------------------------------------------------------- 1 | // 2 | // Component: Direct Chat 3 | // 4 | 5 | .direct-chat { 6 | .card-body { 7 | overflow-x: hidden; 8 | padding: 0; 9 | position: relative; 10 | } 11 | 12 | &.chat-pane-open { 13 | .direct-chat-contacts { 14 | @include translate(0, 0); 15 | } 16 | } 17 | 18 | 19 | &.timestamp-light { 20 | .direct-chat-timestamp { 21 | color: lighten(color-yiq($yiq-text-light), 10%); 22 | } 23 | } 24 | 25 | &.timestamp-dark { 26 | .direct-chat-timestamp { 27 | color: darken(color-yiq($yiq-text-dark), 20%); 28 | } 29 | } 30 | } 31 | 32 | .direct-chat-messages { 33 | @include translate(0, 0); 34 | height: 250px; 35 | overflow: auto; 36 | padding: 10px; 37 | } 38 | 39 | .direct-chat-msg, 40 | .direct-chat-text { 41 | display: block; 42 | } 43 | 44 | .direct-chat-msg { 45 | @include clearfix; 46 | margin-bottom: 10px; 47 | } 48 | 49 | .direct-chat-messages, 50 | .direct-chat-contacts { 51 | transition: transform .5s ease-in-out; 52 | } 53 | 54 | .direct-chat-text { 55 | @if $enable-rounded { 56 | @include border-radius($border-radius-lg); 57 | } 58 | 59 | background: $direct-chat-default-msg-bg; 60 | border: 1px solid $direct-chat-default-msg-border-color; 61 | color: $direct-chat-default-font-color; 62 | margin: 5px 0 0 50px; 63 | padding: 5px 10px; 64 | position: relative; 65 | 66 | //Create the arrow 67 | &::after, 68 | &::before { 69 | border: solid transparent; 70 | border-right-color: $direct-chat-default-msg-border-color; 71 | content: ' '; 72 | height: 0; 73 | pointer-events: none; 74 | position: absolute; 75 | right: 100%; 76 | top: 15px; 77 | width: 0; 78 | } 79 | 80 | &::after { 81 | border-width: 5px; 82 | margin-top: -5px; 83 | } 84 | 85 | &::before { 86 | border-width: 6px; 87 | margin-top: -6px; 88 | } 89 | 90 | .right & { 91 | margin-left: 0; 92 | margin-right: 50px; 93 | 94 | &::after, 95 | &::before { 96 | border-left-color: $direct-chat-default-msg-border-color; 97 | border-right-color: transparent; 98 | left: 100%; 99 | right: auto; 100 | } 101 | } 102 | } 103 | 104 | .direct-chat-img { 105 | @include border-radius(50%); 106 | float: left; 107 | height: 40px; 108 | width: 40px; 109 | 110 | .right & { 111 | float: right; 112 | } 113 | } 114 | 115 | .direct-chat-infos { 116 | display: block; 117 | font-size: $font-size-sm; 118 | margin-bottom: 2px; 119 | } 120 | 121 | .direct-chat-name { 122 | font-weight: 600; 123 | } 124 | 125 | .direct-chat-timestamp { 126 | color: darken($gray-500, 25%); 127 | } 128 | 129 | //Direct chat contacts pane 130 | .direct-chat-contacts-open { 131 | .direct-chat-contacts { 132 | @include translate(0, 0); 133 | } 134 | } 135 | 136 | .direct-chat-contacts { 137 | @include translate(101%, 0); 138 | background: $dark; 139 | bottom: 0; 140 | color: $white; 141 | height: 250px; 142 | overflow: auto; 143 | position: absolute; 144 | top: 0; 145 | width: 100%; 146 | } 147 | 148 | .direct-chat-contacts-light { 149 | background: $light; 150 | 151 | .contacts-list-name { 152 | color: $gray-700; 153 | } 154 | 155 | .contacts-list-date { 156 | color: $gray-600; 157 | } 158 | 159 | .contacts-list-msg { 160 | color: darken($gray-600, 10%); 161 | } 162 | } 163 | 164 | //Contacts list -- for displaying contacts in direct chat contacts pane 165 | .contacts-list { 166 | @include list-unstyled; 167 | 168 | > li { 169 | @include clearfix; 170 | border-bottom: 1px solid rgba($black, 0.2); 171 | margin: 0; 172 | padding: 10px; 173 | 174 | &:last-of-type { 175 | border-bottom: 0; 176 | } 177 | } 178 | } 179 | 180 | .contacts-list-img { 181 | @include border-radius(50%); 182 | float: left; 183 | width: 40px; 184 | } 185 | 186 | .contacts-list-info { 187 | color: $white; 188 | margin-left: 45px; 189 | } 190 | 191 | .contacts-list-name, 192 | .contacts-list-status { 193 | display: block; 194 | } 195 | 196 | .contacts-list-name { 197 | font-weight: 600; 198 | } 199 | 200 | .contacts-list-status { 201 | font-size: $font-size-sm; 202 | } 203 | 204 | .contacts-list-date { 205 | color: $gray-400; 206 | font-weight: normal; 207 | } 208 | 209 | .contacts-list-msg { 210 | color: darken($gray-400, 10%); 211 | } 212 | 213 | // Color variants 214 | @each $name, $color in $theme-colors { 215 | .direct-chat-#{$name} { 216 | @include direct-chat-variant($color); 217 | } 218 | } 219 | 220 | @each $name, $color in $colors { 221 | .direct-chat-#{$name} { 222 | @include direct-chat-variant($color); 223 | } 224 | } 225 | -------------------------------------------------------------------------------- /admin/build/scss/_elevation.scss: -------------------------------------------------------------------------------- 1 | // 2 | // Component: Elevation 3 | // 4 | 5 | .elevation-0 { 6 | box-shadow: none !important; 7 | } 8 | 9 | // Background colors (colors) 10 | @each $name, $value in $elevations { 11 | .elevation-#{$name} { 12 | box-shadow: $value !important; 13 | } 14 | } 15 | -------------------------------------------------------------------------------- /admin/build/scss/_info-box.scss: -------------------------------------------------------------------------------- 1 | // 2 | // Component: Info Box 3 | // 4 | 5 | .info-box { 6 | @include box-shadow($card-shadow); 7 | @include border-radius($border-radius); 8 | 9 | background: $white; 10 | display: flex; 11 | margin-bottom: map-get($spacers, 3); 12 | min-height: 80px; 13 | padding: .5rem; 14 | position: relative; 15 | width: 100%; 16 | 17 | .progress { 18 | background-color: rgba($black, .125); 19 | height: 2px; 20 | margin: 5px 0; 21 | 22 | .progress-bar { 23 | background-color: $white; 24 | } 25 | } 26 | 27 | .info-box-icon { 28 | @if $enable-rounded { 29 | border-radius: $border-radius; 30 | } 31 | 32 | align-items: center; 33 | display: flex; 34 | font-size: 1.875rem; 35 | justify-content: center; 36 | text-align: center; 37 | width: 70px; 38 | 39 | > img { 40 | max-width: 100%; 41 | } 42 | } 43 | 44 | .info-box-content { 45 | display: flex; 46 | flex-direction: column; 47 | justify-content: center; 48 | line-height: 120%; 49 | flex: 1; 50 | padding: 0 10px; 51 | } 52 | 53 | .info-box-number { 54 | display: block; 55 | margin-top: .25rem; 56 | font-weight: $font-weight-bold; 57 | } 58 | 59 | .progress-description, 60 | .info-box-text { 61 | display: block; 62 | overflow: hidden; 63 | text-overflow: ellipsis; 64 | white-space: nowrap; 65 | } 66 | 67 | @each $name, $color in $theme-colors { 68 | .info-box { 69 | .bg-#{$name}, 70 | .bg-gradient-#{$name} { 71 | color: color-yiq($color); 72 | 73 | .progress-bar { 74 | background-color: color-yiq($color); 75 | } 76 | } 77 | } 78 | } 79 | 80 | .info-box-more { 81 | display: block; 82 | } 83 | 84 | .progress-description { 85 | margin: 0; 86 | 87 | } 88 | 89 | @include media-breakpoint-up(md) { 90 | .col-xl-2 &, 91 | .col-lg-2 &, 92 | .col-md-2 & { 93 | .progress-description { 94 | display: none; 95 | } 96 | } 97 | 98 | .col-xl-3 &, 99 | .col-lg-3 &, 100 | .col-md-3 & { 101 | .progress-description { 102 | display: none; 103 | } 104 | } 105 | } 106 | 107 | @include media-breakpoint-up(lg) { 108 | .col-xl-2 &, 109 | .col-lg-2 &, 110 | .col-md-2 & { 111 | .progress-description { 112 | @include font-size(.75rem); 113 | display: block; 114 | } 115 | } 116 | 117 | .col-xl-3 &, 118 | .col-lg-3 &, 119 | .col-md-3 & { 120 | .progress-description { 121 | @include font-size(.75rem); 122 | display: block; 123 | } 124 | } 125 | } 126 | 127 | @include media-breakpoint-up(xl) { 128 | .col-xl-2 &, 129 | .col-lg-2 &, 130 | .col-md-2 & { 131 | .progress-description { 132 | @include font-size(1rem); 133 | display: block; 134 | } 135 | } 136 | 137 | .col-xl-3 &, 138 | .col-lg-3 &, 139 | .col-md-3 & { 140 | .progress-description { 141 | @include font-size(1rem); 142 | display: block; 143 | } 144 | } 145 | } 146 | } 147 | -------------------------------------------------------------------------------- /admin/build/scss/_main-header.scss: -------------------------------------------------------------------------------- 1 | // 2 | // Component: Main Header 3 | // 4 | 5 | .main-header { 6 | border-bottom: $main-header-bottom-border; 7 | z-index: $zindex-main-header; 8 | 9 | .nav-link { 10 | height: $nav-link-height; 11 | position: relative; 12 | } 13 | 14 | .text-sm &, 15 | &.text-sm { 16 | .nav-link { 17 | height: $nav-link-sm-height; 18 | padding: $nav-link-sm-padding-y $nav-link-padding-x; 19 | 20 | > .fa, 21 | > .fas, 22 | > .far, 23 | > .fab, 24 | > .glyphicon, 25 | > .ion { 26 | font-size: $font-size-sm; 27 | } 28 | } 29 | 30 | } 31 | 32 | .navbar-nav { 33 | .nav-item { 34 | margin: 0; 35 | } 36 | 37 | &[class*='-right'] { 38 | .dropdown-menu { 39 | left: auto; 40 | margin-top: -3px; 41 | right: 0; 42 | 43 | @media (max-width: breakpoint-max(xs)) { 44 | left: 0; 45 | right: auto; 46 | } 47 | } 48 | } 49 | } 50 | } 51 | 52 | // Add this class to images within a nav-link 53 | .navbar-img { 54 | height: $main-header-height / 2; 55 | width: auto; 56 | } 57 | 58 | // Navbar badge 59 | .navbar-badge { 60 | font-size: .6rem; 61 | font-weight: 300; 62 | padding: 2px 4px; 63 | position: absolute; 64 | right: 5px; 65 | top: 9px; 66 | } 67 | 68 | .btn-navbar { 69 | background-color: transparent; 70 | border-left-width: 0; 71 | } 72 | 73 | .form-control-navbar { 74 | border-right-width: 0; 75 | 76 | & + .input-group-append { 77 | margin-left: 0; 78 | } 79 | } 80 | 81 | .form-control-navbar, 82 | .btn-navbar { 83 | transition: none; 84 | } 85 | 86 | .navbar-dark { 87 | .form-control-navbar, 88 | .btn-navbar { 89 | background-color: $main-header-dark-form-control-bg; 90 | border: $main-header-dark-form-control-border; 91 | } 92 | 93 | .form-control-navbar { 94 | &::placeholder { 95 | color: $main-header-dark-placeholder-color; 96 | } 97 | 98 | + .input-group-append > .btn-navbar { 99 | color: $main-header-dark-placeholder-color; 100 | } 101 | 102 | &:focus { 103 | &, 104 | & + .input-group-append .btn-navbar { 105 | background-color: $main-header-dark-form-control-focused-bg; 106 | border: $main-header-dark-form-control-focused-border !important; 107 | color: $main-header-dark-form-control-focused-color; 108 | } 109 | } 110 | } 111 | } 112 | 113 | .navbar-light { 114 | .form-control-navbar, 115 | .btn-navbar { 116 | background-color: $main-header-light-form-control-bg; 117 | border: $main-header-light-form-control-border; 118 | } 119 | 120 | .form-control-navbar { 121 | &::placeholder { 122 | color: $main-header-light-placeholder-color; 123 | } 124 | 125 | + .input-group-append > .btn-navbar { 126 | color: $main-header-light-placeholder-color; 127 | } 128 | 129 | &:focus { 130 | &, 131 | & + .input-group-append .btn-navbar { 132 | background-color: $main-header-light-form-control-focused-bg; 133 | border: $main-header-light-form-control-focused-border !important; 134 | color: $main-header-light-form-control-focused-color; 135 | } 136 | } 137 | } 138 | } 139 | -------------------------------------------------------------------------------- /admin/build/scss/_mixins.scss: -------------------------------------------------------------------------------- 1 | // 2 | // General: Mixins 3 | // 4 | 5 | @import 'mixins/cards'; 6 | @import 'mixins/sidebar'; 7 | @import 'mixins/navbar'; 8 | @import 'mixins/accent'; 9 | @import 'mixins/custom-forms'; 10 | @import 'mixins/backgrounds'; 11 | @import 'mixins/direct-chat'; 12 | @import 'mixins/toasts'; 13 | @import 'mixins/miscellaneous'; 14 | -------------------------------------------------------------------------------- /admin/build/scss/_modals.scss: -------------------------------------------------------------------------------- 1 | // 2 | // Component: Modals 3 | // 4 | 5 | // Overlay 6 | .modal-dialog { 7 | .overlay { 8 | background-color: $black; 9 | display: block; 10 | height: 100%; 11 | left: 0; 12 | opacity: .7; 13 | position: absolute; 14 | top: 0; 15 | width: 100%; 16 | z-index: ($zindex-modal + 2); 17 | } 18 | } 19 | 20 | 21 | // BG Color Variations Fixes 22 | .modal-content { 23 | &.bg-warning { 24 | .modal-header, 25 | .modal-footer { 26 | border-color: $gray-800; 27 | } 28 | } 29 | 30 | &.bg-primary, 31 | &.bg-secondary, 32 | &.bg-info, 33 | &.bg-danger, 34 | &.bg-success, { 35 | .close { 36 | color: $white; 37 | text-shadow: 0 1px 0 #000; 38 | } 39 | } 40 | } 41 | -------------------------------------------------------------------------------- /admin/build/scss/_navs.scss: -------------------------------------------------------------------------------- 1 | // 2 | // Component: Nav 3 | // 4 | 5 | .nav-pills { 6 | .nav-link { 7 | color: $gray-600; 8 | 9 | &:not(.active):hover { 10 | color: theme-color('primary'); 11 | } 12 | } 13 | 14 | .nav-item { 15 | &.dropdown.show { 16 | .nav-link:hover { 17 | color: $dropdown-link-active-color; 18 | } 19 | } 20 | } 21 | } 22 | 23 | // Vertical Tabs 24 | .nav-tabs.flex-column { 25 | border-bottom: 0; 26 | border-right: $nav-tabs-border-width solid $nav-tabs-border-color; 27 | 28 | .nav-link { 29 | border-bottom-left-radius: $nav-tabs-border-radius; 30 | border-top-right-radius: 0; 31 | margin-right: -$nav-tabs-border-width; 32 | 33 | @include hover-focus { 34 | border-color: $gray-200 transparent $gray-200 $gray-200; 35 | } 36 | } 37 | 38 | .nav-link.active, 39 | .nav-item.show .nav-link { 40 | border-color: $gray-300 transparent $gray-300 $gray-300; 41 | } 42 | 43 | &.nav-tabs-right { 44 | border-left: $nav-tabs-border-width solid $nav-tabs-border-color; 45 | border-right: 0; 46 | 47 | .nav-link { 48 | border-bottom-left-radius: 0; 49 | border-bottom-right-radius: $nav-tabs-border-radius; 50 | border-top-left-radius: 0; 51 | border-top-right-radius: $nav-tabs-border-radius; 52 | margin-left: -$nav-tabs-border-width; 53 | 54 | @include hover-focus { 55 | border-color: $gray-200 $gray-200 $gray-200 transparent; 56 | } 57 | } 58 | 59 | .nav-link.active, 60 | .nav-item.show .nav-link { 61 | border-color: $gray-300 $gray-300 $gray-300 transparent; 62 | } 63 | } 64 | } 65 | 66 | .navbar-no-expand { 67 | flex-direction: row; 68 | 69 | .nav-link { 70 | padding-left: $navbar-nav-link-padding-x; 71 | padding-right: $navbar-nav-link-padding-x; 72 | } 73 | 74 | .dropdown-menu { 75 | position: absolute; 76 | } 77 | } 78 | 79 | // Color variants 80 | @each $color, $value in $theme-colors { 81 | @if $color == dark or $color == light { 82 | .navbar-#{$color} { 83 | background-color: $value; 84 | } 85 | } 86 | } 87 | 88 | @each $color, $value in $theme-colors { 89 | @if $color != dark and $color != light { 90 | .navbar-#{$color} { 91 | background-color: $value; 92 | } 93 | } 94 | } 95 | 96 | @each $color, $value in $colors { 97 | .navbar-#{$color} { 98 | background-color: $value; 99 | } 100 | } 101 | -------------------------------------------------------------------------------- /admin/build/scss/_print.scss: -------------------------------------------------------------------------------- 1 | // 2 | // Misc: Print 3 | // 4 | 5 | @media print { 6 | //Add to elements that you do not want to show when printing 7 | .no-print { 8 | display: none !important; 9 | } 10 | 11 | //Elements that we want to hide when printing 12 | .main-sidebar, 13 | .main-header, 14 | .content-header { 15 | @extend .no-print; 16 | } 17 | 18 | //This is the only element that should appear, so let's remove the margins 19 | .content-wrapper, 20 | .main-footer { 21 | @include translate(0, 0); 22 | margin-left: 0 !important; 23 | min-height: 0 !important; 24 | } 25 | 26 | .layout-fixed .content-wrapper { 27 | padding-top: 0 !important; 28 | } 29 | 30 | //Invoice printing 31 | .invoice { 32 | border: 0; 33 | margin: 0; 34 | padding: 0; 35 | width: 100%; 36 | } 37 | 38 | .invoice-col { 39 | float: left; 40 | width: 33.3333333%; 41 | } 42 | 43 | //Make sure table content displays properly 44 | .table-responsive { 45 | overflow: auto; 46 | 47 | > .table tr th, 48 | > .table tr td { 49 | white-space: normal !important; 50 | } 51 | } 52 | } 53 | -------------------------------------------------------------------------------- /admin/build/scss/_products.scss: -------------------------------------------------------------------------------- 1 | // 2 | // Component: Products 3 | // 4 | 5 | .products-list { 6 | list-style: none; 7 | margin: 0; 8 | padding: 0; 9 | 10 | > .item { 11 | @include clearfix; 12 | 13 | @if $enable-rounded { 14 | @include border-radius($border-radius); 15 | } 16 | 17 | background: $white; 18 | padding: 10px 0; 19 | } 20 | 21 | .product-img { 22 | float: left; 23 | 24 | img { 25 | height: 50px; 26 | width: 50px; 27 | } 28 | } 29 | 30 | .product-info { 31 | margin-left: 60px; 32 | } 33 | 34 | .product-title { 35 | font-weight: 600; 36 | } 37 | 38 | .product-description { 39 | color: $gray-600; 40 | display: block; 41 | overflow: hidden; 42 | text-overflow: ellipsis; 43 | white-space: nowrap; 44 | } 45 | } 46 | 47 | .product-list-in-card > .item { 48 | @include border-radius(0); 49 | border-bottom: 1px solid $card-border-color; 50 | 51 | &:last-of-type { 52 | border-bottom-width: 0; 53 | } 54 | } 55 | -------------------------------------------------------------------------------- /admin/build/scss/_progress-bars.scss: -------------------------------------------------------------------------------- 1 | // 2 | // Component: Progress Bar 3 | // 4 | 5 | //General CSS 6 | .progress { 7 | @include box-shadow(none); 8 | @include border-radius($progress-bar-border-radius); 9 | 10 | // Vertical bars 11 | &.vertical { 12 | display: inline-block; 13 | height: 200px; 14 | margin-right: 10px; 15 | position: relative; 16 | width: 30px; 17 | 18 | > .progress-bar { 19 | bottom: 0; 20 | position: absolute; 21 | width: 100%; 22 | } 23 | 24 | //Sizes 25 | &.sm, 26 | &.progress-sm { 27 | width: 20px; 28 | } 29 | 30 | &.xs, 31 | &.progress-xs { 32 | width: 10px; 33 | } 34 | 35 | &.xxs, 36 | &.progress-xxs { 37 | width: 3px; 38 | } 39 | } 40 | } 41 | 42 | .progress-group { 43 | margin-bottom: map-get($spacers, 2); 44 | } 45 | 46 | // size variation 47 | .progress-sm { 48 | height: 10px; 49 | } 50 | 51 | .progress-xs { 52 | height: 7px; 53 | } 54 | 55 | .progress-xxs { 56 | height: 3px; 57 | } 58 | 59 | // Remove margins from progress bars when put in a table 60 | .table { 61 | tr > td { 62 | .progress { 63 | margin: 0; 64 | } 65 | } 66 | } 67 | -------------------------------------------------------------------------------- /admin/build/scss/_sidebar-mini.scss: -------------------------------------------------------------------------------- 1 | // 2 | // Component: Sidebar Mini 3 | // 4 | 5 | // Logo style 6 | .logo-xs, 7 | .logo-xl { 8 | opacity: 1; 9 | position: absolute; 10 | visibility: visible; 11 | 12 | &.brand-image-xs { 13 | left: 18px; 14 | top: 12px; 15 | } 16 | 17 | &.brand-image-xl { 18 | left: 12px; 19 | top: 6px; 20 | } 21 | } 22 | 23 | .logo-xs { 24 | opacity: 0; 25 | visibility: hidden; 26 | 27 | &.brand-image-xl { 28 | left: 16px; 29 | top: 8px; 30 | } 31 | } 32 | 33 | .brand-link { 34 | &.logo-switch { 35 | &::before { 36 | content: '\00a0'; 37 | } 38 | } 39 | } 40 | 41 | // Add sidebar-mini class to the body tag to activate this feature 42 | .sidebar-mini { 43 | @include media-breakpoint-up(lg) { 44 | @include sidebar-mini-breakpoint; 45 | } 46 | } 47 | @include media-breakpoint-down(md) { 48 | .sidebar-mini.sidebar-collapse .main-sidebar { 49 | box-shadow: none !important; 50 | } 51 | } 52 | 53 | .sidebar-mini-md { 54 | @include media-breakpoint-up(md) { 55 | @include sidebar-mini-breakpoint; 56 | } 57 | } 58 | @include media-breakpoint-down(sm) { 59 | .sidebar-mini-md.sidebar-collapse .main-sidebar { 60 | box-shadow: none !important; 61 | } 62 | } 63 | 64 | @keyframes fadeIn { 65 | from { 66 | opacity: 0; 67 | } 68 | 69 | to { 70 | opacity: 1; 71 | } 72 | } 73 | 74 | @keyframes fadeOut { 75 | from { 76 | opacity: 1; 77 | } 78 | 79 | to { 80 | opacity: 0; 81 | } 82 | } 83 | 84 | .sidebar-collapse { 85 | .main-sidebar.sidebar-focused, 86 | .main-sidebar:hover { 87 | .nav-header { 88 | display: inline-block; 89 | } 90 | } 91 | 92 | .sidebar-no-expand.main-sidebar.sidebar-focused, 93 | .sidebar-no-expand.main-sidebar:hover { 94 | width: $sidebar-mini-width; 95 | 96 | .nav-header { 97 | display: none; 98 | } 99 | 100 | .brand-link { 101 | width: $sidebar-mini-width !important; 102 | } 103 | 104 | .user-panel .image { 105 | float: none !important; 106 | } 107 | 108 | .logo-xs { 109 | animation-name: fadeIn; 110 | animation-duration: $transition-speed; 111 | animation-fill-mode: both; 112 | visibility: visible; 113 | } 114 | 115 | .logo-xl { 116 | animation-name: fadeOut; 117 | animation-duration: $transition-speed; 118 | animation-fill-mode: both; 119 | visibility: hidden; 120 | } 121 | 122 | .nav-sidebar.nav-child-indent .nav-treeview { 123 | padding-left: 0; 124 | } 125 | 126 | .brand-text, 127 | .user-panel > .info, 128 | .nav-sidebar .nav-link p { 129 | margin-left: -10px; 130 | animation-name: fadeOut; 131 | animation-duration: $transition-speed; 132 | animation-fill-mode: both; 133 | visibility: hidden; 134 | width: 0; 135 | } 136 | 137 | .nav-sidebar > .nav-item .nav-icon { 138 | margin-right: 0; 139 | } 140 | } 141 | } 142 | 143 | .nav-sidebar { 144 | position: relative; 145 | 146 | &:hover { 147 | overflow: visible; 148 | } 149 | } 150 | 151 | .sidebar-form, 152 | .nav-sidebar > .nav-header { 153 | overflow: hidden; 154 | text-overflow: clip; 155 | } 156 | 157 | .nav-sidebar .nav-item > .nav-link { 158 | position: relative; 159 | 160 | > .float-right { 161 | margin-top: -7px; 162 | position: absolute; 163 | right: 10px; 164 | top: 50%; 165 | } 166 | } 167 | 168 | .sidebar .nav-link p, 169 | .main-sidebar .brand-text, 170 | .main-sidebar .logo-xs, 171 | .main-sidebar .logo-xl, 172 | .sidebar .user-panel .info { 173 | @include transition(margin-left $transition-speed linear, opacity $transition-speed ease, visibility $transition-speed ease) 174 | } 175 | -------------------------------------------------------------------------------- /admin/build/scss/_small-box.scss: -------------------------------------------------------------------------------- 1 | // 2 | // Component: Small Box 3 | // 4 | 5 | .small-box { 6 | @include border-radius($border-radius); 7 | @include box-shadow($card-shadow); 8 | 9 | display: block; 10 | margin-bottom: 20px; 11 | position: relative; 12 | 13 | // content wrapper 14 | > .inner { 15 | padding: 10px; 16 | } 17 | 18 | > .small-box-footer { 19 | background: rgba($black, 0.1); 20 | color: rgba($white, 0.8); 21 | display: block; 22 | padding: 3px 0; 23 | position: relative; 24 | text-align: center; 25 | text-decoration: none; 26 | z-index: 10; 27 | 28 | &:hover { 29 | background: rgba($black, 0.15); 30 | color: $white; 31 | } 32 | } 33 | 34 | h3 { 35 | @include font-size(2.2rem); 36 | font-weight: bold; 37 | margin: 0 0 10px 0; 38 | padding: 0; 39 | white-space: nowrap; 40 | } 41 | 42 | @include media-breakpoint-up(lg) { 43 | .col-xl-2 &, 44 | .col-lg-2 &, 45 | .col-md-2 & { 46 | h3 { 47 | @include font-size(1.6rem); 48 | } 49 | } 50 | 51 | .col-xl-3 &, 52 | .col-lg-3 &, 53 | .col-md-3 & { 54 | h3 { 55 | @include font-size(1.6rem); 56 | } 57 | } 58 | } 59 | 60 | @include media-breakpoint-up(xl) { 61 | .col-xl-2 &, 62 | .col-lg-2 &, 63 | .col-md-2 & { 64 | h3 { 65 | @include font-size(2.2rem); 66 | } 67 | } 68 | 69 | .col-xl-3 &, 70 | .col-lg-3 &, 71 | .col-md-3 & { 72 | h3 { 73 | @include font-size(2.2rem); 74 | } 75 | } 76 | } 77 | 78 | p { 79 | font-size: 1rem; 80 | 81 | > small { 82 | color: $gray-100; 83 | display: block; 84 | font-size: 0.9rem; 85 | margin-top: 5px; 86 | } 87 | } 88 | 89 | h3, 90 | p { 91 | z-index: 5; 92 | } 93 | 94 | // the icon 95 | .icon { 96 | color: rgba($black, 0.15); 97 | z-index: 0; 98 | 99 | > i { 100 | font-size: 90px; 101 | position: absolute; 102 | right: 15px; 103 | top: 15px; 104 | transition: all $transition-speed linear; 105 | 106 | &.fa, 107 | &.fas, 108 | &.far, 109 | &.fab, 110 | &.glyphicon, 111 | &.ion { 112 | font-size: 70px; 113 | top: 20px; 114 | } 115 | } 116 | 117 | } 118 | 119 | // Small box hover state 120 | &:hover { 121 | text-decoration: none; 122 | 123 | // Animate icons on small box hover 124 | .icon > i { 125 | font-size: 95px; 126 | 127 | &.fa, 128 | &.fas, 129 | &.far, 130 | &.fab, 131 | &.glyphicon, 132 | &.ion { 133 | font-size: 75px; 134 | } 135 | } 136 | } 137 | } 138 | 139 | @include media-breakpoint-down(sm) { 140 | // No need for icons on very small devices 141 | .small-box { 142 | text-align: center; 143 | 144 | .icon { 145 | display: none; 146 | } 147 | 148 | p { 149 | font-size: 12px; 150 | } 151 | } 152 | } 153 | -------------------------------------------------------------------------------- /admin/build/scss/_social-widgets.scss: -------------------------------------------------------------------------------- 1 | // 2 | // Component: Social Widgets 3 | // 4 | 5 | //General widget style 6 | .card-widget { 7 | border: 0; 8 | position: relative; 9 | } 10 | 11 | //User Widget Style 1 12 | .widget-user { 13 | 14 | //User name container 15 | .widget-user-header { 16 | @if $enable-rounded { 17 | @include border-top-radius($border-radius); 18 | } 19 | 20 | height: 135px; 21 | padding: 1rem; 22 | text-align: center; 23 | } 24 | 25 | //User name 26 | .widget-user-username { 27 | font-size: 25px; 28 | font-weight: 300; 29 | margin-bottom: 0; 30 | margin-top: 0; 31 | text-shadow: 0 1px 1px rgba($black, 0.2); 32 | } 33 | 34 | //User single line description 35 | .widget-user-desc { 36 | margin-top: 0; 37 | } 38 | 39 | //User image container 40 | .widget-user-image { 41 | left: 50%; 42 | margin-left: -45px; 43 | position: absolute; 44 | top: 80px; 45 | 46 | > img { 47 | border: 3px solid $white; 48 | height: auto; 49 | width: 90px; 50 | } 51 | } 52 | 53 | .card-footer { 54 | padding-top: 50px; 55 | } 56 | } 57 | 58 | //User Widget Style 2 59 | .widget-user-2 { 60 | 61 | //User name container 62 | .widget-user-header { 63 | @include border-top-radius($border-radius); 64 | padding: 1rem; 65 | } 66 | 67 | //User name 68 | .widget-user-username { 69 | font-size: 25px; 70 | font-weight: 300; 71 | margin-bottom: 5px; 72 | margin-top: 5px; 73 | } 74 | 75 | //User single line description 76 | .widget-user-desc { 77 | margin-top: 0; 78 | } 79 | 80 | .widget-user-username, 81 | .widget-user-desc { 82 | margin-left: 75px; 83 | } 84 | 85 | //User image container 86 | .widget-user-image { 87 | > img { 88 | float: left; 89 | height: auto; 90 | width: 65px; 91 | } 92 | } 93 | } 94 | -------------------------------------------------------------------------------- /admin/build/scss/_table.scss: -------------------------------------------------------------------------------- 1 | // 2 | // Component: Table 3 | // 4 | 5 | .table { 6 | &:not(.table-dark) { 7 | color: inherit; 8 | } 9 | 10 | // fixed table head 11 | &.table-head-fixed { 12 | thead tr:nth-child(1) th { 13 | background-color: $white; 14 | border-bottom: 0; 15 | box-shadow: inset 0 1px 0 $table-border-color, 16 | inset 0 -1px 0 $table-border-color; 17 | position: sticky; 18 | top: 0; 19 | z-index: 10; 20 | } 21 | 22 | &.table-dark { 23 | thead tr { 24 | &:nth-child(1) th { 25 | background-color: $table-dark-bg; 26 | box-shadow: inset 0 1px 0 $table-dark-border-color, 27 | inset 0 -1px 0 $table-dark-border-color; 28 | } 29 | } 30 | } 31 | } 32 | 33 | // no border 34 | &.no-border { 35 | &, 36 | td, 37 | th { 38 | border: 0; 39 | } 40 | } 41 | 42 | // .text-center in tables 43 | &.text-center { 44 | &, 45 | td, 46 | th { 47 | text-align: center; 48 | } 49 | } 50 | 51 | &.table-valign-middle { 52 | thead > tr > th, 53 | thead > tr > td, 54 | tbody > tr > th, 55 | tbody > tr > td { 56 | vertical-align: middle; 57 | } 58 | } 59 | 60 | .card-body.p-0 & { 61 | thead > tr > th, 62 | thead > tr > td, 63 | tbody > tr > th, 64 | tbody > tr > td { 65 | &:first-of-type { 66 | padding-left: map-get($spacers, 4); 67 | } 68 | 69 | &:last-of-type { 70 | padding-right: map-get($spacers, 4); 71 | } 72 | } 73 | } 74 | } 75 | -------------------------------------------------------------------------------- /admin/build/scss/_text.scss: -------------------------------------------------------------------------------- 1 | // 2 | // Component: Text 3 | // 4 | 5 | // text modification 6 | .text-bold { 7 | &, &.table td, &.table th { 8 | font-weight: 700; 9 | } 10 | } 11 | 12 | .text-xs { 13 | font-size: $font-size-xs !important; 14 | } 15 | 16 | .text-sm { 17 | font-size: $font-size-sm !important; 18 | } 19 | 20 | .text-md { 21 | font-size: $font-size-base !important; 22 | } 23 | 24 | .text-lg { 25 | font-size: $font-size-lg !important; 26 | } 27 | 28 | .text-xl { 29 | font-size: $font-size-xl !important; 30 | } 31 | 32 | // text color variations 33 | @each $name, $color in $colors { 34 | .text-#{$name} { 35 | color: #{$color} !important; 36 | } 37 | } 38 | -------------------------------------------------------------------------------- /admin/build/scss/_timeline.scss: -------------------------------------------------------------------------------- 1 | // 2 | // Component: Timeline 3 | // 4 | 5 | .timeline { 6 | margin: 0 0 45px; 7 | padding: 0; 8 | position: relative; 9 | // The line 10 | &::before { 11 | @include border-radius($border-radius); 12 | background: $gray-300; 13 | bottom: 0; 14 | content: ''; 15 | left: 31px; 16 | margin: 0; 17 | position: absolute; 18 | top: 0; 19 | width: 4px; 20 | } 21 | // Element 22 | > div { 23 | &::before, 24 | &::after { 25 | content: ""; 26 | display: table; 27 | } 28 | 29 | margin-bottom: 15px; 30 | margin-right: 10px; 31 | position: relative; 32 | // The content 33 | > .timeline-item { 34 | @include box-shadow($card-shadow); 35 | @include border-radius($border-radius); 36 | background: $white; 37 | color: $gray-700; 38 | margin-left: 60px; 39 | margin-right: 15px; 40 | margin-top: 0; 41 | padding: 0; 42 | position: relative; 43 | // The time and header 44 | > .time { 45 | color: #999; 46 | float: right; 47 | font-size: 12px; 48 | padding: 10px; 49 | } 50 | // Header 51 | > .timeline-header { 52 | border-bottom: 1px solid $card-border-color; 53 | color: $gray-700; 54 | font-size: 16px; 55 | line-height: 1.1; 56 | margin: 0; 57 | padding: 10px; 58 | // Link in header 59 | > a { 60 | font-weight: 600; 61 | } 62 | } 63 | // Item body and footer 64 | > .timeline-body, 65 | > .timeline-footer { 66 | padding: 10px; 67 | } 68 | 69 | > .timeline-body { 70 | > img { 71 | margin: 10px; 72 | } 73 | > dl, ol, ul { 74 | margin: 0; 75 | } 76 | } 77 | 78 | > .timeline-footer { 79 | > a { 80 | color: $white; 81 | } 82 | } 83 | } 84 | // The icons at line 85 | > .fa, 86 | > .fas, 87 | > .far, 88 | > .fab, 89 | > .glyphicon, 90 | > .ion { 91 | background: $gray-500; 92 | border-radius: 50%; 93 | font-size: 15px; 94 | height: 30px; 95 | left: 18px; 96 | line-height: 30px; 97 | position: absolute; 98 | text-align: center; 99 | top: 0; 100 | width: 30px; 101 | } 102 | } 103 | // Time label 104 | > .time-label { 105 | > span { 106 | @include border-radius(4px); 107 | background-color: $white; 108 | display: inline-block; 109 | font-weight: 600; 110 | padding: 5px; 111 | } 112 | } 113 | } 114 | 115 | .timeline-inverse { 116 | > div { 117 | > .timeline-item { 118 | @include box-shadow(none); 119 | background: $gray-100; 120 | border: 1px solid $gray-300; 121 | 122 | > .timeline-header { 123 | border-bottom-color: $gray-300; 124 | } 125 | } 126 | } 127 | } 128 | -------------------------------------------------------------------------------- /admin/build/scss/_toasts.scss: -------------------------------------------------------------------------------- 1 | // 2 | // Component: Toasts 3 | // 4 | 5 | .toasts-top-right { 6 | position: absolute; 7 | right: 0; 8 | top: 0; 9 | z-index: $zindex-toasts; 10 | 11 | &.fixed { 12 | position: fixed; 13 | } 14 | } 15 | 16 | .toasts-top-left { 17 | left: 0; 18 | position: absolute; 19 | top: 0; 20 | z-index: $zindex-toasts; 21 | 22 | &.fixed { 23 | position: fixed; 24 | } 25 | } 26 | 27 | .toasts-bottom-right { 28 | bottom: 0; 29 | position: absolute; 30 | right: 0; 31 | z-index: $zindex-toasts; 32 | 33 | &.fixed { 34 | position: fixed; 35 | } 36 | } 37 | 38 | .toasts-bottom-left { 39 | bottom: 0; 40 | left: 0; 41 | position: absolute; 42 | z-index: $zindex-toasts; 43 | 44 | &.fixed { 45 | position: fixed; 46 | } 47 | } 48 | 49 | .toast { 50 | @each $name, $color in $theme-colors { 51 | @include toast-variant($name, $color); 52 | } 53 | @each $name, $color in $colors { 54 | @include toast-variant($name, $color); 55 | } 56 | } 57 | -------------------------------------------------------------------------------- /admin/build/scss/_users-list.scss: -------------------------------------------------------------------------------- 1 | // 2 | // Component: Users List 3 | // 4 | 5 | .users-list { 6 | @include list-unstyled; 7 | 8 | > li { 9 | float: left; 10 | padding: 10px; 11 | text-align: center; 12 | width: 25%; 13 | 14 | img { 15 | @include border-radius(50%); 16 | height: auto; 17 | max-width: 100%; 18 | } 19 | 20 | > a:hover { 21 | &, 22 | .users-list-name { 23 | color: #999; 24 | } 25 | } 26 | } 27 | } 28 | 29 | .users-list-name, 30 | .users-list-date { 31 | display: block; 32 | } 33 | 34 | .users-list-name { 35 | color: $gray-700; 36 | font-size: $font-size-sm; 37 | overflow: hidden; 38 | text-overflow: ellipsis; 39 | white-space: nowrap; 40 | } 41 | 42 | .users-list-date { 43 | color: darken($gray-500, 20%); 44 | font-size: 12px; 45 | } 46 | -------------------------------------------------------------------------------- /admin/build/scss/index.php: -------------------------------------------------------------------------------- 1 | a { 12 | color: color-yiq($color) !important; 13 | } 14 | 15 | &.btn { 16 | &:hover { 17 | border-color: darken($color, 10%); 18 | color: darken(color-yiq($color), 7.5%); 19 | } 20 | 21 | &:not(:disabled):not(.disabled):active, 22 | &:not(:disabled):not(.disabled).active, 23 | &:active, 24 | &.active { 25 | background-color: darken($color, 10%) !important; 26 | border-color: darken($color, 12.5%); 27 | color: color-yiq(darken($color, 10%)); 28 | } 29 | } 30 | } 31 | } 32 | 33 | // Background Gradient Variant 34 | @mixin background-gradient-variant($name, $color) { 35 | .bg-gradient-#{$name} { 36 | @include bg-gradient-variant('&', $color); 37 | color: color-yiq($color); 38 | 39 | &.btn { 40 | &.disabled, 41 | &:disabled, 42 | &:not(:disabled):not(.disabled):active, 43 | &:not(:disabled):not(.disabled).active, 44 | .show > &.dropdown-toggle { 45 | background-image: none !important; 46 | } 47 | 48 | &:hover { 49 | @include bg-gradient-variant('&', darken($color, 7.5%)); 50 | border-color: darken($color, 10%); 51 | color: darken(color-yiq($color), 7.5%); 52 | } 53 | 54 | &:not(:disabled):not(.disabled):active, 55 | &:not(:disabled):not(.disabled).active, 56 | &:active, 57 | &.active { 58 | @include bg-gradient-variant('&', darken($color, 10%)); 59 | border-color: darken($color, 12.5%); 60 | color: color-yiq(darken($color, 10%)); 61 | } 62 | } 63 | } 64 | } 65 | -------------------------------------------------------------------------------- /admin/build/scss/mixins/_cards.scss: -------------------------------------------------------------------------------- 1 | // 2 | // Mixins: Cards Variant 3 | // 4 | 5 | @mixin cards-variant($name, $color) { 6 | .card-#{$name} { 7 | &:not(.card-outline) { 8 | > .card-header { 9 | background-color: $color; 10 | 11 | &, 12 | a { 13 | color: color-yiq($color); 14 | } 15 | 16 | a.active { 17 | color: color-yiq($white); 18 | } 19 | } 20 | } 21 | 22 | &.card-outline { 23 | border-top: 3px solid $color; 24 | } 25 | 26 | &.card-outline-tabs { 27 | > .card-header { 28 | a { 29 | &:hover { 30 | border-top: 3px solid $nav-tabs-border-color; 31 | } 32 | 33 | &.active { 34 | border-top: 3px solid $color; 35 | } 36 | } 37 | } 38 | } 39 | } 40 | 41 | .bg-#{$name}, 42 | .bg-gradient-#{$name}, 43 | .card-#{$name}:not(.card-outline) { 44 | .btn-tool { 45 | color: rgba(color-yiq($color), 0.8); 46 | 47 | &:hover { 48 | color: color-yiq($color); 49 | } 50 | } 51 | } 52 | 53 | .card.bg-#{$name}, 54 | .card.bg-gradient-#{$name} { 55 | .bootstrap-datetimepicker-widget { 56 | .table td, 57 | .table th { 58 | border: none; 59 | } 60 | 61 | table thead tr:first-child th:hover, 62 | table td.day:hover, 63 | table td.hour:hover, 64 | table td.minute:hover, 65 | table td.second:hover { 66 | background: darken($color, 8%); 67 | color: color-yiq($color); 68 | } 69 | 70 | table td.today::before { 71 | border-bottom-color: color-yiq($color); 72 | } 73 | 74 | table td.active, 75 | table td.active:hover { 76 | background: lighten($color, 10%); 77 | color: color-yiq($color); 78 | } 79 | } 80 | } 81 | } 82 | 83 | -------------------------------------------------------------------------------- /admin/build/scss/mixins/_custom-forms.scss: -------------------------------------------------------------------------------- 1 | // 2 | // Mixins: Custom Forms 3 | // 4 | 5 | // Custom Switch Variant 6 | @mixin custom-switch-variant($name, $color) { 7 | &.custom-switch-off-#{$name} { 8 | & .custom-control-input ~ .custom-control-label::before { 9 | background: #{$color}; 10 | border-color: darken($color, 20%); 11 | } 12 | 13 | & .custom-control-input:focus ~ .custom-control-label::before { 14 | box-shadow: 0 0 0 1px $body-bg, 0 0 0 2px rgba($color, .25); 15 | } 16 | 17 | & .custom-control-input ~ .custom-control-label::after { 18 | background: darken($color, 25%); 19 | } 20 | } 21 | 22 | &.custom-switch-on-#{$name} { 23 | & .custom-control-input:checked ~ .custom-control-label::before { 24 | background: #{$color}; 25 | border-color: darken($color, 20%); 26 | } 27 | 28 | & .custom-control-input:checked:focus ~ .custom-control-label::before { 29 | box-shadow: 0 0 0 1px $body-bg, 0 0 0 2px rgba($color, .25); 30 | } 31 | 32 | & .custom-control-input:checked ~ .custom-control-label::after { 33 | background: lighten($color, 30%); 34 | } 35 | } 36 | } 37 | 38 | // Custom Range Variant 39 | @mixin custom-range-variant($name, $color) { 40 | &.custom-range-#{$name} { 41 | &:focus { 42 | outline: none; 43 | 44 | &::-webkit-slider-thumb { 45 | box-shadow: 0 0 0 1px $body-bg, 0 0 0 2px rgba($color, .25); 46 | } 47 | 48 | &::-moz-range-thumb { 49 | box-shadow: 0 0 0 1px $body-bg, 0 0 0 2px rgba($color, .25); 50 | } 51 | 52 | &::-ms-thumb { 53 | box-shadow: 0 0 0 1px $body-bg, 0 0 0 2px rgba($color, .25); 54 | } 55 | } 56 | 57 | &::-webkit-slider-thumb { 58 | background-color: $color; 59 | 60 | &:active { 61 | background-color: lighten($color, 35%); 62 | } 63 | } 64 | 65 | &::-moz-range-thumb { 66 | background-color: $color; 67 | 68 | &:active { 69 | background-color: lighten($color, 35%); 70 | } 71 | } 72 | 73 | &::-ms-thumb { 74 | background-color: $color; 75 | 76 | &:active { 77 | background-color: lighten($color, 35%); 78 | } 79 | } 80 | } 81 | } 82 | -------------------------------------------------------------------------------- /admin/build/scss/mixins/_direct-chat.scss: -------------------------------------------------------------------------------- 1 | // 2 | // Mixins: Direct Chat 3 | // 4 | 5 | // Direct Chat Variant 6 | @mixin direct-chat-variant($bg-color, $color: #fff) { 7 | .right > .direct-chat-text { 8 | background: $bg-color; 9 | border-color: $bg-color; 10 | color: color-yiq($bg-color); 11 | 12 | &::after, 13 | &::before { 14 | border-left-color: $bg-color; 15 | } 16 | } 17 | } 18 | -------------------------------------------------------------------------------- /admin/build/scss/mixins/_miscellaneous.scss: -------------------------------------------------------------------------------- 1 | // 2 | // Mixins: Miscellaneous 3 | // 4 | 5 | // ETC 6 | @mixin translate($x, $y) { 7 | transform: translate($x, $y); 8 | } 9 | 10 | // Different radius each side 11 | @mixin border-radius-sides($top-left, $top-right, $bottom-left, $bottom-right) { 12 | border-radius: $top-left $top-right $bottom-left $bottom-right; 13 | } 14 | 15 | @mixin calc($property, $expression) { 16 | #{$property}: calc(#{$expression}); 17 | } 18 | 19 | @mixin rotate($value) { 20 | transform: rotate($value); 21 | } 22 | 23 | @mixin animation($animation) { 24 | animation: $animation; 25 | } 26 | 27 | // Gradient background 28 | @mixin gradient($color: #F5F5F5, $start: #EEE, $stop: #FFF) { 29 | background: $color; 30 | background: -webkit-gradient(linear, left bottom, left top, color-stop(0, $start), color-stop(1, $stop)); 31 | background: -ms-linear-gradient(bottom, $start, $stop); 32 | background: -moz-linear-gradient(center bottom, $start 0%, $stop 100%); 33 | background: -o-linear-gradient($stop, $start); 34 | } 35 | 36 | -------------------------------------------------------------------------------- /admin/build/scss/mixins/_navbar.scss: -------------------------------------------------------------------------------- 1 | // 2 | // Mixins: Navbar 3 | // 4 | 5 | // Navbar Variant 6 | @mixin navbar-variant($color, $font-color: rgba(255, 255, 255, 0.8), $hover-color: #f6f6f6, $hover-bg: rgba(0, 0, 0, 0.1)) { 7 | background-color: $color; 8 | 9 | .nav > li > a { 10 | color: $font-color; 11 | } 12 | 13 | .nav > li > a:hover, 14 | .nav > li > a:active, 15 | .nav > li > a:focus, 16 | .nav .open > a, 17 | .nav .open > a:hover, 18 | .nav .open > a:focus, 19 | .nav > .active > a { 20 | background: $hover-bg; 21 | color: $hover-color; 22 | } 23 | 24 | // Add color to the sidebar toggle button 25 | .sidebar-toggle { 26 | color: $font-color; 27 | 28 | &:hover, 29 | &:focus { 30 | background: $hover-bg; 31 | color: $hover-color; 32 | } 33 | } 34 | } 35 | -------------------------------------------------------------------------------- /admin/build/scss/mixins/_sidebar.scss: -------------------------------------------------------------------------------- 1 | // 2 | // Mixins: Sidebar 3 | // 4 | 5 | // Sidebar Color 6 | @mixin sidebar-color($color) { 7 | .nav-sidebar > .nav-item { 8 | & > .nav-link.active { 9 | background-color: $color; 10 | color: color-yiq($color); 11 | } 12 | } 13 | 14 | .nav-sidebar.nav-legacy > .nav-item { 15 | & > .nav-link.active { 16 | border-color: $color; 17 | } 18 | } 19 | } 20 | 21 | // Sidebar Mini Breakpoints 22 | @mixin sidebar-mini-breakpoint() { 23 | // A fix for text overflow while transitioning from sidebar mini to full sidebar 24 | .nav-sidebar, 25 | .nav-sidebar > .nav-header, 26 | .nav-sidebar .nav-link { 27 | white-space: nowrap; 28 | overflow: hidden; 29 | } 30 | 31 | // When the sidebar is collapsed... 32 | &.sidebar-collapse { 33 | .d-hidden-mini { 34 | display: none; 35 | } 36 | 37 | // Apply the new margins to the main content and footer 38 | .content-wrapper, 39 | .main-footer, 40 | .main-header { 41 | margin-left: $sidebar-mini-width !important; 42 | } 43 | 44 | // Make the sidebar headers 45 | .nav-sidebar .nav-header { 46 | display: none; 47 | } 48 | 49 | .nav-sidebar .nav-link p { 50 | width: 0; 51 | } 52 | 53 | .sidebar .user-panel > .info, 54 | .nav-sidebar .nav-link p, 55 | .brand-text { 56 | margin-left: -10px; 57 | animation-name: fadeOut; 58 | animation-duration: $transition-speed; 59 | animation-fill-mode: both; 60 | visibility: hidden; 61 | } 62 | 63 | .logo-xl { 64 | animation-name: fadeOut; 65 | animation-duration: $transition-speed; 66 | animation-fill-mode: both; 67 | visibility: hidden; 68 | } 69 | 70 | .logo-xs { 71 | display: inline-block; 72 | animation-name: fadeIn; 73 | animation-duration: $transition-speed; 74 | animation-fill-mode: both; 75 | visibility: visible; 76 | } 77 | 78 | // Modify the sidebar to shrink instead of disappearing 79 | .main-sidebar { 80 | overflow-x: hidden; 81 | 82 | &, 83 | &::before { 84 | // Don't go away! Just shrink 85 | margin-left: 0; 86 | width: $sidebar-mini-width; 87 | } 88 | 89 | .user-panel { 90 | .image { 91 | float: none; 92 | } 93 | } 94 | 95 | &:hover, 96 | &.sidebar-focused { 97 | width: $sidebar-width; 98 | 99 | .brand-link { 100 | width: $sidebar-width; 101 | } 102 | 103 | .user-panel { 104 | text-align: left; 105 | 106 | .image { 107 | float: left; 108 | } 109 | } 110 | 111 | .user-panel > .info, 112 | .nav-sidebar .nav-link p, 113 | .brand-text, 114 | .logo-xl { 115 | display: inline-block; 116 | margin-left: 0; 117 | animation-name: fadeIn; 118 | animation-duration: $transition-speed; 119 | animation-fill-mode: both; 120 | visibility: visible; 121 | } 122 | 123 | .logo-xs { 124 | animation-name: fadeOut; 125 | animation-duration: $transition-speed; 126 | animation-fill-mode: both; 127 | visibility: hidden; 128 | } 129 | 130 | .brand-image { 131 | margin-right: .5rem; 132 | } 133 | 134 | // Make the sidebar links, menus, labels, badges 135 | // and angle icons disappear 136 | .sidebar-form, 137 | .user-panel > .info { 138 | display: block !important; 139 | -webkit-transform: translateZ(0); 140 | } 141 | 142 | .nav-sidebar > .nav-item > .nav-link > span { 143 | display: inline-block !important; 144 | } 145 | } 146 | } 147 | 148 | // Make an element visible only when sidebar mini is active 149 | .visible-sidebar-mini { 150 | display: block !important; 151 | } 152 | 153 | &.layout-fixed { 154 | .main-sidebar:hover { 155 | .brand-link { 156 | width: $sidebar-width; 157 | } 158 | } 159 | 160 | .brand-link { 161 | width: $sidebar-mini-width; 162 | } 163 | } 164 | } 165 | } 166 | -------------------------------------------------------------------------------- /admin/build/scss/mixins/_toasts.scss: -------------------------------------------------------------------------------- 1 | // 2 | // Mixins: Toasts 3 | // 4 | 5 | // Toast Variant 6 | @mixin toast-variant($name, $color) { 7 | &.bg-#{$name} { 8 | background: rgba($color, .9) !important; 9 | @if (color-yiq($color) == $yiq-text-light) { 10 | 11 | .close { 12 | color: color-yiq($color); 13 | text-shadow: 0 1px 0 #000; 14 | } 15 | } 16 | 17 | .toast-header { 18 | background: rgba($color, .85); 19 | color: color-yiq($color); 20 | } 21 | } 22 | } 23 | 24 | -------------------------------------------------------------------------------- /admin/build/scss/pages/_404_500_errors.scss: -------------------------------------------------------------------------------- 1 | // 2 | // Pages: 400 and 500 error pages 3 | // 4 | 5 | .error-page { 6 | margin: 20px auto 0; 7 | width: 600px; 8 | 9 | @include media-breakpoint-down(sm) { 10 | width: 100%; 11 | } 12 | 13 | //For the error number e.g: 404 14 | > .headline { 15 | float: left; 16 | font-size: 100px; 17 | font-weight: 300; 18 | 19 | @include media-breakpoint-down(sm) { 20 | float: none; 21 | text-align: center; 22 | } 23 | } 24 | 25 | //For the message 26 | > .error-content { 27 | display: block; 28 | margin-left: 190px; 29 | 30 | @include media-breakpoint-down(sm) { 31 | margin-left: 0; 32 | } 33 | 34 | > h3 { 35 | font-size: 25px; 36 | font-weight: 300; 37 | 38 | @include media-breakpoint-down(sm) { 39 | text-align: center; 40 | } 41 | } 42 | } 43 | } 44 | -------------------------------------------------------------------------------- /admin/build/scss/pages/_e-commerce.scss: -------------------------------------------------------------------------------- 1 | // 2 | // Pages: E-commerce 3 | // 4 | 5 | // product image 6 | .product-image { 7 | @include img-fluid; 8 | width: 100%; 9 | } 10 | 11 | // product image thumbnails list 12 | .product-image-thumbs { 13 | align-items: stretch; 14 | display: flex; 15 | margin-top: 2rem; 16 | } 17 | 18 | // product image thumbnail 19 | .product-image-thumb { 20 | @include box-shadow($thumbnail-box-shadow); 21 | @include border-radius($thumbnail-border-radius); 22 | 23 | background-color: $thumbnail-bg; 24 | border: $thumbnail-border-width solid $thumbnail-border-color; 25 | display: flex; 26 | margin-right: 1rem; 27 | max-width: 6.5rem + ($thumbnail-padding * 2); 28 | padding: $thumbnail-padding * 2; 29 | 30 | img { 31 | @include img-fluid; 32 | align-self: center; 33 | } 34 | 35 | &:hover { 36 | opacity: 0.5; 37 | } 38 | } 39 | 40 | // product share 41 | .product-share { 42 | a { 43 | margin-right: .5rem; 44 | } 45 | } 46 | -------------------------------------------------------------------------------- /admin/build/scss/pages/_invoice.scss: -------------------------------------------------------------------------------- 1 | // 2 | // Pages: Invoice 3 | // 4 | 5 | .invoice { 6 | background: $white; 7 | border: 1px solid $card-border-color; 8 | position: relative; 9 | } 10 | 11 | .invoice-title { 12 | margin-top: 0; 13 | } 14 | -------------------------------------------------------------------------------- /admin/build/scss/pages/_lockscreen.scss: -------------------------------------------------------------------------------- 1 | // 2 | // Pages: Lock Screen 3 | // 4 | 5 | // ADD THIS CLASS TO THE TAG 6 | .lockscreen { 7 | background: $gray-200; 8 | 9 | // User name [optional] 10 | .lockscreen-name { 11 | font-weight: 600; 12 | text-align: center; 13 | } 14 | } 15 | 16 | .lockscreen-logo { 17 | font-size: 35px; 18 | font-weight: 300; 19 | margin-bottom: 25px; 20 | text-align: center; 21 | 22 | a { 23 | color: $gray-700; 24 | } 25 | } 26 | 27 | .lockscreen-wrapper { 28 | margin: 0 auto; 29 | margin-top: 10%; 30 | max-width: 400px; 31 | } 32 | 33 | 34 | // Will contain the image and the sign in form 35 | .lockscreen-item { 36 | @include border-radius(4px); 37 | background: $white; 38 | margin: 10px auto 30px; 39 | padding: 0; 40 | position: relative; 41 | width: 290px; 42 | } 43 | 44 | // User image 45 | .lockscreen-image { 46 | @include border-radius(50%); 47 | background: $white; 48 | left: -10px; 49 | padding: 5px; 50 | position: absolute; 51 | top: -25px; 52 | z-index: 10; 53 | 54 | > img { 55 | @include border-radius(50%); 56 | height: 70px; 57 | width: 70px; 58 | } 59 | } 60 | 61 | // Contains the password input and the login button 62 | .lockscreen-credentials { 63 | margin-left: 70px; 64 | 65 | .form-control { 66 | border: 0; 67 | } 68 | 69 | .btn { 70 | background-color: $white; 71 | border: 0; 72 | padding: 0 10px; 73 | } 74 | } 75 | 76 | .lockscreen-footer { 77 | margin-top: 10px; 78 | } 79 | -------------------------------------------------------------------------------- /admin/build/scss/pages/_login_and_register.scss: -------------------------------------------------------------------------------- 1 | // 2 | // Pages: Login & Register 3 | // 4 | 5 | .login-logo, 6 | .register-logo { 7 | font-size: 2.1rem; 8 | font-weight: 300; 9 | margin-bottom: .9rem; 10 | text-align: center; 11 | 12 | a { 13 | color: $gray-700; 14 | } 15 | } 16 | 17 | .login-page, 18 | .register-page { 19 | align-items: center; 20 | background: $gray-200; 21 | display: flex; 22 | flex-direction: column; 23 | height: 100vh; 24 | justify-content: center; 25 | } 26 | 27 | .login-box, 28 | .register-box { 29 | width: 360px; 30 | 31 | @media (max-width: map-get($grid-breakpoints, sm)) { 32 | margin-top: .5rem; 33 | width: 90%; 34 | } 35 | } 36 | 37 | .login-card-body, 38 | .register-card-body { 39 | background: $white; 40 | border-top: 0; 41 | color: #666; 42 | padding: 20px; 43 | 44 | .input-group { 45 | .form-control { 46 | border-right: 0; 47 | 48 | &:focus { 49 | box-shadow: none; 50 | 51 | & ~ .input-group-append .input-group-text { 52 | border-color: $input-focus-border-color; 53 | } 54 | } 55 | 56 | &.is-valid { 57 | &:focus { 58 | box-shadow: none; 59 | } 60 | 61 | & ~ .input-group-append .input-group-text { 62 | border-color: $success; 63 | } 64 | } 65 | 66 | &.is-invalid { 67 | &:focus { 68 | box-shadow: none; 69 | } 70 | 71 | & ~ .input-group-append .input-group-text { 72 | border-color: $danger; 73 | } 74 | } 75 | } 76 | 77 | .input-group-text { 78 | background-color: transparent; 79 | border-bottom-right-radius: $border-radius; 80 | border-left: 0; 81 | border-top-right-radius: $border-radius; 82 | color: #777; 83 | transition: $input-transition; 84 | } 85 | } 86 | } 87 | 88 | .login-box-msg, 89 | .register-box-msg { 90 | margin: 0; 91 | padding: 0 20px 20px; 92 | text-align: center; 93 | } 94 | 95 | .social-auth-links { 96 | margin: 10px 0; 97 | } 98 | -------------------------------------------------------------------------------- /admin/build/scss/pages/_mailbox.scss: -------------------------------------------------------------------------------- 1 | // 2 | // Pages: Mailbox 3 | // 4 | 5 | .mailbox-messages { 6 | > .table { 7 | margin: 0; 8 | } 9 | } 10 | 11 | .mailbox-controls { 12 | padding: 5px; 13 | 14 | &.with-border { 15 | border-bottom: 1px solid $card-border-color; 16 | } 17 | } 18 | 19 | .mailbox-read-info { 20 | border-bottom: 1px solid $card-border-color; 21 | padding: 10px; 22 | 23 | h3 { 24 | font-size: 20px; 25 | margin: 0; 26 | } 27 | 28 | h5 { 29 | margin: 0; 30 | padding: 5px 0 0; 31 | } 32 | } 33 | 34 | .mailbox-read-time { 35 | color: #999; 36 | font-size: 13px; 37 | } 38 | 39 | .mailbox-read-message { 40 | padding: 10px; 41 | } 42 | 43 | .mailbox-attachments { 44 | @include list-unstyled; 45 | li { 46 | border: 1px solid #eee; 47 | float: left; 48 | margin-bottom: 10px; 49 | margin-right: 10px; 50 | width: 200px; 51 | } 52 | } 53 | 54 | .mailbox-attachment-name { 55 | color: #666; 56 | font-weight: bold; 57 | } 58 | 59 | .mailbox-attachment-icon, 60 | .mailbox-attachment-info, 61 | .mailbox-attachment-size { 62 | display: block; 63 | } 64 | 65 | .mailbox-attachment-info { 66 | background: $gray-100; 67 | padding: 10px; 68 | } 69 | 70 | .mailbox-attachment-size { 71 | color: #999; 72 | font-size: 12px; 73 | 74 | > span { 75 | display: inline-block; 76 | padding-top: 0.75rem; 77 | } 78 | } 79 | 80 | .mailbox-attachment-icon { 81 | color: #666; 82 | font-size: 65px; 83 | max-height: 132.5px; 84 | padding: 20px 10px; 85 | text-align: center; 86 | 87 | &.has-img { 88 | padding: 0; 89 | 90 | > img { 91 | height: auto; 92 | max-width: 100%; 93 | } 94 | } 95 | } 96 | 97 | .mailbox-attachment-close { 98 | @extend .close; 99 | } 100 | -------------------------------------------------------------------------------- /admin/build/scss/pages/_profile.scss: -------------------------------------------------------------------------------- 1 | // 2 | // Pages: Profile 3 | // 4 | 5 | .profile-user-img { 6 | border: 3px solid $gray-500; 7 | margin: 0 auto; 8 | padding: 3px; 9 | width: 100px; 10 | } 11 | 12 | .profile-username { 13 | font-size: 21px; 14 | margin-top: 5px; 15 | } 16 | 17 | .post { 18 | border-bottom: 1px solid $gray-500; 19 | color: #666; 20 | margin-bottom: 15px; 21 | padding-bottom: 15px; 22 | 23 | &:last-of-type { 24 | border-bottom: 0; 25 | margin-bottom: 0; 26 | padding-bottom: 0; 27 | } 28 | 29 | .user-block { 30 | margin-bottom: 15px; 31 | width: 100%; 32 | } 33 | 34 | .row { 35 | width: 100%; 36 | } 37 | } 38 | -------------------------------------------------------------------------------- /admin/build/scss/pages/_projects.scss: -------------------------------------------------------------------------------- 1 | // 2 | // Pages: Projects 3 | // 4 | 5 | .projects { 6 | td { 7 | vertical-align: middle; 8 | } 9 | 10 | .list-inline { 11 | margin-bottom: 0; 12 | } 13 | 14 | // table avatar 15 | img.table-avatar, 16 | .table-avatar img { 17 | border-radius: 50%; 18 | display: inline; 19 | width: 2.5rem; 20 | } 21 | 22 | // project state 23 | .project-state { 24 | text-align: center; 25 | } 26 | } 27 | -------------------------------------------------------------------------------- /admin/build/scss/parts/_components.scss: -------------------------------------------------------------------------------- 1 | // 2 | // Part: Components 3 | // 4 | 5 | @import '../forms'; 6 | @import '../progress-bars'; 7 | @import '../cards'; 8 | @import '../modals'; 9 | @import '../toasts'; 10 | @import '../buttons'; 11 | @import '../callout'; 12 | @import '../alerts'; 13 | @import '../table'; 14 | @import '../carousel'; 15 | -------------------------------------------------------------------------------- /admin/build/scss/parts/_core.scss: -------------------------------------------------------------------------------- 1 | // 2 | // Part: Core 3 | // 4 | 5 | @import '../layout'; 6 | @import '../main-header'; 7 | @import '../brand'; 8 | @import '../main-sidebar'; 9 | @import '../sidebar-mini'; 10 | @import '../control-sidebar'; 11 | @import '../dropdown'; 12 | @import '../navs'; 13 | -------------------------------------------------------------------------------- /admin/build/scss/parts/_extra-components.scss: -------------------------------------------------------------------------------- 1 | // 2 | // Part: Extra Components 3 | // 4 | 5 | @import '../small-box'; 6 | @import '../info-box'; 7 | @import '../timeline'; 8 | @import '../products'; 9 | @import '../direct-chat'; 10 | @import '../users-list'; 11 | @import '../social-widgets'; 12 | -------------------------------------------------------------------------------- /admin/build/scss/parts/_miscellaneous.scss: -------------------------------------------------------------------------------- 1 | // 2 | // Part: Miscellaneous 3 | // 4 | 5 | @import '../miscellaneous'; 6 | @import '../print'; 7 | @import '../text'; 8 | @import '../elevation'; 9 | @import '../colors'; 10 | -------------------------------------------------------------------------------- /admin/build/scss/parts/_pages.scss: -------------------------------------------------------------------------------- 1 | // 2 | // Part: Pages 3 | // 4 | 5 | @import '../pages/mailbox'; 6 | @import '../pages/lockscreen'; 7 | @import '../pages/login_and_register'; 8 | @import '../pages/404_500_errors'; 9 | @import '../pages/invoice'; 10 | @import '../pages/profile'; 11 | @import '../pages/e-commerce'; 12 | @import '../pages/projects'; 13 | -------------------------------------------------------------------------------- /admin/build/scss/parts/_plugins.scss: -------------------------------------------------------------------------------- 1 | // 2 | // Part: Plugins 3 | // 4 | 5 | @import '../plugins/mixins'; 6 | @import '../plugins/fullcalendar'; 7 | @import '../plugins/select2'; 8 | @import '../plugins/bootstrap-slider'; 9 | @import '../plugins/icheck-bootstrap'; 10 | @import '../plugins/mapael'; 11 | @import '../plugins/jqvmap'; 12 | @import '../plugins/sweetalert2'; 13 | @import '../plugins/toastr'; 14 | @import '../plugins/pace'; 15 | @import '../plugins/bootstrap-switch'; 16 | @import '../plugins/miscellaneous'; 17 | -------------------------------------------------------------------------------- /admin/build/scss/plugins/_bootstrap-slider.scss: -------------------------------------------------------------------------------- 1 | // 2 | // Plugin: Bootstrap Slider 3 | // 4 | 5 | // Tooltip fix 6 | .slider .tooltip.in { 7 | opacity: $tooltip-opacity; 8 | } 9 | 10 | // Style override 11 | .slider { 12 | &.slider-vertical { 13 | height: 100%; 14 | } 15 | &.slider-horizontal { 16 | width: 100%; 17 | } 18 | } 19 | 20 | // Colors 21 | @each $name, $color in $theme-colors { 22 | .slider-#{$name} .slider { 23 | .slider-selection { 24 | background: $color; 25 | } 26 | } 27 | } 28 | 29 | @each $name, $color in $colors { 30 | .slider-#{$name} .slider { 31 | .slider-selection { 32 | background: $color; 33 | } 34 | } 35 | } 36 | -------------------------------------------------------------------------------- /admin/build/scss/plugins/_bootstrap-switch.scss: -------------------------------------------------------------------------------- 1 | /** 2 | * bootstrap-switch - Turn checkboxes and radio buttons into toggle switches. 3 | * 4 | * @version v3.4 (MODDED) 5 | * @homepage https://bttstrp.github.io/bootstrap-switch 6 | * @author Mattia Larentis (http://larentis.eu) 7 | * @license MIT 8 | */ 9 | 10 | $bootstrap-switch-border-radius: $btn-border-radius; 11 | $bootstrap-switch-handle-border-radius: .1rem; 12 | 13 | .bootstrap-switch { 14 | border: $input-border-width solid $input-border-color; 15 | border-radius: $bootstrap-switch-border-radius; 16 | cursor: pointer; 17 | direction: ltr; 18 | display: inline-block; 19 | line-height: .5rem; 20 | overflow: hidden; 21 | position: relative; 22 | text-align: left; 23 | transition: border-color ease-in-out .15s, box-shadow ease-in-out .15s; 24 | user-select: none; 25 | vertical-align: middle; 26 | z-index: 0; 27 | 28 | .bootstrap-switch-container { 29 | border-radius: $bootstrap-switch-border-radius; 30 | display: inline-block; 31 | top: 0; 32 | transform: translate3d(0, 0, 0); 33 | 34 | } 35 | 36 | &:focus-within { 37 | box-shadow: $input-btn-focus-box-shadow; 38 | } 39 | 40 | .bootstrap-switch-handle-on, 41 | .bootstrap-switch-handle-off, 42 | .bootstrap-switch-label { 43 | box-sizing: border-box; 44 | cursor: pointer; 45 | display: table-cell; 46 | font-size: 1rem; 47 | font-weight: 500; 48 | line-height: 1.2rem; 49 | padding: .25rem .5rem; 50 | vertical-align: middle; 51 | } 52 | 53 | .bootstrap-switch-handle-on, 54 | .bootstrap-switch-handle-off { 55 | text-align: center; 56 | z-index: 1; 57 | 58 | &.bootstrap-switch-default { 59 | background: $gray-200; 60 | color: color-yiq($gray-200); 61 | } 62 | 63 | @each $name, $color in $theme-colors { 64 | &.bootstrap-switch-#{$name} { 65 | background: $color; 66 | color: color-yiq($color); 67 | } 68 | } 69 | 70 | @each $name, $color in $colors { 71 | &.bootstrap-switch-#{$name} { 72 | background: $color; 73 | color: color-yiq($color); 74 | } 75 | } 76 | } 77 | 78 | .bootstrap-switch-handle-on { 79 | border-bottom-left-radius: $bootstrap-switch-handle-border-radius; 80 | border-top-left-radius: $bootstrap-switch-handle-border-radius; 81 | } 82 | 83 | .bootstrap-switch-handle-off { 84 | border-bottom-right-radius: $bootstrap-switch-handle-border-radius; 85 | border-top-right-radius: $bootstrap-switch-handle-border-radius; 86 | } 87 | 88 | input[type='radio'], 89 | input[type='checkbox'] { 90 | filter: alpha(opacity=0); 91 | left: 0; 92 | margin: 0; 93 | opacity: 0; 94 | position: absolute; 95 | top: 0; 96 | visibility: hidden; 97 | z-index: -1; 98 | } 99 | 100 | &.bootstrap-switch-mini { 101 | .bootstrap-switch-handle-on, 102 | .bootstrap-switch-handle-off, 103 | .bootstrap-switch-label { 104 | font-size: .875rem; 105 | line-height: 1.5; 106 | padding: .1rem .3rem; 107 | } 108 | } 109 | 110 | &.bootstrap-switch-small { 111 | .bootstrap-switch-handle-on, 112 | .bootstrap-switch-handle-off, 113 | .bootstrap-switch-label { 114 | font-size: .875rem; 115 | line-height: 1.5; 116 | padding: .2rem .4rem; 117 | } 118 | } 119 | 120 | &.bootstrap-switch-large { 121 | .bootstrap-switch-handle-on, 122 | .bootstrap-switch-handle-off, 123 | .bootstrap-switch-label { 124 | font-size: 1.25rem; 125 | line-height: 1.3333333rem; 126 | padding: .3rem .5rem; 127 | } 128 | } 129 | 130 | &.bootstrap-switch-disabled, 131 | &.bootstrap-switch-readonly, 132 | &.bootstrap-switch-indeterminate { 133 | cursor: default; 134 | 135 | .bootstrap-switch-handle-on, 136 | .bootstrap-switch-handle-off, 137 | .bootstrap-switch-label { 138 | cursor: default; 139 | filter: alpha(opacity=50); 140 | opacity: .5; 141 | } 142 | } 143 | 144 | &.bootstrap-switch-animate .bootstrap-switch-container { 145 | transition: margin-left .5s; 146 | } 147 | 148 | &.bootstrap-switch-inverse { 149 | .bootstrap-switch-handle-on { 150 | border-radius: 0 $bootstrap-switch-handle-border-radius $bootstrap-switch-handle-border-radius 0; 151 | } 152 | 153 | .bootstrap-switch-handle-off { 154 | border-radius: $bootstrap-switch-handle-border-radius 0 0 $bootstrap-switch-handle-border-radius; 155 | } 156 | } 157 | 158 | // &.bootstrap-switch-focused { 159 | // border-color: $input-btn-focus-color; 160 | // box-shadow: $input-btn-focus-box-shadow; 161 | // outline: 0; 162 | // } 163 | 164 | &.bootstrap-switch-on .bootstrap-switch-label, 165 | &.bootstrap-switch-inverse.bootstrap-switch-off .bootstrap-switch-label { 166 | border-bottom-right-radius: $bootstrap-switch-handle-border-radius; 167 | border-top-right-radius: $bootstrap-switch-handle-border-radius; 168 | } 169 | 170 | &.bootstrap-switch-off .bootstrap-switch-label, 171 | &.bootstrap-switch-inverse.bootstrap-switch-on .bootstrap-switch-label { 172 | border-bottom-left-radius: $bootstrap-switch-handle-border-radius; 173 | border-top-left-radius: $bootstrap-switch-handle-border-radius; 174 | } 175 | } 176 | -------------------------------------------------------------------------------- /admin/build/scss/plugins/_fullcalendar.scss: -------------------------------------------------------------------------------- 1 | // 2 | // Plugin: Full Calendar 3 | // 4 | 5 | // Buttons 6 | .fc-button { 7 | background: $gray-100; 8 | background-image: none; 9 | border-bottom-color: #ddd; 10 | border-color: #ddd; 11 | color: $gray-700; 12 | 13 | &:hover, 14 | &:active, 15 | &.hover { 16 | background-color: #e9e9e9; 17 | } 18 | } 19 | 20 | // Calendar title 21 | .fc-header-title h2 { 22 | color: #666; 23 | font-size: 15px; 24 | line-height: 1.6em; 25 | margin-left: 10px; 26 | } 27 | 28 | .fc-header-right { 29 | padding-right: 10px; 30 | } 31 | 32 | .fc-header-left { 33 | padding-left: 10px; 34 | } 35 | 36 | // Calendar table header cells 37 | .fc-widget-header { 38 | background: #fafafa; 39 | } 40 | 41 | .fc-grid { 42 | border: 0; 43 | width: 100%; 44 | } 45 | 46 | .fc-widget-header:first-of-type, 47 | .fc-widget-content:first-of-type { 48 | border-left: 0; 49 | border-right: 0; 50 | } 51 | 52 | .fc-widget-header:last-of-type, 53 | .fc-widget-content:last-of-type { 54 | border-right: 0; 55 | } 56 | 57 | .fc-toolbar, 58 | .fc-toolbar.fc-header-toolbar { 59 | margin: 0; 60 | padding: 1rem; 61 | } 62 | 63 | @include media-breakpoint-down(xs) { 64 | .fc-toolbar { 65 | flex-direction: column; 66 | 67 | .fc-left { 68 | order: 1; 69 | margin-bottom: .5rem; 70 | } 71 | 72 | .fc-center { 73 | order: 0; 74 | margin-bottom: .375rem; 75 | } 76 | 77 | .fc-right { 78 | order: 2; 79 | } 80 | } 81 | } 82 | 83 | .fc-day-number { 84 | font-size: 20px; 85 | font-weight: 300; 86 | padding-right: 10px; 87 | } 88 | 89 | .fc-color-picker { 90 | list-style: none; 91 | margin: 0; 92 | padding: 0; 93 | 94 | > li { 95 | float: left; 96 | font-size: 30px; 97 | line-height: 30px; 98 | margin-right: 5px; 99 | 100 | .fa, 101 | .fas, 102 | .far, 103 | .fab, 104 | .glyphicon, 105 | .ion { 106 | transition: transform linear .3s; 107 | 108 | &:hover { 109 | @include rotate(30deg); 110 | } 111 | } 112 | } 113 | } 114 | 115 | #add-new-event { 116 | transition: all linear .3s; 117 | } 118 | 119 | .external-event { 120 | @include box-shadow($card-shadow); 121 | 122 | border-radius: $border-radius; 123 | cursor: move; 124 | font-weight: bold; 125 | margin-bottom: 4px; 126 | padding: 5px 10px; 127 | 128 | &:hover { 129 | @include box-shadow(inset 0 0 90px rgba(0, 0, 0, 0.2)); 130 | } 131 | } 132 | -------------------------------------------------------------------------------- /admin/build/scss/plugins/_icheck-bootstrap.scss: -------------------------------------------------------------------------------- 1 | // 2 | // Plugin: iCheck Bootstrap 3 | // 4 | 5 | // iCheck colors (theme colors) 6 | @each $name, $color in $theme-colors { 7 | .icheck-#{$name} > input:first-child:not(:checked):not(:disabled):hover + label::before, 8 | .icheck-#{$name} > input:first-child:not(:checked):not(:disabled):hover + input[type="hidden"] + label::before { 9 | border-color: #{$color}; 10 | } 11 | 12 | .icheck-#{$name} > input:first-child:not(:checked):not(:disabled):focus + label::before, 13 | .icheck-#{$name} > input:first-child:not(:checked):not(:disabled):focus + input[type="hidden"] + label::before { 14 | border-color: #{$color}; 15 | } 16 | 17 | .icheck-#{$name} > input:first-child:checked + label::before, 18 | .icheck-#{$name} > input:first-child:checked + input[type="hidden"] + label::before { 19 | background-color: #{$color}; 20 | border-color: #{$color}; 21 | } 22 | } 23 | 24 | // iCheck colors (colors) 25 | @each $name, $color in $colors { 26 | .icheck-#{$name} > input:first-child:not(:checked):not(:disabled):hover + label::before, 27 | .icheck-#{$name} > input:first-child:not(:checked):not(:disabled):hover + input[type="hidden"] + label::before { 28 | border-color: #{$color}; 29 | } 30 | 31 | .icheck-#{$name} > input:first-child:not(:checked):not(:disabled):focus + label::before, 32 | .icheck-#{$name} > input:first-child:not(:checked):not(:disabled):focus + input[type="hidden"] + label::before { 33 | border-color: #{$color}; 34 | } 35 | 36 | .icheck-#{$name} > input:first-child:checked + label::before, 37 | .icheck-#{$name} > input:first-child:checked + input[type="hidden"] + label::before { 38 | background-color: #{$color}; 39 | border-color: #{$color}; 40 | } 41 | } 42 | -------------------------------------------------------------------------------- /admin/build/scss/plugins/_jqvmap.scss: -------------------------------------------------------------------------------- 1 | // 2 | // Plugins: JQVMap 3 | // 4 | 5 | // Zoom Button size fixes 6 | .jqvmap-zoomin, 7 | .jqvmap-zoomout { 8 | background-color: $button-default-background-color; 9 | border: 1px solid $button-default-border-color; 10 | border-radius: $btn-border-radius; 11 | color: $button-default-color; 12 | height: 15px; 13 | width: 15px; 14 | 15 | &:hover, 16 | &:active, 17 | &.hover { 18 | background-color: darken($button-default-background-color, 5%); 19 | color: darken($button-default-color, 10%); 20 | } 21 | } 22 | -------------------------------------------------------------------------------- /admin/build/scss/plugins/_mapael.scss: -------------------------------------------------------------------------------- 1 | // 2 | // Plugins: jQuery Mapael 3 | // 4 | 5 | .mapael { 6 | .map { 7 | position: relative; 8 | } 9 | 10 | .mapTooltip { 11 | @include reset-text(); 12 | @include border-radius($tooltip-border-radius); 13 | @include font-size($tooltip-font-size); 14 | background-color: $tooltip-bg; 15 | color: $tooltip-color; 16 | display: block; 17 | max-width: $tooltip-max-width; 18 | padding: $tooltip-padding-y $tooltip-padding-x; 19 | position: absolute; 20 | text-align: center; 21 | word-wrap: break-word; 22 | z-index: $zindex-tooltip; 23 | } 24 | 25 | .myLegend { 26 | background-color: $gray-100; 27 | border: 1px solid $gray-500; 28 | padding: 10px; 29 | width: 600px; 30 | } 31 | 32 | .zoomButton { 33 | background-color: $button-default-background-color; 34 | border: 1px solid $button-default-border-color; 35 | border-radius: $btn-border-radius; 36 | color: $button-default-color; 37 | cursor: pointer; 38 | font-weight: bold; 39 | height: 16px; 40 | left: 10px; 41 | line-height: 14px; 42 | padding-left: 1px; 43 | position: absolute; 44 | text-align: center; 45 | top: 0; 46 | 47 | user-select: none; 48 | width: 16px; 49 | 50 | &:hover, 51 | &:active, 52 | &.hover { 53 | background-color: darken($button-default-background-color, 5%); 54 | color: darken($button-default-color, 10%); 55 | } 56 | } 57 | 58 | .zoomReset { 59 | line-height: 12px; 60 | top: 10px; 61 | } 62 | 63 | .zoomIn { 64 | top: 30px; 65 | } 66 | 67 | .zoomOut { 68 | top: 50px; 69 | } 70 | } 71 | -------------------------------------------------------------------------------- /admin/build/scss/plugins/_miscellaneous.scss: -------------------------------------------------------------------------------- 1 | // 2 | // Plugins: Miscellaneous 3 | // Old plugin codes 4 | // 5 | 6 | // _fix for sparkline tooltip 7 | .jqstooltip { 8 | height: auto !important; 9 | padding: 5px !important; 10 | width: auto !important; 11 | } 12 | 13 | // jQueryUI 14 | .connectedSortable { 15 | min-height: 100px; 16 | } 17 | 18 | .ui-helper-hidden-accessible { 19 | border: 0; 20 | clip: rect(0 0 0 0); 21 | height: 1px; 22 | margin: -1px; 23 | overflow: hidden; 24 | padding: 0; 25 | position: absolute; 26 | width: 1px; 27 | } 28 | 29 | .sort-highlight { 30 | background: $gray-100; 31 | border: 1px dashed $gray-300; 32 | margin-bottom: 10px; 33 | } 34 | 35 | // Charts 36 | .chart { 37 | overflow: hidden; 38 | position: relative; 39 | } 40 | -------------------------------------------------------------------------------- /admin/build/scss/plugins/_mixins.scss: -------------------------------------------------------------------------------- 1 | // 2 | // General: Mixins 3 | // 4 | 5 | // Select2 Variant 6 | @mixin select2-variant($name, $color) { 7 | .select2-#{$name} { 8 | 9 | + .select2-container--default { 10 | &.select2-container--open { 11 | .select2-selection--single { 12 | border-color: lighten($color, 25%); 13 | } 14 | } 15 | 16 | &.select2-container--focus .select2-selection--single { 17 | border-color: lighten($color, 25%); 18 | } 19 | } 20 | 21 | .select2-container--default &, 22 | .select2-container--default { 23 | &.select2-dropdown, 24 | .select2-dropdown, 25 | .select2-search--inline { 26 | .select2-search__field { 27 | &:focus { 28 | border: $input-border-width solid lighten($color, 25%); 29 | } 30 | } 31 | } 32 | 33 | .select2-results__option--highlighted { 34 | background-color: $color; 35 | color: color-yiq($color); 36 | 37 | &[aria-selected] { 38 | &, 39 | &:hover { 40 | background-color: darken($color, 3%); 41 | color: color-yiq(darken($color, 3%)); 42 | } 43 | } 44 | } 45 | 46 | //Multiple select 47 | & { 48 | .select2-selection--multiple { 49 | &:focus { 50 | border-color: lighten($color, 25%); 51 | } 52 | 53 | .select2-selection__choice { 54 | background-color: $color; 55 | border-color: darken($color, 5%); 56 | color: color-yiq($color); 57 | } 58 | 59 | .select2-selection__choice__remove { 60 | color: rgba(color-yiq($color), 0.7); 61 | 62 | &:hover { 63 | color: color-yiq($color); 64 | } 65 | } 66 | } 67 | 68 | &.select2-container--focus .select2-selection--multiple { 69 | border-color: lighten($color, 25%); 70 | } 71 | } 72 | } 73 | } 74 | } 75 | -------------------------------------------------------------------------------- /admin/build/scss/plugins/_pace.scss: -------------------------------------------------------------------------------- 1 | // 2 | // Plugin: Pace 3 | // 4 | 5 | .pace { 6 | z-index: $zindex-main-sidebar + 10; 7 | 8 | .pace-progress { 9 | z-index: $zindex-main-sidebar + 11; 10 | } 11 | 12 | .pace-activity { 13 | z-index: $zindex-main-sidebar + 12; 14 | } 15 | } 16 | 17 | // Mixin 18 | @mixin pace-variant($name, $color) { 19 | .pace-#{$name} { 20 | .pace { 21 | .pace-progress { 22 | background: $color; 23 | } 24 | } 25 | } 26 | 27 | .pace-barber-shop-#{$name} { 28 | .pace { 29 | background: color-yiq($color); 30 | 31 | .pace-progress { 32 | background: $color; 33 | } 34 | 35 | .pace-activity { 36 | background-image: linear-gradient(45deg, rgba(color-yiq($color), 0.2) 25%, transparent 25%, transparent 50%, rgba(color-yiq($color), 0.2) 50%, rgba(color-yiq($color), 0.2) 75%, transparent 75%, transparent); 37 | } 38 | } 39 | } 40 | 41 | .pace-big-counter-#{$name} { 42 | .pace { 43 | .pace-progress::after { 44 | color: rgba($color, .19999999999999996); 45 | } 46 | } 47 | } 48 | 49 | .pace-bounce-#{$name} { 50 | .pace { 51 | .pace-activity { 52 | background: $color; 53 | } 54 | } 55 | } 56 | 57 | .pace-center-atom-#{$name} { 58 | .pace-progress { 59 | height: 100px; 60 | width: 80px; 61 | 62 | &::before { 63 | background: $color; 64 | color: color-yiq($color); 65 | font-size: .8rem; 66 | line-height: .7rem; 67 | padding-top: 17%; 68 | } 69 | } 70 | 71 | .pace-activity { 72 | border-color: $color; 73 | 74 | &::after, 75 | &::before { 76 | border-color: $color; 77 | } 78 | } 79 | } 80 | 81 | .pace-center-circle-#{$name} { 82 | .pace { 83 | .pace-progress { 84 | background: rgba($color, .8); 85 | color: color-yiq($color); 86 | } 87 | } 88 | } 89 | 90 | .pace-center-radar-#{$name} { 91 | .pace { 92 | .pace-activity { 93 | border-color: $color transparent transparent; 94 | } 95 | 96 | .pace-activity::before { 97 | border-color: $color transparent transparent; 98 | } 99 | } 100 | } 101 | 102 | .pace-center-simple-#{$name} { 103 | .pace { 104 | background: color-yiq($color); 105 | border-color: $color; 106 | 107 | .pace-progress { 108 | background: $color; 109 | } 110 | } 111 | } 112 | 113 | .pace-material-#{$name} { 114 | .pace { 115 | color: $color; 116 | } 117 | } 118 | 119 | .pace-corner-indicator-#{$name} { 120 | .pace { 121 | .pace-activity { 122 | background: $color; 123 | } 124 | 125 | .pace-activity::after, 126 | .pace-activity::before { 127 | border: 5px solid color-yiq($color); 128 | } 129 | 130 | 131 | .pace-activity::before { 132 | border-right-color: rgba($color, .2); 133 | border-left-color: rgba($color, .2); 134 | } 135 | 136 | .pace-activity::after { 137 | border-top-color: rgba($color, .2); 138 | border-bottom-color: rgba($color, .2); 139 | } 140 | } 141 | } 142 | 143 | .pace-fill-left-#{$name} { 144 | .pace { 145 | .pace-progress { 146 | background-color: rgba($color, 0.19999999999999996); 147 | } 148 | } 149 | } 150 | 151 | .pace-flash-#{$name} { 152 | .pace { 153 | .pace-progress { 154 | background: $color; 155 | } 156 | 157 | .pace-progress-inner { 158 | box-shadow: 0 0 10px $color, 0 0 5px $color; 159 | } 160 | 161 | .pace-activity { 162 | border-top-color: $color; 163 | border-left-color: $color; 164 | } 165 | } 166 | } 167 | 168 | .pace-loading-bar-#{$name} { 169 | .pace { 170 | .pace-progress { 171 | background: $color; 172 | color: $color; 173 | box-shadow: 120px 0 color-yiq($color), 240px 0 color-yiq($color); 174 | } 175 | 176 | .pace-activity { 177 | box-shadow: inset 0 0 0 2px $color, inset 0 0 0 7px color-yiq($color); 178 | } 179 | } 180 | } 181 | 182 | .pace-mac-osx-#{$name} { 183 | .pace { 184 | .pace-progress { 185 | background-color: $color; 186 | box-shadow: inset -1px 0 $color, inset 0 -1px $color, inset 0 2px rgba(color-yiq($color), 0.5), inset 0 6px rgba(color-yiq($color), .3); 187 | } 188 | 189 | .pace-activity { 190 | background-image: radial-gradient(rgba(color-yiq($color), .65) 0%, rgba(color-yiq($color), .15) 100%); 191 | height: 12px; 192 | } 193 | } 194 | } 195 | 196 | .pace-progress-color-#{$name} { 197 | .pace-progress { 198 | color: $color; 199 | } 200 | } 201 | } 202 | 203 | 204 | @each $name, $color in $theme-colors { 205 | @include pace-variant($name, $color); 206 | } 207 | 208 | @each $name, $color in $colors { 209 | @include pace-variant($name, $color); 210 | } 211 | 212 | -------------------------------------------------------------------------------- /admin/build/scss/plugins/_sweetalert2.scss: -------------------------------------------------------------------------------- 1 | // 2 | // Plugin: SweetAlert2 3 | // 4 | 5 | // Icon Colors 6 | .swal2-icon { 7 | &.swal2-info { 8 | border-color: ligthen($info, 20%); 9 | color: $info; 10 | } 11 | 12 | &.swal2-warning { 13 | border-color: ligthen($warning, 20%); 14 | color: $warning; 15 | } 16 | 17 | &.swal2-error { 18 | border-color: ligthen($danger, 20%); 19 | color: $danger; 20 | } 21 | 22 | &.swal2-question { 23 | border-color: ligthen($secondary, 20%); 24 | color: $secondary; 25 | } 26 | 27 | &.swal2-success { 28 | border-color: ligthen($success, 20%); 29 | color: $success; 30 | 31 | .swal2-success-ring { 32 | border-color: ligthen($success, 20%); 33 | } 34 | 35 | [class^='swal2-success-line'] { 36 | background-color: $success; 37 | } 38 | } 39 | 40 | } 41 | -------------------------------------------------------------------------------- /admin/build/scss/plugins/_toastr.scss: -------------------------------------------------------------------------------- 1 | // 2 | // Plugin: Toastr 3 | // 4 | 5 | // Background to FontAwesome Icons 6 | // #toast-container > .toast { 7 | // background-image: none !important; 8 | // } 9 | // #toast-container > .toast .toast-message:before { 10 | // font-family: 'Font Awesome 5 Free'; 11 | // font-size: 24px; 12 | // font-weight: 900; 13 | // line-height: 18px; 14 | // float: left; 15 | // color: #FFF; 16 | // padding-right: 0.5em; 17 | // margin: auto 0.5em auto -1.5em; 18 | // } 19 | // #toast-container > .toast-warning .toast-message:before { 20 | // content: "\f06a"; 21 | // } 22 | // #toast-container > .toast-error .toast-message:before { 23 | // content: "\f071"; 24 | // } 25 | // #toast-container > .toast-info .toast-message:before { 26 | // content: "\f05a"; 27 | // } 28 | // #toast-container > .toast-success .toast-message:before { 29 | // content: "\f058"; 30 | // } 31 | 32 | 33 | #toast-container { 34 | // Background color 35 | .toast { 36 | background-color: $primary; 37 | } 38 | 39 | .toast-success { 40 | background-color: $success; 41 | } 42 | 43 | .toast-error { 44 | background-color: $danger; 45 | } 46 | 47 | .toast-info { 48 | background-color: $info; 49 | } 50 | 51 | .toast-warning { 52 | background-color: $warning; 53 | } 54 | } 55 | 56 | // full width fix 57 | .toast-bottom-full-width .toast, 58 | .toast-top-full-width .toast { 59 | max-width: inherit; 60 | } 61 | -------------------------------------------------------------------------------- /admin/delete.php: -------------------------------------------------------------------------------- 1 | 15 | 29 | error); 32 | 33 | // Escape variable 34 | $id = $conn->real_escape_string($_GET['id']); 35 | 36 | if (count($_POST) > 0) { 37 | $sql = "DELETE FROM tutorials WHERE id = {$_POST['id']}"; 38 | mysqli_query($conn, "ALTER TABLE tutorials AUTO_INCREMENT = 1"); 39 | } 40 | ?> 41 | 45 | 46 |
47 | 48 |
49 |
50 |
51 |
52 |

Tutorials

53 |
54 |
55 | 60 |
61 |
62 |
63 |
64 | 65 | 66 | 67 |
68 |
69 |
70 |
71 | 0) { 73 | if ($conn->query($sql) === true) { 74 | echo '

Success!

'; 75 | } else { 76 | echo "Error deleting record: " . $conn->error; 77 | } 78 | } else { 79 | ?> 80 |
81 |
82 | 83 |
84 |
Are you sure you want to delete this Tutorial?
85 |
86 |

Tutorial Title:

87 | Are you sure?

88 |

89 |
90 |
91 | 94 |
95 |
96 | 97 | 98 |
99 |
100 | 101 |
102 | 103 | 104 | 107 | 108 | 109 | 110 | 111 | 112 | 113 | 114 | 115 | 116 | 117 | 118 | 119 | -------------------------------------------------------------------------------- /admin/dist/css/alt/index.php: -------------------------------------------------------------------------------- 1 | 16 | 20 | 21 | 22 |
23 | 24 |
25 |
26 |
27 |
28 |

Getting Started

29 |
30 |
31 | 35 |
36 |
37 |
38 |
39 | 40 | 41 | 42 |
43 |
44 |
45 |
46 |
47 |
Welcome! This is a short guide on how to get started with 'Tutorials Site CMS V':
48 |
49 |

1) For security reasons change the admin's password here

50 |

2) Then go to Configuration and replace name, logo, favicon etc. with your preferred one's.

51 |

3) You can add tutorials at the the Tutorials Section

52 |

You're ready to go! You may start linking your tutorials url with your site so clients can watch your video tutorials!

53 | TIP: You can make modifications at the script and customize it for your own needs! 54 |
55 |
56 |
57 |
58 | 59 | 60 |
61 |
62 | 63 |
64 | 65 | 66 | 69 | 70 | 71 | 72 | 73 | 74 | 75 | 76 | 77 | 78 | 79 | 80 | 81 | -------------------------------------------------------------------------------- /admin/includes/export.php: -------------------------------------------------------------------------------- 1 | 0) { 21 | while ($row = mysqli_fetch_assoc($result)) { 22 | $tutorials[] = $row; 23 | } 24 | } 25 | 26 | $filename = 'tutorials_export.json'; 27 | // file creation 28 | $file = fopen($filename, "w"); 29 | 30 | fwrite($file, json_encode($tutorials)); 31 | 32 | fclose($file); 33 | 34 | // download 35 | header("Content-Description: File Transfer"); 36 | header("Content-Disposition: attachment; filename=" . $filename); 37 | 38 | readfile($filename); 39 | 40 | // deleting file 41 | unlink($filename); 42 | -------------------------------------------------------------------------------- /admin/includes/import.php: -------------------------------------------------------------------------------- 1 | prepare($query); 13 | 14 | $stmt->bind_param('ssss', $values['title'], $values['description'], $values['videourl'], $values['body']); 15 | 16 | $stmt->execute(); 17 | } 18 | 19 | $target_dir = "../includes/"; 20 | $target_file = $target_dir . basename($_FILES["fileToUpload"]["name"]); 21 | $uploadOk = 1; 22 | $ext = strtolower(pathinfo($target_file, PATHINFO_EXTENSION)); 23 | 24 | // Check if file already exists 25 | if (file_exists($target_file)) { 26 | $uploadOk = 0; 27 | } 28 | 29 | // Check file size 30 | if ($_FILES["fileToUpload"]["size"] > 10485760) { 31 | $uploadOk = 0; 32 | } 33 | 34 | if ($ext == 'json') { 35 | $uploadOk = 1; 36 | } else { 37 | $uploadOk = 0; 38 | } 39 | 40 | // Check if $uploadOk is set to 0 by an error 41 | if ($uploadOk == 0) { 42 | header('Location: ../backup.php?error'); 43 | // if everything is ok, try to upload file 44 | } else { 45 | if (move_uploaded_file($_FILES["fileToUpload"]["tmp_name"], $target_file)) { 46 | echo "The file " . htmlspecialchars(basename($_FILES["fileToUpload"]["name"])) . " has been uploaded."; 47 | $import = file_get_contents($target_file); 48 | $json = json_decode($import, true); 49 | foreach ($json as $arr) { 50 | $values = array('title' => $arr['title'], 'description' => $arr['description'], 'videourl' => $arr['videourl'], 'body' => $arr['body']); 51 | add_to_database($values); 52 | } 53 | unlink($target_file); 54 | header('Location: ../backup.php?success'); 55 | return; 56 | } else { 57 | header('Location: ../backup.php?error'); 58 | } 59 | } 60 | 61 | unlink($target_file); 62 | header('Location: ../backup.php?error'); 63 | -------------------------------------------------------------------------------- /admin/index.php: -------------------------------------------------------------------------------- 1 | 19 | 23 | 24 | 25 |
26 | 27 |
28 |
29 |
30 |
31 |

Dashboard

32 |
33 |
34 | 37 |
38 |
39 |
40 |
41 | 42 | 43 | 44 |
45 |
46 |
47 |
48 |
49 |
50 | 51 |
52 |
53 |

54 | 55 |

Tutorials

56 |
57 |
58 | 59 |
60 | 61 | Manage your tutorials 62 | 63 |
64 |
65 |
66 | 67 |
68 |
69 |

70 | 71 |

Have questions?

72 |
73 |
74 | 75 |
76 | 77 | Ask for help 78 | 79 |
80 |
81 | 82 | 83 |
84 |
85 |
86 | 87 | 88 |
89 |
90 | 91 |
92 | 93 | 94 | 97 | 98 | 99 | 100 | 101 | 102 | 103 | 104 | 105 | 106 | 107 | 108 | 109 | -------------------------------------------------------------------------------- /admin/login.php: -------------------------------------------------------------------------------- 1 | You have been successfully logged out

'; 7 | } 8 | } 9 | include 'authenticate.php'; 10 | ?> 11 | 12 | 13 | 15 | 16 | 17 | 18 | Tutorials Site CMS | Log in 19 | 20 | 21 | 22 | 23 | 24 | 25 | 26 | 27 | 28 | 29 | 30 | 31 | 32 | 33 | 34 | 35 |