diff --git a/CHANGELOG.md b/CHANGELOG.md index 34dec83e..c717a84c 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -1,3 +1,16 @@ +## [v0.8.0](https://github.com/marxjmoura/admin4b/releases/tag/v0.8.0) (2018-04-21) +### Bug fixes +- Fix `page-sign` on IE11: forms were not centralized +- Fix check mark of `.radio` when set text-align to parent +### Features +- Support for print media (hide sidebar and scrollbar of the content) +- Camera (take picture) +- Chat (technical support) +- Component for date input (displays calendar) +- Notification pages +- File manager +- Themes for code highlight: light and dark + ## [v0.7.1](https://github.com/marxjmoura/admin4b/releases/tag/v0.7.1) (2018-03-17) ### Bug fixes - Fix check mark for small and large radio buttons @@ -33,13 +46,13 @@ - Documentation for how to customize sidebar width ## [v0.5.0](https://github.com/marxjmoura/admin4b/releases/tag/v0.5.0) (2018-02-25) +### Bug fixes +- Borders of `.input-group` input showing on small screens ### Features - `.has-error` class for validation - Code highlight CSS extension `admin4b-highlight.min.css` - `label-floating` and `label-infield` components - New sidebar-light color -### Bug fixes -- Borders of `.input-group` input showing on small screens ## [v0.4.0](https://github.com/marxjmoura/admin4b/releases/tag/v0.4.0) (2018-02-19) ### Features diff --git a/dist/admin4b-highlight.min.css b/dist/admin4b-highlight.min.css index d33c489f..3a229322 100644 --- a/dist/admin4b-highlight.min.css +++ b/dist/admin4b-highlight.min.css @@ -1 +1 @@ -.css .hljs-keyword{color:#569cd6}.css .hljs-selector-class{color:#0a8}.css .hljs-attribute{color:#9cdcfe}.css .hljs-comment{color:#999}.css .hljs-number{color:#d7ba7d}.html .hljs-meta{color:#099}.html .hljs-section,.html .hljs-tag{color:#569cd6}.html .hljs-tag .hljs-attr{color:#9cdcfe}.html .hljs-tag .hljs-string{color:#ce9178}.html .hljs-comment{color:#999}.js .hljs-string{color:#ce9178}.js .hljs-keyword{color:#569cd6}.js .hljs-comment{color:#999}.json .hljs-attr{color:#9cdcfe}.json .hljs-string{color:#ce9178}.json .hljs-literal{color:#569cd6}.json .hljs-number{color:#d7ba7d}.source-code{margin-bottom:1rem}.source-code .nav-tabs a{color:gray;font-size:.95rem;text-decoration:none;padding:.75rem;-webkit-transition:color 0.2s ease;-moz-transition:color 0.2s ease;-o-transition:color 0.2s ease;transition:color 0.2s ease}.source-code .nav-tabs a.active,.source-code .nav-tabs a:hover{color:#fff}.source-code pre,.source-code .nav-tabs{background:#222d32;border:none}.source-code pre{color:#e8e8e8;margin:0;overflow-x:auto} +.source-code .css .hljs-keyword{color:#2f6f9f}.source-code .css .hljs-selector-class{color:#0a8}.source-code .css .hljs-attribute{color:#4f9fcf}.source-code .css .hljs-comment{color:#999}.source-code .css .hljs-number{color:#f5871f}.source-code.dark .css .hljs-keyword{color:#569cd6}.source-code.dark .css .hljs-selector-class{color:#0a8}.source-code.dark .css .hljs-attribute{color:#9cdcfe}.source-code.dark .css .hljs-comment{color:#999}.source-code.dark .css .hljs-number{color:#d7ba7d}.source-code .html .hljs-meta{color:#099}.source-code .html .hljs-section,.source-code .html .hljs-tag{color:#2f6f9f}.source-code .html .hljs-tag .hljs-attr{color:#4f9fcf}.source-code .html .hljs-tag .hljs-string{color:#d44950}.source-code .html .hljs-comment{color:#999}.source-code.dark .html .hljs-meta{color:#099}.source-code.dark .html .hljs-section,.source-code.dark .html .hljs-tag{color:#569cd6}.source-code.dark .html .hljs-tag .hljs-attr{color:#9cdcfe}.source-code.dark .html .hljs-tag .hljs-string{color:#ce9178}.source-code.dark .html .hljs-comment{color:#999}.source-code .js .hljs-number{color:#f5871f}.source-code .js .hljs-string{color:#d44950}.source-code .js .hljs-keyword{color:#2f6f9f}.source-code .js .hljs-comment{color:#999}.source-code.dark .js .hljs-number{color:#d7ba7d}.source-code.dark .js .hljs-string{color:#ce9178}.source-code.dark .js .hljs-keyword{color:#569cd6}.source-code.dark .js .hljs-comment{color:#999}.source-code .json .hljs-attr{color:#4f9fcf}.source-code .json .hljs-string{color:#d44950}.source-code .json .hljs-literal{color:#2f6f9f}.source-code .json .hljs-number{color:#f5871f}.source-code.dark .json .hljs-attr{color:#9cdcfe}.source-code.dark .json .hljs-string{color:#ce9178}.source-code.dark .json .hljs-literal{color:#569cd6}.source-code.dark .json .hljs-number{color:#d7ba7d}.source-code{margin-bottom:1rem}.source-code .nav-tabs a{color:#868e96;font-size:.95rem;text-decoration:none;padding:.75rem;padding-bottom:0;-webkit-transition:color 0.2s ease;-moz-transition:color 0.2s ease;-o-transition:color 0.2s ease;transition:color 0.2s ease}.source-code .nav-tabs a.active,.source-code .nav-tabs a:active,.source-code .nav-tabs a:hover{color:#3d4246}.source-code pre,.source-code .nav-tabs{background:#efefef;border:none}.source-code pre{margin:0;overflow-x:auto;padding:.75rem}.source-code.dark .nav-tabs a{color:gray}.source-code.dark .nav-tabs a.active,.source-code.dark .nav-tabs a:active,.source-code.dark .nav-tabs a:hover{color:#fff}.source-code.dark pre,.source-code.dark .nav-tabs{background:#222d32}.source-code.dark pre{color:#e8e8e8} diff --git a/dist/admin4b.min.css b/dist/admin4b.min.css index fcb532a4..234e2cf8 100644 --- a/dist/admin4b.min.css +++ b/dist/admin4b.min.css @@ -1 +1 @@ -html,body{background:#f8f9fa;width:100%;height:100%}body{font-family:'Open Sans', sans-serif;font-size:1rem}.app,.app-sidebar,.app-content{height:100%}.app{position:relative;width:100%}.app:before{content:"";height:100%;float:left}.app:after{content:"";clear:both;display:block}.app .app-body{position:absolute;width:100%;height:100%}.app .app-body .app-sidebar{background:#fff;float:left;font-size:0.95rem;overflow-x:hidden;overflow-y:scroll;padding:.95rem 0;position:relative;width:15rem}.app .app-body .app-sidebar::-webkit-scrollbar{background-color:#dee2e6;width:.2rem}.app .app-body .app-sidebar::-webkit-scrollbar-thumb{background-color:#007bff}@media (max-width: 767.99px){.app .app-body .app-sidebar{position:absolute;top:0;left:0;z-index:2050;width:0}.app .app-body .app-sidebar.sidebar-open{width:100%}}.app .app-body .app-content{position:relative;overflow:auto}.app .app-body .app-sidebar.sidebar-fade{-webkit-transition:opacity 0.3s linear,visibility 0.3s;-moz-transition:opacity 0.3s linear,visibility 0.3s;-o-transition:opacity 0.3s linear,visibility 0.3s;transition:opacity 0.3s linear,visibility 0.3s}@media (max-width: 767.99px){.app .app-body .app-sidebar.sidebar-fade{width:100%;filter:alpha(opacity=0);opacity:0;-webkit-backface-visibility:hidden;-moz-backface-visibility:hidden;visibility:hidden}.app .app-body .app-sidebar.sidebar-fade.sidebar-open{filter:alpha(opacity=100);opacity:1;-webkit-backface-visibility:visible;-moz-backface-visibility:visible;visibility:visible}}.app .app-body .app-sidebar.sidebar-slide-left{-webkit-transition:width 0.3s;-moz-transition:width 0.3s;-o-transition:width 0.3s;transition:width 0.3s}.app .app-body .app-sidebar.sidebar-dark{background:#34495e}.app .app-body .app-sidebar.sidebar-dark::-webkit-scrollbar{background-color:#2f4356}.app .app-body .app-sidebar.sidebar-dark::-webkit-scrollbar-thumb{background-color:#17a2b8}.app .app-body .app-sidebar.sidebar-dark .btn-sidebar .x:before,.app .app-body .app-sidebar.sidebar-dark .btn-sidebar .x:after{background-color:#98afc6}.app .app-body .app-sidebar.sidebar-dark .sidebar-header .user-photo{background-color:#2b3c4e;border-color:#17a2b8}.app .app-body .app-sidebar.sidebar-dark .sidebar-header .username{color:#b9c9d8}.app .app-body .app-sidebar.sidebar-dark .sidebar-nav .sidebar-nav-group{background:#293a4a}.app .app-body .app-sidebar.sidebar-dark .sidebar-nav .sidebar-nav-group .sidebar-nav-group .sidebar-nav-link:active,.app .app-body .app-sidebar.sidebar-dark .sidebar-nav .sidebar-nav-group .sidebar-nav-group .sidebar-nav-link:focus,.app .app-body .app-sidebar.sidebar-dark .sidebar-nav .sidebar-nav-group .sidebar-nav-group .sidebar-nav-link:hover{color:#17a2b8}.app .app-body .app-sidebar.sidebar-dark .sidebar-nav .sidebar-nav-link{color:#98afc6}.app .app-body .app-sidebar.sidebar-dark .sidebar-nav>.sidebar-nav-link,.app .app-body .app-sidebar.sidebar-dark .sidebar-nav>.sidebar-nav-group>.sidebar-nav-link{color:#dae2ea}.app .app-body .app-sidebar.sidebar-dark .sidebar-nav>.sidebar-nav-link.collapsed,.app .app-body .app-sidebar.sidebar-dark .sidebar-nav>.sidebar-nav-group>.sidebar-nav-link.collapsed{background-color:#34495e}.app .app-body .app-sidebar.sidebar-dark .sidebar-nav>.sidebar-nav-link:active,.app .app-body .app-sidebar.sidebar-dark .sidebar-nav>.sidebar-nav-link:focus,.app .app-body .app-sidebar.sidebar-dark .sidebar-nav>.sidebar-nav-link:hover,.app .app-body .app-sidebar.sidebar-dark .sidebar-nav>.sidebar-nav-link[aria-expanded=true],.app .app-body .app-sidebar.sidebar-dark .sidebar-nav>.sidebar-nav-group>.sidebar-nav-link:active,.app .app-body .app-sidebar.sidebar-dark .sidebar-nav>.sidebar-nav-group>.sidebar-nav-link:focus,.app .app-body .app-sidebar.sidebar-dark .sidebar-nav>.sidebar-nav-group>.sidebar-nav-link:hover,.app .app-body .app-sidebar.sidebar-dark .sidebar-nav>.sidebar-nav-group>.sidebar-nav-link[aria-expanded=true]{background-color:#293a4a}.app .app-body .app-sidebar.sidebar-dark .sidebar-footer a{color:#6789ab}.app .app-body .app-sidebar.sidebar-dark .sidebar-footer a:active,.app .app-body .app-sidebar.sidebar-dark .sidebar-footer a:focus,.app .app-body .app-sidebar.sidebar-dark .sidebar-footer a:hover{color:#fff}.app .app-body .app-sidebar.sidebar-light{background:#fff}.app .app-body .app-sidebar.sidebar-light::-webkit-scrollbar{background-color:#f8f9fa}.app .app-body .app-sidebar.sidebar-light::-webkit-scrollbar-thumb{background-color:#007bff}.app .app-body .app-sidebar.sidebar-light .btn-sidebar .x:before,.app .app-body .app-sidebar.sidebar-light .btn-sidebar .x:after{background-color:#bac2cb}.app .app-body .app-sidebar.sidebar-light .sidebar-header .user-photo{background-color:#f8f9fa;border-color:#ced4da}.app .app-body .app-sidebar.sidebar-light .sidebar-header .username{color:#495057}.app .app-body .app-sidebar.sidebar-light .sidebar-nav .sidebar-nav-group{background:#f2f2f2}.app .app-body .app-sidebar.sidebar-light .sidebar-nav .sidebar-nav-group .sidebar-nav-group .sidebar-nav-link:active,.app .app-body .app-sidebar.sidebar-light .sidebar-nav .sidebar-nav-group .sidebar-nav-group .sidebar-nav-link:focus,.app .app-body .app-sidebar.sidebar-light .sidebar-nav .sidebar-nav-group .sidebar-nav-group .sidebar-nav-link:hover{color:#007bff}.app .app-body .app-sidebar.sidebar-light .sidebar-nav .sidebar-nav-link{color:#606a73}.app .app-body .app-sidebar.sidebar-light .sidebar-nav>.sidebar-nav-link,.app .app-body .app-sidebar.sidebar-light .sidebar-nav>.sidebar-nav-group>.sidebar-nav-link{color:#495057}.app .app-body .app-sidebar.sidebar-light .sidebar-nav>.sidebar-nav-link.collapsed,.app .app-body .app-sidebar.sidebar-light .sidebar-nav>.sidebar-nav-group>.sidebar-nav-link.collapsed{background-color:#fff}.app .app-body .app-sidebar.sidebar-light .sidebar-nav>.sidebar-nav-link:active,.app .app-body .app-sidebar.sidebar-light .sidebar-nav>.sidebar-nav-link:focus,.app .app-body .app-sidebar.sidebar-light .sidebar-nav>.sidebar-nav-link:hover,.app .app-body .app-sidebar.sidebar-light .sidebar-nav>.sidebar-nav-link[aria-expanded=true],.app .app-body .app-sidebar.sidebar-light .sidebar-nav>.sidebar-nav-group>.sidebar-nav-link:active,.app .app-body .app-sidebar.sidebar-light .sidebar-nav>.sidebar-nav-group>.sidebar-nav-link:focus,.app .app-body .app-sidebar.sidebar-light .sidebar-nav>.sidebar-nav-group>.sidebar-nav-link:hover,.app .app-body .app-sidebar.sidebar-light .sidebar-nav>.sidebar-nav-group>.sidebar-nav-link[aria-expanded=true]{background-color:#ededed}.app .app-body .app-sidebar.sidebar-light .sidebar-footer a{color:#a1a8ae}.app .app-body .app-sidebar.sidebar-light .sidebar-footer a:active,.app .app-body .app-sidebar.sidebar-light .sidebar-footer a:focus,.app .app-body .app-sidebar.sidebar-light .sidebar-footer a:hover{color:#007bff}.btn-sidebar{background:transparent;font-size:1.4rem;margin-right:.3125rem}@media (min-width: 768px){.btn-sidebar{display:none}}.btn-sidebar .x{display:block;width:2rem;height:2rem}.btn-sidebar .x:before,.btn-sidebar .x:after{background-color:#ced4da;position:absolute;content:"";height:2.125rem;width:.125rem}.btn-sidebar .x:before{transform:rotate(45deg)}.btn-sidebar .x:after{transform:rotate(-45deg)}.app-sidebar .sidebar-header{padding:0 1.25rem;text-align:center}.app-sidebar .sidebar-header .user-photo{border:0.125rem solid transparent;height:4.5rem;padding:.125rem;width:4.5rem;-webkit-border-radius:50%;-moz-border-radius:50%;border-radius:50%}.app-sidebar .sidebar-header .username{padding:.625rem 0;white-space:nowrap}.app-sidebar .sidebar-header .username small{display:block;padding-top:.25rem;filter:alpha(opacity=75);opacity:.75}.app-sidebar .sidebar-nav{overflow:hidden;padding:0}.app-sidebar .sidebar-nav .sidebar-nav-group .sidebar-nav-group .sidebar-nav-link{padding:.375rem 3.75rem .625rem}.app-sidebar .sidebar-nav .sidebar-nav-link{display:block;outline:none;text-decoration:none;white-space:nowrap;-webkit-transition:color 0.25s ease-out;-moz-transition:color 0.25s ease-out;-o-transition:color 0.25s ease-out;transition:color 0.25s ease-out}.app-sidebar .sidebar-nav>.sidebar-nav-link,.app-sidebar .sidebar-nav>.sidebar-nav-group>.sidebar-nav-link{border:none;font-weight:400;padding:.95rem 1.5rem;white-space:nowrap;-webkit-transition:background-color 0.25s ease-out;-moz-transition:background-color 0.25s ease-out;-o-transition:background-color 0.25s ease-out;transition:background-color 0.25s ease-out}.app-sidebar .sidebar-nav>.sidebar-nav-link i,.app-sidebar .sidebar-nav>.sidebar-nav-group>.sidebar-nav-link i{font-size:1rem;padding-right:1rem;-webkit-transition:color 0.25s ease-out;-moz-transition:color 0.25s ease-out;-o-transition:color 0.25s ease-out;transition:color 0.25s ease-out}.app-sidebar .sidebar-footer{margin:1.5rem 0;text-align:center;white-space:nowrap}.app-sidebar .sidebar-footer a{font-size:1.4rem;outline:none;padding:0 .625rem;text-decoration:none;-webkit-transition:color 0.25s ease-out;-moz-transition:color 0.25s ease-out;-o-transition:color 0.25s ease-out;transition:color 0.25s ease-out}.form-sign{width:100%;max-width:26.25rem;padding:.95rem;margin:0 auto}.form-sign hr{width:5rem}.page-sign{justify-content:center;padding-top:2.45rem;padding-bottom:2.45rem;-ms-flex-align:center;-ms-flex-pack:center;-webkit-box-align:center;-webkit-box-pack:center;align-items:center;display:-webkit-box;display:-moz-box;display:-ms-flexbox;display:-webkit-flex;display:flex}label{margin-bottom:.25rem}.label-infield,.label-floating{position:relative}.label-infield label,.label-floating label{cursor:text}.label-infield>input{padding-top:1.75rem}.label-infield>label{position:absolute;top:0;left:0;color:#868e96;display:block;font-size:.95rem;line-height:1.5;margin-bottom:0;padding:.5rem .75rem;width:100%}.label-floating>input,.label-floating>label{padding:.75rem .75rem}.label-floating>label{position:absolute;top:0;left:0;display:block;width:100%;margin-bottom:0;line-height:1.5;color:#868e96;border:.0625rem solid transparent;transition:all .1s ease-in-out;-webkit-border-radius:.25rem;-moz-border-radius:.25rem;border-radius:.25rem}.label-floating input::-webkit-input-placeholder{color:transparent}.label-floating input:-moz-placeholder{color:transparent;filter:alpha(opacity=100);opacity:1}.label-floating input::-moz-placeholder{color:transparent;filter:alpha(opacity=100);opacity:1}.label-floating input:-ms-input-placeholder{color:transparent}.label-floating input::-ms-input-placeholder{color:transparent}.label-floating input:not(:placeholder-shown){padding-top:calc(.75rem + .75rem * (2 / 3));padding-bottom:calc(.75rem / 3)}.label-floating input:not(:placeholder-shown) ~ label{padding-top:calc(.75rem / 3);padding-bottom:calc(.75rem / 3);font-size:.75rem;color:#868e96}.callout{padding:1.25rem;margin-top:1.25rem;margin-bottom:1.25rem;border:.0625rem solid #eee;border-left-width:.25rem;-webkit-border-radius:.25rem;-moz-border-radius:.25rem;border-radius:.25rem}.callout h4{margin-top:0;margin-bottom:.25rem}.callout ul:last-child,.callout ol:last-child,.callout p:last-child{margin-bottom:0}.callout code{-webkit-border-radius:.25rem;-moz-border-radius:.25rem;border-radius:.25rem}.callout+.callout{margin-top:-.25rem}.callout.callout-info{border-left-color:#5bc0de}.callout.callout-info h4{color:#5bc0de}.callout.callout-warning{border-left-color:#f0ad4e}.callout.callout-warning h4{color:#f0ad4e}.callout.callout-danger{border-left-color:#d9534f}.callout.callout-danger h4{color:#d9534f}label.checkbox{margin-bottom:0;-ms-flex-align:center;-ms-flex-pack:center;-webkit-box-align:center;-webkit-box-pack:center;align-items:center;display:-webkit-box;display:-moz-box;display:-ms-inline-flexbox;display:-webkit-inline-flex;display:inline-flex;-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none}label.checkbox input[type=checkbox]{position:absolute;filter:alpha(opacity=0);opacity:0}label.checkbox input[type=checkbox],label.checkbox input[type=checkbox]:after,label.checkbox input[type=checkbox]:before,label.checkbox input[type=checkbox] *,label.checkbox input[type=checkbox] *:after,label.checkbox input[type=checkbox] *:before,label.checkbox input[type=checkbox]+span{box-sizing:border-box}label.checkbox input[type=checkbox]::selection,label.checkbox input[type=checkbox]:after::selection,label.checkbox input[type=checkbox]:before::selection,label.checkbox input[type=checkbox] *::selection,label.checkbox input[type=checkbox] *:after::selection,label.checkbox input[type=checkbox] *:before::selection,label.checkbox input[type=checkbox]+span::selection{background:none}label.checkbox input[type=checkbox]+.check-mark{background-color:#fff;border:0.0625rem solid #adb5bd;cursor:pointer;height:1.25rem;width:1.25rem;margin-right:.625rem;position:relative;-webkit-border-radius:.3125rem;-moz-border-radius:.3125rem;border-radius:.3125rem;-webkit-transition:all 0.2s ease;-moz-transition:all 0.2s ease;-o-transition:all 0.2s ease;transition:all 0.2s ease}label.checkbox input[type=checkbox]+.check-mark:after{content:"";position:absolute;display:none;left:.375rem;top:.1875rem;width:.375rem;height:.625rem;border:solid #fff;border-width:0 .125rem .125rem 0;-webkit-transform:rotate(45deg);-moz-transform:rotate(45deg);-ms-transform:rotate(45deg);transform:rotate(45deg)}label.checkbox input[type=checkbox]:focus+.check-mark{-webkit-box-shadow:0 0 0 0.2rem rgba(173,181,189,0.25);-moz-box-shadow:0 0 0 0.2rem rgba(173,181,189,0.25);box-shadow:0 0 0 0.2rem rgba(173,181,189,0.25)}label.checkbox input[type=checkbox]:checked+.check-mark{background:#adb5bd}label.checkbox input[type=checkbox]:checked+.check-mark:after{display:block}label.checkbox input[type=checkbox]:disabled+.check-mark{cursor:not-allowed}label.checkbox.checkbox-sm{font-size:.8rem}label.checkbox.checkbox-sm input[type=checkbox]+.check-mark{height:1.05rem;width:1.05rem}label.checkbox.checkbox-sm input[type=checkbox]+.check-mark:after{left:.3125rem;top:.125rem;width:.3125rem;height:.55rem}label.checkbox.checkbox-lg{font-size:1.05rem}label.checkbox.checkbox-lg input[type=checkbox]+.check-mark{height:1.6rem;width:1.6rem}label.checkbox.checkbox-lg input[type=checkbox]+.check-mark:after{left:.5rem;top:.25rem;width:.4375rem;height:.75rem;border-width:0 .1875rem .1875rem 0}label.checkbox-danger input[type=checkbox]+.check-mark{border-color:#dc3545}label.checkbox-danger input[type=checkbox]:checked+.check-mark{background:#dc3545}label.checkbox-danger input[type=checkbox]:checked:disabled+.check-mark{background:#eb8c95;border-color:#eb8c95}label.checkbox-danger input[type=checkbox]:focus+.check-mark{-webkit-box-shadow:0 0 0 0.2rem rgba(220,53,69,0.25);-moz-box-shadow:0 0 0 0.2rem rgba(220,53,69,0.25);box-shadow:0 0 0 0.2rem rgba(220,53,69,0.25)}label.checkbox-info input[type=checkbox]+.check-mark{border-color:#17a2b8}label.checkbox-info input[type=checkbox]:checked+.check-mark{background:#17a2b8}label.checkbox-info input[type=checkbox]:checked:disabled+.check-mark{background:#4cd3e9;border-color:#4cd3e9}label.checkbox-info input[type=checkbox]:focus+.check-mark{-webkit-box-shadow:0 0 0 0.2rem rgba(23,162,184,0.25);-moz-box-shadow:0 0 0 0.2rem rgba(23,162,184,0.25);box-shadow:0 0 0 0.2rem rgba(23,162,184,0.25)}label.checkbox-primary input[type=checkbox]+.check-mark{border-color:#007bff}label.checkbox-primary input[type=checkbox]:checked+.check-mark{background:#007bff}label.checkbox-primary input[type=checkbox]:checked:disabled+.check-mark{background:#66b0ff;border-color:#66b0ff}label.checkbox-primary input[type=checkbox]:focus+.check-mark{-webkit-box-shadow:0 0 0 0.2rem rgba(0,123,255,0.25);-moz-box-shadow:0 0 0 0.2rem rgba(0,123,255,0.25);box-shadow:0 0 0 0.2rem rgba(0,123,255,0.25)}label.checkbox-success input[type=checkbox]+.check-mark{border-color:#28a745}label.checkbox-success input[type=checkbox]:checked+.check-mark{background:#28a745}label.checkbox-success input[type=checkbox]:checked:disabled+.check-mark{background:#5dd879;border-color:#5dd879}label.checkbox-success input[type=checkbox]:focus+.check-mark{-webkit-box-shadow:0 0 0 0.2rem rgba(40,167,69,0.25);-moz-box-shadow:0 0 0 0.2rem rgba(40,167,69,0.25);box-shadow:0 0 0 0.2rem rgba(40,167,69,0.25)}label.checkbox-warning input[type=checkbox]+.check-mark{border-color:#ffc107}label.checkbox-warning input[type=checkbox]:checked+.check-mark{background:#ffc107}label.checkbox-warning input[type=checkbox]:checked:disabled+.check-mark{background:#ffdb6d;border-color:#ffdb6d}label.checkbox-warning input[type=checkbox]:focus+.check-mark{-webkit-box-shadow:0 0 0 0.2rem rgba(255,193,7,0.25);-moz-box-shadow:0 0 0 0.2rem rgba(255,193,7,0.25);box-shadow:0 0 0 0.2rem rgba(255,193,7,0.25)}.form-group.has-error label{color:#dc3545}.form-group.has-error .form-control{border:0.0625rem solid #dc3545}.form-group.has-error .form-control:focus{-webkit-box-shadow:0 0 0 0.2rem rgba(220,53,69,0.25);-moz-box-shadow:0 0 0 0.2rem rgba(220,53,69,0.25);box-shadow:0 0 0 0.2rem rgba(220,53,69,0.25)}.input-group.as-input{cursor:text;-webkit-border-radius:.25rem;-moz-border-radius:.25rem;border-radius:.25rem;-webkit-transition:border-color 0.15s ease-in-out,box-shadow 0.15s ease-in-out;-moz-transition:border-color 0.15s ease-in-out,box-shadow 0.15s ease-in-out;-o-transition:border-color 0.15s ease-in-out,box-shadow 0.15s ease-in-out;transition:border-color 0.15s ease-in-out,box-shadow 0.15s ease-in-out}.input-group.as-input .form-control{-webkit-box-shadow:none;-moz-box-shadow:none;box-shadow:none}.input-group.as-input .input-group-prepend>.input-group-text,.input-group.as-input .input-group-append>.input-group-text{background-color:#fff}.input-group.as-input.prepend .form-control{border-left:none}.input-group.as-input.prepend .input-group-prepend>.input-group-text{border-right:none}.input-group.as-input.append .form-control{border-right:none}.input-group.as-input.append .input-group-append>.input-group-text{border-left:none}.input-group.as-input.is-invalid .form-control,.input-group.as-input.is-invalid .input-group-prepend>.input-group-text,.input-group.as-input.is-invalid .input-group-append>.input-group-text{border-color:#dc3545}.input-group.as-input.is-valid .form-control,.input-group.as-input.is-valid .input-group-prepend>.input-group-text,.input-group.as-input.is-valid .input-group-append>.input-group-text{border-color:#28a745}.input-group.as-input.focus{-webkit-box-shadow:0 0 0 0.2rem rgba(0,123,255,0.25);-moz-box-shadow:0 0 0 0.2rem rgba(0,123,255,0.25);box-shadow:0 0 0 0.2rem rgba(0,123,255,0.25)}.input-group.as-input.focus .form-control,.input-group.as-input.focus .input-group-prepend>.input-group-text,.input-group.as-input.focus .input-group-append>.input-group-text{border-color:#80bdff}.input-group.as-input.focus.is-invalid{-webkit-box-shadow:0 0 0 0.2rem rgba(220,53,69,0.25);-moz-box-shadow:0 0 0 0.2rem rgba(220,53,69,0.25);box-shadow:0 0 0 0.2rem rgba(220,53,69,0.25)}.input-group.as-input.focus.is-invalid .form-control,.input-group.as-input.focus.is-invalid .input-group-prepend>.input-group-text,.input-group.as-input.focus.is-invalid .input-group-append>.input-group-text{border-color:#dc3545}.input-group.as-input.focus.is-valid{-webkit-box-shadow:0 0 0 0.2rem rgba(40,167,69,0.25);-moz-box-shadow:0 0 0 0.2rem rgba(40,167,69,0.25);box-shadow:0 0 0 0.2rem rgba(40,167,69,0.25)}.input-group.as-input.focus.is-valid .form-control,.input-group.as-input.focus.is-valid .input-group-prepend>.input-group-text,.input-group.as-input.focus.is-valid .input-group-append>.input-group-text{border-color:#28a745}.input-group.as-input.disabled .form-control,.input-group.as-input.disabled .input-group-prepend>.input-group-text,.input-group.as-input.disabled .input-group-append>.input-group-text,.input-group.as-input.readonly .form-control,.input-group.as-input.readonly .input-group-prepend>.input-group-text,.input-group.as-input.readonly .input-group-append>.input-group-text{background:#e9ecef}.input-suggestion{position:relative;-webkit-border-radius:.25rem;-moz-border-radius:.25rem;border-radius:.25rem}.input-suggestion .input-suggestion-list{background-color:#fff;border-bottom:0.0625rem solid #007bff;border-left:0.0625rem solid #007bff;border-right:0.0625rem solid #007bff;display:none;position:absolute;width:100%;z-index:1050;-webkit-border-bottom-left-radius:.31rem;-webkit-border-bottom-right-radius:.31rem;-moz-border-bottom-left-radius:.31rem;-moz-border-bottom-right-radius:.31rem;border-bottom-left-radius:.31rem;border-bottom-right-radius:.31rem}.input-suggestion .input-suggestion-list .list-group .list-group-item{border:none;-webkit-border-top-left-radius:0;-webkit-border-top-right-radius:0;-moz-border-top-left-radius:0;-moz-border-top-right-radius:0;border-top-left-radius:0;border-top-right-radius:0}.input-suggestion.open{-webkit-box-shadow:0 0 0 0.2rem rgba(0,123,255,0.25);-moz-box-shadow:0 0 0 0.2rem rgba(0,123,255,0.25);box-shadow:0 0 0 0.2rem rgba(0,123,255,0.25)}.input-suggestion.open input{-webkit-border-bottom-left-radius:0;-webkit-border-bottom-right-radius:0;-moz-border-bottom-left-radius:0;-moz-border-bottom-right-radius:0;border-bottom-left-radius:0;border-bottom-right-radius:0;-webkit-box-shadow:none;-moz-box-shadow:none;box-shadow:none}.input-suggestion.open input,.input-suggestion.open .input-suggestion-list{background-color:#fff;border-color:#80bdff;color:#495057;display:block;-webkit-transition:border-color 0.15s ease-in-out,box-shadow 0.15s ease-in-out;-moz-transition:border-color 0.15s ease-in-out,box-shadow 0.15s ease-in-out;-o-transition:border-color 0.15s ease-in-out,box-shadow 0.15s ease-in-out;transition:border-color 0.15s ease-in-out,box-shadow 0.15s ease-in-out}label.radio{margin-bottom:0;-ms-flex-align:center;-ms-flex-pack:center;-webkit-box-align:center;-webkit-box-pack:center;align-items:center;display:-webkit-box;display:-moz-box;display:-ms-inline-flexbox;display:-webkit-inline-flex;display:inline-flex;-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none}label.radio input[type=radio],label.radio input[type=checkbox]{position:absolute;filter:alpha(opacity=0);opacity:0}label.radio input[type=radio],label.radio input[type=radio]:after,label.radio input[type=radio]:before,label.radio input[type=radio] *,label.radio input[type=radio] *:after,label.radio input[type=radio] *:before,label.radio input[type=radio]+span,label.radio input[type=checkbox],label.radio input[type=checkbox]:after,label.radio input[type=checkbox]:before,label.radio input[type=checkbox] *,label.radio input[type=checkbox] *:after,label.radio input[type=checkbox] *:before,label.radio input[type=checkbox]+span{box-sizing:border-box}label.radio input[type=radio]::selection,label.radio input[type=radio]:after::selection,label.radio input[type=radio]:before::selection,label.radio input[type=radio] *::selection,label.radio input[type=radio] *:after::selection,label.radio input[type=radio] *:before::selection,label.radio input[type=radio]+span::selection,label.radio input[type=checkbox]::selection,label.radio input[type=checkbox]:after::selection,label.radio input[type=checkbox]:before::selection,label.radio input[type=checkbox] *::selection,label.radio input[type=checkbox] *:after::selection,label.radio input[type=checkbox] *:before::selection,label.radio input[type=checkbox]+span::selection{background:none}label.radio input[type=radio]+.check-mark,label.radio input[type=checkbox]+.check-mark{background-color:#fff;border:0.0625rem solid #adb5bd;cursor:pointer;height:1.125rem;width:1.125rem;margin-right:.625rem;position:relative;-webkit-border-radius:100%;-moz-border-radius:100%;border-radius:100%;-webkit-transition:all 0.2s ease;-moz-transition:all 0.2s ease;-o-transition:all 0.2s ease;transition:all 0.2s ease}label.radio input[type=radio]+.check-mark:after,label.radio input[type=checkbox]+.check-mark:after{background:#868e96;border:0.125rem solid #fff;content:"";position:absolute;width:1rem;height:1rem;-webkit-border-radius:100%;-moz-border-radius:100%;border-radius:100%;-webkit-transition:all 0.2s ease;-moz-transition:all 0.2s ease;-o-transition:all 0.2s ease;transition:all 0.2s ease}label.radio input[type=radio]:focus+.check-mark,label.radio input[type=checkbox]:focus+.check-mark{-webkit-box-shadow:0 0 0 0.2rem rgba(173,181,189,0.25);-moz-box-shadow:0 0 0 0.2rem rgba(173,181,189,0.25);box-shadow:0 0 0 0.2rem rgba(173,181,189,0.25)}label.radio input[type=radio]:checked+.check-mark:after,label.radio input[type=checkbox]:checked+.check-mark:after{-webkit-transform:scale(1);-moz-transform:scale(1);-ms-transform:scale(1);transform:scale(1)}label.radio input[type=radio]:not(:checked)+.check-mark:after,label.radio input[type=checkbox]:not(:checked)+.check-mark:after{-webkit-transform:scale(0);-moz-transform:scale(0);-ms-transform:scale(0);transform:scale(0)}label.radio input[type=radio]:disabled+.check-mark,label.radio input[type=checkbox]:disabled+.check-mark{color:#606a73;cursor:not-allowed}label.radio input[type=radio]:disabled+.check-mark:before,label.radio input[type=checkbox]:disabled+.check-mark:before{border-color:#bbc2c8}label.radio input[type=radio]:disabled+.check-mark:after,label.radio input[type=checkbox]:disabled+.check-mark:after{background:#a1a8ae}label.radio.radio-sm{font-size:.875rem}label.radio.radio-sm input[type=radio]+.check-mark,label.radio.radio-sm input[type=checkbox]+.check-mark{width:1rem;height:1rem}label.radio.radio-sm input[type=radio]+.check-mark:after,label.radio.radio-sm input[type=checkbox]+.check-mark:after{border-width:.1rem;width:.875rem;height:.875rem}label.radio.radio-lg{font-size:1.125rem}label.radio.radio-lg input[type=radio]+.check-mark,label.radio.radio-lg input[type=checkbox]+.check-mark{width:1.4rem;height:1.4rem}label.radio.radio-lg input[type=radio]+.check-mark:after,label.radio.radio-lg input[type=checkbox]+.check-mark:after{border-width:.175rem;width:1.275rem;height:1.275rem}label.radio-danger input[type=radio]+.check-mark,label.radio-danger input[type=checkbox]+.check-mark{border-color:#dc3545}label.radio-danger input[type=radio]+.check-mark:after,label.radio-danger input[type=checkbox]+.check-mark:after{background:#dc3545}label.radio-danger input[type=radio]:disabled+.check-mark,label.radio-danger input[type=checkbox]:disabled+.check-mark{border-color:#eb8c95}label.radio-danger input[type=radio]:disabled+.check-mark:after,label.radio-danger input[type=checkbox]:disabled+.check-mark:after{background:#eb8c95}label.radio-danger input[type=radio]:focus+.check-mark,label.radio-danger input[type=checkbox]:focus+.check-mark{-webkit-box-shadow:0 0 0 0.2rem rgba(220,53,69,0.25);-moz-box-shadow:0 0 0 0.2rem rgba(220,53,69,0.25);box-shadow:0 0 0 0.2rem rgba(220,53,69,0.25)}label.radio-info input[type=radio]+.check-mark,label.radio-info input[type=checkbox]+.check-mark{border-color:#17a2b8}label.radio-info input[type=radio]+.check-mark:after,label.radio-info input[type=checkbox]+.check-mark:after{background:#17a2b8}label.radio-info input[type=radio]:disabled+.check-mark,label.radio-info input[type=checkbox]:disabled+.check-mark{border-color:#4cd3e9}label.radio-info input[type=radio]:disabled+.check-mark:after,label.radio-info input[type=checkbox]:disabled+.check-mark:after{background:#4cd3e9}label.radio-info input[type=radio]:focus+.check-mark,label.radio-info input[type=checkbox]:focus+.check-mark{-webkit-box-shadow:0 0 0 0.2rem rgba(23,162,184,0.25);-moz-box-shadow:0 0 0 0.2rem rgba(23,162,184,0.25);box-shadow:0 0 0 0.2rem rgba(23,162,184,0.25)}label.radio-primary input[type=radio]+.check-mark,label.radio-primary input[type=checkbox]+.check-mark{border-color:#007bff}label.radio-primary input[type=radio]+.check-mark:after,label.radio-primary input[type=checkbox]+.check-mark:after{background:#007bff}label.radio-primary input[type=radio]:disabled+.check-mark,label.radio-primary input[type=checkbox]:disabled+.check-mark{border-color:#66b0ff}label.radio-primary input[type=radio]:disabled+.check-mark:after,label.radio-primary input[type=checkbox]:disabled+.check-mark:after{background:#66b0ff}label.radio-primary input[type=radio]:focus+.check-mark,label.radio-primary input[type=checkbox]:focus+.check-mark{-webkit-box-shadow:0 0 0 0.2rem rgba(0,123,255,0.25);-moz-box-shadow:0 0 0 0.2rem rgba(0,123,255,0.25);box-shadow:0 0 0 0.2rem rgba(0,123,255,0.25)}label.radio-success input[type=radio]+.check-mark,label.radio-success input[type=checkbox]+.check-mark{border-color:#28a745}label.radio-success input[type=radio]+.check-mark:after,label.radio-success input[type=checkbox]+.check-mark:after{background:#28a745}label.radio-success input[type=radio]:disabled+.check-mark,label.radio-success input[type=checkbox]:disabled+.check-mark{border-color:#5dd879}label.radio-success input[type=radio]:disabled+.check-mark:after,label.radio-success input[type=checkbox]:disabled+.check-mark:after{background:#5dd879}label.radio-success input[type=radio]:focus+.check-mark,label.radio-success input[type=checkbox]:focus+.check-mark{-webkit-box-shadow:0 0 0 0.2rem rgba(40,167,69,0.25);-moz-box-shadow:0 0 0 0.2rem rgba(40,167,69,0.25);box-shadow:0 0 0 0.2rem rgba(40,167,69,0.25)}label.radio-warning input[type=radio]+.check-mark,label.radio-warning input[type=checkbox]+.check-mark{border-color:#ffc107}label.radio-warning input[type=radio]+.check-mark:after,label.radio-warning input[type=checkbox]+.check-mark:after{background:#ffc107}label.radio-warning input[type=radio]:disabled+.check-mark,label.radio-warning input[type=checkbox]:disabled+.check-mark{border-color:#ffdb6d}label.radio-warning input[type=radio]:disabled+.check-mark:after,label.radio-warning input[type=checkbox]:disabled+.check-mark:after{background:#ffdb6d}label.radio-warning input[type=radio]:focus+.check-mark,label.radio-warning input[type=checkbox]:focus+.check-mark{-webkit-box-shadow:0 0 0 0.2rem rgba(255,193,7,0.25);-moz-box-shadow:0 0 0 0.2rem rgba(255,193,7,0.25);box-shadow:0 0 0 0.2rem rgba(255,193,7,0.25)}@keyframes spinner{0%{-webkit-transform:rotate(0deg);-moz-transform:rotate(0deg);-ms-transform:rotate(0deg);transform:rotate(0deg)}100%{-webkit-transform:rotate(360deg);-moz-transform:rotate(360deg);-ms-transform:rotate(360deg);transform:rotate(360deg)}}@-webkit-keyframes spinner{0%{-webkit-transform:rotate(0deg);-moz-transform:rotate(0deg);-ms-transform:rotate(0deg);transform:rotate(0deg)}100%{-webkit-transform:rotate(360deg);-moz-transform:rotate(360deg);-ms-transform:rotate(360deg);transform:rotate(360deg)}}@-moz-keyframes spinner{0%{-webkit-transform:rotate(0deg);-moz-transform:rotate(0deg);-ms-transform:rotate(0deg);transform:rotate(0deg)}100%{-webkit-transform:rotate(360deg);-moz-transform:rotate(360deg);-ms-transform:rotate(360deg);transform:rotate(360deg)}}@-o-keyframes spinner{0%{-webkit-transform:rotate(0deg);-moz-transform:rotate(0deg);-ms-transform:rotate(0deg);transform:rotate(0deg)}100%{-webkit-transform:rotate(360deg);-moz-transform:rotate(360deg);-ms-transform:rotate(360deg);transform:rotate(360deg)}}.spinner{display:inline-block;text-align:center}.spinner .spinner-bar{position:relative;width:3rem;height:3rem;border:.25rem solid transparent;border-top-color:#2980b9;border-left-color:#2980b9;border-right-color:#2980b9;-webkit-animation:spinner 1s linear infinite;-moz-animation:spinner 1s linear infinite;-o-animation:spinner 1s linear infinite;animation:spinner 1s linear infinite;-webkit-border-radius:50%;-moz-border-radius:50%;border-radius:50%}.spinner .spinner-text{position:relative;font-size:.875rem}.spinner.spinner-block{position:fixed;background:rgba(255,255,255,0.85);top:0;left:0;width:100%;height:100%;z-index:3050;filter:alpha(opacity=0);opacity:0;-webkit-backface-visibility:hidden;-moz-backface-visibility:hidden;visibility:hidden;-webkit-transition:all 0.3s ease-out;-moz-transition:all 0.3s ease-out;-o-transition:all 0.3s ease-out;transition:all 0.3s ease-out}.spinner.spinner-block .spinner-bar{left:50%;top:50%;margin:-2rem 0 0 -2rem;border:.25rem solid transparent;border-top-color:#2980b9;border-left-color:#2980b9;border-right-color:#2980b9;-webkit-animation:spinner 1s linear infinite;-moz-animation:spinner 1s linear infinite;-o-animation:spinner 1s linear infinite;animation:spinner 1s linear infinite;-webkit-border-radius:50%;-moz-border-radius:50%;border-radius:50%}.spinner.spinner-block .spinner-text{padding:.25rem 0;text-align:center;top:50%}.spinner.spinner-block.show{filter:alpha(opacity=100);opacity:1;-webkit-backface-visibility:visible;-moz-backface-visibility:visible;visibility:visible}.spinner.spinner-sm .spinner-bar{width:2.25rem;height:2.25rem}.spinner.spinner-sm .spinner-text{font-size:.8rem}.spinner.spinner-lg .spinner-bar{width:3.75rem;height:3.75rem}.spinner.spinner-lg .spinner-text{font-size:.95rem}label.switch{margin-bottom:0;position:relative;-ms-flex-align:center;-ms-flex-pack:center;-webkit-box-align:center;-webkit-box-pack:center;align-items:center;display:-webkit-box;display:-moz-box;display:-ms-inline-flexbox;display:-webkit-inline-flex;display:inline-flex;-webkit-border-radius:2rem;-moz-border-radius:2rem;border-radius:2rem}label.switch input[type=checkbox]{position:absolute;filter:alpha(opacity=0);opacity:0}label.switch input[type=checkbox],label.switch input[type=checkbox]:after,label.switch input[type=checkbox]:before,label.switch input[type=checkbox] *,label.switch input[type=checkbox] *:after,label.switch input[type=checkbox] *:before,label.switch input[type=checkbox]+span{box-sizing:border-box}label.switch input[type=checkbox]::selection,label.switch input[type=checkbox]:after::selection,label.switch input[type=checkbox]:before::selection,label.switch input[type=checkbox] *::selection,label.switch input[type=checkbox] *:after::selection,label.switch input[type=checkbox] *:before::selection,label.switch input[type=checkbox]+span::selection{background:none}label.switch input[type=checkbox]+.switch-slider{background:#ced4da;cursor:pointer;display:block;height:2rem;outline:0;padding:.125rem;position:relative;width:4rem;-webkit-border-radius:2rem;-moz-border-radius:2rem;border-radius:2rem;-webkit-transition:all 0.4s ease;-moz-transition:all 0.4s ease;-o-transition:all 0.4s ease;transition:all 0.4s ease;-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none}label.switch input[type=checkbox]+.switch-slider:before,label.switch input[type=checkbox]+.switch-slider:after{position:relative;display:block;content:"";width:50%;height:100%}label.switch input[type=checkbox]+.switch-slider:before{display:none}label.switch input[type=checkbox]+.switch-slider:after{left:0;background:#fff;-webkit-border-radius:50%;-moz-border-radius:50%;border-radius:50%;-webkit-box-shadow:none;-moz-box-shadow:none;box-shadow:none;-webkit-transition:all 0.2s ease;-moz-transition:all 0.2s ease;-o-transition:all 0.2s ease;transition:all 0.2s ease}label.switch input[type=checkbox]:checked+.switch-slider:after{left:50%}label.switch input[type=checkbox]:disabled+.switch-slider{background:#dde1e5;cursor:not-allowed}label.switch input[type=checkbox]:focus+.switch-slider{-webkit-box-shadow:0 0 0 0.2rem rgba(206,212,218,0.25);-moz-box-shadow:0 0 0 0.2rem rgba(206,212,218,0.25);box-shadow:0 0 0 0.2rem rgba(206,212,218,0.25)}label.switch.switch-sm{font-size:.875rem}label.switch.switch-sm input[type=checkbox]+.switch-slider{height:1.5rem;width:2.75rem;-webkit-border-radius:1.5rem;-moz-border-radius:1.5rem;border-radius:1.5rem}label.switch.switch-lg{font-size:1.125rem}label.switch.switch-lg input[type=checkbox]+.switch-slider{height:2.5rem;width:5rem;-webkit-border-radius:2.5rem;-moz-border-radius:2.5rem;border-radius:2.5rem}label.switch-danger input[type=checkbox]+.switch-slider{background:#dc3545}label.switch-danger input[type=checkbox]:disabled+.switch-slider{background:#eb8c95}label.switch-danger input[type=checkbox]:focus+.switch-slider{-webkit-box-shadow:0 0 0 0.2rem rgba(220,53,69,0.25);-moz-box-shadow:0 0 0 0.2rem rgba(220,53,69,0.25);box-shadow:0 0 0 0.2rem rgba(220,53,69,0.25)}label.switch-info input[type=checkbox]+.switch-slider{background:#17a2b8}label.switch-info input[type=checkbox]:disabled+.switch-slider{background:#4cd3e9}label.switch-info input[type=checkbox]:focus+.switch-slider{-webkit-box-shadow:0 0 0 0.2rem rgba(23,162,184,0.25);-moz-box-shadow:0 0 0 0.2rem rgba(23,162,184,0.25);box-shadow:0 0 0 0.2rem rgba(23,162,184,0.25)}label.switch-primary input[type=checkbox]+.switch-slider{background:#007bff}label.switch-primary input[type=checkbox]:disabled+.switch-slider{background:#66b0ff}label.switch-primary input[type=checkbox]:focus+.switch-slider{-webkit-box-shadow:0 0 0 0.2rem rgba(0,123,255,0.25);-moz-box-shadow:0 0 0 0.2rem rgba(0,123,255,0.25);box-shadow:0 0 0 0.2rem rgba(0,123,255,0.25)}label.switch-success input[type=checkbox]+.switch-slider{background:#28a745}label.switch-success input[type=checkbox]:disabled+.switch-slider{background:#5dd879}label.switch-success input[type=checkbox]:focus+.switch-slider{-webkit-box-shadow:0 0 0 0.2rem rgba(40,167,69,0.25);-moz-box-shadow:0 0 0 0.2rem rgba(40,167,69,0.25);box-shadow:0 0 0 0.2rem rgba(40,167,69,0.25)}label.switch-warning input[type=checkbox]+.switch-slider{background:#ffc107}label.switch-warning input[type=checkbox]:disabled+.switch-slider{background:#ffdb6d}label.switch-warning input[type=checkbox]:focus+.switch-slider{-webkit-box-shadow:0 0 0 0.2rem rgba(255,193,7,0.25);-moz-box-shadow:0 0 0 0.2rem rgba(255,193,7,0.25);box-shadow:0 0 0 0.2rem rgba(255,193,7,0.25)}label.switch-to-danger input[type=checkbox]:checked+.switch-slider{background:#dc3545}label.switch-to-danger input[type=checkbox]:checked:disabled+.switch-slider{background:#eb8c95}label.switch-to-danger input[type=checkbox]:checked:focus+.switch-slider{-webkit-box-shadow:0 0 0 0.2rem rgba(220,53,69,0.25);-moz-box-shadow:0 0 0 0.2rem rgba(220,53,69,0.25);box-shadow:0 0 0 0.2rem rgba(220,53,69,0.25)}label.switch-to-info input[type=checkbox]:checked+.switch-slider{background:#17a2b8}label.switch-to-info input[type=checkbox]:checked:disabled+.switch-slider{background:#4cd3e9}label.switch-to-info input[type=checkbox]:checked:focus+.switch-slider{-webkit-box-shadow:0 0 0 0.2rem rgba(23,162,184,0.25);-moz-box-shadow:0 0 0 0.2rem rgba(23,162,184,0.25);box-shadow:0 0 0 0.2rem rgba(23,162,184,0.25)}label.switch-to-primary input[type=checkbox]:checked+.switch-slider{background:#007bff}label.switch-to-primary input[type=checkbox]:checked:disabled+.switch-slider{background:#66b0ff}label.switch-to-primary input[type=checkbox]:checked:focus+.switch-slider{-webkit-box-shadow:0 0 0 0.2rem rgba(0,123,255,0.25);-moz-box-shadow:0 0 0 0.2rem rgba(0,123,255,0.25);box-shadow:0 0 0 0.2rem rgba(0,123,255,0.25)}label.switch-to-success input[type=checkbox]:checked+.switch-slider{background:#28a745}label.switch-to-success input[type=checkbox]:checked:disabled+.switch-slider{background:#5dd879}label.switch-to-success input[type=checkbox]:checked:focus+.switch-slider{-webkit-box-shadow:0 0 0 0.2rem rgba(40,167,69,0.25);-moz-box-shadow:0 0 0 0.2rem rgba(40,167,69,0.25);box-shadow:0 0 0 0.2rem rgba(40,167,69,0.25)}label.switch-to-warning input[type=checkbox]:checked+.switch-slider{background:#ffc107}label.switch-to-warning input[type=checkbox]:checked:disabled+.switch-slider{background:#ffdb6d}label.switch-to-warning input[type=checkbox]:checked:focus+.switch-slider{-webkit-box-shadow:0 0 0 0.2rem rgba(255,193,7,0.25);-moz-box-shadow:0 0 0 0.2rem rgba(255,193,7,0.25);box-shadow:0 0 0 0.2rem rgba(255,193,7,0.25)} +html,body{background:#f8f9fa;width:100%;height:100%}body{font-family:'Open Sans', sans-serif;font-size:1rem}.app,.app-sidebar,.app-content{height:100%}.app{position:relative;width:100%}.app:before{content:"";height:100%;float:left}.app:after{content:"";clear:both;display:block}.app .app-body{position:absolute;width:100%;height:100%}.app .app-body .app-sidebar{background:#fff;float:left;font-size:0.95rem;overflow-x:hidden;overflow-y:scroll;padding:.95rem 0;position:relative;width:15rem}.app .app-body .app-sidebar::-webkit-scrollbar{background-color:#dee2e6;width:.2rem}.app .app-body .app-sidebar::-webkit-scrollbar-thumb{background-color:#007bff}@media (max-width: 767.99px){.app .app-body .app-sidebar{position:absolute;top:0;left:0;z-index:2050;width:0}.app .app-body .app-sidebar.sidebar-open{width:100%}}.app .app-body .app-content{position:relative;overflow:auto}@media print{.app .app-body{position:relative;height:auto}.app .app-body .app-sidebar{display:none}}.app .app-body .app-sidebar.sidebar-fade{-webkit-transition:opacity 0.3s linear,visibility 0.3s;-moz-transition:opacity 0.3s linear,visibility 0.3s;-o-transition:opacity 0.3s linear,visibility 0.3s;transition:opacity 0.3s linear,visibility 0.3s}@media (max-width: 767.99px){.app .app-body .app-sidebar.sidebar-fade{width:100%;filter:alpha(opacity=0);opacity:0;-webkit-backface-visibility:hidden;-moz-backface-visibility:hidden;visibility:hidden}.app .app-body .app-sidebar.sidebar-fade.sidebar-open{filter:alpha(opacity=100);opacity:1;-webkit-backface-visibility:visible;-moz-backface-visibility:visible;visibility:visible}}.app .app-body .app-sidebar.sidebar-slide-left{-webkit-transition:width 0.3s;-moz-transition:width 0.3s;-o-transition:width 0.3s;transition:width 0.3s}.app .app-body .app-sidebar.sidebar-dark{background:#34495e}.app .app-body .app-sidebar.sidebar-dark::-webkit-scrollbar{background-color:#2f4356}.app .app-body .app-sidebar.sidebar-dark::-webkit-scrollbar-thumb{background-color:#17a2b8}.app .app-body .app-sidebar.sidebar-dark .btn-sidebar .x:before,.app .app-body .app-sidebar.sidebar-dark .btn-sidebar .x:after{background-color:#98afc6}.app .app-body .app-sidebar.sidebar-dark .sidebar-header .user-photo{background-color:#2b3c4e;border-color:#17a2b8}.app .app-body .app-sidebar.sidebar-dark .sidebar-header .username{color:#b9c9d8}.app .app-body .app-sidebar.sidebar-dark .sidebar-nav .sidebar-nav-group{background:#293a4a}.app .app-body .app-sidebar.sidebar-dark .sidebar-nav .sidebar-nav-group .sidebar-nav-group .sidebar-nav-link:active,.app .app-body .app-sidebar.sidebar-dark .sidebar-nav .sidebar-nav-group .sidebar-nav-group .sidebar-nav-link:focus,.app .app-body .app-sidebar.sidebar-dark .sidebar-nav .sidebar-nav-group .sidebar-nav-group .sidebar-nav-link:hover{color:#17a2b8}.app .app-body .app-sidebar.sidebar-dark .sidebar-nav .sidebar-nav-link{color:#98afc6}.app .app-body .app-sidebar.sidebar-dark .sidebar-nav>.sidebar-nav-link,.app .app-body .app-sidebar.sidebar-dark .sidebar-nav>.sidebar-nav-group>.sidebar-nav-link{color:#dae2ea}.app .app-body .app-sidebar.sidebar-dark .sidebar-nav>.sidebar-nav-link.collapsed,.app .app-body .app-sidebar.sidebar-dark .sidebar-nav>.sidebar-nav-group>.sidebar-nav-link.collapsed{background-color:#34495e}.app .app-body .app-sidebar.sidebar-dark .sidebar-nav>.sidebar-nav-link:active,.app .app-body .app-sidebar.sidebar-dark .sidebar-nav>.sidebar-nav-link:focus,.app .app-body .app-sidebar.sidebar-dark .sidebar-nav>.sidebar-nav-link:hover,.app .app-body .app-sidebar.sidebar-dark .sidebar-nav>.sidebar-nav-link[aria-expanded=true],.app .app-body .app-sidebar.sidebar-dark .sidebar-nav>.sidebar-nav-group>.sidebar-nav-link:active,.app .app-body .app-sidebar.sidebar-dark .sidebar-nav>.sidebar-nav-group>.sidebar-nav-link:focus,.app .app-body .app-sidebar.sidebar-dark .sidebar-nav>.sidebar-nav-group>.sidebar-nav-link:hover,.app .app-body .app-sidebar.sidebar-dark .sidebar-nav>.sidebar-nav-group>.sidebar-nav-link[aria-expanded=true]{background-color:#293a4a}.app .app-body .app-sidebar.sidebar-dark .sidebar-footer a{color:#6789ab}.app .app-body .app-sidebar.sidebar-dark .sidebar-footer a:active,.app .app-body .app-sidebar.sidebar-dark .sidebar-footer a:focus,.app .app-body .app-sidebar.sidebar-dark .sidebar-footer a:hover{color:#fff}.app .app-body .app-sidebar.sidebar-light{background:#fff}.app .app-body .app-sidebar.sidebar-light::-webkit-scrollbar{background-color:#f8f9fa}.app .app-body .app-sidebar.sidebar-light::-webkit-scrollbar-thumb{background-color:#007bff}.app .app-body .app-sidebar.sidebar-light .btn-sidebar .x:before,.app .app-body .app-sidebar.sidebar-light .btn-sidebar .x:after{background-color:#bac2cb}.app .app-body .app-sidebar.sidebar-light .sidebar-header .user-photo{background-color:#f8f9fa;border-color:#ced4da}.app .app-body .app-sidebar.sidebar-light .sidebar-header .username{color:#495057}.app .app-body .app-sidebar.sidebar-light .sidebar-nav .sidebar-nav-group{background:#f2f2f2}.app .app-body .app-sidebar.sidebar-light .sidebar-nav .sidebar-nav-group .sidebar-nav-group .sidebar-nav-link:active,.app .app-body .app-sidebar.sidebar-light .sidebar-nav .sidebar-nav-group .sidebar-nav-group .sidebar-nav-link:focus,.app .app-body .app-sidebar.sidebar-light .sidebar-nav .sidebar-nav-group .sidebar-nav-group .sidebar-nav-link:hover{color:#007bff}.app .app-body .app-sidebar.sidebar-light .sidebar-nav .sidebar-nav-link{color:#606a73}.app .app-body .app-sidebar.sidebar-light .sidebar-nav>.sidebar-nav-link,.app .app-body .app-sidebar.sidebar-light .sidebar-nav>.sidebar-nav-group>.sidebar-nav-link{color:#495057}.app .app-body .app-sidebar.sidebar-light .sidebar-nav>.sidebar-nav-link.collapsed,.app .app-body .app-sidebar.sidebar-light .sidebar-nav>.sidebar-nav-group>.sidebar-nav-link.collapsed{background-color:#fff}.app .app-body .app-sidebar.sidebar-light .sidebar-nav>.sidebar-nav-link:active,.app .app-body .app-sidebar.sidebar-light .sidebar-nav>.sidebar-nav-link:focus,.app .app-body .app-sidebar.sidebar-light .sidebar-nav>.sidebar-nav-link:hover,.app .app-body .app-sidebar.sidebar-light .sidebar-nav>.sidebar-nav-link[aria-expanded=true],.app .app-body .app-sidebar.sidebar-light .sidebar-nav>.sidebar-nav-group>.sidebar-nav-link:active,.app .app-body .app-sidebar.sidebar-light .sidebar-nav>.sidebar-nav-group>.sidebar-nav-link:focus,.app .app-body .app-sidebar.sidebar-light .sidebar-nav>.sidebar-nav-group>.sidebar-nav-link:hover,.app .app-body .app-sidebar.sidebar-light .sidebar-nav>.sidebar-nav-group>.sidebar-nav-link[aria-expanded=true]{background-color:#ededed}.app .app-body .app-sidebar.sidebar-light .sidebar-footer a{color:#a1a8ae}.app .app-body .app-sidebar.sidebar-light .sidebar-footer a:active,.app .app-body .app-sidebar.sidebar-light .sidebar-footer a:focus,.app .app-body .app-sidebar.sidebar-light .sidebar-footer a:hover{color:#007bff}.btn-sidebar{background:transparent;font-size:1.4rem;margin-right:.3125rem}@media (min-width: 768px){.btn-sidebar{display:none}}.btn-sidebar .x{display:block;width:2rem;height:2rem}.btn-sidebar .x:before,.btn-sidebar .x:after{background-color:#ced4da;position:absolute;content:"";height:2.125rem;width:.125rem}.btn-sidebar .x:before{transform:rotate(45deg)}.btn-sidebar .x:after{transform:rotate(-45deg)}.app-sidebar .sidebar-header{padding:0 1.25rem;text-align:center}.app-sidebar .sidebar-header .user-photo{border:0.125rem solid transparent;height:4.5rem;padding:.125rem;width:4.5rem;-webkit-border-radius:50%;-moz-border-radius:50%;border-radius:50%}.app-sidebar .sidebar-header .username{padding:.625rem 0;white-space:nowrap}.app-sidebar .sidebar-header .username small{display:block;padding-top:.25rem;filter:alpha(opacity=75);opacity:.75}.app-sidebar .sidebar-nav{overflow:hidden;padding:0}.app-sidebar .sidebar-nav .sidebar-nav-group .sidebar-nav-group .sidebar-nav-link{padding:.375rem 3.75rem .625rem}.app-sidebar .sidebar-nav .sidebar-nav-link{display:block;outline:none;text-decoration:none;white-space:nowrap;-webkit-transition:color 0.25s ease-out;-moz-transition:color 0.25s ease-out;-o-transition:color 0.25s ease-out;transition:color 0.25s ease-out}.app-sidebar .sidebar-nav>.sidebar-nav-link,.app-sidebar .sidebar-nav>.sidebar-nav-group>.sidebar-nav-link{border:none;font-weight:400;padding:.95rem 1.5rem;white-space:nowrap;-webkit-transition:background-color 0.25s ease-out;-moz-transition:background-color 0.25s ease-out;-o-transition:background-color 0.25s ease-out;transition:background-color 0.25s ease-out}.app-sidebar .sidebar-nav>.sidebar-nav-link i,.app-sidebar .sidebar-nav>.sidebar-nav-group>.sidebar-nav-link i{font-size:1rem;padding-right:1rem;-webkit-transition:color 0.25s ease-out;-moz-transition:color 0.25s ease-out;-o-transition:color 0.25s ease-out;transition:color 0.25s ease-out}.app-sidebar .sidebar-footer{margin:1.5rem 0;text-align:center;white-space:nowrap}.app-sidebar .sidebar-footer a{font-size:1.4rem;outline:none;padding:0 .625rem;text-decoration:none;-webkit-transition:color 0.25s ease-out;-moz-transition:color 0.25s ease-out;-o-transition:color 0.25s ease-out;transition:color 0.25s ease-out}.form-sign{width:100%;max-width:26.25rem;padding:.95rem;margin:0 auto}.form-sign hr{width:5rem}.page-sign{justify-content:center;padding-top:2.45rem;padding-bottom:2.45rem;-ms-flex-align:center;-ms-flex-pack:center;-webkit-box-align:center;-webkit-box-pack:center;align-items:center}.breadcrumb{-webkit-border-radius:0;-moz-border-radius:0;border-radius:0}.modal.modal-calendar .modal-dialog{max-width:20rem}.modal.modal-calendar .modal-dialog .modal-content .modal-header,.modal.modal-calendar .modal-dialog .modal-content .modal-body,.modal.modal-calendar .modal-dialog .modal-content .modal-footer{border-width:0;padding-left:1.25rem;padding-right:1.25rem}.modal.modal-calendar .modal-dialog .modal-content .modal-header .input-group{height:auto;width:auto}.modal.modal-calendar .modal-dialog .modal-content .modal-header .input-group .btn,.modal.modal-calendar .modal-dialog .modal-content .modal-header .input-group .form-control{font-size:14pt;padding:.9375rem .3125rem 0 .3125rem}.modal.modal-calendar .modal-dialog .modal-content .modal-header .input-group .btn.btn-link,.modal.modal-calendar .modal-dialog .modal-content .modal-header .input-group .form-control.btn-link{padding-left:1.25rem;padding-right:1.25rem}.modal.modal-calendar .modal-dialog .modal-content .modal-header .input-group .form-control{border:none;display:inline-block;text-align:center;width:3.75rem;-webkit-box-shadow:none;-moz-box-shadow:none;box-shadow:none;-webkit-box-flex:0 1 auto;-moz-box-flex:0 1 auto;-webkit-flex:0 1 auto;-ms-flex:0 1 auto;flex:0 1 auto}.modal.modal-calendar .modal-dialog .modal-content .modal-header .input-group .btn.dropdown-toggle{border:none;background:#fff;color:#495057;-webkit-box-shadow:none;-moz-box-shadow:none;box-shadow:none}.modal.modal-calendar .modal-dialog .modal-content .modal-header .input-group .btn.dropdown-toggle::after{display:none}.modal.modal-calendar .modal-dialog .modal-content .modal-footer{justify-content:center;-ms-flex-align:center;-ms-flex-pack:center;-webkit-box-align:center;-webkit-box-pack:center;align-items:center}table.table-calendar{margin-bottom:.5rem;text-align:center;width:100%}table.table-calendar th{font-weight:normal;padding-bottom:.9375rem}table.table-calendar th:first-child{color:#dc3545}table.table-calendar td{color:#adb5bd;padding:.3125rem}table.table-calendar td a{color:#495057;display:block;position:relative;text-align:center;text-decoration:none;z-index:1}table.table-calendar td a::before{border:0.0625rem solid #007bff;content:" ";display:none;position:absolute;top:-.25rem;left:-.0625rem;width:2rem;height:2rem;z-index:-1;-webkit-border-radius:50%;-moz-border-radius:50%;border-radius:50%}table.table-calendar td a:hover,table.table-calendar td a.active{color:#fff !important}table.table-calendar td a:hover::before,table.table-calendar td a.active::before{background:#007bff;display:block}table.table-calendar td a.today::before{display:block}table.table-calendar td a.sunday{color:#dc3545}.camera{display:block;width:100%;-webkit-transform:scale(-1, 1);-moz-transform:scale(-1, 1);-ms-transform:scale(-1, 1);transform:scale(-1, 1);-ms-filter:"FlipH";filter:FlipH}@keyframes ballon{0%{-webkit-transform:scale(0);-moz-transform:scale(0);-ms-transform:scale(0);transform:scale(0)}100%{-webkit-transform:scale(1);-moz-transform:scale(1);-ms-transform:scale(1);transform:scale(1)}}@-webkit-keyframes ballon{0%{-webkit-transform:scale(0);-moz-transform:scale(0);-ms-transform:scale(0);transform:scale(0)}100%{-webkit-transform:scale(1);-moz-transform:scale(1);-ms-transform:scale(1);transform:scale(1)}}@-moz-keyframes ballon{0%{-webkit-transform:scale(0);-moz-transform:scale(0);-ms-transform:scale(0);transform:scale(0)}100%{-webkit-transform:scale(1);-moz-transform:scale(1);-ms-transform:scale(1);transform:scale(1)}}@-o-keyframes ballon{0%{-webkit-transform:scale(0);-moz-transform:scale(0);-ms-transform:scale(0);transform:scale(0)}100%{-webkit-transform:scale(1);-moz-transform:scale(1);-ms-transform:scale(1);transform:scale(1)}}.chat{display:none;padding:0;width:100%}.chat.chat-on{display:table}.chat .chat-body,.chat .chat-footer{display:table-row}.chat .chat-body{height:100%}.chat .chat-body .chat-content{display:table-cell;height:100%}.chat .chat-body .chat-content .chat-messages{height:100%;position:relative;overflow:auto}.chat .chat-body .chat-content .chat-messages .container-fluid{position:absolute;top:0;bottom:0;left:0;right:0}.chat .chat-body .chat-content .chat-messages .message-sent,.chat .chat-body .chat-content .chat-messages .message-reply{margin-bottom:1rem}.chat .chat-body .chat-content .chat-messages .message-sent img,.chat .chat-body .chat-content .chat-messages .message-reply img{vertical-align:top;width:3rem;-webkit-border-radius:50%;-moz-border-radius:50%;border-radius:50%}.chat .chat-body .chat-content .chat-messages .message-sent p,.chat .chat-body .chat-content .chat-messages .message-reply p{display:inline-block;margin:0;padding:.625rem 1.25rem;text-align:left;max-width:75%;-webkit-animation:ballon 0.2s linear;-moz-animation:ballon 0.2s linear;-o-animation:ballon 0.2s linear;animation:ballon 0.2s linear;-webkit-border-radius:1.25rem;-moz-border-radius:1.25rem;border-radius:1.25rem}.chat .chat-body .chat-content .chat-messages .message-sent img{margin-right:.375rem}.chat .chat-body .chat-content .chat-messages .message-sent p{background-color:#476481;color:#fff;transform-origin:top left}.chat .chat-body .chat-content .chat-messages .message-sent small{color:#aabed1}.chat .chat-body .chat-content .chat-messages .message-reply{text-align:right}.chat .chat-body .chat-content .chat-messages .message-reply img{float:right;margin-left:.625rem}.chat .chat-body .chat-content .chat-messages .message-reply p{background-color:#ced4da;transform-origin:top right}.chat .chat-body .chat-content .chat-messages .message-reply small{color:#868e96}.chat .chat-footer .btn,.chat .chat-footer .form-control{padding-top:1rem;padding-bottom:1rem;-webkit-border-radius:0;-moz-border-radius:0;border-radius:0}.chat .chat-footer .btn{padding-left:1.25rem;padding-right:1.25rem}label{margin-bottom:.25rem}.label-infield,.label-floating{position:relative}.label-infield label,.label-floating label{cursor:text}.label-infield>input{padding-top:1.75rem}.label-infield>label{position:absolute;top:0;left:0;color:#868e96;display:block;font-size:.95rem;line-height:1.5;margin-bottom:0;padding:.5rem .75rem;width:100%}.label-floating>input,.label-floating>label{padding:.75rem .75rem}.label-floating>label{position:absolute;top:0;left:0;display:block;width:100%;margin-bottom:0;line-height:1.5;color:#868e96;border:.0625rem solid transparent;transition:all .1s ease-in-out;-webkit-border-radius:.25rem;-moz-border-radius:.25rem;border-radius:.25rem}.label-floating input::-webkit-input-placeholder{color:transparent}.label-floating input:-moz-placeholder{color:transparent;filter:alpha(opacity=100);opacity:1}.label-floating input::-moz-placeholder{color:transparent;filter:alpha(opacity=100);opacity:1}.label-floating input:-ms-input-placeholder{color:transparent}.label-floating input::-ms-input-placeholder{color:transparent}.label-floating input:not(:placeholder-shown){padding-top:calc(.75rem + .75rem * (2 / 3));padding-bottom:calc(.75rem / 3)}.label-floating input:not(:placeholder-shown) ~ label{padding-top:calc(.75rem / 3);padding-bottom:calc(.75rem / 3);font-size:.75rem;color:#868e96}.callout{padding:1.25rem;margin-bottom:1rem;border:.0625rem solid #eee;border-left-width:.25rem;-webkit-border-radius:.25rem;-moz-border-radius:.25rem;border-radius:.25rem}.callout h4{margin-top:0;margin-bottom:.25rem}.callout ul:last-child,.callout ol:last-child,.callout p:last-child{margin-bottom:0}.callout code{-webkit-border-radius:.25rem;-moz-border-radius:.25rem;border-radius:.25rem}.callout+.callout{margin-top:-.25rem}.callout.callout-info{border-left-color:#5bc0de}.callout.callout-info h4{color:#5bc0de}.callout.callout-warning{border-left-color:#f0ad4e}.callout.callout-warning h4{color:#f0ad4e}.callout.callout-danger{border-left-color:#d9534f}.callout.callout-danger h4{color:#d9534f}label.checkbox{margin-bottom:0;-ms-flex-align:center;-ms-flex-pack:center;-webkit-box-align:center;-webkit-box-pack:center;align-items:center;display:-webkit-box;display:-moz-box;display:-ms-inline-flexbox;display:-webkit-inline-flex;display:inline-flex;-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none}label.checkbox input[type=checkbox]{position:absolute;filter:alpha(opacity=0);opacity:0}label.checkbox input[type=checkbox],label.checkbox input[type=checkbox]:after,label.checkbox input[type=checkbox]:before,label.checkbox input[type=checkbox] *,label.checkbox input[type=checkbox] *:after,label.checkbox input[type=checkbox] *:before,label.checkbox input[type=checkbox]+span{box-sizing:border-box}label.checkbox input[type=checkbox]::selection,label.checkbox input[type=checkbox]:after::selection,label.checkbox input[type=checkbox]:before::selection,label.checkbox input[type=checkbox] *::selection,label.checkbox input[type=checkbox] *:after::selection,label.checkbox input[type=checkbox] *:before::selection,label.checkbox input[type=checkbox]+span::selection{background:none}label.checkbox input[type=checkbox]+.check-mark{background-color:#fff;border:0.0625rem solid #adb5bd;cursor:pointer;height:1.25rem;width:1.25rem;margin-right:.625rem;position:relative;-webkit-border-radius:.3125rem;-moz-border-radius:.3125rem;border-radius:.3125rem;-webkit-transition:all 0.2s ease;-moz-transition:all 0.2s ease;-o-transition:all 0.2s ease;transition:all 0.2s ease}label.checkbox input[type=checkbox]+.check-mark:after{content:"";position:absolute;display:none;left:.375rem;top:.1875rem;width:.375rem;height:.625rem;border:solid #fff;border-width:0 .125rem .125rem 0;-webkit-transform:rotate(45deg);-moz-transform:rotate(45deg);-ms-transform:rotate(45deg);transform:rotate(45deg)}label.checkbox input[type=checkbox]:focus+.check-mark{-webkit-box-shadow:0 0 0 0.2rem rgba(173,181,189,0.25);-moz-box-shadow:0 0 0 0.2rem rgba(173,181,189,0.25);box-shadow:0 0 0 0.2rem rgba(173,181,189,0.25)}label.checkbox input[type=checkbox]:checked+.check-mark{background:#adb5bd}label.checkbox input[type=checkbox]:checked+.check-mark:after{display:block}label.checkbox input[type=checkbox]:disabled+.check-mark{cursor:not-allowed}label.checkbox.checkbox-sm{font-size:.8rem}label.checkbox.checkbox-sm input[type=checkbox]+.check-mark{height:1.05rem;width:1.05rem}label.checkbox.checkbox-sm input[type=checkbox]+.check-mark:after{left:.3125rem;top:.125rem;width:.3125rem;height:.55rem}label.checkbox.checkbox-lg{font-size:1.05rem}label.checkbox.checkbox-lg input[type=checkbox]+.check-mark{height:1.6rem;width:1.6rem}label.checkbox.checkbox-lg input[type=checkbox]+.check-mark:after{left:.57rem;top:.3rem;width:.4375rem;height:.75rem;border-width:0 .1875rem .1875rem 0}label.checkbox-danger input[type=checkbox]+.check-mark{border-color:#dc3545}label.checkbox-danger input[type=checkbox]:checked+.check-mark{background:#dc3545}label.checkbox-danger input[type=checkbox]:checked:disabled+.check-mark{background:#eb8c95;border-color:#eb8c95}label.checkbox-danger input[type=checkbox]:focus+.check-mark{-webkit-box-shadow:0 0 0 0.2rem rgba(220,53,69,0.25);-moz-box-shadow:0 0 0 0.2rem rgba(220,53,69,0.25);box-shadow:0 0 0 0.2rem rgba(220,53,69,0.25)}label.checkbox-info input[type=checkbox]+.check-mark{border-color:#17a2b8}label.checkbox-info input[type=checkbox]:checked+.check-mark{background:#17a2b8}label.checkbox-info input[type=checkbox]:checked:disabled+.check-mark{background:#4cd3e9;border-color:#4cd3e9}label.checkbox-info input[type=checkbox]:focus+.check-mark{-webkit-box-shadow:0 0 0 0.2rem rgba(23,162,184,0.25);-moz-box-shadow:0 0 0 0.2rem rgba(23,162,184,0.25);box-shadow:0 0 0 0.2rem rgba(23,162,184,0.25)}label.checkbox-primary input[type=checkbox]+.check-mark{border-color:#007bff}label.checkbox-primary input[type=checkbox]:checked+.check-mark{background:#007bff}label.checkbox-primary input[type=checkbox]:checked:disabled+.check-mark{background:#66b0ff;border-color:#66b0ff}label.checkbox-primary input[type=checkbox]:focus+.check-mark{-webkit-box-shadow:0 0 0 0.2rem rgba(0,123,255,0.25);-moz-box-shadow:0 0 0 0.2rem rgba(0,123,255,0.25);box-shadow:0 0 0 0.2rem rgba(0,123,255,0.25)}label.checkbox-success input[type=checkbox]+.check-mark{border-color:#28a745}label.checkbox-success input[type=checkbox]:checked+.check-mark{background:#28a745}label.checkbox-success input[type=checkbox]:checked:disabled+.check-mark{background:#5dd879;border-color:#5dd879}label.checkbox-success input[type=checkbox]:focus+.check-mark{-webkit-box-shadow:0 0 0 0.2rem rgba(40,167,69,0.25);-moz-box-shadow:0 0 0 0.2rem rgba(40,167,69,0.25);box-shadow:0 0 0 0.2rem rgba(40,167,69,0.25)}label.checkbox-warning input[type=checkbox]+.check-mark{border-color:#ffc107}label.checkbox-warning input[type=checkbox]:checked+.check-mark{background:#ffc107}label.checkbox-warning input[type=checkbox]:checked:disabled+.check-mark{background:#ffdb6d;border-color:#ffdb6d}label.checkbox-warning input[type=checkbox]:focus+.check-mark{-webkit-box-shadow:0 0 0 0.2rem rgba(255,193,7,0.25);-moz-box-shadow:0 0 0 0.2rem rgba(255,193,7,0.25);box-shadow:0 0 0 0.2rem rgba(255,193,7,0.25)}.form-group.has-error label{color:#dc3545}.form-group.has-error .form-control{border:0.0625rem solid #dc3545}.form-group.has-error .form-control:focus{-webkit-box-shadow:0 0 0 0.2rem rgba(220,53,69,0.25);-moz-box-shadow:0 0 0 0.2rem rgba(220,53,69,0.25);box-shadow:0 0 0 0.2rem rgba(220,53,69,0.25)}.input-group.as-input{cursor:text;-webkit-border-radius:.25rem;-moz-border-radius:.25rem;border-radius:.25rem;-webkit-transition:border-color 0.15s ease-in-out,box-shadow 0.15s ease-in-out;-moz-transition:border-color 0.15s ease-in-out,box-shadow 0.15s ease-in-out;-o-transition:border-color 0.15s ease-in-out,box-shadow 0.15s ease-in-out;transition:border-color 0.15s ease-in-out,box-shadow 0.15s ease-in-out}.input-group.as-input .form-control{-webkit-box-shadow:none;-moz-box-shadow:none;box-shadow:none}.input-group.as-input .input-group-prepend>.input-group-text,.input-group.as-input .input-group-append>.input-group-text{background-color:#fff}.input-group.as-input.prepend .form-control{border-left:none}.input-group.as-input.prepend .input-group-prepend>.input-group-text{border-right:none}.input-group.as-input.append .form-control{border-right:none}.input-group.as-input.append .input-group-append>.input-group-text{border-left:none}.input-group.as-input.is-invalid .form-control,.input-group.as-input.is-invalid .input-group-prepend>.input-group-text,.input-group.as-input.is-invalid .input-group-append>.input-group-text{border-color:#dc3545}.input-group.as-input.is-valid .form-control,.input-group.as-input.is-valid .input-group-prepend>.input-group-text,.input-group.as-input.is-valid .input-group-append>.input-group-text{border-color:#28a745}.input-group.as-input.focus{-webkit-box-shadow:0 0 0 0.2rem rgba(0,123,255,0.25);-moz-box-shadow:0 0 0 0.2rem rgba(0,123,255,0.25);box-shadow:0 0 0 0.2rem rgba(0,123,255,0.25)}.input-group.as-input.focus .form-control,.input-group.as-input.focus .input-group-prepend>.input-group-text,.input-group.as-input.focus .input-group-append>.input-group-text{border-color:#80bdff}.input-group.as-input.focus.is-invalid{-webkit-box-shadow:0 0 0 0.2rem rgba(220,53,69,0.25);-moz-box-shadow:0 0 0 0.2rem rgba(220,53,69,0.25);box-shadow:0 0 0 0.2rem rgba(220,53,69,0.25)}.input-group.as-input.focus.is-invalid .form-control,.input-group.as-input.focus.is-invalid .input-group-prepend>.input-group-text,.input-group.as-input.focus.is-invalid .input-group-append>.input-group-text{border-color:#dc3545}.input-group.as-input.focus.is-valid{-webkit-box-shadow:0 0 0 0.2rem rgba(40,167,69,0.25);-moz-box-shadow:0 0 0 0.2rem rgba(40,167,69,0.25);box-shadow:0 0 0 0.2rem rgba(40,167,69,0.25)}.input-group.as-input.focus.is-valid .form-control,.input-group.as-input.focus.is-valid .input-group-prepend>.input-group-text,.input-group.as-input.focus.is-valid .input-group-append>.input-group-text{border-color:#28a745}.input-group.as-input.disabled .form-control,.input-group.as-input.disabled .input-group-prepend>.input-group-text,.input-group.as-input.disabled .input-group-append>.input-group-text,.input-group.as-input.readonly .form-control,.input-group.as-input.readonly .input-group-prepend>.input-group-text,.input-group.as-input.readonly .input-group-append>.input-group-text{background:#e9ecef}.input-suggestion{position:relative;-webkit-border-radius:.25rem;-moz-border-radius:.25rem;border-radius:.25rem}.input-suggestion .input-suggestion-list{background-color:#fff;border-bottom:0.0625rem solid #007bff;border-left:0.0625rem solid #007bff;border-right:0.0625rem solid #007bff;display:none;position:absolute;width:100%;z-index:1050;-webkit-border-bottom-left-radius:.31rem;-webkit-border-bottom-right-radius:.31rem;-moz-border-bottom-left-radius:.31rem;-moz-border-bottom-right-radius:.31rem;border-bottom-left-radius:.31rem;border-bottom-right-radius:.31rem}.input-suggestion .input-suggestion-list .list-group .list-group-item{border:none;-webkit-border-top-left-radius:0;-webkit-border-top-right-radius:0;-moz-border-top-left-radius:0;-moz-border-top-right-radius:0;border-top-left-radius:0;border-top-right-radius:0}.input-suggestion.open{-webkit-box-shadow:0 0 0 0.2rem rgba(0,123,255,0.25);-moz-box-shadow:0 0 0 0.2rem rgba(0,123,255,0.25);box-shadow:0 0 0 0.2rem rgba(0,123,255,0.25)}.input-suggestion.open input{-webkit-border-bottom-left-radius:0;-webkit-border-bottom-right-radius:0;-moz-border-bottom-left-radius:0;-moz-border-bottom-right-radius:0;border-bottom-left-radius:0;border-bottom-right-radius:0;-webkit-box-shadow:none;-moz-box-shadow:none;box-shadow:none}.input-suggestion.open input,.input-suggestion.open .input-suggestion-list{background-color:#fff;border-color:#80bdff;color:#495057;display:block;-webkit-transition:border-color 0.15s ease-in-out,box-shadow 0.15s ease-in-out;-moz-transition:border-color 0.15s ease-in-out,box-shadow 0.15s ease-in-out;-o-transition:border-color 0.15s ease-in-out,box-shadow 0.15s ease-in-out;transition:border-color 0.15s ease-in-out,box-shadow 0.15s ease-in-out}label.radio{margin-bottom:0;text-align:left;-ms-flex-align:center;-ms-flex-pack:center;-webkit-box-align:center;-webkit-box-pack:center;align-items:center;display:-webkit-box;display:-moz-box;display:-ms-inline-flexbox;display:-webkit-inline-flex;display:inline-flex;-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none}label.radio input[type=radio],label.radio input[type=checkbox]{position:absolute;filter:alpha(opacity=0);opacity:0}label.radio input[type=radio],label.radio input[type=radio]:after,label.radio input[type=radio]:before,label.radio input[type=radio] *,label.radio input[type=radio] *:after,label.radio input[type=radio] *:before,label.radio input[type=radio]+span,label.radio input[type=checkbox],label.radio input[type=checkbox]:after,label.radio input[type=checkbox]:before,label.radio input[type=checkbox] *,label.radio input[type=checkbox] *:after,label.radio input[type=checkbox] *:before,label.radio input[type=checkbox]+span{box-sizing:border-box}label.radio input[type=radio]::selection,label.radio input[type=radio]:after::selection,label.radio input[type=radio]:before::selection,label.radio input[type=radio] *::selection,label.radio input[type=radio] *:after::selection,label.radio input[type=radio] *:before::selection,label.radio input[type=radio]+span::selection,label.radio input[type=checkbox]::selection,label.radio input[type=checkbox]:after::selection,label.radio input[type=checkbox]:before::selection,label.radio input[type=checkbox] *::selection,label.radio input[type=checkbox] *:after::selection,label.radio input[type=checkbox] *:before::selection,label.radio input[type=checkbox]+span::selection{background:none}label.radio input[type=radio]+.check-mark,label.radio input[type=checkbox]+.check-mark{background-color:#fff;border:0.0625rem solid #adb5bd;cursor:pointer;height:1.125rem;width:1.125rem;margin-right:.625rem;position:relative;-webkit-border-radius:100%;-moz-border-radius:100%;border-radius:100%;-webkit-transition:all 0.2s ease;-moz-transition:all 0.2s ease;-o-transition:all 0.2s ease;transition:all 0.2s ease}label.radio input[type=radio]+.check-mark:after,label.radio input[type=checkbox]+.check-mark:after{background:#868e96;border:0.125rem solid #fff;content:"";position:absolute;width:1rem;height:1rem;-webkit-border-radius:100%;-moz-border-radius:100%;border-radius:100%;-webkit-transition:all 0.2s ease;-moz-transition:all 0.2s ease;-o-transition:all 0.2s ease;transition:all 0.2s ease}label.radio input[type=radio]:focus+.check-mark,label.radio input[type=checkbox]:focus+.check-mark{-webkit-box-shadow:0 0 0 0.2rem rgba(173,181,189,0.25);-moz-box-shadow:0 0 0 0.2rem rgba(173,181,189,0.25);box-shadow:0 0 0 0.2rem rgba(173,181,189,0.25)}label.radio input[type=radio]:checked+.check-mark:after,label.radio input[type=checkbox]:checked+.check-mark:after{-webkit-transform:scale(1);-moz-transform:scale(1);-ms-transform:scale(1);transform:scale(1)}label.radio input[type=radio]:not(:checked)+.check-mark:after,label.radio input[type=checkbox]:not(:checked)+.check-mark:after{-webkit-transform:scale(0);-moz-transform:scale(0);-ms-transform:scale(0);transform:scale(0)}label.radio input[type=radio]:disabled+.check-mark,label.radio input[type=checkbox]:disabled+.check-mark{color:#606a73;cursor:not-allowed}label.radio input[type=radio]:disabled+.check-mark:before,label.radio input[type=checkbox]:disabled+.check-mark:before{border-color:#bbc2c8}label.radio input[type=radio]:disabled+.check-mark:after,label.radio input[type=checkbox]:disabled+.check-mark:after{background:#a1a8ae}label.radio.radio-sm{font-size:.875rem}label.radio.radio-sm input[type=radio]+.check-mark,label.radio.radio-sm input[type=checkbox]+.check-mark{width:1rem;height:1rem}label.radio.radio-sm input[type=radio]+.check-mark:after,label.radio.radio-sm input[type=checkbox]+.check-mark:after{border-width:.1rem;width:.875rem;height:.875rem}label.radio.radio-lg{font-size:1.125rem}label.radio.radio-lg input[type=radio]+.check-mark,label.radio.radio-lg input[type=checkbox]+.check-mark{width:1.4rem;height:1.4rem}label.radio.radio-lg input[type=radio]+.check-mark:after,label.radio.radio-lg input[type=checkbox]+.check-mark:after{border-width:.175rem;width:1.275rem;height:1.275rem}label.radio-danger input[type=radio]+.check-mark,label.radio-danger input[type=checkbox]+.check-mark{border-color:#dc3545}label.radio-danger input[type=radio]+.check-mark:after,label.radio-danger input[type=checkbox]+.check-mark:after{background:#dc3545}label.radio-danger input[type=radio]:disabled+.check-mark,label.radio-danger input[type=checkbox]:disabled+.check-mark{border-color:#eb8c95}label.radio-danger input[type=radio]:disabled+.check-mark:after,label.radio-danger input[type=checkbox]:disabled+.check-mark:after{background:#eb8c95}label.radio-danger input[type=radio]:focus+.check-mark,label.radio-danger input[type=checkbox]:focus+.check-mark{-webkit-box-shadow:0 0 0 0.2rem rgba(220,53,69,0.25);-moz-box-shadow:0 0 0 0.2rem rgba(220,53,69,0.25);box-shadow:0 0 0 0.2rem rgba(220,53,69,0.25)}label.radio-info input[type=radio]+.check-mark,label.radio-info input[type=checkbox]+.check-mark{border-color:#17a2b8}label.radio-info input[type=radio]+.check-mark:after,label.radio-info input[type=checkbox]+.check-mark:after{background:#17a2b8}label.radio-info input[type=radio]:disabled+.check-mark,label.radio-info input[type=checkbox]:disabled+.check-mark{border-color:#4cd3e9}label.radio-info input[type=radio]:disabled+.check-mark:after,label.radio-info input[type=checkbox]:disabled+.check-mark:after{background:#4cd3e9}label.radio-info input[type=radio]:focus+.check-mark,label.radio-info input[type=checkbox]:focus+.check-mark{-webkit-box-shadow:0 0 0 0.2rem rgba(23,162,184,0.25);-moz-box-shadow:0 0 0 0.2rem rgba(23,162,184,0.25);box-shadow:0 0 0 0.2rem rgba(23,162,184,0.25)}label.radio-primary input[type=radio]+.check-mark,label.radio-primary input[type=checkbox]+.check-mark{border-color:#007bff}label.radio-primary input[type=radio]+.check-mark:after,label.radio-primary input[type=checkbox]+.check-mark:after{background:#007bff}label.radio-primary input[type=radio]:disabled+.check-mark,label.radio-primary input[type=checkbox]:disabled+.check-mark{border-color:#66b0ff}label.radio-primary input[type=radio]:disabled+.check-mark:after,label.radio-primary input[type=checkbox]:disabled+.check-mark:after{background:#66b0ff}label.radio-primary input[type=radio]:focus+.check-mark,label.radio-primary input[type=checkbox]:focus+.check-mark{-webkit-box-shadow:0 0 0 0.2rem rgba(0,123,255,0.25);-moz-box-shadow:0 0 0 0.2rem rgba(0,123,255,0.25);box-shadow:0 0 0 0.2rem rgba(0,123,255,0.25)}label.radio-success input[type=radio]+.check-mark,label.radio-success input[type=checkbox]+.check-mark{border-color:#28a745}label.radio-success input[type=radio]+.check-mark:after,label.radio-success input[type=checkbox]+.check-mark:after{background:#28a745}label.radio-success input[type=radio]:disabled+.check-mark,label.radio-success input[type=checkbox]:disabled+.check-mark{border-color:#5dd879}label.radio-success input[type=radio]:disabled+.check-mark:after,label.radio-success input[type=checkbox]:disabled+.check-mark:after{background:#5dd879}label.radio-success input[type=radio]:focus+.check-mark,label.radio-success input[type=checkbox]:focus+.check-mark{-webkit-box-shadow:0 0 0 0.2rem rgba(40,167,69,0.25);-moz-box-shadow:0 0 0 0.2rem rgba(40,167,69,0.25);box-shadow:0 0 0 0.2rem rgba(40,167,69,0.25)}label.radio-warning input[type=radio]+.check-mark,label.radio-warning input[type=checkbox]+.check-mark{border-color:#ffc107}label.radio-warning input[type=radio]+.check-mark:after,label.radio-warning input[type=checkbox]+.check-mark:after{background:#ffc107}label.radio-warning input[type=radio]:disabled+.check-mark,label.radio-warning input[type=checkbox]:disabled+.check-mark{border-color:#ffdb6d}label.radio-warning input[type=radio]:disabled+.check-mark:after,label.radio-warning input[type=checkbox]:disabled+.check-mark:after{background:#ffdb6d}label.radio-warning input[type=radio]:focus+.check-mark,label.radio-warning input[type=checkbox]:focus+.check-mark{-webkit-box-shadow:0 0 0 0.2rem rgba(255,193,7,0.25);-moz-box-shadow:0 0 0 0.2rem rgba(255,193,7,0.25);box-shadow:0 0 0 0.2rem rgba(255,193,7,0.25)}@keyframes spinner{0%{-webkit-transform:rotate(0deg);-moz-transform:rotate(0deg);-ms-transform:rotate(0deg);transform:rotate(0deg)}100%{-webkit-transform:rotate(360deg);-moz-transform:rotate(360deg);-ms-transform:rotate(360deg);transform:rotate(360deg)}}@-webkit-keyframes spinner{0%{-webkit-transform:rotate(0deg);-moz-transform:rotate(0deg);-ms-transform:rotate(0deg);transform:rotate(0deg)}100%{-webkit-transform:rotate(360deg);-moz-transform:rotate(360deg);-ms-transform:rotate(360deg);transform:rotate(360deg)}}@-moz-keyframes spinner{0%{-webkit-transform:rotate(0deg);-moz-transform:rotate(0deg);-ms-transform:rotate(0deg);transform:rotate(0deg)}100%{-webkit-transform:rotate(360deg);-moz-transform:rotate(360deg);-ms-transform:rotate(360deg);transform:rotate(360deg)}}@-o-keyframes spinner{0%{-webkit-transform:rotate(0deg);-moz-transform:rotate(0deg);-ms-transform:rotate(0deg);transform:rotate(0deg)}100%{-webkit-transform:rotate(360deg);-moz-transform:rotate(360deg);-ms-transform:rotate(360deg);transform:rotate(360deg)}}.spinner{display:inline-block;text-align:center}.spinner .spinner-bar{position:relative;width:3rem;height:3rem;border:.25rem solid transparent;border-top-color:#2980b9;border-left-color:#2980b9;border-right-color:#2980b9;-webkit-animation:spinner 1s linear infinite;-moz-animation:spinner 1s linear infinite;-o-animation:spinner 1s linear infinite;animation:spinner 1s linear infinite;-webkit-border-radius:50%;-moz-border-radius:50%;border-radius:50%}.spinner .spinner-text{position:relative;font-size:.875rem}.spinner.spinner-block{position:fixed;background:rgba(255,255,255,0.85);top:0;left:0;width:100%;height:100%;z-index:3050;filter:alpha(opacity=0);opacity:0;-webkit-backface-visibility:hidden;-moz-backface-visibility:hidden;visibility:hidden;-webkit-transition:all 0.3s ease-out;-moz-transition:all 0.3s ease-out;-o-transition:all 0.3s ease-out;transition:all 0.3s ease-out}.spinner.spinner-block .spinner-bar{left:50%;top:50%;margin:-2rem 0 0 -2rem;border:.25rem solid transparent;border-top-color:#2980b9;border-left-color:#2980b9;border-right-color:#2980b9;-webkit-animation:spinner 1s linear infinite;-moz-animation:spinner 1s linear infinite;-o-animation:spinner 1s linear infinite;animation:spinner 1s linear infinite;-webkit-border-radius:50%;-moz-border-radius:50%;border-radius:50%}.spinner.spinner-block .spinner-text{padding:.25rem 0;text-align:center;top:50%}.spinner.spinner-block.show{filter:alpha(opacity=100);opacity:1;-webkit-backface-visibility:visible;-moz-backface-visibility:visible;visibility:visible}.spinner.spinner-sm .spinner-bar{width:2.25rem;height:2.25rem}.spinner.spinner-sm .spinner-text{font-size:.8rem}.spinner.spinner-lg .spinner-bar{width:3.75rem;height:3.75rem}.spinner.spinner-lg .spinner-text{font-size:.95rem}label.switch{margin-bottom:0;position:relative;-ms-flex-align:center;-ms-flex-pack:center;-webkit-box-align:center;-webkit-box-pack:center;align-items:center;display:-webkit-box;display:-moz-box;display:-ms-inline-flexbox;display:-webkit-inline-flex;display:inline-flex;-webkit-border-radius:2rem;-moz-border-radius:2rem;border-radius:2rem}label.switch input[type=checkbox]{position:absolute;filter:alpha(opacity=0);opacity:0}label.switch input[type=checkbox],label.switch input[type=checkbox]:after,label.switch input[type=checkbox]:before,label.switch input[type=checkbox] *,label.switch input[type=checkbox] *:after,label.switch input[type=checkbox] *:before,label.switch input[type=checkbox]+span{box-sizing:border-box}label.switch input[type=checkbox]::selection,label.switch input[type=checkbox]:after::selection,label.switch input[type=checkbox]:before::selection,label.switch input[type=checkbox] *::selection,label.switch input[type=checkbox] *:after::selection,label.switch input[type=checkbox] *:before::selection,label.switch input[type=checkbox]+span::selection{background:none}label.switch input[type=checkbox]+.switch-slider{background:#ced4da;cursor:pointer;display:block;height:2rem;outline:0;padding:.125rem;position:relative;width:4rem;-webkit-border-radius:2rem;-moz-border-radius:2rem;border-radius:2rem;-webkit-transition:all 0.4s ease;-moz-transition:all 0.4s ease;-o-transition:all 0.4s ease;transition:all 0.4s ease;-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none}label.switch input[type=checkbox]+.switch-slider:before,label.switch input[type=checkbox]+.switch-slider:after{position:relative;display:block;content:"";width:50%;height:100%}label.switch input[type=checkbox]+.switch-slider:before{display:none}label.switch input[type=checkbox]+.switch-slider:after{left:0;background:#fff;-webkit-border-radius:50%;-moz-border-radius:50%;border-radius:50%;-webkit-box-shadow:none;-moz-box-shadow:none;box-shadow:none;-webkit-transition:all 0.2s ease;-moz-transition:all 0.2s ease;-o-transition:all 0.2s ease;transition:all 0.2s ease}label.switch input[type=checkbox]:checked+.switch-slider:after{left:50%}label.switch input[type=checkbox]:disabled+.switch-slider{background:#dde1e5;cursor:not-allowed}label.switch input[type=checkbox]:focus+.switch-slider{-webkit-box-shadow:0 0 0 0.2rem rgba(206,212,218,0.25);-moz-box-shadow:0 0 0 0.2rem rgba(206,212,218,0.25);box-shadow:0 0 0 0.2rem rgba(206,212,218,0.25)}label.switch.switch-sm{font-size:.875rem}label.switch.switch-sm input[type=checkbox]+.switch-slider{height:1.5rem;width:2.75rem;-webkit-border-radius:1.5rem;-moz-border-radius:1.5rem;border-radius:1.5rem}label.switch.switch-lg{font-size:1.125rem}label.switch.switch-lg input[type=checkbox]+.switch-slider{height:2.5rem;width:5rem;-webkit-border-radius:2.5rem;-moz-border-radius:2.5rem;border-radius:2.5rem}label.switch-danger input[type=checkbox]+.switch-slider{background:#dc3545}label.switch-danger input[type=checkbox]:disabled+.switch-slider{background:#eb8c95}label.switch-danger input[type=checkbox]:focus+.switch-slider{-webkit-box-shadow:0 0 0 0.2rem rgba(220,53,69,0.25);-moz-box-shadow:0 0 0 0.2rem rgba(220,53,69,0.25);box-shadow:0 0 0 0.2rem rgba(220,53,69,0.25)}label.switch-info input[type=checkbox]+.switch-slider{background:#17a2b8}label.switch-info input[type=checkbox]:disabled+.switch-slider{background:#4cd3e9}label.switch-info input[type=checkbox]:focus+.switch-slider{-webkit-box-shadow:0 0 0 0.2rem rgba(23,162,184,0.25);-moz-box-shadow:0 0 0 0.2rem rgba(23,162,184,0.25);box-shadow:0 0 0 0.2rem rgba(23,162,184,0.25)}label.switch-primary input[type=checkbox]+.switch-slider{background:#007bff}label.switch-primary input[type=checkbox]:disabled+.switch-slider{background:#66b0ff}label.switch-primary input[type=checkbox]:focus+.switch-slider{-webkit-box-shadow:0 0 0 0.2rem rgba(0,123,255,0.25);-moz-box-shadow:0 0 0 0.2rem rgba(0,123,255,0.25);box-shadow:0 0 0 0.2rem rgba(0,123,255,0.25)}label.switch-success input[type=checkbox]+.switch-slider{background:#28a745}label.switch-success input[type=checkbox]:disabled+.switch-slider{background:#5dd879}label.switch-success input[type=checkbox]:focus+.switch-slider{-webkit-box-shadow:0 0 0 0.2rem rgba(40,167,69,0.25);-moz-box-shadow:0 0 0 0.2rem rgba(40,167,69,0.25);box-shadow:0 0 0 0.2rem rgba(40,167,69,0.25)}label.switch-warning input[type=checkbox]+.switch-slider{background:#ffc107}label.switch-warning input[type=checkbox]:disabled+.switch-slider{background:#ffdb6d}label.switch-warning input[type=checkbox]:focus+.switch-slider{-webkit-box-shadow:0 0 0 0.2rem rgba(255,193,7,0.25);-moz-box-shadow:0 0 0 0.2rem rgba(255,193,7,0.25);box-shadow:0 0 0 0.2rem rgba(255,193,7,0.25)}label.switch-to-danger input[type=checkbox]:checked+.switch-slider{background:#dc3545}label.switch-to-danger input[type=checkbox]:checked:disabled+.switch-slider{background:#eb8c95}label.switch-to-danger input[type=checkbox]:checked:focus+.switch-slider{-webkit-box-shadow:0 0 0 0.2rem rgba(220,53,69,0.25);-moz-box-shadow:0 0 0 0.2rem rgba(220,53,69,0.25);box-shadow:0 0 0 0.2rem rgba(220,53,69,0.25)}label.switch-to-info input[type=checkbox]:checked+.switch-slider{background:#17a2b8}label.switch-to-info input[type=checkbox]:checked:disabled+.switch-slider{background:#4cd3e9}label.switch-to-info input[type=checkbox]:checked:focus+.switch-slider{-webkit-box-shadow:0 0 0 0.2rem rgba(23,162,184,0.25);-moz-box-shadow:0 0 0 0.2rem rgba(23,162,184,0.25);box-shadow:0 0 0 0.2rem rgba(23,162,184,0.25)}label.switch-to-primary input[type=checkbox]:checked+.switch-slider{background:#007bff}label.switch-to-primary input[type=checkbox]:checked:disabled+.switch-slider{background:#66b0ff}label.switch-to-primary input[type=checkbox]:checked:focus+.switch-slider{-webkit-box-shadow:0 0 0 0.2rem rgba(0,123,255,0.25);-moz-box-shadow:0 0 0 0.2rem rgba(0,123,255,0.25);box-shadow:0 0 0 0.2rem rgba(0,123,255,0.25)}label.switch-to-success input[type=checkbox]:checked+.switch-slider{background:#28a745}label.switch-to-success input[type=checkbox]:checked:disabled+.switch-slider{background:#5dd879}label.switch-to-success input[type=checkbox]:checked:focus+.switch-slider{-webkit-box-shadow:0 0 0 0.2rem rgba(40,167,69,0.25);-moz-box-shadow:0 0 0 0.2rem rgba(40,167,69,0.25);box-shadow:0 0 0 0.2rem rgba(40,167,69,0.25)}label.switch-to-warning input[type=checkbox]:checked+.switch-slider{background:#ffc107}label.switch-to-warning input[type=checkbox]:checked:disabled+.switch-slider{background:#ffdb6d}label.switch-to-warning input[type=checkbox]:checked:focus+.switch-slider{-webkit-box-shadow:0 0 0 0.2rem rgba(255,193,7,0.25);-moz-box-shadow:0 0 0 0.2rem rgba(255,193,7,0.25);box-shadow:0 0 0 0.2rem rgba(255,193,7,0.25)} diff --git a/dist/admin4b.min.js b/dist/admin4b.min.js index 63e6c644..490020a0 100644 --- a/dist/admin4b.min.js +++ b/dist/admin4b.min.js @@ -1 +1 @@ -$(function(){$("input").typing(),$(".as-input").asInput(),$('[data-toggle="popover"]').popover(),$('[data-toggle="tooltip"]').tooltip(),$('[data-toggle="suggestion"]').suggestion()}),function(n){n.fn.asInput=function(){return this.each(function(){var t=n(this),i=t.find("input"),e=function(){t.toggleClass("disabled",i.is("[disabled]")),t.toggleClass("readonly",i.is("[readonly]"))};t.on("click",function(){i.focus()}),i.on("focus",function(){t.addClass("focus")}).on("blur",function(){t.removeClass("focus")}).observe(e),e()})}}(jQuery),function(n){n.fn.suggestion=function(t){return this.each(function(){(function(){n(this).data("suggestion:initialized")||(n.fn.suggestion.select.apply(this),n.fn.suggestion.change.apply(this),n(this).is("[data-async]")?n.fn.suggestion.async.apply(this):n.fn.suggestion.static.apply(this),n(this).data("suggestion:initialized",!0))}).apply(this),"refresh"===t&&n(this).trigger("suggestion:refresh")})}}(jQuery),$.fn.onFocusOut=function(n){return this.each(function(){var t=$(document),i=$(this);function e(t){$(t.target).closest(i).length||"function"==typeof n&&n.call(this)}t.on("click",e),t.find("input").on("focus",e),t.find("select").on("focus",e),t.find("textarea").on("focus",e),t.find("button").on("focus",e),t.find("a").on("focus",e)})},function(n){n.fn.observe=function(t){var i=new MutationObserver(function(n){n.forEach(function(n){t.apply(n.target)})});return this.each(function(){var e=n(this);e.on("DOMAttrModified onpropertychange",function(){t.apply(this)}),i.observe(e.get(0),{attributes:!0})})}}(jQuery),$.fn.typing=function(){return this.each(function(){var n=$(this),t=null;n.on("input",function(){clearTimeout(t),t=setTimeout(function(){n.trigger("input:delay")},700)})})},$(function(){$('[data-toggle="sidebar"]').on("click",function(){$(".app-sidebar").addClass("sidebar-open")}),$('[data-dismiss="sidebar"]').on("click",function(){$(".app-sidebar").removeClass("sidebar-open")})}),window.keyboard=function(n){return this.isArrowDown=function(){return 40===n},this.isArrowUp=function(){return 38===n},this.isEnter=function(){return 13===n},this.isEscape=function(){return 27===n},this},String.prototype.contains=function(n){return new RegExp(n,"i").test(this)},String.prototype.replaceAll=function(n,t){return this.replace(new RegExp(n,"g"),t)},function(n){n.fn.suggestion.async=function(){var t=n(this),i=t.closest(".input-suggestion").find(".input-suggestion-list"),e=i.find(".list-group.items").hide(),s=i.find(".list-group.empty").hide(),o=i.find(".list-group.loading").hide();t.on("input",function(){o.show(),s.hide(),e.hide()}).on("input:delay suggestion:show",function(){t.trigger("suggestion:search")}).on("suggestion:refresh",function(){n.fn.suggestion.change.apply(this),e.children().length?e.show():s.show(),o.hide()})}}(jQuery),function(n){n.fn.suggestion.change=function(){var t=n(this),i=t.closest(".input-suggestion"),e=i.find(".input-suggestion-list").find(".list-group.items").children(),s=function(i){t.val(n.fn.suggestion.textOf(i)),t.trigger("suggestion:change",i)};e.on("click",function(){i.removeClass("open"),s(this)}),t.on("keypress",function(n){var t=n.keyCode||n.which;if(keyboard(t).isEnter()){var i=e.filter(".active");i.length&&s(i.filter(".active"))}})}}(jQuery),function(n){n.fn.suggestion.select=function(){var t=n(this),i=t.closest(".input-suggestion"),e=i.find(".input-suggestion-list").find(".list-group.items"),s=function(){i.is(".open")||(e.children().removeClass("active"),i.addClass("open"),t.trigger("suggestion:show"))},o=function(){i.is(".open")&&(i.removeClass("open"),t.trigger("suggestion:hide"))};i.onFocusOut(o),t.on("input",s).on("keyup",function(n){var t=n.keyCode||n.which;keyboard(t).isEscape()&&o()}).on("keydown",function(n){var t=n.keyCode||n.which,o=keyboard(t);if(o.isArrowUp()||o.isArrowDown()){if(n.preventDefault(),!i.is(".open"))return void s();var u=e.children(".active");if(o.isArrowDown()){if(u.is(":last-child"))return;u.length?(u.removeClass("active"),u.next().addClass("active")):e.children().eq(0).addClass("active")}if(o.isArrowUp()){if(u.is(":first-child"))return;u.removeClass("active"),u.prev().addClass("active")}}}).on("suggestion:change",o)}}(jQuery),function(n){n.fn.suggestion.static=function(){var t=n(this),i=t.closest(".input-suggestion").find(".input-suggestion-list"),e=i.find(".list-group.empty").hide(),s=i.find(".list-group.items"),o=s.children(),u=[],r=function(){o.removeClass("active"),u.forEach(function(n){var t=n.data("prev");t.length?n.insertAfter(t):s.prepend(n)}),u=[],o.each(function(){var i=n(this);n.fn.suggestion.textOf(i).contains(t.val())||(u.push(i),i.data("prev",i.prev()))}),u.forEach(function(n){n.detach()}),s.children().length?(e.hide(),s.show()):(s.hide(),e.show())};t.on("input",r).on("suggestion:show",r)}}(jQuery),function(n){n.fn.suggestion.textOf=function(t){var i=n(t),e=i.closest(".input-suggestion").find("input");return e.is("[data-text]")&&(i=i.find(e.attr("data-text"))),i.text().trim()}}(jQuery); \ No newline at end of file +$(function(){$("input").typing(),$(".as-input").asInput(),$(".chat").chat(),$(".modal-calendar").calendar(),$('[data-toggle="popover"]').popover(),$('[data-toggle="tooltip"]').tooltip(),$('[data-toggle="suggestion"]').suggestion(),$('[data-toggle="file-manager"]').fileManager()}),function(e){e.fn.calendar=function(t,n){var a=e(this);return"date"!==t||n?"query:date"!==t||n?this.each(function(){switch((n=n instanceof Date?n:a.prop("query")||new Date).setHours(0,0,0,0),t){case"date":e.fn.calendar.change.apply(this,[n]);break;case"query:date":e.fn.calendar.query.apply(this,[n]);break;case"query:nextMonth":e.fn.calendar.query.apply(this,[n.addMonths(1)]);break;case"query:nextYear":e.fn.calendar.query.apply(this,[n.addYears(1)]);break;case"query:previousMonth":e.fn.calendar.query.apply(this,[n.addMonths(-1)]);break;case"query:previousYear":e.fn.calendar.query.apply(this,[n.addYears(-1)]);break;default:e.fn.calendar.modal.apply(this,[n])}}):a.prop("query"):a.prop("date")}}(jQuery),function(e){e.fn.camera=function(t){return this.each(function(){switch(t){case"play":e.fn.camera.play.apply(this);break;case"stop":e.fn.camera.stop.apply(this);break;case"snapshot":e.fn.camera.snapshot.apply(this)}})}}(jQuery),function(e){e.fn.chat=function(){return this.each(function(){var t=e(window),n=e(".app-content"),a=e(this),i=a.find(".chat-messages");t.on("resize",function(){var t=0;n.children().each(function(){e(this).is(".chat")||(t+=e(this).outerHeight(!0))}),a.height(n.height()-t),a.addClass("chat-on"),i.scrollToBottom()}),t.trigger("resize")})}}(jQuery),function(e){e.fn.fileManager=function(){return this.each(function(){var t=e(this),n=e("").attr("type","file");n.on("change",function(){var a=n.get(0).files[0];a&&(e.fn.fileManager.validate(a,t),e.fn.fileManager.read(a,function(){t.trigger("file:change",a)}))}),t.on("click",function(){n.trigger("click")})})}}(jQuery),function(e){e.fn.asInput=function(){return this.each(function(){var t=e(this),n=t.find("input"),a=function(){t.toggleClass("disabled",n.is("[disabled]")),t.toggleClass("readonly",n.is("[readonly]"))};t.on("click",function(){n.focus()}),n.on("focus",function(){t.addClass("focus")}).on("blur",function(){t.removeClass("focus")}).observe(a),a()})}}(jQuery),function(e){e.fn.suggestion=function(t){return this.each(function(){(function(){e(this).data("suggestion:initialized")||(e.fn.suggestion.select.apply(this),e.fn.suggestion.change.apply(this),e(this).is("[data-async]")?e.fn.suggestion.async.apply(this):e.fn.suggestion.static.apply(this),e(this).data("suggestion:initialized",!0))}).apply(this),"refresh"===t&&e(this).trigger("suggestion:refresh")})}}(jQuery),$.fn.onFocusOut=function(e){return this.each(function(){var t=$(document),n=$(this);function a(t){$(t.target).closest(n).length||"function"==typeof e&&e.call(this)}t.on("click",a),t.find("input").on("focus",a),t.find("select").on("focus",a),t.find("textarea").on("focus",a),t.find("button").on("focus",a),t.find("a").on("focus",a)})},function(e){e.fn.observe=function(t){var n=new MutationObserver(function(e){e.forEach(function(e){t.apply(e.target)})});return this.each(function(){var a=e(this);a.on("DOMAttrModified onpropertychange",function(){t.apply(this)}),n.observe(a.get(0),{attributes:!0})})}}(jQuery),function(e){e.fn.scrollToBottom=function(){return this.each(function(){var t=e(this),n=t.prop("scrollHeight");t.scrollTop(n)})}}(jQuery),$.fn.typing=function(){return this.each(function(){var e=$(this),t=null;e.on("input",function(){clearTimeout(t),t=setTimeout(function(){e.trigger("input:delay")},700)})})},$(function(){$('[data-toggle="sidebar"]').on("click",function(){$(".app-sidebar").addClass("sidebar-open")}),$('[data-dismiss="sidebar"]').on("click",function(){$(".app-sidebar").removeClass("sidebar-open")})}),Date.prototype.addDays=function(e){var t=new Date(this.getTime());return t.setDate(this.getDate()+e),t},Date.prototype.addMonths=function(e){var t=this.getFullYear(),n=this.getMonth()+e,a=new Date(t,n,1),i=new Date(t,n+1,0);return this.getDate()>i.getDate()?a.setDate(i.getDate()):a.setDate(this.getDate()),a},Date.prototype.addYears=function(e){var t=new Date(this.getTime());return t.setFullYear(this.getFullYear()+e),t},function(){var e=/\d/,t=/[a-zA-Z]/;window.keyboard=function(n){var a=String.fromCharCode(n);return{isArrowDown:40===n,isArrowUp:38===n,isBackspace:8===n,isDelete:46===n||63272===n,isEnter:13===n,isEscape:27===n,isLetter:t.test(a),isNumber:e.test(a)}}}(),String.prototype.startsWith||(String.prototype.startsWith=function(e,t){return t=t||0,this.indexOf(e,t)===t}),String.prototype.contains=function(e){return new RegExp(e,"i").test(this)},String.prototype.replaceAll=function(e,t){return this.replace(new RegExp(e,"g"),t)},function(e){e.fn.calendar.change=function(t){var n=e(this);n.prop("date",t),e.fn.calendar.query.apply(n,[t]),n.trigger("calendar:change",t)}}(jQuery),function(e){e.fn.calendar.modal=function(t){var n=e(this),a=n.find(".modal-header"),i=n.find(".modal-body"),r=a.find(".dropdown-toggle"),o=a.find(".dropdown-menu"),s=a.find("[data-calendar-month=previous]"),c=a.find("[data-calendar-month=next]"),u=a.find(".form-control"),f=i.find("[data-calendar-link=today]"),d=i.find("[data-calendar-link=selected]");n.on("calendar:each",function(t,a){var i=n.calendar("date"),r=new Date;r.setHours(0,0,0,0),e(t.relatedTarget).toggleClass("active",!!i&&a.getTime()===i.getTime()).toggleClass("today",a.getTime()===r.getTime()).toggleClass("sunday",0===a.getDay())}),n.on("calendar:query",function(t,n){var a=n.getMonth(),i=e(o.find("a").get(a));r.prop("month",n.getMonth()).text(i.text()),u.val(n.getFullYear())}),o.find("a").on("click",function(t){var a=Number(u.val()),i=Number(e(this).attr("data-calendar-month"));n.calendar("query:date",new Date(a,i,1)),t.preventDefault()}),c.on("click",function(){n.calendar("query:nextMonth")}),s.on("click",function(){n.calendar("query:previousMonth")}),f.on("click",function(){n.calendar("query:date",new Date)}),d.on("click",function(){var e=n.calendar("date");n.calendar("query:date",e)}),u.on("keydown",function(e){var t=e.keyCode||e.which,a=keyboard(t);a.isArrowUp&&n.calendar("query:nextYear"),a.isArrowDown&&n.calendar("query:previousYear")}).on("keypress",function(e){var t=e.keyCode||e.which;keyboard(t).isNumber||e.preventDefault()}).on("input",function(){var e=u.val();if(/^\d{4}$/.test(e)){var t=Number(e),a=Number(r.prop("month"));n.calendar("query:date",new Date(t,a,1))}})}}(jQuery),jQuery.fn.calendar.period=function(e,t){var n=new Date(e,t,1),a=new Date(e,t+1,0),i=new Date(n);i.setDate(n.getDate()-n.getDay());var r=new Date(a);return r.setDate(a.getDate()+(6-a.getDay())),{firstDateInMonth:n,lastDateInMonth:a,firstDate:i,lastDate:r}},function(e){e.fn.calendar.query=function(t){for(var n=e(this),a=n.find(".table-calendar"),i=e(""),r=e.fn.calendar.period(t.getFullYear(),t.getMonth()),o=r.firstDate;o<=r.lastDate;){for(var s=e(""),c=0;c<7;c++){var u=e(""),f=e.Event("calendar:each");if(o.getMonth()===r.firstDateInMonth.getMonth()){var d=e("").attr("href","#").prop("date",o).text(o.getDate()).on("click",function(t){e.fn.calendar.change.apply(n,[e(this).prop("date")]),t.preventDefault()});f.relatedTarget=d.get(0),u.append(d)}else u.text(o.getDate());s.append(u),n.trigger(f,o),o=o.addDays(1)}i.append(s)}a.find("tbody").remove(),a.append(i),n.prop("query",t).trigger("calendar:query",t)}}(jQuery),jQuery.fn.fileManager.read=function(e,t){var n=new FileReader;n.readAsDataURL(e),n.onload=function(n){e.dataURL=n.target.result,t()}},function(e){e.fn.fileManager.validate=function(t,n){var a=n.attr("data-maxsize"),i=n.attr("data-type");t.errors=[],e.fn.fileManager.validate.maxsize(t,a)||t.errors.push("maxsize"),e.fn.fileManager.validate.type(t,i)||t.errors.push("type")}}(jQuery),jQuery.fn.camera.toBlob=function(e){var t;t=e.split(",")[0].indexOf("base64")>=0?atob(e.split(",")[1]):unescape(e.split(",")[1]);for(var n=e.split(",")[0].split(":")[1].split(";")[0],a=new Uint8Array(t.length),i=0;i + diff --git a/docs/pages/content/chat.html b/docs/pages/content/chat.html new file mode 100644 index 00000000..78cad021 --- /dev/null +++ b/docs/pages/content/chat.html @@ -0,0 +1,343 @@ + + + + + + + + + + + + Admin 4B + + + +
+
+ + +
+ + + + +
+
+
+
+
+

+ March 23, 2018 +

+
+ +

+ Hello, there... I need some help! +
8:52 AM +

+
+

+ Jane Doe joined the chat +

+
+ +

+ Hi, John. I'm happy to help. What can I do for you today? +
8:54 AM +

+
+
+ +

+ I can't seem to pull up my order. Can you help me? +
9:02 AM +

+
+
+ +

+ Absolutely. You can find the status of, and trak, your order here: www.app.com/orders +
9:03 AM +

+
+
+ +

+ Works great! Thank you! +
9:07 AM +

+
+
+ +

+ I'm glad you made it! :) +
9:08 AM +

+
+
+ +

+ Please let me know if you have any more questions. +
9:08 AM +

+
+
+ +

+ One more thing. Do you want to see the source code? + + Click here and take a look. + +
9:10 AM +

+
+
+ +
+

+ Ending conversation since you've been inactive too long. +

+
+
+
+
+ +
+ +
+
+
+ + + + + + + + + + diff --git a/docs/pages/content/dashboard.html b/docs/pages/content/dashboard.html index 6eb005a6..176df742 100644 --- a/docs/pages/content/dashboard.html +++ b/docs/pages/content/dashboard.html @@ -22,7 +22,7 @@ + diff --git a/docs/pages/content/notification.html b/docs/pages/content/notification.html new file mode 100644 index 00000000..aea3fd74 --- /dev/null +++ b/docs/pages/content/notification.html @@ -0,0 +1,255 @@ + + + + + + + + + + + + Admin 4B + + + +
+
+ + +
+ + + + +
+
+

+ Lorem ipsum dolor sit amet +

+ + Inbox + +
+
+ + 18 April, 2018 + +
+

+ Hello Lorem, +

+

+ Lorem ipsum dolor sit amet, blandit scelerisque sem, elit est fusce metus pretium cursus vel, volutpat justo sapien ac, ornare + in lacinia leo ornare pede in, tempor quis mattis molestie a massa. Natoque quam nullam. Penatibus vestibulum aenean + sodales eleifend, sed arcu in risus urna et nec. Velit porttitor et, lacus non amet, donec est luctus nisl dis suscipit, + nulla mi dolor, urna suspendisse dolor amet cras. Etiam in sed donec tellus lobortis at, nonummy tellus amet sit vel + mauris, augue nec praesent porta, nullam tortor diam lorem. Tortor in sed donec erat. Enim neque eu ut amet, et pellentesque + tortor dapibus eros ac. Sed dapibus, pulvinar ut, non sed dui nibh. Leo fermentum, integer tortor pede laoreet. +

+

+ Wisi sed nibh et ac, eget dui odio sem nibh urna ullamcorper, nisl egestas pellentesque metus curabitur in, scelerisque quisque + nullam. Porta ante rhoncus harum proin diam aliquam, felis sem iaculis arcu nunc, nulla mi dignissim vestibulum. Ante + et, pede diam mi. Ullamcorper amet lobortis donec a vel, sit scelerisque nulla, vestibulum est pellentesque ultrices + egestas id. Sapien vitae ultricies tristique quae tristique neque, diam scelerisque, vestibulum pede nulla auctor. Mauris + iaculis turpis eleifend vitae sed facilisis. Interdum orci ut nunc dui, praesent vestibulum elit commodo quisque, sit + feugiat ut donec eu accumsan lacinia, sed justo id libero et dolor, condimentum condimentum quisque vestibulum arcu sem. +

+

+ Regards,
+ Lorem ipsum +

+
+ + Source code + +
+
<div class="d-flex">
+  <h3>
+    Lorem ipsum dolor sit amet
+  </h3>
+  <a href="#" class="text-nowrap ml-auto">
+    <i class="fa fa-inbox"></i> Inbox
+  </a>
+</div>
+<div class="mb-3">
+  <small class="text-secondary">
+    18 April, 2018
+  </small>
+</div>
+<p>
+  Hello Lorem,
+</p>
+<p class="text-justify">
+  Lorem ipsum dolor sit amet, blandit scelerisque sem, elit est fusce metus pretium cursus vel, volutpat justo sapien ac, ornare
+  in lacinia leo ornare pede in, tempor quis mattis molestie a massa. Natoque quam nullam. Penatibus vestibulum aenean sodales
+  eleifend, sed arcu in risus urna et nec. Velit porttitor et, lacus non amet, donec est luctus nisl dis suscipit, nulla
+  mi dolor, urna suspendisse dolor amet cras. Etiam in sed donec tellus lobortis at, nonummy tellus amet sit vel mauris,
+  augue nec praesent porta, nullam tortor diam lorem. Tortor in sed donec erat. Enim neque eu ut amet, et pellentesque tortor
+  dapibus eros ac. Sed dapibus, pulvinar ut, non sed dui nibh. Leo fermentum, integer tortor pede laoreet.
+</p>
+<p class="text-justify">
+  Wisi sed nibh et ac, eget dui odio sem nibh urna ullamcorper, nisl egestas pellentesque metus curabitur in, scelerisque quisque
+  nullam. Porta ante rhoncus harum proin diam aliquam, felis sem iaculis arcu nunc, nulla mi dignissim vestibulum. Ante et,
+  pede diam mi. Ullamcorper amet lobortis donec a vel, sit scelerisque nulla, vestibulum est pellentesque ultrices egestas
+  id. Sapien vitae ultricies tristique quae tristique neque, diam scelerisque, vestibulum pede nulla auctor. Mauris iaculis
+  turpis eleifend vitae sed facilisis. Interdum orci ut nunc dui, praesent vestibulum elit commodo quisque, sit feugiat ut
+  donec eu accumsan lacinia, sed justo id libero et dolor, condimentum condimentum quisque vestibulum arcu sem.
+</p>
+<p>
+  Regards, <br>
+  Lorem ipsum
+</p>
+
+
+
+
+ +
+
+
+ + + + + + + + + + diff --git a/docs/pages/content/notifications.html b/docs/pages/content/notifications.html new file mode 100644 index 00000000..02522f68 --- /dev/null +++ b/docs/pages/content/notifications.html @@ -0,0 +1,330 @@ + + + + + + + + + + + + Admin 4B + + + +
+
+ + +
+ + + + +
+

+ 18 April, 2018 +

+ +

+ 17 April, 2018 +

+ + +
+ + Source code + +
+
<p class="text-secondary">
+  18 April, 2018
+</p>
+<div class="list-group mb-3">
+  <a href="#" class="list-group-item list-group-item-action">
+    <div class="d-flex w-100 justify-content-between">
+      <h5 class="text-primary mb-2">Lorem ipsum dolor sit amet</h5>
+      <small class="text-muted">now</small>
+    </div>
+    <p class="mb-1">
+      Lorem ipsum dolor sit amet, habitasse erat arcu auctor orci eleifend. Suspendisse enim, malesuada eu placerat aenean, duis
+      nulla, suspendisse suscipit fringilla nec feugiat tortor. Ante euismod, mattis...
+    </p>
+    <small class="text-muted">Unreaded</small>
+  </a>
+  <a href="#" class="list-group-item list-group-item-action">
+    <div class="d-flex w-100 justify-content-between">
+      <h5 class="text-primary mb-2">Lorem ipsum dolor sit amet</h5>
+      <small class="text-muted">3:30 PM</small>
+    </div>
+    <p class="mb-1">
+      Lorem ipsum dolor sit amet, habitasse erat arcu auctor orci eleifend. Suspendisse enim, malesuada eu placerat aenean, duis
+      nulla, suspendisse suscipit fringilla nec feugiat tortor. Ante euismod, mattis...
+    </p>
+  </a>
+  <a href="#" class="list-group-item list-group-item-action flex-column align-items-start">
+    <div class="d-flex w-100 justify-content-between">
+      <h5 class="text-primary mb-2">Lorem ipsum dolor sit amet</h5>
+      <small class="text-muted">7:15 AM</small>
+    </div>
+    <p class="mb-1">
+      Lorem ipsum dolor sit amet, habitasse erat arcu auctor orci eleifend. Suspendisse enim, malesuada eu placerat aenean, duis
+      nulla, suspendisse suscipit fringilla nec feugiat tortor. Ante euismod, mattis...
+    </p>
+  </a>
+</div>
+<p class="text-secondary">
+  17 April, 2018
+</p>
+<div class="list-group mb-3">
+  <a href="#" class="list-group-item list-group-item-action">
+    <div class="d-flex w-100 justify-content-between">
+      <h5 class="text-primary mb-2">Lorem ipsum dolor sit amet</h5>
+      <small class="text-muted">4:50 PM</small>
+    </div>
+    <p class="mb-1">
+      Lorem ipsum dolor sit amet, habitasse erat arcu auctor orci eleifend. Suspendisse enim, malesuada eu placerat aenean, duis
+      nulla, suspendisse suscipit fringilla nec feugiat tortor. Ante euismod, mattis...
+    </p>
+  </a>
+  <a href="#" class="list-group-item list-group-item-action">
+    <div class="d-flex w-100 justify-content-between">
+      <h5 class="text-primary mb-2">Lorem ipsum dolor sit amet</h5>
+      <small class="text-muted">3:30 PM</small>
+    </div>
+    <p class="mb-1">
+      Lorem ipsum dolor sit amet, habitasse erat arcu auctor orci eleifend. Suspendisse enim, malesuada eu placerat aenean, duis
+      nulla, suspendisse suscipit fringilla nec feugiat tortor. Ante euismod, mattis...
+    </p>
+  </a>
+  <a href="#" class="list-group-item list-group-item-action flex-column align-items-start">
+    <div class="d-flex w-100 justify-content-between">
+      <h5 class="text-primary mb-2">Lorem ipsum dolor sit amet</h5>
+      <small class="text-muted">7:15 AM</small>
+    </div>
+    <p class="mb-1">
+      Lorem ipsum dolor sit amet, habitasse erat arcu auctor orci eleifend. Suspendisse enim, malesuada eu placerat aenean, duis
+      nulla, suspendisse suscipit fringilla nec feugiat tortor. Ante euismod, mattis...
+    </p>
+  </a>
+</div>
+<div class="text-center mb-3">
+  <a href="#" class="btn btn-primary">Old notifications</a>
+</div>
+
+
+
+
+ +
+
+
+ + + + + + + + + + diff --git a/docs/pages/sample-pages/settings.html b/docs/pages/content/settings.html similarity index 61% rename from docs/pages/sample-pages/settings.html rename to docs/pages/content/settings.html index f6fedc9b..ce4659cc 100644 --- a/docs/pages/sample-pages/settings.html +++ b/docs/pages/content/settings.html @@ -22,7 +22,7 @@ + diff --git a/docs/pages/sample-pages/signup.html b/docs/pages/content/signup.html similarity index 96% rename from docs/pages/sample-pages/signup.html rename to docs/pages/content/signup.html index 0953d969..844e547c 100644 --- a/docs/pages/sample-pages/signup.html +++ b/docs/pages/content/signup.html @@ -93,13 +93,14 @@


- Sign in + Sign in

+ diff --git a/docs/pages/content/timeline.html b/docs/pages/content/timeline.html index 69dfb816..8e127afc 100644 --- a/docs/pages/content/timeline.html +++ b/docs/pages/content/timeline.html @@ -22,7 +22,7 @@ + diff --git a/docs/pages/components/radio-button.html b/docs/pages/input-controls/radio-button.html similarity index 75% rename from docs/pages/components/radio-button.html rename to docs/pages/input-controls/radio-button.html index 543c6537..a194f145 100644 --- a/docs/pages/components/radio-button.html +++ b/docs/pages/input-controls/radio-button.html @@ -22,7 +22,7 @@

Colors

@@ -64,7 +64,7 @@

Colors

Source code
-
@@include('includes/code-examples/components/checkbox/checkbox-colors.html')
+
@@include('includes/code-examples/input-controls/checkbox/checkbox-colors.html')

Sizes

@@ -94,7 +94,7 @@

Sizes

Source code
-
@@include('includes/code-examples/components/checkbox/checkbox-sizes.html')
+
@@include('includes/code-examples/input-controls/checkbox/checkbox-sizes.html')

Disabled state

@@ -112,7 +112,7 @@

Disabled state

Source code
-
@@include('includes/code-examples/components/checkbox/checkbox-disabled.html')
+
@@include('includes/code-examples/input-controls/checkbox/checkbox-disabled.html')
diff --git a/src/html/pages/input-controls/input-date.html b/src/html/pages/input-controls/input-date.html new file mode 100644 index 00000000..2252722b --- /dev/null +++ b/src/html/pages/input-controls/input-date.html @@ -0,0 +1,312 @@ + + + +
+

Input date

+

+ Input date is a set of bootstrap components (mainly input-group + and modal) to build a control that allows users to navigate in the + calendar and select a date. See the example below: +

+
+
+
+ +
+
+
+ +
+
+
+
+
+
+ +
+
+
+ +
+
+
+
+
+ +
+ + Source code + +
+ +
+
+
@@include('includes/code-examples/input-controls/input-date/input-date.html')
+
+
+
@@include('includes/code-examples/input-controls/input-date/input-date.js')
+
+
+
+
+
+

It is possible have only one calendar for the entire application if you want to.

+
+

Calendar

+

+ The calendar is displayed in a bootstrap modal + and defined by the class .modal-calendar. +

+

+ The navigation of the calendar is placed in the modal header. The modal body contains the current page (.table-calendar) + and the calendar links (today and selected date). The buttons for confirm and cancel are placed in the modal footer. + See the basic structure below: +

+
+ + Source code + +
+
@@include('includes/code-examples/input-controls/input-date/calendar-modal-empty.html')
+
+
+

Calendar header

+

+ The calendar header contains the navigation that allows the user to go to the next pages or to the previous pages of the calendar. + Also, the user can select a month in the dropdown or type the desired year. See the example below: +

+
+ + Source code + +
+
@@include('includes/code-examples/input-controls/input-date/calendar-modal-header.html')
+
+
+

Calendar body

+

+ The calendar body contains the current page and allows the user to select the desired date. + In addition, the body contains the links to today's date and to the selected date. +

+
+ + Source code + +
+
@@include('includes/code-examples/input-controls/input-date/calendar-modal-body.html')
+
+
+

Calendar footer

+

+ The calendar footer contains the buttons to confirm or cancel the selected date. See the example below: +

+
+ + Source code + + +
+

Options

+

+ Options can be passed via data attributes: +

+
+ + + + + + + + + + + + + + + + + + + + +
OptionTypeDescription
data-calendar-linkstringNavigates directly to the calendar page: today or selected (selected date).
data-calendar-monthstring|numberThe month for which it will be navigated: 0..11 (January to December), previous or next.
+
+
+

By design these attribute options only work for children of a .modal-calendar.

+
+

Methods

+

+ A few methods are available to control the calendar: +

+
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
MethodDescription
calendar('date')Gets the selected date.
calendar('date', myDate) + Sets the selected date (automatically queries the selected date). + Triggers the events calendar:change and calendar:query. +
calendar('query:date')Gets the queried date (does not reflect the selected date).
calendar('query:date', myDate) + Sets the queried date (recalculates the calendar page). + Triggers the event calendar:query. +
calendar('query:nextMonth')Go to next month. Triggers the event calendar:query.
calendar('query:nextYear')Go to next year. Triggers the event calendar:query.
calendar('query:previousMonth')Go to previous month. Triggers the event calendar:query.
calendar('query:previousYear')Go to previous year. Triggers the event calendar:query.
+
+

Events

+

+ Events triggered from the calendar can be listened to write custom logic: +

+
+ + + + + + + + + + + + + + + + + + + + + +
EventDescription
calendar:changeTriggered after select a date.
calendar:eachTriggered for each date while loading the calendar page.
calendar:queryTriggered after querying the date.
+
+
+ + Source code + +
+
@@include('includes/code-examples/input-controls/input-date/calendar-events.js')
+
+
+
+ diff --git a/src/html/pages/components/input-group.html b/src/html/pages/input-controls/input-group.html similarity index 96% rename from src/html/pages/components/input-group.html rename to src/html/pages/input-controls/input-group.html index b634c292..70369759 100644 --- a/src/html/pages/components/input-group.html +++ b/src/html/pages/input-controls/input-group.html @@ -2,7 +2,7 @@ @@ -61,7 +61,7 @@
Component limitations
Source code
-
@@include('includes/code-examples/components/input-group/input-group-basic.html')
+
@@include('includes/code-examples/input-controls/input-group/input-group-basic.html')

@@ -134,7 +134,7 @@

Source code
-
@@include('includes/code-examples/components/input-group/input-group-states.html')
+
@@include('includes/code-examples/input-controls/input-group/input-group-states.html')
diff --git a/src/html/pages/components/input-suggestion.html b/src/html/pages/input-controls/input-suggestion.html similarity index 97% rename from src/html/pages/components/input-suggestion.html rename to src/html/pages/input-controls/input-suggestion.html index 6767d9dd..781ac74d 100644 --- a/src/html/pages/components/input-suggestion.html +++ b/src/html/pages/input-controls/input-suggestion.html @@ -2,7 +2,7 @@ @@ -159,7 +159,7 @@

Simple text

Source code
-
@@include('includes/code-examples/components/input-suggestion/input-suggestion-basic.html')
+
@@include('includes/code-examples/input-controls/input-suggestion/input-suggestion-basic.html')

Custom template

@@ -246,7 +246,7 @@
Strawberry-kiwi mint
Source code
-
@@include('includes/code-examples/components/input-suggestion/input-suggestion-advanced.html')
+
@@include('includes/code-examples/input-controls/input-suggestion/input-suggestion-advanced.html')

Asynchronous

@@ -291,10 +291,10 @@

Asynchronous

-
@@include('includes/code-examples/components/input-suggestion/input-suggestion-async.html')
+
@@include('includes/code-examples/input-controls/input-suggestion/input-suggestion-async.html')
-
@@include('includes/code-examples/components/input-suggestion/input-suggestion-async.js')
+
@@include('includes/code-examples/input-controls/input-suggestion/input-suggestion-async.js')
diff --git a/src/html/pages/components/label.html b/src/html/pages/input-controls/label.html similarity index 88% rename from src/html/pages/components/label.html rename to src/html/pages/input-controls/label.html index 5f8afd00..5d2a831f 100644 --- a/src/html/pages/components/label.html +++ b/src/html/pages/input-controls/label.html @@ -2,7 +2,7 @@ @@ -27,6 +27,14 @@

Label

+
+ + Source code + +
+
@@include('includes/code-examples/input-controls/label/label.html')
+
+
Warranties
    @@ -46,13 +54,9 @@
    Warranties
-
- - Source code - -
-
@@include('includes/code-examples/components/label/label.html')
+
+
Browser compatibility
+

Floating labels will not work properly on IE11 and older versions.

-
diff --git a/src/html/pages/components/radio-button.html b/src/html/pages/input-controls/radio-button.html similarity index 92% rename from src/html/pages/components/radio-button.html rename to src/html/pages/input-controls/radio-button.html index 15339386..2d51342e 100644 --- a/src/html/pages/components/radio-button.html +++ b/src/html/pages/input-controls/radio-button.html @@ -2,7 +2,7 @@ @@ -34,7 +34,7 @@

Radio button

Source code
-
@@include('includes/code-examples/components/radio-button/radio-button-basic.html')
+
@@include('includes/code-examples/input-controls/radio-button/radio-button-basic.html')
@@ -79,7 +79,7 @@

Colors

Source code
-
@@include('includes/code-examples/components/radio-button/radio-button-colors.html')
+
@@include('includes/code-examples/input-controls/radio-button/radio-button-colors.html')

Sizes

@@ -109,7 +109,7 @@

Sizes

Source code
-
@@include('includes/code-examples/components/radio-button/radio-button-sizes.html')
+
@@include('includes/code-examples/input-controls/radio-button/radio-button-sizes.html')

Disabled state

@@ -127,7 +127,7 @@

Disabled state

Source code
-
@@include('includes/code-examples/components/radio-button/radio-button-disabled.html')
+
@@include('includes/code-examples/input-controls/radio-button/radio-button-disabled.html')
diff --git a/src/html/pages/components/toggle-switch.html b/src/html/pages/input-controls/toggle-switch.html similarity index 90% rename from src/html/pages/components/toggle-switch.html rename to src/html/pages/input-controls/toggle-switch.html index fb037122..85a283fe 100644 --- a/src/html/pages/components/toggle-switch.html +++ b/src/html/pages/input-controls/toggle-switch.html @@ -2,7 +2,7 @@ @@ -22,7 +22,7 @@

Toggle switch

Source code
-
@@include('includes/code-examples/components/toggle-switch/toggle-switch-basic.html')
+
@@include('includes/code-examples/input-controls/toggle-switch/toggle-switch-basic.html')

@@ -41,7 +41,7 @@

Toggle switch

Source code
-
@@include('includes/code-examples/components/toggle-switch/toggle-switch-text.html')
+
@@include('includes/code-examples/input-controls/toggle-switch/toggle-switch-text.html')

Colors

@@ -75,7 +75,7 @@

Colors

Source code
-
@@include('includes/code-examples/components/toggle-switch/toggle-switch-colors.html')
+
@@include('includes/code-examples/input-controls/toggle-switch/toggle-switch-colors.html')

@@ -92,7 +92,7 @@

Colors

Source code
-
@@include('includes/code-examples/components/toggle-switch/toggle-switch-transition.html')
+
@@include('includes/code-examples/input-controls/toggle-switch/toggle-switch-transition.html')

Sizes

@@ -118,7 +118,7 @@

Sizes

Source code
-
@@include('includes/code-examples/components/toggle-switch/toggle-switch-sizes.html')
+
@@include('includes/code-examples/input-controls/toggle-switch/toggle-switch-sizes.html')

Disabled state

@@ -137,7 +137,7 @@

Disabled state

Source code
-
@@include('includes/code-examples/components/toggle-switch/toggle-switch-disabled.html')
+
@@include('includes/code-examples/input-controls/toggle-switch/toggle-switch-disabled.html')
diff --git a/src/html/pages/components/spinner.html b/src/html/pages/layout/spinner.html similarity index 92% rename from src/html/pages/components/spinner.html rename to src/html/pages/layout/spinner.html index 943df63a..bf16a321 100644 --- a/src/html/pages/components/spinner.html +++ b/src/html/pages/layout/spinner.html @@ -2,7 +2,7 @@ @@ -24,7 +24,7 @@

Source code
-
@@include('includes/code-examples/components/spinner/spinner-basic.html')
+
@@include('includes/code-examples/layout/spinner/spinner-basic.html')

@@ -49,7 +49,7 @@

Source code
-
@@include('includes/code-examples/components/spinner/spinner-sizes.html')
+
@@include('includes/code-examples/layout/spinner/spinner-sizes.html')

@@ -95,10 +95,10 @@

-
@@include('includes/code-examples/components/spinner/spinner-block.html')
+
@@include('includes/code-examples/layout/spinner/spinner-block.html')
-
@@include('includes/code-examples/components/spinner/spinner-block.js')
+
@@include('includes/code-examples/layout/spinner/spinner-block.js')
diff --git a/src/html/pages/components/callout.html b/src/html/pages/reference/callout.html similarity index 92% rename from src/html/pages/components/callout.html rename to src/html/pages/reference/callout.html index c104ec57..331b4704 100644 --- a/src/html/pages/components/callout.html +++ b/src/html/pages/reference/callout.html @@ -2,7 +2,7 @@ @@ -33,7 +33,7 @@

Critital
Source code
-
@@include('includes/code-examples/components/callout/callout-colors.html')
+
@@include('includes/code-examples/reference/callout/callout-colors.html')
diff --git a/src/html/pages/reference/code-highlight.html b/src/html/pages/reference/code-highlight.html new file mode 100644 index 00000000..71ce01df --- /dev/null +++ b/src/html/pages/reference/code-highlight.html @@ -0,0 +1,102 @@ + + + +
+

+ Code highlight +

+

+ Code highlight is a feature with predefined styles for HTML, CSS, JavaScript and JSON. + These styles are a customization for the languages supported by the library + highlight.js. +

+
+ You do not need the entire template to work with code highlight. + You only need the highlight.js library and + the admin4b-highlight.min.css file present in the NPM package. +
+ See the basic example: +
+ + Source code + +
+
@@include('includes/code-examples/reference/code-highlight/how-to-use.html')
+
+
+

+ Themes +

+

+ Light theme (default): +

+
+ +
+
+
@@include('includes/code-examples/reference/code-highlight/code-highlight.html')
+
+
+
@@include('includes/code-examples/reference/code-highlight/code-highlight.css')
+
+
+
@@include('includes/code-examples/reference/code-highlight/code-highlight.js')
+
+
+
@@include('includes/code-examples/reference/code-highlight/code-highlight.json')
+
+
+
+
+ + Source code + +
+
@@include('includes/code-examples/reference/code-highlight/theme-light.html')
+
+
+

+ Dark theme: +

+
+ +
+
+
@@include('includes/code-examples/reference/code-highlight/code-highlight.html')
+
+
+
@@include('includes/code-examples/reference/code-highlight/code-highlight.css')
+
+
+
@@include('includes/code-examples/reference/code-highlight/code-highlight.js')
+
+
+
@@include('includes/code-examples/reference/code-highlight/code-highlight.json')
+
+
+
+
+ + Source code + +
+
@@include('includes/code-examples/reference/code-highlight/theme-dark.html')
+
+
+
+ diff --git a/src/js/components/calendar.js b/src/js/components/calendar.js new file mode 100644 index 00000000..b25d6051 --- /dev/null +++ b/src/js/components/calendar.js @@ -0,0 +1,30 @@ +(function ($) { + + $.fn.calendar = function (event, date) { + var $modalCalendar = $(this); + + if (event === 'date' && !date) { + return $modalCalendar.prop('date'); + } + + if (event === 'query:date' && !date) { + return $modalCalendar.prop('query'); + } + + return this.each(function () { + date = date instanceof Date ? date : $modalCalendar.prop('query') || new Date(); + date.setHours(0, 0, 0, 0); + + switch (event) { + case 'date': $.fn.calendar.change.apply(this, [date]); break; + case 'query:date': $.fn.calendar.query.apply(this, [date]); break; + case 'query:nextMonth': $.fn.calendar.query.apply(this, [date.addMonths(1)]); break; + case 'query:nextYear': $.fn.calendar.query.apply(this, [date.addYears(1)]); break; + case 'query:previousMonth': $.fn.calendar.query.apply(this, [date.addMonths(-1)]); break; + case 'query:previousYear': $.fn.calendar.query.apply(this, [date.addYears(-1)]); break; + default: $.fn.calendar.modal.apply(this, [date]); break; + } + }); + }; + +})(jQuery); diff --git a/src/js/components/calendar/calendar-change.js b/src/js/components/calendar/calendar-change.js new file mode 100644 index 00000000..77820428 --- /dev/null +++ b/src/js/components/calendar/calendar-change.js @@ -0,0 +1,13 @@ +(function ($) { + + $.fn.calendar.change = function (date) { + var $modalCalendar = $(this); + + $modalCalendar.prop('date', date); + + $.fn.calendar.query.apply($modalCalendar, [date]); + + $modalCalendar.trigger('calendar:change', date); + }; + +})(jQuery); diff --git a/src/js/components/calendar/calendar-modal.js b/src/js/components/calendar/calendar-modal.js new file mode 100644 index 00000000..c2b26d42 --- /dev/null +++ b/src/js/components/calendar/calendar-modal.js @@ -0,0 +1,93 @@ +(function ($) { + + $.fn.calendar.modal = function (date) { + var $modalCalendar = $(this); + var $modalHeader = $modalCalendar.find('.modal-header'); + var $modalBody = $modalCalendar.find('.modal-body'); + var $dropdownMonths = $modalHeader.find('.dropdown-toggle'); + var $months = $modalHeader.find('.dropdown-menu'); + var $previousMonth = $modalHeader.find('[data-calendar-month=previous]'); + var $nextMonth = $modalHeader.find('[data-calendar-month=next]'); + var $year = $modalHeader.find('.form-control'); + var $goToToday = $modalBody.find('[data-calendar-link=today]'); + var $goToSelected = $modalBody.find('[data-calendar-link=selected]'); + + $modalCalendar.on('calendar:each', function (e, date) { + var selectedDate = $modalCalendar.calendar('date'); + var today = new Date(); + today.setHours(0, 0, 0, 0); + + $(e.relatedTarget) + .toggleClass('active', !!selectedDate && date.getTime() === selectedDate.getTime()) + .toggleClass('today', date.getTime() === today.getTime()) + .toggleClass('sunday', date.getDay() === 0); + }); + + $modalCalendar.on('calendar:query', function (e, date) { + var month = date.getMonth(); + var $month = $($months.find('a').get(month)); + + $dropdownMonths.prop('month', date.getMonth()).text($month.text()); + $year.val(date.getFullYear()); + }); + + $months.find('a').on('click', function (e) { + var year = Number($year.val()); + var month = Number($(this).attr('data-calendar-month')); + + $modalCalendar.calendar('query:date', new Date(year, month, 1)); + + e.preventDefault(); + }); + + $nextMonth.on('click', function () { + $modalCalendar.calendar('query:nextMonth'); + }); + + $previousMonth.on('click', function () { + $modalCalendar.calendar('query:previousMonth'); + }); + + $goToToday.on('click', function () { + $modalCalendar.calendar('query:date', new Date()); + }); + + $goToSelected.on('click', function () { + var date = $modalCalendar.calendar('date'); + $modalCalendar.calendar('query:date', date); + }); + + $year + .on('keydown', function (e) { + var keyCode = e.keyCode || e.which; + var keyPressed = keyboard(keyCode); + + if (keyPressed.isArrowUp) { + $modalCalendar.calendar('query:nextYear'); + } + + if (keyPressed.isArrowDown) { + $modalCalendar.calendar('query:previousYear'); + } + }) + .on('keypress', function (e) { + var keyCode = e.keyCode || e.which; + var keyPressed = keyboard(keyCode); + + if (!keyPressed.isNumber) { + e.preventDefault(); + } + }) + .on('input', function () { + var val = $year.val(); + + if (/^\d{4}$/.test(val)) { + var year = Number(val); + var month = Number($dropdownMonths.prop('month')); + + $modalCalendar.calendar('query:date', new Date(year, month, 1)); + } + }); + }; + +})(jQuery); diff --git a/src/js/components/calendar/calendar-period.js b/src/js/components/calendar/calendar-period.js new file mode 100644 index 00000000..b604cf3d --- /dev/null +++ b/src/js/components/calendar/calendar-period.js @@ -0,0 +1,21 @@ +(function ($) { + + $.fn.calendar.period = function (year, month) { + var firstDateInMonth = new Date(year, month, 1); + var lastDateInMonth = new Date(year, month + 1, 0); + + var firstDate = new Date(firstDateInMonth); + firstDate.setDate(firstDateInMonth.getDate() - firstDateInMonth.getDay()); + + var lastDate = new Date(lastDateInMonth); + lastDate.setDate(lastDateInMonth.getDate() + (6 - lastDateInMonth.getDay())); + + return { + firstDateInMonth: firstDateInMonth, + lastDateInMonth: lastDateInMonth, + firstDate: firstDate, + lastDate: lastDate + }; + }; + +})(jQuery); diff --git a/src/js/components/calendar/calendar-query.js b/src/js/components/calendar/calendar-query.js new file mode 100644 index 00000000..17b807a2 --- /dev/null +++ b/src/js/components/calendar/calendar-query.js @@ -0,0 +1,49 @@ +(function ($) { + + $.fn.calendar.query = function (date) { + var $modalCalendar = $(this); + var $table = $modalCalendar.find('.table-calendar'); + var $tbody = $(''); + var period = $.fn.calendar.period(date.getFullYear(), date.getMonth()); + var currentDate = period.firstDate; + + while (currentDate <= period.lastDate) { + var $tr = $(''); + + for (var weekDay = 0; weekDay < 7; weekDay++) { + var $td = $(''); + var calendarEach = $.Event('calendar:each'); + + if (currentDate.getMonth() === period.firstDateInMonth.getMonth()) { + var $a = $('') + .attr('href', '#') + .prop('date', currentDate) + .text(currentDate.getDate()) + .on('click', function (e) { + $.fn.calendar.change.apply($modalCalendar, [$(this).prop('date')]); + e.preventDefault(); + }); + + calendarEach.relatedTarget = $a.get(0); + + $td.append($a); + } else { + $td.text(currentDate.getDate()); + } + + $tr.append($td); + $modalCalendar.trigger(calendarEach, currentDate); + + currentDate = currentDate.addDays(1); + } + + $tbody.append($tr); + } + + $table.find('tbody').remove(); + $table.append($tbody); + + $modalCalendar.prop('query', date).trigger('calendar:query', date) + }; + +})(jQuery); diff --git a/src/js/components/camera.js b/src/js/components/camera.js new file mode 100644 index 00000000..679f81c5 --- /dev/null +++ b/src/js/components/camera.js @@ -0,0 +1,13 @@ +(function ($) { + + $.fn.camera = function (event) { + return this.each(function () { + switch (event) { + case 'play': $.fn.camera.play.apply(this); break; + case 'stop': $.fn.camera.stop.apply(this); break; + case 'snapshot': $.fn.camera.snapshot.apply(this); break; + } + }); + }; + +})(jQuery); diff --git a/src/js/components/camera/camera-blob.js b/src/js/components/camera/camera-blob.js new file mode 100644 index 00000000..05781a35 --- /dev/null +++ b/src/js/components/camera/camera-blob.js @@ -0,0 +1,22 @@ +(function ($) { + + $.fn.camera.toBlob = function (dataURL) { + var byteString; + + if (dataURL.split(',')[0].indexOf('base64') >= 0) { + byteString = atob(dataURL.split(',')[1]); + } else { + byteString = unescape(dataURL.split(',')[1]); + } + + var mimeType = dataURL.split(',')[0].split(':')[1].split(';')[0]; + var uintArray = new Uint8Array(byteString.length); + + for (var i = 0; i < byteString.length; i++) { + uintArray[i] = byteString.charCodeAt(i); + } + + return new Blob([uintArray], { type: mimeType }); + }; + +})(jQuery); diff --git a/src/js/components/camera/camera-link.js b/src/js/components/camera/camera-link.js new file mode 100644 index 00000000..8e0a8a3c --- /dev/null +++ b/src/js/components/camera/camera-link.js @@ -0,0 +1,14 @@ +(function ($) { + + $.fn.camera.link = function (video, stream) { + if ('srcObject' in video) { + video.srcObject = stream; + } else if (navigator.mozGetUserMedia) { + video.mozSrcObject = stream; + } else { + var windowURL = window.URL || window.webkitURL || window.mozURL || window.msURL; + video.src = windowURL.createObjectURL(stream); + } + }; + +})(jQuery); diff --git a/src/js/components/camera/camera-media.js b/src/js/components/camera/camera-media.js new file mode 100644 index 00000000..1097bc82 --- /dev/null +++ b/src/js/components/camera/camera-media.js @@ -0,0 +1,17 @@ +(function ($) { + + navigator.getSupportedUserMedia = + navigator.getUserMedia || + navigator.webkitGetUserMedia || + navigator.mozGetUserMedia || + navigator.msGetUserMedia; + + $.fn.camera.isSupported = function () { + return !!navigator.getSupportedUserMedia; + }; + + $.fn.camera.getUserMedia = function (mediaConstraint, onSuccess, onFailure) { + return navigator.getSupportedUserMedia(mediaConstraint, onSuccess, onFailure); + }; + +})(jQuery); diff --git a/src/js/components/camera/camera-play.js b/src/js/components/camera/camera-play.js new file mode 100644 index 00000000..8af4ea16 --- /dev/null +++ b/src/js/components/camera/camera-play.js @@ -0,0 +1,36 @@ +(function ($) { + + $.fn.camera.play = function () { + var $video = $(this); + + if ($video.prop('playing')) { + return; + } + + var video = $video.get(0); + + var mediaConstraint = { video: true, audio: false }; + + var onSuccess = function (stream) { + $.fn.camera.link(video, stream); + + video.play(); + + $video.prop('stream', stream); + $video.prop('playing', true); + + $video.trigger('camera:play'); + }; + + var onFailure = function (error) { + $video.trigger('camera:error', error); + }; + + if ($.fn.camera.isSupported()) { + $.fn.camera.getUserMedia(mediaConstraint, onSuccess, onFailure); + } else { + $video.trigger('camera:notSupported'); + } + }; + +})(jQuery); diff --git a/src/js/components/camera/camera-snapshot.js b/src/js/components/camera/camera-snapshot.js new file mode 100644 index 00000000..a69bb619 --- /dev/null +++ b/src/js/components/camera/camera-snapshot.js @@ -0,0 +1,43 @@ +(function ($) { + + var regex = /^(\d+)x(\d+)$/gi; + + function getSize(size) { + if (!size || !size.match(regex)) { + return { width: 320, height: 240 }; + } + + var matches = regex.exec(size); + + return { width: matches[1], height: matches[2] }; + } + + $.fn.camera.snapshot = function () { + var $video = $(this); + + if (!$video.prop('playing')) { + return; + } + + var video = $video.get(0); + + var size = getSize($video.attr('data-size')); + + var canvas = document.createElement('canvas'); + canvas.width = size.width; + canvas.height = size.height; + + var context = canvas.getContext('2d'); + context.translate(size.width, 0); // 'translate' and 'scale' to flip horizontally + context.scale(-1, 1); + context.drawImage(video, 0, 0, size.width, size.height); + + var dataURL = canvas.toDataURL(); + var blob = $.fn.camera.toBlob(dataURL); + + blob.dataURL = dataURL; + + $video.trigger('camera:snapshot', blob); + }; + +})(jQuery); diff --git a/src/js/components/camera/camera-stop.js b/src/js/components/camera/camera-stop.js new file mode 100644 index 00000000..1e75c8bf --- /dev/null +++ b/src/js/components/camera/camera-stop.js @@ -0,0 +1,29 @@ +(function ($) { + + $.fn.camera.stop = function () { + var $video = $(this); + + if (!$video.prop('playing')) { + return; + } + + var stream = $video.prop('stream'); + + if (stream.getVideoTracks && typeof stream.getVideoTracks === 'function') { + var tracks = stream.getVideoTracks(); + + if (tracks && tracks[0] && tracks[0].stop) { + tracks[0].stop(); + } + } else if (stream.stop) { + // Deprecated, may be removed in the near future + stream.stop(); + } + + $video.prop('playing', false); + $video.prop('stream', null); + + $video.trigger('camera:stop'); + }; + +})(jQuery); diff --git a/src/js/components/chat.js b/src/js/components/chat.js new file mode 100644 index 00000000..4a99ef05 --- /dev/null +++ b/src/js/components/chat.js @@ -0,0 +1,28 @@ +(function ($) { + + $.fn.chat = function () { + return this.each(function () { + var $window = $(window); + var $appContent = $('.app-content'); + var $chat = $(this); + var $chatMessages = $chat.find('.chat-messages'); + + $window.on('resize', function () { + var usedHeight = 0; + + $appContent.children().each(function () { + if ($(this).is('.chat')) return; + usedHeight += $(this).outerHeight(true); // true = include margins + }); + + $chat.height($appContent.height() - usedHeight); + $chat.addClass('chat-on'); + + $chatMessages.scrollToBottom(); + }); + + $window.trigger('resize'); + }); + }; + +})(jQuery); diff --git a/src/js/components/file-manager.js b/src/js/components/file-manager.js new file mode 100644 index 00000000..6bc23739 --- /dev/null +++ b/src/js/components/file-manager.js @@ -0,0 +1,26 @@ +(function ($) { + + $.fn.fileManager = function () { + return this.each(function () { + var $element = $(this); + var $input = $('').attr('type', 'file'); + + $input.on('change', function () { + var file = $input.get(0).files[0]; + + if (file) { + $.fn.fileManager.validate(file, $element); + + $.fn.fileManager.read(file, function () { + $element.trigger('file:change', file); + }); + } + }); + + $element.on('click', function () { + $input.trigger('click'); + }); + }); + }; + +})(jQuery); diff --git a/src/js/components/file-manager/file-manager-reader.js b/src/js/components/file-manager/file-manager-reader.js new file mode 100644 index 00000000..fca4908b --- /dev/null +++ b/src/js/components/file-manager/file-manager-reader.js @@ -0,0 +1,14 @@ +(function ($) { + + $.fn.fileManager.read = function (file, callback) { + var reader = new FileReader(); + + reader.readAsDataURL(file); + + reader.onload = function (e) { + file.dataURL = e.target.result; + callback(); + }; + }; + +})(jQuery); diff --git a/src/js/components/file-manager/file-manager-validate.js b/src/js/components/file-manager/file-manager-validate.js new file mode 100644 index 00000000..d4dd2453 --- /dev/null +++ b/src/js/components/file-manager/file-manager-validate.js @@ -0,0 +1,18 @@ +(function ($) { + + $.fn.fileManager.validate = function (file, $settings) { + var maxsize = $settings.attr('data-maxsize'); + var type = $settings.attr('data-type'); + + file.errors = []; + + if (!$.fn.fileManager.validate.maxsize(file, maxsize)) { + file.errors.push('maxsize'); + } + + if (!$.fn.fileManager.validate.type(file, type)) { + file.errors.push('type'); + } + }; + +})(jQuery); diff --git a/src/js/components/file-manager/validators/file-manager-maxsize.js b/src/js/components/file-manager/validators/file-manager-maxsize.js new file mode 100644 index 00000000..f1b719d3 --- /dev/null +++ b/src/js/components/file-manager/validators/file-manager-maxsize.js @@ -0,0 +1,21 @@ +(function ($) { + + var regex = /^(\d*\.?\d+)(B|KB|MB|GB)?$/gi; + var exponentOf = { B: 0, KB: 1, MB: 2, GB: 3 }; + + function toBytes(size, unit) { + return Number(size) * Math.pow(1024, exponentOf[unit]); + } + + $.fn.fileManager.validate.maxsize = function (file, maxsize) { + if (!maxsize) return true; + if (!maxsize.match(regex)) return false; + + var matches = regex.exec(maxsize); + var size = matches[1]; + var unit = matches[2]; + + return file.size <= toBytes(size, unit); + }; + +})(jQuery); diff --git a/src/js/components/file-manager/validators/file-manager-type.js b/src/js/components/file-manager/validators/file-manager-type.js new file mode 100644 index 00000000..60970fe9 --- /dev/null +++ b/src/js/components/file-manager/validators/file-manager-type.js @@ -0,0 +1,10 @@ +(function ($) { + + $.fn.fileManager.validate.type = function (file, type) { + if (!type) return true; + + var pattern = '^' + type.replaceAll(',', '|') + '$'; + return new RegExp(pattern).test(file.type); + }; + +})(jQuery); diff --git a/src/js/components/input-suggestion/input-suggestion-change.js b/src/js/components/input-suggestion/input-suggestion-change.js index 166c695d..cecf8e37 100644 --- a/src/js/components/input-suggestion/input-suggestion-change.js +++ b/src/js/components/input-suggestion/input-suggestion-change.js @@ -21,7 +21,7 @@ var key = e.keyCode || e.which; var keyPressed = keyboard(key); - if (keyPressed.isEnter()) { + if (keyPressed.isEnter) { var $ativeItem = $items.filter('.active'); if ($ativeItem.length) { diff --git a/src/js/components/input-suggestion/input-suggestion-select.js b/src/js/components/input-suggestion/input-suggestion-select.js index defc0230..b8396ea2 100644 --- a/src/js/components/input-suggestion/input-suggestion-select.js +++ b/src/js/components/input-suggestion/input-suggestion-select.js @@ -29,7 +29,7 @@ var key = e.keyCode || e.which; var keyPressed = keyboard(key); - if (keyPressed.isEscape()) { + if (keyPressed.isEscape) { hide(); } }) @@ -37,7 +37,7 @@ var key = e.keyCode || e.which; var keyPressed = keyboard(key); - if (keyPressed.isArrowUp() || keyPressed.isArrowDown()) { + if (keyPressed.isArrowUp || keyPressed.isArrowDown) { e.preventDefault(); if (!$suggestion.is('.open')) { @@ -47,7 +47,7 @@ var $currentItem = $items.children('.active'); - if (keyPressed.isArrowDown()) { + if (keyPressed.isArrowDown) { if ($currentItem.is(':last-child')) { return; } @@ -60,7 +60,7 @@ } } - if (keyPressed.isArrowUp()) { + if (keyPressed.isArrowUp) { if ($currentItem.is(':first-child')) { return; } diff --git a/src/js/events/scroll.js b/src/js/events/scroll.js new file mode 100644 index 00000000..4b193ee4 --- /dev/null +++ b/src/js/events/scroll.js @@ -0,0 +1,12 @@ +(function ($) { + + $.fn.scrollToBottom = function () { + return this.each(function () { + var $element = $(this); + var scrollHeight = $element.prop('scrollHeight'); + + $element.scrollTop(scrollHeight); + }); + }; + +})(jQuery); diff --git a/src/js/init.js b/src/js/init.js index c7b1769e..5ec51843 100644 --- a/src/js/init.js +++ b/src/js/init.js @@ -1,7 +1,10 @@ $(function () { $('input').typing(); $('.as-input').asInput(); + $('.chat').chat(); + $('.modal-calendar').calendar(); $('[data-toggle="popover"]').popover(); $('[data-toggle="tooltip"]').tooltip(); $('[data-toggle="suggestion"]').suggestion(); + $('[data-toggle="file-manager"]').fileManager(); }); diff --git a/src/js/types/date.js b/src/js/types/date.js new file mode 100644 index 00000000..99d15ff5 --- /dev/null +++ b/src/js/types/date.js @@ -0,0 +1,32 @@ +(function () { + + Date.prototype.addDays = function (days) { + var date = new Date(this.getTime()); + date.setDate(this.getDate() + days); + + return date; + }; + + Date.prototype.addMonths = function (months) { + var year = this.getFullYear(); + var month = this.getMonth() + months; + var date = new Date(year, month, 1); + var lastDate = new Date(year, month + 1, 0); + + if (this.getDate() > lastDate.getDate()) { + date.setDate(lastDate.getDate()); + } else { + date.setDate(this.getDate()); + } + + return date; + }; + + Date.prototype.addYears = function (years) { + var date = new Date(this.getTime()); + date.setFullYear(this.getFullYear() + years); + + return date; + }; + +})(); diff --git a/src/js/types/keyboard.js b/src/js/types/keyboard.js index 8ba592d4..53b69756 100644 --- a/src/js/types/keyboard.js +++ b/src/js/types/keyboard.js @@ -1,21 +1,19 @@ -(function() { - window.keyboard = function(key) { - this.isArrowDown = function() { - return key === 40; - }; +(function () { + var numberRegex = /\d/; + var letterRegex = /[a-zA-Z]/; - this.isArrowUp = function() { - return key === 38; - }; + window.keyboard = function (keyCode) { + var char = String.fromCharCode(keyCode); - this.isEnter = function() { - return key === 13; + return { + isArrowDown: keyCode === 40, + isArrowUp: keyCode === 38, + isBackspace: keyCode === 8, + isDelete: keyCode === 46 || keyCode === 63272, /* Safari */ + isEnter: keyCode === 13, + isEscape: keyCode === 27, + isLetter: letterRegex.test(char), + isNumber: numberRegex.test(char) }; - - this.isEscape = function() { - return key === 27; - }; - - return this; }; })(); diff --git a/src/js/types/string.js b/src/js/types/string.js index 8b9708e6..706467f8 100644 --- a/src/js/types/string.js +++ b/src/js/types/string.js @@ -1,11 +1,18 @@ (function () { - String.prototype.contains = function (str) { - return new RegExp(str, "i").test(this); - }; + if (!String.prototype.startsWith) { + String.prototype.startsWith = function (searchString, position) { + position = position || 0; + return this.indexOf(searchString, position) === position; + }; + } - String.prototype.replaceAll = function (search, replacement) { - return this.replace(new RegExp(search, 'g'), replacement); - }; + String.prototype.contains = function (str) { + return new RegExp(str, "i").test(this); + }; + + String.prototype.replaceAll = function (search, replacement) { + return this.replace(new RegExp(search, 'g'), replacement); + }; })(); diff --git a/src/scss/admin4b.scss b/src/scss/admin4b.scss index 641ead06..1c77889b 100644 --- a/src/scss/admin4b.scss +++ b/src/scss/admin4b.scss @@ -17,6 +17,10 @@ @import 'layout/sign/form-sign'; @import 'layout/sign/page-sign'; +@import 'components/breadcrumb'; +@import 'components/calendar'; +@import 'components/camera'; +@import 'components/chat'; @import 'components/label'; @import 'components/callout'; @import 'components/checkbox'; diff --git a/src/scss/components/_breadcrumb.scss b/src/scss/components/_breadcrumb.scss new file mode 100644 index 00000000..23ed389e --- /dev/null +++ b/src/scss/components/_breadcrumb.scss @@ -0,0 +1,4 @@ +.breadcrumb +{ + @include crossbrowser-border-radius(0); +} diff --git a/src/scss/components/_calendar.scss b/src/scss/components/_calendar.scss new file mode 100644 index 00000000..e2d3f85e --- /dev/null +++ b/src/scss/components/_calendar.scss @@ -0,0 +1,137 @@ +.modal.modal-calendar .modal-dialog +{ + max-width: 20rem; + + .modal-content + { + .modal-header, + .modal-body, + .modal-footer + { + border-width: 0; + padding-left: 1.25rem; + padding-right: 1.25rem; + } + + .modal-header + { + .input-group + { + height: auto; + width: auto; + + .btn, + .form-control + { + font-size: 14pt; + padding: .9375rem .3125rem 0 .3125rem; + + &.btn-link + { + padding-left: 1.25rem; + padding-right: 1.25rem; + } + } + + .form-control + { + border: none; + display: inline-block; + text-align: center; + width: 3.75rem; + @include crossbrowser-box-shadow(none); + @include crossbrowser-flex(0 1 auto); + } + + .btn.dropdown-toggle + { + border: none; + background: $bscolors-white; + color: $bscolors-gray-700; + @include crossbrowser-box-shadow(none); + + &::after + { + display:none + } + } + } + } + + .modal-footer + { + justify-content: center; + @include crossbrowser-align-items(center); + } + } +} + +table.table-calendar +{ + margin-bottom: .5rem; + text-align: center; + width: 100%; + + th + { + font-weight: normal; + padding-bottom: .9375rem; + + &:first-child + { + color: $bscolors-red; + } + } + + td + { + color: $bscolors-gray-500; + padding: .3125rem; + + a + { + color: $bscolors-gray-700; + display: block; + position: relative; + text-align: center; + text-decoration: none; + z-index: 1; + + &::before + { + border: .0625rem solid $bscolors-blue; + content: " "; + display: none; + position: absolute; + top: -.25rem; + left: -.0625rem; + width: 2rem; + height: 2rem; + z-index: -1; + @include crossbrowser-border-radius(50%); + } + + &:hover, + &.active + { + color: $bscolors-white !important; + + &::before + { + background: $bscolors-blue; + display: block; + } + } + + &.today::before + { + display: block; + } + + &.sunday + { + color: $bscolors-red; + } + } + } +} diff --git a/src/scss/components/_callout.scss b/src/scss/components/_callout.scss index fde6b204..d4f0c50e 100644 --- a/src/scss/components/_callout.scss +++ b/src/scss/components/_callout.scss @@ -1,8 +1,7 @@ .callout { padding: 1.25rem; - margin-top: 1.25rem; - margin-bottom: 1.25rem; + margin-bottom: 1rem; border: .0625rem solid #eee; border-left-width: .25rem; @include crossbrowser-border-radius(.25rem); diff --git a/src/scss/components/_camera.scss b/src/scss/components/_camera.scss new file mode 100644 index 00000000..32146fe2 --- /dev/null +++ b/src/scss/components/_camera.scss @@ -0,0 +1,7 @@ +.camera +{ + display: block; + width: 100%; + @include crossbrowser-transform(scale(-1, 1)); + @include crossbrowser-filter(FlipH); +} diff --git a/src/scss/components/_chat.scss b/src/scss/components/_chat.scss new file mode 100644 index 00000000..833e7ece --- /dev/null +++ b/src/scss/components/_chat.scss @@ -0,0 +1,139 @@ +@include crossbrowser-keyframes(ballon) +{ + 0% + { + @include crossbrowser-transform(scale(0)); + } + 100% + { + @include crossbrowser-transform(scale(1)); + } +} + +.chat +{ + display: none; + padding: 0; + width: 100%; + + &.chat-on /* Set by JS after calculate the remaining height */ + { + display: table; + } + + .chat-body, + .chat-footer + { + display: table-row; + } + + .chat-body + { + height: 100%; + + .chat-content + { + display: table-cell; + height: 100%; + + .chat-messages + { + height: 100%; + position: relative; + overflow: auto; + + .container-fluid /* Correct height for IE and Firefox */ + { + position: absolute; + top: 0; + bottom: 0; + left: 0; + right: 0; + } + + .message-sent, + .message-reply + { + margin-bottom: 1rem; + + img + { + vertical-align: top; + width: 3rem; + @include crossbrowser-border-radius(50%); + } + + p + { + display: inline-block; + margin: 0; + padding: .625rem 1.25rem; + text-align: left; + max-width: 75%; + @include crossbrowser-animation(ballon .2s linear); + @include crossbrowser-border-radius(1.25rem); + } + } + + .message-sent + { + img + { + margin-right: .375rem; + } + + p + { + background-color: lighten($flatuicolors-midnight-blue, 15%); + color: $bscolors-white; + transform-origin: top left; + } + + small + { + color: lighten($flatuicolors-midnight-blue, 50%); + } + } + + .message-reply + { + text-align: right; + + img + { + float: right; + margin-left: .625rem; + } + + p + { + background-color: $bscolors-gray-400; + transform-origin: top right; + } + + small + { + color: $bscolors-gray-600; + } + } + } + } + } + + .chat-footer + { + .btn, + .form-control + { + padding-top: 1rem; + padding-bottom: 1rem; + @include crossbrowser-border-radius(0); + } + + .btn + { + padding-left: 1.25rem; + padding-right: 1.25rem; + } + } +} diff --git a/src/scss/components/_checkbox.scss b/src/scss/components/_checkbox.scss index 220b8488..5c654722 100644 --- a/src/scss/components/_checkbox.scss +++ b/src/scss/components/_checkbox.scss @@ -131,8 +131,8 @@ label.checkbox &:after { - left: .5rem; - top: .25rem; + left: .57rem; + top: .3rem; width: .4375rem; height: .75rem; border-width: 0 .1875rem .1875rem 0; diff --git a/src/scss/components/_radio-button.scss b/src/scss/components/_radio-button.scss index 8fe005e1..26ab6337 100644 --- a/src/scss/components/_radio-button.scss +++ b/src/scss/components/_radio-button.scss @@ -36,6 +36,7 @@ label.radio { margin-bottom: 0; + text-align: left; @include crossbrowser-align-items(center); @include crossbrowser-display-inline-flex(); @include crossbrowser-user-select(none); diff --git a/src/scss/highlight/_css.scss b/src/scss/highlight/_css.scss index f0db0625..fdbbf545 100644 --- a/src/scss/highlight/_css.scss +++ b/src/scss/highlight/_css.scss @@ -1,24 +1,55 @@ -.css .hljs-keyword +.source-code { - color: $highlight-colors-keyword; -} + .css .hljs-keyword + { + color: $highlight-light-keyword; + } -.css .hljs-selector-class -{ - color: $highlight-colors-class; -} + .css .hljs-selector-class + { + color: $highlight-light-class; + } -.css .hljs-attribute -{ - color: $highlight-colors-attribute; -} + .css .hljs-attribute + { + color: $highlight-light-attribute; + } -.css .hljs-comment -{ - color: $highlight-colors-comment; + .css .hljs-comment + { + color: $highlight-light-comment; + } + + .css .hljs-number + { + color: $highlight-light-number; + } } -.css .hljs-number +.source-code.dark { - color: $highlight-colors-number; + .css .hljs-keyword + { + color: $highlight-dark-keyword; + } + + .css .hljs-selector-class + { + color: $highlight-dark-class; + } + + .css .hljs-attribute + { + color: $highlight-dark-attribute; + } + + .css .hljs-comment + { + color: $highlight-dark-comment; + } + + .css .hljs-number + { + color: $highlight-dark-number; + } } diff --git a/src/scss/highlight/_html.scss b/src/scss/highlight/_html.scss index 3478f197..29218f04 100644 --- a/src/scss/highlight/_html.scss +++ b/src/scss/highlight/_html.scss @@ -1,25 +1,57 @@ -.html .hljs-meta +.source-code { - color: $highlight-colors-namespace; -} + .html .hljs-meta + { + color: $highlight-light-namespace; + } -.html .hljs-section, -.html .hljs-tag -{ - color: $highlight-colors-keyword; -} + .html .hljs-section, + .html .hljs-tag + { + color: $highlight-light-keyword; + } -.html .hljs-tag .hljs-attr -{ - color: $highlight-colors-attribute; -} + .html .hljs-tag .hljs-attr + { + color: $highlight-light-attribute; + } -.html .hljs-tag .hljs-string -{ - color: $highlight-colors-string; + .html .hljs-tag .hljs-string + { + color: $highlight-light-string; + } + + .html .hljs-comment + { + color: $highlight-light-comment; + } } -.html .hljs-comment +.source-code.dark { - color: $highlight-colors-comment; + .html .hljs-meta + { + color: $highlight-dark-namespace; + } + + .html .hljs-section, + .html .hljs-tag + { + color: $highlight-dark-keyword; + } + + .html .hljs-tag .hljs-attr + { + color: $highlight-dark-attribute; + } + + .html .hljs-tag .hljs-string + { + color: $highlight-dark-string; + } + + .html .hljs-comment + { + color: $highlight-dark-comment; + } } diff --git a/src/scss/highlight/_js.scss b/src/scss/highlight/_js.scss index 3ab4b650..a9037852 100644 --- a/src/scss/highlight/_js.scss +++ b/src/scss/highlight/_js.scss @@ -1,14 +1,45 @@ -.js .hljs-string +.source-code { - color: $highlight-colors-string; -} + .js .hljs-number + { + color: $highlight-light-number; + } -.js .hljs-keyword -{ - color: $highlight-colors-keyword; + .js .hljs-string + { + color: $highlight-light-string; + } + + .js .hljs-keyword + { + color: $highlight-light-keyword; + } + + .js .hljs-comment + { + color: $highlight-light-comment; + } } -.js .hljs-comment +.source-code.dark { - color: $highlight-colors-comment; + .js .hljs-number + { + color: $highlight-dark-number; + } + + .js .hljs-string + { + color: $highlight-dark-string; + } + + .js .hljs-keyword + { + color: $highlight-dark-keyword; + } + + .js .hljs-comment + { + color: $highlight-dark-comment; + } } diff --git a/src/scss/highlight/_json.scss b/src/scss/highlight/_json.scss index 27d70936..b53434ad 100644 --- a/src/scss/highlight/_json.scss +++ b/src/scss/highlight/_json.scss @@ -1,19 +1,45 @@ -.json .hljs-attr +.source-code { - color: $highlight-colors-attribute; -} + .json .hljs-attr + { + color: $highlight-light-attribute; + } -.json .hljs-string -{ - color: $highlight-colors-string; -} + .json .hljs-string + { + color: $highlight-light-string; + } -.json .hljs-literal, -{ - color: $highlight-colors-keyword; + .json .hljs-literal, + { + color: $highlight-light-keyword; + } + + .json .hljs-number + { + color: $highlight-light-number; + } } -.json .hljs-number +.source-code.dark { - color: $highlight-colors-number; + .json .hljs-attr + { + color: $highlight-dark-attribute; + } + + .json .hljs-string + { + color: $highlight-dark-string; + } + + .json .hljs-literal, + { + color: $highlight-dark-keyword; + } + + .json .hljs-number + { + color: $highlight-dark-number; + } } diff --git a/src/scss/highlight/_source-code.scss b/src/scss/highlight/_source-code.scss index 96adac52..95475837 100644 --- a/src/scss/highlight/_source-code.scss +++ b/src/scss/highlight/_source-code.scss @@ -1,36 +1,61 @@ .source-code { - $bg-color: #222d32; - $text-color: #fff; - margin-bottom: 1rem; .nav-tabs a { - color: darken($text-color, 50%); + color: $highlight-light-editor-link; font-size: .95rem; text-decoration: none; padding: .75rem; + padding-bottom: 0; @include crossbrowser-transition(color .2s ease); &.active, + &:active, &:hover { - color: $text-color; + color: darken($highlight-light-editor-link, 30%); } } pre, .nav-tabs { - background: $bg-color; + background: $highlight-light-editor-bg; border: none; } pre { - color: $highlight-colors-literal; margin: 0; overflow-x: auto; + padding: .75rem; + } +} + +.source-code.dark +{ + .nav-tabs a + { + color: darken($highlight-dark-editor-link, 50%); + + &.active, + &:active, + &:hover + { + color: $highlight-dark-editor-link; + } + } + + pre, + .nav-tabs + { + background: $highlight-dark-editor-bg; + } + + pre + { + color: $highlight-dark-literal; } } diff --git a/src/scss/layout/_app.scss b/src/scss/layout/_app.scss index e7df751f..ecc15003 100644 --- a/src/scss/layout/_app.scss +++ b/src/scss/layout/_app.scss @@ -85,3 +85,17 @@ body } } } + +@media print +{ + .app .app-body + { + position: relative; + height: auto; + + .app-sidebar + { + display: none; + } + } +} diff --git a/src/scss/layout/sign/_page-sign.scss b/src/scss/layout/sign/_page-sign.scss index 9fbcbe5c..47a691e5 100644 --- a/src/scss/layout/sign/_page-sign.scss +++ b/src/scss/layout/sign/_page-sign.scss @@ -4,5 +4,4 @@ padding-top: 2.45rem; padding-bottom: 2.45rem; @include crossbrowser-align-items(center); - @include crossbrowser-display-flex(); } diff --git a/src/scss/palette/_highlight-colors.scss b/src/scss/palette/_highlight-colors.scss index 405f8b21..c509e8d8 100644 --- a/src/scss/palette/_highlight-colors.scss +++ b/src/scss/palette/_highlight-colors.scss @@ -1,8 +1,21 @@ -$highlight-colors-attribute: #9cdcfe; -$highlight-colors-class: #0a8; -$highlight-colors-comment: #999; -$highlight-colors-keyword: #569cd6; -$highlight-colors-literal: #e8e8e8; -$highlight-colors-namespace: #099; -$highlight-colors-number: #d7ba7d; -$highlight-colors-string: #ce9178; +$highlight-light-attribute: #4f9fcf; +$highlight-light-editor-bg: #efefef; +$highlight-light-editor-link: #868e96; +$highlight-light-class: #0a8; +$highlight-light-comment: #999; +$highlight-light-keyword: #2f6f9f; +$highlight-light-literal: #212529; +$highlight-light-namespace: #099; +$highlight-light-number: #f5871f; +$highlight-light-string: #d44950; + +$highlight-dark-attribute: #9cdcfe; +$highlight-dark-editor-bg: #222d32; +$highlight-dark-editor-link: #fff; +$highlight-dark-class: #0a8; +$highlight-dark-comment: #999; +$highlight-dark-keyword: #569cd6; +$highlight-dark-literal: #e8e8e8; +$highlight-dark-namespace: #099; +$highlight-dark-number: #d7ba7d; +$highlight-dark-string: #ce9178; diff --git a/src/scss/utilities/_cross-browser.scss b/src/scss/utilities/_cross-browser.scss index 9a06789b..79e3c362 100644 --- a/src/scss/utilities/_cross-browser.scss +++ b/src/scss/utilities/_cross-browser.scss @@ -96,6 +96,21 @@ display: inline-flex; } +@mixin crossbrowser-filter($filter) +{ + -ms-filter: "#{$filter}"; + filter: $filter; +} + +@mixin crossbrowser-flex($flex...) +{ + -webkit-box-flex: $flex; + -moz-box-flex: $flex; + -webkit-flex: $flex; + -ms-flex: $flex; + flex: $flex; +} + @mixin crossbrowser-input-placeholder($color) { &::-webkit-input-placeholder