Compare commits

..

742 Commits

Author SHA1 Message Date
REJack
17aea0e4ef Merge pull request #3146 from danny007in/layout-size-fix
layout size bug fixed
2020-11-25 11:51:19 +01:00
REJack
3b6279ac38 fix faq demo links 2020-11-25 11:16:29 +01:00
REJack
087891fdf7 build dist files 2020-11-25 10:33:30 +01:00
REJack
82fb5d5f80 update dependencies 2020-11-25 10:31:52 +01:00
REJack
12c6c12907 add missing plugin notice 2020-11-25 10:15:53 +01:00
REJack
2ee68002ab fix version dropdown in docs 2020-11-25 10:13:29 +01:00
REJack
784eae413d update docs link 2020-11-25 10:12:46 +01:00
Daniel
0a70c3c89f layout size bug fixed 2020-11-25 14:22:20 +05:30
REJack
5993872f8b build dist files 2020-11-25 09:16:01 +01:00
REJack
ba3bf53809 bump version to v3.1.0-rc 2020-11-25 09:15:50 +01:00
REJack
a2df402653 update codemirror plugin files 2020-11-25 09:00:43 +01:00
REJack
4bbf746378 update plugin files 2020-11-25 09:00:26 +01:00
REJack
a33f74e503 add uplot charts 2020-11-25 08:59:41 +01:00
REJack
6b48a268c5 Merge pull request #3069 from ColorlibHQ/feat/iframe-plugin
IFrame plugin
2020-11-25 07:58:23 +01:00
Daniel
5d10674dc5 Update README.md (#3118)
Co-authored-by: REJack <info@rejack.de>
2020-11-25 07:53:27 +01:00
Nisar Hassan Naqvi
dfdb0f0665 make contributions easier via automating the dev setup. (#3110) 2020-11-25 07:51:27 +01:00
Michael Yang
a182ecfa69 Update _main-sidebar.scss (#3082)
fixed scrollbar show in sidebar
2020-11-25 07:50:13 +01:00
REJack
72ed5c36d4 bump bundlewatch sizes 2020-11-25 07:48:43 +01:00
dependabot[bot]
82d6e78508 Bump terser from 5.3.2 to 5.5.0 (#3142)
Bumps [terser](https://github.com/terser/terser) from 5.3.2 to 5.5.0.
- [Release notes](https://github.com/terser/terser/releases)
- [Changelog](https://github.com/terser/terser/blob/master/CHANGELOG.md)
- [Commits](https://github.com/terser/terser/compare/v5.3.2...v5.5.0)

Signed-off-by: dependabot[bot] <support@github.com>

Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
2020-11-25 07:47:52 +01:00
dependabot[bot]
2997df7d63 Bump rollup from 2.28.2 to 2.33.3 (#3141)
Bumps [rollup](https://github.com/rollup/rollup) from 2.28.2 to 2.33.3.
- [Release notes](https://github.com/rollup/rollup/releases)
- [Changelog](https://github.com/rollup/rollup/blob/master/CHANGELOG.md)
- [Commits](https://github.com/rollup/rollup/compare/v2.28.2...v2.33.3)

Signed-off-by: dependabot[bot] <support@github.com>

Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
2020-11-25 07:47:30 +01:00
REJack
1b6767c07a Merge remote-tracking branch 'origin/master' into feat/iframe-plugin 2020-11-25 07:44:25 +01:00
dependabot[bot]
8e19ff2774 Bump codemirror from 5.58.0 to 5.58.3 (#3140)
Bumps [codemirror](https://github.com/codemirror/CodeMirror) from 5.58.0 to 5.58.3.
- [Release notes](https://github.com/codemirror/CodeMirror/releases)
- [Changelog](https://github.com/codemirror/CodeMirror/blob/master/CHANGELOG.md)
- [Commits](https://github.com/codemirror/CodeMirror/compare/5.58.0...5.58.3)

Signed-off-by: dependabot[bot] <support@github.com>

Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
2020-11-25 07:36:01 +01:00
dependabot[bot]
7966285c3a Bump eslint from 7.10.0 to 7.14.0 (#3139)
Bumps [eslint](https://github.com/eslint/eslint) from 7.10.0 to 7.14.0.
- [Release notes](https://github.com/eslint/eslint/releases)
- [Changelog](https://github.com/eslint/eslint/blob/master/CHANGELOG.md)
- [Commits](https://github.com/eslint/eslint/compare/v7.10.0...v7.14.0)

Signed-off-by: dependabot[bot] <support@github.com>

Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
2020-11-25 07:35:48 +01:00
dependabot[bot]
f0c5ef275b Bump jekyll-seo-tag from 2.6.1 to 2.7.1 in /docs (#3098)
Bumps [jekyll-seo-tag](https://github.com/jekyll/jekyll-seo-tag) from 2.6.1 to 2.7.1.
- [Release notes](https://github.com/jekyll/jekyll-seo-tag/releases)
- [Changelog](https://github.com/jekyll/jekyll-seo-tag/blob/master/History.markdown)
- [Commits](https://github.com/jekyll/jekyll-seo-tag/compare/v2.6.1...v2.7.1)

Signed-off-by: dependabot[bot] <support@github.com>

Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
2020-11-25 07:35:30 +01:00
dependabot[bot]
cb8dcbfd70 Bump moment from 2.29.0 to 2.29.1 (#3091)
Bumps [moment](https://github.com/moment/moment) from 2.29.0 to 2.29.1.
- [Release notes](https://github.com/moment/moment/releases)
- [Changelog](https://github.com/moment/moment/blob/develop/CHANGELOG.md)
- [Commits](https://github.com/moment/moment/compare/2.29.0...2.29.1)

Signed-off-by: dependabot[bot] <support@github.com>

Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
2020-11-25 07:35:13 +01:00
dependabot[bot]
4f5da1f135 Bump @fortawesome/fontawesome-free from 5.14.0 to 5.15.1 (#3090)
Bumps [@fortawesome/fontawesome-free](https://github.com/FortAwesome/Font-Awesome) from 5.14.0 to 5.15.1.
- [Release notes](https://github.com/FortAwesome/Font-Awesome/releases)
- [Changelog](https://github.com/FortAwesome/Font-Awesome/blob/master/CHANGELOG.md)
- [Commits](https://github.com/FortAwesome/Font-Awesome/compare/5.14.0...5.15.1)

Signed-off-by: dependabot[bot] <support@github.com>

Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
2020-11-25 07:34:40 +01:00
dependabot[bot]
8cb546b453 Bump datatables.net-buttons-bs4 from 1.6.4 to 1.6.5 (#3088)
Bumps [datatables.net-buttons-bs4](https://datatables.net) from 1.6.4 to 1.6.5.

Signed-off-by: dependabot[bot] <support@github.com>

Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
2020-11-25 07:34:28 +01:00
dependabot[bot]
0baf962241 Bump bundlewatch from 0.2.7 to 0.3.1 (#3077)
Bumps [bundlewatch](https://github.com/bundlewatch/bundlewatch) from 0.2.7 to 0.3.1.
- [Release notes](https://github.com/bundlewatch/bundlewatch/releases)
- [Commits](https://github.com/bundlewatch/bundlewatch/compare/v0.2.7...v0.3.1)

Signed-off-by: dependabot[bot] <support@github.com>

Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
2020-11-25 07:34:01 +01:00
dependabot[bot]
5b590f4450 Bump postcss-cli from 7.1.1 to 7.1.2 (#3076)
Bumps [postcss-cli](https://github.com/postcss/postcss-cli) from 7.1.1 to 7.1.2.
- [Release notes](https://github.com/postcss/postcss-cli/releases)
- [Changelog](https://github.com/postcss/postcss-cli/blob/master/CHANGELOG.md)
- [Commits](https://github.com/postcss/postcss-cli/compare/7.1.1...7.1.2)

Signed-off-by: dependabot[bot] <support@github.com>

Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
2020-11-25 07:33:51 +01:00
dependabot[bot]
aab8ff9605 Bump stylelint-config-twbs-bootstrap from 2.0.3 to 2.1.0 (#3074)
Bumps [stylelint-config-twbs-bootstrap](https://github.com/twbs/stylelint-config-twbs-bootstrap) from 2.0.3 to 2.1.0.
- [Release notes](https://github.com/twbs/stylelint-config-twbs-bootstrap/releases)
- [Commits](https://github.com/twbs/stylelint-config-twbs-bootstrap/compare/v2.0.3...v2.1.0)

Signed-off-by: dependabot[bot] <support@github.com>

Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
2020-11-25 07:33:32 +01:00
REJack
218376c64c fix html validator error 2020-11-25 07:33:04 +01:00
REJack
e7d9ce7ec1 npm audit fix 2020-11-24 09:39:24 +01:00
REJack
1f7db49d54 add datatables searchpanes plugin 2020-11-24 09:38:21 +01:00
REJack
f163e3c43b small demo adjustments 2020-11-24 09:28:49 +01:00
REJack
fe3bce3398 add card with image overlay demo 2020-11-24 09:27:57 +01:00
REJack
290738e916 add .main-header.dropdown-offset-legacy 2020-11-24 08:54:03 +01:00
REJack
78a6403f2b update plugin files 2020-11-24 08:16:03 +01:00
REJack
45cd9f6645 rename .fullscreen-mode to .iframe-mode-fullscreen 2020-10-03 15:43:47 +02:00
REJack
865fc053fa add iframe fullscreen mode 2020-10-03 15:43:15 +02:00
REJack
113a477618 add scroll buttons for navbar items 2020-10-03 15:12:06 +02:00
REJack
98962aeab7 enhance removeActiveTab 2020-10-03 14:31:11 +02:00
REJack
fdaedac545 fix menu links 2020-10-03 14:30:19 +02:00
REJack
16b7b87af4 Merge branch 'feat/iframe-plugin' of https://github.com/ColorlibHQ/AdminLTE into feat/iframe-plugin 2020-10-01 13:57:55 +02:00
REJack
b9e718406b bump bundlewatch js sizes 2020-10-01 13:57:36 +02:00
REJack
81b9131269 Merge branch 'master' into feat/iframe-plugin 2020-10-01 13:11:46 +02:00
Cleverson
0c3f82bc58 Smileyzn close button patch 1 (#3049)
* Removed box shadow from page-link class

Removed box shadow from page-link class

* Add close span import

Let's fix close button on dialogs like modals etc.

* Fix outline for close button

Fix outline for close button

* Fixed whitespace

Fixed whitespace
2020-09-30 14:04:10 +02:00
REJack
96836c0f85 finish iframe docs 2020-09-30 09:04:42 +02:00
REJack
a772df102d rework methods 2020-09-30 09:04:29 +02:00
REJack
15e92b4546 place iframe.html sidebar menu item 2020-09-30 09:03:11 +02:00
REJack
4b567affcd add iframe docs (1st version) 2020-09-29 15:13:49 +02:00
REJack
f0f59489f0 fix tab events 2020-09-29 08:48:41 +02:00
REJack
39f9e9e8a8 add usage for useNavbarItems 2020-09-29 08:44:17 +02:00
REJack
94867cd6b5 rename events to onTab* instead of tab* 2020-09-29 08:27:43 +02:00
dependabot[bot]
c29e2c57c9 Bump eslint-plugin-import from 2.22.0 to 2.22.1 (#3058)
Bumps [eslint-plugin-import](https://github.com/benmosher/eslint-plugin-import) from 2.22.0 to 2.22.1.
- [Release notes](https://github.com/benmosher/eslint-plugin-import/releases)
- [Changelog](https://github.com/benmosher/eslint-plugin-import/blob/master/CHANGELOG.md)
- [Commits](https://github.com/benmosher/eslint-plugin-import/compare/v2.22.0...v2.22.1)

Signed-off-by: dependabot[bot] <support@github.com>

Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
2020-09-28 09:16:22 +02:00
dependabot[bot]
0d6c6849c9 Bump stylelint from 13.6.1 to 13.7.2 (#3057)
Bumps [stylelint](https://github.com/stylelint/stylelint) from 13.6.1 to 13.7.2.
- [Release notes](https://github.com/stylelint/stylelint/releases)
- [Changelog](https://github.com/stylelint/stylelint/blob/master/CHANGELOG.md)
- [Commits](https://github.com/stylelint/stylelint/compare/13.6.1...13.7.2)

Signed-off-by: dependabot[bot] <support@github.com>

Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
2020-09-28 09:16:08 +02:00
dependabot[bot]
e2a579fd8d Bump terser from 5.3.1 to 5.3.2 (#3061)
Bumps [terser](https://github.com/terser/terser) from 5.3.1 to 5.3.2.
- [Release notes](https://github.com/terser/terser/releases)
- [Changelog](https://github.com/terser/terser/blob/master/CHANGELOG.md)
- [Commits](https://github.com/terser/terser/compare/v5.3.1...v5.3.2)

Signed-off-by: dependabot[bot] <support@github.com>

Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
2020-09-28 08:48:13 +02:00
REJack
88b30801f3 fix new eslint errors since v7.10.0 (#3064) 2020-09-28 08:25:39 +02:00
REJack
e00dce43d9 add missing form-control borrder only docs info (#3063) 2020-09-28 08:25:14 +02:00
dependabot[bot]
c195816e4f Bump moment from 2.28.0 to 2.29.0 (#3062)
Bumps [moment](https://github.com/moment/moment) from 2.28.0 to 2.29.0.
- [Release notes](https://github.com/moment/moment/releases)
- [Changelog](https://github.com/moment/moment/blob/develop/CHANGELOG.md)
- [Commits](https://github.com/moment/moment/compare/2.28.0...2.29.0)

Signed-off-by: dependabot[bot] <support@github.com>

Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
2020-09-28 08:24:43 +02:00
dependabot[bot]
3f3b153733 Bump eslint-plugin-unicorn from 21.0.0 to 22.0.0 (#3060)
Bumps [eslint-plugin-unicorn](https://github.com/sindresorhus/eslint-plugin-unicorn) from 21.0.0 to 22.0.0.
- [Release notes](https://github.com/sindresorhus/eslint-plugin-unicorn/releases)
- [Commits](https://github.com/sindresorhus/eslint-plugin-unicorn/compare/v21.0.0...v22.0.0)

Signed-off-by: dependabot[bot] <support@github.com>

Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
2020-09-28 08:24:27 +02:00
dependabot[bot]
c58530fa90 Bump @rollup/plugin-babel from 5.1.0 to 5.2.1 (#3059)
Bumps [@rollup/plugin-babel](https://github.com/rollup/plugins) from 5.1.0 to 5.2.1.
- [Release notes](https://github.com/rollup/plugins/releases)
- [Commits](https://github.com/rollup/plugins/compare/wasm-v5.1.0...babel-v5.2.1)

Signed-off-by: dependabot[bot] <support@github.com>

Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
2020-09-28 08:24:16 +02:00
dependabot[bot]
e75ab5ea33 Bump rollup from 2.26.11 to 2.28.2 (#3056)
Bumps [rollup](https://github.com/rollup/rollup) from 2.26.11 to 2.28.2.
- [Release notes](https://github.com/rollup/rollup/releases)
- [Changelog](https://github.com/rollup/rollup/blob/master/CHANGELOG.md)
- [Commits](https://github.com/rollup/rollup/compare/v2.26.11...v2.28.2)

Signed-off-by: dependabot[bot] <support@github.com>

Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
2020-09-28 08:23:35 +02:00
dependabot[bot]
fc1e85f6e3 Bump eslint from 7.9.0 to 7.10.0 (#3055)
Bumps [eslint](https://github.com/eslint/eslint) from 7.9.0 to 7.10.0.
- [Release notes](https://github.com/eslint/eslint/releases)
- [Changelog](https://github.com/eslint/eslint/blob/master/CHANGELOG.md)
- [Commits](https://github.com/eslint/eslint/compare/v7.9.0...v7.10.0)

Signed-off-by: dependabot[bot] <support@github.com>

Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
2020-09-28 08:19:34 +02:00
dependabot[bot]
9b38c0d2d5 Bump @sweetalert2/theme-bootstrap-4 from 3.2.0 to 4.0.0 (#3053)
Bumps [@sweetalert2/theme-bootstrap-4](https://github.com/sweetalert2/sweetalert2-themes) from 3.2.0 to 4.0.0.
- [Release notes](https://github.com/sweetalert2/sweetalert2-themes/releases)
- [Changelog](https://github.com/sweetalert2/sweetalert2-themes/blob/master/CHANGELOG.md)
- [Commits](https://github.com/sweetalert2/sweetalert2-themes/compare/v3.2.0...v4.0.0)

Signed-off-by: dependabot[bot] <support@github.com>

Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
2020-09-28 08:11:49 +02:00
dependabot[bot]
a68023d47d Bump sweetalert2 from 9.17.2 to 10.3.5 (#3054)
Bumps [sweetalert2](https://github.com/sweetalert2/sweetalert2) from 9.17.2 to 10.3.5.
- [Release notes](https://github.com/sweetalert2/sweetalert2/releases)
- [Changelog](https://github.com/sweetalert2/sweetalert2/blob/master/CHANGELOG.md)
- [Commits](https://github.com/sweetalert2/sweetalert2/compare/v9.17.2...v10.3.5)

Signed-off-by: dependabot[bot] <support@github.com>

Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
2020-09-28 08:11:26 +02:00
REJack
4ead90db62 Merge pull request #3046 from ColorlibHQ/feat/new-form-button-styles
new styles and demos
2020-09-25 13:49:49 +02:00
REJack
5d434cb80f fix html validator errors 2020-09-25 12:38:53 +02:00
REJack
4bf3a3ec84 raise bundlewatch limits 2020-09-25 12:35:13 +02:00
Cleverson
d01e1ac22f Removed box shadow from page-link class (#3048)
Removed box shadow from page-link class
2020-09-24 22:52:30 +02:00
REJack
0ec522caa2 fix tfoot padding in .card-body.p-0 2020-09-24 11:16:02 +02:00
REJack
04d78d238b add dark-mode checkbox in demo.js 2020-09-24 11:03:13 +02:00
REJack
3311b2ca92 add kanban demo 2020-09-24 10:58:07 +02:00
REJack
1b328391c6 add kanban style 2020-09-24 10:57:36 +02:00
REJack
37a83c86fa small dark-mode fixes 2020-09-24 10:57:27 +02:00
REJack
ee814eb531 finish dark-mode overrides 2020-09-24 09:08:20 +02:00
REJack
377a00f0cb small html corrections 2020-09-24 09:07:55 +02:00
REJack
08151496fc add dark-mode in some components 2020-09-23 16:08:15 +02:00
REJack
89c19af33c remove text-dark on content header 2020-09-23 09:50:37 +02:00
REJack
1871f1d45d update docs/layout 2020-09-23 08:51:41 +02:00
REJack
89dbc4c8de add custom-control-input-outline for checkbox & radio 2020-09-23 08:46:54 +02:00
REJack
0c91826f12 add button with icons demo in ui/buttons 2020-09-23 08:13:56 +02:00
REJack
fd734c977a add custom-control-input color variations 2020-09-22 15:21:52 +02:00
REJack
e8744690ce add three new styles examples in forms/general 2020-09-22 15:02:28 +02:00
REJack
e4bc0c45c9 added .form-control-border 2020-09-22 15:01:56 +02:00
REJack
6e26bc3485 fix input-group-text font-size with body.text-sm (#3045) 2020-09-22 14:34:16 +02:00
REJack
3876bfdd29 fix direct-chat classes in pages/widgets (#3044) 2020-09-22 14:23:49 +02:00
REJack
24ce21a5c3 Merge pull request #3042 from mineminemine/fix/info-box
Fix/info box
2020-09-22 14:23:31 +02:00
Ryan
6eab10b0ba line-height with percentage seems to behave weirdly in IE 2020-09-22 12:05:02 +08:00
Ryan
ba9cf441cb Fix for Info Box when on IE11
Fixes info box displaying incorrectly when using IE11 (not sure for older versions) and also change text for the shadow info box so it will appear better for smaller screens (without having to use text-wrap).
2020-09-22 11:30:19 +08:00
REJack
9236727125 Merge pull request #3041 from ColorlibHQ/feat/update-plugins
update plugins
2020-09-21 11:50:00 +02:00
REJack
e8476fa5a4 update plugins 2020-09-21 11:43:11 +02:00
REJack
835d48fbb2 update to fullcalendar dist version 2020-09-21 11:39:44 +02:00
dependabot[bot]
f7911fe077 Bump @fullcalendar/daygrid from 4.4.2 to 5.3.2 (#3022)
Bumps [@fullcalendar/daygrid](https://github.com/fullcalendar/fullcalendar) from 4.4.2 to 5.3.2.
- [Release notes](https://github.com/fullcalendar/fullcalendar/releases)
- [Changelog](https://github.com/fullcalendar/fullcalendar/blob/master/CHANGELOG.md)
- [Commits](https://github.com/fullcalendar/fullcalendar/compare/v4.4.2...v5.3.2)

Signed-off-by: dependabot[bot] <support@github.com>

Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
2020-09-21 11:14:08 +02:00
dependabot[bot]
f1e5aac2a2 Bump datatables.net-responsive-bs4 from 2.2.5 to 2.2.6 (#3035)
Bumps [datatables.net-responsive-bs4](https://datatables.net) from 2.2.5 to 2.2.6.

Signed-off-by: dependabot[bot] <support@github.com>

Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
2020-09-21 11:13:46 +02:00
dependabot[bot]
171c4270c8 Bump @babel/preset-env from 7.11.0 to 7.11.5 (#3034)
Bumps [@babel/preset-env](https://github.com/babel/babel/tree/HEAD/packages/babel-preset-env) from 7.11.0 to 7.11.5.
- [Release notes](https://github.com/babel/babel/releases)
- [Changelog](https://github.com/babel/babel/blob/main/CHANGELOG.md)
- [Commits](https://github.com/babel/babel/commits/v7.11.5/packages/babel-preset-env)

Signed-off-by: dependabot[bot] <support@github.com>

Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
2020-09-21 11:12:59 +02:00
dependabot[bot]
f59da2129d Bump @fullcalendar/timegrid from 4.4.2 to 5.3.1 (#3007)
Bumps [@fullcalendar/timegrid](https://github.com/fullcalendar/fullcalendar) from 4.4.2 to 5.3.1.
- [Release notes](https://github.com/fullcalendar/fullcalendar/releases)
- [Changelog](https://github.com/fullcalendar/fullcalendar/blob/master/CHANGELOG.md)
- [Commits](https://github.com/fullcalendar/fullcalendar/compare/v4.4.2...v5.3.1)

Signed-off-by: dependabot[bot] <support@github.com>

Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
2020-09-21 11:12:19 +02:00
dependabot[bot]
49f2621e6f Bump datatables.net-keytable-bs4 from 2.5.2 to 2.5.3 (#3033)
Bumps [datatables.net-keytable-bs4](https://datatables.net) from 2.5.2 to 2.5.3.

Signed-off-by: dependabot[bot] <support@github.com>

Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
2020-09-21 11:11:49 +02:00
dependabot[bot]
8284cdc1da Bump moment from 2.27.0 to 2.28.0 (#3036)
Bumps [moment](https://github.com/moment/moment) from 2.27.0 to 2.28.0.
- [Release notes](https://github.com/moment/moment/releases)
- [Changelog](https://github.com/moment/moment/blob/develop/CHANGELOG.md)
- [Commits](https://github.com/moment/moment/compare/2.27.0...2.28.0)

Signed-off-by: dependabot[bot] <support@github.com>

Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
2020-09-21 11:11:24 +02:00
dependabot[bot]
a0e1e81149 Bump datatables.net from 1.10.21 to 1.10.22 (#3037)
Bumps [datatables.net](https://github.com/DataTables/Dist-DataTables) from 1.10.21 to 1.10.22.
- [Release notes](https://github.com/DataTables/Dist-DataTables/releases)
- [Commits](https://github.com/DataTables/Dist-DataTables/compare/1.10.21...1.10.22)

Signed-off-by: dependabot[bot] <support@github.com>

Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
2020-09-21 11:11:09 +02:00
dependabot[bot]
bd6b7a6d89 Bump @babel/core from 7.11.1 to 7.11.6 (#3038)
Bumps [@babel/core](https://github.com/babel/babel/tree/HEAD/packages/babel-core) from 7.11.1 to 7.11.6.
- [Release notes](https://github.com/babel/babel/releases)
- [Changelog](https://github.com/babel/babel/blob/main/CHANGELOG.md)
- [Commits](https://github.com/babel/babel/commits/v7.11.6/packages/babel-core)

Signed-off-by: dependabot[bot] <support@github.com>

Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
2020-09-21 11:10:53 +02:00
dependabot[bot]
0f2ba49fae Bump @fullcalendar/interaction from 4.4.2 to 5.3.1 (#3004)
Bumps [@fullcalendar/interaction](https://github.com/fullcalendar/fullcalendar) from 4.4.2 to 5.3.1.
- [Release notes](https://github.com/fullcalendar/fullcalendar/releases)
- [Changelog](https://github.com/fullcalendar/fullcalendar/blob/master/CHANGELOG.md)
- [Commits](https://github.com/fullcalendar/fullcalendar/compare/v4.4.2...v5.3.1)

Signed-off-by: dependabot[bot] <support@github.com>

Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
2020-09-21 11:09:12 +02:00
dependabot[bot]
7c8f45ebcf Bump @fullcalendar/bootstrap from 4.4.2 to 5.3.1 (#3003)
Bumps [@fullcalendar/bootstrap](https://github.com/fullcalendar/fullcalendar) from 4.4.2 to 5.3.1.
- [Release notes](https://github.com/fullcalendar/fullcalendar/releases)
- [Changelog](https://github.com/fullcalendar/fullcalendar/blob/master/CHANGELOG.md)
- [Commits](https://github.com/fullcalendar/fullcalendar/compare/v4.4.2...v5.3.1)

Signed-off-by: dependabot[bot] <support@github.com>

Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
2020-09-21 11:08:45 +02:00
REJack
432be77df0 fix background-gradient-variant deprecated warning (#3040) 2020-09-21 11:03:47 +02:00
Shailesh Ladumor
41c9588cb9 docs: Video tutorial link add into docs (#3032) 2020-09-21 10:54:35 +02:00
REJack
99a1632731 Merge pull request #3039 from ColorlibHQ/feat/some-plugin-fixes
some plugin fixes
2020-09-21 10:45:22 +02:00
Ryan
32a760a47d Fix for sidebar searching when there are no sidebar to search (#3010)
* added examples for box shadows

Add some examples for shadows on certain elements/widgets like the cards or tables; mainly to help with color contrasting since the body background has a similar color / tone with the element/widget's background

* Revert "added examples for box shadows"

This reverts commit 3aa62588db.

* Fix sidebar searching

If there are no data-widget: "sidebar-search" found, then stop init()
2020-09-21 10:33:44 +02:00
REJack
06b7deef80 fix tooltip in maximized card 2020-09-21 10:20:07 +02:00
REJack
ee590b0645 update control-sidebar methods in docs 2020-09-21 09:32:01 +02:00
REJack
209075b504 fix mulitple level dropdown-menu overlapping 2020-09-21 09:28:14 +02:00
REJack
e257bffd0d add posibile fix to use multiple sidebar treeviews 2020-09-21 09:12:41 +02:00
REJack
fd07c05d2d last few changes
- fix sidebar menu item name (remove badge text)
- add removeActiveTab and event listener
2020-09-20 11:18:05 +02:00
REJack
1058af118a rework navbar to be scrollable 2020-09-20 11:16:39 +02:00
REJack
0cfe854c71 add ability to set menu items active 2020-09-20 10:55:39 +02:00
REJack
18aeaed0a6 add event callback's (tabClicked, tabChanged, tabCreated) 2020-09-20 10:07:34 +02:00
REJack
b4b92be945 add ability to use navbar items 2020-09-20 09:59:23 +02:00
REJack
3a12dce448 add tab loading screen with delay 2020-09-19 14:51:15 +02:00
REJack
5bf7e0346b fix iframe height setter 2020-09-19 14:16:39 +02:00
REJack
563a91d15a add panelAutoHeightMode in Layout.js 2020-09-19 14:15:59 +02:00
REJack
349b501c27 further progress
- fix tab creation
- fix tab switching
- add auto open tab on creation
- add auto iframe mode for easy adaption
- add switchTab method
2020-09-19 14:00:55 +02:00
REJack
973377e5df remove active menu in sidebar 2020-09-19 13:51:01 +02:00
REJack
b810326bb8 further changes
- add empty tab
- fix tab switching
- add _fixHeight
2020-09-18 12:54:44 +02:00
REJack
a298bab35d start iframe plugin 2020-09-16 15:32:22 +02:00
dependabot[bot]
2cb8bb72a7 Bump rollup from 2.23.0 to 2.26.11 (#3021)
Bumps [rollup](https://github.com/rollup/rollup) from 2.23.0 to 2.26.11.
- [Release notes](https://github.com/rollup/rollup/releases)
- [Changelog](https://github.com/rollup/rollup/blob/master/CHANGELOG.md)
- [Commits](https://github.com/rollup/rollup/compare/v2.23.0...v2.26.11)

Signed-off-by: dependabot[bot] <support@github.com>

Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
2020-09-16 13:44:04 +02:00
dependabot[bot]
b62d3b20df Bump terser from 4.8.0 to 5.3.1 (#3020)
Bumps [terser](https://github.com/terser/terser) from 4.8.0 to 5.3.1.
- [Release notes](https://github.com/terser/terser/releases)
- [Changelog](https://github.com/terser/terser/blob/master/CHANGELOG.md)
- [Commits](https://github.com/terser/terser/compare/v4.8.0...v5.3.1)

Signed-off-by: dependabot[bot] <support@github.com>

Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
2020-09-16 13:43:45 +02:00
dependabot[bot]
4ca888e427 Bump eslint from 7.5.0 to 7.9.0 (#3019)
Bumps [eslint](https://github.com/eslint/eslint) from 7.5.0 to 7.9.0.
- [Release notes](https://github.com/eslint/eslint/releases)
- [Changelog](https://github.com/eslint/eslint/blob/master/CHANGELOG.md)
- [Commits](https://github.com/eslint/eslint/compare/v7.5.0...v7.9.0)

Signed-off-by: dependabot[bot] <support@github.com>

Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
2020-09-16 13:42:59 +02:00
dependabot[bot]
ec6425d99d Bump inputmask from 5.0.3 to 5.0.5 (#2963)
Bumps [inputmask](https://github.com/RobinHerbots/Inputmask) from 5.0.3 to 5.0.5.
- [Release notes](https://github.com/RobinHerbots/Inputmask/releases)
- [Changelog](https://github.com/RobinHerbots/Inputmask/blob/5.x/CHANGELOG.md)
- [Commits](https://github.com/RobinHerbots/Inputmask/compare/5.0.3...5.0.5)

Signed-off-by: dependabot[bot] <support@github.com>

Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
2020-09-14 12:53:55 +02:00
dependabot[bot]
cc9766d607 Bump bootstrap from 4.4.1 to 4.5.2 (#2961)
Bumps [bootstrap](https://github.com/twbs/bootstrap) from 4.4.1 to 4.5.2.
- [Release notes](https://github.com/twbs/bootstrap/releases)
- [Commits](https://github.com/twbs/bootstrap/compare/v4.4.1...v4.5.2)

Signed-off-by: dependabot[bot] <support@github.com>

Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
2020-09-14 12:53:43 +02:00
dependabot[bot]
443bb31418 Bump datatables.net-buttons-bs4 from 1.6.2 to 1.6.3 (#2959)
Bumps [datatables.net-buttons-bs4](https://datatables.net) from 1.6.2 to 1.6.3.

Signed-off-by: dependabot[bot] <support@github.com>

Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
2020-09-14 12:53:15 +02:00
REJack
80f96916e0 Merge pull request #3024 from ColorlibHQ/feat/new-example-pages
new example pages
2020-09-14 12:52:23 +02:00
REJack
dc00689d30 fix html validator errors/warnings 2020-09-14 11:54:09 +02:00
REJack
12c4eb90e4 fix active menu in contact-us & faq 2020-09-14 11:49:17 +02:00
REJack
6feb219d8b small contact-us changes 2020-09-14 11:43:49 +02:00
REJack
45c694fdc4 finish contact-us and place menu item 2020-09-14 11:41:18 +02:00
REJack
0384c30f8e add faq & contact us(not finish) demo 2020-09-11 17:08:08 +02:00
Ryan
48743c7dee Small fix for TodoList plugin (#3013)
Properly attach the event listener to the correct selector and fix on the options passed on in the JQuery API. However, a new bug comes from this fix when both data-widget and Jquery API is set where the event listener will be triggered twice
2020-09-11 11:57:33 +02:00
REJack
444b95ff48 rework login & register menu items in sidebar 2020-09-11 11:33:57 +02:00
REJack
e6965ff86a add forgot password v2 demo 2020-09-11 11:28:16 +02:00
REJack
758936a97a add search forms & results (simple & enhanced) 2020-09-11 11:20:30 +02:00
REJack
2ad27011ed add datatables button example 2020-09-11 09:50:09 +02:00
dependabot[bot]
16b4d30d31 Bump @babel/core from 7.10.5 to 7.11.1 (#2955)
Bumps [@babel/core](https://github.com/babel/babel/tree/HEAD/packages/babel-core) from 7.10.5 to 7.11.1.
- [Release notes](https://github.com/babel/babel/releases)
- [Changelog](https://github.com/babel/babel/blob/main/CHANGELOG.md)
- [Commits](https://github.com/babel/babel/commits/v7.11.1/packages/babel-core)

Signed-off-by: dependabot[bot] <support@github.com>

Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
2020-08-06 11:19:01 +02:00
dependabot[bot]
f7dbbe455e Bump @babel/preset-env from 7.10.4 to 7.11.0 (#2948)
Bumps [@babel/preset-env](https://github.com/babel/babel/tree/HEAD/packages/babel-preset-env) from 7.10.4 to 7.11.0.
- [Release notes](https://github.com/babel/babel/releases)
- [Changelog](https://github.com/babel/babel/blob/main/CHANGELOG.md)
- [Commits](https://github.com/babel/babel/commits/v7.11.0/packages/babel-preset-env)

Signed-off-by: dependabot[bot] <support@github.com>

Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
2020-08-06 11:09:07 +02:00
dependabot[bot]
7679818fc4 Bump overlayscrollbars from 1.12.0 to 1.13.0 (#2944)
Bumps [overlayscrollbars](https://github.com/KingSora/OverlayScrollbars) from 1.12.0 to 1.13.0.
- [Release notes](https://github.com/KingSora/OverlayScrollbars/releases)
- [Commits](https://github.com/KingSora/OverlayScrollbars/compare/v1.12.0...v1.13.0)

Signed-off-by: dependabot[bot] <support@github.com>

Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
2020-08-06 11:00:33 +02:00
dependabot[bot]
7a29690ed3 Bump autoprefixer from 9.8.5 to 9.8.6 (#2947)
Bumps [autoprefixer](https://github.com/postcss/autoprefixer) from 9.8.5 to 9.8.6.
- [Release notes](https://github.com/postcss/autoprefixer/releases)
- [Changelog](https://github.com/postcss/autoprefixer/blob/master/CHANGELOG.md)
- [Commits](https://github.com/postcss/autoprefixer/compare/9.8.5...9.8.6)

Signed-off-by: dependabot[bot] <support@github.com>

Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
2020-08-06 10:48:01 +02:00
dependabot[bot]
e62d8e8562 Bump pdfmake from 0.1.66 to 0.1.68 (#2951)
Bumps [pdfmake](https://github.com/bpampuch/pdfmake) from 0.1.66 to 0.1.68.
- [Release notes](https://github.com/bpampuch/pdfmake/releases)
- [Changelog](https://github.com/bpampuch/pdfmake/blob/master/CHANGELOG.md)
- [Commits](https://github.com/bpampuch/pdfmake/compare/0.1.66...0.1.68)

Signed-off-by: dependabot[bot] <support@github.com>

Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
2020-08-06 10:47:31 +02:00
dependabot[bot]
72ad5e5154 Bump @fortawesome/fontawesome-free from 5.13.1 to 5.14.0 (#2933)
Bumps [@fortawesome/fontawesome-free](https://github.com/FortAwesome/Font-Awesome) from 5.13.1 to 5.14.0.
- [Release notes](https://github.com/FortAwesome/Font-Awesome/releases)
- [Changelog](https://github.com/FortAwesome/Font-Awesome/blob/master/CHANGELOG.md)
- [Commits](https://github.com/FortAwesome/Font-Awesome/compare/5.13.1...5.14.0)

Signed-off-by: dependabot[bot] <support@github.com>

Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
2020-08-06 10:46:12 +02:00
dependabot[bot]
0e5d88a095 Bump sweetalert2 from 9.17.0 to 9.17.1 (#2938)
Bumps [sweetalert2](https://github.com/sweetalert2/sweetalert2) from 9.17.0 to 9.17.1.
- [Release notes](https://github.com/sweetalert2/sweetalert2/releases)
- [Changelog](https://github.com/sweetalert2/sweetalert2/blob/master/CHANGELOG.md)
- [Commits](https://github.com/sweetalert2/sweetalert2/compare/v9.17.0...v9.17.1)

Signed-off-by: dependabot[bot] <support@github.com>

Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
2020-07-28 16:39:12 +03:00
dependabot[bot]
f30cc78d5f Bump rollup from 2.21.0 to 2.23.0 (#2932)
Bumps [rollup](https://github.com/rollup/rollup) from 2.21.0 to 2.23.0.
- [Release notes](https://github.com/rollup/rollup/releases)
- [Changelog](https://github.com/rollup/rollup/blob/master/CHANGELOG.md)
- [Commits](https://github.com/rollup/rollup/compare/v2.21.0...v2.23.0)

Signed-off-by: dependabot[bot] <support@github.com>

Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
2020-07-28 16:35:41 +03:00
dependabot[bot]
c33f7a89c2 Bump eslint-config-xo from 0.32.0 to 0.32.1 (#2934)
Bumps [eslint-config-xo](https://github.com/xojs/eslint-config-xo) from 0.32.0 to 0.32.1.
- [Release notes](https://github.com/xojs/eslint-config-xo/releases)
- [Commits](https://github.com/xojs/eslint-config-xo/compare/v0.32.0...v0.32.1)

Signed-off-by: dependabot[bot] <support@github.com>

Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
2020-07-28 16:34:46 +03:00
dependabot[bot]
5d3f997288 Bump eslint-plugin-unicorn from 20.1.0 to 21.0.0 (#2931)
Bumps [eslint-plugin-unicorn](https://github.com/sindresorhus/eslint-plugin-unicorn) from 20.1.0 to 21.0.0.
- [Release notes](https://github.com/sindresorhus/eslint-plugin-unicorn/releases)
- [Commits](https://github.com/sindresorhus/eslint-plugin-unicorn/compare/v20.1.0...v21.0.0)

Signed-off-by: dependabot[bot] <support@github.com>

Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
2020-07-28 16:29:41 +03:00
dependabot[bot]
cc40b1fc6b Bump browser-sync from 2.26.7 to 2.26.12 (#2935)
Bumps [browser-sync](https://github.com/BrowserSync/browser-sync) from 2.26.7 to 2.26.12.
- [Release notes](https://github.com/BrowserSync/browser-sync/releases)
- [Changelog](https://github.com/BrowserSync/browser-sync/blob/master/CHANGELOG.md)
- [Commits](https://github.com/BrowserSync/browser-sync/compare/v2.26.7...v2.26.12)

Signed-off-by: dependabot[bot] <support@github.com>

Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
2020-07-28 16:28:42 +03:00
dependabot[bot]
f9f1d5b3e2 Bump eslint from 7.4.0 to 7.5.0 (#2936)
Bumps [eslint](https://github.com/eslint/eslint) from 7.4.0 to 7.5.0.
- [Release notes](https://github.com/eslint/eslint/releases)
- [Changelog](https://github.com/eslint/eslint/blob/master/CHANGELOG.md)
- [Commits](https://github.com/eslint/eslint/compare/v7.4.0...v7.5.0)

Signed-off-by: dependabot[bot] <support@github.com>

Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
2020-07-28 16:28:27 +03:00
REJack
fdf849bab9 add new login, register & recover-password v2 page 2020-07-25 23:50:56 +02:00
REJack
611e50e969 move demo code after 3rd-party scripts (#2930) 2020-07-25 22:53:37 +02:00
REJack
c79452bb22 sidebar search enhancements (#2929)
* add ability to move across entries with arrow keys
* small style fixes for sidebar search
* bump bundlewatch size
2020-07-25 22:52:55 +02:00
REJack
127a1568c7 remove simplemde (#2928)
* remove simplemde
* remove simplemde from docs/dependencies
2020-07-25 19:58:03 +02:00
REJack
45a51f51b2 fix control-sidebar height with layout-fixed (#2927) 2020-07-25 00:39:07 +02:00
REJack
8facf9fa18 remove duplicate menu-open class in markup 2020-07-24 23:43:32 +02:00
REJack
346515b5a7 remove sidebar-is-opening on expand (#2926) 2020-07-24 22:43:50 +02:00
REJack
46dcb2a43e remove unnecessary jquery-ui (#2925) 2020-07-24 22:23:06 +02:00
REJack
67c15d1389 remove flot-old and add flot plugins from flot/source folder (#2924) 2020-07-24 22:13:20 +02:00
REJack
16c24abc3b Merge pull request #2923 from ColorlibHQ/feat/docs-updates-changes
* add additional-styles docs section
* add expandable tables section
* small typo fixes in direct chat section
2020-07-24 22:04:04 +02:00
REJack
c9ba65fb63 small typo fixes in direct chat section 2020-07-24 21:44:03 +02:00
REJack
731fef74f1 add expandable tables section 2020-07-24 21:43:34 +02:00
REJack
be42956a9d add additional-styles docs section 2020-07-24 21:27:54 +02:00
REJack
ac9e60684c add sparkline demo in inline charts (#2922) 2020-07-24 18:37:38 +02:00
REJack
949f91985f add support for fontawesome svg icons (#2920)
* add support for fontawesome svg icons
* bump bundlewatch sizes
2020-07-24 17:59:40 +02:00
REJack
240836922c Merge pull request #2916 from ColorlibHQ/feat/some-new-plugins
some new plugins
2020-07-24 16:24:32 +02:00
REJack
50d0035591 fix html validator error 2020-07-24 16:04:45 +02:00
REJack
29537ba540 fix html validator errors 2020-07-24 15:09:35 +02:00
REJack
204758c7ff add dropzonejs demo 2020-07-24 14:56:55 +02:00
REJack
216841f578 add dropzonejs plugin 2020-07-24 14:56:45 +02:00
REJack
caed140088 add codemirror & simplemde demo 2020-07-24 13:55:40 +02:00
REJack
2df58a35cc add codemirror & simplemde plugin files 2020-07-24 13:16:36 +02:00
REJack
07b516acc7 add bs-stepper demo 2020-07-23 23:25:53 +02:00
REJack
46927d3259 add bs-stepper plugin 2020-07-23 23:12:42 +02:00
REJack
1fc14abea4 update existing plugins 2020-07-23 23:12:30 +02:00
REJack
bafc8e67b8 fix maximized-card card-body overflow (#2915) 2020-07-23 22:18:44 +02:00
REJack
16686958b6 add nav-collapse-hide-child in demo.js (#2913)
* add nav-collapse-hide-child in demo.js
* fix nav-collapse-hide-child with sidebar-no-expand
2020-07-23 20:58:15 +02:00
REJack
2cf8ec813c remove has-treeview class across all demo & docs pages (#2912)
* remove has-treeview class across all demo & docs pages
* remove if item.subitems in docs/_includes/sidebar.html
2020-07-22 17:58:00 +02:00
REJack
aac8ca32df add font awesome light & duotone icons support (#2911)
* add font awesome light & duotone icons support
* fix lint error
2020-07-22 16:50:44 +02:00
REJack
1666fa3a46 enhance brand-link with pushmenu inside brand (#2910) 2020-07-22 16:08:19 +02:00
REJack
b48419b23b sidebar custom area (#2908)
* add sidebar-custom style
* fix hide-on-collapse
* add new sidebar menu entry
* add custom area docs info
2020-07-22 16:06:12 +02:00
REJack
01e00cd43d enhance ExpandableTable for table tree (#2907)
* enhance ExpandableTable for table tree
* remove unused rotate class
* fix html validator error/warnings
2020-07-22 16:03:54 +02:00
REJack
c9603ef5aa fullscreen plugin/button (#2906)
* add fullscreen plugin
* add fullscreen buton in topnav
* remove old mozilla function
2020-07-22 16:01:38 +02:00
REJack
42a184233e add pagination month (#2905) 2020-07-22 16:00:40 +02:00
dependabot[bot]
bc52b7276e Bump moment from 2.24.0 to 2.27.0 (#2896)
Bumps [moment](https://github.com/moment/moment) from 2.24.0 to 2.27.0.
- [Release notes](https://github.com/moment/moment/releases)
- [Changelog](https://github.com/moment/moment/blob/develop/CHANGELOG.md)
- [Commits](https://github.com/moment/moment/compare/2.24.0...2.27.0)

Signed-off-by: dependabot[bot] <support@github.com>

Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
2020-07-22 15:59:23 +02:00
dependabot[bot]
702fc09199 Bump sweetalert2 from 9.15.2 to 9.17.0 (#2892)
Bumps [sweetalert2](https://github.com/sweetalert2/sweetalert2) from 9.15.2 to 9.17.0.
- [Release notes](https://github.com/sweetalert2/sweetalert2/releases)
- [Changelog](https://github.com/sweetalert2/sweetalert2/blob/master/CHANGELOG.md)
- [Commits](https://github.com/sweetalert2/sweetalert2/compare/v9.15.2...v9.17.0)

Signed-off-by: dependabot[bot] <support@github.com>

Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
2020-07-22 15:57:53 +02:00
XhmikosR
7d42f7cceb Tweak CI cache (#2904)
Enable cache on Windows and fix cache directory to work on all OS'es
2020-07-22 15:53:08 +02:00
REJack
738ee83fa8 add btn-app color variations demo (#2903) 2020-07-19 16:23:40 +02:00
Aigars Silkalns
cd6930dd0a Merge pull request #2898 from ColorlibHQ/dependabot-cfg
Tweak dependabot config
2020-07-15 16:41:47 +03:00
Aigars Silkalns
5132611e0c Merge pull request #2897 from ColorlibHQ/deps
Update devDependencies and regenerate package-lock.json
2020-07-15 16:41:28 +03:00
XhmikosR
e60dc163e3 Tweak dependabot config
* switch to weekly updates
* increase versions
* add bundler deps too
2020-07-15 16:35:12 +03:00
XhmikosR
d143077b0e Update devDependencies and regenerate package-lock.json 2020-07-15 16:34:10 +03:00
XhmikosR
903143a1e1 Fix XSS in calendar.html (#2868)
* Fix XSS in calendar.html

* Remove console.log
2020-07-15 09:54:06 +02:00
XhmikosR
d114eabfe6 Update ci.yml (#2866)
Add caching but skip it on Windows due to https://github.com/actions/cache/issues/336

If the issue is fixed, the `if` condition can be removed
2020-07-15 09:53:49 +02:00
dependabot[bot]
917e47ea58 Bump @rollup/plugin-babel from 5.0.4 to 5.1.0 (#2885)
Bumps [@rollup/plugin-babel](https://github.com/rollup/plugins) from 5.0.4 to 5.1.0.
- [Release notes](https://github.com/rollup/plugins/releases)
- [Commits](https://github.com/rollup/plugins/compare/babel-v5.0.4...babel-v5.1.0)

Signed-off-by: dependabot[bot] <support@github.com>

Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
2020-07-15 09:04:43 +03:00
dependabot[bot]
ffbe945d88 Bump autoprefixer from 9.8.4 to 9.8.5 (#2884)
Bumps [autoprefixer](https://github.com/postcss/autoprefixer) from 9.8.4 to 9.8.5.
- [Release notes](https://github.com/postcss/autoprefixer/releases)
- [Changelog](https://github.com/postcss/autoprefixer/blob/master/CHANGELOG.md)
- [Commits](https://github.com/postcss/autoprefixer/compare/9.8.4...9.8.5)

Signed-off-by: dependabot[bot] <support@github.com>

Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
2020-07-15 09:03:11 +03:00
Aigars Silkalns
3fffe8071f Merge pull request #2872 from ColorlibHQ/dependabot/add-v2-config-file
Create Dependabot config file
2020-07-09 15:28:30 +03:00
dependabot-preview[bot]
186faaaab4 Create Dependabot config file 2020-07-08 14:38:30 +00:00
Aigars Silkalns
d3a552db71 Merge pull request #2871 from XhmikosR/deps
Update dependencies and gems
2020-07-08 16:50:06 +03:00
XhmikosR
9c878bde3a Update dependencies and gems
* pdfmake                     ^0.1.65  →   ^0.1.66
* @babel/core                 ^7.10.3  →   ^7.10.4
* @babel/preset-env           ^7.10.3  →   ^7.10.4
* eslint                       ^7.3.1  →    ^7.4.0
* eslint-config-xo            ^0.31.0  →   ^0.32.0
* eslint-plugin-compat         ^3.7.0  →    ^3.8.0
* rollup                      ^2.18.1  →   ^2.21.0
* vnu-jar                    ^20.5.29  →  ^20.6.30
2020-07-08 16:12:57 +03:00
REJack
c02ab3f0cd Merge pull request #2841 from ColorlibHQ/feat/sidebar-search
Sidebar Search
2020-07-05 12:03:22 +02:00
REJack
0aff809e7b add docs section 2020-07-02 15:52:12 +02:00
XhmikosR
a1d6efe454 Remove moot data-toggle="tooltip" (#2861)
Tooltips need to be manually initialized which didn't happen.

Also, streamline tag indentation a bit
2020-07-01 16:21:20 +02:00
REJack
89f47f3486 Update .babelrc.js (#2859)
* add `bugfixes: true` which will be the default in Babel 8.x
2020-06-28 14:03:33 +02:00
XhmikosR
fdc400067c Update dependencies (#2851)
* @fortawesome/fontawesome-free  ^5.13.0  →  ^5.13.1
* @sweetalert2/theme-bootstrap-4  ^3.1.4  →   ^3.2.0
* jszip                           ^3.4.0  →   ^3.5.0
* sweetalert2                    ^9.14.4  →  ^9.15.2
* eslint-plugin-import           ^2.21.2  →  ^2.22.0
* rollup                         ^2.18.0  →  ^2.18.1
2020-06-28 14:03:17 +02:00
XhmikosR
755df41324 Remove console.log (#2860) 2020-06-28 14:03:01 +02:00
XhmikosR
9812f8002b Update .babelrc.js
* add `bugfixes: true` which will be the default in Babel 8.x
2020-06-28 08:38:42 +03:00
REJack
5b24a7a47d rework expandable table (#2825) 2020-06-27 18:58:40 +02:00
REJack
45d4759ab0 add abilty to highlight name and path 2020-06-27 18:58:12 +02:00
REJack
798cf73e45 bump bundlewatch limit 2020-06-27 18:41:56 +02:00
REJack
6823a175d2 Revert "fix: ignore warnings for deprecation and add TODO for removing dependency (#2852)" (#2858)
This reverts commit 2458663439.
2020-06-27 18:30:21 +02:00
Shawn Heide
2458663439 fix: ignore warnings for deprecation and add TODO for removing dependency (#2852) 2020-06-27 17:56:03 +02:00
XhmikosR
50a8489e10 Update devDependencies (#2850)
* @babel/core           ^7.10.2  →  ^7.10.3
* @babel/preset-env     ^7.10.2  →  ^7.10.3
* @rollup/plugin-babel   ^5.0.3  →   ^5.0.4
* autoprefixer           ^9.8.0  →   ^9.8.4
* eslint                 ^7.2.0  →   ^7.3.1
* rollup                ^2.15.0  →  ^2.18.0
* stylelint             ^13.6.0  →  ^13.6.1
* terser                 ^4.7.0  →   ^4.8.0
2020-06-27 17:55:21 +02:00
XhmikosR
8e48630aac Update .browserslistrc (#2849)
* Remove the minimum Chrome and Firefox versions
* Make Edge 16 the minimum version
* Add Firefox ESR
2020-06-27 17:54:31 +02:00
REJack
eec4fd768e add sidebar search form in all demo pages 2020-06-13 17:37:06 +02:00
REJack
30746618d0 add sidebar search style 2020-06-13 17:33:02 +02:00
REJack
00b4aec60a add SidebarSearch.js 2020-06-13 17:32:43 +02:00
XhmikosR
5386be7a22 Fix comment (#2839) 2020-06-13 14:43:12 +02:00
XhmikosR
c886592bc5 ControlSidebar.js: minor simplification (#2837) 2020-06-13 14:42:56 +02:00
XhmikosR
57c2dd90c0 Update browserslist config (#2836)
* use the defaults
* drop Edge < 15
* drop Android since newer Android uses Android WebView which is Chromium-based
2020-06-13 14:34:36 +02:00
XhmikosR
2545f04bf3 Use template literals (#2835) 2020-06-13 14:34:10 +02:00
XhmikosR
bce97813d6 Be explicit with the background color property (#2834) 2020-06-13 12:22:58 +02:00
REJack
fffb131305 Merge pull request #2830 from XhmikosR/js-string-constants
Switch to String constants
2020-06-13 12:17:41 +02:00
XhmikosR
6a7c491071 ExpandableTable.js: add missing variable 2020-06-13 10:23:57 +03:00
XhmikosR
f94fa978f9 Fix DirectChat toggled event. 2020-06-13 10:23:57 +03:00
XhmikosR
4101916d14 Switch to String constants
Should result in better compression (aprox. -10% from the compressed adminlte.min.js) and should be easier to see unused/undefined variables on lint stage.
2020-06-13 10:23:56 +03:00
REJack
0a589f61b1 Merge pull request #2818 from XhmikosR/patch-1
vnu: enable `Werror`
2020-06-12 20:43:16 +02:00
REJack
515edfa906 Merge pull request #2829 from XhmikosR/deps
Update dependencies
2020-06-12 20:42:12 +02:00
XhmikosR
a8b291a943 Ignore more plugin files. (#2831) 2020-06-12 20:41:13 +02:00
XhmikosR
3f203af04b Remove .nav-tabs-custom references (#2832) 2020-06-12 20:40:06 +02:00
XhmikosR
5af47e0398 Update docs.yml
Fix ruby cache invalidation
2020-06-12 14:22:24 +03:00
XhmikosR
967fdeff31 Update Gemfile.lock 2020-06-12 12:49:44 +03:00
XhmikosR
29631025f3 Update dependencies
* flag-icon-css          ^3.4.6  →   ^3.5.0
* sweetalert2           ^9.14.0  →  ^9.14.4
* eslint-config-xo      ^0.30.0  →  ^0.31.0
* eslint-plugin-import  ^2.20.2  →  ^2.21.2
* rollup                ^2.13.1  →  ^2.15.0
2020-06-11 15:27:46 +03:00
XhmikosR
3bbde9e7ec pages/gallery.html: add missing headings 2020-06-08 14:29:23 +03:00
XhmikosR
9dfc8da08a It's JavaScript. 2020-06-08 14:29:23 +03:00
XhmikosR
500a53be1c pages/tables/simple.html: add colspan 2020-06-08 14:29:23 +03:00
XhmikosR
7f890fd6a2 ExpandableTable.js: lowercase colspan 2020-06-08 14:29:22 +03:00
XhmikosR
819455f5ec Fix 404.html page 2020-06-08 14:29:22 +03:00
XhmikosR
e8043b6a25 vnu: enable Werror 2020-06-08 14:29:22 +03:00
XhmikosR
cf2e1b85dc Fix accordion example (#2823)
* make collapsible heading behave like a block
* remove the non-existent `panel-collapse` class
* replace the `in` class with `show`
2020-06-08 13:28:13 +02:00
XhmikosR
18ee4a5421 Ignore inputmask.binding.js (#2820) 2020-06-08 12:33:22 +02:00
XhmikosR
8daa7a8f86 Use Bootstrap 4.4 consistently. (#2824) 2020-06-08 12:31:05 +02:00
REJack
06239d3d35 Merge pull request #2817 from XhmikosR/deps
Deps
2020-06-06 11:29:42 +02:00
XhmikosR
9cabb6468d Update devDependencies 2020-06-06 09:42:01 +03:00
XhmikosR
b2233260d4 Update bootstrap-slider to v11.0.2. 2020-06-06 09:41:45 +03:00
XhmikosR
a4673ccd1b Unbreak lines (#2814) 2020-06-05 16:36:57 +02:00
REJack
5ed7e97288 Merge pull request #2797 from XhmikosR/docs
Fix docs
2020-06-05 16:34:46 +02:00
XhmikosR
1f6c5a8181 Fix typo in comment (#2813) 2020-06-05 16:14:36 +02:00
XhmikosR
7782373a12 Remove docs from the npm package 2020-06-05 17:02:09 +03:00
XhmikosR
6017b241bf Markdown tweaks 2020-06-05 17:02:09 +03:00
XhmikosR
edc51cc61b Fix Jekyll variables and Liquid consistency tweaks
* add `baseurl`
* add `url`
2020-06-05 17:02:09 +03:00
XhmikosR
4bc6c1e8d6 Add missing trailing slash in docs link. (#2812) 2020-06-05 16:00:55 +02:00
XhmikosR
ae670b200e Load the minified summernote CSS (#2804) 2020-06-05 16:00:30 +02:00
XhmikosR
a3dc358394 language-menu.html: load flag-icon-css locally (#2803) 2020-06-05 16:00:15 +02:00
XhmikosR
3cec30427d layout.md: Escape \ (#2811) 2020-06-05 15:51:49 +02:00
XhmikosR
ea21c73666 Add back jsgrid/demos/db.js (#2810)
It's used in pages/tables/jsgrid.html.
2020-06-05 15:51:13 +02:00
XhmikosR
39e9416f8c Rename variable for clarity (#2801) 2020-06-05 15:49:56 +02:00
REJack
4a31f9986b Merge pull request #2799 from XhmikosR/pages
HTML Pages tag cleanup
2020-06-05 15:49:39 +02:00
XhmikosR
6788552f17 chartjs.html: switch to $. like everywhere else (#2798) 2020-06-05 15:47:32 +02:00
XhmikosR
695cfb9dd9 Update devDependencies and gems (#2796) 2020-06-05 15:46:57 +02:00
XhmikosR
96946b4fd4 Remove the obsolete X-UA-Compatible 2020-06-05 08:31:34 +03:00
XhmikosR
2f4a7e0e3e Move Google Fonts CSS first.
Also, fix a couple of comments.
2020-06-05 08:27:14 +03:00
REJack
5a6a9142fe bump bundlewatch size 2020-06-05 01:46:36 +02:00
bansalshashank
f1ce1758ce [Tables] Expandable table (#2528)
* [Tables] Expandable table

* enhance expandable table

* fix AdminLTE.js export

* fix linting errors

* fix HTML validator errors

Co-authored-by: Shashank Bansal <shashank.bansal@eloquent.studio>
Co-authored-by: REJack <info@rejack.de>
2020-06-05 00:35:50 +02:00
REJack
9f8149a44e remove missplaced "Outline" on non-outlined boxes 2020-06-04 21:39:44 +02:00
XhmikosR
74cccca8a1 Refactor SCSS main files. (#2791) 2020-06-04 21:27:13 +02:00
Ukee
e69ca82095 [Enhancement] Box Shadows (#2529)
* added examples for box shadows

Add some examples for shadows on certain elements/widgets like the cards or tables; mainly to help with color contrasting since the body background has a similar color / tone with the element/widget's background

* Revert "added examples for box shadows"

This reverts commit 3aa62588db.

* Added examples for box shadows

Add some examples for shadows on certain elements/widgets like the cards or tables; mainly to help with color contrasting since the body background has a similar color / tone with the element/widget's background

* remove simple table custom shadow variations

* update widget custom shadow variations

* replace tab indent with spaces

Co-authored-by: REJack <info@rejack.de>
2020-06-04 21:17:22 +02:00
XhmikosR
ab22cb62c7 docs action: fix cache (#2795) 2020-06-04 21:15:54 +02:00
XhmikosR
5a1ae0c35e Cache selectors when possible. (#2790) 2020-06-04 20:06:38 +02:00
REJack
1fbda275a9 prep pre version (v3.1.0-pre) 2020-06-04 17:31:22 +02:00
REJack
c4bc2c676c Merge pull request #2789 from XhmikosR/patch-13
Use an object when setting multiple CSS properties
2020-06-04 17:23:01 +02:00
REJack
c1f87dfbde Merge pull request #2772 from XhmikosR/docs-lint
Lint HTML
2020-06-04 17:13:11 +02:00
XhmikosR
306dd00b98 Fix all HTML validation errors. 2020-06-03 22:01:28 +03:00
XhmikosR
38e74faf55 Add vnu-jar for HTML validation.
Also, add a GitHub Action which builds the docs and run the validator script.
2020-06-03 22:01:27 +03:00
REJack
da1fa4eaab Merge pull request #2788 from XhmikosR/rm-ionic
Remove ionic icons from pages that don't use them
2020-06-03 19:04:27 +02:00
XhmikosR
5ac5edf929 Bump bundlewatch limit 2020-06-03 20:02:13 +03:00
XhmikosR
97d48edcdf Use an object when setting multiple CSS properties 2020-06-03 19:57:41 +03:00
XhmikosR
15e2a311fa Remove ionic icons from pages that don't use them 2020-06-03 19:53:23 +03:00
REJack
0e5d93fb4d Merge pull request #2787 from XhmikosR/deps
Update devDependencies and gems
2020-06-03 18:09:31 +02:00
REJack
b4b8d07feb Merge pull request #2785 from XhmikosR/js-tweaks-sort-exports
Sort imports/exports alphabetically
2020-06-03 18:07:00 +02:00
REJack
29666de051 docs: delete unused layouts. (#2784) 2020-06-03 18:05:53 +02:00
XhmikosR
f091c5d510 Dropdown.js: return early (#2783) 2020-06-03 18:05:36 +02:00
XhmikosR
695ca94fde Update devDependencies and gems 2020-06-03 16:16:48 +03:00
XhmikosR
e2e4bab687 Sort imports/exports alphabetically 2020-06-03 08:17:10 +03:00
XhmikosR
e023103dcf docs: delete unused layouts. 2020-06-03 08:06:13 +03:00
XhmikosR
312e083fc0 Dropdown.js: remove variable used only once (#2779)
Co-authored-by: REJack <info@rejack.de>
2020-06-02 22:41:03 +02:00
REJack
85d4b6be05 Dropdown.js: rename variable (#2780) 2020-06-02 22:39:17 +02:00
XhmikosR
13c857679b Layout.js: reuse constant (#2778) 2020-06-02 22:38:50 +02:00
XhmikosR
5167252a55 Dropdown.js: rename variable 2020-06-02 18:59:38 +03:00
XhmikosR
ad11109b2f Improve LGTM configuration (#2777)
* Testing LGTM

* Update .lgtm.yml

* Update .lgtm.yml

* Update .lgtm.yml

* Update .lgtm.yml
2020-06-02 16:38:46 +02:00
REJack
2eec6fe614 fix nav-link fadeIn (#2776) 2020-06-02 15:26:19 +02:00
XhmikosR
e848621b32 Remove unneeded IIFEs (#2774) 2020-06-02 15:23:22 +02:00
REJack
bbfcc0639e fix sidebar item icon transition (#2775)
* fix sidebar item icon transition

* rename menu-opens to menu-is-opening
2020-06-02 13:37:16 +02:00
XhmikosR
47e653bfbf Remove the executable permission. (#2768) 2020-06-02 13:25:34 +02:00
XhmikosR
dee12de0f7 Update .gitignore (#2773)
* Update .gitignore

* Update .gitignore
2020-06-02 12:21:48 +02:00
REJack
2bc9d56f62 Merge pull request #2771 from XhmikosR/pages
Minor pages cleanup
2020-06-02 11:29:47 +02:00
XhmikosR
feb42f852e Clean up more plugins' files. (#2767) 2020-06-02 11:29:28 +02:00
REJack
bbb22a16de Merge pull request #2751 from XhmikosR/js-tweaks
JS tweaks
2020-06-02 11:27:47 +02:00
XhmikosR
86d5d9b038 Remove trailing spaces 2020-06-02 12:16:43 +03:00
XhmikosR
d331b5f913 calendar.html: remove unused variable 2020-06-02 12:12:03 +03:00
XhmikosR
be58e635f6 Update lint.yml (#2770) 2020-06-02 10:41:53 +02:00
XhmikosR
04981d1770 Add missing shebang (#2769) 2020-06-02 10:39:15 +02:00
XhmikosR
2622f5ce56 Fix .gitignore comments (#2766)
Comments start with `#`
2020-06-02 10:38:43 +02:00
XhmikosR
ad03a31ffb Remove unused doc assets. (#2765) 2020-06-02 10:38:23 +02:00
XhmikosR
be3631930d Fix regression after 27ff009 2020-06-02 06:30:40 +03:00
XhmikosR
7853dcbd6e Use the document ready shorthand. 2020-06-02 06:30:39 +03:00
XhmikosR
3478837aab Layout.js: Simplify else 2020-06-02 06:30:39 +03:00
XhmikosR
cb85af826e Reuse variable 2020-06-02 06:30:39 +03:00
XhmikosR
e56939983d Remove variables only used once. 2020-06-02 06:30:39 +03:00
XhmikosR
187a01a8ee Return early. 2020-06-02 06:30:39 +03:00
XhmikosR
3528b6c1f8 Remove that workaround 2020-06-02 06:30:38 +03:00
REJack
c8feb99dc2 resolve lgtm alerts (#2764) 2020-06-01 21:49:17 +02:00
REJack
0641a8442d Fix ESLint errors (#2763)
* fix dist/js/demo.js eslint error

* fix Layout.js eslint error

* remove unnecessary semicolon

* remove unexpected token

* add missing radix for parseInt in Layout.js
2020-06-01 21:21:43 +02:00
XhmikosR
023ede7ded Update .bundlewatch.config.json (#2762) 2020-06-01 20:40:13 +02:00
XhmikosR
092028bb49 Run CI for master too. (#2761) 2020-06-01 20:32:29 +02:00
XhmikosR
cfe81189f5 Add bundlewatch (#2754) 2020-06-01 20:27:25 +02:00
XhmikosR
82b6f062d3 Remove docs-clean script (#2760)
Jekyll removes files by default
2020-06-01 20:14:30 +02:00
XhmikosR
0850fd8cb5 Update .eslintignore (#2759) 2020-06-01 20:14:13 +02:00
XhmikosR
7a7bea0be9 Update plugins. (#2756) 2020-06-01 20:13:38 +02:00
XhmikosR
569bddbf4d Rename install script to postinstall (#2757) 2020-06-01 20:11:09 +02:00
XhmikosR
48685382d3 Merge .npmignore files. (#2758) 2020-06-01 20:10:43 +02:00
XhmikosR
c4dae3e269 Add a separate prefix script for splits (#2755) 2020-06-01 20:09:37 +02:00
REJack
66f8bb1bbd Merge pull request #2752 from XhmikosR/plugins
Plugins
2020-06-01 14:09:20 +02:00
XhmikosR
1451820057 Remove glyphicon leftovers. (#2753) 2020-06-01 14:07:35 +02:00
XhmikosR
1af43bd9ea Remove outdated plugin files 2020-06-01 14:47:15 +03:00
XhmikosR
870df4406d Update plugins. 2020-06-01 14:45:27 +03:00
REJack
a26f303c69 Merge pull request #2728 from XhmikosR/eslint
Add ESLint support
2020-06-01 13:43:13 +02:00
XhmikosR
6dbfd55091 build/npm: don't copy dot files. 2020-06-01 14:26:08 +03:00
XhmikosR
27ff009494 Comply to the ESLint rules. 2020-06-01 14:26:08 +03:00
XhmikosR
5ba59f1454 Add ESLint support.
Used the Bootstrap master branch config and adapted it.

Also, remove the `babel-eslint` package since we don't use it.
2020-06-01 14:26:07 +03:00
REJack
ae1c128e04 Merge pull request #2727 from XhmikosR/stylelint
Add stylelint support
2020-06-01 13:24:44 +02:00
XhmikosR
ffcbdb2029 Add lint and compile tests to CI. 2020-06-01 14:09:56 +03:00
XhmikosR
ff66f38cee Convert hsla colors to rgba for consistency 2020-06-01 14:09:56 +03:00
XhmikosR
3d87e3c4cb Adhere to the Stylelint rules.
Also, re-use some of the color variables while at it.
2020-06-01 14:09:56 +03:00
XhmikosR
24bc6165bc Add Stylelint. 2020-06-01 14:09:56 +03:00
XhmikosR
8350264bd2 Update dependencies (#2748)
* @fullcalendar/bootstrap             ^4.4.0  →    ^4.4.2
* @fullcalendar/core                  ^4.4.0  →    ^4.4.2
* @fullcalendar/daygrid               ^4.4.0  →    ^4.4.2
* @fullcalendar/interaction           ^4.4.0  →    ^4.4.2
* @fullcalendar/timegrid              ^4.4.0  →    ^4.4.2
* @ttskch/select2-bootstrap4-theme     ^1.3.2  →   ^1.4.0
* bootstrap4-duallistbox              ^4.0.1  →    ^4.0.2
* datatables.net                    ^1.10.20  →  ^1.10.21
* datatables.net-autofill-bs4         ^2.3.4  →    ^2.3.5
* datatables.net-bs4                ^1.10.20  →  ^1.10.21
* datatables.net-buttons-bs4          ^1.6.1  →    ^1.6.2
* datatables.net-fixedcolumns-bs4     ^3.3.0  →    ^3.3.1
* datatables.net-fixedheader-bs4      ^3.1.6  →    ^3.1.7
* datatables.net-keytable-bs4         ^2.5.1  →    ^2.5.2
* datatables.net-responsive-bs4       ^2.2.3  →    ^2.2.5
* datatables.net-rowgroup-bs4         ^1.1.1  →    ^1.1.2
* datatables.net-rowreorder-bs4       ^1.2.6  →    ^1.2.7
* datatables.net-scroller-bs4         ^2.0.1  →    ^2.0.2
* filterizr                           ^2.2.3  →    ^2.2.4
* flot                                ^4.2.0  →    ^4.2.1
* jquery-validation                  ^1.19.1  →   ^1.19.2
* jszip                               ^3.3.0  →    ^3.4.0
* overlayscrollbars                  ^1.11.0  →   ^1.12.0
* summernote                         ^0.8.16  →   ^0.8.18
* sweetalert2                        ^9.10.8  →   ^9.14.0
2020-06-01 13:05:25 +02:00
XhmikosR
bbfae627a2 Doc gems (#2716)
* docs: specify the gems.

This saves 59 gems. Also, commit Gemfile.lock.

* Clean up docs/_config.yml

* Add jekyll-sitemap.

* Update Jekyll to v4.1.0.
2020-06-01 12:42:14 +02:00
XhmikosR
8bc05ad6b0 Update .editorconfig (#2749) 2020-06-01 10:33:50 +02:00
XhmikosR
7edd752b6b Assorted Markdown tweaks (#2750) 2020-06-01 10:33:08 +02:00
XhmikosR
532707221b Update devDependencies (#2747)
* @babel/core        ^7.10.1  →  ^7.10.2
* @babel/preset-env  ^7.10.1  →  ^7.10.2
* rollup             ^2.11.2  →  ^2.12.0
2020-06-01 10:32:53 +02:00
XhmikosR
b37e2e1aea Update jQuery to v3.5.1. (#2718) 2020-05-31 23:45:30 +02:00
XhmikosR
f1f0ff9776 A few HTML validation fixes (#2745) 2020-05-31 23:26:03 +02:00
XhmikosR
ef0fbe1b50 Specify diplay=fallback for Google Fonts (#2738) 2020-05-31 23:12:40 +02:00
XhmikosR
b480c754a4 Add rel=noopener for external links. (#2737) 2020-05-31 23:10:20 +02:00
XhmikosR
950e6e0dd1 Cleanup Gemfile and add wdm on Windows (#2708) 2020-05-31 23:09:01 +02:00
XhmikosR
7cc5f9b409 Configure LGTM (#2723)
Exclude the plugins folder since it slows down the scan a lot
2020-05-31 14:31:55 +02:00
XhmikosR
13ed4d6aca Use https when possible. (#2733) 2020-05-31 14:28:48 +02:00
XhmikosR
c000e77bde Specify --format breakWith=lf for cleancss (#2741) 2020-05-31 13:33:15 +02:00
XhmikosR
fa20b2def4 docs: fix HTML errors (#2732)
* duplicate `title` tag; jekyll-seo-tag adds the title by default
* escape `<`
* fix duplicate IDs
* fix typo `Documentaion`
* add missing `alt` attributes in direct-chat.md
2020-05-31 13:18:26 +02:00
XhmikosR
10e69015d9 Remove extra newline in footer version info. (#2744) 2020-05-31 13:16:25 +02:00
XhmikosR
44fcb13d47 Fix prefix script to run for all CSS files (#2740) 2020-05-31 13:12:40 +02:00
XhmikosR
d29b8c222c Fix GitHub case. (#2739) 2020-05-31 13:11:55 +02:00
XhmikosR
68d4417aad Move rel attribute first for consistency (#2736) 2020-05-31 13:10:51 +02:00
XhmikosR
2a964189de postcss.config.js: remove unused check (#2735) 2020-05-31 13:10:29 +02:00
XhmikosR
a58c7da1f3 Bump year to 2020 in all HTML files. (#2731) 2020-05-31 13:09:43 +02:00
XhmikosR
71a7ef8831 HTML: specify lang. (#2730) 2020-05-31 13:09:01 +02:00
REJack
b5e0f8441b Merge pull request #2724 from XhmikosR/update-rollup-babel
Update rollup babel
2020-05-31 13:08:25 +02:00
XhmikosR
2eebf1514f Simplify CI (#2721) 2020-05-31 13:07:42 +02:00
XhmikosR
1d1a3fd075 Remove unneeded babel packages. 2020-05-30 16:48:54 +03:00
XhmikosR
ca8f201737 Update to rollup/plugin-babel 2020-05-30 16:48:54 +03:00
XhmikosR
4d2ad43e50 Regenerate package-lock.json to flatten deps. (#2720) 2020-05-30 13:11:58 +02:00
XhmikosR
bb990bddc5 Enforce LF. (#2717)
On Windows with `autocrlf: true`, which is the default, we ended up with modified files.
2020-05-30 13:00:13 +02:00
XhmikosR
e35ab44603 Remove unused devDependencies. (#2711) 2020-05-30 12:34:48 +02:00
XhmikosR
9b79ce4fa3 Update CI config (#2712)
* remove the non-LTS Node.js 13
* specify `CI: true` environment variable
* switch to `npm ci` which checks for package-lock.json and it's intended for CI
2020-05-30 12:32:39 +02:00
XhmikosR
c04f125f46 Update devDependencies. (#2709)
* @babel/cli                       ^7.8.4  →  ^7.10.1
* @babel/core                      ^7.9.0  →  ^7.10.1
* @babel/plugin-external-helpers   ^7.8.3  →  ^7.10.1
* @babel/preset-env                ^7.9.0  →  ^7.10.1
* autoprefixer                     ^9.7.5  →   ^9.8.0
* css-loader                       ^3.4.2  →   ^3.5.3
* eslint                           ^6.8.0  →   ^7.1.0
* eslint-plugin-compat             ^3.5.1  →   ^3.7.0
* node-sass                       ^4.13.1  →  ^4.14.1
* nodemon                          ^2.0.2  →   ^2.0.4
* postcss-cli                      ^7.1.0  →   ^7.1.1
* rollup                           ^2.3.2  →  ^2.11.2
* style-loader                     ^1.1.3  →   ^1.2.1
* terser                          ^4.6.10  →   ^4.7.0
2020-05-30 12:20:37 +02:00
XhmikosR
1877ee7431 Update daterangepicker to v3.1.0 (#2713) 2020-05-30 12:10:52 +02:00
XhmikosR
45eae49936 Fix invalid href value (#2707) 2020-05-30 12:07:53 +02:00
XhmikosR
8a9808575f Compress png and remove unused img (#2706)
* Losslessly compress PNG files

Before: 1,17 MB (1.228.084 bytes)
After:  1,13 MB (1.194.642 bytes)

* Rename image for consistency.

* Delete the unused mestro.png
2020-05-30 12:07:22 +02:00
XhmikosR
671be53be1 Losslessly compress JPG files. (#2705)
Before: 1,84 MB (1.932.709 bytes)
After:  1,78 MB (1.867.039 bytes)
2020-05-30 12:07:10 +02:00
Alberto G. Rodriguez U
d146750a87 Update implementations.md (#2697)
add implementation for Cakephp 4.x

Co-authored-by: REJack <info@rejack.de>
2020-05-30 11:56:09 +02:00
REJack
cad5566d67 add ASP.NET Boilerplate implementation in docs 2020-05-27 22:20:22 +02:00
REJack
c2e77427ba fix layout-boxed sidebar with sidebar-mini 2020-05-27 22:14:18 +02:00
REJack
da47f23145 replace small-box font-size transition with transform 2020-05-27 22:02:21 +02:00
REJack
414d14b2d2 prep pre version 2020-05-27 21:59:29 +02:00
REJack
6b8b69261f fix docs sidebar links 2020-05-19 22:41:11 +02:00
REJack
66268d5340 prep version 2020-05-19 22:39:46 +02:00
REJack
229600ba4c add brand-image-xl margin fix without logo-switch 2020-05-19 20:43:15 +02:00
REJack
fbe0340eb0 fix layout-boxed with default sidebar 2020-05-18 13:29:45 +02:00
REJack
4c50b36cbe rebuild dist map files 2020-05-17 02:10:47 +02:00
REJack
161099e3bc fix toastr full width position 2020-05-17 01:31:00 +02:00
REJack
cf7daa0159 fix select2 dropdown while maximized card 2020-05-17 01:05:53 +02:00
REJack
c8b930b290 fix duallistbox link in pages/forms/advanced 2020-05-17 01:00:22 +02:00
REJack
c26ef4e556 add ribbon over image demo & docs 2020-05-17 00:54:42 +02:00
REJack
9f5c6bcfd8 add wrap/truncate note for info-boxes 2020-05-08 16:06:57 +02:00
REJack
d04b8e0eba move travis-ci to github actions 2020-05-08 16:04:19 +02:00
REJack
a47b4e0fa0 update README 2020-05-08 15:12:46 +02:00
REJack
a3604d0c62 enhance info-box for text-truncate & text-wrap 2020-05-08 15:01:04 +02:00
REJack
ae470bec2e add margin-bottom to form-inline in sidebar 2020-05-05 12:44:06 +02:00
REJack
d5de8efb33 Merge branch 'master' of https://github.com/ColorlibHQ/AdminLTE 2020-05-04 18:03:54 +02:00
REJack
dc4054d216 fix inline input-group in sidebar on macOS 2020-05-04 17:54:26 +02:00
Dede Iskandar
eaf5cf449f add container-fluid (#2672) 2020-05-04 13:10:29 +02:00
Erdi Köse
e83e5b183d add implementations of Angular, React and Vue (#2658) 2020-05-04 12:54:54 +02:00
REJack
c6ef7cc311 Delete bug-report-for-adminlte-v2-4-x.md 2020-05-04 12:11:35 +02:00
REJack
e0e5693493 update plugin files 2020-05-03 13:23:08 +02:00
REJack
d20dd7c13a replace transition to opacity for sidebar 2020-05-03 13:22:59 +02:00
REJack
850dc37d6d add offset to calendar card dropdown in index.html 2020-05-02 12:37:58 +02:00
REJack
35782815ef add !important to text-(color) 2020-04-28 10:55:48 +02:00
REJack
461a483144 fix anchor color on .btn 2020-04-27 19:37:51 +02:00
REJack
26ce58fe28 fix whitespace with fixed navbar & footer 2020-04-27 19:28:05 +02:00
Daniel
bf2bafa96c updated readme and license (#2653)
* readme and license updated

* Update LICENSE

* Update README.md

* Update LICENSE
2020-04-15 07:47:13 +02:00
Daniel
e7e61f5fbe datepicker demo addded (#2643) 2020-04-10 14:29:07 +02:00
Medard Mandane
6ffe423c66 Update Doc and License info of editor (#2637)
Summernote is the editor being used in the html file but the documentation and license info is referenced to a different github repo. It's kinda misleading
2020-04-10 14:28:46 +02:00
REJack
f1236a7025 added min nodejs version info & updated .travis.yml 2020-04-03 21:24:11 +02:00
REJack
4723bccf43 prep version 2020-04-02 01:06:25 +02:00
REJack
709c01d450 updated dependencies & devDependencies 2020-04-02 00:52:43 +02:00
REJack
d67c3a0812 fixed slow scrolling bug with ScrollAnywhere 2020-04-01 17:41:46 +02:00
REJack
282ff7f6ce enhanced PushMenu's autoCollapse feature 2020-04-01 17:20:47 +02:00
REJack
533a76538c downgraded bootstrap-switch from v3.4.0 to v3.3.4 2020-04-01 17:14:58 +02:00
REJack
a53971d122 fixed accent with pagination 2020-04-01 17:01:35 +02:00
REJack
459ac7775e prepr pre-version 2020-04-01 16:55:36 +02:00
REJack
87b8078d9b prep version 2020-04-01 15:20:05 +02:00
REJack
ae68ffc134 fixed docs generation for local docs 2020-04-01 15:09:49 +02:00
REJack
b9460ae8ea rebuild dist files 2020-04-01 14:29:28 +02:00
REJack
c6b1b4f586 fixed sidebar overlapping toolbar on mobile safari 2020-04-01 14:27:14 +02:00
REJack
67174b5c6b fixed footer gap with .text-sm on .main-footer 2020-04-01 14:12:33 +02:00
REJack
683f7bfccf Merge branch 'master' of https://github.com/ColorlibHQ/AdminLTE 2020-04-01 13:50:00 +02:00
REJack
ed6ae4dbb2 replaced fake spaces with real spaces 2020-04-01 13:49:55 +02:00
Anderson Carpi
129475db78 Overlay for tab-panels (#2612)
* Overlay for tab-panels

Don't know if i did it right, double check plz... 
There's a way to avoid the use of a overlay-wrapper? i'm not good in css....

* Update navbar.html
2020-03-23 20:08:57 +01:00
Anderson Carpi
b6e1529f3d NavBar Example had duplicated ids (#2613)
Fixed duplicated ids on NavBar Example page
2020-03-23 18:35:24 +01:00
REJack
0643791d8d fixed card remove icon in pages/forms/advanced 2020-03-13 18:13:26 +01:00
REJack
bc3123cb08 fixed select2 single input focus without opened menu 2020-03-13 17:41:13 +01:00
REJack
14719bdd88 added panelAutoHeight option to Layout.js 2020-03-10 09:28:26 +01:00
cyoung
21641f7c7c Fix incorrect choice of words in README. (#2590) 2020-03-09 21:02:39 +01:00
lostship
76854a2634 Fixed typo in docs (#2586)
* Fixed error in cards.md

card tools:
data-widget -> data-card-widget

* Fixed typo in card-widget.md

collapseTrigger's default value:
[data-card-widget="remove"] -> [data-card-widget="collapse"]

removeTrigger's default value:
[data-card-widget="collapse"] -> [data-card-widget="remove"]
2020-03-09 00:13:10 +01:00
REJack
6934469b38 enhanced DataTables demo with responsive plugin 2020-03-04 13:29:27 +01:00
REJack
09b89135c7 updated docs/implementations.md 2020-03-03 08:49:19 +01:00
REJack
61a58cda9a updated upgrade-guide.md with an info block for CSS/JS files 2020-03-03 08:44:10 +01:00
REJack
cafc66ae7d fixed child indent on hover with nav-compact 2020-02-27 07:49:36 +01:00
REJack
662b51c9c0 fixed brand-link transition with navbar fixed 2020-02-26 12:55:09 +01:00
REJack
b7efadbbca enhanced Layout.js with options for login auto height with interval ability 2020-02-25 14:25:05 +01:00
REJack
533a5917f5 enhanced register & login page min-height 2020-02-25 09:46:35 +01:00
REJack
9261d762b7 moved exclude to matrix in .travis.yml 2020-02-21 15:59:27 +01:00
REJack
f70527b620 fixed .travis.yml 2020-02-21 15:53:28 +01:00
REJack
3551ac8afb excluded yarn on node 8 in .travis.yml 2020-02-21 15:35:09 +01:00
REJack
9baa03ed63 rebuild css after PR's 2020-02-21 15:34:47 +01:00
Tasuku Suzuki
27ba2f178e Fix typo in Main Sidebar Component (#2521) 2020-02-21 15:26:48 +01:00
A Web Artisan
6934f4c541 Fix typo (#2544)
Removed commas

Co-authored-by: Raphael Jackstadt <info@rejack.de>
2020-02-21 15:26:27 +01:00
REJack
3b69d63eb4 fixed aria related role="button" on pushmenu & control-sidebar links 2020-02-21 15:17:06 +01:00
REJack
ede720e2b8 enhanced select2 text-sm support with form-control-sm 2020-02-21 15:09:02 +01:00
REJack
4ba150d509 fixed accent override for dropdown-item:active 2020-02-13 14:55:20 +01:00
REJack
187331143f added admin-lte-dotnet link to docs/implementations.md 2020-02-13 14:50:57 +01:00
REJack
ba8f8a8bbc fixed select2 height with text-sm 2020-02-13 14:07:05 +01:00
REJack
a3ede49485 fixed select2 focus border color 2020-02-13 13:50:38 +01:00
REJack
f9a40e3b46 fixed sidebar nav icon with text-sm 2020-02-12 15:18:56 +01:00
REJack
b1b5ce3cb5 fixed sidebar nav icon placing (without body.text-sm) 2020-02-12 10:09:02 +01:00
REJack
771a2d5530 enhanced dropdown position in navbar dropdown menus 2020-02-11 15:15:26 +01:00
REJack
4480db7f27 fixed accent link color overrides on sidebar and btn-app 2020-02-11 10:46:00 +01:00
REJack
0238015f5e fixed layout-fixed correct sidebar height to vh instead of % 2020-02-07 10:45:11 +01:00
REJack
b1c99c8963 fixed CardRefresh doubled load if loadOnInit is true 2020-02-07 10:27:44 +01:00
REJack
4d08d4b577 enhanced nav tabs inside card-header demo 2020-02-06 08:03:00 +01:00
REJack
4b2ea27a82 enhanced fullcalendar style & demo
- added forgotten themeSystem option in demo
- enhanced toolbar style on mobile
2020-02-02 10:04:32 +01:00
REJack
ff41f98ea5 enhanced CardWidget & card style with nav-tabs 2020-01-28 11:25:39 +01:00
bansalshashank
3f8802e647 filename and coresponding changes done for e_commerce.html, project_add.html, project_edit.html and project_detail.html (#2516)
Co-authored-by: EloquentShashank <52653070+EloquentShashank@users.noreply.github.com>
2020-01-28 11:07:41 +01:00
bansalshashank
8a66185901 [Examples] Product image now changes on clicking product image thumb (#2509)
Co-authored-by: EloquentShashank <52653070+EloquentShashank@users.noreply.github.com>
2020-01-24 12:55:01 +01:00
REJack
63eb7d2e8d fixed icheck-bootstrap docs link in demo 2020-01-23 07:42:07 +01:00
bansalshashank
64874f04fe Typo in title of examples/invoice-print fixed (#2503)
Co-authored-by: EloquentShashank <52653070+EloquentShashank@users.noreply.github.com>
2020-01-22 14:03:30 +01:00
bansalshashank
6800a0235d Title Changed from Project Edit to Project Add in examples/project_add.html (#2501)
Co-authored-by: EloquentShashank <52653070+EloquentShashank@users.noreply.github.com>
2020-01-22 13:10:29 +01:00
REJack
56ec9a3942 fixed npm audit 2020-01-22 08:55:00 +01:00
REJack
e73c7f15fa prep pre version 2020-01-22 08:47:01 +01:00
REJack
0e48302342 prep version 2020-01-17 09:05:37 +01:00
REJack
ce486267c4 fixed nested card collapse/expand icon bug 2020-01-17 07:37:39 +01:00
REJack
1ea675c50d fixed accent color override with dropdown menus 2020-01-16 15:23:49 +01:00
REJack
a4d297de9d fixed card-outline header border inside card-tabs 2020-01-16 15:17:34 +01:00
REJack
ffadc3d261 fixed sidebar nav header display on collapse hover 2020-01-16 15:13:14 +01:00
REJack
1cbf929bcf added .badge-btn style 2020-01-15 08:52:29 +01:00
REJack
3e236c9ff9 added text-nowrap to responsive tables 2020-01-14 15:07:33 +01:00
REJack
6fbbde4883 added flex-direction column to .login-page & .register-page 2020-01-14 14:57:17 +01:00
REJack
44fac0f65e rebuild dist files after PR's 2020-01-14 14:54:51 +01:00
frenchykiller
8da329441e Fixed double border on cards with nav tabs (#2477) 2020-01-14 14:51:55 +01:00
Andrii
d68e264e42 Fix typo in README (#2447) 2020-01-14 14:51:29 +01:00
REJack
6c06201930 small layout-top-nav enhancements
- fixed logo position
- added ability to use top-nav with sidebar (incl. demo)
2020-01-14 14:46:14 +01:00
REJack
dbe3e80778 fixed table condensed demo 2020-01-14 14:28:10 +01:00
REJack
add29e7168 added nuget package in implementations.md 2020-01-12 11:32:04 +01:00
REJack
05f23cb8c3 fixed sidebar mini collpased hover nav styles 2019-12-18 12:43:57 +01:00
REJack
56c5319f98 fixed sidebar mini with various sidebar nav styles (also combined) 2019-12-18 12:17:41 +01:00
REJack
7a47aad1e9 removed unnecessary fullcalendar plugin css file from demo 2019-12-15 10:27:37 +01:00
REJack
478cfc1743 Merge branch 'master' of https://github.com/ColorlibHQ/AdminLTE 2019-12-12 09:52:07 +01:00
REJack
2473021861 fixed Layout('init') for external use 2019-12-12 09:49:02 +01:00
Ppojin
22436d9cd2 Correct all day event (#2438) 2019-12-11 08:01:25 +01:00
Ppojin
a67b6b8d10 Correct and Improve of FilterizR sample page (#2439)
Correction of filtr-item's data-category, and add Category 4 (COLORED, BLACK)
2019-12-11 08:00:49 +01:00
REJack
72d348d34d fixed accent focus border color on form elements 2019-12-07 11:34:02 +01:00
REJack
71d32f8114 added new lightblue color (legacy blue) 2019-12-05 09:48:59 +01:00
REJack
945fd0c43b rebuild alt dist files 2019-12-04 14:54:21 +01:00
REJack
ebe29fbd24 fixed form label with alternative css files 2019-12-04 14:54:06 +01:00
REJack
5613006ea7 fixed box-shadow display while fully collapsed sidebar 2019-12-04 10:21:14 +01:00
REJack
6832bf6937 fixed dropdown menu in top-nav layout 2019-12-04 10:06:10 +01:00
REJack
ad3cfdd498 updated dependencies & devDependencies
- updated chart.js to v2.9.3
- updated select2 to v4.0.12
- updated @babel/cli to v7.7.4
- updated @babel/core to v7.7.4
- updated @babel/plugin-external-helpers to v7.7.4
- updated @babel/preset-env to v7.7.4
- updated autoprefixer to v7.7.4
- updated css-loader to v3.2.1
- updated eslint to v6.7.2
- updated rollup to v1.27.8
- updated style-loader to v1.0.1
- updated terser to v4.4.2
2019-12-04 10:03:30 +01:00
REJack
0b1372dd0f fixed accent color with buttons 2019-12-04 09:34:36 +01:00
REJack
857c3e7e69 replaced legacy dl-horizontal with bs4 grid 2019-12-04 09:05:42 +01:00
REJack
a324025b67 fixed nested card header style 2019-11-28 09:58:54 +01:00
REJack
42d4b59808 fixed accent color in sidebar 2019-11-25 09:02:11 +01:00
REJack
502887c71c fixed layout-navbar–fixed on iOS & macOS Safari 2019-11-25 08:41:25 +01:00
REJack
17a48d70c7 added jquery validation demo 2019-11-22 11:19:12 +01:00
REJack
d23a8d3d7f fixed custom checkbox padding 2019-11-22 11:09:49 +01:00
REJack
c27e8738cc fixed duplicate variable in demo.js 2019-11-22 10:32:31 +01:00
REJack
259d67ef8e some small control sidebar fixes
- fixed content height calculation with overlapping control sidebar
- fixed collapse/show functions (functions was swapped)
2019-11-22 10:23:17 +01:00
REJack
d327d76ae4 prep pre version 2019-11-22 09:50:18 +01:00
REJack
5988c4f9db prep version 2019-11-20 09:41:28 +01:00
REJack
29dc8e85fd fixed comment indent in scss files 2019-11-20 09:18:11 +01:00
REJack
d1f555e679 disabled expandSidebar by default in Treeview 2019-11-20 09:13:58 +01:00
REJack
e24c4d01ff some small js option fixes 2019-11-17 11:53:47 +01:00
REJack
f5286d6229 enhanced javascript plugins
- added expand & collapse method in PushMenu
- added expandSidebar & sidebarButtonSelector option in Treeview
- updated docs
2019-11-13 14:10:18 +01:00
REJack
7e86bd68cb updated docs/implementations 2019-11-13 13:47:18 +01:00
REJack
2c7229674c fixed user-menu dropdown top border 2019-11-12 15:57:25 +01:00
dima-bzz
78325db63a Add default to $main-footer-bg (#2394) 2019-11-10 11:21:26 +01:00
REJack
a2200f9bde fixed bootstrap-slider tooltip not shown 2019-11-07 08:36:32 +01:00
REJack
6cb3427fb8 fixed mozilla outline bug 2019-11-07 08:35:19 +01:00
REJack
fb77bcb178 fixed css compile scripts for windows usage 2019-11-07 08:14:16 +01:00
REJack
bfb74266b7 added missing starter page link in docs/layout.md 2019-11-07 07:32:20 +01:00
REJack
f80e848273 fixed overlapping products card in index3.html 2019-11-06 13:18:54 +01:00
REJack
1406f85866 added workaround for chartjs IE11 height bug 2019-11-06 10:57:23 +01:00
REJack
98c5a988ba fixed example links 2019-11-05 12:25:46 +01:00
Androz
59417e2a29 Fix broken link (#2377) 2019-11-05 11:04:48 +01:00
REJack
e100ad119f fixed margin left on sidebar collapse without sidebar-mini 2019-11-05 10:50:06 +01:00
REJack
a038600a03 updated dependencies & devDependencies
- updated chart.js to v2.9.2
- updated flag-icon-css to v3.4.5
- updated pdfmake to v0.1.62
- updated sweetalert2 to v8.19.0
- updated devDep autoprefixer to v9.7.1
- updated devDep eslint to v6.6.0
- updated devDep node-sass to v4.13.0
- updated devDep rollup to v1.26.3
2019-11-04 10:04:46 +01:00
REJack
0a0b7b5978 fixed card header background 2019-11-04 09:57:11 +01:00
REJack
4754f57ee8 prep pre version 2019-11-04 09:55:25 +01:00
REJack
f7aa7f36ba updated docs/implementations.md 2019-11-02 16:42:59 +01:00
REJack
db50d38af4 updated README.md 2019-11-02 16:18:08 +01:00
REJack
d17b058db4 updated issue template labels 2019-11-02 15:47:10 +01:00
Raphael Jackstadt
3348d3a414 Updated README.md 2019-11-02 14:51:13 +01:00
REJack
e78ee8d9ca prep version 2019-11-02 13:54:26 +01:00
REJack
5198872d30 updated README.md 2019-11-02 13:33:03 +01:00
REJack
b7a1c871ce fixed card default border after adding nav tabs support
- placed default card tabs style into .card-tabs
- updated demo
2019-11-02 08:59:45 +01:00
REJack
2ea45f22f3 fixed labels in issue templates 2019-11-01 12:25:19 +01:00
REJack
6457d31b0d added forget password & recover password demo 2019-11-01 12:19:24 +01:00
REJack
c4b90591a8 added new issue templates 2019-11-01 12:18:42 +01:00
REJack
bed1408234 updated install instructions in docs/index.md 2019-11-01 10:28:20 +01:00
REJack
54adf72cd3 fixed focus border in mozilla (bug with focusring removal) 2019-11-01 10:21:25 +01:00
REJack
d5404fb1f3 removed node_js 9 from .travis.yml
(not supported by node-sass so we exclude it complete)
2019-10-31 14:08:19 +01:00
REJack
ec0cf8a197 corrected select2 paddings to change look similar to form-control/custom-form select 2019-10-31 12:59:46 +01:00
REJack
4d13072001 added job exclude in .travis.yml 2019-10-31 12:47:10 +01:00
REJack
08c597d413 added .travis.yml 2019-10-31 12:10:29 +01:00
REJack
67024d83e4 added .nav-legacy & .nav-collapse-hide-child docs part 2019-10-31 08:48:28 +01:00
REJack
60830bb6c7 fixed select2 paddings/margins 2019-10-31 08:47:54 +01:00
REJack
448556d366 fixed mozilla focusring outline 2019-10-30 12:22:34 +01:00
REJack
e8ddb644a6 removed mozilla dotted border from focus links 2019-10-30 12:11:23 +01:00
REJack
e7d646cba1 some little fixes
- fixed info box icon aligning
- added .nav-legacy
- added .nav-collapse-hide-child
- fixed sidebar-light-hover-bg & sidebar-light-active-color
2019-10-30 11:59:53 +01:00
REJack
090bffc34c prep version 2019-10-29 09:39:22 +01:00
REJack
925254199e enhanced scss structure & compiled size
- reduced filesize by ~100kb
- splited _mixins into seperate files
- replaced `@extend`'s
- added split css files (core, components, extra-components, ...)
- changed cursor style for .btn.disabled
- enhanced package.json css* scripts
2019-10-29 09:22:51 +01:00
REJack
f60e0626fc changed user-image size/margin in .user-menu 2019-10-25 09:32:23 +02:00
REJack
139fbd3454 fixed box-shadow with select2 bootstrap4 theme 2019-10-24 10:04:55 +02:00
REJack
242ef8984a fixed select2 init bug in forms/advanced.html 2019-10-24 08:24:25 +02:00
REJack
acf9fe8403 added bs-custom-file-input plugin 2019-10-23 15:24:14 +02:00
REJack
247b797c38 changed input placeholder color with lighten 2019-10-23 11:49:59 +02:00
REJack
c5c5b6a407 fixed select2 multiple padding bottom 2019-10-23 11:36:05 +02:00
REJack
7d26cdd615 updated docs asset plugins 2019-10-23 09:54:04 +02:00
REJack
0f18f03807 fixed license url in js files 2019-10-23 09:51:31 +02:00
REJack
373c131092 fixed fixLayoutHeight on pushmenu collapse/expand event & removed auto expand sidebar on resize 2019-10-23 09:11:47 +02:00
REJack
8d20d4791f added abilty to use select2 with input-group 2019-10-23 08:46:37 +02:00
REJack
4acb2b49e6 fixed content margin with active sidebar overlay 2019-10-23 08:17:36 +02:00
REJack
46a05235ab rebuild dist files 2019-10-22 09:20:45 +02:00
REJack
977d95b43c fixed border-top for card-outline-tabs nav-item 2019-10-22 09:00:43 +02:00
REJack
4f28b5e39a updated package-lock.json 2019-10-21 11:58:19 +02:00
REJack
016ca7c2b3 rebuild dist files 2019-10-21 11:58:05 +02:00
REJack
386b525f77 added alert-default-* class for bootstrap4 legacy style 2019-10-21 11:57:44 +02:00
REJack
2bfcb514df fixed ::placeholder generation with autoprefixer 2019-10-21 11:56:54 +02:00
REJack
9f67b816a4 updated devDependecies 2019-10-21 11:55:05 +02:00
REJack
cec053b7bf updated dependencies & copied to plugin/
- updated @fortawesome/fontawesome-free to v5.11.2
- updated @sweetalert2/theme-bootstrap-4 to 2.2.1
- updated @ttskch/select2-bootstrap4-theme to v1.3.2
- updated datatables.net to v1.10.20
- updated datatables.net-autofill-bs4 to v2.3.4
- updated datatables.net-bs4 to v1.10.20
- updated datatables.net-buttons-bs4 to v1.6.1
- updated datatables.net-colreorder-bs4 to v1.5.2
- updated datatables.net-fixedcolumns-bs4 to v3.3.0
- updated datatables.net-fixedheader-bs4 to v3.1.6
- updated datatables.net-keytable-bs4 to v2.5.1
- updated datatables.net-rowgroup-bs4 to v1.1.1
- updated datatables.net-rowreorder-bs4 to v1.2.6
- updated datatables.net-scroller-bs4 to v2.0.1
- updated datatables.net-select-bs4 to v1.3.1
- updated flag-icon-css to v3.4.2
- updated flot to v3.2.13
- updated fs-extra to v8.1.0
- updated inputmask to v4.0.9
- updated overlayscrollbars to v1.10.0
- updated pdfmake to v0.1.60
- updated popper.js to v1.16.0
- updated select2 to v4.0.11
- updated sweetalert2 to v8.18.5
2019-10-21 11:54:16 +02:00
Aleksandr Rogozin
eae052422d Fixed unnecessary margin in list in timeline component (#2340) 2019-10-21 11:00:50 +02:00
Raphael Jackstadt
829a9b3c6c fixed collapsed sidebar autocollapse bug (#2339) 2019-10-19 12:01:46 +02:00
REJack
14967aec94 prep version & rebuild dists 2019-10-19 11:38:03 +02:00
REJack
0d4a75475a changed package.json docs scripts 2019-10-19 11:32:35 +02:00
Raphael Jackstadt
7acb89f44b fixed navbar tabs border in card-header (#2333) 2019-10-16 08:43:32 +02:00
Raphael Jackstadt
29a3ba3953 fixed content height calc with less sidebar content (#2332) 2019-10-16 08:34:07 +02:00
Raphael Jackstadt
302c85fb47 fixed select2 multiple height bug (#2325) 2019-10-12 12:02:07 +02:00
Raphael Jackstadt
f83f34546d fixed autocallapse on mobile touchscroll & rebuild dists (#2324) 2019-10-12 11:41:11 +02:00
Raphael Jackstadt
30b69da0b3 Merge pull request #2323 from ColorlibHQ/fix-content-height-calculation
fixed content height calculation
2019-10-12 11:37:38 +02:00
REJack
bd982813c4 fixed content height calculation 2019-10-12 11:36:52 +02:00
Raphael Jackstadt
e920e164e6 Merge pull request #2321 from dbugit/patch-1
Update _select2.scss
2019-10-11 15:43:32 +02:00
Adriano Pedro
f13e935b75 Update _select2.scss
The arrow down overrides the clear "x" button.
Removing this padding-right: 0 fix this issue.
2019-10-11 11:22:05 +01:00
Raphael Jackstadt
5bfaaa02d8 Merge pull request #2319 from ColorlibHQ/add-new-plugin-jquery-validation
added new plugin jquery-validation v1.19.1
2019-10-10 12:56:11 +02:00
REJack
c3a6d62a1d added new plugin jquery-validation v1.19.1 2019-10-10 12:55:35 +02:00
Raphael Jackstadt
00ae60be24 Merge pull request #2316 from ColorlibHQ/enable-auto-sidebar-collapse
enable auto collapse size by 992px as default option
2019-10-08 12:05:44 +02:00
REJack
2356b9844b enable auto collapse size by 992px as default option 2019-10-08 12:02:43 +02:00
Raphael Jackstadt
6f2a4f7a0b Merge pull request #2313 from ColorlibHQ/fix-chartjs-resize-bug
fixed resizing bugs with chartjs in index.html
2019-10-07 09:36:48 +02:00
REJack
0dc32b828a fixed resizing bugs with chartjs in index.html 2019-10-07 09:35:42 +02:00
Raphael Jackstadt
10d10e7537 Merge pull request #2312 from ColorlibHQ/fix-submenu-expand-bug
fixed submenu expand bug
2019-10-07 09:15:11 +02:00
REJack
2b0e4aa843 fixed submenu expand bug 2019-10-07 09:13:50 +02:00
REJack
c6a19a97f2 try to fix docs problems 2019-10-06 09:57:16 +02:00
REJack
d8a6ddca02 rebuild dist files 2019-10-04 15:18:22 +02:00
REJack
7a4a0659d1 prep version 2019-10-04 15:18:09 +02:00
Raphael Jackstadt
85a1215dd5 Merge pull request #2303 from REJack/v3-dev
v3.0.0-rc.3 fixes
2019-10-04 15:12:15 +02:00
REJack
c011e42b77 overhauled top-nav layout with a collapsable menu 2019-10-03 14:34:22 +02:00
REJack
99e51bc31a updated install instruction in docs 2019-10-03 14:18:35 +02:00
REJack
c09241069b fixed invoice-print loading from file:// 2019-10-03 14:09:27 +02:00
REJack
c2d3d8595c fixed margin of input-group, nav & pagination inside card-tools 2019-10-03 13:57:39 +02:00
REJack
3be22b6be9 fixed npm i prepare plugins error 2019-10-03 13:51:18 +02:00
REJack
c22642766e fixed accent build error 2019-10-03 13:26:35 +02:00
REJack
81e3dd0eab moved fs-extra to deps instead of devDeps 2019-10-03 13:22:51 +02:00
Raphael Jackstadt
43786cdd8c Merge pull request #2297 from REJack/v3-dev
rc.3 fix
2019-10-02 13:25:48 +02:00
REJack
4e8de7689f rebuild dist files 2019-10-02 13:24:54 +02:00
REJack
5d7e709c7c prep version 2019-10-02 13:23:30 +02:00
REJack
c08bc98075 fixed npm ignores 2019-10-02 13:20:59 +02:00
Raphael Jackstadt
9dc6d1dfd3 Merge pull request #2256 from REJack/v3-dev
first changes after v3.0.0-rc.1
2019-10-02 12:49:22 +02:00
REJack
0997acea1e rebuild dist files 2019-10-02 12:44:03 +02:00
REJack
00675ef1cb prep version to v3.0.0-rc.2 2019-10-02 12:42:33 +02:00
REJack
cd5f84b253 enhanced default select2 theme (built in)
- created build/scss/plugins/_mixins.scss
- updated build/scss/plugins/_select2.scss
- added color variation for select2
- updated build/scss/AdminLTE(-raw).scss
- updated pages/forms/advanced.html with color variations and both themes
2019-09-25 10:24:16 +02:00
REJack
6099356207 enhanced login/register box positioning
- added min-height update for login-/register-page in Layout.js
- updated login-/register-page to display flex
- updated login/register demo to load adminlte.min.js
2019-09-23 11:39:30 +02:00
REJack
debb6c4727 added info to load plugin in docs/dependencies.md 2019-09-21 10:40:46 +02:00
REJack
c153f13057 added ability to change accent color (link & pagination) 2019-09-21 10:19:05 +02:00
REJack
c78169c3f7 overhauled a bit the card header with nav tabs style 2019-09-21 09:58:03 +02:00
REJack
ffc0c92678 removed unnecessary info in card-refresh.md 2019-09-20 12:26:38 +02:00
REJack
6ebedadced updated plugins
- updated fontawesome-free to 5.11.1
- updated flag-icon-css to 3.4.0
- updated sweetalert2 to 8.17.6
2019-09-20 12:13:00 +02:00
REJack
6c2104dc2d added footer small text checkbox in demo control sidebar 2019-09-20 10:51:21 +02:00
REJack
acd65cf524 added ability to add nav tabs inside card header
- added demo in pages/UI/navbar.html
- added style for top border for .card-outline-tabs
- overhauled a bit the navbar demo section
2019-09-20 10:51:07 +02:00
REJack
f51bce162f fixed control sidebar top/bottom with small navbar/footer & fixed back-to-top zindex 2019-09-20 10:40:59 +02:00
REJack
5af52cf9df removed screenCollapseSize option for PushMenu and removed isShown() 2019-09-19 13:34:26 +02:00
REJack
c950273d43 fixed right sided vertical nav tabs demo 2019-09-19 09:59:44 +02:00
REJack
c1207646f4 fixed vertical nav-tabs border style 2019-09-19 09:58:24 +02:00
REJack
40d88ee12e fixed treeview selection 2019-09-19 09:57:49 +02:00
REJack
91840e0231 fixed color button in demo control sidebar 2019-09-19 09:16:29 +02:00
REJack
4454f712ff plugins prepare enhanced
- split Plugins in Plugins & DocsPlugins
- created docs-prepare & install npm script
- renamed prepare npm script to prepare-release
- updated .npmignore
2019-09-19 09:02:07 +02:00
REJack
3607ed15ed added unnecessary plugin files (*.md, *.html & package.json) to .gitignore 2019-09-19 08:53:54 +02:00
REJack
a9203b3882 removed unnecessary plugin files (*.md, *.html & package.json) 2019-09-19 08:51:40 +02:00
REJack
483a58ce74 updated plugins
- updated pdfmake to 0.1.59
- updated sweetalert2 to 8.17.3
2019-09-17 11:37:57 +02:00
REJack
8799b5497c some little text-sm fixes
- button text size
- dropdown text size
- dropdown toggle icon alignment
- top-nav brand image margin
- added docs part
2019-09-17 10:42:32 +02:00
REJack
1261a7e36c added .dropdown-icon for icon only dropdown toggles 2019-09-17 10:40:51 +02:00
REJack
7774adb2a7 fixed missing bootstrap 4 migration changes 2019-09-17 08:30:37 +02:00
REJack
be0ce68264 changed worldmap to us map in demos 2019-09-17 08:26:22 +02:00
REJack
556c1c80df enhanced content header with body.text-sm 2019-09-16 14:42:34 +02:00
REJack
e6db3e09ea fixed Treeview toggle() 2019-09-16 14:40:38 +02:00
REJack
683a015a4e removed console.log from Layout.js 2019-09-16 14:10:12 +02:00
REJack
026f400dcd fixed docs for local generation 2019-09-16 14:09:51 +02:00
REJack
64df71d125 first steps to reduce npm package size & deliver generated docs
- updated .gitignore
- created .npmignore
- created new scripts for docs and publish prepare in package.json
2019-09-16 14:05:24 +02:00
REJack
6f73dc7ca7 changed next() to find() in Treeview toggle() 2019-09-16 13:50:46 +02:00
REJack
a93835979a added sidebar no expand checkbox in demo control sidebar script 2019-09-16 13:09:57 +02:00
REJack
bb2e0de6cd fixed nav-flat in collapsed sidebar 2019-09-16 13:07:25 +02:00
REJack
ef35ff2cbe fixed sidebar overlay with .nav-flat 2019-09-16 12:22:39 +02:00
REJack
28fff0df4c added font-size-xs variable 2019-09-16 12:11:44 +02:00
REJack
accf50cf1b renamed .text-xs to .text-md and created a correct .text-xs 2019-09-16 12:11:14 +02:00
REJack
7f68cf5cc9 fixed white close buttons text shadow in modals 2019-09-16 12:09:49 +02:00
REJack
d8e5b6f2c2 added bg-* info for toast in docs/layout.md 2019-09-16 12:08:56 +02:00
REJack
748fd54d3f added dropdown-menu-lg info in docs/components/miscellaneous.md 2019-09-16 12:05:55 +02:00
REJack
ec008a693f added Toasts.js & enhanced toasts style
- created Toasts.js
- updated build/js/scss/plugins/_toastr.scss
- added toast-variant mixin in build/scss/_mixinis.scss
- created build/scss/_toasts.scss
- added zindex-toasts variable in build/scss/_variables.scss
- updated build/scss/AdminLTE.scss & build/scss/AdminLTE-raw.scss
- updated pages/UI/modals.html
- created docs/javascript/toasts.md
- updated docs/_config.yml
2019-09-16 12:05:25 +02:00
REJack
487ccecf05 enhanced bootstrap switch js part in demo 2019-09-13 14:41:19 +02:00
REJack
7bb5b47bff added bootstrap-switch
- updated package.json
- updated build/npm/Plugins.js
- added build/scss/plugins/_bootstrap-switch.scss with bootstrap 4 style & color overrides
- updated pages/forms/advanced.html with bootstrap switch demo & added rows in icheck demo
- added plugins files
2019-09-13 13:44:59 +02:00
REJack
9f46a194d3 added text-sm body checkbox in demo.js 2019-09-13 10:52:14 +02:00
REJack
0c9e0b7b49 fixed offset in pages/forms/general 2019-09-13 10:40:17 +02:00
REJack
b8eac86970 fixed active border on sidebar nav with nav-flat 2019-09-13 10:38:45 +02:00
REJack
e2ad19ab11 fixed user-block inside post & fixed profile example 2019-09-13 10:38:07 +02:00
REJack
15f11f2f33 fixed sales card markup on index.html 2019-09-13 10:11:27 +02:00
REJack
d8904dd346 enhanced .text-sm support via body & fixed card-text float error 2019-09-13 10:09:58 +02:00
REJack
b78a1c45bb added sidebar form support & updated sidebar docs 2019-09-11 15:10:42 +02:00
REJack
d37b7e6af8 fixed sidebar margin top false with layout(-*)-navbar-not-fixed 2019-09-11 14:38:53 +02:00
REJack
1f6e992757 fixed sidebar-no-expand display issue with brand-image-xl/xs & nav-child-indent 2019-09-11 14:27:56 +02:00
REJack
580e6a12a5 updated demo.js with new text-sm, nav-compact, nav-flat & child-indent checkbox 2019-09-11 13:56:30 +02:00
REJack
abece383c4 added .nav-flat style with child-indent support 2019-09-11 13:55:20 +02:00
REJack
9b290fa5d0 added support for .text-sm with brand-link, main-sidebar & main-footer 2019-09-11 12:32:32 +02:00
REJack
bc8b990c1a added multi level example across the demo pages 2019-09-09 15:34:49 +02:00
REJack
0fd72b8837 enhanced radio button group with bg-*
- added active override for .btn.bg-*
- added radio button group demo in pages/UI/buttons.html
2019-09-09 15:07:23 +02:00
REJack
8c18a36f6e created docs/components/miscellaneous.md with dropdown-hover infos 2019-09-09 14:51:57 +02:00
REJack
26741a95c5 updated pages/UI/buttons.html with hoverable split buttons & corrected the split buttons markup 2019-09-09 14:45:43 +02:00
REJack
7d35fb3b3e readded hold-transition remove in Layout.js 2019-09-09 14:27:58 +02:00
REJack
4453262bb0 added pace demo & pace override
- created pages/examples/pace.html
- created build/scss/plugins/_pace.scss with color overrides
- created docs/components/plugins.md with plugin overrides & extra styles
- updated docs sidebar menu
- updated demo sidebar menu with pace demo link
2019-09-09 14:19:35 +02:00
Raphael Jackstadt
07720d6094 Merge pull request #2259 from milkcocoa/fix-table-valign-middle
Fix for table-valign-middle doesn't work
2019-09-08 12:45:56 +02:00
Shu Masuda
ce78f25deb Fix for table-valign-middle doesn't work 2019-09-07 14:18:40 +09:00
REJack
aebfe08b33 fixed background color for brand-link with navbar-* 2019-09-06 10:22:22 +02:00
REJack
a99c9b7959 fixed sidebar state remember to work in both ways 2019-09-05 08:15:35 +02:00
REJack
cac5828617 fixed input-group with rounded-0 on login/register 2019-09-03 12:37:24 +02:00
REJack
0a1338086a fixed content-height calculation 2019-09-03 12:36:55 +02:00
REJack
b2139077f5 removed breakpoint from control-sidebar 2019-09-03 12:06:13 +02:00
REJack
f93b3fea4d fixed inputmask markup 2019-09-03 11:43:54 +02:00
Raphael Jackstadt
0bf308ebd6 Merge pull request #2220 from REJack/v3-dev
further changes for v3.0.0-rc.1
2019-09-01 15:51:13 +02:00
REJack
baea4e435b prep version & rebuild dist files 2019-09-01 15:16:39 +02:00
REJack
cda2fe3f4c added first version of upgrade guide 2019-09-01 15:10:03 +02:00
REJack
df6eb2f1d5 added text-align center to widget-user-header 2019-09-01 11:21:33 +02:00
REJack
cf176f0cb0 adjusted a bit the widget-user 2019-09-01 11:15:42 +02:00
REJack
7d15c6ac8c updated .user-block & .widget-user 2019-08-31 10:25:58 +02:00
REJack
4d0080e1c6 changed cards header 2019-08-31 10:20:46 +02:00
REJack
2658574241 fixed card header/title padding 2019-08-31 10:01:24 +02:00
REJack
a8051f5666 updated some demos
- added dropdown-hover for "Hover for action" in layout/top-nav
- changed bootstrap modal info text in UI/modals
- updated vertical tabs examples for a better mobile view
2019-08-31 09:50:32 +02:00
REJack
8cee30f14e fixed callout link color 2019-08-31 09:46:04 +02:00
REJack
51579d5324 added ekko-lightbox plugin
- updated package.json
- updated build/npm/Plugins.js
- updated pages/gallery.html
2019-08-30 15:21:37 +02:00
REJack
56682c498f updated pages/layout/* demo pages with single card to avoid whitespace above footer 2019-08-30 14:35:24 +02:00
REJack
742cb25c07 updated login-/register-logo font size and padding 2019-08-30 14:04:34 +02:00
REJack
643efcd1a4 updated callout padding 2019-08-30 14:03:53 +02:00
REJack
349ed57ce5 added .sidebar-no-expand info in main sidebar docs 2019-08-30 13:00:48 +02:00
REJack
d15055042e fixed .sidebar-no-expand with navbar-fixed 2019-08-30 13:00:21 +02:00
REJack
577dc4db6e added .sidebar-no-expand to avoid auto expand on hover/focus 2019-08-30 12:49:53 +02:00
REJack
eeeee1fbbf enhanced ControlSidebar
- moved control sidebar related functions from Layout.js to ControlSidebar.js
- added own scrollbar options
- added ability to set control sidebar height while scrolling
- fixed overlapping with fixed footer/navbar
2019-08-30 11:45:07 +02:00
REJack
05e0de2291 updated .gitignore 2019-08-29 12:01:28 +02:00
REJack
1f576576ce removed docs/Gemfile.lock 2019-08-29 12:00:26 +02:00
REJack
7c730af2c8 fixed icon update in CardWidget 2019-08-29 11:55:25 +02:00
REJack
6edd3d88d7 updated docs
- fixed javascript/card-widget
- added new deps in dependencies
2019-08-29 09:57:49 +02:00
REJack
2865815c47 dependencies/devDependencies updates
- updated dependencies
  - `@fortawesome/fontawesome-free` to 5.10.2
  - `@fullcalendar/bootstrap` to 4.3.0
  - `@fullcalendar/core` to 4.3.1
  - `@fullcalendar/daygrid` to 4.3.0
  - `@fullcalendar/interaction` to 4.3.0
  - `@fullcalendar/timegrid` to 4.3.0
  - `bootstrap-slider` to 10.6.2
  - `flot` to 3.2.9
  - `overlayscrollbars` to 1.9.1
  - `raphael` to 2.3.0
  - `select2` to 4.0.10
  - `sweetalert2` to 8.16.3
- replaced dependencies
  - `jqvmap` with `jqvmap-novulnerability` (removes git requirement on `npm i`)
- added new dependencies
  - `datatables.net-autofill-bs4` to 2.3.3
  - `datatables.net-bs4` to 1.10.19
  - `datatables.net-buttons-bs4` to 1.5.6
  - `datatables.net-colreorder-bs4` to 1.5.1
  - `datatables.net-fixedcolumns-bs4` to 3.2.6
  - `datatables.net-fixedheader-bs4` to 3.1.5
  - `datatables.net-keytable-bs4` to 2.5.0
  - `datatables.net-responsive-bs4` to 2.2.3
  - `datatables.net-rowgroup-bs4` to 1.1.0
  - `datatables.net-rowreorder-bs4` to 1.2.5
  - `datatables.net-scroller-bs4` to 2.0.0
  - `datatables.net-select-bs4` to 1.3.0
  - `jszip` to 3.2.2
  - `pdfmake` to 0.1.58
- updated devDependencies
  - `@babel/cli` to 7.5.5
  - `@babel/core` to 7.5.5
  - `@babel/preset-env` to 7.5.5
  - `css-loader` to 3.2.0
  - `rollup"` to .20.2
  - `terser` to 4.2.1
- removed old plugins
  - `morris`
2019-08-28 12:59:33 +02:00
REJack
e3888aee85 created new gallery page
- added filterizr to plugins
- created gallery demo
2019-08-28 11:42:16 +02:00
REJack
ce9734ef07 updated demo sidebar menu
- fixed timeline link in pages/calendar & pages/widgets
- added ribbons link after timeline link
2019-08-28 09:57:45 +02:00
REJack
6a85e9c5a1 enhanced buttons
- added btn-xs class
- added btn-xs demo in pages/UI/buttons.html
- enhanced dropdown-hover for button dropdowns
- fixed dropdown examples in pages/UI/buttons.html
2019-08-28 09:26:57 +02:00
REJack
6874eb31d7 enhanced navbar dropdown & top-nav example
- added Dropdown.js
- added .dropdown-submenu
- added .dropdown-hover
- added dropdown example & fixed card headers in pages/layout/top-nav.html
2019-08-27 16:23:07 +02:00
REJack
6d0fcbc8b1 enhanced custom forms
- removed box-shadow from custom form element #2200
- updated pages/forms/general.html (splited general and custom elements)
- fixed focus on custom switch & range
2019-08-27 13:21:53 +02:00
REJack
42b6ff1b11 removed fastclick from demo pages 2019-08-27 12:10:57 +02:00
REJack
8c9ef56657 fixed card-outline inside card wrong styling #2205 2019-08-26 12:28:02 +02:00
REJack
2805e35b2f updated main-sidebar docs with additional classes 2019-08-26 12:11:40 +02:00
REJack
4f231d5367 updated main-sidebar nav style
- added abilty to use a .right container instead of two single items
- added nav-compact for reduced paddings
2019-08-26 12:04:50 +02:00
REJack
937dffc03d enhanced cards header & tools
- reduced title font size
- changed title & tools margins/paddings
2019-08-26 12:02:59 +02:00
Raphael Jackstadt
4cb6c94411 Merge pull request #2219 from laiso/patch-1
typo fix on 'yarn add'
2019-08-26 10:47:29 +02:00
Raphael Jackstadt
ae419c1f72 Merge pull request #2197 from REJack/v3-dev
first changes to v3.0.0-rc.1
2019-08-26 10:46:45 +02:00
Raphael Jackstadt
2ab586c4db Merge branch 'v3-dev' into v3-dev 2019-08-26 10:44:04 +02:00
Raphael Jackstadt
0437635830 Merge pull request #2212 from Leviasan/v3-dev
Migration the timeline component to "bootstrap 4".
2019-08-26 10:41:34 +02:00
REJack
c9b02625dd rebuild dist files & updated docs assets 2019-08-26 10:39:29 +02:00
REJack
e8b6ff4e56 docs updates
- added part for fixed navbar/footer incl. the responsive classes
- added anchor info for fixed navbar
- added .dropdown-menu-lg/-xl info in main-header docs
- added custom plugin colors in layout colors part
  - custom-range
  - custom-switch
  - bootstrap slider
  - icheck-bootstrap
2019-08-26 10:38:07 +02:00
REJack
6b683b1d94 enhanced ribbons
- fixed style
- created demo page
- created docs
2019-08-26 09:44:05 +02:00
laiso
08d1a8d898 typo fix on 'yarn add' 2019-08-26 14:22:34 +07:00
Aleksandr Rogozin
a5241489f8 Timeline component docs 2019-08-23 13:18:21 +03:00
REJack
2d36befc04 added docs preset for timeline 2019-08-22 15:14:32 +02:00
Aleksandr Rogozin
d27aa49026 Add a sidebar link across all demo pages 2019-08-21 23:58:55 +03:00
REJack
1aa67a08ea migrated CardRefresh (BoxRefresh)
- created CardRefresh Plugin
- created docs
- updated pages/UI/widgets.html
2019-08-20 17:19:08 +02:00
REJack
09651f0a82 added @ttskch/select2-bootstrap4-theme and updated legacy select2 scss code 2019-08-20 12:48:22 +02:00
REJack
1b1b909162 renamed ControlSidebar DATA_KEY to lte.controlsidebar 2019-08-20 12:35:22 +02:00
REJack
b816ef347a enhanced CardWidget (Widget)
- renamed Widget to CardWidget
- renamed data-widget to data-card-widget
- reworked Selector & ClassName Icons to Option
- splited toggleMaximize to maximize & minimize
- added maximizeTrigger Option
- enhance code to run methods without buttons
2019-08-20 12:33:52 +02:00
REJack
ec9f780ed7 enhanced tree collapse/expand to avoid flood slide animation on multiple clicks on one item 2019-08-20 11:04:55 +02:00
REJack
62a29b624e enhanced css-compile with node-sass-package-importer and replaced ../../node_modules/bootstrap with ~bootstrap 2019-08-20 11:03:48 +02:00
REJack
0381231b23 updated sweetalert2 & added sweetalert2-theme-bootstrap-4 2019-08-20 10:54:48 +02:00
REJack
a514515799 updated options in docs/javascript/push-menu.md 2019-08-19 14:06:35 +02:00
REJack
c98018c880 enhanced PushMenu with sidebar state remember 2019-08-19 14:03:05 +02:00
REJack
c3fffde6c0 fixed hold-transition for main-sidebar & control-sidebar 2019-08-19 14:01:05 +02:00
REJack
f3eeb0bfaa fixed nav-child-indent padding while collapse 2019-08-19 13:35:38 +02:00
REJack
d6c8360f4f added toggled event to DirectChat.js 2019-08-19 13:14:56 +02:00
REJack
c471db9628 enhanced direct-chat-contacts
- updated direct-chat-contacts background to $dark
- updated contacts-list-date & contacts-list-msg to $gray-400
- added direct-chat-contacts-light style
2019-08-19 13:11:11 +02:00
REJack
af21f07b3d fixed direct-chat with bg-* 2019-08-19 13:00:46 +02:00
REJack
f549efa62a added elevation-4 to brand-link on pages/layout/fixed-topnav.html 2019-08-19 12:36:33 +02:00
REJack
a14df4917b fixed zindex's for main-header / brand-link 2019-08-19 12:35:00 +02:00
REJack
bc04864edf fixed brand-link img height 2019-08-19 12:33:00 +02:00
REJack
89fc86a000 updated docs/components/control-sidebar.md 2019-08-19 12:10:40 +02:00
REJack
7dd7bce535 fixed today mark in datepicker inline in card with bg-* 2019-08-19 12:09:46 +02:00
Aleksandr Rogozin
02fe824919 Returned timeline-inverse css class. 2019-08-17 12:20:47 +03:00
Aleksandr Rogozin
acdbe25cfa Update profile page -> timeline part 2019-08-17 01:03:58 +03:00
Aleksandr Rogozin
2ca7f5411d Merge branch 'v3-dev' of https://github.com/Leviasan/AdminLTE into v3-dev 2019-08-16 23:26:29 +03:00
Aleksandr Rogozin
66055cd96a Migration the timeline component to "bootstrap 4". 2019-08-16 17:23:57 +03:00
REJack
e4970b6c30 added .control-sidebar-push-slide 2019-08-13 14:37:16 +02:00
REJack
c4c082c4ac some control-sidebar fixes
- removed setMargin in js
- fixed control-sidebar slide animate step
- added zindex-contro-sidebar
- added control-sidebar-push class
- updated zindex's
2019-08-13 14:26:25 +02:00
REJack
0876d0ab70 added missing expanded/collapsed event in ControlSidebar.js 2019-08-13 13:09:07 +02:00
REJack
fd8183c965 renamed option slide to controlsidebarSlide and tweaked a bit the animate step 2019-08-11 14:16:27 +02:00
REJack
ac6a58c118 fixed bg-gradient-* color overrides doesn't worked 2019-08-08 15:09:29 +02:00
REJack
9d55dee3ad changed card-tools position absolute to float right
- added card-title float:left
- changed card-header & card-title padding
2019-08-08 14:52:11 +02:00
REJack
40007571f9 changed table-dark border-color 2019-08-08 14:33:01 +02:00
REJack
8685cde1b0 fixed border color with bg-dark 2019-08-08 14:32:33 +02:00
REJack
3d8c88799a fixed icheck-bootstrap html markup 2019-08-08 14:12:46 +02:00
REJack
5fceda1ba8 fixed icheck-bootstrap focus 2019-08-08 13:55:09 +02:00
Aleksandr Rogozin
9e251efd0c Merge pull request #1 from ColorlibHQ/v3-dev
V3 dev
2019-08-07 22:28:45 +03:00
2355 changed files with 532992 additions and 365684 deletions

View File

@@ -1,14 +0,0 @@
{
"presets": [
[
"@babel/preset-env",
{
"loose": true,
"modules": false
}
]
],
"plugins": [
"@babel/plugin-external-helpers"
]
}

13
.babelrc.js Normal file
View File

@@ -0,0 +1,13 @@
module.exports = {
presets: [
[
'@babel/preset-env',
{
loose: true,
bugfixes: true,
modules: false,
exclude: ['transform-typeof-symbol']
}
]
]
};

View File

@@ -1,13 +1,10 @@
# https://github.com/browserslist/browserslist#readme
>= 1%
last 1 major version
>= 0.2%
last 2 major versions
not dead
Chrome >= 45
Firefox >= 38
Edge >= 12
Firefox ESR
Edge >= 16
Explorer >= 10
iOS >= 9
Safari >= 9
Android >= 4.4
Opera >= 30

60
.bundlewatch.config.json Normal file
View File

@@ -0,0 +1,60 @@
{
"files": [
{
"path": "./dist/css/adminlte.css",
"maxSize": "82 kB"
},
{
"path": "./dist/css/adminlte.min.css",
"maxSize": "77.8 kB"
},
{
"path": "./dist/css/alt/adminlte.components.css",
"maxSize": "16 kB"
},
{
"path": "./dist/css/alt/adminlte.components.min.css",
"maxSize": "15.4 kB"
},
{
"path": "./dist/css/alt/adminlte.core.css",
"maxSize": "47 kB"
},
{
"path": "./dist/css/alt/adminlte.core.min.css",
"maxSize": "44 kB"
},
{
"path": "./dist/css/alt/adminlte.extra-components.css",
"maxSize": "4 kB"
},
{
"path": "./dist/css/alt/adminlte.extra-components.min.css",
"maxSize": "4 kB"
},
{
"path": "./dist/css/alt/adminlte.pages.css",
"maxSize": "3 kB"
},
{
"path": "./dist/css/alt/adminlte.pages.min.css",
"maxSize": "3 kB"
},
{
"path": "./dist/css/alt/adminlte.plugins.css",
"maxSize": "17 kB"
},
{
"path": "./dist/css/alt/adminlte.plugins.min.css",
"maxSize": "16.6 kB"
},
{
"path": "./dist/js/adminlte.js",
"maxSize": "15 kB"
},
{
"path": "./dist/js/adminlte.min.js",
"maxSize": "10.5 kB"
}
]
}

View File

@@ -1,9 +1,14 @@
# editorconfig.org
root = true
[*]
charset = utf-8
end_of_line = lf
insert_final_newline = true
indent_style = space
indent_size = 2
indent_style = space
insert_final_newline = true
trim_trailing_whitespace = true
[*.md]
trim_trailing_whitespace = false

View File

@@ -1,5 +1,5 @@
**/*.min.js
**/plugins/*
**/dist/*
**/build/npm
ad.js
**/plugins/
/dist/js/adminlte.js
/docs/
/docs_html/

300
.eslintrc
View File

@@ -1,300 +0,0 @@
{
"root": true,
"parser": "babel-eslint",
"env": {
"browser": true,
"es6": true,
"amd": true
},
"extends": "eslint:recommended",
"plugins": [
"compat"
],
"globals": {
"jQuery": true
},
"rules": {
// Possible Errors
"no-await-in-loop": "error",
"no-extra-parens": "error",
"no-prototype-builtins": "error",
"no-template-curly-in-string": "error",
"compat/compat": "error",
"valid-jsdoc": "error",
// Best Practices
"accessor-pairs": "error",
"array-callback-return": "error",
"block-scoped-var": "error",
"class-methods-use-this": "off",
"complexity": "error",
"consistent-return": "error",
"curly": "error",
"default-case": "error",
"dot-location": [
"error",
"property"
],
"dot-notation": "error",
"eqeqeq": "error",
"guard-for-in": "error",
"no-alert": "error",
"no-caller": "error",
"no-div-regex": "error",
"no-else-return": "error",
"no-empty-function": "error",
"no-eq-null": "error",
"no-eval": "error",
"no-extend-native": "error",
"no-extra-bind": "error",
"no-extra-label": "error",
"no-floating-decimal": "error",
"no-implicit-coercion": "error",
"no-implicit-globals": "error",
"no-implied-eval": "error",
"no-invalid-this": "off",
"no-iterator": "error",
"no-labels": "error",
"no-lone-blocks": "error",
"no-loop-func": "error",
"no-magic-numbers": [
"error",
{
"ignore": [
-1,
0,
1
],
"ignoreArrayIndexes": true
}
],
"no-multi-spaces": [
"error",
{
"ignoreEOLComments": true,
"exceptions": {
"AssignmentExpression": true,
"ArrowFunctionExpression": true,
"CallExpression": true,
"VariableDeclarator": true
}
}
],
"no-multi-str": "error",
"no-new": "error",
"no-new-func": "error",
"no-new-wrappers": "error",
"no-octal-escape": "error",
"no-param-reassign": "off",
"no-proto": "error",
"no-restricted-properties": "error",
"no-return-assign": "error",
"no-return-await": "error",
"no-script-url": "error",
"no-self-compare": "error",
"no-sequences": "error",
"no-throw-literal": "error",
"no-unmodified-loop-condition": "error",
"no-unused-expressions": "error",
"no-useless-call": "error",
"no-useless-concat": "error",
"no-useless-return": "error",
"no-void": "error",
"no-warning-comments": "off",
"no-with": "error",
"prefer-promise-reject-errors": "error",
"radix": "error",
"require-await": "error",
"vars-on-top": "error",
"wrap-iife": "error",
"yoda": "error",
// Strict Mode
"strict": "error",
// Variables
"init-declarations": "off",
"no-catch-shadow": "error",
"no-label-var": "error",
"no-restricted-globals": "error",
"no-shadow": "off",
"no-shadow-restricted-names": "error",
"no-undef-init": "error",
"no-undefined": "error",
"no-use-before-define": "off",
// Node.js and CommonJS
"callback-return": "off",
"global-require": "error",
"handle-callback-err": "error",
"no-mixed-requires": "error",
"no-new-require": "error",
"no-path-concat": "error",
"no-process-env": "error",
"no-process-exit": "error",
"no-restricted-modules": "error",
"no-sync": "error",
// Stylistic Issues
"array-bracket-spacing": "error",
"block-spacing": "error",
"brace-style": "error",
"camelcase": "error",
"capitalized-comments": "off",
"comma-dangle": "error",
"comma-spacing": "error",
"comma-style": "error",
"computed-property-spacing": "error",
"consistent-this": "error",
"eol-last": "error",
"func-call-spacing": "error",
"func-name-matching": "error",
"func-names": "off",
"func-style": [
"error",
"declaration"
],
"id-blacklist": "error",
"id-length": "off",
"id-match": "error",
"indent": [
"error",
2,
{
"SwitchCase": 1
}
],
"jsx-quotes": "error",
"key-spacing": "off",
"keyword-spacing": "error",
"linebreak-style": [
"error",
"unix"
],
"line-comment-position": "off",
"lines-around-comment": "off",
"lines-around-directive": "error",
"max-depth": [
"error",
10
],
"max-len": "off",
"max-lines": "off",
"max-nested-callbacks": "error",
"max-params": "off",
"max-statements": "off",
"max-statements-per-line": "error",
"multiline-ternary": "off",
"new-cap": [
"error",
{
"capIsNewExceptionPattern": "$.*"
}
],
"newline-after-var": "off",
"newline-per-chained-call": [
"error",
{
"ignoreChainWithDepth": 5
}
],
"new-parens": "error",
"no-array-constructor": "error",
"no-bitwise": "error",
"no-continue": "off",
"no-inline-comments": "off",
"no-lonely-if": "error",
"no-mixed-operators": "off",
"no-multi-assign": "error",
"no-multiple-empty-lines": "error",
"nonblock-statement-body-position": "error",
"no-negated-condition": "off",
"no-nested-ternary": "error",
"no-new-object": "error",
"no-plusplus": "off",
"no-restricted-syntax": "error",
"no-tabs": "error",
"no-ternary": "off",
"no-trailing-spaces": "error",
"no-underscore-dangle": "off",
"no-unneeded-ternary": "error",
"no-whitespace-before-property": "error",
"object-curly-newline": [
"error",
{
"minProperties": 1
}
],
"object-curly-spacing": [
"error",
"always"
],
"object-property-newline": "error",
"one-var": [
"error",
"never"
],
"one-var-declaration-per-line": "error",
"operator-assignment": "error",
"operator-linebreak": "error",
"padded-blocks": [
"error",
"never"
],
"padding-line-between-statements": "off",
"quote-props": [
"error",
"as-needed"
],
"quotes": [
"error",
"single"
],
"require-jsdoc": "off",
"semi": [
"error",
"never"
],
"semi-spacing": "error",
"sort-keys": "off",
"sort-vars": "error",
"space-before-blocks": "error",
"space-before-function-paren": [
"error",
{
"anonymous": "always",
"named": "never"
}
],
"space-in-parens": "error",
"space-infix-ops": "error",
"space-unary-ops": "error",
"spaced-comment": "error",
"template-tag-spacing": "error",
"unicode-bom": "error",
"wrap-regex": "off",
// ECMAScript 6
"arrow-body-style": [
"error",
"as-needed"
],
"arrow-parens": "error",
"arrow-spacing": "error",
"generator-star-spacing": "error",
"no-confusing-arrow": "error",
"no-duplicate-imports": "error",
"no-restricted-imports": "error",
"no-useless-computed-key": "error",
"no-useless-constructor": "error",
"no-useless-rename": "error",
"no-var": "error",
"object-shorthand": "error",
"prefer-arrow-callback": "error",
"prefer-const": "error",
"prefer-destructuring": "off",
"prefer-numeric-literals": "error",
"prefer-rest-params": "error",
"prefer-spread": "error",
"prefer-template": "error",
"rest-spread-spacing": "error",
"sort-imports": "error",
"symbol-description": "error",
"template-curly-spacing": "error",
"yield-star-spacing": "error"
}
}

64
.eslintrc.json Normal file
View File

@@ -0,0 +1,64 @@
{
"root": true,
"extends": [
"plugin:compat/recommended",
"plugin:import/errors",
"plugin:import/warnings",
"plugin:unicorn/recommended",
"xo/esnext",
"xo/browser"
],
"env": {
"jquery": true
},
"rules": {
"capitalized-comments": "off",
"eqeqeq": "off",
"indent": [
"error",
2,
{
"MemberExpression": "off",
"SwitchCase": 1
}
],
"multiline-ternary": [
"error",
"always-multiline"
],
"new-cap": [
"error",
{
"properties": false
}
],
"no-eq-null": "off",
"no-negated-condition": "off",
"no-console": "error",
"object-curly-spacing": [
"error",
"always"
],
"prefer-template": "error",
"prefer-named-capture-group": "off",
"semi": [
"error",
"never"
],
"unicorn/filename-case": "off",
"unicorn/import-index": "off",
"unicorn/no-fn-reference-in-iterator": "off",
"unicorn/no-for-loop": "off",
"unicorn/no-null": "off",
"unicorn/no-unused-properties": "error",
"unicorn/prefer-dataset": "off",
"unicorn/prefer-includes": "off",
"unicorn/prefer-node-append": "off",
"unicorn/prefer-node-remove": "off",
"unicorn/prefer-number-properties": "off",
"unicorn/prefer-optional-catch-binding": "off",
"unicorn/prefer-query-selector": "off",
"unicorn/prefer-set-has": "off",
"unicorn/prevent-abbreviations": "off"
}
}

2
.gitattributes vendored Normal file
View File

@@ -0,0 +1,2 @@
# Enforce Unix newlines
* text=auto eol=lf

View File

@@ -0,0 +1,32 @@
---
name: Bug report for AdminLTE v3.x
about: Create a report to help us improve AdminLTE v3.x
title: "[BUG]"
labels: type:bug, version:3.x
assignees: ''
---
**Describe the bug**
A clear and concise description of what the bug is.
**To Reproduce**
Steps to reproduce the behavior:
1. Go to '...'
2. Click on '....'
3. Scroll down to '....'
4. See error
**Expected behavior**
A clear and concise description of what you expected to happen.
**Screenshots**
If applicable, add screenshots to help explain your problem.
**Environment (please complete the following information):**
- AdminLTE Version: [e.g. v3.0.0]
- Operating System: [e.g. macOS Catalina]
- Browser (Version): [e.g. Chrome (Latest)]
**Additional context**
Add any other context about the problem here.

View File

@@ -0,0 +1,20 @@
---
name: Feature request for AdminLTE v3.x
about: Suggest an idea for this project
title: "[FEATURE]"
labels: type:enhancement, version:3.x
assignees: ''
---
**Is your feature request related to a problem? Please describe.**
A clear and concise description of what the problem is. Ex. I'm always frustrated when [...]
**Describe the solution you'd like**
A clear and concise description of what you want to happen.
**Describe alternatives you've considered**
A clear and concise description of any alternative solutions or features you've considered.
**Additional context**
Add any other context or screenshots about the feature request here.

18
.github/dependabot.yml vendored Normal file
View File

@@ -0,0 +1,18 @@
version: 2
updates:
- package-ecosystem: npm
directory: "/"
schedule:
interval: weekly
day: monday
time: "03:00"
open-pull-requests-limit: 10
versioning-strategy: increase
- package-ecosystem: bundler
directory: "/docs/"
schedule:
interval: weekly
day: monday
time: "03:00"
open-pull-requests-limit: 10
versioning-strategy: increase

63
.github/workflows/ci.yml vendored Normal file
View File

@@ -0,0 +1,63 @@
name: CI
on:
push:
branches:
- master
pull_request:
branches:
- "**"
env:
CI: true
jobs:
run:
runs-on: ${{ matrix.os }}
strategy:
fail-fast: false
matrix:
node:
- "10.x"
- "12.x"
- "14.x"
os:
- "ubuntu-latest"
- "macos-latest"
- "windows-latest"
steps:
- name: Clone repository
uses: actions/checkout@v2
- name: Use Node.js ${{ matrix.node }}
uses: actions/setup-node@v1
with:
node-version: ${{ matrix.node }}
- name: Get npm cache directory
id: npm-cache
run: |
echo "::set-output name=dir::$(npm config get cache)"
- name: Set up npm cache
uses: actions/cache@v2
with:
path: ${{ steps.npm-cache.outputs.dir }}
key: ${{ runner.os }}-node-v${{ env.node }}-${{ hashFiles('package.json') }}-${{ hashFiles('package-lock.json') }}}
restore-keys: |
${{ runner.OS }}-node-v${{ env.node }}-${{ hashFiles('package.json') }}-${{ hashFiles('package-lock.json') }}
${{ runner.OS }}-node-v${{ env.node }}-
- name: Install npm dependencies
run: npm ci
- name: Build files
run: npm run compile
- name: Run bundlewatch
run: npm run bundlewatch
if: startsWith(matrix.os, 'ubuntu') && startsWith(matrix.node, '12')
env:
BUNDLEWATCH_GITHUB_TOKEN: "${{ secrets.BUNDLEWATCH_GITHUB_TOKEN }}"

78
.github/workflows/docs.yml vendored Normal file
View File

@@ -0,0 +1,78 @@
name: Docs
on:
push:
branches:
- master
pull_request:
branches:
- "**"
env:
CI: true
NODE: 12.x
RUBY: 2.6.x
jobs:
run:
runs-on: ubuntu-latest
steps:
- name: Clone repository
uses: actions/checkout@v2
- name: Set up Node.js
uses: actions/setup-node@v1
with:
node-version: "${{ env.NODE }}"
- name: Set up Ruby
uses: actions/setup-ruby@v1
with:
ruby-version: ${{ env.RUBY }}
- name: Disable gem docs
run: 'echo "gem: --no-document" > ~/.gemrc'
- name: Get npm cache directory
id: npm-cache
run: |
echo "::set-output name=dir::$(npm config get cache)"
- name: Set up npm cache
uses: actions/cache@v2
with:
path: ${{ steps.npm-cache.outputs.dir }}
key: ${{ runner.os }}-node-v${{ env.node }}-${{ hashFiles('package.json') }}-${{ hashFiles('package-lock.json') }}}
restore-keys: |
${{ runner.OS }}-node-v${{ env.node }}-${{ hashFiles('package.json') }}-${{ hashFiles('package-lock.json') }}
${{ runner.OS }}-node-v${{ env.node }}-
- name: Set up Ruby cache
uses: actions/cache@v2
with:
path: docs/vendor/bundle
key: ${{ runner.os }}-ruby-v${{ env.RUBY }}-${{ hashFiles('docs/Gemfile') }}-${{ hashFiles('docs/Gemfile.lock') }}
restore-keys: |
${{ runner.os }}-ruby-v${{ env.RUBY }}-${{ hashFiles('docs/Gemfile') }}-${{ hashFiles('docs/Gemfile.lock') }}
${{ runner.os }}-ruby-v${{ env.RUBY }}-
- name: Set up Bundler
run: gem install bundler -v "~> 1.17"
- run: ruby --version
- run: gem --version
- run: bundle --version
- run: java -version
- name: Install npm dependencies
run: npm ci
- name: Install bundler dependencies
run: bundle install --gemfile docs/Gemfile --deployment --jobs=4 --retry=3 --clean
- name: Build docs
run: npm run docs-compile
- name: Run HTML validator
run: npm run docs-lint

41
.github/workflows/lint.yml vendored Normal file
View File

@@ -0,0 +1,41 @@
name: Lint
on:
push:
branches:
- master
pull_request:
branches:
- "**"
env:
CI: true
NODE: 12.x
jobs:
run:
runs-on: ubuntu-latest
steps:
- name: Clone repository
uses: actions/checkout@v2
- name: Set up Node.js
uses: actions/setup-node@v1
with:
node-version: "${{ env.NODE }}"
- name: Set up npm cache
uses: actions/cache@v2
with:
path: ~/.npm
key: ${{ runner.os }}-node-v${{ env.node }}-${{ hashFiles('package.json') }}-${{ hashFiles('package-lock.json') }}}
restore-keys: |
${{ runner.OS }}-node-v${{ env.node }}-${{ hashFiles('package.json') }}-${{ hashFiles('package-lock.json') }}
${{ runner.OS }}-node-v${{ env.node }}-
- name: Install npm dependencies
run: npm ci
- name: Run lint
run: npm run lint

57
.gitignore vendored
View File

@@ -1,30 +1,71 @@
// System / Log files
# System / Log files
*.DS_Store
*.log
// Archives
# Archives
*.zip
// Sass Cache
# Sass Cache
.sass-cache
// Project files
# Project files
.idea
nbproject
nbproject/private
.vscode/
.vs/
// Node / Bower
# Node / Bower
node_modules/
bower_components/
// Docs
docs/_site
# Plugins
/plugins/**/*.html
/plugins/**/*.less
/plugins/**/*.md
/plugins/**/*.scss
/plugins/**/*.ts
/plugins/**/bower.json
/plugins/**/package.json
/plugins/**/webpack.config.js
/plugins/**/demo/
/plugins/**/demos/
/plugins/**/dev/
/plugins/**/example/
/plugins/**/examples/
/plugins/**/less/
/plugins/**/test/
/plugins/**/tests/
/plugins/daterangepicker/website/
/plugins/daterangepicker/drp.png
/plugins/daterangepicker/moment.min.js
/plugins/daterangepicker/package.js
/plugins/daterangepicker/website.css
/plugins/daterangepicker/website.js
/plugins/jquery-ui/AUTHORS.txt
/plugins/jquery-ui/external/jquery/jquery.js
/plugins/inputmask/bindings/
/plugins/flot/plugins/jquery*.js
!/plugins/flot/plugins/jquery.flot.*.js
!/plugins/**/LICENSE.md
!/plugins/**/LICENSE.txt
!/plugins/**/license.md
!/plugins/**/license.txt
!/plugins/**/LICENSE
!/plugins/**/license
!/plugins/**/COPYING
# Docs
/docs/_site/
/docs/vendor/
/docs/.bundle/
/docs_html/
.jekyll-cache/
.jekyll-metadata
// ETC
# ETC
TODO
test.html
ad.js
/.cache/

6
.gitpod.yml Normal file
View File

@@ -0,0 +1,6 @@
tasks:
- init: npm install
command: npm run dev
ports:
- port: 3000
onOpen: open-preview

15
.lgtm.yml Normal file
View File

@@ -0,0 +1,15 @@
# https://lgtm.com/help/lgtm/customizing-file-classification
path_classifiers:
plugins:
- plugins/
extraction:
javascript:
# https://lgtm.com/help/lgtm/javascript-extraction#customizing-index
# The `index` step extracts information from the files in the codebase.
index:
# Specify a list of files and folders to exclude from extraction.
exclude:
- bower_components/
- docs/assets/js/plugins/
- plugins/

6
.npmignore Normal file
View File

@@ -0,0 +1,6 @@
/docs/
/docs_html/
/plugins/*
!/plugins/flot-old/
/.github/
/.lgtm.yml

4
.stylelintignore Normal file
View File

@@ -0,0 +1,4 @@
**/*.min.css
**/dist/
**/docs_html/
**/plugins/

16
.stylelintrc Normal file
View File

@@ -0,0 +1,16 @@
{
"extends": [
"stylelint-config-twbs-bootstrap/scss"
],
"rules": {
"declaration-no-important": null,
"order/properties-order": null,
"selector-max-class": null,
"selector-max-combinators": null,
"selector-max-compound-selectors": null,
"selector-max-id": null,
"selector-max-specificity": null,
"selector-max-type": null,
"selector-no-qualifying-type": null
}
}

View File

@@ -1,6 +1,6 @@
The MIT License (MIT)
Copyright (c) 2014-2018 almasaeed2010
Copyright (c) 2014-2020 ColorlibHQ
Permission is hereby granted, free of charge, to any person obtaining a copy of
this software and associated documentation files (the "Software"), to deal in

161
README.md
View File

@@ -1,95 +1,130 @@
Introduction
============
# Introduction
**AdminLTE** is a fully responsive administration template. Based on **[Bootstrap 4](https://getbootstrap.com)** framework.
[![npm version](https://img.shields.io/npm/v/admin-lte/latest.svg)](https://www.npmjs.com/package/admin-lte)
[![Packagist](https://img.shields.io/packagist/v/almasaeed2010/adminlte.svg)](https://packagist.org/packages/almasaeed2010/adminlte)
[![CDNJS](https://img.shields.io/cdnjs/v/admin-lte.svg)](https://cdnjs.com/libraries/admin-lte)
[![Gitpod Ready-to-Code](https://img.shields.io/badge/Gitpod-Ready--to--Code-blue?logo=gitpod)](https://gitpod.io/from-referrer/)
**AdminLTE** is a fully responsive administration template. Based on **[Bootstrap 4.5](https://getbootstrap.com/)** framework and also the JS/jQuery plugin.
Highly customizable and easy to use. Fits many screen resolutions from small mobile devices to large desktops.
**Download & Preview on [AdminLTE.io](https://adminlte.io)**
**Preview on [AdminLTE.io](https://adminlte.io/themes/v3)**
Looking for Premium Templates?
------------------------------
AdminLTE.io just opened a new premium templates page. Hand picked to insure the best quality and the most affordable
prices. Visit https://adminlte.io/premium for more information.
## Looking for Premium Templates?
AdminLTE.io just opened a new premium templates page. Hand picked to ensure the best quality and the most affordable
prices. Visit <https://adminlte.io/premium> for more information.
!["AdminLTE Presentation"](https://adminlte.io/AdminLTE3.png "AdminLTE Presentation")
**AdminLTE** has been carefully coded with clear comments in all of its JS, SCSS and HTML files.
SCSS has been used to increase code customizability.
Installation
------------
## Installation
There are multiple ways to install AdminLTE.
#### Download:
### Download & Changelog:
Download from Github or [visit AdminLTE.io](https://adminlte.io) and download the latest release.
Download from GitHub latest release [AdminLTE 3](https://github.com/ColorlibHQ/AdminLTE/latest).
Visit the [releases](https://github.com/ColorlibHQ/AdminLTE/releases) page to view the changelog.
Legacy Releases are [AdminLTE 2](https://github.com/ColorlibHQ/AdminLTE/releases/tag/v2.4.18) / [AdminLTE 1](https://github.com/ColorlibHQ/AdminLTE/releases/tag/1.3.1).
#### Using The Command Line:
### Using The Command Line:
**NPM**
```bash
npm install admin-lte
```
_**Important Note**: To install it via npm/Yarn, you need at least Node.js 10 or higher._
**Github**
- **Via npm**
- Clone to your machine
```
git clone https://github.com/ColorlibHQ/AdminLTE.git
```
```bash
npm install admin-lte@^3.0 --save
```
Documentation
-------------
Visit the [online documentation](https://adminlte.io/themes/AdminLTE/documentation/index.html) for the most
- **Via Yarn**
```bash
yarn add admin-lte@^3.0
```
- **Via Composer**
```bash
composer require "almasaeed2010/adminlte=~3.0"
```
- **Via Git**
Clone to your machine
```bash
git clone https://github.com/ColorlibHQ/AdminLTE.git
```
## Documentation
Visit the [online documentation](https://adminlte.io/docs/3.1/) for the most
updated guide. Information will be added on a weekly basis.
Browser Support
---------------
- IE 10+
- Firefox (latest)
- Chrome (latest)
- Safari (latest)
- Opera (latest)
## Browsers support
Contribution
------------
Contribution are always **welcome and recommended**! Here is how:
| [<img src="https://raw.githubusercontent.com/alrra/browser-logos/master/src/edge/edge_48x48.png" alt="IE / Edge" width="24px" height="24px" />](http://godban.github.io/browsers-support-badges/)<br/>IE / Edge | [<img src="https://raw.githubusercontent.com/alrra/browser-logos/master/src/firefox/firefox_48x48.png" alt="Firefox" width="24px" height="24px" />](http://godban.github.io/browsers-support-badges/)<br/>Firefox | [<img src="https://raw.githubusercontent.com/alrra/browser-logos/master/src/chrome/chrome_48x48.png" alt="Chrome" width="24px" height="24px" />](http://godban.github.io/browsers-support-badges/)<br/>Chrome | [<img src="https://raw.githubusercontent.com/alrra/browser-logos/master/src/safari/safari_48x48.png" alt="Safari" width="24px" height="24px" />](http://godban.github.io/browsers-support-badges/)<br/>Safari | [<img src="https://raw.githubusercontent.com/alrra/browser-logos/master/src/safari-ios/safari-ios_48x48.png" alt="iOS Safari" width="24px" height="24px" />](http://godban.github.io/browsers-support-badges/)<br/>iOS Safari | [<img src="https://raw.githubusercontent.com/alrra/browser-logos/master/src/samsung-internet/samsung-internet_48x48.png" alt="Samsung" width="24px" height="24px" />](http://godban.github.io/browsers-support-badges/)<br/>Samsung | [<img src="https://raw.githubusercontent.com/alrra/browser-logos/master/src/opera/opera_48x48.png" alt="Opera" width="24px" height="24px" />](http://godban.github.io/browsers-support-badges/)<br/>Opera | [<img src="https://raw.githubusercontent.com/alrra/browser-logos/master/src/vivaldi/vivaldi_48x48.png" alt="Vivaldi" width="24px" height="24px" />](http://godban.github.io/browsers-support-badges/)<br/>Vivaldi | [<img src="https://raw.githubusercontent.com/alrra/browser-logos/master/src/electron/electron_48x48.png" alt="Electron" width="24px" height="24px" />](http://godban.github.io/browsers-support-badges/)<br/>Electron |
| --------- | --------- | --------- | --------- | --------- | --------- | --------- | --------- | --------- |
| IE10, IE11, Edge| last 2 versions| last 2 versions| last 2 versions| last 2 versions| last 2 versions| last 2 versions| last 2 versions| last 2 versions
- Fork the repository ([here is the guide](https://help.github.com/articles/fork-a-repo/)).
- Clone to your machine ```git clone https://github.com/YOUR_USERNAME/AdminLTE.git```
- Create a new branch
- Make your changes
- Create a pull request
## How to Contribute
#### Contribution Requirements:
Contributions are always **welcome and recommended**! Here is how for beginner's: [Get started with open source click here](https://youtu.be/GbqSvJs-6W4)
- When you contribute, you agree to give a non-exclusive license to AdminLTE.io to use that contribution in any context as we (AdminLTE.io) see appropriate.
- If you use content provided by another party, it must be appropriately licensed using an [open source](http://opensource.org/licenses) license.
- Contributions are only accepted through Github pull requests.
- Finally, contributed code must work in all supported browsers (see above for browser support).
1. Contribution Requirements :
* When you contribute, you agree to give a non-exclusive license to AdminLTE.io to use that contribution in any context as we (AdminLTE.io) see appropriate.
* If you use content provided by another party, it must be appropriately licensed using an [open source](https://opensource.org/licenses) license.
* Contributions are only accepted through GitHub pull requests.
* Finally, contributed code must work in all supported browsers (see above for browser support).
2. Installation :
* Fork the repository ([here is the guide](https://help.github.com/articles/fork-a-repo/)).
* Clone to your machine
License
-------
AdminLTE is an open source project by [AdminLTE.io](https://adminlte.io) that is licensed under [MIT](http://opensource.org/licenses/MIT). AdminLTE.io
reserves the right to change the license of future releases.
```bash
git clone https://github.com/YOUR_USERNAME/AdminLTE.git
```
* Create a new branch
3. Compile dist files (Development) :
* To compile the dist files you need Node.js 10 or higher/npm (node package manager)
* Delete ./package-lock.json file
* `npm install` (install npm deps)
* `npm run dev` (developer mode, autocompile with browsersync support for live demo)
* Make your changes only in ./buid Folder OR package.json OR ./dist/js/demo.js OR in any html files which nessary to contribute
* Do not changes in ./dist/css/ AND ./dist/js/ Because its compiled files
* `npm run production` (compile css/js files and test every pages are perfectly working fine, before creating pull request)
4. Create a pull request
Legacy Releases
---------------
- [AdminLTE 2](https://github.com/ColorlibHQ/AdminLTE/releases/tag/v2.4.3)
- [AdminLTE 1](https://github.com/ColorlibHQ/AdminLTE/releases/tag/1.3.1)
### Online one-click setup for contributing
Change log
----------
Visit the [releases](https://github.com/ColorlibHQ/AdminLTE/releases) page to view the changelog
You can use Gitpod(an online IDE which is free for Open Source) for working on issues or making Prs. With a single click it will launch a workspace and automatically:
Image Credits
-------------
[Pixeden](http://www.pixeden.com/psd-web-elements/flat-responsive-showcase-psd)
- clone the `AdminLTE` repo.
- install the dependencies.
- run `yarn dev` to start the server.
[Graphicsfuel](http://www.graphicsfuel.com/2013/02/13-high-resolution-blur-backgrounds/)
[![Open in Gitpod](https://gitpod.io/button/open-in-gitpod.svg)](https://gitpod.io/from-referrer/)
[Pickaface](http://pickaface.net/)
### Compile dist files
[Unsplash](https://unsplash.com/)
To compile the dist files you need Node.js/npm, clone/download the repo then:
[Uifaces](http://uifaces.com/)
1. `npm install` (install npm deps)
2. _Optional:_ `npm run dev` (developer mode, autocompile with browsersync support for live demo)
3. `npm run production` (compile css/js files)
## License
AdminLTE is an open source project by [AdminLTE.io](https://adminlte.io) that is licensed under [MIT](https://opensource.org/licenses/MIT).
AdminLTE.io reserves the right to change the license of future releases.
## Image Credits
- [Pixeden](http://www.pixeden.com/psd-web-elements/flat-responsive-showcase-psd)
- [Graphicsfuel](https://www.graphicsfuel.com/2013/02/13-high-resolution-blur-backgrounds/)
- [Pickaface](https://pickaface.net/)
- [Unsplash](https://unsplash.com/)
- [Uifaces](http://uifaces.com/)

View File

@@ -0,0 +1,14 @@
{
"env": {
"browser": false,
"node": true
},
"parserOptions": {
"sourceType": "script"
},
"extends": "../../.eslintrc.json",
"rules": {
"no-console": "off",
"strict": "error"
}
}

View File

@@ -1,7 +1,7 @@
'use strict'
module.exports = (ctx) => ({
map: ctx.file.dirname.includes('examples') ? false : {
module.exports = () => ({
map: {
inline: false,
annotation: true,
sourcesContent: true

View File

@@ -1,29 +1,32 @@
import babel from 'rollup-plugin-babel'
'use strict'
const pkg = require('../../package')
const { babel } = require('@rollup/plugin-babel')
const pkg = require('../../package')
const year = new Date().getFullYear()
const globals = {
jquery: 'jQuery'
}
export default {
input : 'build/js/AdminLTE.js',
output : {
banner: `/*!
const banner = `/*!
* AdminLTE v${pkg.version} (${pkg.homepage})
* Copyright 2014-${year} ${pkg.author}
* Licensed under MIT (https://github.com/almasaeed2010/AdminLTE/blob/master/LICENSE)
*/`,
file : 'dist/js/adminlte.js',
* Licensed under MIT (https://github.com/ColorlibHQ/AdminLTE/blob/master/LICENSE)
*/`
module.exports = {
input: 'build/js/AdminLTE.js',
output: {
banner,
file: 'dist/js/adminlte.js',
format: 'umd',
globals,
name : 'adminlte'
globals: {
jquery: 'jQuery'
},
name: 'adminlte'
},
external: ['jquery'],
plugins: [
babel({
exclude: 'node_modules/**',
externalHelpers: true
// Include the helpers in the bundle, at most one copy of each
babelHelpers: 'bundled'
})
]
}

View File

@@ -1,44 +0,0 @@
{
"esnext": true,
"verbose": true,
"disallowEmptyBlocks": true,
"disallowKeywords": ["with"],
"disallowMixedSpacesAndTabs": true,
"disallowMultipleLineStrings": true,
"disallowMultipleVarDecl": true,
"disallowQuotedKeysInObjects": "allButReserved",
"disallowSpaceAfterPrefixUnaryOperators": ["++", "--", "+", "-", "~", "!"],
"disallowSpaceBeforeBinaryOperators": [","],
"disallowSpaceBeforePostfixUnaryOperators": ["++", "--"],
"disallowSpacesInFunctionDeclaration": { "beforeOpeningRoundBrace": true },
"disallowSpacesInNamedFunctionExpression": { "beforeOpeningRoundBrace": true },
"disallowSpacesInsideArrayBrackets": true,
"disallowSpacesInsideParentheses": true,
"disallowTrailingComma": true,
"disallowTrailingWhitespace": true,
"requireCamelCaseOrUpperCaseIdentifiers": true,
"requireCapitalizedConstructors": true,
"requireCommaBeforeLineBreak": true,
"requireDollarBeforejQueryAssignment": true,
"requireDotNotation": true,
"requireLineFeedAtFileEnd": true,
"requirePaddingNewLinesAfterUseStrict": true,
"requirePaddingNewLinesBeforeExport": true,
"requireSpaceAfterBinaryOperators": ["+", "-", "/", "*", "=", "==", "===", "!=", "!==", ">", "<", ">=", "<="],
"requireSpaceAfterKeywords": ["if", "else", "for", "while", "do", "switch", "return", "try", "catch"],
"requireSpaceAfterLineComment": true,
"requireSpaceBeforeBinaryOperators": ["+", "-", "/", "*", "=", "==", "===", "!=", "!==", ">", "<", ">=", "<="],
"requireSpaceBetweenArguments": true,
"requireSpacesInAnonymousFunctionExpression": { "beforeOpeningCurlyBrace": true, "beforeOpeningRoundBrace": true, "allExcept": ["shorthand"] },
"requireSpacesInConditionalExpression": true,
"requireSpacesInForStatement": true,
"requireSpacesInFunctionDeclaration": { "beforeOpeningCurlyBrace": true },
"requireSpacesInFunctionExpression": { "beforeOpeningCurlyBrace": true },
"requireSpacesInNamedFunctionExpression": { "beforeOpeningCurlyBrace": true },
"requireSpacesInsideObjectBrackets": "allButNested",
"validateAlignedFunctionParameters": true,
"validateIndentation": 2,
"validateLineBreaks": "LF",
"validateNewlineAfterArrayElements": true,
"validateQuoteMarks": "'"
}

View File

@@ -1,17 +1,31 @@
import CardRefresh from './CardRefresh'
import CardWidget from './CardWidget'
import ControlSidebar from './ControlSidebar'
import DirectChat from './DirectChat'
import Dropdown from './Dropdown'
import ExpandableTable from './ExpandableTable'
import Fullscreen from './Fullscreen'
import IFrame from './IFrame'
import Layout from './Layout'
import PushMenu from './PushMenu'
import Treeview from './Treeview'
import DirectChat from './DirectChat'
import SidebarSearch from './SidebarSearch'
import Toasts from './Toasts'
import TodoList from './TodoList'
import Widget from './Widget'
import Treeview from './Treeview'
export {
CardRefresh,
CardWidget,
ControlSidebar,
DirectChat,
Dropdown,
ExpandableTable,
Fullscreen,
IFrame,
Layout,
PushMenu,
Treeview,
DirectChat,
SidebarSearch,
Toasts,
TodoList,
Widget
Treeview
}

154
build/js/CardRefresh.js Normal file
View File

@@ -0,0 +1,154 @@
/**
* --------------------------------------------
* AdminLTE CardRefresh.js
* License MIT
* --------------------------------------------
*/
import $ from 'jquery'
/**
* Constants
* ====================================================
*/
const NAME = 'CardRefresh'
const DATA_KEY = 'lte.cardrefresh'
const EVENT_KEY = `.${DATA_KEY}`
const JQUERY_NO_CONFLICT = $.fn[NAME]
const EVENT_LOADED = `loaded${EVENT_KEY}`
const EVENT_OVERLAY_ADDED = `overlay.added${EVENT_KEY}`
const EVENT_OVERLAY_REMOVED = `overlay.removed${EVENT_KEY}`
const CLASS_NAME_CARD = 'card'
const SELECTOR_CARD = `.${CLASS_NAME_CARD}`
const SELECTOR_DATA_REFRESH = '[data-card-widget="card-refresh"]'
const Default = {
source: '',
sourceSelector: '',
params: {},
trigger: SELECTOR_DATA_REFRESH,
content: '.card-body',
loadInContent: true,
loadOnInit: true,
responseType: '',
overlayTemplate: '<div class="overlay"><i class="fas fa-2x fa-sync-alt fa-spin"></i></div>',
onLoadStart() {
},
onLoadDone(response) {
return response
}
}
class CardRefresh {
constructor(element, settings) {
this._element = element
this._parent = element.parents(SELECTOR_CARD).first()
this._settings = $.extend({}, Default, settings)
this._overlay = $(this._settings.overlayTemplate)
if (element.hasClass(CLASS_NAME_CARD)) {
this._parent = element
}
if (this._settings.source === '') {
throw new Error('Source url was not defined. Please specify a url in your CardRefresh source option.')
}
}
load() {
this._addOverlay()
this._settings.onLoadStart.call($(this))
$.get(this._settings.source, this._settings.params, response => {
if (this._settings.loadInContent) {
if (this._settings.sourceSelector !== '') {
response = $(response).find(this._settings.sourceSelector).html()
}
this._parent.find(this._settings.content).html(response)
}
this._settings.onLoadDone.call($(this), response)
this._removeOverlay()
}, this._settings.responseType !== '' && this._settings.responseType)
$(this._element).trigger($.Event(EVENT_LOADED))
}
_addOverlay() {
this._parent.append(this._overlay)
$(this._element).trigger($.Event(EVENT_OVERLAY_ADDED))
}
_removeOverlay() {
this._parent.find(this._overlay).remove()
$(this._element).trigger($.Event(EVENT_OVERLAY_REMOVED))
}
// Private
_init() {
$(this).find(this._settings.trigger).on('click', () => {
this.load()
})
if (this._settings.loadOnInit) {
this.load()
}
}
// Static
static _jQueryInterface(config) {
let data = $(this).data(DATA_KEY)
const _options = $.extend({}, Default, $(this).data())
if (!data) {
data = new CardRefresh($(this), _options)
$(this).data(DATA_KEY, typeof config === 'string' ? data : config)
}
if (typeof config === 'string' && config.match(/load/)) {
data[config]()
} else {
data._init($(this))
}
}
}
/**
* Data API
* ====================================================
*/
$(document).on('click', SELECTOR_DATA_REFRESH, function (event) {
if (event) {
event.preventDefault()
}
CardRefresh._jQueryInterface.call($(this), 'load')
})
$(() => {
$(SELECTOR_DATA_REFRESH).each(function () {
CardRefresh._jQueryInterface.call($(this))
})
})
/**
* jQuery API
* ====================================================
*/
$.fn[NAME] = CardRefresh._jQueryInterface
$.fn[NAME].Constructor = CardRefresh
$.fn[NAME].noConflict = function () {
$.fn[NAME] = JQUERY_NO_CONFLICT
return CardRefresh._jQueryInterface
}
export default CardRefresh

238
build/js/CardWidget.js Normal file
View File

@@ -0,0 +1,238 @@
/**
* --------------------------------------------
* AdminLTE CardWidget.js
* License MIT
* --------------------------------------------
*/
import $ from 'jquery'
/**
* Constants
* ====================================================
*/
const NAME = 'CardWidget'
const DATA_KEY = 'lte.cardwidget'
const EVENT_KEY = `.${DATA_KEY}`
const JQUERY_NO_CONFLICT = $.fn[NAME]
const EVENT_EXPANDED = `expanded${EVENT_KEY}`
const EVENT_COLLAPSED = `collapsed${EVENT_KEY}`
const EVENT_MAXIMIZED = `maximized${EVENT_KEY}`
const EVENT_MINIMIZED = `minimized${EVENT_KEY}`
const EVENT_REMOVED = `removed${EVENT_KEY}`
const CLASS_NAME_CARD = 'card'
const CLASS_NAME_COLLAPSED = 'collapsed-card'
const CLASS_NAME_COLLAPSING = 'collapsing-card'
const CLASS_NAME_EXPANDING = 'expanding-card'
const CLASS_NAME_WAS_COLLAPSED = 'was-collapsed'
const CLASS_NAME_MAXIMIZED = 'maximized-card'
const SELECTOR_DATA_REMOVE = '[data-card-widget="remove"]'
const SELECTOR_DATA_COLLAPSE = '[data-card-widget="collapse"]'
const SELECTOR_DATA_MAXIMIZE = '[data-card-widget="maximize"]'
const SELECTOR_CARD = `.${CLASS_NAME_CARD}`
const SELECTOR_CARD_HEADER = '.card-header'
const SELECTOR_CARD_BODY = '.card-body'
const SELECTOR_CARD_FOOTER = '.card-footer'
const Default = {
animationSpeed: 'normal',
collapseTrigger: SELECTOR_DATA_COLLAPSE,
removeTrigger: SELECTOR_DATA_REMOVE,
maximizeTrigger: SELECTOR_DATA_MAXIMIZE,
collapseIcon: 'fa-minus',
expandIcon: 'fa-plus',
maximizeIcon: 'fa-expand',
minimizeIcon: 'fa-compress'
}
class CardWidget {
constructor(element, settings) {
this._element = element
this._parent = element.parents(SELECTOR_CARD).first()
if (element.hasClass(CLASS_NAME_CARD)) {
this._parent = element
}
this._settings = $.extend({}, Default, settings)
}
collapse() {
this._parent.addClass(CLASS_NAME_COLLAPSING).children(`${SELECTOR_CARD_BODY}, ${SELECTOR_CARD_FOOTER}`)
.slideUp(this._settings.animationSpeed, () => {
this._parent.addClass(CLASS_NAME_COLLAPSED).removeClass(CLASS_NAME_COLLAPSING)
})
this._parent.find(`> ${SELECTOR_CARD_HEADER} ${this._settings.collapseTrigger} .${this._settings.collapseIcon}`)
.addClass(this._settings.expandIcon)
.removeClass(this._settings.collapseIcon)
this._element.trigger($.Event(EVENT_COLLAPSED), this._parent)
}
expand() {
this._parent.addClass(CLASS_NAME_EXPANDING).children(`${SELECTOR_CARD_BODY}, ${SELECTOR_CARD_FOOTER}`)
.slideDown(this._settings.animationSpeed, () => {
this._parent.removeClass(CLASS_NAME_COLLAPSED).removeClass(CLASS_NAME_EXPANDING)
})
this._parent.find(`> ${SELECTOR_CARD_HEADER} ${this._settings.collapseTrigger} .${this._settings.expandIcon}`)
.addClass(this._settings.collapseIcon)
.removeClass(this._settings.expandIcon)
this._element.trigger($.Event(EVENT_EXPANDED), this._parent)
}
remove() {
this._parent.slideUp()
this._element.trigger($.Event(EVENT_REMOVED), this._parent)
}
toggle() {
if (this._parent.hasClass(CLASS_NAME_COLLAPSED)) {
this.expand()
return
}
this.collapse()
}
maximize() {
this._parent.find(`${this._settings.maximizeTrigger} .${this._settings.maximizeIcon}`)
.addClass(this._settings.minimizeIcon)
.removeClass(this._settings.maximizeIcon)
this._parent.css({
height: this._parent.height(),
width: this._parent.width(),
transition: 'all .15s'
}).delay(150).queue(function () {
const $element = $(this)
$element.addClass(CLASS_NAME_MAXIMIZED)
$('html').addClass(CLASS_NAME_MAXIMIZED)
if ($element.hasClass(CLASS_NAME_COLLAPSED)) {
$element.addClass(CLASS_NAME_WAS_COLLAPSED)
}
$element.dequeue()
})
this._element.trigger($.Event(EVENT_MAXIMIZED), this._parent)
}
minimize() {
this._parent.find(`${this._settings.maximizeTrigger} .${this._settings.minimizeIcon}`)
.addClass(this._settings.maximizeIcon)
.removeClass(this._settings.minimizeIcon)
this._parent.css('cssText', `height: ${this._parent[0].style.height} !important; width: ${this._parent[0].style.width} !important; transition: all .15s;`
).delay(10).queue(function () {
const $element = $(this)
$element.removeClass(CLASS_NAME_MAXIMIZED)
$('html').removeClass(CLASS_NAME_MAXIMIZED)
$element.css({
height: 'inherit',
width: 'inherit'
})
if ($element.hasClass(CLASS_NAME_WAS_COLLAPSED)) {
$element.removeClass(CLASS_NAME_WAS_COLLAPSED)
}
$element.dequeue()
})
this._element.trigger($.Event(EVENT_MINIMIZED), this._parent)
}
toggleMaximize() {
if (this._parent.hasClass(CLASS_NAME_MAXIMIZED)) {
this.minimize()
return
}
this.maximize()
}
// Private
_init(card) {
this._parent = card
$(this).find(this._settings.collapseTrigger).click(() => {
this.toggle()
})
$(this).find(this._settings.maximizeTrigger).click(() => {
this.toggleMaximize()
})
$(this).find(this._settings.removeTrigger).click(() => {
this.remove()
})
}
// Static
static _jQueryInterface(config) {
let data = $(this).data(DATA_KEY)
const _options = $.extend({}, Default, $(this).data())
if (!data) {
data = new CardWidget($(this), _options)
$(this).data(DATA_KEY, typeof config === 'string' ? data : config)
}
if (typeof config === 'string' && config.match(/collapse|expand|remove|toggle|maximize|minimize|toggleMaximize/)) {
data[config]()
} else if (typeof config === 'object') {
data._init($(this))
}
}
}
/**
* Data API
* ====================================================
*/
$(document).on('click', SELECTOR_DATA_COLLAPSE, function (event) {
if (event) {
event.preventDefault()
}
CardWidget._jQueryInterface.call($(this), 'toggle')
})
$(document).on('click', SELECTOR_DATA_REMOVE, function (event) {
if (event) {
event.preventDefault()
}
CardWidget._jQueryInterface.call($(this), 'remove')
})
$(document).on('click', SELECTOR_DATA_MAXIMIZE, function (event) {
if (event) {
event.preventDefault()
}
CardWidget._jQueryInterface.call($(this), 'toggleMaximize')
})
/**
* jQuery API
* ====================================================
*/
$.fn[NAME] = CardWidget._jQueryInterface
$.fn[NAME].Constructor = CardWidget
$.fn[NAME].noConflict = function () {
$.fn[NAME] = JQUERY_NO_CONFLICT
return CardWidget._jQueryInterface
}
export default CardWidget

View File

@@ -5,151 +5,292 @@
* --------------------------------------------
*/
const ControlSidebar = (($) => {
/**
* Constants
* ====================================================
*/
import $ from 'jquery'
const NAME = 'ControlSidebar'
const DATA_KEY = 'lte.control.sidebar'
const EVENT_KEY = `.${DATA_KEY}`
const JQUERY_NO_CONFLICT = $.fn[NAME]
const DATA_API_KEY = '.data-api'
/**
* Constants
* ====================================================
*/
const Event = {
CLICK_DATA_API: `click${EVENT_KEY}${DATA_API_KEY}`
const NAME = 'ControlSidebar'
const DATA_KEY = 'lte.controlsidebar'
const EVENT_KEY = `.${DATA_KEY}`
const JQUERY_NO_CONFLICT = $.fn[NAME]
const EVENT_COLLAPSED = `collapsed${EVENT_KEY}`
const EVENT_EXPANDED = `expanded${EVENT_KEY}`
const SELECTOR_CONTROL_SIDEBAR = '.control-sidebar'
const SELECTOR_CONTROL_SIDEBAR_CONTENT = '.control-sidebar-content'
const SELECTOR_DATA_TOGGLE = '[data-widget="control-sidebar"]'
const SELECTOR_HEADER = '.main-header'
const SELECTOR_FOOTER = '.main-footer'
const CLASS_NAME_CONTROL_SIDEBAR_ANIMATE = 'control-sidebar-animate'
const CLASS_NAME_CONTROL_SIDEBAR_OPEN = 'control-sidebar-open'
const CLASS_NAME_CONTROL_SIDEBAR_SLIDE = 'control-sidebar-slide-open'
const CLASS_NAME_LAYOUT_FIXED = 'layout-fixed'
const CLASS_NAME_NAVBAR_FIXED = 'layout-navbar-fixed'
const CLASS_NAME_NAVBAR_SM_FIXED = 'layout-sm-navbar-fixed'
const CLASS_NAME_NAVBAR_MD_FIXED = 'layout-md-navbar-fixed'
const CLASS_NAME_NAVBAR_LG_FIXED = 'layout-lg-navbar-fixed'
const CLASS_NAME_NAVBAR_XL_FIXED = 'layout-xl-navbar-fixed'
const CLASS_NAME_FOOTER_FIXED = 'layout-footer-fixed'
const CLASS_NAME_FOOTER_SM_FIXED = 'layout-sm-footer-fixed'
const CLASS_NAME_FOOTER_MD_FIXED = 'layout-md-footer-fixed'
const CLASS_NAME_FOOTER_LG_FIXED = 'layout-lg-footer-fixed'
const CLASS_NAME_FOOTER_XL_FIXED = 'layout-xl-footer-fixed'
const Default = {
controlsidebarSlide: true,
scrollbarTheme: 'os-theme-light',
scrollbarAutoHide: 'l'
}
/**
* Class Definition
* ====================================================
*/
class ControlSidebar {
constructor(element, config) {
this._element = element
this._config = config
this._init()
}
const Selector = {
CONTROL_SIDEBAR: '.control-sidebar',
DATA_TOGGLE : '[data-widget="control-sidebar"]',
MAIN_HEADER : '.main-header'
}
// Public
const ClassName = {
CONTROL_SIDEBAR_ANIMATE: 'control-sidebar-animate',
CONTROL_SIDEBAR_OPEN : 'control-sidebar-open',
CONTROL_SIDEBAR_SLIDE : 'control-sidebar-slide-open'
}
collapse() {
const $body = $('body')
const $html = $('html')
const Default = {
slide: true
}
/**
* Class Definition
* ====================================================
*/
class ControlSidebar {
constructor(element, config) {
this._element = element
this._config = this._getConfig(config)
}
// Public
show() {
// Show the control sidebar
if (this._config.slide) {
$('html').addClass(ClassName.CONTROL_SIDEBAR_ANIMATE)
$('body').removeClass(ClassName.CONTROL_SIDEBAR_SLIDE).delay(300).queue(function(){
$(Selector.CONTROL_SIDEBAR).hide()
$('html').removeClass(ClassName.CONTROL_SIDEBAR_ANIMATE)
$(this).dequeue()
})
} else {
$('body').removeClass(ClassName.CONTROL_SIDEBAR_OPEN)
}
}
collapse() {
// Collapse the control sidebar
if (this._config.slide) {
$('html').addClass(ClassName.CONTROL_SIDEBAR_ANIMATE)
$(Selector.CONTROL_SIDEBAR).show().delay(100).queue(function(){
$('body').addClass(ClassName.CONTROL_SIDEBAR_SLIDE).delay(300).queue(function(){
$('html').removeClass(ClassName.CONTROL_SIDEBAR_ANIMATE)
$(this).dequeue()
})
$(this).dequeue()
})
} else {
$('body').addClass(ClassName.CONTROL_SIDEBAR_OPEN)
}
}
toggle() {
this._setMargin()
const shouldOpen = $('body').hasClass(ClassName.CONTROL_SIDEBAR_OPEN) || $('body')
.hasClass(ClassName.CONTROL_SIDEBAR_SLIDE)
if (shouldOpen) {
// Open the control sidebar
this.show()
} else {
// Close the control sidebar
this.collapse()
}
}
// Private
_getConfig(config) {
return $.extend({}, Default, config)
}
_setMargin() {
$(Selector.CONTROL_SIDEBAR).css({
top: $(Selector.MAIN_HEADER).innerHeight()
// Show the control sidebar
if (this._config.controlsidebarSlide) {
$html.addClass(CLASS_NAME_CONTROL_SIDEBAR_ANIMATE)
$body.removeClass(CLASS_NAME_CONTROL_SIDEBAR_SLIDE).delay(300).queue(function () {
$(SELECTOR_CONTROL_SIDEBAR).hide()
$html.removeClass(CLASS_NAME_CONTROL_SIDEBAR_ANIMATE)
$(this).dequeue()
})
} else {
$body.removeClass(CLASS_NAME_CONTROL_SIDEBAR_OPEN)
}
// Static
$(this._element).trigger($.Event(EVENT_COLLAPSED))
}
static _jQueryInterface(operation) {
return this.each(function () {
let data = $(this).data(DATA_KEY)
show() {
const $body = $('body')
const $html = $('html')
if (!data) {
data = new ControlSidebar(this, $(this).data())
$(this).data(DATA_KEY, data)
// Collapse the control sidebar
if (this._config.controlsidebarSlide) {
$html.addClass(CLASS_NAME_CONTROL_SIDEBAR_ANIMATE)
$(SELECTOR_CONTROL_SIDEBAR).show().delay(10).queue(function () {
$body.addClass(CLASS_NAME_CONTROL_SIDEBAR_SLIDE).delay(300).queue(function () {
$html.removeClass(CLASS_NAME_CONTROL_SIDEBAR_ANIMATE)
$(this).dequeue()
})
$(this).dequeue()
})
} else {
$body.addClass(CLASS_NAME_CONTROL_SIDEBAR_OPEN)
}
this._fixHeight()
this._fixScrollHeight()
$(this._element).trigger($.Event(EVENT_EXPANDED))
}
toggle() {
const $body = $('body')
const shouldClose = $body.hasClass(CLASS_NAME_CONTROL_SIDEBAR_OPEN) ||
$body.hasClass(CLASS_NAME_CONTROL_SIDEBAR_SLIDE)
if (shouldClose) {
// Close the control sidebar
this.collapse()
} else {
// Open the control sidebar
this.show()
}
}
// Private
_init() {
this._fixHeight()
this._fixScrollHeight()
$(window).resize(() => {
this._fixHeight()
this._fixScrollHeight()
})
$(window).scroll(() => {
const $body = $('body')
const shouldFixHeight = $body.hasClass(CLASS_NAME_CONTROL_SIDEBAR_OPEN) ||
$body.hasClass(CLASS_NAME_CONTROL_SIDEBAR_SLIDE)
if (shouldFixHeight) {
this._fixScrollHeight()
}
})
}
_fixScrollHeight() {
const $body = $('body')
if (!$body.hasClass(CLASS_NAME_LAYOUT_FIXED)) {
return
}
const heights = {
scroll: $(document).height(),
window: $(window).height(),
header: $(SELECTOR_HEADER).outerHeight(),
footer: $(SELECTOR_FOOTER).outerHeight()
}
const positions = {
bottom: Math.abs((heights.window + $(window).scrollTop()) - heights.scroll),
top: $(window).scrollTop()
}
const navbarFixed = (
$body.hasClass(CLASS_NAME_NAVBAR_FIXED) ||
$body.hasClass(CLASS_NAME_NAVBAR_SM_FIXED) ||
$body.hasClass(CLASS_NAME_NAVBAR_MD_FIXED) ||
$body.hasClass(CLASS_NAME_NAVBAR_LG_FIXED) ||
$body.hasClass(CLASS_NAME_NAVBAR_XL_FIXED)
) && $(SELECTOR_HEADER).css('position') === 'fixed'
const footerFixed = (
$body.hasClass(CLASS_NAME_FOOTER_FIXED) ||
$body.hasClass(CLASS_NAME_FOOTER_SM_FIXED) ||
$body.hasClass(CLASS_NAME_FOOTER_MD_FIXED) ||
$body.hasClass(CLASS_NAME_FOOTER_LG_FIXED) ||
$body.hasClass(CLASS_NAME_FOOTER_XL_FIXED)
) && $(SELECTOR_FOOTER).css('position') === 'fixed'
const $controlSidebar = $(SELECTOR_CONTROL_SIDEBAR)
const $controlsidebarContent = $(`${SELECTOR_CONTROL_SIDEBAR}, ${SELECTOR_CONTROL_SIDEBAR} ${SELECTOR_CONTROL_SIDEBAR_CONTENT}`)
if (positions.top === 0 && positions.bottom === 0) {
$controlSidebar.css({
bottom: heights.footer,
top: heights.header
})
$controlsidebarContent.css('height', heights.window - (heights.header + heights.footer))
} else if (positions.bottom <= heights.footer) {
if (footerFixed === false) {
const top = heights.header - positions.top
$controlSidebar.css('bottom', heights.footer - positions.bottom).css('top', top >= 0 ? top : 0)
$controlsidebarContent.css('height', heights.window - (heights.footer - positions.bottom))
} else {
$controlSidebar.css('bottom', heights.footer)
}
} else if (positions.top <= heights.header) {
if (navbarFixed === false) {
$controlSidebar.css('top', heights.header - positions.top)
$controlsidebarContent.css('height', heights.window - (heights.header - positions.top))
} else {
$controlSidebar.css('top', heights.header)
}
} else if (navbarFixed === false) {
$controlSidebar.css('top', 0)
$controlsidebarContent.css('height', heights.window)
} else {
$controlSidebar.css('top', heights.header)
}
}
_fixHeight() {
const $body = $('body')
if (!$body.hasClass(CLASS_NAME_LAYOUT_FIXED)) {
return
}
const heights = {
window: $(window).height(),
header: $(SELECTOR_HEADER).outerHeight(),
footer: $(SELECTOR_FOOTER).outerHeight()
}
let sidebarHeight = heights.window - heights.header
if (
$body.hasClass(CLASS_NAME_FOOTER_FIXED) ||
$body.hasClass(CLASS_NAME_FOOTER_SM_FIXED) ||
$body.hasClass(CLASS_NAME_FOOTER_MD_FIXED) ||
$body.hasClass(CLASS_NAME_FOOTER_LG_FIXED) ||
$body.hasClass(CLASS_NAME_FOOTER_XL_FIXED)
) {
if ($(SELECTOR_FOOTER).css('position') === 'fixed') {
sidebarHeight = heights.window - heights.header - heights.footer
}
}
const $controlSidebar = $(`${SELECTOR_CONTROL_SIDEBAR} ${SELECTOR_CONTROL_SIDEBAR_CONTENT}`)
$controlSidebar.css('height', sidebarHeight)
if (typeof $.fn.overlayScrollbars !== 'undefined') {
$controlSidebar.overlayScrollbars({
className: this._config.scrollbarTheme,
sizeAutoCapable: true,
scrollbars: {
autoHide: this._config.scrollbarAutoHide,
clickScrolling: true
}
if (data[operation] === 'undefined') {
throw new Error(`${operation} is not a function`)
}
data[operation]()
})
}
}
/**
*
* Data Api implementation
* ====================================================
*/
$(document).on('click', Selector.DATA_TOGGLE, function (event) {
event.preventDefault()
// Static
ControlSidebar._jQueryInterface.call($(this), 'toggle')
})
static _jQueryInterface(operation) {
return this.each(function () {
let data = $(this).data(DATA_KEY)
const _options = $.extend({}, Default, $(this).data())
/**
* jQuery API
* ====================================================
*/
if (!data) {
data = new ControlSidebar(this, _options)
$(this).data(DATA_KEY, data)
}
$.fn[NAME] = ControlSidebar._jQueryInterface
$.fn[NAME].Constructor = ControlSidebar
$.fn[NAME].noConflict = function () {
$.fn[NAME] = JQUERY_NO_CONFLICT
return ControlSidebar._jQueryInterface
if (data[operation] === 'undefined') {
throw new Error(`${operation} is not a function`)
}
data[operation]()
})
}
}
return ControlSidebar
})(jQuery)
/**
*
* Data Api implementation
* ====================================================
*/
$(document).on('click', SELECTOR_DATA_TOGGLE, function (event) {
event.preventDefault()
ControlSidebar._jQueryInterface.call($(this), 'toggle')
})
/**
* jQuery API
* ====================================================
*/
$.fn[NAME] = ControlSidebar._jQueryInterface
$.fn[NAME].Constructor = ControlSidebar
$.fn[NAME].noConflict = function () {
$.fn[NAME] = JQUERY_NO_CONFLICT
return ControlSidebar._jQueryInterface
}
export default ControlSidebar

View File

@@ -5,81 +5,80 @@
* --------------------------------------------
*/
const DirectChat = (($) => {
/**
* Constants
* ====================================================
*/
import $ from 'jquery'
const NAME = 'DirectChat'
const DATA_KEY = 'lte.directchat'
const EVENT_KEY = `.${DATA_KEY}`
const JQUERY_NO_CONFLICT = $.fn[NAME]
const DATA_API_KEY = '.data-api'
/**
* Constants
* ====================================================
*/
const Selector = {
DATA_TOGGLE: '[data-widget="chat-pane-toggle"]',
DIRECT_CHAT: '.direct-chat'
};
const NAME = 'DirectChat'
const DATA_KEY = 'lte.directchat'
const EVENT_KEY = `.${DATA_KEY}`
const JQUERY_NO_CONFLICT = $.fn[NAME]
const ClassName = {
DIRECT_CHAT_OPEN: 'direct-chat-contacts-open'
};
const EVENT_TOGGLED = `toggled${EVENT_KEY}`
/**
* Class Definition
* ====================================================
*/
const SELECTOR_DATA_TOGGLE = '[data-widget="chat-pane-toggle"]'
const SELECTOR_DIRECT_CHAT = '.direct-chat'
class DirectChat {
constructor(element, config) {
this._element = element
}
const CLASS_NAME_DIRECT_CHAT_OPEN = 'direct-chat-contacts-open'
toggle() {
$(this._element).parents(Selector.DIRECT_CHAT).first().toggleClass(ClassName.DIRECT_CHAT_OPEN);
}
/**
* Class Definition
* ====================================================
*/
// Static
static _jQueryInterface(config) {
return this.each(function () {
let data = $(this).data(DATA_KEY)
if (!data) {
data = new DirectChat($(this))
$(this).data(DATA_KEY, data)
}
data[config]()
})
}
class DirectChat {
constructor(element) {
this._element = element
}
/**
*
* Data Api implementation
* ====================================================
*/
$(document).on('click', Selector.DATA_TOGGLE, function (event) {
if (event) event.preventDefault();
DirectChat._jQueryInterface.call($(this), 'toggle');
});
/**
* jQuery API
* ====================================================
*/
$.fn[NAME] = DirectChat._jQueryInterface
$.fn[NAME].Constructor = DirectChat
$.fn[NAME].noConflict = function () {
$.fn[NAME] = JQUERY_NO_CONFLICT
return DirectChat._jQueryInterface
toggle() {
$(this._element).parents(SELECTOR_DIRECT_CHAT).first().toggleClass(CLASS_NAME_DIRECT_CHAT_OPEN)
$(this._element).trigger($.Event(EVENT_TOGGLED))
}
return DirectChat
})(jQuery)
// Static
static _jQueryInterface(config) {
return this.each(function () {
let data = $(this).data(DATA_KEY)
if (!data) {
data = new DirectChat($(this))
$(this).data(DATA_KEY, data)
}
data[config]()
})
}
}
/**
*
* Data Api implementation
* ====================================================
*/
$(document).on('click', SELECTOR_DATA_TOGGLE, function (event) {
if (event) {
event.preventDefault()
}
DirectChat._jQueryInterface.call($(this), 'toggle')
})
/**
* jQuery API
* ====================================================
*/
$.fn[NAME] = DirectChat._jQueryInterface
$.fn[NAME].Constructor = DirectChat
$.fn[NAME].noConflict = function () {
$.fn[NAME] = JQUERY_NO_CONFLICT
return DirectChat._jQueryInterface
}
export default DirectChat

147
build/js/Dropdown.js Normal file
View File

@@ -0,0 +1,147 @@
/**
* --------------------------------------------
* AdminLTE Dropdown.js
* License MIT
* --------------------------------------------
*/
import $ from 'jquery'
/**
* Constants
* ====================================================
*/
const NAME = 'Dropdown'
const DATA_KEY = 'lte.dropdown'
const JQUERY_NO_CONFLICT = $.fn[NAME]
const SELECTOR_NAVBAR = '.navbar'
const SELECTOR_DROPDOWN_MENU = '.dropdown-menu'
const SELECTOR_DROPDOWN_MENU_ACTIVE = '.dropdown-menu.show'
const SELECTOR_DROPDOWN_TOGGLE = '[data-toggle="dropdown"]'
const CLASS_NAME_DROPDOWN_RIGHT = 'dropdown-menu-right'
const CLASS_NAME_DROPDOWN_SUBMENU = 'dropdown-submenu'
// TODO: this is unused; should be removed along with the extend?
const Default = {
}
/**
* Class Definition
* ====================================================
*/
class Dropdown {
constructor(element, config) {
this._config = config
this._element = element
}
// Public
toggleSubmenu() {
this._element.siblings().show().toggleClass('show')
if (!this._element.next().hasClass('show')) {
this._element.parents(SELECTOR_DROPDOWN_MENU).first().find('.show').removeClass('show').hide()
}
this._element.parents('li.nav-item.dropdown.show').on('hidden.bs.dropdown', () => {
$('.dropdown-submenu .show').removeClass('show').hide()
})
}
fixPosition() {
const $element = $(SELECTOR_DROPDOWN_MENU_ACTIVE)
if ($element.length === 0) {
return
}
if ($element.hasClass(CLASS_NAME_DROPDOWN_RIGHT)) {
$element.css({
left: 'inherit',
right: 0
})
} else {
$element.css({
left: 0,
right: 'inherit'
})
}
const offset = $element.offset()
const width = $element.width()
const visiblePart = $(window).width() - offset.left
if (offset.left < 0) {
$element.css({
left: 'inherit',
right: offset.left - 5
})
} else if (visiblePart < width) {
$element.css({
left: 'inherit',
right: 0
})
}
}
// Static
static _jQueryInterface(config) {
return this.each(function () {
let data = $(this).data(DATA_KEY)
const _config = $.extend({}, Default, $(this).data())
if (!data) {
data = new Dropdown($(this), _config)
$(this).data(DATA_KEY, data)
}
if (config === 'toggleSubmenu' || config === 'fixPosition') {
data[config]()
}
})
}
}
/**
* Data API
* ====================================================
*/
$(`${SELECTOR_DROPDOWN_MENU} ${SELECTOR_DROPDOWN_TOGGLE}`).on('click', function (event) {
event.preventDefault()
event.stopPropagation()
Dropdown._jQueryInterface.call($(this), 'toggleSubmenu')
})
$(`${SELECTOR_NAVBAR} ${SELECTOR_DROPDOWN_TOGGLE}`).on('click', event => {
event.preventDefault()
if ($(event.target).parent().hasClass(CLASS_NAME_DROPDOWN_SUBMENU)) {
return
}
setTimeout(function () {
Dropdown._jQueryInterface.call($(this), 'fixPosition')
}, 1)
})
/**
* jQuery API
* ====================================================
*/
$.fn[NAME] = Dropdown._jQueryInterface
$.fn[NAME].Constructor = Dropdown
$.fn[NAME].noConflict = function () {
$.fn[NAME] = JQUERY_NO_CONFLICT
return Dropdown._jQueryInterface
}
export default Dropdown

115
build/js/ExpandableTable.js Normal file
View File

@@ -0,0 +1,115 @@
/**
* --------------------------------------------
* AdminLTE ExpandableTable.js
* License MIT
* --------------------------------------------
*/
import $ from 'jquery'
/**
* Constants
* ====================================================
*/
const NAME = 'ExpandableTable'
const DATA_KEY = 'lte.expandableTable'
const EVENT_KEY = `.${DATA_KEY}`
const JQUERY_NO_CONFLICT = $.fn[NAME]
const EVENT_EXPANDED = `expanded${EVENT_KEY}`
const EVENT_COLLAPSED = `collapsed${EVENT_KEY}`
const SELECTOR_TABLE = '.expandable-table'
const SELECTOR_DATA_TOGGLE = '[data-widget="expandable-table"]'
const SELECTOR_ARIA_ATTR = 'aria-expanded'
/**
* Class Definition
* ====================================================
*/
class ExpandableTable {
constructor(element, options) {
this._options = options
this._element = element
}
// Public
init() {
$(SELECTOR_DATA_TOGGLE).each((_, $header) => {
const $type = $($header).attr(SELECTOR_ARIA_ATTR)
const $body = $($header).next().children().first().children()
if ($type === 'true') {
$body.show()
} else if ($type === 'false') {
$body.hide()
$body.parent().parent().addClass('d-none')
}
})
}
toggleRow() {
const $element = this._element
const time = 500
const $type = $element.attr(SELECTOR_ARIA_ATTR)
const $body = $element.next().children().first().children()
$body.stop()
if ($type === 'true') {
$body.slideUp(time, () => {
$element.next().addClass('d-none')
})
$element.attr(SELECTOR_ARIA_ATTR, 'false')
$element.trigger($.Event(EVENT_COLLAPSED))
} else if ($type === 'false') {
$element.next().removeClass('d-none')
$body.slideDown(time)
$element.attr(SELECTOR_ARIA_ATTR, 'true')
$element.trigger($.Event(EVENT_EXPANDED))
}
}
// Static
static _jQueryInterface(operation) {
return this.each(function () {
let data = $(this).data(DATA_KEY)
if (!data) {
data = new ExpandableTable($(this))
$(this).data(DATA_KEY, data)
}
if (typeof operation === 'string' && operation.match(/init|toggleRow/)) {
data[operation]()
}
})
}
}
/**
* Data API
* ====================================================
*/
$(SELECTOR_TABLE).ready(function () {
ExpandableTable._jQueryInterface.call($(this), 'init')
})
$(document).on('click', SELECTOR_DATA_TOGGLE, function () {
ExpandableTable._jQueryInterface.call($(this), 'toggleRow')
})
/**
* jQuery API
* ====================================================
*/
$.fn[NAME] = ExpandableTable._jQueryInterface
$.fn[NAME].Constructor = ExpandableTable
$.fn[NAME].noConflict = function () {
$.fn[NAME] = JQUERY_NO_CONFLICT
return ExpandableTable._jQueryInterface
}
export default ExpandableTable

117
build/js/Fullscreen.js Normal file
View File

@@ -0,0 +1,117 @@
/**
* --------------------------------------------
* AdminLTE Fullscreen.js
* License MIT
* --------------------------------------------
*/
import $ from 'jquery'
/**
* Constants
* ====================================================
*/
const NAME = 'Fullscreen'
const DATA_KEY = 'lte.fullscreen'
const JQUERY_NO_CONFLICT = $.fn[NAME]
const SELECTOR_DATA_WIDGET = '[data-widget="fullscreen"]'
const SELECTOR_ICON = `${SELECTOR_DATA_WIDGET} i`
const Default = {
minimizeIcon: 'fa-compress-arrows-alt',
maximizeIcon: 'fa-expand-arrows-alt'
}
/**
* Class Definition
* ====================================================
*/
class Fullscreen {
constructor(_element, _options) {
this.element = _element
this.options = $.extend({}, Default, _options)
}
// Public
toggle() {
if (document.fullscreenElement ||
document.mozFullScreenElement ||
document.webkitFullscreenElement ||
document.msFullscreenElement) {
this.windowed()
} else {
this.fullscreen()
}
}
fullscreen() {
if (document.documentElement.requestFullscreen) {
document.documentElement.requestFullscreen()
} else if (document.documentElement.webkitRequestFullscreen) {
document.documentElement.webkitRequestFullscreen()
} else if (document.documentElement.msRequestFullscreen) {
document.documentElement.msRequestFullscreen()
}
$(SELECTOR_ICON).removeClass(this.options.maximizeIcon).addClass(this.options.minimizeIcon)
}
windowed() {
if (document.exitFullscreen) {
document.exitFullscreen()
} else if (document.webkitExitFullscreen) {
document.webkitExitFullscreen()
} else if (document.msExitFullscreen) {
document.msExitFullscreen()
}
$(SELECTOR_ICON).removeClass(this.options.minimizeIcon).addClass(this.options.maximizeIcon)
}
// Static
static _jQueryInterface(config) {
let data = $(this).data(DATA_KEY)
if (!data) {
data = $(this).data()
}
const _options = $.extend({}, Default, typeof config === 'object' ? config : data)
const plugin = new Fullscreen($(this), _options)
$(this).data(DATA_KEY, typeof config === 'object' ? config : data)
if (typeof config === 'string' && config.match(/toggle|fullscreen|windowed/)) {
plugin[config]()
} else {
plugin.init()
}
}
}
/**
* Data API
* ====================================================
*/
$(document).on('click', SELECTOR_DATA_WIDGET, function () {
Fullscreen._jQueryInterface.call($(this), 'toggle')
})
/**
* jQuery API
* ====================================================
*/
$.fn[NAME] = Fullscreen._jQueryInterface
$.fn[NAME].Constructor = Fullscreen
$.fn[NAME].noConflict = function () {
$.fn[NAME] = JQUERY_NO_CONFLICT
return Fullscreen._jQueryInterface
}
export default Fullscreen

356
build/js/IFrame.js Normal file
View File

@@ -0,0 +1,356 @@
/**
* --------------------------------------------
* AdminLTE IFrame.js
* License MIT
* --------------------------------------------
*/
import $ from 'jquery'
/**
* Constants
* ====================================================
*/
const NAME = 'IFrame'
const DATA_KEY = 'lte.iframe'
const JQUERY_NO_CONFLICT = $.fn[NAME]
const SELECTOR_DATA_TOGGLE = '[data-widget="iframe"]'
const SELECTOR_DATA_TOGGLE_CLOSE = '[data-widget="iframe-close"]'
const SELECTOR_DATA_TOGGLE_SCROLL_LEFT = '[data-widget="iframe-scrollleft"]'
const SELECTOR_DATA_TOGGLE_SCROLL_RIGHT = '[data-widget="iframe-scrollright"]'
const SELECTOR_DATA_TOGGLE_FULLSCREEN = '[data-widget="iframe-fullscreen"]'
const SELECTOR_CONTENT_WRAPPER = '.content-wrapper'
const SELECTOR_CONTENT_IFRAME = `${SELECTOR_CONTENT_WRAPPER} iframe`
const SELECTOR_TAB_NAV = `${SELECTOR_DATA_TOGGLE}.iframe-mode .nav`
const SELECTOR_TAB_NAVBAR_NAV = `${SELECTOR_DATA_TOGGLE}.iframe-mode .navbar-nav`
const SELECTOR_TAB_NAVBAR_NAV_ITEM = `${SELECTOR_TAB_NAVBAR_NAV} .nav-item`
const SELECTOR_TAB_CONTENT = `${SELECTOR_DATA_TOGGLE}.iframe-mode .tab-content`
const SELECTOR_TAB_EMPTY = `${SELECTOR_TAB_CONTENT} .tab-empty`
const SELECTOR_TAB_LOADING = `${SELECTOR_TAB_CONTENT} .tab-loading`
const SELECTOR_SIDEBAR_MENU_ITEM = '.main-sidebar .nav-item > a.nav-link'
const SELECTOR_HEADER_MENU_ITEM = '.main-header .nav-item a.nav-link'
const SELECTOR_HEADER_DROPDOWN_ITEM = '.main-header a.dropdown-item'
const CLASS_NAME_IFRAME_MODE = 'iframe-mode'
const CLASS_NAME_FULLSCREEN_MODE = 'iframe-mode-fullscreen'
const Default = {
onTabClick(item) {
return item
},
onTabChanged(item) {
return item
},
onTabCreated(item) {
return item
},
autoIframeMode: true,
autoItemActive: true,
autoShowNewTab: true,
loadingScreen: true,
useNavbarItems: true,
scrollOffset: 40,
scrollBehaviorSwap: false,
iconMaximize: 'fa-expand',
iconMinimize: 'fa-compress'
}
/**
* Class Definition
* ====================================================
*/
class IFrame {
constructor(element, config) {
this._config = config
this._element = element
this._init()
}
// Public
onTabClick(item) {
this._config.onTabClick(item)
}
onTabChanged(item) {
this._config.onTabChanged(item)
}
onTabCreated(item) {
this._config.onTabCreated(item)
}
createTab(title, link, uniqueName, autoOpen) {
const tabId = `panel-${uniqueName}-${Math.floor(Math.random() * 1000)}`
const navId = `tab-${uniqueName}-${Math.floor(Math.random() * 1000)}`
const newNavItem = `<li class="nav-item" role="presentation"><a class="nav-link" data-toggle="row" id="${navId}" href="#${tabId}" role="tab" aria-controls="${tabId}" aria-selected="false">${title}</a></li>`
$(SELECTOR_TAB_NAVBAR_NAV).append(newNavItem)
const newTabItem = `<div class="tab-pane fade" id="${tabId}" role="tabpanel" aria-labelledby="${navId}"><iframe src="${link}"></iframe></div>`
$(SELECTOR_TAB_CONTENT).append(newTabItem)
if (autoOpen) {
if (this._config.loadingScreen) {
const $loadingScreen = $(SELECTOR_TAB_LOADING)
$loadingScreen.fadeIn()
$(`${tabId} iframe`).ready(() => {
if (typeof this._config.loadingScreen === 'number') {
this.switchTab(`#${navId}`, this._config.loadingScreen)
setTimeout(() => {
$loadingScreen.fadeOut()
}, this._config.loadingScreen)
} else {
this.switchTab(`#${navId}`, this._config.loadingScreen)
$loadingScreen.fadeOut()
}
})
} else {
this.switchTab(`#${navId}`)
}
}
this.onTabCreated($(`#${navId}`))
}
openTabSidebar(item, autoOpen = this._config.autoShowNewTab) {
let $item = $(item).clone()
if ($item.attr('href') === undefined) {
$item = $(item).parent('a').clone()
}
$item.find('.right').remove()
let title = $item.find('p').text()
if (title === '') {
title = $item.text()
}
const link = $item.attr('href')
if (link === '#' || link === '' || link === undefined) {
return
}
this.createTab(title, link, link.replace('.html', '').replace('./', '').replaceAll('/', '-'), autoOpen)
}
switchTab(item) {
const $item = $(item)
const tabId = $item.attr('href')
$(SELECTOR_TAB_EMPTY).hide()
$(`${SELECTOR_TAB_NAVBAR_NAV} .active`).tab('dispose').removeClass('active')
this._fixHeight()
$item.tab('show')
$item.parents('li').addClass('active')
this.onTabChanged($item)
if (this._config.autoItemActive) {
this._setItemActive($(`${tabId} iframe`).attr('src'))
}
}
removeActiveTab() {
const $navItem = $(`${SELECTOR_TAB_NAVBAR_NAV_ITEM}.active`)
const $navItemParent = $navItem.parent()
const navItemIndex = $navItem.index()
$navItem.remove()
$('.tab-pane.active').remove()
if ($(SELECTOR_TAB_CONTENT).children().length == $(`${SELECTOR_TAB_EMPTY}, ${SELECTOR_TAB_LOADING}`).length) {
$(SELECTOR_TAB_EMPTY).show()
} else {
const prevNavItemIndex = navItemIndex - 1
this.switchTab($navItemParent.children().eq(prevNavItemIndex).find('a'))
}
}
toggleFullscreen() {
if ($('body').hasClass(CLASS_NAME_FULLSCREEN_MODE)) {
$(`${SELECTOR_DATA_TOGGLE_FULLSCREEN} i`).removeClass(this._config.iconMinimize).addClass(this._config.iconMaximize)
$('body').removeClass(CLASS_NAME_FULLSCREEN_MODE)
$(`${SELECTOR_TAB_EMPTY}, ${SELECTOR_TAB_LOADING}`).height('auto')
$(SELECTOR_CONTENT_WRAPPER).height('auto')
$(SELECTOR_CONTENT_IFRAME).height('auto')
} else {
$(`${SELECTOR_DATA_TOGGLE_FULLSCREEN} i`).removeClass(this._config.iconMaximize).addClass(this._config.iconMinimize)
$('body').addClass(CLASS_NAME_FULLSCREEN_MODE)
}
$(window).trigger('resize')
this._fixHeight(true)
}
// Private
_init() {
if (window.frameElement && this._config.autoIframeMode) {
$('body').addClass(CLASS_NAME_IFRAME_MODE)
} else if ($(SELECTOR_CONTENT_WRAPPER).hasClass(CLASS_NAME_IFRAME_MODE)) {
this._setupListeners()
this._fixHeight(true)
}
}
_navScroll(offset) {
const leftPos = $(SELECTOR_TAB_NAVBAR_NAV).scrollLeft()
$(SELECTOR_TAB_NAVBAR_NAV).animate({ scrollLeft: (leftPos + offset) }, 250, 'linear')
}
_setupListeners() {
$(window).on('resize', () => {
setTimeout(() => {
this._fixHeight()
}, 1)
})
$(document).on('click', SELECTOR_SIDEBAR_MENU_ITEM, e => {
e.preventDefault()
this.openTabSidebar(e.target)
})
if (this._config.useNavbarItems) {
$(document).on('click', `${SELECTOR_HEADER_MENU_ITEM}, ${SELECTOR_HEADER_DROPDOWN_ITEM}`, e => {
e.preventDefault()
this.openTabSidebar(e.target)
})
}
$(document).on('click', SELECTOR_TAB_NAVBAR_NAV_ITEM, e => {
e.preventDefault()
this.onTabClick(e.target)
this.switchTab(e.target)
})
$(document).on('click', SELECTOR_DATA_TOGGLE_CLOSE, e => {
e.preventDefault()
this.removeActiveTab()
})
$(document).on('click', SELECTOR_DATA_TOGGLE_FULLSCREEN, e => {
e.preventDefault()
this.toggleFullscreen()
})
let mousedown = false
let mousedownInterval = null
$(document).on('mousedown', SELECTOR_DATA_TOGGLE_SCROLL_LEFT, e => {
e.preventDefault()
clearInterval(mousedownInterval)
let { scrollOffset } = this._config
if (!this._config.scrollBehaviorSwap) {
scrollOffset = -scrollOffset
}
mousedown = true
this._navScroll(scrollOffset)
mousedownInterval = setInterval(() => {
this._navScroll(scrollOffset)
}, 250)
})
$(document).on('mousedown', SELECTOR_DATA_TOGGLE_SCROLL_RIGHT, e => {
e.preventDefault()
clearInterval(mousedownInterval)
let { scrollOffset } = this._config
if (this._config.scrollBehaviorSwap) {
scrollOffset = -scrollOffset
}
mousedown = true
this._navScroll(scrollOffset)
mousedownInterval = setInterval(() => {
this._navScroll(scrollOffset)
}, 250)
})
$(document).on('mouseup', () => {
if (mousedown) {
mousedown = false
clearInterval(mousedownInterval)
mousedownInterval = null
}
})
}
_setItemActive(href) {
$(`${SELECTOR_SIDEBAR_MENU_ITEM}, ${SELECTOR_HEADER_DROPDOWN_ITEM}`).removeClass('active')
$(SELECTOR_HEADER_MENU_ITEM).parent().removeClass('active')
const $headerMenuItem = $(`${SELECTOR_HEADER_MENU_ITEM}[href$="${href}"]`)
const $headerDropdownItem = $(`${SELECTOR_HEADER_DROPDOWN_ITEM}[href$="${href}"]`)
const $sidebarMenuItem = $(`${SELECTOR_SIDEBAR_MENU_ITEM}[href$="${href}"]`)
$headerMenuItem.each((i, e) => {
$(e).parent().addClass('active')
})
$headerDropdownItem.each((i, e) => {
$(e).addClass('active')
})
$sidebarMenuItem.each((i, e) => {
$(e).addClass('active')
$(e).parents('.nav-treeview').prevAll('.nav-link').addClass('active')
})
}
_fixHeight(tabEmpty = false) {
if ($('body').hasClass(CLASS_NAME_FULLSCREEN_MODE)) {
const windowHeight = $(window).height()
$(`${SELECTOR_TAB_EMPTY}, ${SELECTOR_TAB_LOADING}`).height(windowHeight)
$(SELECTOR_CONTENT_WRAPPER).height(windowHeight)
$(SELECTOR_CONTENT_IFRAME).height(windowHeight)
} else {
const contentWrapperHeight = parseFloat($(SELECTOR_CONTENT_WRAPPER).css('min-height'))
const navbarHeight = $(SELECTOR_TAB_NAV).outerHeight()
if (tabEmpty == true) {
setTimeout(() => {
$(`${SELECTOR_TAB_EMPTY}, ${SELECTOR_TAB_LOADING}`).height(contentWrapperHeight - navbarHeight)
}, 50)
} else {
$(SELECTOR_CONTENT_IFRAME).height(contentWrapperHeight - navbarHeight)
}
}
}
// Static
static _jQueryInterface(operation, ...args) {
let data = $(this).data(DATA_KEY)
const _options = $.extend({}, Default, $(this).data())
if (!data) {
data = new IFrame(this, _options)
$(this).data(DATA_KEY, data)
}
if (typeof operation === 'string' && operation.match(/createTab|openTabSidebar|switchTab|removeActiveTab/)) {
data[operation](...args)
}
}
}
/**
* Data API
* ====================================================
*/
$(window).on('load', () => {
IFrame._jQueryInterface.call($(SELECTOR_DATA_TOGGLE))
})
/**
* jQuery API
* ====================================================
*/
$.fn[NAME] = IFrame._jQueryInterface
$.fn[NAME].Constructor = IFrame
$.fn[NAME].noConflict = function () {
$.fn[NAME] = JQUERY_NO_CONFLICT
return IFrame._jQueryInterface
}
export default IFrame

View File

@@ -5,189 +5,244 @@
* --------------------------------------------
*/
const Layout = (($) => {
/**
* Constants
* ====================================================
*/
import $ from 'jquery'
const NAME = 'Layout'
const DATA_KEY = 'lte.layout'
const EVENT_KEY = `.${DATA_KEY}`
const JQUERY_NO_CONFLICT = $.fn[NAME]
/**
* Constants
* ====================================================
*/
const Event = {
SIDEBAR: 'sidebar'
const NAME = 'Layout'
const DATA_KEY = 'lte.layout'
const JQUERY_NO_CONFLICT = $.fn[NAME]
const SELECTOR_HEADER = '.main-header'
const SELECTOR_MAIN_SIDEBAR = '.main-sidebar'
const SELECTOR_SIDEBAR = '.main-sidebar .sidebar'
const SELECTOR_CONTENT = '.content-wrapper'
const SELECTOR_CONTROL_SIDEBAR_CONTENT = '.control-sidebar-content'
const SELECTOR_CONTROL_SIDEBAR_BTN = '[data-widget="control-sidebar"]'
const SELECTOR_FOOTER = '.main-footer'
const SELECTOR_PUSHMENU_BTN = '[data-widget="pushmenu"]'
const SELECTOR_LOGIN_BOX = '.login-box'
const SELECTOR_REGISTER_BOX = '.register-box'
const CLASS_NAME_SIDEBAR_FOCUSED = 'sidebar-focused'
const CLASS_NAME_LAYOUT_FIXED = 'layout-fixed'
const CLASS_NAME_CONTROL_SIDEBAR_SLIDE_OPEN = 'control-sidebar-slide-open'
const CLASS_NAME_CONTROL_SIDEBAR_OPEN = 'control-sidebar-open'
const CLASS_NAME_LAYOUT_TOP_NAV = 'layout-top-nav'
const Default = {
scrollbarTheme: 'os-theme-light',
scrollbarAutoHide: 'l',
panelAutoHeight: true,
panelAutoHeightMode: 'min-height',
loginRegisterAutoHeight: true
}
/**
* Class Definition
* ====================================================
*/
class Layout {
constructor(element, config) {
this._config = config
this._element = element
this._init()
}
const Selector = {
HEADER : '.main-header',
MAIN_SIDEBAR : '.main-sidebar',
SIDEBAR : '.main-sidebar .sidebar',
CONTENT : '.content-wrapper',
BRAND : '.brand-link',
CONTENT_HEADER : '.content-header',
WRAPPER : '.wrapper',
CONTROL_SIDEBAR: '.control-sidebar',
LAYOUT_FIXED : '.layout-fixed',
FOOTER : '.main-footer'
}
// Public
const ClassName = {
HOLD : 'hold-transition',
SIDEBAR : 'main-sidebar',
CONTENT_FIXED : 'content-fixed',
SIDEBAR_FOCUSED: 'sidebar-focused',
LAYOUT_FIXED : 'layout-fixed',
NAVBAR_FIXED : 'layout-navbar-fixed',
FOOTER_FIXED : 'layout-footer-fixed',
}
fixLayoutHeight(extra = null) {
const $body = $('body')
let controlSidebar = 0
const Default = {
scrollbarTheme : 'os-theme-light',
scrollbarAutoHide: 'l'
}
/**
* Class Definition
* ====================================================
*/
class Layout {
constructor(element, config) {
this._config = config
this._element = element
this._init()
if ($body.hasClass(CLASS_NAME_CONTROL_SIDEBAR_SLIDE_OPEN) || $body.hasClass(CLASS_NAME_CONTROL_SIDEBAR_OPEN) || extra === 'control_sidebar') {
controlSidebar = $(SELECTOR_CONTROL_SIDEBAR_CONTENT).height()
}
// Public
const heights = {
window: $(window).height(),
header: $(SELECTOR_HEADER).length !== 0 ? $(SELECTOR_HEADER).outerHeight() : 0,
footer: $(SELECTOR_FOOTER).length !== 0 ? $(SELECTOR_FOOTER).outerHeight() : 0,
sidebar: $(SELECTOR_SIDEBAR).length !== 0 ? $(SELECTOR_SIDEBAR).height() : 0,
controlSidebar
}
fixLayoutHeight() {
const heights = {
window : $(window).height(),
header : $(Selector.HEADER).outerHeight(),
footer : $(Selector.FOOTER).outerHeight(),
sidebar : $(Selector.SIDEBAR).height(),
}
const max = this._max(heights)
let offset = this._config.panelAutoHeight
const max = this._max(heights)
if (offset === true) {
offset = 0
}
const $contentSelector = $(SELECTOR_CONTENT)
if ($('body').hasClass(ClassName.LAYOUT_FIXED)) {
$(Selector.CONTENT).css('min-height', max - heights.header - heights.footer)
// $(Selector.SIDEBAR).css('min-height', max - heights.header)
$(Selector.CONTROL_SIDEBAR + ' .control-sidebar-content').css('height', max - heights.header)
if (typeof $.fn.overlayScrollbars !== 'undefined') {
$(Selector.SIDEBAR).overlayScrollbars({
className : this._config.scrollbarTheme,
sizeAutoCapable : true,
scrollbars : {
autoHide: this._config.scrollbarAutoHide,
clickScrolling : true
}
})
$(Selector.CONTROL_SIDEBAR + ' .control-sidebar-content').overlayScrollbars({
className : this._config.scrollbarTheme,
sizeAutoCapable : true,
scrollbars : {
autoHide: this._config.scrollbarAutoHide,
clickScrolling : true
}
})
}
} else {
if (heights.window > heights.sidebar) {
$(Selector.CONTENT).css('min-height', heights.window - heights.header - heights.footer)
if (offset !== false) {
if (max === heights.controlSidebar) {
if ($body.hasClass(CLASS_NAME_LAYOUT_TOP_NAV)) {
$contentSelector.css(this._config.panelAutoHeightMode, (max + offset) + heights.header + heights.footer)
} else {
$(Selector.CONTENT).css('min-height', heights.sidebar - heights.header)
$contentSelector.css(this._config.panelAutoHeightMode, (max + offset))
}
} else if (max === heights.window) {
$contentSelector.css(this._config.panelAutoHeightMode, (max + offset) - heights.header - heights.footer)
} else {
$contentSelector.css(this._config.panelAutoHeightMode, (max + offset) - heights.header)
}
if (this._isFooterFixed()) {
$contentSelector.css(this._config.panelAutoHeightMode, parseFloat($contentSelector.css(this._config.panelAutoHeightMode)) + heights.footer)
}
}
// Private
if (!$body.hasClass(CLASS_NAME_LAYOUT_FIXED)) {
return
}
_init() {
// Enable transitions
$('body').removeClass(ClassName.HOLD)
if (offset !== false) {
$contentSelector.css(this._config.panelAutoHeightMode, (max + offset) - heights.header - heights.footer)
}
// Activate layout height watcher
this.fixLayoutHeight()
$(Selector.SIDEBAR)
.on('collapsed.lte.treeview expanded.lte.treeview collapsed.lte.pushmenu expanded.lte.pushmenu', () => {
this.fixLayoutHeight()
})
if (typeof $.fn.overlayScrollbars !== 'undefined') {
$(SELECTOR_SIDEBAR).overlayScrollbars({
className: this._config.scrollbarTheme,
sizeAutoCapable: true,
scrollbars: {
autoHide: this._config.scrollbarAutoHide,
clickScrolling: true
}
})
}
}
$(window).resize(() => {
fixLoginRegisterHeight() {
const $body = $('body')
const $selector = $(`${SELECTOR_LOGIN_BOX}, ${SELECTOR_REGISTER_BOX}`)
if ($selector.length === 0) {
$body.css('height', 'auto')
$('html').css('height', 'auto')
} else {
const boxHeight = $selector.height()
if ($body.css(this._config.panelAutoHeightMode) !== boxHeight) {
$body.css(this._config.panelAutoHeightMode, boxHeight)
}
}
}
// Private
_init() {
// Activate layout height watcher
this.fixLayoutHeight()
if (this._config.loginRegisterAutoHeight === true) {
this.fixLoginRegisterHeight()
} else if (this._config.loginRegisterAutoHeight === parseInt(this._config.loginRegisterAutoHeight, 10)) {
setInterval(this.fixLoginRegisterHeight, this._config.loginRegisterAutoHeight)
}
$(SELECTOR_SIDEBAR)
.on('collapsed.lte.treeview expanded.lte.treeview', () => {
this.fixLayoutHeight()
})
$('body, html').css('height', 'auto')
}
_max(numbers) {
// Calculate the maximum number in a list
let max = 0
Object.keys(numbers).forEach((key) => {
if (numbers[key] > max) {
max = numbers[key]
}
$(SELECTOR_PUSHMENU_BTN)
.on('collapsed.lte.pushmenu shown.lte.pushmenu', () => {
this.fixLayoutHeight()
})
return max
}
// Static
static _jQueryInterface(config) {
return this.each(function () {
let data = $(this).data(DATA_KEY)
const _config = $.extend({}, Default, $(this).data())
if (!data) {
data = new Layout($(this), _config)
$(this).data(DATA_KEY, data)
}
if (config === 'init') {
data[config]()
}
$(SELECTOR_CONTROL_SIDEBAR_BTN)
.on('collapsed.lte.controlsidebar', () => {
this.fixLayoutHeight()
})
}
.on('expanded.lte.controlsidebar', () => {
this.fixLayoutHeight('control_sidebar')
})
$(window).resize(() => {
this.fixLayoutHeight()
})
$(document).ready(() => {
this.fixLayoutHeight()
})
setTimeout(() => {
$('body.hold-transition').removeClass('hold-transition')
}, 50)
}
/**
* Data API
* ====================================================
*/
_max(numbers) {
// Calculate the maximum number in a list
let max = 0
$(window).on('load', () => {
Layout._jQueryInterface.call($('body'))
})
Object.keys(numbers).forEach(key => {
if (numbers[key] > max) {
max = numbers[key]
}
})
$(Selector.SIDEBAR + ' a').on('focusin', () => {
$(Selector.MAIN_SIDEBAR).addClass(ClassName.SIDEBAR_FOCUSED);
})
$(Selector.SIDEBAR + ' a').on('focusout', () => {
$(Selector.MAIN_SIDEBAR).removeClass(ClassName.SIDEBAR_FOCUSED);
})
/**
* jQuery API
* ====================================================
*/
$.fn[NAME] = Layout._jQueryInterface
$.fn[NAME].Constructor = Layout
$.fn[NAME].noConflict = function () {
$.fn[NAME] = JQUERY_NO_CONFLICT
return Layout._jQueryInterface
return max
}
return Layout
})(jQuery)
_isFooterFixed() {
return $(SELECTOR_FOOTER).css('position') === 'fixed'
}
// Static
static _jQueryInterface(config = '') {
return this.each(function () {
let data = $(this).data(DATA_KEY)
const _options = $.extend({}, Default, $(this).data())
if (!data) {
data = new Layout($(this), _options)
$(this).data(DATA_KEY, data)
}
if (config === 'init' || config === '') {
data._init()
} else if (config === 'fixLayoutHeight' || config === 'fixLoginRegisterHeight') {
data[config]()
}
})
}
}
/**
* Data API
* ====================================================
*/
$(window).on('load', () => {
Layout._jQueryInterface.call($('body'))
})
$(`${SELECTOR_SIDEBAR} a`).on('focusin', () => {
$(SELECTOR_MAIN_SIDEBAR).addClass(CLASS_NAME_SIDEBAR_FOCUSED)
})
$(`${SELECTOR_SIDEBAR} a`).on('focusout', () => {
$(SELECTOR_MAIN_SIDEBAR).removeClass(CLASS_NAME_SIDEBAR_FOCUSED)
})
/**
* jQuery API
* ====================================================
*/
$.fn[NAME] = Layout._jQueryInterface
$.fn[NAME].Constructor = Layout
$.fn[NAME].noConflict = function () {
$.fn[NAME] = JQUERY_NO_CONFLICT
return Layout._jQueryInterface
}
export default Layout

View File

@@ -5,181 +5,223 @@
* --------------------------------------------
*/
const PushMenu = (($) => {
/**
* Constants
* ====================================================
*/
import $ from 'jquery'
const NAME = 'PushMenu'
const DATA_KEY = 'lte.pushmenu'
const EVENT_KEY = `.${DATA_KEY}`
const JQUERY_NO_CONFLICT = $.fn[NAME]
/**
* Constants
* ====================================================
*/
const Event = {
COLLAPSED: `collapsed${EVENT_KEY}`,
SHOWN : `shown${EVENT_KEY}`
const NAME = 'PushMenu'
const DATA_KEY = 'lte.pushmenu'
const EVENT_KEY = `.${DATA_KEY}`
const JQUERY_NO_CONFLICT = $.fn[NAME]
const EVENT_COLLAPSED = `collapsed${EVENT_KEY}`
const EVENT_SHOWN = `shown${EVENT_KEY}`
const SELECTOR_TOGGLE_BUTTON = '[data-widget="pushmenu"]'
const SELECTOR_BODY = 'body'
const SELECTOR_OVERLAY = '#sidebar-overlay'
const SELECTOR_WRAPPER = '.wrapper'
const CLASS_NAME_COLLAPSED = 'sidebar-collapse'
const CLASS_NAME_OPEN = 'sidebar-open'
const CLASS_NAME_IS_OPENING = 'sidebar-is-opening'
const CLASS_NAME_CLOSED = 'sidebar-closed'
const Default = {
autoCollapseSize: 992,
enableRemember: false,
noTransitionAfterReload: true
}
/**
* Class Definition
* ====================================================
*/
class PushMenu {
constructor(element, options) {
this._element = element
this._options = $.extend({}, Default, options)
if ($(SELECTOR_OVERLAY).length === 0) {
this._addOverlay()
}
this._init()
}
const Default = {
autoCollapseSize: false,
screenCollapseSize: 768
}
// Public
const Selector = {
TOGGLE_BUTTON : '[data-widget="pushmenu"]',
SIDEBAR_MINI : '.sidebar-mini',
SIDEBAR_COLLAPSED: '.sidebar-collapse',
BODY : 'body',
OVERLAY : '#sidebar-overlay',
WRAPPER : '.wrapper'
}
expand() {
const $bodySelector = $(SELECTOR_BODY)
const ClassName = {
SIDEBAR_OPEN: 'sidebar-open',
COLLAPSED : 'sidebar-collapse',
OPEN : 'sidebar-open',
SIDEBAR_MINI: 'sidebar-mini'
}
/**
* Class Definition
* ====================================================
*/
class PushMenu {
constructor(element, options) {
this._element = element
this._options = $.extend({}, Default, options)
this._init()
if (!$(Selector.OVERLAY).length) {
this._addOverlay()
if (this._options.autoCollapseSize) {
if ($(window).width() <= this._options.autoCollapseSize) {
$bodySelector.addClass(CLASS_NAME_OPEN)
}
}
// Public
$bodySelector.addClass(CLASS_NAME_IS_OPENING).removeClass(`${CLASS_NAME_COLLAPSED} ${CLASS_NAME_CLOSED}`).delay(50).queue(function () {
$bodySelector.removeClass(CLASS_NAME_IS_OPENING)
$(this).dequeue()
})
show() {
$(Selector.BODY).addClass(ClassName.OPEN).removeClass(ClassName.COLLAPSED)
const shownEvent = $.Event(Event.SHOWN)
$(this._element).trigger(shownEvent)
if (this._options.enableRemember) {
localStorage.setItem(`remember${EVENT_KEY}`, CLASS_NAME_OPEN)
}
collapse() {
$(Selector.BODY).removeClass(ClassName.OPEN).addClass(ClassName.COLLAPSED)
$(this._element).trigger($.Event(EVENT_SHOWN))
}
const collapsedEvent = $.Event(Event.COLLAPSED)
$(this._element).trigger(collapsedEvent)
}
collapse() {
const $bodySelector = $(SELECTOR_BODY)
isShown() {
if ($(window).width() >= this._options.screenCollapseSize) {
return !$(Selector.BODY).hasClass(ClassName.COLLAPSED)
} else {
return $(Selector.BODY).hasClass(ClassName.OPEN)
if (this._options.autoCollapseSize) {
if ($(window).width() <= this._options.autoCollapseSize) {
$bodySelector.removeClass(CLASS_NAME_OPEN).addClass(CLASS_NAME_CLOSED)
}
}
toggle() {
if (this.isShown()) {
$bodySelector.addClass(CLASS_NAME_COLLAPSED)
if (this._options.enableRemember) {
localStorage.setItem(`remember${EVENT_KEY}`, CLASS_NAME_COLLAPSED)
}
$(this._element).trigger($.Event(EVENT_COLLAPSED))
}
toggle() {
if ($(SELECTOR_BODY).hasClass(CLASS_NAME_COLLAPSED)) {
this.expand()
} else {
this.collapse()
}
}
autoCollapse(resize = false) {
if (!this._options.autoCollapseSize) {
return
}
const $bodySelector = $(SELECTOR_BODY)
if ($(window).width() <= this._options.autoCollapseSize) {
if (!$bodySelector.hasClass(CLASS_NAME_OPEN)) {
this.collapse()
}
} else if (resize === true) {
if ($bodySelector.hasClass(CLASS_NAME_OPEN)) {
$bodySelector.removeClass(CLASS_NAME_OPEN)
} else if ($bodySelector.hasClass(CLASS_NAME_CLOSED)) {
this.expand()
}
}
}
remember() {
if (!this._options.enableRemember) {
return
}
const $body = $('body')
const toggleState = localStorage.getItem(`remember${EVENT_KEY}`)
if (toggleState === CLASS_NAME_COLLAPSED) {
if (this._options.noTransitionAfterReload) {
$body.addClass('hold-transition').addClass(CLASS_NAME_COLLAPSED).delay(50).queue(function () {
$(this).removeClass('hold-transition')
$(this).dequeue()
})
} else {
this.show()
$body.addClass(CLASS_NAME_COLLAPSED)
}
}
autoCollapse() {
if (this._options.autoCollapseSize) {
if ($(window).width() <= this._options.autoCollapseSize) {
if (this.isShown()) {
this.toggle()
}
} else {
if (!this.isShown()) {
this.toggle()
}
}
}
}
// Private
_init() {
this.autoCollapse()
$(window).resize(() => {
this.autoCollapse()
})
}
_addOverlay() {
const overlay = $('<div />', {
id: 'sidebar-overlay'
})
overlay.on('click', () => {
this.collapse()
})
$(Selector.WRAPPER).append(overlay)
}
// Static
static _jQueryInterface(operation) {
return this.each(function () {
let data = $(this).data(DATA_KEY)
const _options = $.extend({}, Default, $(this).data())
if (!data) {
data = new PushMenu(this, _options)
$(this).data(DATA_KEY, data)
}
if (operation === 'toggle') {
data[operation]()
}
} else if (this._options.noTransitionAfterReload) {
$body.addClass('hold-transition').removeClass(CLASS_NAME_COLLAPSED).delay(50).queue(function () {
$(this).removeClass('hold-transition')
$(this).dequeue()
})
} else {
$body.removeClass(CLASS_NAME_COLLAPSED)
}
}
/**
* Data API
* ====================================================
*/
// Private
$(document).on('click', Selector.TOGGLE_BUTTON, (event) => {
event.preventDefault()
_init() {
this.remember()
this.autoCollapse()
let button = event.currentTarget
if ($(button).data('widget') !== 'pushmenu') {
button = $(button).closest(Selector.TOGGLE_BUTTON)
}
PushMenu._jQueryInterface.call($(button), 'toggle')
})
$(window).on('load', () => {
PushMenu._jQueryInterface.call($(Selector.TOGGLE_BUTTON))
})
/**
* jQuery API
* ====================================================
*/
$.fn[NAME] = PushMenu._jQueryInterface
$.fn[NAME].Constructor = PushMenu
$.fn[NAME].noConflict = function () {
$.fn[NAME] = JQUERY_NO_CONFLICT
return PushMenu._jQueryInterface
$(window).resize(() => {
this.autoCollapse(true)
})
}
return PushMenu
})(jQuery)
_addOverlay() {
const overlay = $('<div />', {
id: 'sidebar-overlay'
})
overlay.on('click', () => {
this.collapse()
})
$(SELECTOR_WRAPPER).append(overlay)
}
// Static
static _jQueryInterface(operation) {
return this.each(function () {
let data = $(this).data(DATA_KEY)
const _options = $.extend({}, Default, $(this).data())
if (!data) {
data = new PushMenu(this, _options)
$(this).data(DATA_KEY, data)
}
if (typeof operation === 'string' && operation.match(/collapse|expand|toggle/)) {
data[operation]()
}
})
}
}
/**
* Data API
* ====================================================
*/
$(document).on('click', SELECTOR_TOGGLE_BUTTON, event => {
event.preventDefault()
let button = event.currentTarget
if ($(button).data('widget') !== 'pushmenu') {
button = $(button).closest(SELECTOR_TOGGLE_BUTTON)
}
PushMenu._jQueryInterface.call($(button), 'toggle')
})
$(window).on('load', () => {
PushMenu._jQueryInterface.call($(SELECTOR_TOGGLE_BUTTON))
})
/**
* jQuery API
* ====================================================
*/
$.fn[NAME] = PushMenu._jQueryInterface
$.fn[NAME].Constructor = PushMenu
$.fn[NAME].noConflict = function () {
$.fn[NAME] = JQUERY_NO_CONFLICT
return PushMenu._jQueryInterface
}
export default PushMenu

293
build/js/SidebarSearch.js Normal file
View File

@@ -0,0 +1,293 @@
/**
* --------------------------------------------
* AdminLTE SidebarSearch.js
* License MIT
* --------------------------------------------
*/
import $, { trim } from 'jquery'
/**
* Constants
* ====================================================
*/
const NAME = 'SidebarSearch'
const DATA_KEY = 'lte.sidebar-search'
const JQUERY_NO_CONFLICT = $.fn[NAME]
const CLASS_NAME_OPEN = 'sidebar-search-open'
const CLASS_NAME_ICON_SEARCH = 'fa-search'
const CLASS_NAME_ICON_CLOSE = 'fa-times'
const CLASS_NAME_HEADER = 'nav-header'
const CLASS_NAME_SEARCH_RESULTS = 'sidebar-search-results'
const CLASS_NAME_LIST_GROUP = 'list-group'
const SELECTOR_DATA_WIDGET = '[data-widget="sidebar-search"]'
const SELECTOR_SIDEBAR = '.main-sidebar .nav-sidebar'
const SELECTOR_NAV_LINK = '.nav-link'
const SELECTOR_NAV_TREEVIEW = '.nav-treeview'
const SELECTOR_SEARCH_INPUT = `${SELECTOR_DATA_WIDGET} .form-control`
const SELECTOR_SEARCH_BUTTON = `${SELECTOR_DATA_WIDGET} .btn`
const SELECTOR_SEARCH_ICON = `${SELECTOR_SEARCH_BUTTON} i`
const SELECTOR_SEARCH_LIST_GROUP = `.${CLASS_NAME_LIST_GROUP}`
const SELECTOR_SEARCH_RESULTS = `.${CLASS_NAME_SEARCH_RESULTS}`
const SELECTOR_SEARCH_RESULTS_GROUP = `${SELECTOR_SEARCH_RESULTS} .${CLASS_NAME_LIST_GROUP}`
const Default = {
arrowSign: '->',
minLength: 3,
maxResults: 7,
highlightName: true,
highlightPath: false,
highlightClass: 'text-light',
notFoundText: 'No element found!'
}
const SearchItems = []
/**
* Class Definition
* ====================================================
*/
class SidebarSearch {
constructor(_element, _options) {
this.element = _element
this.options = $.extend({}, Default, _options)
this.items = []
}
// Public
init() {
if ($(SELECTOR_DATA_WIDGET).length == 0) {
return
}
if ($(SELECTOR_DATA_WIDGET).next(SELECTOR_SEARCH_RESULTS).length == 0) {
$(SELECTOR_DATA_WIDGET).after(
$('<div />', { class: CLASS_NAME_SEARCH_RESULTS })
)
}
if ($(SELECTOR_SEARCH_RESULTS).children(SELECTOR_SEARCH_LIST_GROUP).length == 0) {
$(SELECTOR_SEARCH_RESULTS).append(
$('<div />', { class: CLASS_NAME_LIST_GROUP })
)
}
this._addNotFound()
$(SELECTOR_SIDEBAR).children().each((i, child) => {
this._parseItem(child)
})
}
search() {
const searchValue = $(SELECTOR_SEARCH_INPUT).val().toLowerCase()
if (searchValue.length < this.options.minLength) {
$(SELECTOR_SEARCH_RESULTS_GROUP).empty()
this._addNotFound()
this.close()
return
}
const searchResults = SearchItems.filter(item => (item.name).toLowerCase().includes(searchValue))
const endResults = $(searchResults.slice(0, this.options.maxResults))
$(SELECTOR_SEARCH_RESULTS_GROUP).empty()
if (endResults.length === 0) {
this._addNotFound()
} else {
endResults.each((i, result) => {
$(SELECTOR_SEARCH_RESULTS_GROUP).append(this._renderItem(result.name, result.link, result.path))
})
}
this.open()
}
open() {
$(SELECTOR_DATA_WIDGET).parent().addClass(CLASS_NAME_OPEN)
$(SELECTOR_SEARCH_ICON).removeClass(CLASS_NAME_ICON_SEARCH).addClass(CLASS_NAME_ICON_CLOSE)
}
close() {
$(SELECTOR_DATA_WIDGET).parent().removeClass(CLASS_NAME_OPEN)
$(SELECTOR_SEARCH_ICON).removeClass(CLASS_NAME_ICON_CLOSE).addClass(CLASS_NAME_ICON_SEARCH)
}
toggle() {
if ($(SELECTOR_DATA_WIDGET).parent().hasClass(CLASS_NAME_OPEN)) {
this.close()
} else {
this.open()
}
}
// Private
_parseItem(item, path = []) {
if ($(item).hasClass(CLASS_NAME_HEADER)) {
return
}
const itemObject = {}
const navLink = $(item).clone().find(`> ${SELECTOR_NAV_LINK}`)
const navTreeview = $(item).clone().find(`> ${SELECTOR_NAV_TREEVIEW}`)
const link = navLink.attr('href')
const name = navLink.find('p').children().remove().end().text()
itemObject.name = this._trimText(name)
itemObject.link = link
itemObject.path = path
if (navTreeview.length === 0) {
SearchItems.push(itemObject)
} else {
const newPath = itemObject.path.concat([itemObject.name])
navTreeview.children().each((i, child) => {
this._parseItem(child, newPath)
})
}
}
_trimText(text) {
return trim(text.replace(/(\r\n|\n|\r)/gm, ' '))
}
_renderItem(name, link, path) {
path = path.join(` ${this.options.arrowSign} `)
if (this.options.highlightName || this.options.highlightPath) {
const searchValue = $(SELECTOR_SEARCH_INPUT).val().toLowerCase()
const regExp = new RegExp(searchValue, 'gi')
if (this.options.highlightName) {
name = name.replace(
regExp,
str => {
return `<b class="${this.options.highlightClass}">${str}</b>`
}
)
}
if (this.options.highlightPath) {
path = path.replace(
regExp,
str => {
return `<b class="${this.options.highlightClass}">${str}</b>`
}
)
}
}
return `<a href="${link}" class="list-group-item">
<div class="search-title">
${name}
</div>
<div class="search-path">
${path}
</div>
</a>`
}
_addNotFound() {
$(SELECTOR_SEARCH_RESULTS_GROUP).append(this._renderItem(this.options.notFoundText, '#', []))
}
// Static
static _jQueryInterface(config) {
let data = $(this).data(DATA_KEY)
if (!data) {
data = $(this).data()
}
const _options = $.extend({}, Default, typeof config === 'object' ? config : data)
const plugin = new SidebarSearch($(this), _options)
$(this).data(DATA_KEY, typeof config === 'object' ? config : data)
if (typeof config === 'string' && config.match(/init|toggle|close|open|search/)) {
plugin[config]()
} else {
plugin.init()
}
}
}
/**
* Data API
* ====================================================
*/
$(document).on('click', SELECTOR_SEARCH_BUTTON, event => {
event.preventDefault()
SidebarSearch._jQueryInterface.call($(SELECTOR_DATA_WIDGET), 'toggle')
})
$(document).on('keyup', SELECTOR_SEARCH_INPUT, event => {
if (event.keyCode == 38) {
event.preventDefault()
$(SELECTOR_SEARCH_RESULTS_GROUP).children().last().focus()
return
}
if (event.keyCode == 40) {
event.preventDefault()
$(SELECTOR_SEARCH_RESULTS_GROUP).children().first().focus()
return
}
let timer = 0
clearTimeout(timer)
timer = setTimeout(() => {
SidebarSearch._jQueryInterface.call($(SELECTOR_DATA_WIDGET), 'search')
}, 100)
})
$(document).on('keydown', SELECTOR_SEARCH_RESULTS_GROUP, event => {
const $focused = $(':focus')
if (event.keyCode == 38) {
event.preventDefault()
if ($focused.is(':first-child')) {
$focused.siblings().last().focus()
} else {
$focused.prev().focus()
}
}
if (event.keyCode == 40) {
event.preventDefault()
if ($focused.is(':last-child')) {
$focused.siblings().first().focus()
} else {
$focused.next().focus()
}
}
})
$(window).on('load', () => {
SidebarSearch._jQueryInterface.call($(SELECTOR_DATA_WIDGET), 'init')
})
/**
* jQuery API
* ====================================================
*/
$.fn[NAME] = SidebarSearch._jQueryInterface
$.fn[NAME].Constructor = SidebarSearch
$.fn[NAME].noConflict = function () {
$.fn[NAME] = JQUERY_NO_CONFLICT
return SidebarSearch._jQueryInterface
}
export default SidebarSearch

View File

@@ -5,123 +5,113 @@
* --------------------------------------------
*/
const SiteSearch = (($) => {
/**
* Constants
* ====================================================
*/
import $ from 'jquery'
const NAME = 'SiteSearch'
const DATA_KEY = 'lte.site-search'
const EVENT_KEY = `.${DATA_KEY}`
const JQUERY_NO_CONFLICT = $.fn[NAME]
/**
* Constants
* ====================================================
*/
const Event = {}
const NAME = 'SiteSearch'
const DATA_KEY = 'lte.site-search'
const JQUERY_NO_CONFLICT = $.fn[NAME]
const Selector = {
TOGGLE_BUTTON : '[data-widget="site-search"]',
SEARCH_BLOCK : '.site-search-block',
SEARCH_BACKDROP: '.site-search-backdrop',
SEARCH_INPUT : '.site-search-block .form-control'
const SELECTOR_TOGGLE_BUTTON = '[data-widget="site-search"]'
const SELECTOR_SEARCH_BLOCK = '.site-search-block'
const SELECTOR_SEARCH_BACKDROP = '.site-search-backdrop'
const SELECTOR_SEARCH_INPUT = '.site-search-block .form-control'
const CLASS_NAME_OPEN = 'site-search-open'
const Default = {
transitionSpeed: 300
}
/**
* Class Definition
* ====================================================
*/
class SiteSearch {
constructor(_element, _options) {
this.element = _element
this.options = $.extend({}, Default, _options)
}
const ClassName = {
OPEN: 'site-search-open'
// Public
open() {
$(SELECTOR_SEARCH_BLOCK).slideDown(this.options.transitionSpeed)
$(SELECTOR_SEARCH_BACKDROP).show(0)
$(SELECTOR_SEARCH_INPUT).focus()
$(SELECTOR_SEARCH_BLOCK).addClass(CLASS_NAME_OPEN)
}
const Default = {
transitionSpeed: 300
close() {
$(SELECTOR_SEARCH_BLOCK).slideUp(this.options.transitionSpeed)
$(SELECTOR_SEARCH_BACKDROP).hide(0)
$(SELECTOR_SEARCH_BLOCK).removeClass(CLASS_NAME_OPEN)
}
/**
* Class Definition
* ====================================================
*/
class SiteSearch {
constructor(_element, _options) {
this.element = _element
this.options = $.extend({}, Default, _options)
toggle() {
if ($(SELECTOR_SEARCH_BLOCK).hasClass(CLASS_NAME_OPEN)) {
this.close()
} else {
this.open()
}
}
// Public
// Static
open() {
$(Selector.SEARCH_BLOCK).slideDown(this.options.transitionSpeed)
$(Selector.SEARCH_BACKDROP).show(0)
$(Selector.SEARCH_INPUT).focus()
$(Selector.SEARCH_BLOCK).addClass(ClassName.OPEN)
}
static _jQueryInterface(options) {
return this.each(function () {
let data = $(this).data(DATA_KEY)
close() {
$(Selector.SEARCH_BLOCK).slideUp(this.options.transitionSpeed)
$(Selector.SEARCH_BACKDROP).hide(0)
$(Selector.SEARCH_BLOCK).removeClass(ClassName.OPEN)
}
toggle() {
if ($(Selector.SEARCH_BLOCK).hasClass(ClassName.OPEN)) {
this.close()
} else {
this.open()
if (!data) {
data = new SiteSearch(this, options)
$(this).data(DATA_KEY, data)
}
}
// Static
if (!/toggle|close/.test(options)) {
throw new Error(`Undefined method ${options}`)
}
static _jQueryInterface(options) {
return this.each(function () {
let data = $(this).data(DATA_KEY)
data[options]()
})
}
}
if (!data) {
data = new SiteSearch(this, options)
$(this).data(DATA_KEY, data)
}
/**
* Data API
* ====================================================
*/
$(document).on('click', SELECTOR_TOGGLE_BUTTON, event => {
event.preventDefault()
if (!/toggle|close/.test(options)) {
throw Error(`Undefined method ${options}`)
}
let button = $(event.currentTarget)
data[options]()
})
}
if (button.data('widget') !== 'site-search') {
button = button.closest(SELECTOR_TOGGLE_BUTTON)
}
/**
* Data API
* ====================================================
*/
$(document).on('click', Selector.TOGGLE_BUTTON, (event) => {
event.preventDefault()
SiteSearch._jQueryInterface.call(button, 'toggle')
})
let button = $(event.currentTarget)
$(document).on('click', SELECTOR_SEARCH_BACKDROP, event => {
const backdrop = $(event.currentTarget)
SiteSearch._jQueryInterface.call(backdrop, 'close')
})
if (button.data('widget') !== 'site-search') {
button = button.closest(Selector.TOGGLE_BUTTON)
}
/**
* jQuery API
* ====================================================
*/
SiteSearch._jQueryInterface.call(button, 'toggle')
})
$(document).on('click', Selector.SEARCH_BACKDROP, (event) => {
const backdrop = $(event.currentTarget)
SiteSearch._jQueryInterface.call(backdrop, 'close')
})
/**
* jQuery API
* ====================================================
*/
$.fn[NAME] = SiteSearch._jQueryInterface
$.fn[NAME].Constructor = SiteSearch
$.fn[NAME].noConflict = function () {
$.fn[NAME] = JQUERY_NO_CONFLICT
return SiteSearch._jQueryInterface
}
return SiteSearch
})(jQuery)
$.fn[NAME] = SiteSearch._jQueryInterface
$.fn[NAME].Constructor = SiteSearch
$.fn[NAME].noConflict = function () {
$.fn[NAME] = JQUERY_NO_CONFLICT
return SiteSearch._jQueryInterface
}
export default SiteSearch

209
build/js/Toasts.js Normal file
View File

@@ -0,0 +1,209 @@
/**
* --------------------------------------------
* AdminLTE Toasts.js
* License MIT
* --------------------------------------------
*/
import $ from 'jquery'
/**
* Constants
* ====================================================
*/
const NAME = 'Toasts'
const DATA_KEY = 'lte.toasts'
const EVENT_KEY = `.${DATA_KEY}`
const JQUERY_NO_CONFLICT = $.fn[NAME]
const EVENT_INIT = `init${EVENT_KEY}`
const EVENT_CREATED = `created${EVENT_KEY}`
const EVENT_REMOVED = `removed${EVENT_KEY}`
const SELECTOR_CONTAINER_TOP_RIGHT = '#toastsContainerTopRight'
const SELECTOR_CONTAINER_TOP_LEFT = '#toastsContainerTopLeft'
const SELECTOR_CONTAINER_BOTTOM_RIGHT = '#toastsContainerBottomRight'
const SELECTOR_CONTAINER_BOTTOM_LEFT = '#toastsContainerBottomLeft'
const CLASS_NAME_TOP_RIGHT = 'toasts-top-right'
const CLASS_NAME_TOP_LEFT = 'toasts-top-left'
const CLASS_NAME_BOTTOM_RIGHT = 'toasts-bottom-right'
const CLASS_NAME_BOTTOM_LEFT = 'toasts-bottom-left'
const POSITION_TOP_RIGHT = 'topRight'
const POSITION_TOP_LEFT = 'topLeft'
const POSITION_BOTTOM_RIGHT = 'bottomRight'
const POSITION_BOTTOM_LEFT = 'bottomLeft'
const Default = {
position: POSITION_TOP_RIGHT,
fixed: true,
autohide: false,
autoremove: true,
delay: 1000,
fade: true,
icon: null,
image: null,
imageAlt: null,
imageHeight: '25px',
title: null,
subtitle: null,
close: true,
body: null,
class: null
}
/**
* Class Definition
* ====================================================
*/
class Toasts {
constructor(element, config) {
this._config = config
this._prepareContainer()
$('body').trigger($.Event(EVENT_INIT))
}
// Public
create() {
const toast = $('<div class="toast" role="alert" aria-live="assertive" aria-atomic="true"/>')
toast.data('autohide', this._config.autohide)
toast.data('animation', this._config.fade)
if (this._config.class) {
toast.addClass(this._config.class)
}
if (this._config.delay && this._config.delay != 500) {
toast.data('delay', this._config.delay)
}
const toastHeader = $('<div class="toast-header">')
if (this._config.image != null) {
const toastImage = $('<img />').addClass('rounded mr-2').attr('src', this._config.image).attr('alt', this._config.imageAlt)
if (this._config.imageHeight != null) {
toastImage.height(this._config.imageHeight).width('auto')
}
toastHeader.append(toastImage)
}
if (this._config.icon != null) {
toastHeader.append($('<i />').addClass('mr-2').addClass(this._config.icon))
}
if (this._config.title != null) {
toastHeader.append($('<strong />').addClass('mr-auto').html(this._config.title))
}
if (this._config.subtitle != null) {
toastHeader.append($('<small />').html(this._config.subtitle))
}
if (this._config.close == true) {
const toastClose = $('<button data-dismiss="toast" />').attr('type', 'button').addClass('ml-2 mb-1 close').attr('aria-label', 'Close').append('<span aria-hidden="true">&times;</span>')
if (this._config.title == null) {
toastClose.toggleClass('ml-2 ml-auto')
}
toastHeader.append(toastClose)
}
toast.append(toastHeader)
if (this._config.body != null) {
toast.append($('<div class="toast-body" />').html(this._config.body))
}
$(this._getContainerId()).prepend(toast)
const $body = $('body')
$body.trigger($.Event(EVENT_CREATED))
toast.toast('show')
if (this._config.autoremove) {
toast.on('hidden.bs.toast', function () {
$(this).delay(200).remove()
$body.trigger($.Event(EVENT_REMOVED))
})
}
}
// Static
_getContainerId() {
if (this._config.position == POSITION_TOP_RIGHT) {
return SELECTOR_CONTAINER_TOP_RIGHT
}
if (this._config.position == POSITION_TOP_LEFT) {
return SELECTOR_CONTAINER_TOP_LEFT
}
if (this._config.position == POSITION_BOTTOM_RIGHT) {
return SELECTOR_CONTAINER_BOTTOM_RIGHT
}
if (this._config.position == POSITION_BOTTOM_LEFT) {
return SELECTOR_CONTAINER_BOTTOM_LEFT
}
}
_prepareContainer() {
if ($(this._getContainerId()).length === 0) {
const container = $('<div />').attr('id', this._getContainerId().replace('#', ''))
if (this._config.position == POSITION_TOP_RIGHT) {
container.addClass(CLASS_NAME_TOP_RIGHT)
} else if (this._config.position == POSITION_TOP_LEFT) {
container.addClass(CLASS_NAME_TOP_LEFT)
} else if (this._config.position == POSITION_BOTTOM_RIGHT) {
container.addClass(CLASS_NAME_BOTTOM_RIGHT)
} else if (this._config.position == POSITION_BOTTOM_LEFT) {
container.addClass(CLASS_NAME_BOTTOM_LEFT)
}
$('body').append(container)
}
if (this._config.fixed) {
$(this._getContainerId()).addClass('fixed')
} else {
$(this._getContainerId()).removeClass('fixed')
}
}
// Static
static _jQueryInterface(option, config) {
return this.each(function () {
const _options = $.extend({}, Default, config)
const toast = new Toasts($(this), _options)
if (option === 'create') {
toast[option]()
}
})
}
}
/**
* jQuery API
* ====================================================
*/
$.fn[NAME] = Toasts._jQueryInterface
$.fn[NAME].Constructor = Toasts
$.fn[NAME].noConflict = function () {
$.fn[NAME] = JQUERY_NO_CONFLICT
return Toasts._jQueryInterface
}
export default Toasts

View File

@@ -5,118 +5,114 @@
* --------------------------------------------
*/
const TodoList = (($) => {
/**
* Constants
* ====================================================
*/
import $ from 'jquery'
const NAME = 'TodoList'
const DATA_KEY = 'lte.todolist'
const EVENT_KEY = `.${DATA_KEY}`
const JQUERY_NO_CONFLICT = $.fn[NAME]
/**
* Constants
* ====================================================
*/
const Selector = {
DATA_TOGGLE: '[data-widget="todo-list"]'
const NAME = 'TodoList'
const DATA_KEY = 'lte.todolist'
const JQUERY_NO_CONFLICT = $.fn[NAME]
const SELECTOR_DATA_TOGGLE = '[data-widget="todo-list"]'
const CLASS_NAME_TODO_LIST_DONE = 'done'
const Default = {
onCheck(item) {
return item
},
onUnCheck(item) {
return item
}
}
/**
* Class Definition
* ====================================================
*/
class TodoList {
constructor(element, config) {
this._config = config
this._element = element
this._init()
}
const ClassName = {
TODO_LIST_DONE: 'done'
}
// Public
const Default = {
onCheck: function (item) {
return item;
},
onUnCheck: function (item) {
return item;
}
}
/**
* Class Definition
* ====================================================
*/
class TodoList {
constructor(element, config) {
this._config = config
this._element = element
this._init()
toggle(item) {
item.parents('li').toggleClass(CLASS_NAME_TODO_LIST_DONE)
if (!$(item).prop('checked')) {
this.unCheck($(item))
return
}
// Public
this.check(item)
}
toggle(item) {
item.parents('li').toggleClass(ClassName.TODO_LIST_DONE);
if (! $(item).prop('checked')) {
this.unCheck($(item));
return;
check(item) {
this._config.onCheck.call(item)
}
unCheck(item) {
this._config.onUnCheck.call(item)
}
// Private
_init() {
const $toggleSelector = this._element
$toggleSelector.find('input:checkbox:checked').parents('li').toggleClass(CLASS_NAME_TODO_LIST_DONE)
$toggleSelector.on('change', 'input:checkbox', event => {
this.toggle($(event.target))
})
}
// Static
static _jQueryInterface(config) {
return this.each(function () {
let data = $(this).data(DATA_KEY)
if (!data) {
data = $(this).data()
}
this.check(item);
}
const _options = $.extend({}, Default, typeof config === 'object' ? config : data)
const plugin = new TodoList($(this), _options)
check (item) {
this._config.onCheck.call(item);
}
$(this).data(DATA_KEY, typeof config === 'object' ? config : data)
unCheck (item) {
this._config.onUnCheck.call(item);
}
// Private
_init() {
var that = this
$(Selector.DATA_TOGGLE).find('input:checkbox:checked').parents('li').toggleClass(ClassName.TODO_LIST_DONE)
$(Selector.DATA_TOGGLE).on('change', 'input:checkbox', (event) => {
that.toggle($(event.target))
})
}
// Static
static _jQueryInterface(config) {
return this.each(function () {
let data = $(this).data(DATA_KEY)
const _config = $.extend({}, Default, $(this).data())
if (!data) {
data = new TodoList($(this), _config)
$(this).data(DATA_KEY, data)
}
if (config === 'init') {
data[config]()
}
})
}
if (config === 'init') {
plugin[config]()
}
})
}
}
/**
* Data API
* ====================================================
*/
/**
* Data API
* ====================================================
*/
$(window).on('load', () => {
TodoList._jQueryInterface.call($(Selector.DATA_TOGGLE))
})
$(window).on('load', () => {
TodoList._jQueryInterface.call($(SELECTOR_DATA_TOGGLE))
})
/**
* jQuery API
* ====================================================
*/
/**
* jQuery API
* ====================================================
*/
$.fn[NAME] = TodoList._jQueryInterface
$.fn[NAME].Constructor = TodoList
$.fn[NAME].noConflict = function () {
$.fn[NAME] = JQUERY_NO_CONFLICT
return TodoList._jQueryInterface
}
return TodoList
})(jQuery)
$.fn[NAME] = TodoList._jQueryInterface
$.fn[NAME].Constructor = TodoList
$.fn[NAME].noConflict = function () {
$.fn[NAME] = JQUERY_NO_CONFLICT
return TodoList._jQueryInterface
}
export default TodoList

View File

@@ -5,158 +5,171 @@
* --------------------------------------------
*/
const Treeview = (($) => {
/**
* Constants
* ====================================================
*/
import $ from 'jquery'
const NAME = 'Treeview'
const DATA_KEY = 'lte.treeview'
const EVENT_KEY = `.${DATA_KEY}`
const JQUERY_NO_CONFLICT = $.fn[NAME]
/**
* Constants
* ====================================================
*/
const Event = {
SELECTED : `selected${EVENT_KEY}`,
EXPANDED : `expanded${EVENT_KEY}`,
COLLAPSED : `collapsed${EVENT_KEY}`,
LOAD_DATA_API: `load${EVENT_KEY}`
const NAME = 'Treeview'
const DATA_KEY = 'lte.treeview'
const EVENT_KEY = `.${DATA_KEY}`
const JQUERY_NO_CONFLICT = $.fn[NAME]
const EVENT_EXPANDED = `expanded${EVENT_KEY}`
const EVENT_COLLAPSED = `collapsed${EVENT_KEY}`
const EVENT_LOAD_DATA_API = `load${EVENT_KEY}`
const SELECTOR_LI = '.nav-item'
const SELECTOR_LINK = '.nav-link'
const SELECTOR_TREEVIEW_MENU = '.nav-treeview'
const SELECTOR_OPEN = '.menu-open'
const SELECTOR_DATA_WIDGET = '[data-widget="treeview"]'
const CLASS_NAME_OPEN = 'menu-open'
const CLASS_NAME_IS_OPENING = 'menu-is-opening'
const CLASS_NAME_SIDEBAR_COLLAPSED = 'sidebar-collapse'
const Default = {
trigger: `${SELECTOR_DATA_WIDGET} ${SELECTOR_LINK}`,
animationSpeed: 300,
accordion: true,
expandSidebar: false,
sidebarButtonSelector: '[data-widget="pushmenu"]'
}
/**
* Class Definition
* ====================================================
*/
class Treeview {
constructor(element, config) {
this._config = config
this._element = element
}
const Selector = {
LI : '.nav-item',
LINK : '.nav-link',
TREEVIEW_MENU: '.nav-treeview',
OPEN : '.menu-open',
DATA_WIDGET : '[data-widget="treeview"]'
// Public
init() {
$(`${SELECTOR_LI}${SELECTOR_OPEN} ${SELECTOR_TREEVIEW_MENU}`).css('display', 'block')
this._setupListeners()
}
const ClassName = {
LI : 'nav-item',
LINK : 'nav-link',
TREEVIEW_MENU: 'nav-treeview',
OPEN : 'menu-open'
}
expand(treeviewMenu, parentLi) {
const expandedEvent = $.Event(EVENT_EXPANDED)
const Default = {
trigger : `${Selector.DATA_WIDGET} ${Selector.LINK}`,
animationSpeed: 300,
accordion : true
}
/**
* Class Definition
* ====================================================
*/
class Treeview {
constructor(element, config) {
this._config = config
this._element = element
if (this._config.accordion) {
const openMenuLi = parentLi.siblings(SELECTOR_OPEN).first()
const openTreeview = openMenuLi.find(SELECTOR_TREEVIEW_MENU).first()
this.collapse(openTreeview, openMenuLi)
}
// Public
parentLi.addClass(CLASS_NAME_IS_OPENING)
treeviewMenu.stop().slideDown(this._config.animationSpeed, () => {
parentLi.addClass(CLASS_NAME_OPEN)
$(this._element).trigger(expandedEvent)
})
init() {
this._setupListeners()
if (this._config.expandSidebar) {
this._expandSidebar()
}
}
expand(treeviewMenu, parentLi) {
const expandedEvent = $.Event(Event.EXPANDED)
collapse(treeviewMenu, parentLi) {
const collapsedEvent = $.Event(EVENT_COLLAPSED)
if (this._config.accordion) {
const openMenuLi = parentLi.siblings(Selector.OPEN).first()
const openTreeview = openMenuLi.find(Selector.TREEVIEW_MENU).first()
this.collapse(openTreeview, openMenuLi)
parentLi.removeClass(`${CLASS_NAME_IS_OPENING} ${CLASS_NAME_OPEN}`)
treeviewMenu.stop().slideUp(this._config.animationSpeed, () => {
$(this._element).trigger(collapsedEvent)
treeviewMenu.find(`${SELECTOR_OPEN} > ${SELECTOR_TREEVIEW_MENU}`).slideUp()
treeviewMenu.find(SELECTOR_OPEN).removeClass(CLASS_NAME_OPEN)
})
}
toggle(event) {
const $relativeTarget = $(event.currentTarget)
const $parent = $relativeTarget.parent()
let treeviewMenu = $parent.find(`> ${SELECTOR_TREEVIEW_MENU}`)
if (!treeviewMenu.is(SELECTOR_TREEVIEW_MENU)) {
if (!$parent.is(SELECTOR_LI)) {
treeviewMenu = $parent.parent().find(`> ${SELECTOR_TREEVIEW_MENU}`)
}
treeviewMenu.slideDown(this._config.animationSpeed, () => {
parentLi.addClass(ClassName.OPEN)
$(this._element).trigger(expandedEvent)
})
}
collapse(treeviewMenu, parentLi) {
const collapsedEvent = $.Event(Event.COLLAPSED)
treeviewMenu.slideUp(this._config.animationSpeed, () => {
parentLi.removeClass(ClassName.OPEN)
$(this._element).trigger(collapsedEvent)
treeviewMenu.find(`${Selector.OPEN} > ${Selector.TREEVIEW_MENU}`).slideUp()
treeviewMenu.find(Selector.OPEN).removeClass(ClassName.OPEN)
})
}
toggle(event) {
const $relativeTarget = $(event.currentTarget)
const treeviewMenu = $relativeTarget.next()
if (!treeviewMenu.is(Selector.TREEVIEW_MENU)) {
if (!treeviewMenu.is(SELECTOR_TREEVIEW_MENU)) {
return
}
event.preventDefault()
const parentLi = $relativeTarget.parents(Selector.LI).first()
const isOpen = parentLi.hasClass(ClassName.OPEN)
if (isOpen) {
this.collapse($(treeviewMenu), parentLi)
} else {
this.expand($(treeviewMenu), parentLi)
}
}
// Private
event.preventDefault()
_setupListeners() {
$(document).on('click', this._config.trigger, (event) => {
this.toggle(event)
})
}
const parentLi = $relativeTarget.parents(SELECTOR_LI).first()
const isOpen = parentLi.hasClass(CLASS_NAME_OPEN)
// Static
static _jQueryInterface(config) {
return this.each(function () {
let data = $(this).data(DATA_KEY)
const _config = $.extend({}, Default, $(this).data())
if (!data) {
data = new Treeview($(this), _config)
$(this).data(DATA_KEY, data)
}
if (config === 'init') {
data[config]()
}
})
if (isOpen) {
this.collapse($(treeviewMenu), parentLi)
} else {
this.expand($(treeviewMenu), parentLi)
}
}
/**
* Data API
* ====================================================
*/
// Private
$(window).on(Event.LOAD_DATA_API, () => {
$(Selector.DATA_WIDGET).each(function () {
Treeview._jQueryInterface.call($(this), 'init')
_setupListeners() {
const elementId = this._element.attr('id') !== undefined ? `#${this._element.attr('id')}` : ''
$(document).on('click', `${elementId}${this._config.trigger}`, event => {
this.toggle(event)
})
})
/**
* jQuery API
* ====================================================
*/
$.fn[NAME] = Treeview._jQueryInterface
$.fn[NAME].Constructor = Treeview
$.fn[NAME].noConflict = function () {
$.fn[NAME] = JQUERY_NO_CONFLICT
return Treeview._jQueryInterface
}
return Treeview
})(jQuery)
_expandSidebar() {
if ($('body').hasClass(CLASS_NAME_SIDEBAR_COLLAPSED)) {
$(this._config.sidebarButtonSelector).PushMenu('expand')
}
}
export default Treeview
// Static
static _jQueryInterface(config) {
return this.each(function () {
let data = $(this).data(DATA_KEY)
const _options = $.extend({}, Default, $(this).data())
if (!data) {
data = new Treeview($(this), _options)
$(this).data(DATA_KEY, data)
}
if (config === 'init') {
data[config]()
}
})
}
}
/**
* Data API
* ====================================================
*/
$(window).on(EVENT_LOAD_DATA_API, () => {
$(SELECTOR_DATA_WIDGET).each(function () {
Treeview._jQueryInterface.call($(this), 'init')
})
})
/**
* jQuery API
* ====================================================
*/
$.fn[NAME] = Treeview._jQueryInterface
$.fn[NAME].Constructor = Treeview
$.fn[NAME].noConflict = function () {
$.fn[NAME] = JQUERY_NO_CONFLICT
return Treeview._jQueryInterface
}
export default Treeview

View File

@@ -1,226 +0,0 @@
/**
* --------------------------------------------
* AdminLTE Widget.js
* License MIT
* --------------------------------------------
*/
const Widget = (($) => {
/**
* Constants
* ====================================================
*/
const NAME = 'Widget'
const DATA_KEY = 'lte.widget'
const EVENT_KEY = `.${DATA_KEY}`
const JQUERY_NO_CONFLICT = $.fn[NAME]
const Event = {
EXPANDED : `expanded${EVENT_KEY}`,
COLLAPSED: `collapsed${EVENT_KEY}`,
MAXIMIZED: `maximized${EVENT_KEY}`,
MINIMIZED: `minimized${EVENT_KEY}`,
REMOVED : `removed${EVENT_KEY}`
}
const Selector = {
DATA_REMOVE : '[data-widget="remove"]',
DATA_COLLAPSE : '[data-widget="collapse"]',
DATA_MAXIMIZE : '[data-widget="maximize"]',
CARD : '.card',
CARD_HEADER : '.card-header',
CARD_BODY : '.card-body',
CARD_FOOTER : '.card-footer',
COLLAPSED : '.collapsed-card',
COLLAPSE_ICON : '.fa-minus',
EXPAND_ICON : '.fa-plus'
}
const ClassName = {
COLLAPSED : 'collapsed-card',
WAS_COLLAPSED : 'was-collapsed',
MAXIMIZED : 'maximized-card',
COLLAPSE_ICON : 'fa-minus',
EXPAND_ICON : 'fa-plus',
MAXIMIZE_ICON : 'fa-expand',
MINIMIZE_ICON : 'fa-compress',
}
const Default = {
animationSpeed : 'normal',
collapseTrigger: Selector.DATA_COLLAPSE,
removeTrigger : Selector.DATA_REMOVE
}
class Widget {
constructor(element, settings) {
this._element = element
this._parent = element.parents(Selector.CARD).first()
this._settings = $.extend({}, Default, settings)
}
collapse() {
this._parent.children(`${Selector.CARD_BODY}, ${Selector.CARD_FOOTER}`)
.slideUp(this._settings.animationSpeed, () => {
this._parent.addClass(ClassName.COLLAPSED)
})
this._element.children(Selector.COLLAPSE_ICON)
.addClass(ClassName.EXPAND_ICON)
.removeClass(ClassName.COLLAPSE_ICON)
const collapsed = $.Event(Event.COLLAPSED)
this._element.trigger(collapsed, this._parent)
}
expand() {
this._parent.children(`${Selector.CARD_BODY}, ${Selector.CARD_FOOTER}`)
.slideDown(this._settings.animationSpeed, () => {
this._parent.removeClass(ClassName.COLLAPSED)
})
this._element.children(Selector.EXPAND_ICON)
.addClass(ClassName.COLLAPSE_ICON)
.removeClass(ClassName.EXPAND_ICON)
const expanded = $.Event(Event.EXPANDED)
this._element.trigger(expanded, this._parent)
}
remove() {
this._parent.slideUp()
const removed = $.Event(Event.REMOVED)
this._element.trigger(removed, this._parent)
}
toggle() {
if (this._parent.hasClass(ClassName.COLLAPSED)) {
this.expand()
return
}
this.collapse()
}
toggleMaximize() {
var button = this._element.find('i')
if (this._parent.hasClass(ClassName.MAXIMIZED)) {
button.addClass(ClassName.MAXIMIZE_ICON).removeClass(ClassName.MINIMIZE_ICON)
this._parent.css('cssText', 'height:' + this._parent[0].style.height + ' !important;' +
'width:' + this._parent[0].style.width + ' !important; transition: all .15s;'
).delay(100).queue(function(){
$(this).removeClass(ClassName.MAXIMIZED)
$('html').removeClass(ClassName.MAXIMIZED)
$(this).trigger(Event.MINIMIZED)
$(this).css({
'height': 'inherit',
'width': 'inherit'
})
if ($(this).hasClass(ClassName.WAS_COLLAPSED)) {
$(this).removeClass(ClassName.WAS_COLLAPSED)
}
$(this).dequeue()
})
} else {
button.addClass(ClassName.MINIMIZE_ICON).removeClass(ClassName.MAXIMIZE_ICON)
this._parent.css({
'height': this._parent.height(),
'width': this._parent.width(),
'transition': 'all .15s'
}).delay(150).queue(function(){
$(this).addClass(ClassName.MAXIMIZED)
$('html').addClass(ClassName.MAXIMIZED)
$(this).trigger(Event.MAXIMIZED)
if ($(this).hasClass(ClassName.COLLAPSED)) {
$(this).addClass(ClassName.WAS_COLLAPSED)
}
$(this).dequeue()
})
}
}
// Private
_init(card) {
this._parent = card
$(this).find(this._settings.collapseTrigger).click(() => {
this.toggle()
})
$(this).find(this._settings.removeTrigger).click(() => {
this.remove()
})
}
// Static
static _jQueryInterface(config) {
return this.each(function () {
let data = $(this).data(DATA_KEY)
if (!data) {
data = new Widget($(this), data)
$(this).data(DATA_KEY, typeof config === 'string' ? data : config)
}
if (typeof config === 'string' && config.match(/collapse|expand|remove|toggle|toggleMaximize/)) {
data[config]()
} else if (typeof config === 'object') {
data._init($(this))
}
})
}
}
/**
* Data API
* ====================================================
*/
$(document).on('click', Selector.DATA_COLLAPSE, function (event) {
if (event) {
event.preventDefault()
}
Widget._jQueryInterface.call($(this), 'toggle')
})
$(document).on('click', Selector.DATA_REMOVE, function (event) {
if (event) {
event.preventDefault()
}
Widget._jQueryInterface.call($(this), 'remove')
})
$(document).on('click', Selector.DATA_MAXIMIZE, function (event) {
if (event) {
event.preventDefault()
}
Widget._jQueryInterface.call($(this), 'toggleMaximize')
})
/**
* jQuery API
* ====================================================
*/
$.fn[NAME] = Widget._jQueryInterface
$.fn[NAME].Constructor = Widget
$.fn[NAME].noConflict = function () {
$.fn[NAME] = JQUERY_NO_CONFLICT
return Widget._jQueryInterface
}
return Widget
})(jQuery)
export default Widget

14
build/npm/.eslintrc.json Normal file
View File

@@ -0,0 +1,14 @@
{
"env": {
"browser": false,
"node": true
},
"parserOptions": {
"sourceType": "script"
},
"extends": "../../.eslintrc.json",
"rules": {
"no-console": "off",
"strict": "error"
}
}

48
build/npm/DocsPlugins.js Normal file
View File

@@ -0,0 +1,48 @@
'use strict'
const Plugins = [
// AdminLTE Dist
{
from: 'dist/css/',
to: 'docs/assets/css/'
},
{
from: 'dist/js/',
to: 'docs/assets/js/'
},
// jQuery
{
from: 'node_modules/jquery/dist/',
to: 'docs/assets/plugins/jquery/'
},
// Popper
{
from: 'node_modules/popper.js/dist/',
to: 'docs/assets/plugins/popper/'
},
// Bootstrap
{
from: 'node_modules/bootstrap/dist/js/',
to: 'docs/assets/plugins/bootstrap/js/'
},
// Font Awesome
{
from: 'node_modules/@fortawesome/fontawesome-free/css/',
to: 'docs/assets/plugins/fontawesome-free/css/'
},
{
from: 'node_modules/@fortawesome/fontawesome-free/webfonts/',
to: 'docs/assets/plugins/fontawesome-free/webfonts/'
},
// overlayScrollbars
{
from: 'node_modules/overlayscrollbars/js/',
to: 'docs/assets/plugins/overlayScrollbars/js/'
},
{
from: 'node_modules/overlayscrollbars/css/',
to: 'docs/assets/plugins/overlayScrollbars/css/'
}
]
module.exports = Plugins

53
build/npm/DocsPublish.js Normal file
View File

@@ -0,0 +1,53 @@
#!/usr/bin/env node
'use strict'
const path = require('path')
const fse = require('fs-extra')
const Plugins = require('./DocsPlugins')
class Publish {
constructor() {
this.options = {
verbose: false
}
this.getArguments()
}
getArguments() {
if (process.argv.length > 2) {
const arg = process.argv[2]
switch (arg) {
case '-v':
case '--verbose':
this.options.verbose = true
break
default:
throw new Error(`Unknown option ${arg}`)
}
}
}
run() {
// Publish files
Plugins.forEach(module => {
try {
fse.copySync(module.from, module.to, {
// Skip copying dot files
filter(src) {
return !path.basename(src).startsWith('.')
}
})
if (this.options.verbose) {
console.log(`Copied ${module.from} to ${module.to}`)
}
} catch (error) {
console.error(`Error: ${error}`)
}
})
}
}
(new Publish()).run()

View File

@@ -1,201 +1,352 @@
'use strict'
const Plugins = [
// jQuery
{
from: 'node_modules/jquery/dist',
to : 'plugins/jquery'
to: 'plugins/jquery'
},
// Popper
{
from: 'node_modules/popper.js/dist',
to : 'plugins/popper'
to: 'plugins/popper'
},
// Bootstrap
{
from: 'node_modules/bootstrap/dist/js',
to : 'plugins/bootstrap/js'
to: 'plugins/bootstrap/js'
},
// Font Awesome
{
from: 'node_modules/@fortawesome/fontawesome-free/css',
to : 'plugins/fontawesome-free/css'
to: 'plugins/fontawesome-free/css'
},
{
from: 'node_modules/@fortawesome/fontawesome-free/webfonts',
to : 'plugins/fontawesome-free/webfonts'
to: 'plugins/fontawesome-free/webfonts'
},
// overlayScrollbars
{
from: 'node_modules/overlayscrollbars/js',
to : 'plugins/overlayScrollbars/js'
to: 'plugins/overlayScrollbars/js'
},
{
from: 'node_modules/overlayscrollbars/css',
to : 'plugins/overlayScrollbars/css'
to: 'plugins/overlayScrollbars/css'
},
// Chart.js
{
from: 'node_modules/chart.js/dist/',
to : 'plugins/chart.js'
to: 'plugins/chart.js'
},
// jQuery UI
{
from: 'node_modules/jquery-ui-dist/',
to : 'plugins/jquery-ui'
to: 'plugins/jquery-ui'
},
// Flot
{
from: 'node_modules/flot/dist/es5/',
to : 'plugins/flot'
to: 'plugins/flot'
},
{
from: 'node_modules/flot/source/',
to: 'plugins/flot/plugins'
},
// Summernote
{
from: 'node_modules/summernote/dist/',
to : 'plugins/summernote'
to: 'plugins/summernote'
},
// Bootstrap Slider
{
from: 'node_modules/bootstrap-slider/dist/',
to : 'plugins/bootstrap-slider'
to: 'plugins/bootstrap-slider'
},
{
from: 'node_modules/bootstrap-slider/dist/css',
to : 'plugins/bootstrap-slider/css'
to: 'plugins/bootstrap-slider/css'
},
// Bootstrap Colorpicker
{
from: 'node_modules/bootstrap-colorpicker/dist/js',
to : 'plugins/bootstrap-colorpicker/js'
to: 'plugins/bootstrap-colorpicker/js'
},
{
from: 'node_modules/bootstrap-colorpicker/dist/css',
to : 'plugins/bootstrap-colorpicker/css'
to: 'plugins/bootstrap-colorpicker/css'
},
// Tempusdominus Bootstrap 4
{
from: 'node_modules/tempusdominus-bootstrap-4/build/js',
to : 'plugins/tempusdominus-bootstrap-4/js'
to: 'plugins/tempusdominus-bootstrap-4/js'
},
{
from: 'node_modules/tempusdominus-bootstrap-4/build/css',
to : 'plugins/tempusdominus-bootstrap-4/css'
to: 'plugins/tempusdominus-bootstrap-4/css'
},
// Moment
{
from: 'node_modules/moment/min',
to : 'plugins/moment'
to: 'plugins/moment'
},
{
from: 'node_modules/moment/locale',
to : 'plugins/moment/locale'
to: 'plugins/moment/locale'
},
// FastClick
{
from: 'node_modules/fastclick/lib',
to : 'plugins/fastclick'
to: 'plugins/fastclick'
},
// Date Range Picker
{
from: 'node_modules/daterangepicker/',
to : 'plugins/daterangepicker'
to: 'plugins/daterangepicker'
},
// DataTables
{
from: 'node_modules/pdfmake/build',
to: 'plugins/pdfmake'
},
{
from: 'node_modules/jszip/dist',
to: 'plugins/jszip'
},
{
from: 'node_modules/datatables.net/js',
to: 'plugins/datatables'
},
{
from: 'node_modules/datatables.net-bs4/js',
to: 'plugins/datatables'
to: 'plugins/datatables-bs4/js'
},
{
from: 'node_modules/datatables.net-bs4/css',
to: 'plugins/datatables'
to: 'plugins/datatables-bs4/css'
},
{
from: 'node_modules/datatables.net-autofill/js',
to: 'plugins/datatables-autofill/js'
},
{
from: 'node_modules/datatables.net-autofill-bs4/js',
to: 'plugins/datatables-autofill/js'
},
{
from: 'node_modules/datatables.net-autofill-bs4/css',
to: 'plugins/datatables-autofill/css'
},
{
from: 'node_modules/datatables.net-buttons/js',
to: 'plugins/datatables-buttons/js'
},
{
from: 'node_modules/datatables.net-buttons-bs4/js',
to: 'plugins/datatables-buttons/js'
},
{
from: 'node_modules/datatables.net-buttons-bs4/css',
to: 'plugins/datatables-buttons/css'
},
{
from: 'node_modules/datatables.net-colreorder/js',
to: 'plugins/datatables-colreorder/js'
},
{
from: 'node_modules/datatables.net-colreorder-bs4/js',
to: 'plugins/datatables-colreorder/js'
},
{
from: 'node_modules/datatables.net-colreorder-bs4/css',
to: 'plugins/datatables-colreorder/css'
},
{
from: 'node_modules/datatables.net-fixedcolumns/js',
to: 'plugins/datatables-fixedcolumns/js'
},
{
from: 'node_modules/datatables.net-fixedcolumns-bs4/js',
to: 'plugins/datatables-fixedcolumns/js'
},
{
from: 'node_modules/datatables.net-fixedcolumns-bs4/css',
to: 'plugins/datatables-fixedcolumns/css'
},
{
from: 'node_modules/datatables.net-fixedheader/js',
to: 'plugins/datatables-fixedheader/js'
},
{
from: 'node_modules/datatables.net-fixedheader-bs4/js',
to: 'plugins/datatables-fixedheader/js'
},
{
from: 'node_modules/datatables.net-fixedheader-bs4/css',
to: 'plugins/datatables-fixedheader/css'
},
{
from: 'node_modules/datatables.net-keytable/js',
to: 'plugins/datatables-keytable/js'
},
{
from: 'node_modules/datatables.net-keytable-bs4/js',
to: 'plugins/datatables-keytable/js'
},
{
from: 'node_modules/datatables.net-keytable-bs4/css',
to: 'plugins/datatables-keytable/css'
},
{
from: 'node_modules/datatables.net-responsive/js',
to: 'plugins/datatables-responsive/js'
},
{
from: 'node_modules/datatables.net-responsive-bs4/js',
to: 'plugins/datatables-responsive/js'
},
{
from: 'node_modules/datatables.net-responsive-bs4/css',
to: 'plugins/datatables-responsive/css'
},
{
from: 'node_modules/datatables.net-rowgroup/js',
to: 'plugins/datatables-rowgroup/js'
},
{
from: 'node_modules/datatables.net-rowgroup-bs4/js',
to: 'plugins/datatables-rowgroup/js'
},
{
from: 'node_modules/datatables.net-rowgroup-bs4/css',
to: 'plugins/datatables-rowgroup/css'
},
{
from: 'node_modules/datatables.net-rowreorder/js',
to: 'plugins/datatables-rowreorder/js'
},
{
from: 'node_modules/datatables.net-rowreorder-bs4/js',
to: 'plugins/datatables-rowreorder/js'
},
{
from: 'node_modules/datatables.net-rowreorder-bs4/css',
to: 'plugins/datatables-rowreorder/css'
},
{
from: 'node_modules/datatables.net-scroller/js',
to: 'plugins/datatables-scroller/js'
},
{
from: 'node_modules/datatables.net-scroller-bs4/js',
to: 'plugins/datatables-scroller/js'
},
{
from: 'node_modules/datatables.net-scroller-bs4/css',
to: 'plugins/datatables-scroller/css'
},
{
from: 'node_modules/datatables.net-searchpanes/js',
to: 'plugins/datatables-searchpanes/js'
},
{
from: 'node_modules/datatables.net-searchpanes-bs4/js',
to: 'plugins/datatables-searchpanes/js'
},
{
from: 'node_modules/datatables.net-searchpanes-bs4/css',
to: 'plugins/datatables-searchpanes/css'
},
{
from: 'node_modules/datatables.net-select/js',
to: 'plugins/datatables-select/js'
},
{
from: 'node_modules/datatables.net-select-bs4/js',
to: 'plugins/datatables-select/js'
},
{
from: 'node_modules/datatables.net-select-bs4/css',
to: 'plugins/datatables-select/css'
},
// Fullcalendar
{
from: 'node_modules/@fullcalendar/core/',
to : 'plugins/fullcalendar'
},
{
from: 'node_modules/@fullcalendar/bootstrap/',
to : 'plugins/fullcalendar-bootstrap'
},
{
from: 'node_modules/@fullcalendar/daygrid/',
to : 'plugins/fullcalendar-daygrid'
},
{
from: 'node_modules/@fullcalendar/timegrid/',
to : 'plugins/fullcalendar-timegrid'
},
{
from: 'node_modules/@fullcalendar/interaction/',
to : 'plugins/fullcalendar-interaction'
from: 'node_modules/fullcalendar/',
to: 'plugins/fullcalendar'
},
// icheck bootstrap
{
from: 'node_modules/icheck-bootstrap/',
to : 'plugins/icheck-bootstrap'
to: 'plugins/icheck-bootstrap'
},
// inputmask
{
from: 'node_modules/inputmask/dist/',
to : 'plugins/inputmask'
to: 'plugins/inputmask'
},
// ion-rangeslider
{
from: 'node_modules/ion-rangeslider/',
to : 'plugins/ion-rangeslider'
to: 'plugins/ion-rangeslider'
},
// JQVMap
// JQVMap (jqvmap-novulnerability)
{
from: 'node_modules/jqvmap/dist/',
to : 'plugins/jqvmap'
from: 'node_modules/jqvmap-novulnerability/dist/',
to: 'plugins/jqvmap'
},
// jQuery Mapael
{
from: 'node_modules/jquery-mapael/js/',
to : 'plugins/jquery-mapael'
to: 'plugins/jquery-mapael'
},
// Raphael
{
from: 'node_modules/raphael/',
to : 'plugins/raphael'
to: 'plugins/raphael'
},
// jQuery Mousewheel
{
from: 'node_modules/jquery-mousewheel/',
to : 'plugins/jquery-mousewheel'
to: 'plugins/jquery-mousewheel'
},
// jQuery Knob
{
from: 'node_modules/jquery-knob-chif/dist/',
to : 'plugins/jquery-knob'
to: 'plugins/jquery-knob'
},
// pace-progress
{
from: 'node_modules/@lgaitan/pace-progress/dist/',
to : 'plugins/pace-progress'
to: 'plugins/pace-progress'
},
// Select2
{
from: 'node_modules/select2/dist/',
to : 'plugins/select2'
to: 'plugins/select2'
},
{
from: 'node_modules/@ttskch/select2-bootstrap4-theme/dist/',
to: 'plugins/select2-bootstrap4-theme'
},
// Sparklines
{
from: 'node_modules/sparklines/source/',
to : 'plugins/sparklines'
to: 'plugins/sparklines'
},
// SweetAlert2
{
from: 'node_modules/sweetalert2/dist/',
to : 'plugins/sweetalert2'
to: 'plugins/sweetalert2'
},
{
from: 'node_modules/@sweetalert2/theme-bootstrap-4/',
to: 'plugins/sweetalert2-theme-bootstrap-4'
},
// Toastr
{
from: 'node_modules/toastr/build/',
to : 'plugins/toastr'
to: 'plugins/toastr'
},
// jsGrid
{
@@ -203,8 +354,8 @@ const Plugins = [
to: 'plugins/jsgrid'
},
{
from: 'node_modules/jsgrid/demos/',
to: 'plugins/jsgrid/demos'
from: 'node_modules/jsgrid/demos/db.js',
to: 'plugins/jsgrid/demos/db.js'
},
// flag-icon-css
{
@@ -220,49 +371,66 @@ const Plugins = [
from: 'node_modules/bootstrap4-duallistbox/dist',
to: 'plugins/bootstrap4-duallistbox/'
},
// AdminLTE Dist
// filterizr
{
from: 'dist/css',
to : 'docs/assets/css'
from: 'node_modules/filterizr/dist',
to: 'plugins/filterizr/'
},
// ekko-lightbox
{
from: 'node_modules/ekko-lightbox/dist',
to: 'plugins/ekko-lightbox/'
},
// bootstrap-switch
{
from: 'node_modules/bootstrap-switch/dist',
to: 'plugins/bootstrap-switch/'
},
// jQuery Validate
{
from: 'node_modules/jquery-validation/dist/',
to: 'plugins/jquery-validation'
},
// bs-custom-file-input
{
from: 'node_modules/bs-custom-file-input/dist/',
to: 'plugins/bs-custom-file-input'
},
// bs-stepper
{
from: 'node_modules/bs-stepper/dist/',
to: 'plugins/bs-stepper'
},
// CodeMirror
{
from: 'node_modules/codemirror/lib/',
to: 'plugins/codemirror'
},
{
from: 'dist/js',
to : 'docs/assets/js'
},
// jQuery
{
from: 'node_modules/jquery/dist',
to : 'docs/assets/plugins/jquery'
},
// Popper
{
from: 'node_modules/popper.js/dist',
to : 'docs/assets/plugins/popper'
},
// Bootstrap
{
from: 'node_modules/bootstrap/dist/js',
to : 'docs/assets/plugins/bootstrap/js'
},
// Font Awesome
{
from: 'node_modules/@fortawesome/fontawesome-free/css',
to : 'docs/assets/plugins/fontawesome-free/css'
from: 'node_modules/codemirror/addon/',
to: 'plugins/codemirror/addon'
},
{
from: 'node_modules/@fortawesome/fontawesome-free/webfonts',
to : 'docs/assets/plugins/fontawesome-free/webfonts'
},
// overlayScrollbars
{
from: 'node_modules/overlayscrollbars/js',
to : 'docs/assets/plugins/overlayScrollbars/js'
from: 'node_modules/codemirror/keymap/',
to: 'plugins/codemirror/keymap'
},
{
from: 'node_modules/overlayscrollbars/css',
to : 'docs/assets/plugins/overlayScrollbars/css'
from: 'node_modules/codemirror/mode/',
to: 'plugins/codemirror/mode'
},
{
from: 'node_modules/codemirror/theme/',
to: 'plugins/codemirror/theme'
},
// dropzonejs
{
from: 'node_modules/dropzone/dist/',
to: 'plugins/dropzone'
},
// uPlot
{
from: 'node_modules/uplot/dist/',
to: 'plugins/uplot'
}
]

View File

@@ -1,5 +1,10 @@
#!/usr/bin/env node
'use strict'
const path = require('path')
const fse = require('fs-extra')
const Plugins = require('./Plugins')
const fse = require('fs-extra')
class Publish {
constructor() {
@@ -12,7 +17,7 @@ class Publish {
getArguments() {
if (process.argv.length > 2) {
let arg = process.argv[2]
const arg = process.argv[2]
switch (arg) {
case '-v':
case '--verbose':
@@ -26,14 +31,27 @@ class Publish {
run() {
// Publish files
Plugins.forEach((module) => {
fse.copy(module.from, module.to, error => {
if (error) {
console.error(`Error: ${error}`)
} else if (this.options.verbose) {
Plugins.forEach(module => {
const fseOptions = {
// Skip copying dot files
filter(src) {
return !path.basename(src).startsWith('.')
}
}
try {
if (fse.existsSync(module.from)) {
fse.copySync(module.from, module.to, fseOptions)
} else {
fse.copySync(module.from.replace('node_modules/', '../'), module.to, fseOptions)
}
if (this.options.verbose) {
console.log(`Copied ${module.from} to ${module.to}`)
}
})
} catch (error) {
console.error(`Error: ${error}`)
}
})
}
}

55
build/npm/vnu-jar.js Normal file
View File

@@ -0,0 +1,55 @@
#!/usr/bin/env node
/*!
* Script to run vnu-jar if Java is available.
* Copyright 2017-2020 The Bootstrap Authors
* Copyright 2017-2020 Twitter, Inc.
* Licensed under MIT (https://github.com/twbs/bootstrap/blob/master/LICENSE)
*/
'use strict'
const childProcess = require('child_process')
const vnu = require('vnu-jar')
childProcess.exec('java -version', (error, stdout, stderr) => {
if (error) {
console.error('Skipping vnu-jar test; Java is missing.')
return
}
const is32bitJava = !/64-Bit/.test(stderr)
// vnu-jar accepts multiple ignores joined with a `|`.
// Also note that the ignores are regular expressions.
const ignores = [
// "autocomplete" is included in <button> and checkboxes and radio <input>s due to
// Firefox's non-standard autocomplete behavior - see https://bugzilla.mozilla.org/show_bug.cgi?id=654072
'Attribute “autocomplete” is only allowed when the input type is.*'
].join('|')
const args = [
'-jar',
vnu,
'--asciiquotes',
'--skip-non-html',
// Ignore the language code warnings
'--no-langdetect',
'--Werror',
`--filterpattern "${ignores}"`,
'./*.html',
'docs_html/',
'pages/'
]
// For the 32-bit Java we need to pass `-Xss512k`
if (is32bitJava) {
args.splice(0, 0, '-Xss512k')
}
return childProcess.spawn('java', args, {
shell: true,
stdio: 'inherit'
})
.on('exit', process.exit)
})

View File

@@ -1,23 +0,0 @@
{
"adjoining-classes": false,
"box-sizing": false,
"box-model": false,
"compatible-vendor-prefixes": false,
"floats": false,
"font-sizes": false,
"gradients": false,
"important": false,
"known-properties": false,
"outline-none": false,
"qualified-headings": false,
"regex-selectors": false,
"shorthand": false,
"text-indent": false,
"unique-headings": false,
"universal-selector": false,
"unqualified-attributes": false,
"ids": false,
"fallback-colors": false,
"vendor-prefix": false,
"import": false
}

View File

@@ -1,81 +0,0 @@
/*!
* AdminLTE v3.0.0-beta.2
* Author: Colorlib
* Website: AdminLTE.io <http://adminlte.io>
* License: Open source - MIT <http://opensource.org/licenses/MIT>
*/
//
// ------------------------------------------------------------------
// This file is to be included in your custom SCSS. Before importing
// this file, you should include your custom AdminLTE and Bootstrap
// variables followed by bootstrap.scss and then this file. It's
// ok to import this file without custom variables too!
// NOTE: be sure to keep the license notice in the generated css.
// ------------------------------------------------------------------
//
// Variables and Mixins
// ---------------------------------------------------
@import 'bootstrap-variables';
@import 'variables';
@import 'mixins';
// Core
// ---------------------------------------------------
@import 'layout';
// Components
// ---------------------------------------------------
@import 'main-header';
@import 'brand';
@import 'main-sidebar';
@import 'sidebar-mini';
@import 'control-sidebar';
@import 'dropdown';
@import 'forms';
@import 'progress-bars';
@import 'small-box';
@import 'cards';
@import 'info-box';
@import 'timeline';
@import 'buttons';
@import 'callout';
@import 'alerts';
@import 'navs';
@import 'products';
@import 'table';
@import 'direct-chat';
@import 'users-list';
@import 'carousel';
@import 'social-widgets';
@import 'modals';
// Pages
// ---------------------------------------------------
@import 'pages/mailbox';
@import 'pages/lockscreen';
@import 'pages/login_and_register';
@import 'pages/404_500_errors';
@import 'pages/invoice';
@import 'pages/profile';
@import 'pages/e_commerce';
@import 'pages/projects';
// Plugins
// ---------------------------------------------------
@import 'plugins/fullcalendar';
@import 'plugins/select2';
@import 'plugins/bootstrap-slider';
@import 'plugins/icheck-bootstrap';
@import 'plugins/mapael';
@import 'plugins/jqvmap';
@import 'plugins/sweetalert2';
@import 'plugins/toastr';
@import 'plugins/miscellaneous';
// Miscellaneous
// ---------------------------------------------------
@import 'miscellaneous';
@import 'print';
@import 'text';
@import 'elevation';
@import 'colors';

View File

@@ -1,77 +0,0 @@
/*!
* AdminLTE v3.0.0-beta.2
* Author: Colorlib
* Website: AdminLTE.io <http://adminlte.io>
* License: Open source - MIT <http://opensource.org/licenses/MIT>
*/
// Bootstrap
// ---------------------------------------------------
@import '../../node_modules/bootstrap/scss/functions';
@import 'bootstrap-variables';
@import '../../node_modules/bootstrap/scss/bootstrap';
// Variables and Mixins
// ---------------------------------------------------
@import 'variables';
@import 'mixins';
// Core
// ---------------------------------------------------
@import 'layout';
// Components
// ---------------------------------------------------
@import 'main-header';
@import 'brand';
@import 'main-sidebar';
@import 'sidebar-mini';
@import 'control-sidebar';
@import 'dropdown';
@import 'forms';
@import 'progress-bars';
@import 'small-box';
@import 'cards';
@import 'info-box';
@import 'timeline';
@import 'buttons';
@import 'callout';
@import 'alerts';
@import 'navs';
@import 'products';
@import 'table';
@import 'direct-chat';
@import 'users-list';
@import 'carousel';
@import 'social-widgets';
@import 'modals';
// Pages
// ---------------------------------------------------
@import 'pages/mailbox';
@import 'pages/lockscreen';
@import 'pages/login_and_register';
@import 'pages/404_500_errors';
@import 'pages/invoice';
@import 'pages/profile';
@import 'pages/e_commerce';
@import 'pages/projects';
// Plugins
// ---------------------------------------------------
@import 'plugins/fullcalendar';
@import 'plugins/select2';
@import 'plugins/bootstrap-slider';
@import 'plugins/icheck-bootstrap';
@import 'plugins/mapael';
@import 'plugins/jqvmap';
@import 'plugins/sweetalert2';
@import 'plugins/toastr';
@import 'plugins/miscellaneous';
// Miscellaneous
// ---------------------------------------------------
@import 'miscellaneous';
@import 'print';
@import 'text';
@import 'elevation';
@import 'colors';

View File

@@ -0,0 +1,29 @@
/*!
* AdminLTE v3.1.0-rc
* Author: Colorlib
* Website: AdminLTE.io <https://adminlte.io>
* License: Open source - MIT <https://opensource.org/licenses/MIT>
*/
//
// ------------------------------------------------------------------
// This file is to be included in your custom SCSS. Before importing
// this file, you should include your custom AdminLTE and Bootstrap
// variables followed by bootstrap.scss and then this file. It's
// ok to import this file without custom variables too!
// NOTE: be sure to keep the license notice in the generated css.
// ------------------------------------------------------------------
//
// Variables and Mixins
// ---------------------------------------------------
@import "bootstrap-variables";
@import "variables";
@import "mixins";
@import "parts/core";
@import "parts/components";
@import "parts/extra-components";
@import "parts/pages";
@import "parts/plugins";
@import "parts/miscellaneous";

View File

@@ -23,28 +23,14 @@
}
//Alert Variants
.alert-success {
@extend .bg-success;
border-color: darken(theme-color('success'), 5%);
}
@each $color, $value in $theme-colors {
.alert-#{$color} {
color: color-yiq($value);
background-color: $value;
border-color: darken($value, 5%);
}
.alert-danger,
.alert-error {
@extend .bg-danger;
border-color: darken(theme-color('danger'), 5%);
}
.alert-warning {
@extend .bg-warning;
border-color: darken(theme-color('warning'), 5%);
}
.alert-info {
@extend .bg-info;
border-color: darken(theme-color('info'), 5%);
}
.alert-primary {
@extend .bg-primary;
border-color: darken(theme-color('primary'), 5%);
.alert-default-#{$color} {
@include alert-variant(theme-color-level($color, $alert-bg-level), theme-color-level($color, $alert-border-level), theme-color-level($color, $alert-color-level));
}
}

View File

@@ -9,7 +9,7 @@
//
// stylelint-disable
$white: #ffffff !default;
$white: #fff !default;
$gray-100: #f8f9fa !default;
$gray-200: #e9ecef !default;
$gray-300: #dee2e6 !default;
@@ -23,15 +23,15 @@ $black: #000 !default;
$grays: () !default;
$grays: map-merge((
"100": $gray-100,
"200": $gray-200,
"300": $gray-300,
"400": $gray-400,
"500": $gray-500,
"600": $gray-600,
"700": $gray-700,
"800": $gray-800,
"900": $gray-900
"100": $gray-100,
"200": $gray-200,
"300": $gray-300,
"400": $gray-400,
"500": $gray-500,
"600": $gray-600,
"700": $gray-700,
"800": $gray-800,
"900": $gray-900
), $grays);
$blue: #007bff !default;
@@ -47,19 +47,19 @@ $cyan: #17a2b8 !default;
$colors: () !default;
$colors: map-merge((
"blue": $blue,
"indigo": $indigo,
"purple": $purple,
"pink": $pink,
"red": $red,
"orange": $orange,
"yellow": $yellow,
"green": $green,
"teal": $teal,
"cyan": $cyan,
"white": $white,
"gray": $gray-600,
"gray-dark": $gray-800
"blue": $blue,
"indigo": $indigo,
"purple": $purple,
"pink": $pink,
"red": $red,
"orange": $orange,
"yellow": $yellow,
"green": $green,
"teal": $teal,
"cyan": $cyan,
"white": $white,
"gray": $gray-600,
"gray-dark": $gray-800
), $colors);
$primary: $blue !default;
@@ -73,14 +73,14 @@ $dark: $gray-800 !default;
$theme-colors: () !default;
$theme-colors: map-merge((
"primary": $primary,
"secondary": $secondary,
"success": $success,
"info": $info,
"warning": $warning,
"danger": $danger,
"light": $light,
"dark": $dark
"primary": $primary,
"secondary": $secondary,
"success": $success,
"info": $info,
"warning": $warning,
"danger": $danger,
"light": $light,
"dark": $dark
), $theme-colors);
// stylelint-enable
@@ -91,22 +91,26 @@ $theme-color-interval: 8% !default;
$yiq-contrasted-threshold: 150 !default;
// Customize the light and dark text colors for use in our YIQ color contrast function.
$yiq-text-dark: #1F2D3D !default;
$yiq-text-dark: #1f2d3d !default;
$yiq-text-light: $white !default;
// Options
//
// Quickly modify global styling by enabling or disabling optional features.
$enable-caret: true !default;
$enable-rounded: true !default;
$enable-shadows: true !default;
$enable-gradients: false !default;
$enable-transitions: true !default;
$enable-hover-media-query: false !default; // Deprecated, no longer affects any compiled CSS
$enable-grid-classes: true !default;
$enable-print-styles: true !default;
$enable-caret: true !default;
$enable-rounded: true !default;
$enable-shadows: true !default;
$enable-gradients: false !default;
$enable-transitions: true !default;
$enable-prefers-reduced-motion-media-query: true !default;
$enable-hover-media-query: false !default; // Deprecated, no longer affects any compiled CSS
$enable-grid-classes: true !default;
$enable-pointer-cursor-for-buttons: true !default;
$enable-print-styles: true !default;
$enable-responsive-font-sizes: false !default;
$enable-validation-icons: true !default;
$enable-deprecation-messages: true !default;
// Spacing
//
@@ -118,21 +122,21 @@ $enable-print-styles: true !default;
$spacer: 1rem !default;
$spacers: () !default;
$spacers: map-merge((
0: 0,
1: ($spacer * .25),
2: ($spacer * .5),
3: $spacer,
4: ($spacer * 1.5),
5: ($spacer * 3)
0: 0,
1: ($spacer * .25),
2: ($spacer * .5),
3: $spacer,
4: ($spacer * 1.5),
5: ($spacer * 3)
), $spacers);
// This variable affects the `.h-*` and `.w-*` classes.
$sizes: () !default;
$sizes: map-merge((
25: 25%,
50: 50%,
75: 75%,
100: 100%
25: 25%,
50: 50%,
75: 75%,
100: 100%
), $sizes);
// stylelint-enable
@@ -165,11 +169,11 @@ $paragraph-margin-bottom: 1rem !default;
// adapting to different screen sizes, for use in media queries.
$grid-breakpoints: (
xs: 0,
sm: 576px,
md: 768px,
lg: 992px,
xl: 1200px
xs: 0,
sm: 576px,
md: 768px,
lg: 992px,
xl: 1200px
) !default;
@include _assert-ascending($grid-breakpoints, "$grid-breakpoints");
@@ -181,10 +185,10 @@ $grid-breakpoints: (
// Define the maximum width of `.container` for different screen sizes.
$container-max-widths: (
sm: 540px,
md: 720px,
lg: 960px,
xl: 1140px
sm: 540px,
md: 720px,
lg: 960px,
xl: 1140px
) !default;
@include _assert-ascending($container-max-widths, "$container-max-widths");
@@ -314,7 +318,7 @@ $table-head-color: $gray-700 !default;
$table-dark-bg: $gray-900 !default;
$table-dark-accent-bg: rgba($white, .05) !default;
$table-dark-hover-bg: rgba($white, .075) !default;
$table-dark-border-color: lighten($gray-900, 7.5%) !default;
$table-dark-border-color: lighten($gray-900, 10%) !default;
$table-dark-color: $body-bg !default;
@@ -410,11 +414,14 @@ $input-focus-color: $input-color !default;
$input-focus-width: 0 !default;
$input-focus-box-shadow: none !default;
$input-placeholder-color: $gray-600 !default;
$input-placeholder-color: lighten($gray-600, 15%) !default;
$input-height-border: $input-border-width * 2 !default;
$input-height-inner: ($font-size-base * $input-btn-line-height) + ($input-btn-padding-y * 2) !default;
$input-height-inner-half: calc(#{$input-line-height * .5em} + #{$input-padding-y}) !default;
$input-height-inner-quarter: calc(#{$input-line-height * .25em} + #{$input-padding-y / 2}) !default;
$input-height: calc(#{$input-height-inner} + #{$input-height-border}) !default;
$input-height-inner-sm: ($font-size-sm * $input-btn-line-height-sm) + ($input-btn-padding-y-sm * 2) !default;
@@ -440,7 +447,7 @@ $input-group-addon-color: $input-color !default;
$input-group-addon-bg: $gray-200 !default;
$input-group-addon-border-color: $input-border-color !default;
$custom-control-gutter: 1.5rem !default;
$custom-control-gutter: .5rem !default;
$custom-control-spacer-x: 1rem !default;
$custom-control-indicator-size: 1rem !default;
@@ -490,7 +497,7 @@ $custom-select-border-color: $input-border-color !default;
$custom-select-border-radius: $border-radius !default;
$custom-select-focus-border-color: $input-focus-border-color !default;
$custom-select-focus-box-shadow: inset 0 1px 2px rgba($black, .075), 0 0 5px rgba($custom-select-focus-border-color, .5) !default;
$custom-select-focus-box-shadow: none !default;
$custom-select-font-size-sm: 75% !default;
$custom-select-height-sm: $input-height-sm !default;
@@ -500,7 +507,7 @@ $custom-select-height-lg: $input-height-lg !default;
$custom-file-height: $input-height !default;
$custom-file-focus-border-color: $input-focus-border-color !default;
$custom-file-focus-box-shadow: $input-btn-focus-box-shadow !default;
$custom-file-focus-box-shadow: $custom-select-focus-box-shadow !default;
$custom-file-padding-y: $input-btn-padding-y !default;
$custom-file-padding-x: $input-btn-padding-x !default;
@@ -510,11 +517,11 @@ $custom-file-bg: $input-bg !default;
$custom-file-border-width: $input-btn-border-width !default;
$custom-file-border-color: $input-border-color !default;
$custom-file-border-radius: $input-border-radius !default;
$custom-file-box-shadow: $input-box-shadow !default;
$custom-file-box-shadow: $custom-select-focus-box-shadow !default;
$custom-file-button-color: $custom-file-color !default;
$custom-file-button-bg: $input-group-addon-bg !default;
$custom-file-text: (
en: "Browse"
en: "Browse"
) !default;
$custom-range-thumb-focus-box-shadow: 0 0 0 1px $body-bg, $input-btn-focus-box-shadow !default;
@@ -692,6 +699,13 @@ $tooltip-arrow-width: .8rem !default;
$tooltip-arrow-height: .4rem !default;
$tooltip-arrow-color: $tooltip-bg !default;
// Form tooltips must come after regular tooltips
$form-feedback-tooltip-padding-y: $tooltip-padding-y !default;
$form-feedback-tooltip-padding-x: $tooltip-padding-x !default;
$form-feedback-tooltip-font-size: $tooltip-font-size !default;
$form-feedback-tooltip-line-height: $line-height-base !default;
$form-feedback-tooltip-opacity: $tooltip-opacity !default;
$form-feedback-tooltip-border-radius: $tooltip-border-radius !default;
// Popovers

View File

@@ -16,41 +16,91 @@
text-decoration: none;
}
[class*='sidebar-dark'] & {
.text-sm & {
font-size: inherit;
}
[class*="sidebar-dark"] & {
border-bottom: 1px solid lighten($dark, 10%);
color: rgba($white, .8);
&,
.pushmenu {
color: rgba($white, .8);
&:hover {
color: $white;
}
}
}
[class*='sidebar-light'] & {
[class*="sidebar-light"] & {
border-bottom: 1px solid $gray-300;
color: rgba($black, .8);
&,
.pushmenu {
color: rgba($black, .8);
&:hover {
color: $black;
}
}
}
.pushmenu {
margin-right: $sidebar-padding-x;
font-size: $font-size-base;
}
.brand-link {
padding: 0;
border-bottom: none;
}
.brand-image {
float: left;
line-height: .8;
margin-left: .8rem;
margin-right: .5rem;
margin-top: -3px;
max-height: 33px;
width: auto;
}
.brand-image-xs {
float: left;
line-height: .8;
margin-top: -.1rem;
max-height: 33px;
width: auto;
}
.brand-image-xl {
line-height: .8;
max-height: 40px;
width: auto;
&.single {
margin-top: -.3rem;
}
}
&.text-sm,
.text-sm & {
.brand-image {
height: 29px;
margin-bottom: -.25rem;
margin-left: .95rem;
margin-top: -.25rem;
}
.brand-image-xs {
margin-top: -.2rem;
max-height: 29px;
}
.brand-image-xl {
margin-top: -.225rem;
max-height: 38px;
}
}
}
.brand-image {
float: left;
line-height: .8;
margin-left: .8rem;
margin-right: .5rem;
margin-top: -3px;
max-height: 34px;
width: auto;
}
.brand-image-xs {
float: left;
line-height: .8;
margin-left: .8rem;
margin-right: .5rem;
margin-top: -3px;
max-height: 34px;
width: auto;
}
.brand-image-xl {
line-height: .8;
margin-bottom: -10px;
margin-top: -14px;
max-height: 40px;
width: auto;
}

View File

@@ -3,6 +3,11 @@
//
.btn {
&.disabled,
&:disabled {
cursor: not-allowed;
}
// Flat buttons
&.btn-flat {
@include border-radius(0);
@@ -15,8 +20,8 @@
overflow: hidden;
position: relative;
> input[type='file'] {
background: $white;
> input[type="file"] {
background-color: $white;
cursor: inherit;
display: block;
font-size: 100px;
@@ -30,6 +35,10 @@
top: 0;
}
}
.text-sm & {
font-size: $font-size-sm !important;
}
}
// Button color variations
@@ -65,21 +74,27 @@
> .fas,
> .far,
> .fab,
> .glyphicon,
> .fal,
> .fad,
> .svg-inline--fa,
> .ion {
display: block;
font-size: 20px;
}
> .svg-inline--fa {
margin: 0 auto;
}
&:hover {
background: $button-default-background-color;
background-color: $button-default-background-color;
border-color: darken($button-default-border-color, 20%);
color: $button-default-color;
}
&:active,
&:focus {
@include box-shadow(inset 0 3px 5px rgba($black, 0.125));
@include box-shadow(inset 0 3px 5px rgba($black, .125));
}
// The badge
@@ -92,3 +107,36 @@
}
}
// Extra Button Size
.btn-xs {
@include button-size($button-padding-y-xs, $button-padding-x-xs, $button-font-size-xs, $button-line-height-xs, $button-border-radius-xs);
}
.dark-mode {
.btn-default,
.btn-app {
background-color: lighten($dark, 2.5%);
color: $white;
border-color: $gray-600;
&:hover,
&:focus {
background-color: lighten($dark, 5%);
color: $gray-300;
border-color: lighten($gray-600, 2.5%);
}
}
.btn-light {
background-color: lighten($dark, 7.5%);
color: $white;
border-color: $gray-600;
&:hover,
&:focus {
background-color: lighten($dark, 10%);
color: $gray-300;
border-color: lighten($gray-600, 5%);
}
}
}

View File

@@ -9,18 +9,18 @@
}
@if $enable-shadows {
@extend .elevation-1;
box-shadow: map-get($elevations, 1);
} @else {
border: 1px solid $gray-300;
}
@extend .mb-3;
background-color: $white;
border-left: 5px solid $gray-200;
padding: .5rem 1rem .5rem .5rem;
margin-bottom: map-get($spacers, 3);
padding: 1rem;
a {
color: $white;
color: $gray-700;
text-decoration: underline;
&:hover {
@@ -34,18 +34,24 @@
// Themes for different contexts
&.callout-danger {
border-left-color: darken(theme-color('danger'), 10%);
border-left-color: darken(theme-color("danger"), 10%);
}
&.callout-warning {
border-left-color: darken(theme-color('warning'), 10%);
border-left-color: darken(theme-color("warning"), 10%);
}
&.callout-info {
border-left-color: darken(theme-color('info'), 10%);
border-left-color: darken(theme-color("info"), 10%);
}
&.callout-success {
border-left-color: darken(theme-color('success'), 10%);
border-left-color: darken(theme-color("success"), 10%);
}
}
.dark-mode {
.callout {
background-color: lighten($dark, 5%);
}
}

View File

@@ -2,11 +2,24 @@
// Component: Cards
//
// Color variants
@each $name, $color in $theme-colors {
@include cards-variant($name, $color);
}
@each $name, $color in $colors {
@include cards-variant($name, $color);
}
.card {
@extend .mb-3;
@include box-shadow($card-shadow);
margin-bottom: map-get($spacers, 3);
&.bg-dark {
.card-header {
border-color: $card-dark-border-color;
}
&,
.card-body {
color: $white;
@@ -21,13 +34,17 @@
position: fixed;
top: 0;
width: 100% !important;
z-index: 9999;
z-index: $zindex-modal-backdrop;
&.was-collapsed .card-body {
display: block !important;
}
[data-widget='collapse'] {
.card-body {
overflow: auto;
}
[data-widget="collapse"] {
display: none;
}
@@ -71,6 +88,113 @@
.border-left {
border-left: 1px solid $card-border-color;
}
&.card-tabs {
&:not(.card-outline) {
> .card-header {
border-bottom: 0;
.nav-item {
&:first-child .nav-link {
border-left-color: transparent;
}
}
}
}
&.card-outline {
.nav-item {
border-bottom: 0;
&:first-child .nav-link {
border-left: 0;
margin-left: 0;
}
}
}
.card-tools {
margin: .3rem .5rem;
}
&:not(.expanding-card).collapsed-card {
.card-header {
border-bottom: 0;
.nav-tabs {
border-bottom: 0;
.nav-item {
margin-bottom: 0;
}
}
}
}
&.expanding-card {
.card-header {
.nav-tabs {
.nav-item {
margin-bottom: -1px;
}
}
}
}
}
&.card-outline-tabs {
border-top: 0;
.card-header {
.nav-item {
&:first-child .nav-link {
border-left: 0;
margin-left: 0;
}
}
a {
border-top: 3px solid transparent;
&:hover {
border-top: 3px solid $nav-tabs-border-color;
}
&.active {
&:hover {
margin-top: 0;
}
}
}
}
.card-tools {
margin: .5rem .5rem .3rem;
}
&:not(.expanding-card).collapsed-card .card-header {
border-bottom: 0;
.nav-tabs {
border-bottom: 0;
.nav-item {
margin-bottom: 0;
}
}
}
&.expanding-card {
.card-header {
.nav-tabs {
.nav-item {
margin-bottom: -1px;
}
}
}
}
}
}
// Maximized Card Body Scroll fix
@@ -82,13 +206,14 @@ html.maximized-card {
.card-header,
.card-body,
.card-footer {
@include clearfix;
@include clearfix ();
}
// Box header
.card-header {
background-color: transparent;
border-bottom: 1px solid $card-border-color;
padding: (($card-spacer-y / 2) * 2) $card-spacer-x;
position: relative;
@if $enable-rounded {
@@ -100,27 +225,40 @@ html.maximized-card {
}
> .card-tools {
position: absolute;
right: 1rem;
top: .5rem;
float: right;
margin-right: -$card-spacer-x / 2;
[data-toggle='tooltip'] {
.input-group,
.nav,
.pagination {
margin-bottom: -$card-spacer-y / 2.5;
margin-top: -$card-spacer-y / 2.5;
}
[data-toggle="tooltip"] {
position: relative;
}
}
}
.card-title {
float: left;
font-size: $card-title-font-size;
font-weight: $card-title-font-weight;
margin: 0;
}
.card-text {
clear: both;
}
// Box Tools Buttons
.btn-tool {
background: transparent;
background-color: transparent;
color: $gray-500;
font-size: $font-size-sm;
margin: -(($card-spacer-y / 2) * 2) 0;
padding: .25rem .5rem;
.btn-group.show &,
@@ -134,12 +272,22 @@ html.maximized-card {
}
}
.text-sm {
.card-title {
font-size: $card-title-font-size-sm;
}
.nav-link {
padding: $card-nav-link-padding-sm-y $card-nav-link-padding-sm-x;
}
}
// Box Body
.card-body {
// @include border-radius-sides(0, 0, $border-radius, $border-radius);
.no-header & {
// @include border-top-radius($border-radius);
}
// .no-header & {
// @include border-top-radius($border-radius);
// }
// Tables within the box body
> .table {
@@ -166,7 +314,7 @@ html.maximized-card {
}
.chart-legend {
@extend .list-unstyled;
@include list-unstyled ();
margin: 10px 0;
> li {
@@ -179,10 +327,10 @@ html.maximized-card {
// Comment Box
.card-comments {
background: $gray-100;
background-color: $gray-100;
.card-comment {
@include clearfix;
@include clearfix ();
border-bottom: 1px solid $gray-200;
padding: 8px 0;
@@ -195,7 +343,8 @@ html.maximized-card {
}
img {
@extend .img-sm;
height: $card-img-size;
width: $card-img-size;
float: left;
}
}
@@ -230,7 +379,7 @@ html.maximized-card {
// Todo list element
> li {
@include border-radius(2px);
background: $gray-100;
background-color: $gray-100;
border-left: 2px solid $gray-200;
color: $gray-700;
margin-bottom: 2px;
@@ -240,7 +389,7 @@ html.maximized-card {
margin-bottom: 0;
}
> input[type='checkbox'] {
> input[type="checkbox"] {
margin: 0 10px 0 5px;
}
@@ -258,7 +407,7 @@ html.maximized-card {
// Tools and options box
.tools {
color: theme-color('danger');
color: theme-color("danger");
display: none;
float: right;
@@ -267,7 +416,9 @@ html.maximized-card {
> .fas,
> .far,
> .fab,
> .glyphicon,
> .fal,
> .fad,
> .svg-inline--fa,
> .ion {
cursor: pointer;
margin-right: 5px;
@@ -287,7 +438,7 @@ html.maximized-card {
}
.badge {
background: $gray-500 !important;
background-color: $gray-500 !important;
}
}
}
@@ -319,11 +470,52 @@ html.maximized-card {
max-width: 200px;
}
// Color variants
@each $name, $color in $theme-colors {
@include cards-variant($name, $color);
// Nav Tabs override
.card-default {
.nav-item {
&:first-child .nav-link {
border-left: 0;
}
}
}
@each $name, $color in $colors {
@include cards-variant($name, $color);
.dark-mode {
.card {
background-color: $dark;
color: $white;
.card {
background-color: lighten($dark, 5%);
color: $white;
}
.nav.flex-column > li {
border-bottom-color: $gray-600;
}
.card-footer {
background-color: rgba($black, .1);
}
&.card-outline-tabs .card-header a:hover {
border-color: $gray-600;
}
&:not(.card-outline) > .card-header a.active {
color: $white;
}
}
.card-comments {
background-color: lighten($dark, 1.25%);
.username {
color: $gray-400;
}
.card-comment {
border-bottom-color: lighten($dark, 7.5%);
}
}
.todo-list > li {
background-color: lighten($dark, 5%);
border-color: lighten($dark, 7.5%);
color: $white;
}
}

View File

@@ -2,17 +2,21 @@
// Component: Carousel
//
.carousel-control {
&.left,
&.right {
background-image: none;
.carousel-control-custom-icon {
.carousel-control-prev & {
margin-left: -20px;
}
.carousel-control-next & {
margin-right: 20px;
}
> .fa,
> .fas,
> .far,
> .fab,
> .glyphicon,
> .fal,
> .fad,
> .svg-inline--fa,
> .ion {
display: inline-block;
font-size: 40px;

44
build/scss/_close.scss Normal file
View File

@@ -0,0 +1,44 @@
.close {
float: right;
@include font-size($close-font-size);
font-weight: $close-font-weight;
line-height: 1;
color: $close-color;
text-shadow: $close-text-shadow;
opacity: .5;
// Override <a>'s hover style
@include hover() {
color: $close-color;
text-decoration: none;
}
&:not(:disabled):not(.disabled) {
@include hover-focus() {
opacity: .75;
}
}
&:focus {
outline: none;
}
}
// Additional properties for button version
// iOS requires the button element instead of an anchor tag.
// If you want the anchor version, it requires `href="#"`.
// See https://developer.mozilla.org/en-US/docs/Web/Events/click#Safari_Mobile
// stylelint-disable-next-line selector-no-qualifying-type
button.close {
padding: 0;
background-color: transparent;
border: 0;
}
// Future-proof disabling of clicks on `<a>` elements
// stylelint-disable-next-line selector-no-qualifying-type
a.close.disabled {
pointer-events: none;
}

View File

@@ -43,7 +43,7 @@
}
// Backgrund Color Disabled
[class^='bg-'].disabled {
[class^="bg-"].disabled {
opacity: .65;
}
@@ -70,3 +70,35 @@ a.text-muted:hover {
color: lighten($gray-500, 20%);
}
}
// Accent colors (theme colors)
@each $name, $color in $theme-colors {
@include accent-variant($name, $color);
}
// Accent colors (colors)
@each $name, $color in $colors {
@include accent-variant($name, $color);
}
// Accent button override fix
[class*="accent-"] {
@each $name, $color in $theme-colors {
a.btn-#{$name} {
color: color-yiq($color);
}
}
}
.dark-mode {
.bg-light {
background-color: lighten($dark, 7.5%) !important;
color: $white !important;
}
.text-black,
.text-dark,
.link-black,
.link-dark {
color: $gray-400;
}
}

View File

@@ -1,27 +1,28 @@
//
// Component: Control Sidebar
//
html.control-sidebar-animate {
overflow-x: hidden;
}
.control-sidebar {
bottom: $main-footer-height;
position: absolute;
top: $main-header-height;
z-index: 830;
z-index: $zindex-control-sidebar;
&,
&::before {
bottom: 0;
bottom: $main-footer-height;
display: none;
right: -$control-sidebar-width;
width: $control-sidebar-width;
@include transition(right $transition-speed $transition-fn);
@include transition(right $transition-speed $transition-fn, display $transition-speed $transition-fn);
}
&::before {
content: " ";
content: "";
display: block;
position: fixed;
top: 0;
@@ -29,30 +30,44 @@ html.control-sidebar-animate {
}
}
body.text-sm {
.control-sidebar {
bottom: $main-footer-height-sm;
top: $main-header-height-sm;
}
}
.main-header.text-sm ~ .control-sidebar {
top: $main-header-height-sm;
}
.main-footer.text-sm ~ .control-sidebar {
bottom: $main-footer-height-sm;
}
.control-sidebar-push-slide {
.content-wrapper,
.main-footer {
@include transition(margin-right $transition-speed $transition-fn);
}
}
// Control sidebar open state
.control-sidebar-open {
@include media-breakpoint-up(md) {
.control-sidebar {
display: block;
.control-sidebar {
display: block;
&,
&::before {
right: 0;
}
}
.content-wrapper,
.main-footer {
margin-right: $control-sidebar-width;
&,
&::before {
right: 0;
}
}
@include media-breakpoint-down(md) {
.control-sidebar {
&,
&::before {
right: 0;
}
&.control-sidebar-push,
&.control-sidebar-push-slide {
.content-wrapper,
.main-footer {
margin-right: $control-sidebar-width;
}
}
}
@@ -65,23 +80,29 @@ html.control-sidebar-animate {
&,
&::before {
right: 0;
@include transition(right $transition-speed $transition-fn, display $transition-speed $transition-fn);
}
}
&.control-sidebar-push,
&.control-sidebar-push-slide {
.content-wrapper,
.main-footer {
margin-right: $control-sidebar-width;
}
}
}
// Dark skin
.control-sidebar-dark {
background-color: $sidebar-dark-bg;
&,
a,
.nav-link {
color: $sidebar-dark-color;
}
// Background
& {
background: $sidebar-dark-bg;
}
a:hover {
color: $sidebar-dark-hover-color;
}
@@ -147,8 +168,6 @@ html.control-sidebar-animate {
color: lighten($sidebar-light-color, 10%);
// Background
& {
background: $sidebar-light-bg;
border-left: $main-header-bottom-border;
}
background-color: $sidebar-light-bg;
border-left: $main-header-bottom-border;
}

View File

@@ -1,7 +1,7 @@
//
// Component: Direct Chat
//
.direct-chat {
.card-body {
overflow-x: hidden;
@@ -14,6 +14,19 @@
@include translate(0, 0);
}
}
&.timestamp-light {
.direct-chat-timestamp {
color: lighten(color-yiq($yiq-text-light), 10%);
}
}
&.timestamp-dark {
.direct-chat-timestamp {
color: darken(color-yiq($yiq-text-dark), 20%);
}
}
}
.direct-chat-messages {
@@ -29,7 +42,7 @@
}
.direct-chat-msg {
@include clearfix;
@include clearfix ();
margin-bottom: 10px;
}
@@ -43,7 +56,7 @@
@include border-radius($border-radius-lg);
}
background: $direct-chat-default-msg-bg;
background-color: $direct-chat-default-msg-bg;
border: 1px solid $direct-chat-default-msg-border-color;
color: $direct-chat-default-font-color;
margin: 5px 0 0 50px;
@@ -55,7 +68,7 @@
&::before {
border: solid transparent;
border-right-color: $direct-chat-default-msg-border-color;
content: ' ';
content: " ";
height: 0;
pointer-events: none;
position: absolute;
@@ -122,7 +135,7 @@
.direct-chat-contacts {
@include translate(101%, 0);
background: $gray-900;
background-color: $dark;
bottom: 0;
color: $white;
height: 250px;
@@ -132,13 +145,29 @@
width: 100%;
}
.direct-chat-contacts-light {
background-color: $light;
.contacts-list-name {
color: $gray-700;
}
.contacts-list-date {
color: $gray-600;
}
.contacts-list-msg {
color: darken($gray-600, 10%);
}
}
//Contacts list -- for displaying contacts in direct chat contacts pane
.contacts-list {
@extend .list-unstyled;
@include list-unstyled ();
> li {
@include clearfix;
border-bottom: 1px solid rgba($black, 0.2);
@include clearfix ();
border-bottom: 1px solid rgba($black, .2);
margin: 0;
padding: 10px;
@@ -173,12 +202,12 @@
}
.contacts-list-date {
color: $gray-500;
font-weight: normal;
color: $gray-400;
font-weight: 400;
}
.contacts-list-msg {
color: darken($gray-500, 25%);
color: darken($gray-400, 10%);
}
// Color variants
@@ -193,3 +222,25 @@
@include direct-chat-variant($color);
}
}
.dark-mode {
.direct-chat-text {
background-color: lighten($dark, 7.5%);
border-color: lighten($dark, 10%);
color: $white;
&::after,
&::before {
border-right-color: lighten($dark, 10%);
}
}
.direct-chat-timestamp {
color: $gray-500;
}
.right > .direct-chat-text {
&::after,
&::before {
border-right-color: transparent;
}
}
}

View File

@@ -12,11 +12,27 @@
// }
//}
.text-sm {
.dropdown-menu {
font-size: $font-size-sm !important;
}
.dropdown-toggle::after {
vertical-align: .2rem;
}
}
.dropdown-item-title {
font-size: $font-size-base;
margin: 0;
}
.dropdown-icon {
&::after {
margin-left: 0;
}
}
// Dropdown Sizes
.dropdown-menu-lg {
max-width: 300px;
@@ -37,6 +53,38 @@
}
}
// Dropdown Submenu
.dropdown-submenu {
position: relative;
> a::after {
@include caret-right ();
float: right;
margin-left: .5rem;
margin-top: .5rem;
}
> .dropdown-menu {
left: 100%;
margin-left: 0;
margin-top: 0;
top: 0;
}
}
// Dropdown Hover
.dropdown-hover {
&:hover,
&.nav-item.dropdown:hover,
.dropdown-submenu:hover,
&.dropdown-submenu:hover {
> .dropdown-menu {
display: block;
}
}
}
// Dropdown Sizes
.dropdown-menu-xl {
max-width: 420px;
@@ -66,7 +114,7 @@
text-align: center;
}
// Add fade animation to dropdown menus by appending
// Add fade animation to dropdown menus by appending
// the class .animated-dropdown-menu to the .dropdown-menu ul (or ol)
.open:not(.dropup) > .animated-dropdown-menu {
@include animation(flipInX .7s both);
@@ -121,7 +169,7 @@
right: 5%;
left: auto;
border: 1px solid #ddd;
background: $white;
background-color: $white;
}
}
}
@@ -129,14 +177,13 @@
// User Menu
.navbar-nav > .user-menu {
> .nav-link:after {
content:none;
> .nav-link::after {
content: none;
}
> .dropdown-menu {
@include border-top-radius(0);
padding: 0;
border-top-width: 0;
width: 280px;
&,
@@ -157,7 +204,7 @@
width: 90px;
border: 3px solid;
border-color: transparent;
border-color: rgba(255, 255, 255, 0.2);
border-color: rgba(255, 255, 255, .2);
}
> p {
@@ -175,14 +222,14 @@
// Menu Body
> .user-body {
@include clearfix;
@include clearfix ();
border-bottom: 1px solid $gray-700;
border-top: 1px solid $gray-300;
padding: 15px;
a {
@include media-breakpoint-up(sm) {
background: $white !important;
background-color: $white !important;
color: $gray-700 !important;
}
}
@@ -190,7 +237,7 @@
// Menu Footer
> .user-footer {
@include clearfix;
@include clearfix ();
background-color: $gray-100;
padding: 10px;
@@ -210,15 +257,65 @@
@include media-breakpoint-up(sm) {
float: none;
line-height: 10px;
margin-right: 0;
margin-right: .4rem;
margin-top: -8px;
}
border-radius: 50%;
float: left;
height: 25px;
height: $sidebar-user-image-width;
margin-right: 10px;
margin-top: -2px;
width: 25px;
width: $sidebar-user-image-width;
}
}
.dark-mode {
.dropdown-menu {
background-color: $dark;
color: $white;
}
.dropdown-item {
color: $white;
&:focus,
&:hover {
background-color: lighten($dark, 5%);
}
}
.dropdown-divider {
border-color: $gray-600;
}
.navbar-nav > .user-menu > .dropdown-menu {
> .user-footer {
background-color: lighten($dark, 2.5%);
color: $white;
.btn-default {
color: $white;
&:hover,
&:focus {
background-color: lighten($dark, 5%);
color: $gray-300;
}
&:focus {
background-color: lighten($dark, 7.5%);
}
}
}
> .user-body {
border-color: $gray-600;
}
> .user-body a {
background-color: transparent !important;
color: $white !important;
&:hover,
&:focus {
color: $gray-400 !important;
}
}
}
}

View File

@@ -6,22 +6,9 @@
box-shadow: none !important;
}
.elevation-1 {
box-shadow: 0 1px 3px rgba($black, 0.12), 0 1px 2px rgba($black, 0.24) !important;
}
.elevation-2 {
box-shadow: 0 3px 6px rgba($black, 0.16), 0 3px 6px rgba($black, 0.23) !important;
}
.elevation-3 {
box-shadow: 0 10px 20px rgba($black, 0.19), 0 6px 6px rgba($black, 0.23) !important;
}
.elevation-4 {
box-shadow: 0 14px 28px rgba($black, 0.25), 0 10px 10px rgba($black, 0.22) !important;
}
.elevation-5 {
box-shadow: 0 19px 38px rgba($black, 0.30), 0 15px 12px rgba($black, 0.22) !important;
// Background colors (colors)
@each $name, $value in $elevations {
.elevation-#{$name} {
box-shadow: $value !important;
}
}

View File

@@ -1,7 +1,7 @@
//
// Component: Forms
//
.form-group {
&.has-icon {
position: relative;
@@ -40,19 +40,23 @@
&.fas,
&.far,
&.fab,
&.glyphicon,
&.fal,
&.fad,
&.svg-inline--fa,
&.ion {
line-height: $input-height;
}
}
.input-lg + .form-control-feedback,
.input-lg + .form-control-feedback,
.input-group-lg + .form-control-feedback {
&.fa,
&.fas,
&.far,
&.fab,
&.glyphicon,
&.fal,
&.fad,
&.svg-inline--fa,
&.ion {
line-height: $input-height-lg;
}
@@ -64,20 +68,24 @@
&.fas,
&.far,
&.fab,
&.glyphicon,
&.fal,
&.fad,
&.svg-inline--fa,
&.ion {
line-height: $input-height-lg;
}
}
}
.input-sm + .form-control-feedback,
.input-sm + .form-control-feedback,
.input-group-sm + .form-control-feedback {
&.fa,
&.fas,
&.far,
&.fab,
&.glyphicon,
&.fal,
&.fad,
&.svg-inline--fa,
&.ion {
line-height: $input-height-sm;
}
@@ -89,20 +97,22 @@
&.fas,
&.far,
&.fab,
&.glyphicon,
&.fal,
&.fad,
&.svg-inline--fa,
&.ion {
line-height: $input-height-sm;
}
}
}
label:not(.form-check-label, .custom-file-label) {
label:not(.form-check-label):not(.custom-file-label) {
font-weight: $font-weight-bold;
}
.warning-feedback {
@include font-size($form-feedback-font-size);
color: theme-color('warning');
color: theme-color("warning");
display: none;
margin-top: $form-feedback-margin-top;
width: 100%;
@@ -111,8 +121,8 @@ label:not(.form-check-label, .custom-file-label) {
.warning-tooltip {
@include border-radius($form-feedback-tooltip-border-radius);
@include font-size($form-feedback-tooltip-font-size);
background-color: rgba(theme-color('warning'), $form-feedback-tooltip-opacity);
color: color-yiq(theme-color('warning'));
background-color: rgba(theme-color("warning"), $form-feedback-tooltip-opacity);
color: color-yiq(theme-color("warning"));
display: none;
line-height: $form-feedback-tooltip-line-height;
margin-top: .1rem;
@@ -125,7 +135,7 @@ label:not(.form-check-label, .custom-file-label) {
.form-control {
&.is-warning {
border-color: theme-color('warning');
border-color: theme-color("warning");
@if $enable-validation-icons {
// padding-right: $input-height-inner;
@@ -136,8 +146,8 @@ label:not(.form-check-label, .custom-file-label) {
}
&:focus {
border-color: theme-color('warning');
box-shadow: 0 0 0 $input-focus-width rgba(theme-color('warning'), .25);
border-color: theme-color("warning");
box-shadow: 0 0 0 $input-focus-width rgba(theme-color("warning"), .25);
}
~ .warning-feedback,
@@ -159,7 +169,7 @@ textarea.form-control {
.custom-select {
&.is-warning {
border-color: theme-color('warning');
border-color: theme-color("warning");
@if $enable-validation-icons {
// padding-right: $custom-select-feedback-icon-padding-right;
@@ -167,8 +177,8 @@ textarea.form-control {
}
&:focus {
border-color: theme-color('warning');
box-shadow: 0 0 0 $input-focus-width rgba(theme-color('warning'), .25);
border-color: theme-color("warning");
box-shadow: 0 0 0 $input-focus-width rgba(theme-color("warning"), .25);
}
~ .warning-feedback,
@@ -191,7 +201,7 @@ textarea.form-control {
.form-check-input {
&.is-warning {
~ .form-check-label {
color: theme-color('warning');
color: theme-color("warning");
}
~ .warning-feedback,
@@ -203,10 +213,10 @@ textarea.form-control {
.custom-control-input.is-warning {
~ .custom-control-label {
color: theme-color('warning');
color: theme-color("warning");
&::before {
border-color: theme-color('warning');
border-color: theme-color("warning");
}
}
@@ -217,18 +227,18 @@ textarea.form-control {
&:checked {
~ .custom-control-label::before {
@include gradient-bg(lighten(theme-color('warning'), 10%));
border-color: lighten(theme-color('warning'), 10%);
@include gradient-bg(lighten(theme-color("warning"), 10%));
border-color: lighten(theme-color("warning"), 10%);
}
}
&:focus {
~ .custom-control-label::before {
box-shadow: 0 0 0 $input-focus-width rgba(theme-color('warning'), .25);
box-shadow: 0 0 0 $input-focus-width rgba(theme-color("warning"), .25);
}
&:not(:checked) ~ .custom-control-label::before {
border-color: theme-color('warning');
border-color: theme-color("warning");
}
}
}
@@ -237,7 +247,7 @@ textarea.form-control {
.custom-file-input {
&.is-warning {
~ .custom-file-label {
border-color: theme-color('warning');
border-color: theme-color("warning");
}
~ .warning-feedback,
@@ -247,13 +257,39 @@ textarea.form-control {
&:focus {
~ .custom-file-label {
border-color: theme-color('warning');
box-shadow: 0 0 0 $input-focus-width rgba(theme-color('warning'), .25);
border-color: theme-color("warning");
box-shadow: 0 0 0 $input-focus-width rgba(theme-color("warning"), .25);
}
}
}
}
// body.text-sm support
body.text-sm {
.input-group-text {
font-size: $font-size-sm;
}
}
// custom .form-control styles
.form-control,
.custom-select {
&.form-control-border {
border-top: 0;
border-left: 0;
border-right: 0;
border-radius: 0;
box-shadow: inherit;
&.border-width-2 {
border-bottom-width: 2px;
}
&.border-width-3 {
border-bottom-width: 3px;
}
}
}
// custom switch color variations
.custom-switch {
@each $name, $color in $theme-colors {
@@ -275,3 +311,91 @@ textarea.form-control {
@include custom-range-variant($name, $color);
}
}
// custom control input variations
@each $name, $color in $theme-colors {
@include custom-control-input-variant($name, $color);
}
@each $name, $color in $colors {
@include custom-control-input-variant($name, $color);
}
.custom-control-input-outline {
~ .custom-control-label::before {
background-color: transparent !important;
box-shadow: none;
}
&:checked ~ .custom-control-label::before {
@include gradient-bg(transparent);
}
}
.dark-mode {
.form-control,
.custom-select,
.custom-file-label,
.custom-file-label::after,
.custom-control-label::before,
.input-group-text {
background-color: $dark;
color: $white;
}
.form-control:not(.form-control-navbar):not(.is-invalid):not(:focus) {
border-color: $gray-600;
}
select {
background-color: $dark;
color: $white;
border-color: $gray-600;
}
.input-group-text {
border-color: $gray-600;
}
.custom-control-input:disabled ~ .custom-control-label::before,
.custom-control-input[disabled] ~ .custom-control-label::before {
background-color: lighten($dark, 5%);
border-color: $gray-600;
color: $white;
}
.custom-range {
&::-webkit-slider-runnable-track {
background-color: lighten($dark, 7.5%);
}
&::-moz-range-track {
background-color: lighten($dark, 7.5%);
}
&::-ms-track {
background-color: lighten($dark, 7.5%);
}
}
.navbar-dark {
.btn-navbar,
.form-control-navbar {
background-color: $dark;
border: $input-border-width solid $gray-600;
}
.btn-navbar {
&:hover {
background-color: lighten($sidebar-dark-bg, 7.5%);
}
&:focus {
background-color: lighten($sidebar-dark-bg, 10%);
}
}
.form-control-navbar + .input-group-prepend,
.form-control-navbar + .input-group-append {
> .btn-navbar {
background-color: lighten($dark, 5%);
color: $white;
border: $input-border-width solid $gray-600;
border-left: none;
}
}
}
}

View File

@@ -1,17 +1,18 @@
//
// Component: Info Box
//
.info-box {
@extend .d-flex;
@extend .mb-3;
@include box-shadow($card-shadow);
@include border-radius($border-radius);
background: $white;
background-color: $white;
display: flex;
margin-bottom: map-get($spacers, 3);
min-height: 80px;
padding: .5rem;
position: relative;
width: 100%;
.progress {
background-color: rgba($black, .125);
@@ -24,16 +25,14 @@
}
.info-box-icon {
@extend .d-flex;
@extend .align-items-center;
@extend .justify-content-center;
@if $enable-rounded {
border-radius: $border-radius;
}
display: block;
align-items: center;
display: flex;
font-size: 1.875rem;
justify-content: center;
text-align: center;
width: 70px;
@@ -43,12 +42,17 @@
}
.info-box-content {
display: flex;
flex-direction: column;
justify-content: center;
line-height: 1.8;
flex: 1;
padding: 5px 10px;
padding: 0 10px;
}
.info-box-number {
display: block;
margin-top: .25rem;
font-weight: $font-weight-bold;
}
@@ -140,3 +144,10 @@
}
}
}
.dark-mode {
.info-box {
background-color: $dark;
color: $white;
}
}

View File

@@ -2,7 +2,7 @@
// Core: Layout
//
html {
html.scroll-smooth {
scroll-behavior: smooth;
}
@@ -15,8 +15,8 @@ body,
.wrapper {
position: relative;
& .content-wrapper {
min-height: calc(100vh - 112px);
.content-wrapper {
min-height: calc(100vh - #{$main-header-height} - #{$main-footer-height});
}
.layout-boxed & {
@@ -28,25 +28,92 @@ body,
max-width: $boxed-layout-max-width;
}
& .main-sidebar {
.main-sidebar {
left: inherit;
}
}
.layout-navbar-fixed.layout-fixed & {
.sidebar {
margin-top: $main-header-height;
@supports not (-webkit-touch-callout: none) {
.layout-fixed & .sidebar {
height: calc(100vh - (#{$main-header-height-inner} + #{$main-header-bottom-border-width}));
}
.layout-fixed.text-sm & .sidebar {
height: calc(100vh - (#{$main-header-height-sm-inner} + #{$main-header-bottom-border-width}));
}
}
.layout-navbar-fixed.sidebar-collapse & {
.layout-navbar-fixed.layout-fixed & {
.control-sidebar {
top: $main-header-height;
}
.main-header.text-sm ~ .control-sidebar {
top: $main-header-height-sm;
}
.sidebar {
margin-top: $main-header-height;
}
.brand-link.text-sm ~ .sidebar {
margin-top: $main-header-height-sm;
}
}
.layout-navbar-fixed.layout-fixed.text-sm & {
.control-sidebar {
top: $main-header-height-sm;
}
.sidebar {
margin-top: $main-header-height-sm;
}
}
.layout-navbar-fixed.sidebar-mini.sidebar-collapse &,
.layout-navbar-fixed.sidebar-mini-md.sidebar-collapse & {
.brand-link {
height: $main-header-height;
width: $sidebar-mini-width;
&.text-sm {
height: $main-header-height-sm;
}
}
}
.layout-navbar-fixed.sidebar-mini.sidebar-collapse.text-sm &,
.layout-navbar-fixed.sidebar-mini-md.sidebar-collapse.text-sm & {
.brand-link {
height: $main-header-height-sm;
}
}
body:not(.layout-fixed).layout-navbar-fixed & {
.main-sidebar {
// margin-top: calc(#{$main-header-height} / -1);
// .sidebar {
// margin-top: $main-header-height;
// }
}
}
body:not(.layout-fixed).layout-navbar-fixed.text-sm & {
.main-sidebar {
margin-top: calc(#{$main-header-height-sm} / -1);
.sidebar {
margin-top: $main-header-height-sm;
}
}
}
.layout-navbar-fixed & {
.control-sidebar {
top: 0;
}
a.anchor {
display: block;
position: relative;
@@ -66,16 +133,16 @@ body,
top: 0;
transition: width $transition-speed $transition-fn;
width: $sidebar-width;
z-index: $zindex-main-sidebar + 1;
z-index: $zindex-main-header + 1;
}
// Sidebar variants brand-link fix
@each $name, $color in $theme-colors {
.sidebar-dark-#{$name} .brand-link {
.sidebar-dark-#{$name} .brand-link:not([class*="navbar"]) {
background-color: $sidebar-dark-bg;
}
.sidebar-light-#{$name} .brand-link {
.sidebar-light-#{$name} .brand-link:not([class*="navbar"]) {
background-color: $sidebar-light-bg;
}
}
@@ -84,12 +151,22 @@ body,
margin-top: $main-header-height;
}
.main-header.text-sm ~ .content-wrapper {
margin-top: $main-header-height-sm;
}
.main-header {
left: 0;
position: fixed;
right: 0;
top: 0;
z-index: $zindex-main-sidebar - 1;
z-index: $zindex-main-header - 1;
}
}
.layout-navbar-fixed.text-sm & {
.content-wrapper {
margin-top: $main-header-height-sm;
}
}
@@ -108,17 +185,51 @@ body,
}
}
.layout-navbar-not-fixed.layout-fixed & {
.sidebar {
margin-top: 0;
}
}
@each $breakpoint in map-keys($grid-breakpoints) {
@include media-breakpoint-up($breakpoint) {
$infix: breakpoint-infix($breakpoint, $grid-breakpoints);
.layout#{$infix}-navbar-fixed.layout-fixed & {
.control-sidebar {
top: $main-header-height;
}
.text-sm & .main-header ~ .control-sidebar,
.main-header.text-sm ~ .control-sidebar {
top: $main-header-height-sm;
}
.sidebar {
margin-top: $main-header-height;
}
.text-sm & .brand-link ~ .sidebar,
.brand-link.text-sm ~ .sidebar {
margin-top: $main-header-height-sm;
}
}
.layout#{$infix}-navbar-fixed.layout-fixed.text-sm & {
.control-sidebar {
top: $main-header-height-sm;
}
.sidebar {
margin-top: $main-header-height-sm;
}
}
.layout#{$infix}-navbar-fixed & {
.control-sidebar {
top: 0;
}
a.anchor {
display: block;
position: relative;
@@ -130,6 +241,11 @@ body,
height: $main-header-height;
transition: width $transition-speed $transition-fn;
width: $sidebar-mini-width;
.text-sm &,
&.text-sm {
height: $main-header-height-sm;
}
}
.main-sidebar:hover {
@@ -146,16 +262,16 @@ body,
top: 0;
transition: width $transition-speed $transition-fn;
width: $sidebar-width;
z-index: $zindex-main-sidebar + 1;
z-index: $zindex-main-header + 1;
}
// Sidebar variants brand-link fix
@each $name, $color in $theme-colors {
.sidebar-dark-#{$name} .brand-link {
.sidebar-dark-#{$name} .brand-link:not([class*="navbar"]) {
background-color: $sidebar-dark-bg;
}
.sidebar-light-#{$name} .brand-link {
.sidebar-light-#{$name} .brand-link:not([class*="navbar"]) {
background-color: $sidebar-light-bg;
}
}
@@ -164,6 +280,11 @@ body,
margin-top: $main-header-height;
}
.text-sm & .main-header ~ .content-wrapper,
.main-header.text-sm ~ .content-wrapper {
margin-top: $main-header-height-sm;
}
.main-header {
left: 0;
position: fixed;
@@ -173,6 +294,32 @@ body,
}
}
.layout#{$infix}-navbar-fixed.text-sm & {
.content-wrapper {
margin-top: $main-header-height-sm;
}
}
body:not(.layout-fixed).layout#{$infix}-navbar-fixed & {
// .main-sidebar {
// margin-top: calc(#{$main-header-height} / -1);
// .sidebar {
// margin-top: $main-header-height;
// }
// }
}
body:not(.layout-fixed).layout#{$infix}-navbar-fixed.text-sm & {
.main-sidebar {
margin-top: calc(#{$main-header-height-sm} / -1);
.sidebar {
margin-top: $main-header-height-sm;
}
}
}
.layout#{$infix}-navbar-not-fixed & {
.brand-link {
position: static;
@@ -188,16 +335,25 @@ body,
}
}
.layout#{$infix}-navbar-not-fixed.layout-fixed & {
.sidebar {
margin-top: 0;
}
}
}
}
.layout-footer-fixed & {
.control-sidebar {
bottom: 0;
}
.main-footer {
bottom: 0;
left: 0;
position: fixed;
right: 0;
z-index: $zindex-main-sidebar - 1;
z-index: $zindex-main-footer;
}
}
@@ -214,18 +370,21 @@ body,
@each $breakpoint in map-keys($grid-breakpoints) {
@include media-breakpoint-up($breakpoint) {
$infix: breakpoint-infix($breakpoint, $grid-breakpoints);
.layout#{$infix}-footer-fixed & {
.control-sidebar {
bottom: 0;
}
.main-footer {
bottom: 0;
left: 0;
position: fixed;
right: 0;
z-index: $zindex-main-sidebar - 1;
z-index: $zindex-main-footer;
}
.content-wrapper {
margin-bottom: $main-footer-height;
padding-bottom: $main-footer-height;
}
}
@@ -240,43 +399,32 @@ body,
.layout-top-nav & {
margin-left: 0;
.main-header {
.brand-image {
margin-top: -.5rem;
margin-right: .2rem;
height: 33px;
}
}
& .main-sidebar {
.main-sidebar {
bottom: inherit;
height: inherit;
}
.brand-image {
height: 33px;
}
& .main-sidebar {
display: none;
}
& .content-wrapper,
& .main-header,
& .main-footer {
.content-wrapper,
.main-header,
.main-footer {
margin-left: 0;
}
}
}
.content-wrapper,
.main-footer,
.main-header {
@include media-breakpoint-up(sm) {
@include transition(margin-left $transition-speed $transition-fn);
margin-left: $sidebar-width;
z-index: 3000;
.sidebar-collapse & {
margin-left: 0;
}
}
@include media-breakpoint-down(sm) {
body.sidebar-collapse:not(.sidebar-mini-md):not(.sidebar-mini) {
.content-wrapper,
.main-footer,
.main-header {
&,
&::before {
margin-left: 0;
@@ -284,8 +432,54 @@ body,
}
}
body:not(.sidebar-mini-md) {
.content-wrapper,
.main-footer,
.main-header {
@include media-breakpoint-up(md) {
@include transition(margin-left $transition-speed $transition-fn);
margin-left: $sidebar-width;
.sidebar-collapse & {
margin-left: 0;
}
}
@include media-breakpoint-down(md) {
&,
&::before {
margin-left: 0;
}
}
}
}
.sidebar-mini-md {
.content-wrapper,
.main-footer,
.main-header {
@include media-breakpoint-up(md) {
@include transition(margin-left $transition-speed $transition-fn);
margin-left: $sidebar-width;
.sidebar-collapse & {
margin-left: $sidebar-mini-width;
}
}
@include media-breakpoint-down(md) {
&,
&::before {
margin-left: $sidebar-mini-width;
}
}
}
}
.content-wrapper {
background: $main-bg;
background-color: $main-bg;
> .content {
padding: $content-padding-y $content-padding-x;
@@ -300,11 +494,22 @@ body,
width: $sidebar-width;
}
.sidebar-collapse:not(.sidebar-mini):not(.sidebar-mini-md) & {
&,
&::before {
box-shadow: none !important;
}
}
.sidebar-collapse & {
&,
&::before {
margin-left: -$sidebar-width;
}
.nav-sidebar.nav-child-indent .nav-treeview {
padding: 0;
}
}
@include media-breakpoint-down(sm) {
@@ -345,35 +550,102 @@ body,
position: fixed;
top: 0;
}
.control-sidebar {
bottom: 0;
float: none;
height: 100vh;
position: fixed;
top: 0;
.control-sidebar-content {
height: calc(100vh - #{$main-header-height});
}
}
}
@supports (-webkit-touch-callout: none) {
.layout-fixed {
.main-sidebar {
height: inherit;
}
}
}
.main-footer {
background: $main-footer-bg;
background-color: $main-footer-bg;
border-top: $main-footer-border-top;
color: lighten($gray-700, 25%);
padding: $main-footer-padding;
.text-sm &,
&.text-sm {
padding: $main-footer-padding-sm;
}
}
.content-header {
padding: 15px $content-padding-x;
.text-sm & {
padding: 10px $content-padding-x;
}
h1 {
font-size: 1.8rem;
margin: 0;
.text-sm & {
font-size: 1.5rem;
}
}
.breadcrumb {
background: transparent;
background-color: transparent;
line-height: 1.8rem;
margin-bottom: 0;
padding: 0;
.text-sm & {
line-height: 1.5rem;
}
}
}
.hold-transition {
.content-wrapper,
.main-header,
.main-sidebar,
.main-sidebar *,
.control-sidebar,
.control-sidebar *,
.main-footer {
transition: none !important;
animation-duration: 0s !important;
}
}
.dark-mode {
background-color: lighten($dark, 7.5%) !important;
color: $white;
.breadcrumb-item {
&.active,
+ .breadcrumb-item::before {
color: $gray-500;
}
}
.main-footer {
background-color: $dark;
border-color: lighten($dark, 10%);
}
.content-wrapper {
background-color: lighten($dark, 7.5%);
color: $white;
.content-header {
color: $white;
}
}
}

View File

@@ -1,7 +1,7 @@
//
// Component: Main Header
//
.main-header {
border-bottom: $main-header-bottom-border;
z-index: $zindex-main-header;
@@ -11,12 +11,32 @@
position: relative;
}
.text-sm &,
&.text-sm {
.nav-link {
height: $nav-link-sm-height;
padding: $nav-link-sm-padding-y $nav-link-padding-x;
> .fa,
> .fas,
> .far,
> .fab,
> .fal,
> .fad,
> .svg-inline--fa,
> .ion {
font-size: $font-size-sm;
}
}
}
.navbar-nav {
.nav-item {
margin: 0;
}
&[class*='-right'] {
&[class*="-right"] {
.dropdown-menu {
left: auto;
margin-top: -3px;
@@ -29,6 +49,11 @@
}
}
}
&.dropdown-legacy .dropdown-menu {
top: $nav-link-height + $navbar-padding-y;
margin-top: 0;
}
}
// Add this class to images within a nav-link
@@ -55,7 +80,7 @@
.form-control-navbar {
border-right-width: 0;
& + .input-group-append {
+ .input-group-append {
margin-left: 0;
}
}
@@ -73,14 +98,17 @@
}
.form-control-navbar {
&::placeholder,
&::placeholder {
color: $main-header-dark-placeholder-color;
}
+ .input-group-append > .btn-navbar {
color: $main-header-dark-placeholder-color;
}
&:focus {
&,
& + .input-group-append .btn-navbar {
+ .input-group-append .btn-navbar {
background-color: $main-header-dark-form-control-focused-bg;
border: $main-header-dark-form-control-focused-border !important;
color: $main-header-dark-form-control-focused-color;
@@ -97,17 +125,17 @@
}
.form-control-navbar {
&:ms-placeholder,
&:moz-placeholder,
&::moz-placeholder,
&::placeholder,
&::placeholder {
color: $main-header-light-placeholder-color;
}
+ .input-group-append > .btn-navbar {
color: $main-header-light-placeholder-color;
}
&:focus {
&,
& + .input-group-append .btn-navbar {
+ .input-group-append .btn-navbar {
background-color: $main-header-light-form-control-focused-bg;
border: $main-header-light-form-control-focused-border !important;
color: $main-header-light-form-control-focused-color;

View File

@@ -6,11 +6,20 @@
height: 100vh;
overflow-y: hidden;
z-index: $zindex-main-sidebar;
// Remove Firefox Focusring
a {
&:-moz-focusring {
border: 0;
outline: none;
}
}
}
.sidebar {
height: calc(100% - 4rem);
overflow-y: auto;
height: calc(100% - (#{$main-header-height-inner} + #{$main-header-bottom-border-width}));
overflow-y: initial;
padding-bottom: $sidebar-padding-y;
padding-left: $sidebar-padding-x;
padding-right: $sidebar-padding-x;
@@ -21,11 +30,11 @@
.user-panel {
position: relative;
[class*='sidebar-dark'] & {
[class*="sidebar-dark"] & {
border-bottom: 1px solid lighten($dark, 12%);
}
[class*='sidebar-light'] & {
[class*="sidebar-light"] & {
border-bottom: 1px solid $gray-300;
}
@@ -69,13 +78,19 @@
}
}
.nav-link > .right,
.nav-link > p > .right {
position: absolute;
right: 1rem;
top: 12px;
top: .7rem;
i,
span {
margin-left: .5rem;
}
&:nth-child(2) {
right: 2.5rem;
right: 2.2rem;
}
}
@@ -83,7 +98,10 @@
> .nav-treeview {
display: block;
}
}
.menu-open,
.menu-is-opening {
> .nav-link {
i.right {
@include rotate(-90deg);
@@ -96,6 +114,7 @@
margin-bottom: 0;
.nav-icon {
margin-left: .05rem;
font-size: 1.2rem;
margin-right: .2rem;
text-align: center;
@@ -105,7 +124,9 @@
&.fas,
&.far,
&.fab,
&.glyphicon,
&.fal,
&.fad,
&.svg-inline--fa,
&.ion {
font-size: 1.1rem;
}
@@ -133,7 +154,26 @@
&.nav-child-indent {
.nav-treeview {
transition: padding $transition-speed $transition-fn;
padding-left: 1rem;
.text-sm & {
padding-left: .5rem;
}
}
&.nav-legacy {
.nav-treeview {
.nav-treeview {
padding-left: 2rem;
margin-left: -1rem;
.text-sm & {
padding-left: 1rem;
margin-left: -.5rem;
}
}
}
}
}
@@ -152,6 +192,14 @@
}
}
.sidebar-is-opening .nav-sidebar {
.nav-link p {
animation-name: fadeIn;
animation-duration: $transition-speed;
animation-fill-mode: both;
}
}
#sidebar-overlay {
@include media-breakpoint-down(md) {
.sidebar-open & {
@@ -159,7 +207,7 @@
}
}
background-color: rgba($black, 0.1);
background-color: rgba($black, .1);
bottom: 0;
display: none;
left: 0;
@@ -169,20 +217,7 @@
z-index: $zindex-main-sidebar - 1;
}
.sidebar-mini-md {
&.sidebar-open {
#sidebar-overlay {
@include media-breakpoint-up(sm) {
display: none;
}
@include media-breakpoint-down(sm) {
display: block;
}
}
}
}
[class*='sidebar-light-'] {
[class*="sidebar-light-"] {
// Sidebar background color
background-color: $sidebar-light-bg;
@@ -193,13 +228,13 @@
}
.status {
background: $sidebar-light-hover-bg;
background-color: $sidebar-light-hover-bg;
color: $sidebar-light-color;
&:hover,
&:focus,
&:active {
background: darken($sidebar-light-hover-bg, 3%);
background-color: darken($sidebar-light-hover-bg, 3%);
color: $sidebar-light-hover-color;
}
}
@@ -236,19 +271,19 @@
color: $sidebar-light-active-color;
@if $enable-shadows {
@extend .elevation-1;
box-shadow: map-get($elevations, 1);
}
}
// First Level Submenu
> .nav-treeview {
background: $sidebar-light-submenu-bg;
background-color: $sidebar-light-submenu-bg;
}
}
// Section Heading
.nav-header {
background: inherit;
background-color: inherit;
color: darken($sidebar-light-color, 5%);
}
@@ -283,9 +318,29 @@
}
}
}
// Flat style
.nav-flat {
.nav-item {
.nav-treeview {
.nav-treeview {
border-color: $sidebar-light-submenu-active-bg;
}
> .nav-item {
> .nav-link {
&,
&.active {
border-color: $sidebar-light-submenu-active-bg;
}
}
}
}
}
}
}
[class*='sidebar-dark-'] {
[class*="sidebar-dark-"] {
// Sidebar background color
background-color: $sidebar-dark-bg;
@@ -296,13 +351,13 @@
}
.status {
background: $sidebar-dark-hover-bg;
background-color: $sidebar-dark-hover-bg;
color: $sidebar-dark-color;
&:hover,
&:focus,
&:active {
background: darken($sidebar-dark-hover-bg, 3%);
background-color: darken($sidebar-dark-hover-bg, 3%);
color: $sidebar-dark-hover-color;
}
}
@@ -330,7 +385,7 @@
// Hover and active states
&.menu-open > .nav-link,
&:hover > .nav-link,
& > .nav-link:focus {
> .nav-link:focus {
background-color: $sidebar-dark-hover-bg;
color: $sidebar-dark-hover-color;
}
@@ -339,19 +394,19 @@
color: $sidebar-dark-hover-color;
@if $enable-shadows {
@extend .elevation-1;
box-shadow: map-get($elevations, 1);
}
}
// First Level Submenu
> .nav-treeview {
background: $sidebar-dark-submenu-bg;
background-color: $sidebar-dark-submenu-bg;
}
}
// Section Heading
.nav-header {
background: inherit; //darken($sidebar-dark-bg, 3%);
background-color: inherit; //darken($sidebar-dark-bg, 3%);
color: lighten($sidebar-dark-color, 5%);
}
@@ -390,20 +445,681 @@
}
}
}
// Flat Style
.nav-flat {
.nav-item {
.nav-treeview {
.nav-treeview {
border-color: $sidebar-dark-submenu-active-bg;
}
> .nav-item {
> .nav-link {
&,
&.active {
border-color: $sidebar-dark-submenu-active-bg;
}
}
}
}
}
}
}
// Sidebar variants
@each $name, $color in $theme-colors {
.sidebar-dark-#{$name},
.sidebar-light-#{$name} {
@include sidebar-color($color)
@include sidebar-color($color);
}
}
@each $name, $color in $colors {
.sidebar-dark-#{$name},
.sidebar-light-#{$name} {
@include sidebar-color($color)
@include sidebar-color($color);
}
}
.sidebar-mini .main-sidebar:not(.sidebar-no-expand),
.sidebar-mini-md .main-sidebar:not(.sidebar-no-expand),
.sidebar-mini .main-sidebar:not(.sidebar-no-expand):hover,
.sidebar-mini-md .main-sidebar:not(.sidebar-no-expand):hover,
.sidebar-mini .main-sidebar.sidebar-focused,
.sidebar-mini-md .main-sidebar.sidebar-focused {
.nav-compact.nav-sidebar.nav-child-indent:not(.nav-flat) .nav-treeview {
padding-left: 1rem;
margin-left: -.5rem;
}
}
// Nav Flat
.nav-flat {
margin: (-$sidebar-padding-x / 2) (-$sidebar-padding-x) 0;
.nav-item {
> .nav-link {
border-radius: 0;
margin-bottom: 0;
> .nav-icon {
margin-left: .55rem;
}
}
}
&:not(.nav-child-indent) {
.nav-treeview {
.nav-item {
> .nav-link {
> .nav-icon {
margin-left: .4rem;
}
}
}
}
}
&.nav-child-indent {
.nav-treeview {
padding-left: 0;
.nav-icon {
margin-left: .85rem;
}
.nav-treeview {
border-left: .2rem solid;
.nav-icon {
margin-left: 1.15rem;
}
.nav-treeview {
.nav-icon {
margin-left: 1.45rem;
}
.nav-treeview {
.nav-icon {
margin-left: 1.75rem;
}
.nav-treeview {
.nav-icon {
margin-left: 2.05rem;
}
}
}
}
}
}
}
.sidebar-collapse &.nav-child-indent {
.nav-treeview {
.nav-icon {
margin-left: .55rem;
}
.nav-link {
padding-left: calc(#{$nav-link-padding-x} - .2rem);
}
.nav-treeview {
.nav-icon {
margin-left: .35rem;
}
.nav-treeview {
.nav-icon {
margin-left: .15rem;
}
.nav-treeview {
.nav-icon {
margin-left: -.15rem;
}
.nav-treeview {
.nav-icon {
margin-left: -.35rem;
}
}
}
}
}
}
}
.sidebar-mini .main-sidebar:not(.sidebar-no-expand):hover &,
.sidebar-mini-md .main-sidebar:not(.sidebar-no-expand):hover &,
.sidebar-mini .main-sidebar.sidebar-focused &,
.sidebar-mini-md .main-sidebar.sidebar-focused & {
&.nav-compact.nav-sidebar .nav-treeview {
.nav-icon {
margin-left: .4rem;
}
}
&.nav-sidebar.nav-child-indent .nav-treeview {
.nav-icon {
margin-left: .85rem;
}
.nav-treeview {
.nav-icon {
margin-left: 1.15rem;
}
.nav-treeview {
.nav-icon {
margin-left: 1.45rem;
}
.nav-treeview {
.nav-icon {
margin-left: 1.75rem;
}
.nav-treeview {
.nav-icon {
margin-left: 2.05rem;
}
}
}
}
}
}
}
.nav-icon {
@include transition(margin-left $transition-fn $transition-speed);
}
.nav-treeview {
.nav-icon {
margin-left: -.2rem;
}
}
&.nav-sidebar > .nav-item {
.nav-treeview,
> .nav-treeview {
background-color: rgba($white, .05);
.nav-item {
> .nav-link {
border-left: .2rem solid;
}
}
}
}
}
.nav-legacy {
margin: (-$sidebar-padding-x / 2) (-$sidebar-padding-x) 0;
&.nav-sidebar .nav-item {
> .nav-link {
border-radius: 0;
margin-bottom: 0;
> .nav-icon {
margin-left: .55rem;
.text-sm & {
margin-left: .75rem;
}
}
}
}
&.nav-sidebar > .nav-item {
> .nav-link {
&.active {
background-color: inherit;
border-left: 3px solid transparent;
box-shadow: none;
> .nav-icon {
margin-left: calc(.55rem - 3px);
.text-sm & {
margin-left: calc(.75rem - 3px);
}
}
}
}
}
.text-sm &.nav-sidebar.nav-flat .nav-treeview {
.nav-item {
> .nav-link {
> .nav-icon {
margin-left: calc(.75rem - 3px);
}
}
}
}
.sidebar-mini &,
.sidebar-mini-md & {
> .nav-item .nav-link {
.nav-icon {
@include transition(margin-left $transition-fn $transition-speed);
margin-left: .75rem;
}
}
}
.sidebar-mini.sidebar-collapse .main-sidebar.sidebar-focused &.nav-child-indent,
.sidebar-mini.sidebar-collapse .main-sidebar:hover &.nav-child-indent,
.sidebar-mini-md.sidebar-collapse .main-sidebar.sidebar-focused &.nav-child-indent,
.sidebar-mini-md.sidebar-collapse .main-sidebar:hover &.nav-child-indent {
.nav-treeview {
padding-left: 1rem;
.nav-treeview {
padding-left: 2rem;
margin-left: -1rem;
}
}
}
.sidebar-mini.sidebar-collapse.text-sm .main-sidebar.sidebar-focused &.nav-child-indent,
.sidebar-mini.sidebar-collapse.text-sm .main-sidebar:hover &.nav-child-indent,
.sidebar-mini-md.sidebar-collapse.text-sm .main-sidebar.sidebar-focused &.nav-child-indent,
.sidebar-mini-md.sidebar-collapse.text-sm .main-sidebar:hover &.nav-child-indent {
.nav-treeview {
padding-left: .5rem;
.nav-treeview {
padding-left: 1rem;
margin-left: -.5rem;
}
}
}
.sidebar-mini.sidebar-collapse &,
.sidebar-mini-md.sidebar-collapse & {
> .nav-item > .nav-link {
.nav-icon {
margin-left: .55rem;
}
&.active {
> .nav-icon{
margin-left: .36rem;
}
}
}
&.nav-child-indent {
.nav-treeview {
.nav-treeview {
padding-left: 0;
margin-left: 0;
}
}
}
}
.sidebar-mini.sidebar-collapse.text-sm &,
.sidebar-mini-md.sidebar-collapse.text-sm & {
> .nav-item > .nav-link {
.nav-icon {
margin-left: .75rem;
}
&.active {
> .nav-icon{
margin-left: calc(.75rem - 3px);
}
}
}
}
[class*="sidebar-dark"] & {
&.nav-sidebar > .nav-item {
.nav-treeview,
> .nav-treeview {
background-color: rgba($white, .05);
}
> .nav-link.active {
color: $sidebar-dark-active-color;
}
}
.nav-treeview > .nav-item > .nav-link {
&.active,
&:focus,
&:hover {
background-color: transparent;
color: $sidebar-dark-active-color;
}
}
}
[class*="sidebar-light"] & {
&.nav-sidebar > .nav-item {
.nav-treeview,
> .nav-treeview {
background-color: rgba($black, .05);
}
> .nav-link.active {
color: $sidebar-light-active-color;
}
}
.nav-treeview > .nav-item > .nav-link {
&.active,
&:focus,
&:hover {
background-color: transparent;
color: $sidebar-light-active-color;
}
}
}
}
.nav-collapse-hide-child {
.menu-open > .nav-treeview {
max-height: min-content;
animation-name: fadeIn;
animation-duration: $transition-speed;
animation-fill-mode: both;
}
.sidebar-collapse & {
.menu-open > .nav-treeview {
max-height: 0;
animation-name: fadeOut;
animation-duration: $transition-speed;
animation-fill-mode: both;
}
}
.sidebar-mini.sidebar-collapse .main-sidebar.sidebar-focused &,
.sidebar-mini.sidebar-collapse .main-sidebar:not(.sidebar-no-expand):hover &,
.sidebar-mini-md.sidebar-collapse .main-sidebar.sidebar-focused &,
.sidebar-mini-md.sidebar-collapse .main-sidebar:not(.sidebar-no-expand):hover & {
.menu-open > .nav-treeview {
max-height: min-content;
animation-name: fadeIn;
animation-duration: $transition-speed;
animation-fill-mode: both;
}
}
}
// Nav Compact
.nav-compact {
.nav-link,
.nav-header {
padding-top: ($nav-link-padding-y / 2);
padding-bottom: ($nav-link-padding-y / 2);
}
.nav-header:not(:first-of-type) {
padding-top: ($nav-link-padding-y * 1.5);
padding-bottom: ($nav-link-padding-y / 2);
}
.nav-link > .right,
.nav-link > p > .right {
top: .465rem;
}
.text-sm & {
.nav-link > .right,
.nav-link > p > .right {
top: .7rem;
}
}
}
// Sidebar Form Control
[class*="sidebar-dark"] {
.form-control-sidebar,
.btn-sidebar {
background-color: lighten($sidebar-dark-bg, 5%);
border: 1px solid lighten($sidebar-dark-bg, 15%);
color: lighten(color-yiq(lighten($sidebar-dark-bg, 5%)), 15%);
}
.form-control-sidebar:focus,
.btn-sidebar:focus {
border: 1px solid lighten($sidebar-dark-bg, 30%);
}
.btn-sidebar:hover {
background-color: lighten($sidebar-dark-bg, 7.5%);
}
.btn-sidebar:focus {
background-color: lighten($sidebar-dark-bg, 10%);
}
.list-group-item {
background-color: lighten($sidebar-dark-bg, 7.5%);
border-color: lighten($sidebar-dark-bg, 15%);
color: $sidebar-dark-color;
&:hover {
background-color: lighten($sidebar-dark-bg, 10%);
}
&:focus {
background-color: lighten($sidebar-dark-bg, 12.5%);
}
.search-path {
color: $gray-500;
}
}
}
[class*="sidebar-light"] {
.form-control-sidebar,
.btn-sidebar {
background-color: darken($sidebar-light-bg, 5%);
border: 1px solid darken($sidebar-light-bg, 15%);
color: color-yiq(darken($sidebar-light-bg, 5%));
}
.form-control-sidebar:focus,
.btn-sidebar:focus {
border: 1px solid darken($sidebar-light-bg, 30%);
}
.btn-sidebar:hover {
background-color: darken($sidebar-light-bg, 7.5%);
}
.btn-sidebar:focus {
background-color: darken($sidebar-light-bg, 10%);
}
.list-group-item {
border-color: darken($sidebar-light-bg, 15%);
&:hover {
background-color: darken($sidebar-light-bg, 7.5%);
}
&:focus {
background-color: darken($sidebar-light-bg, 10%);
}
.search-path {
color: $gray-600;
}
}
}
// Sidebar inline input-group fix
.sidebar .form-inline .input-group {
width: 100%;
}
.sidebar nav .form-inline {
margin-bottom: .2rem;
}
// Sidebar Collapse on Layout Boxed
.layout-boxed:not(.sidebar-mini):not(.sidebar-mini-md) {
&.sidebar-collapse .main-sidebar {
margin-left: 0;
}
.content-wrapper,
.main-header,
.main-footer {
z-index: 9999;
position: relative;
}
}
// Sidebar Search
.sidebar-collapse {
.form-control-sidebar,
.form-control-sidebar ~ .input-group-append,
.sidebar-search-results {
display: none;
}
}
[data-widget="sidebar-search"] {
input[type="search"] {
&::-ms-clear,
&::-ms-reveal {
display: none;
width: 0;
height: 0;
}
&::-webkit-search-cancel-button,
&::-webkit-search-decoration,
&::-webkit-search-results-button,
&::-webkit-search-results-decoration {
display: none;
}
}
}
.sidebar-search-results {
position: relative;
display: none;
width: 100%;
.sidebar-search-open & {
display: inline-block;
}
.search-title {
margin-bottom: -.1rem;
}
.list-group {
position: absolute;
width: 100%;
z-index: $zindex-main-sidebar + 1;
> .list-group-item {
padding: $input-padding-y $input-padding-x;
&:-moz-focusring {
margin-top: 0;
border-left: 1px solid transparent;
border-top: 0;
border-bottom: 1px solid transparent;
}
&:first-child {
margin-top: 0;
border-top: 0;
@include border-top-radius(0);
}
}
}
}
.sidebar-search-results .search-path {
font-size: $small-font-size;
}
.sidebar-search-open {
.btn,
.form-control {
@include border-bottom-radius(0);
}
}
// Custom Area
.sidebar-custom {
[class*="sidebar-dark"] & {
border-top: 1px solid lighten($dark, 12%);
}
[class*="sidebar-light"] & {
border-top: 1px solid $gray-300;
}
}
.layout-fixed {
&.sidebar-collapse {
.hide-on-collapse {
display: none;
}
}
&.sidebar-collapse:hover {
.hide-on-collapse {
display: block;
}
}
.main-sidebar-custom {
.sidebar {
height: calc(100% - ((#{$main-header-height-inner} + #{$sidebar-custom-height}) + #{$main-header-bottom-border-width}));
}
.sidebar-custom {
height: $sidebar-custom-height;
padding: $sidebar-custom-padding-x $sidebar-custom-padding-y;
}
}
.main-sidebar-custom-lg {
.sidebar {
height: calc(100% - ((#{$main-header-height-inner} + #{$sidebar-custom-height-lg}) + #{$main-header-bottom-border-width}));
}
.sidebar-custom {
height: $sidebar-custom-height-lg;
}
}
.main-sidebar-custom-xl {
.sidebar {
height: calc(100% - ((#{$main-header-height-inner} + #{$sidebar-custom-height-xl}) + #{$main-header-bottom-border-width}));
}
.sidebar-custom {
height: $sidebar-custom-height-xl;
}
}
.main-sidebar-custom,
.main-sidebar-custom-lg,
.main-sidebar-custom-xl {
.pos-right {
position: absolute;
right: .5rem;
}
}
}

View File

@@ -47,12 +47,12 @@
.list-header {
color: $gray-600;
font-size: 15px;
font-weight: bold;
font-weight: 700;
padding: 10px 4px;
}
.list-seperator {
background: $card-border-color;
background-color: $card-border-color;
height: 1px;
margin: 15px 0 9px;
}
@@ -70,7 +70,7 @@
// User block
.user-block {
@include clearfix;
float: left;
img {
float: left;
@@ -88,16 +88,19 @@
.username {
font-size: 16px;
font-weight: 600;
margin-top: -1px;
}
.description {
color: #999;
color: $gray-600;
font-size: 13px;
margin-top: -3px;
}
&.user-block-sm {
img {
@extend .img-sm;
width: $img-size-sm;
height: $img-size-sm;
}
.username,
@@ -120,29 +123,29 @@
}
.img-sm {
height: 30px !important;
width: 30px !important;
height: $img-size-sm;
width: $img-size-sm;
+ .img-push {
margin-left: 40px;
margin-left: $img-size-sm + $img-size-push;
}
}
.img-md {
width: 60px;
height: 60px;
width: $img-size-md;
height: $img-size-md;
+ .img-push {
margin-left: 70px;
margin-left: $img-size-md + $img-size-push;
}
}
.img-lg {
width: 100px;
height: 100px;
width: $img-size-lg;
height: $img-size-lg;
+ .img-push {
margin-left: 110px;
margin-left: $img-size-lg + $img-size-push;
}
}
@@ -159,7 +162,7 @@
// Rounded and Circle Images
.img-rounded {
@include border-radius($border-radius)
@include border-radius($border-radius);
}
.img-circle {
@@ -213,7 +216,7 @@
// General attachemnt block
.attachment-block {
background: $gray-100;
background-color: $gray-100;
border: 1px solid $card-border-color;
margin-bottom: 10px;
padding: 5px;
@@ -256,7 +259,7 @@
.overlay {
@include border-radius($border-radius);
align-items: center;
background: rgba($white, 0.7);
background-color: rgba($white, .7);
display: flex;
justify-content: center;
z-index: 50;
@@ -265,19 +268,23 @@
> .fas,
> .far,
> .fab,
> .glyphicon,
> .fal,
> .fad,
> .svg-inline--fa,
> .ion {
color: $gray-800;
}
&.dark {
background: rgba($black, 0.5);
background-color: rgba($black, .5);
> .fa,
> .fas,
> .far,
> .fab,
> .glyphicon,
> .fal,
> .fad,
> .svg-inline--fa,
> .ion {
color: $gray-400;
}
@@ -285,6 +292,26 @@
}
}
.tab-pane {
// Box overlay for LOADING STATE effect on Tab Panels
> .overlay-wrapper {
position: relative;
> .overlay {
border-top-left-radius: 0;
border-top-right-radius: 0;
flex-direction: column;
margin-top: -$card-spacer-x;
margin-left: -$card-spacer-x;
height: calc(100% + 2 * #{$card-spacer-x});
width: calc(100% + 2 * #{$card-spacer-x});
&.dark {
color: $white;
}
}
}
}
// Ribbon
.ribbon-wrapper {
height: $ribbon-wrapper-size;
@@ -337,7 +364,7 @@
border-right: $ribbon-border-size solid transparent;
border-top: $ribbon-border-size solid #9e9e9e;
bottom: -$ribbon-border-size;
content: '';
content: "";
position: absolute;
}
@@ -356,6 +383,7 @@
bottom: 1.25rem;
position: fixed;
right: 1.25rem;
z-index: $zindex-control-sidebar + 1;
&:focus {
box-shadow: none;
@@ -369,13 +397,13 @@ pre {
// Blockquotes styles
blockquote {
background: $white;
background-color: $white;
border-left: .7rem solid $primary;
margin: 1.5em .7rem;
padding: 0.5em .7rem;
padding: .5em .7rem;
.box & {
background: $gray-200;
background-color: $gray-200;
}
p:last-child {
@@ -440,3 +468,44 @@ blockquote {
margin-bottom: .5rem;
padding-bottom: .5rem;
}
// Badge BTN Style
.badge-btn {
border-radius: $button-border-radius-xs;
font-size: $button-font-size-xs;
font-weight: 400;
padding: $button-padding-y-xs * 2 $button-padding-x-xs * 2;
}
.badge-btn.badge-pill {
padding: .375rem .6rem;
}
.dark-mode {
a:not(.btn):hover {
color: lighten($link-color, 10%);
}
.attachment-block {
background-color: lighten($dark, 3.75%);
.attachment-text {
color: $gray-400;
}
}
blockquote {
background-color: lighten($dark, 5%);
}
.close,
.mailbox-attachment-close {
color: $gray-500;
text-shadow: 0 1px 0 $gray-700;
}
.tab-custom-content {
border-color: $gray-600;
}
.list-group-item {
background-color: $dark;
border-color: $gray-600;
}
}

View File

@@ -2,423 +2,12 @@
// General: Mixins
//
// Cards Variant
@mixin cards-variant($name, $color) {
.card-#{$name} {
&:not(.card-outline) {
.card-header {
background-color: $color;
border-bottom: 0;
&,
a {
color: color-yiq($color);
}
}
}
&.card-outline {
border-top: 3px solid $color;
}
}
.bg-#{$name},
.bg-#{$name}-gradient,
.card-#{$name}:not(.card-outline) {
.btn-tool {
color: rgba(color-yiq($color), 0.8);
&:hover {
color: color-yiq($color);
}
}
}
.card.bg-#{$name},
.card.bg-#{$name}-gradient {
.bootstrap-datetimepicker-widget {
.table td,
.table th {
border: none;
}
table thead tr:first-child th:hover,
table td.day:hover,
table td.hour:hover,
table td.minute:hover,
table td.second:hover {
background: darken($color, 8%);
color: color-yiq($color);
}
table td.active,
table td.active:hover {
background: lighten($color, 10%);
color: color-yiq($color);
}
}
}
}
// Sidebar Color
@mixin sidebar-color($color) {
.nav-sidebar > .nav-item {
& > .nav-link.active {
background-color: $color;
color: color-yiq($color);
}
}
}
// Sidebar Mini Breakpoints
@mixin sidebar-mini-breakpoint() {
// A fix for text overflow while transitioning from sidebar mini to full sidebar
.nav-sidebar,
.nav-sidebar > .nav-header,
.nav-sidebar .nav-link {
white-space: nowrap;
overflow: hidden;
}
// When the sidebar is collapsed...
&.sidebar-collapse {
.d-hidden-mini {
display: none;
}
// Apply the new margins to the main content and footer
.content-wrapper,
.main-footer,
.main-header {
margin-left: $sidebar-mini-width !important;
}
// Make the sidebar headers
.nav-sidebar .nav-header {
display: none;
}
.nav-sidebar .nav-link p {
width: 0;
}
.sidebar .user-panel > .info,
.nav-sidebar .nav-link p,
.brand-text {
margin-left: -10px;
opacity: 0;
visibility: hidden;
}
.logo-xl {
opacity: 0;
visibility: hidden;
}
.logo-xs {
display: inline-block;
opacity: 1;
visibility: visible;
}
// Modify the sidebar to shrink instead of disappearing
.main-sidebar {
overflow-x: hidden;
&,
&::before {
// Don't go away! Just shrink
margin-left: 0;
width: $sidebar-mini-width;
}
.user-panel {
.image {
float: none;
}
}
&:hover,
&.sidebar-focused {
width: $sidebar-width;
.brand-link {
width: $sidebar-width;
}
.user-panel {
text-align: left;
.image {
float: left;
}
}
.user-panel > .info,
.nav-sidebar .nav-link p,
.brand-text,
.logo-xl {
display: inline-block;
margin-left: 0;
opacity: 1;
visibility: visible;
}
.logo-xs {
opacity: 0;
visibility: hidden;
}
.brand-image {
margin-right: .5rem;
}
// Make the sidebar links, menus, labels, badges
// and angle icons disappear
.sidebar-form,
.user-panel > .info {
display: block !important;
-webkit-transform: translateZ(0);
}
.nav-sidebar > .nav-item > .nav-link > span {
display: inline-block !important;
}
}
}
// Make an element visible only when sidebar mini is active
.visible-sidebar-mini {
display: block !important;
}
&.layout-fixed {
.main-sidebar:hover {
.brand-link {
width: $sidebar-width;
}
}
.brand-link {
width: $sidebar-mini-width;
}
}
}
}
// Navbar Variant
@mixin navbar-variant($color, $font-color: rgba(255, 255, 255, 0.8), $hover-color: #f6f6f6, $hover-bg: rgba(0, 0, 0, 0.1)) {
background-color: $color;
.nav > li > a {
color: $font-color;
}
.nav > li > a:hover,
.nav > li > a:active,
.nav > li > a:focus,
.nav .open > a,
.nav .open > a:hover,
.nav .open > a:focus,
.nav > .active > a {
background: $hover-bg;
color: $hover-color;
}
// Add color to the sidebar toggle button
.sidebar-toggle {
color: $font-color;
&:hover,
&:focus {
background: $hover-bg;
color: $hover-color;
}
}
}
// Logo color Variant
@mixin logo-variant($bg-color, $color: #fff, $border-bottom-color: transparent, $border-bottom-width: 0) {
background-color: $bg-color;
border-bottom: $border-bottom-width solid $border-bottom-color;
color: $color;
&:hover,
&:focus {
background-color: darken($bg-color, 1%);
}
}
// Direct Chat Variant
@mixin direct-chat-variant($bg-color, $color: #fff) {
.right > .direct-chat-text {
background: $bg-color;
border-color: $bg-color;
color: color-yiq($bg-color);
&::after,
&::before {
border-left-color: $bg-color;
}
}
}
// Background Variant
@mixin background-variant($name, $color) {
.bg-#{$name} {
background-color: #{$color};
&,
> a {
color: color-yiq($color) !important;
}
&.btn {
&:hover {
border-color: darken($color, 10%);
color: color-yiq(darken($color, 7.5%));
}
&:active,
&.active {
border-color: darken($color, 12.5%);
color: color-yiq(darken($color, 10%));
}
}
}
}
// Background Gradient Variant
@mixin background-gradient-variant($name, $color) {
.bg-gradient-#{$name} {
@include bg-gradient-variant('&', $color);
color: color-yiq($color);
&.btn {
&.disabled,
&:disabled,
&:not(:disabled):not(.disabled):active,
&:not(:disabled):not(.disabled).active,
.show > &.dropdown-toggle {
background-image: none !important;
}
&:hover {
@include bg-gradient-variant('&', darken($color, 7.5%));
border-color: darken($color, 10%);
color: color-yiq(darken($color, 7.5%));
}
&:active,
&.active {
@include bg-gradient-variant('&', darken($color, 10%));
border-color: darken($color, 12.5%);
color: color-yiq(darken($color, 10%));
}
}
}
}
// Custom Switch Variant
@mixin custom-switch-variant($name, $color) {
&.custom-switch-off-#{$name} {
& .custom-control-input ~ .custom-control-label::before {
background: #{$color};
border-color: darken($color, 20%);
}
& .custom-control-input ~ .custom-control-label::after {
background: darken($color, 25%);
}
}
&.custom-switch-on-#{$name} {
& .custom-control-input:checked ~ .custom-control-label::before {
background: #{$color};
border-color: darken($color, 20%);
}
& .custom-control-input:checked ~ .custom-control-label::after {
background: lighten($color, 30%);
}
}
}
// Custom Range Variant
@mixin custom-range-variant($name, $color) {
&.custom-range-#{$name} {
&:focus {
outline: none;
&::-webkit-slider-thumb {
box-shadow: 0 0 0 1px $body-bg, 0 0 0 $input-btn-focus-width rgba($color, .25);
}
&::-moz-range-thumb {
box-shadow: 0 0 0 1px $body-bg, 0 0 0 $input-btn-focus-width rgba($color, .25);
}
&::-ms-thumb {
box-shadow: 0 0 0 1px $body-bg, 0 0 0 $input-btn-focus-width rgba($color, .25);
}
}
&::-webkit-slider-thumb {
background-color: $color;
&:active {
background-color: lighten($color, 35%);
}
}
&::-moz-range-thumb {
background-color: $color;
&:active {
background-color: lighten($color, 35%);
}
}
&::-ms-thumb {
background-color: $color;
&:active {
background-color: lighten($color, 35%);
}
}
}
}
// ETC
@mixin translate($x, $y) {
transform: translate($x, $y);
}
// Different radius each side
@mixin border-radius-sides($top-left, $top-right, $bottom-left, $bottom-right) {
border-radius: $top-left $top-right $bottom-left $bottom-right;
}
@mixin calc($property, $expression) {
#{$property}: calc(#{$expression});
}
@mixin rotate($value) {
transform: rotate($value);
}
@mixin animation($animation) {
animation: $animation;
}
// Gradient background
@mixin gradient($color: #F5F5F5, $start: #EEE, $stop: #FFF) {
background: $color;
background: -webkit-gradient(linear, left bottom, left top, color-stop(0, $start), color-stop(1, $stop));
background: -ms-linear-gradient(bottom, $start, $stop);
background: -moz-linear-gradient(center bottom, $start 0%, $stop 100%);
background: -o-linear-gradient($stop, $start);
}
@import "mixins/cards";
@import "mixins/sidebar";
@import "mixins/navbar";
@import "mixins/accent";
@import "mixins/custom-forms";
@import "mixins/backgrounds";
@import "mixins/direct-chat";
@import "mixins/toasts";
@import "mixins/miscellaneous";

View File

@@ -34,6 +34,39 @@
&.bg-success, {
.close {
color: $white;
text-shadow: 0 1px 0 $black;
}
}
}
.dark-mode {
.modal-header,
.modal-footer {
border-color: $gray-600;
}
.modal-content {
background-color: $dark;
&.bg-warning {
.modal-header,
.modal-footer {
border-color: $gray-600;
}
.close {
color: $dark !important;
text-shadow: 0 1px 0 $gray-700 !important;
}
}
&.bg-primary,
&.bg-secondary,
&.bg-info,
&.bg-danger,
&.bg-success {
.modal-header,
.modal-footer {
border-color: $white;
}
}
}
}

View File

@@ -7,7 +7,7 @@
color: $gray-600;
&:not(.active):hover {
color: theme-color('primary');
color: theme-color("primary");
}
}
@@ -26,43 +26,64 @@
border-right: $nav-tabs-border-width solid $nav-tabs-border-color;
.nav-link {
border-bottom-left-radius: $nav-tabs-border-radius;
border-top-right-radius: 0;
margin-right: -$nav-tabs-border-width;
@include hover-focus {
border-color: $gray-200 $nav-tabs-border-color $gray-200 $gray-200;
@include hover-focus () {
border-color: $gray-200 transparent $gray-200 $gray-200;
}
}
.nav-link.active,
.nav-item.show .nav-link {
border-color: $gray-300 $nav-tabs-link-active-bg $gray-300 $gray-300;
border-color: $gray-300 transparent $gray-300 $gray-300;
}
&.nav-tabs-right {
border-left: $nav-tabs-border-width solid $nav-tabs-border-color;
border-right: 0;
.nav-link {
border-bottom-left-radius: 0;
border-bottom-right-radius: $nav-tabs-border-radius;
border-top-left-radius: 0;
border-top-right-radius: $nav-tabs-border-radius;
margin-left: -$nav-tabs-border-width;
@include hover-focus {
border-color: $gray-200 $gray-200 $gray-200 $nav-tabs-border-color;
@include hover-focus () {
border-color: $gray-200 $gray-200 $gray-200 transparent;
}
}
.nav-link.active,
.nav-item.show .nav-link {
border-color: $gray-300 $gray-300 $gray-300 $nav-tabs-link-active-bg;
border-color: $gray-300 $gray-300 $gray-300 transparent;
}
}
}
.navbar-no-expand {
flex-direction: row;
.nav-link {
padding-left: $navbar-nav-link-padding-x;
padding-right: $navbar-nav-link-padding-x;
}
.dropdown-menu {
position: absolute;
}
}
// Color variants
@each $color, $value in $theme-colors {
@if $color == dark or $color == light {
.navbar-#{$color} {
background-color: $value;
@if $color == dark {
border-color: lighten($dark, 10%);
}
}
}
}
@@ -80,3 +101,49 @@
background-color: $value;
}
}
.dark-mode {
.nav-pills .nav-link {
color: $gray-400;
}
.nav-tabs {
border-color: lighten($dark, 15%);
.nav-link:focus,
.nav-link:hover {
border-color: lighten($dark, 15%);
}
.nav-item.show .nav-link,
.nav-link.active {
background-color: $dark;
border-color: lighten($dark, 15%) lighten($dark, 15%) transparent lighten($dark, 15%);
color: $white;
}
&.flex-column {
.nav-item.show .nav-link,
.nav-link {
&.active,
&:focus,
&:hover {
border-color: lighten($dark, 15%) transparent lighten($dark, 15%) lighten($dark, 15%);
}
&:focus,
&:hover {
background-color: lighten($dark, 5%);
}
}
&.nav-tabs-right {
border-color: lighten($dark, 15%);
.nav-link {
&.active,
&:focus,
&:hover {
border-color: lighten($dark, 15%) lighten($dark, 15%) lighten($dark, 15%) transparent;
}
}
}
}
}
}

View File

@@ -0,0 +1,73 @@
//
// Component: Pagination
//
.pagination-month {
.page-item {
justify-self: stretch;
.page-link {
display: flex;
align-items: center;
justify-content: center;
flex-direction: column;
box-shadow: none;
}
&:first-child,
&:last-child {
.page-link {
height: 100%;
font-size: $font-size-lg;
}
}
.page-month {
margin-bottom: 0;
font-size: $font-size-lg;
font-weight: $font-weight-bold;
}
.page-year {
margin-bottom: 0;
}
}
&.pagination-lg {
.page-month {
font-size: ($font-size-lg * 1.25);
}
}
&.pagination-sm {
.page-month {
font-size: ($font-size-base);
}
}
}
.dark-mode {
.page-item {
&.disabled .page-link {
background-color: lighten($dark, 2.5%);
border-color: $gray-600;
color: $gray-600;
}
&.active {
.page-link {
&:hover,
&:focus {
color: $gray-400;
}
}
}
&:not(.active) {
.page-link {
background-color: $dark;
border-color: $gray-600;
&:hover,
&:focus {
color: lighten($primary, 5%);
background-color: lighten($dark, 5%);
}
}
}
}
}

View File

@@ -8,14 +8,15 @@
padding: 0;
> .item {
@include clearfix;
@include clearfix ();
@if $enable-rounded {
@include border-radius($border-radius);
}
background: $white;
background-color: $white;
padding: 10px 0;
}
.product-img {
@@ -52,3 +53,16 @@
border-bottom-width: 0;
}
}
.dark-mode {
.products-list > .item {
background-color: $dark;
color: $white;
border-bottom-color: $gray-600;
}
.product-description {
color: $gray-400;
}
}

View File

@@ -40,7 +40,7 @@
}
.progress-group {
@extend .mb-2;
margin-bottom: map-get($spacers, 2);
}
// size variation
@@ -64,3 +64,9 @@
}
}
}
.dark-mode {
.progress {
background: lighten($dark, 7.5%);
}
}

View File

@@ -5,7 +5,6 @@
// Logo style
.logo-xs,
.logo-xl {
margin: 0;
opacity: 1;
position: absolute;
visibility: visible;
@@ -34,7 +33,7 @@
.brand-link {
&.logo-switch {
&::before {
content: '\00a0';
content: "\00a0";
}
}
}
@@ -42,13 +41,102 @@
// Add sidebar-mini class to the body tag to activate this feature
.sidebar-mini {
@include media-breakpoint-up(lg) {
@include sidebar-mini-breakpoint;
@include sidebar-mini-breakpoint ();
}
}
@include media-breakpoint-down(md) {
.sidebar-mini.sidebar-collapse .main-sidebar {
box-shadow: none !important;
}
}
.sidebar-mini-md {
@include media-breakpoint-up(md) {
@include sidebar-mini-breakpoint;
@include sidebar-mini-breakpoint ();
}
}
@include media-breakpoint-down(sm) {
.sidebar-mini-md.sidebar-collapse .main-sidebar {
box-shadow: none !important;
}
}
@keyframes fadeIn {
from {
opacity: 0;
}
to {
opacity: 1;
}
}
@keyframes fadeOut {
from {
opacity: 1;
}
to {
opacity: 0;
}
}
.sidebar-collapse {
.main-sidebar.sidebar-focused,
.main-sidebar:hover {
.nav-header {
display: inline-block;
}
}
.sidebar-no-expand.main-sidebar.sidebar-focused,
.sidebar-no-expand.main-sidebar:hover {
width: $sidebar-mini-width;
.nav-header {
display: none;
}
.brand-link {
width: $sidebar-mini-width !important;
}
.user-panel .image {
float: none !important;
}
.logo-xs {
animation-name: fadeIn;
animation-duration: $transition-speed;
animation-fill-mode: both;
visibility: visible;
}
.logo-xl {
animation-name: fadeOut;
animation-duration: $transition-speed;
animation-fill-mode: both;
visibility: hidden;
}
.nav-sidebar.nav-child-indent .nav-treeview {
padding-left: 0;
}
.brand-text,
.user-panel > .info,
.nav-sidebar .nav-link p {
margin-left: -10px;
animation-name: fadeOut;
animation-duration: $transition-speed;
animation-fill-mode: both;
visibility: hidden;
width: 0;
}
.nav-sidebar > .nav-item .nav-icon {
margin-right: 0;
}
}
}
@@ -82,5 +170,5 @@
.main-sidebar .logo-xs,
.main-sidebar .logo-xl,
.sidebar .user-panel .info {
@include transition(margin-left $transition-speed linear, opacity $transition-speed ease, visibility $transition-speed ease)
@include transition(margin-left $transition-speed linear, opacity $transition-speed ease, visibility $transition-speed ease);
}

View File

@@ -5,7 +5,6 @@
.small-box {
@include border-radius($border-radius);
@include box-shadow($card-shadow);
@extend .mb-3;
display: block;
margin-bottom: 20px;
@@ -17,8 +16,8 @@
}
> .small-box-footer {
background: rgba($black, 0.1);
color: rgba($white, 0.8);
background-color: rgba($black, .1);
color: rgba($white, .8);
display: block;
padding: 3px 0;
position: relative;
@@ -27,15 +26,15 @@
z-index: 10;
&:hover {
background: rgba($black, 0.15);
background-color: rgba($black, .15);
color: $white;
}
}
h3 {
@include font-size(2.2rem);
font-weight: bold;
margin: 0 0 10px 0;
font-weight: 700;
margin: 0 0 10px;
padding: 0;
white-space: nowrap;
}
@@ -82,7 +81,7 @@
> small {
color: $gray-100;
display: block;
font-size: 0.9rem;
font-size: .9rem;
margin-top: 5px;
}
}
@@ -94,7 +93,7 @@
// the icon
.icon {
color: rgba($black, 0.15);
color: rgba($black, .15);
z-index: 0;
> i {
@@ -102,19 +101,27 @@
position: absolute;
right: 15px;
top: 15px;
transition: all $transition-speed linear;
transition: transform $transition-speed linear;
&.fa,
&.fas,
&.far,
&.fab,
&.glyphicon,
&.fal,
&.fad,
&.ion {
font-size: 70px;
top: 20px;
}
}
svg {
font-size: 70px;
position: absolute;
right: 15px;
top: 15px;
transition: transform $transition-speed linear;
}
}
// Small box hover state
@@ -122,16 +129,21 @@
text-decoration: none;
// Animate icons on small box hover
.icon > i {
font-size: 95px;
&.fa,
&.fas,
&.far,
&.fab,
&.glyphicon,
&.ion {
font-size: 75px;
.icon {
> i {
&,
&.fa,
&.fas,
&.far,
&.fab,
&.fal,
&.fad,
&.ion {
transform: scale(1.1);
}
}
> svg {
transform: scale(1.1);
}
}
}

View File

@@ -17,17 +17,18 @@
@include border-top-radius($border-radius);
}
height: 120px;
height: 135px;
padding: 1rem;
text-align: center;
}
//User name
.widget-user-username {
font-size: 25px;
font-weight: 300;
margin-bottom: 5px;
margin-bottom: 0;
margin-top: 0;
text-shadow: 0 1px 1px rgba($black, 0.2);
text-shadow: 0 1px 1px rgba($black, .2);
}
//User single line description
@@ -40,7 +41,7 @@
left: 50%;
margin-left: -45px;
position: absolute;
top: 65px;
top: 80px;
> img {
border: 3px solid $white;
@@ -50,7 +51,7 @@
}
.card-footer {
padding-top: 40px;
padding-top: 50px;
}
}

View File

@@ -12,8 +12,7 @@
thead tr:nth-child(1) th {
background-color: $white;
border-bottom: 0;
box-shadow: inset 0 1px 0 $table-border-color,
inset 0 -1px 0 $table-border-color;
box-shadow: inset 0 1px 0 $table-border-color, inset 0 -1px 0 $table-border-color;
position: sticky;
top: 0;
z-index: 10;
@@ -23,8 +22,7 @@
thead tr {
&:nth-child(1) th {
background-color: $table-dark-bg;
box-shadow: inset 0 1px 0 $table-dark-border-color,
inset 0 -1px 0 $table-dark-border-color;
box-shadow: inset 0 1px 0 $table-dark-border-color, inset 0 -1px 0 $table-dark-border-color;
}
}
}
@@ -48,7 +46,7 @@
}
}
.table-valign-middle {
&.table-valign-middle {
thead > tr > th,
thead > tr > td,
tbody > tr > th,
@@ -60,14 +58,97 @@
.card-body.p-0 & {
thead > tr > th,
thead > tr > td,
tfoot > tr > th,
tfoot > tr > td,
tbody > tr > th,
tbody > tr > td {
&:first-of-type {
@extend .pl-4;
padding-left: map-get($spacers, 4);
}
&:last-of-type {
@extend .pr-4;
padding-right: map-get($spacers, 4);
}
}
}
}
// Expandable Table
.table-hover tbody tr.expandable-body:hover {
background-color: inherit !important;
}
[data-widget="expandable-table"] {
cursor: pointer;
i {
transition: transform $transition-speed linear;
}
&[aria-expanded="true"] {
td > i {
// stylelint-disable selector-max-attribute
&[class*="right"] {
transform: rotate(90deg);
}
&[class*="left"] {
transform: rotate(-90deg);
}
// stylelint-enable selector-max-attribute
}
}
}
.expandable-body {
> td {
padding: 0 !important;
width: 100%;
> div,
> p {
padding: $table-cell-padding;
}
}
.table {
width: calc(100% - #{$table-cell-padding});
margin: 0 0 0 $table-cell-padding;
tr:first-child {
td,
th {
border-top: none;
}
}
}
}
.dark-mode {
.table-bordered {
&,
td,
th {
border-color: $gray-600;
}
}
.table-hover {
tbody tr:hover {
color: $gray-300;
background-color: lighten($dark, 2.5%);
border-color: $gray-600;
}
}
.table {
thead th {
border-bottom-color: $gray-600;
}
th,
td {
border-top-color: $gray-600;
}
&.table-head-fixed {
thead tr:nth-child(1) th {
background-color: lighten($dark, 5%);
}
}
}

View File

@@ -4,16 +4,22 @@
// text modification
.text-bold {
&, &.table td, &.table th {
&,
&.table td,
&.table th {
font-weight: 700;
}
}
.text-xs {
font-size: $font-size-xs !important;
}
.text-sm {
font-size: $font-size-sm !important;
}
.text-xs {
.text-md {
font-size: $font-size-base !important;
}
@@ -28,6 +34,12 @@
// text color variations
@each $name, $color in $colors {
.text-#{$name} {
color: #{$color};
color: #{$color} !important;
}
}
.dark-mode {
.text-muted {
color: $gray-500 !important;
}
}

View File

@@ -3,42 +3,43 @@
//
.timeline {
list-style: none;
margin: 0 0 30px;
margin: 0 0 45px;
padding: 0;
position: relative;
// The line
&::before {
@include border-radius($border-radius);
background: $gray-300;
background-color: $gray-300;
bottom: 0;
content: '';
content: "";
left: 31px;
margin: 0;
position: absolute;
top: 0;
width: 4px;
}
// Element
> div {
&::before,
&::after {
content: "";
display: table;
}
> li {
@include clearfix;
margin-bottom: 15px;
margin-right: 10px;
position: relative;
// The content
> .timeline-item {
@include box-shadow($card-shadow);
@include border-radius($border-radius);
background: $white;
background-color: $white;
color: $gray-700;
margin-left: 60px;
margin-right: 15px;
margin-top: 0;
padding: 0;
position: relative;
// The time and header
> .time {
color: #999;
@@ -46,7 +47,7 @@
font-size: 12px;
padding: 10px;
}
// Header
> .timeline-header {
border-bottom: 1px solid $card-border-color;
color: $gray-700;
@@ -54,30 +55,46 @@
line-height: 1.1;
margin: 0;
padding: 10px;
// Link in header
> a {
font-weight: 600;
}
}
// Item body and footer
> .timeline-body,
> .timeline-footer {
padding: 10px;
}
}
> .timeline-body {
> img {
margin: 10px;
}
> dl,
ol,
ul {
margin: 0;
}
}
// The icons
> .timeline-footer {
> a {
color: $white;
}
}
}
// The icons at line
> .fa,
> .fas,
> .far,
> .fab,
> .glyphicon,
> .fal,
> .fad,
> .svg-inline--fa,
> .ion {
background: $gray-500;
background-color: $gray-500;
border-radius: 50%;
font-size: 15px;
font-size: 16px;
height: 30px;
left: 18px;
line-height: 30px;
@@ -86,13 +103,14 @@
top: 0;
width: 30px;
}
> .svg-inline--fa {
padding: 7px;
}
}
// Time label
> .time-label {
> span {
@include border-radius(4px);
background-color: $white;
display: inline-block;
font-weight: 600;
@@ -102,10 +120,10 @@
}
.timeline-inverse {
> li {
> div {
> .timeline-item {
@include box-shadow(none);
background: $gray-100;
background-color: $gray-100;
border: 1px solid $gray-300;
> .timeline-header {
@@ -114,3 +132,24 @@
}
}
}
.dark-mode {
.timeline {
&::before {
background-color: $gray-600;
}
> div > .timeline-item {
background-color: $dark;
color: $white;
border-color: $gray-600;
> .timeline-header {
color: $gray-400;
border-color: $gray-600;
}
> .time {
color: $gray-400;
}
}
}
}

68
build/scss/_toasts.scss Normal file
View File

@@ -0,0 +1,68 @@
//
// Component: Toasts
//
.toasts-top-right {
position: absolute;
right: 0;
top: 0;
z-index: $zindex-toasts;
&.fixed {
position: fixed;
}
}
.toasts-top-left {
left: 0;
position: absolute;
top: 0;
z-index: $zindex-toasts;
&.fixed {
position: fixed;
}
}
.toasts-bottom-right {
bottom: 0;
position: absolute;
right: 0;
z-index: $zindex-toasts;
&.fixed {
position: fixed;
}
}
.toasts-bottom-left {
bottom: 0;
left: 0;
position: absolute;
z-index: $zindex-toasts;
&.fixed {
position: fixed;
}
}
.dark-mode {
.toast {
background-color: rgba($dark, .85);
color: $white;
.toast-header {
background-color: rgba($dark, .7);
color: $gray-100;
}
}
}
.toast {
@each $name, $color in $theme-colors {
@include toast-variant($name, $color);
}
@each $name, $color in $colors {
@include toast-variant($name, $color);
}
}

View File

@@ -3,7 +3,7 @@
//
.users-list {
@extend .list-unstyled;
@include list-unstyled ();
> li {
float: left;
@@ -43,3 +43,12 @@
color: darken($gray-500, 20%);
font-size: 12px;
}
.dark-mode {
.users-list-name {
color: $gray-400;
}
.users-list-date {
color: $gray-500;
}
}

View File

@@ -5,6 +5,7 @@
// COLORS
// --------------------------------------------------------
$blue: #0073b7 !default;
$lightblue: #3c8dbc !default;
$navy: #001f3f !default;
$teal: #39cccc !default;
$olive: #3d9970 !default;
@@ -16,13 +17,17 @@ $maroon: #d81b60 !default;
$black: #111 !default;
$gray-x-light: #d2d6de !default;
$colors: map-merge((
'navy': $navy,
'olive': $olive,
'lime': $lime,
'fuchsia': $fuchsia,
'maroon': $maroon,
), $colors);
$colors: map-merge(
(
"lightblue": $lightblue,
"navy": $navy,
"olive": $olive,
"lime": $lime,
"fuchsia": $fuchsia,
"maroon": $maroon,
),
$colors
);
// LAYOUT
// --------------------------------------------------------
@@ -31,8 +36,13 @@ $font-size-root: 1rem !default;
// Sidebar
$sidebar-width: 250px !default;
$sidebar-padding-x: 0.5rem !default;
$sidebar-padding-x: .5rem !default;
$sidebar-padding-y: 0 !default;
$sidebar-custom-height: 4rem !default;
$sidebar-custom-height-lg: 6rem !default;
$sidebar-custom-height-xl: 8rem !default;
$sidebar-custom-padding-x: .85rem !default;
$sidebar-custom-padding-y: .5rem !default;
// Boxed layout maximum width
$boxed-layout-max-width: 1250px !default;
@@ -47,6 +57,13 @@ $main-bg: #f4f6f9 !default;
$content-padding-y: 0 !default;
$content-padding-x: $navbar-padding-x !default;
// IMAGE SIZES
// --------------------------------------------------------
$img-size-sm: 1.875rem !default;
$img-size-md: 3.75rem !default;
$img-size-lg: 6.25rem !default;
$img-size-push: .625rem !default;
// MAIN HEADER
// --------------------------------------------------------
$main-header-bottom-border-width: $border-width !default;
@@ -58,55 +75,63 @@ $main-header-brand-padding-y: $navbar-brand-padding-y !default;
$main-header-brand-padding-x: $navbar-padding-x !default;
$main-header-height-inner: ($nav-link-height + ($main-header-link-padding-y * 2)) !default;
$main-header-height: calc(#{$main-header-height-inner} + #{$main-header-bottom-border-width}) !default;
$nav-link-sm-padding-y: .35rem !default;
$nav-link-sm-height: ($font-size-sm * $line-height-sm + $nav-link-sm-padding-y * 1.785) !default;
$main-header-height-sm-inner: ($nav-link-sm-height + ($main-header-link-padding-y * 2)) !default;
$main-header-height-sm: calc(#{$main-header-height-sm-inner} + #{$main-header-bottom-border-width}) !default;
// Main header skins
$main-header-dark-form-control-bg: hsla(100, 100%, 100%, 0.2) !default;
$main-header-dark-form-control-focused-bg: hsla(100, 100%, 100%, 0.6) !default;
$main-header-dark-form-control-bg: rgba(255, 255, 255, .2) !default;
$main-header-dark-form-control-focused-bg: rgba(255, 255, 255, .6) !default;
$main-header-dark-form-control-focused-color: $gray-800 !default;
$main-header-dark-form-control-border: 0 !default;
$main-header-dark-form-control-focused-border: 0 !default;
$main-header-dark-placeholder-color: hsla(100, 100%, 100%, 0.6) !default;
$main-header-dark-placeholder-color: rgba(255, 255, 255, .6) !default;
$main-header-light-form-control-bg: darken($gray-100, 2%) !default;
$main-header-light-form-control-focused-bg: $gray-200 !default;
$main-header-light-form-control-focused-color: $gray-800 !default;
$main-header-light-form-control-border: 0 !default;
$main-header-light-form-control-focused-border: 0 !default;
$main-header-light-placeholder-color: hsla(0, 0%, 0%, 0.6) !default;
$main-header-light-placeholder-color: rgba(0, 0, 0, .6) !default;
// MAIN FOOTER
// --------------------------------------------------------
$main-footer-padding: 1rem !default;
$main-footer-padding-sm: $main-footer-padding * .812 !default;
$main-footer-border-top-width: 1px !default;
$main-footer-border-top-color: $gray-300 !default;
$main-footer-border-top: $main-footer-border-top-width solid $main-footer-border-top-color !default;
$main-footer-height-inner: (($font-size-root * $line-height-base) + ($main-footer-padding * 2)) !default;
$main-footer-height: calc(#{$main-footer-height-inner} + #{$main-footer-border-top-width}) !default;
$main-footer-bg: $white;
$main-footer-height-sm-inner: (($font-size-sm * $line-height-base) + ($main-footer-padding-sm * 2)) !default;
$main-footer-height-sm: calc(#{$main-footer-height-sm-inner} + #{$main-footer-border-top-width}) !default;
$main-footer-bg: $white !default;
// SIDEBAR SKINS
// --------------------------------------------------------
// Dark sidebar
$sidebar-dark-bg: $dark !default;
$sidebar-dark-hover-bg: hsla(100, 100%, 100%, 0.1) !default;
$sidebar-dark-color: #C2C7D0 !default;
$sidebar-dark-hover-bg: rgba(255, 255, 255, .1) !default;
$sidebar-dark-color: #c2c7d0 !default;
$sidebar-dark-hover-color: $white !default;
$sidebar-dark-active-color: $white !default;
$sidebar-dark-submenu-bg: transparent !default;
$sidebar-dark-submenu-color: #C2C7D0 !default;
$sidebar-dark-submenu-color: #c2c7d0 !default;
$sidebar-dark-submenu-hover-color: $white !default;
$sidebar-dark-submenu-hover-bg: $sidebar-dark-hover-bg !default;
$sidebar-dark-submenu-active-color: $sidebar-dark-bg !default;
$sidebar-dark-submenu-active-bg: hsla(100, 100%, 100%, 0.9) !default;
$sidebar-dark-submenu-active-bg: rgba(255, 255, 255, .9) !default;
$sidebar-dark-header-color: $white !default;
// Light sidebar
$sidebar-light-bg: $white !default;
$sidebar-light-hover-bg: lighten(#f0f0f1, 1.5%) !default;
$sidebar-light-hover-bg: rgba($black, .1) !default;
$sidebar-light-color: $gray-800 !default;
$sidebar-light-hover-color: $gray-900 !default;
$sidebar-light-active-color: $white !default;
$sidebar-light-active-color: $black !default;
$sidebar-light-submenu-bg: transparent !default;
$sidebar-light-submenu-color: #777 !default;
$sidebar-light-submenu-hover-color: #000 !default;
@@ -118,8 +143,8 @@ $sidebar-light-header-color: $gray-800 !default;
// SIDEBAR MINI
// --------------------------------------------------------
$sidebar-mini-width: ($nav-link-padding-x + $sidebar-padding-x + .8rem) * 2 !default;
$sidebar-nav-icon-width: $sidebar-mini-width - (($sidebar-padding-x + $nav-link-padding-x) * 2);
$sidebar-user-image-width: $sidebar-nav-icon-width + ($nav-link-padding-x / 2);
$sidebar-nav-icon-width: $sidebar-mini-width - (($sidebar-padding-x + $nav-link-padding-x) * 2) !default;
$sidebar-user-image-width: $sidebar-nav-icon-width + ($nav-link-padding-x / 2) !default;
// CONTROL SIDEBAR
// --------------------------------------------------------
@@ -128,9 +153,14 @@ $control-sidebar-width: $sidebar-width !default;
// Cards
// --------------------------------------------------------
$card-border-color: $gray-100 !default;
$card-dark-border-color: lighten($gray-900, 10%) !default;
$card-shadow: 0 0 1px rgba(0, 0, 0, .125), 0 1px 3px rgba(0, 0, 0, .2) !default;
$card-title-font-size: $font-size-lg;
$card-title-font-weight: $font-weight-normal;
$card-title-font-size: 1.1rem !default;
$card-title-font-size-sm: 1rem !default;
$card-title-font-weight: $font-weight-normal !default;
$card-nav-link-padding-sm-y: .4rem !default;
$card-nav-link-padding-sm-x: .8rem !default;
$card-img-size: $img-size-sm !default;
// PROGRESS BARS
// --------------------------------------------------------
@@ -151,20 +181,24 @@ $attachment-border-radius: 3px !default;
// Z-INDEX
// --------------------------------------------------------
$zindex-main-header: $zindex-fixed + 2 !default;
$zindex-main-sidebar: $zindex-fixed + 6 !default;
$zindex-main-header: $zindex-fixed + 4 !default;
$zindex-main-sidebar: $zindex-fixed + 8 !default;
$zindex-main-footer: $zindex-fixed + 2 !default;
$zindex-control-sidebar: $zindex-fixed + 1 !default;
$zindex-sidebar-mini-links: 010 !default;
$zindex-toasts: $zindex-main-sidebar + 2 !default;
// TRANSITIONS SETTINGS
// --------------------------------------------------------
// Transition global options
$transition-speed: 0.3s !default;
$transition-speed: .3s !default;
$transition-fn: ease-in-out !default;
// TEXT
// --------------------------------------------------------
$font-size-xl: ($font-size-base * 2);
$font-size-xs: ($font-size-base * .75) !default;
$font-size-xl: ($font-size-base * 2) !default;
// BUTTON
@@ -172,22 +206,43 @@ $font-size-xl: ($font-size-base * 2);
$button-default-background-color: $gray-100 !default;
$button-default-color: #444 !default;
$button-default-border-color: #ddd !default;
$button-padding-y-xs: .125rem !default;
$button-padding-x-xs: .25rem !default;
$button-line-height-xs: $line-height-sm !default;
$button-font-size-xs: ($font-size-base * .75) !default;
$button-border-radius-xs: .15rem !default;
// ELEVATION
// --------------------------------------------------------
$elevations: ();
$elevations: map-merge(
(
1: unquote("0 1px 3px " + rgba($black, .12) + ", 0 1px 2px " + rgba($black, .24)),
2: unquote("0 3px 6px " + rgba($black, .16) + ", 0 3px 6px " + rgba($black, .23)),
3: unquote("0 10px 20px " + rgba($black, .19) + ", 0 6px 6px " + rgba($black, .23)),
4: unquote("0 14px 28px " + rgba($black, .25) + ", 0 10px 10px " + rgba($black, .22)),
5: unquote("0 19px 38px " + rgba($black, .3) + ", 0 15px 12px " + rgba($black, .22)),
),
$elevations
);
// RIBBON
// --------------------------------------------------------
$ribbon-border-size: 3px !default;
$ribbon-line-height: 100% !default;
$ribbon-padding: .375rem 0 !default;
$ribbon-font-size: .8rem !default;
$ribbon-width: 110px !default;
$ribbon-wrapper-size: 90px !default;
$ribbon-top: 9px !default;
$ribbon-right: -12px !default;
$ribbon-lg-wrapper-size: 180px !default;
$ribbon-width: 90px !default;
$ribbon-wrapper-size: 70px !default;
$ribbon-top: 10px !default;
$ribbon-right: -2px !default;
$ribbon-lg-wrapper-size: 120px !default;
$ribbon-lg-width: 160px !default;
$ribbon-lg-top: 26px !default;
$ribbon-lg-right: -59px !default;
$ribbon-xl-wrapper-size: 240px !default;
$ribbon-lg-right: 0 !default;
$ribbon-xl-wrapper-size: 180px !default;
$ribbon-xl-width: 240px !default;
$ribbon-xl-top: 59px !default;
$ribbon-xl-right: -48px !default;
$ribbon-xl-top: 47px !default;
$ribbon-xl-right: 4px !default;

24
build/scss/adminlte.scss Normal file
View File

@@ -0,0 +1,24 @@
/*!
* AdminLTE v3.1.0-rc
* Author: Colorlib
* Website: AdminLTE.io <https://adminlte.io>
* License: Open source - MIT <https://opensource.org/licenses/MIT>
*/
// Bootstrap
// ---------------------------------------------------
@import "~bootstrap/scss/functions";
@import "bootstrap-variables";
@import "~bootstrap/scss/bootstrap";
// Variables and Mixins
// ---------------------------------------------------
@import "variables";
@import "mixins";
@import "parts/core";
@import "parts/components";
@import "parts/extra-components";
@import "parts/pages";
@import "parts/plugins";
@import "parts/miscellaneous";

View File

@@ -0,0 +1,103 @@
//
// Mixins: Accent
//
// Accent Variant
@mixin accent-variant($name, $color) {
$link-color: $color;
.accent-#{$name} {
$link-hover-color: darken($color, 15%);
$pagination-active-bg: $color;
$pagination-active-border-color: $color;
.btn-link,
a:not(.dropdown-item):not(.btn-app):not(.nav-link):not(.brand-link):not(.page-link):not(.btn) {
color: $link-color;
@include hover () {
color: $link-hover-color;
}
}
.dropdown-item {
&:active,
&.active {
background-color: $color;
color: color-yiq($color);
}
}
.custom-control-input:checked ~ .custom-control-label {
&::before {
background-color: $color;
border-color: darken($color, 20%);
}
&::after {
$new-color: color-yiq($color);
background-image: str-replace($custom-checkbox-indicator-icon-checked, str-replace(#{$custom-control-indicator-checked-color}, "#", "%23"), str-replace(#{$new-color}, "#", "%23"));
}
}
.form-control:focus:not(.is-invalid):not(.is-warning):not(.is-valid),
.custom-select:focus,
.custom-control-input:focus:not(:checked) ~ .custom-control-label::before,
.custom-file-input:focus ~ .custom-file-label {
border-color: lighten($color, 25%);
}
.page-item {
.page-link {
color: $link-color;
}
&.active a,
&.active .page-link {
background-color: $pagination-active-bg;
border-color: $pagination-active-border-color;
color: $pagination-active-color;
}
&.disabled a,
&.disabled .page-link {
background-color: $pagination-disabled-bg;
border-color: $pagination-disabled-border-color;
color: $pagination-disabled-color;
}
}
[class*="sidebar-dark-"] {
.sidebar {
a:not(.dropdown-item):not(.btn-app):not(.nav-link):not(.brand-link) {
color: $sidebar-dark-color;
@include hover () {
color: $sidebar-dark-hover-color;
}
}
}
}
[class*="sidebar-light-"] {
.sidebar {
a:not(.dropdown-item):not(.btn-app):not(.nav-link):not(.brand-link) {
color: $sidebar-light-color;
@include hover () {
color: $sidebar-light-hover-color;
}
}
}
}
}
.dark-mode.accent-#{$name} {
.page-item {
.page-link {
&:hover,
&:focus {
color: lighten($link-color, 5%);
}
}
}
}
}

View File

@@ -0,0 +1,64 @@
//
// Mixins: Backgrounds
//
// Background Variant
@mixin background-variant($name, $color) {
.bg-#{$name} {
background-color: #{$color} !important;
&,
> a {
color: color-yiq($color) !important;
}
&.btn {
&:hover {
border-color: darken($color, 10%);
color: darken(color-yiq($color), 7.5%);
}
&:not(:disabled):not(.disabled):active,
&:not(:disabled):not(.disabled).active,
&:active,
&.active {
background-color: darken($color, 10%) !important;
border-color: darken($color, 12.5%);
color: color-yiq(darken($color, 10%));
}
}
}
}
// Background Gradient Variant
@mixin background-gradient-variant($name, $color) {
.bg-gradient-#{$name} {
background: $color linear-gradient(180deg, mix($body-bg, $color, 15%), $color) repeat-x !important;
color: color-yiq($color);
&.btn {
&.disabled,
&:disabled,
&:not(:disabled):not(.disabled):active,
&:not(:disabled):not(.disabled).active,
.show > &.dropdown-toggle {
background-image: none !important;
}
&:hover {
background: $color linear-gradient(180deg, mix($body-bg, darken($color, 7.5%), 15%), darken($color, 7.5%)) repeat-x !important;
border-color: darken($color, 10%);
color: darken(color-yiq($color), 7.5%);
}
&:not(:disabled):not(.disabled):active,
&:not(:disabled):not(.disabled).active,
&:active,
&.active {
background: $color linear-gradient(180deg, mix($body-bg, darken($color, 10%), 15%), darken($color, 10%)) repeat-x !important;
border-color: darken($color, 12.5%);
color: color-yiq(darken($color, 10%));
}
}
}
}

View File

@@ -0,0 +1,82 @@
//
// Mixins: Cards Variant
//
@mixin cards-variant($name, $color) {
.card-#{$name} {
&:not(.card-outline) {
> .card-header {
background-color: $color;
&,
a {
color: color-yiq($color);
}
a.active {
color: color-yiq($white);
}
}
}
&.card-outline {
border-top: 3px solid $color;
}
&.card-outline-tabs {
> .card-header {
a {
&:hover {
border-top: 3px solid $nav-tabs-border-color;
}
&.active {
border-top: 3px solid $color;
}
}
}
}
}
.bg-#{$name},
.bg-gradient-#{$name},
.card-#{$name}:not(.card-outline) {
.btn-tool {
color: rgba(color-yiq($color), .8);
&:hover {
color: color-yiq($color);
}
}
}
.card.bg-#{$name},
.card.bg-gradient-#{$name} {
.bootstrap-datetimepicker-widget {
.table td,
.table th {
border: none;
}
table thead tr:first-child th:hover,
table td.day:hover,
table td.hour:hover,
table td.minute:hover,
table td.second:hover {
background-color: darken($color, 8%);
color: color-yiq($color);
}
table td.today::before {
border-bottom-color: color-yiq($color);
}
table td.active,
table td.active:hover {
background-color: lighten($color, 10%);
color: color-yiq($color);
}
}
}
}

View File

@@ -0,0 +1,123 @@
//
// Mixins: Custom Forms
//
// Custom Switch Variant
@mixin custom-switch-variant($name, $color) {
&.custom-switch-off-#{$name} {
.custom-control-input ~ .custom-control-label::before {
background-color: #{$color};
border-color: darken($color, 20%);
}
.custom-control-input:focus ~ .custom-control-label::before {
box-shadow: 0 0 0 1px $body-bg, 0 0 0 2px rgba($color, .25);
}
.custom-control-input ~ .custom-control-label::after {
background-color: darken($color, 25%);
}
}
&.custom-switch-on-#{$name} {
.custom-control-input:checked ~ .custom-control-label::before {
background-color: #{$color};
border-color: darken($color, 20%);
}
.custom-control-input:checked:focus ~ .custom-control-label::before {
box-shadow: 0 0 0 1px $body-bg, 0 0 0 2px rgba($color, .25);
}
.custom-control-input:checked ~ .custom-control-label::after {
background-color: lighten($color, 30%);
}
}
}
// Custom Range Variant
@mixin custom-range-variant($name, $color) {
&.custom-range-#{$name} {
&:focus {
outline: none;
&::-webkit-slider-thumb {
box-shadow: 0 0 0 1px $body-bg, 0 0 0 2px rgba($color, .25);
}
&::-moz-range-thumb {
box-shadow: 0 0 0 1px $body-bg, 0 0 0 2px rgba($color, .25);
}
&::-ms-thumb {
box-shadow: 0 0 0 1px $body-bg, 0 0 0 2px rgba($color, .25);
}
}
&::-webkit-slider-thumb {
background-color: $color;
&:active {
background-color: lighten($color, 35%);
}
}
&::-moz-range-thumb {
background-color: $color;
&:active {
background-color: lighten($color, 35%);
}
}
&::-ms-thumb {
background-color: $color;
&:active {
background-color: lighten($color, 35%);
}
}
}
}
// Custom Control Input Variant
@mixin custom-control-input-variant($name, $color) {
$custom-control-indicator-checked-color: $color;
$custom-checkbox-indicator-icon-checked: str-replace(url("data:image/svg+xml;charset=utf8,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 8 8'%3E%3Cpath fill='#{$custom-control-indicator-checked-color}' d='M6.564.75l-3.59 3.612-1.538-1.55L0 4.26 2.974 7.25 8 2.193z'/%3E%3C/svg%3E"), "#", "%23");
$custom-radio-indicator-icon-checked: str-replace(url("data:image/svg+xml;charset=utf8,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='-4 -4 8 8'%3E%3Ccircle r='3' fill='#{$custom-control-indicator-checked-color}'/%3E%3C/svg%3E"), "#", "%23");
.custom-control-input-#{$name} {
&:checked ~ .custom-control-label::before {
border-color: $color;
@include gradient-bg($color);
}
&.custom-control-input-outline:checked {
&[type="checkbox"] ~ .custom-control-label::after {
background-image: $custom-checkbox-indicator-icon-checked !important;
}
&[type="radio"] ~ .custom-control-label::after {
background-image: $custom-radio-indicator-icon-checked !important;
}
}
&:focus ~ .custom-control-label::before {
// the mixin is not used here to make sure there is feedback
@if $enable-shadows {
box-shadow: $input-box-shadow, 0 0 0 $input-btn-focus-width rgba($color, .25);
} @else {
box-shadow: 0 0 0 $input-btn-focus-width rgba($color, .25);
}
}
&:focus:not(:checked) ~ .custom-control-label::before {
border-color: lighten($color, 25%);
}
&:not(:disabled):active ~ .custom-control-label::before {
background-color: lighten($color, 35%);
border-color: lighten($color, 35%);
}
}
}

View File

@@ -0,0 +1,17 @@
//
// Mixins: Direct Chat
//
// Direct Chat Variant
@mixin direct-chat-variant($bg-color, $color: $white) {
.right > .direct-chat-text {
background-color: $bg-color;
border-color: $bg-color;
color: color-yiq($bg-color);
&::after,
&::before {
border-left-color: $bg-color;
}
}
}

View File

@@ -0,0 +1,32 @@
//
// Mixins: Miscellaneous
//
// ETC
@mixin translate($x, $y) {
transform: translate($x, $y);
}
// Different radius each side
@mixin border-radius-sides($top-left, $top-right, $bottom-left, $bottom-right) {
border-radius: $top-left $top-right $bottom-left $bottom-right;
}
@mixin calc($property, $expression) {
#{$property}: calc(#{$expression});
}
@mixin rotate($value) {
transform: rotate($value);
}
@mixin animation($animation) {
animation: $animation;
}
// Gradient background
@mixin gradient($color: #f5f5f5, $start: #eee, $stop: $white) {
background-color: $color;
background-image: gradient(linear, left bottom, left top, color-stop(0, $start), color-stop(1, $stop));
}

View File

@@ -0,0 +1,34 @@
//
// Mixins: Navbar
//
// Navbar Variant
@mixin navbar-variant($color, $font-color: rgba(255, 255, 255, .8), $hover-color: #f6f6f6, $hover-bg: rgba(0, 0, 0, .1)) {
background-color: $color;
.nav > li > a {
color: $font-color;
}
.nav > li > a:hover,
.nav > li > a:active,
.nav > li > a:focus,
.nav .open > a,
.nav .open > a:hover,
.nav .open > a:focus,
.nav > .active > a {
background-color: $hover-bg;
color: $hover-color;
}
// Add color to the sidebar toggle button
.sidebar-toggle {
color: $font-color;
&:hover,
&:focus {
background-color: $hover-bg;
color: $hover-color;
}
}
}

View File

@@ -0,0 +1,165 @@
//
// Mixins: Sidebar
//
// Sidebar Color
@mixin sidebar-color($color) {
.nav-sidebar > .nav-item {
> .nav-link.active {
background-color: $color;
color: color-yiq($color);
}
}
.nav-sidebar.nav-legacy > .nav-item {
> .nav-link.active {
border-color: $color;
}
}
}
// Sidebar Mini Breakpoints
@mixin sidebar-mini-breakpoint() {
// A fix for text overflow while transitioning from sidebar mini to full sidebar
.nav-sidebar,
.nav-sidebar > .nav-header,
.nav-sidebar .nav-link {
white-space: nowrap;
overflow: hidden;
}
// When the sidebar is collapsed...
&.sidebar-collapse {
.d-hidden-mini {
display: none;
}
// Apply the new margins to the main content and footer
.content-wrapper,
.main-footer,
.main-header {
margin-left: $sidebar-mini-width !important;
}
// Make the sidebar headers
.nav-sidebar .nav-header {
display: none;
}
.nav-sidebar .nav-link p {
width: 0;
}
.sidebar .user-panel > .info,
.nav-sidebar .nav-link p,
.brand-text {
margin-left: -10px;
animation-name: fadeOut;
animation-duration: $transition-speed;
animation-fill-mode: both;
visibility: hidden;
}
.logo-xl {
animation-name: fadeOut;
animation-duration: $transition-speed;
animation-fill-mode: both;
visibility: hidden;
}
.logo-xs {
display: inline-block;
animation-name: fadeIn;
animation-duration: $transition-speed;
animation-fill-mode: both;
visibility: visible;
}
// Modify the sidebar to shrink instead of disappearing
.main-sidebar {
overflow-x: hidden;
&,
&::before {
// Don't go away! Just shrink
margin-left: 0;
width: $sidebar-mini-width;
}
.user-panel {
.image {
float: none;
}
}
&:hover,
&.sidebar-focused {
width: $sidebar-width;
.brand-link {
width: $sidebar-width;
}
.user-panel {
text-align: left;
.image {
float: left;
}
}
.user-panel > .info,
.nav-sidebar .nav-link p,
.brand-text,
.logo-xl {
display: inline-block;
margin-left: 0;
animation-name: fadeIn;
animation-duration: $transition-speed;
animation-fill-mode: both;
visibility: visible;
}
.logo-xs {
animation-name: fadeOut;
animation-duration: $transition-speed;
animation-fill-mode: both;
visibility: hidden;
}
.brand-image {
margin-right: .5rem;
}
// Make the sidebar links, menus, labels, badges
// and angle icons disappear
.sidebar-form,
.user-panel > .info {
display: block !important;
transform: translateZ(0);
}
.nav-sidebar > .nav-item > .nav-link > span {
display: inline-block !important;
}
}
}
// Make an element visible only when sidebar mini is active
.visible-sidebar-mini {
display: block !important;
}
&.layout-fixed {
.main-sidebar:hover {
.brand-link {
width: $sidebar-width;
}
}
.brand-link {
width: $sidebar-mini-width;
}
}
}
}

View File

@@ -0,0 +1,23 @@
//
// Mixins: Toasts
//
// Toast Variant
@mixin toast-variant($name, $color) {
&.bg-#{$name} {
background-color: rgba($color, .9) !important;
@if (color-yiq($color) == $yiq-text-light) {
.close {
color: color-yiq($color);
text-shadow: 0 1px 0 $black;
}
}
.toast-header {
background-color: rgba($color, .85);
color: color-yiq($color);
}
}
}

View File

@@ -1,7 +1,7 @@
//
// Pages: 400 and 500 error pages
//
.error-page {
margin: 20px auto 0;
width: 600px;

View File

@@ -4,7 +4,7 @@
// product image
.product-image {
@include img-fluid;
@include img-fluid ();
width: 100%;
}
@@ -28,12 +28,12 @@
padding: $thumbnail-padding * 2;
img {
@include img-fluid;
@include img-fluid ();
align-self: center;
}
&:hover {
opacity: 0.5;
opacity: .5;
}
}

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