Next major version 2 with PHP 8.1, Symfony 6, Tabler UI, 2FA ... (#2902)

This commit is contained in:
Kevin Papst
2022-12-31 21:19:55 +01:00
committed by GitHub
parent 95e06746bd
commit 90a0fd8a22
2164 changed files with 83700 additions and 86426 deletions

View File

@@ -10,25 +10,18 @@
@import 'error-page';
@import 'print';
@import 'content';
@import 'box';
@import 'content-header';
@import 'toolbar';
@import 'sidebar';
@import 'footer';
@import 'datatable';
@import 'datatable-extensions';
@import 'loading-spinner';
@import 'tables';
@import 'calendar';
@import 'dashboard';
@import 'navbar';
@import 'daterangepicker';
@import 'skins';
@import 'ticktac';
@import 'sweetalert';
@import 'autocomplete';
@import 'selectpicker';
@import 'reporting';
@import 'forms';
@import 'modal';
@import 'progressbar';
@import 'avatar';
@import 'security';
@import 'tabs';
@import 'theme-dark';
@import 'pages';
@import 'tabler-fixes';
@import 'help';
@import 'rtl';

View File

@@ -1,76 +0,0 @@
/*
* This file is part of the Kimai time-tracking app.
*
* For the full copyright and license information, please view the LICENSE
* file that was distributed with this source code.
*/
.ui-widget {
font-size: 1em/*{fsDefault}*/;
}
.ui-widget.ui-widget-content {
border: 1px solid #c5c5c5/*{borderColorDefault}*/;
}
.ui-widget-content {
border: 1px solid #dddddd/*{borderColorContent}*/;
background: #ffffff/*{bgColorContent}*/ /*{bgImgUrlContent}*/ /*{bgContentXPos}*/ /*{bgContentYPos}*/ /*{bgContentRepeat}*/;
color: #333333/*{fcContent}*/;
}
.ui-menu {
list-style: none;
padding: 0;
margin: 0;
display: block;
outline: 0;
}
.ui-menu .ui-menu-item {
margin: 0;
cursor: pointer;
}
.ui-autocomplete {
position: absolute;
top: 0;
left: 0;
cursor: default;
}
.ui-front {
z-index: 1200;
}
.ui-menu .ui-menu-item-wrapper {
position: relative;
padding: 3px 1em 3px .4em;
}
.ui-menu .ui-state-focus,
.ui-menu .ui-state-active {
margin: -1px;
}
.ui-state-active,
.ui-widget-content .ui-state-active,
.ui-widget-header .ui-state-active,
a.ui-button:active,
.ui-button:active,
.ui-button.ui-state-active:hover {
border: 1px solid #003eff/*{borderColorActive}*/;
background: #007fff/*{bgColorActive}*/ /*{bgImgUrlActive}*/ /*{bgActiveXPos}*/ /*{bgActiveYPos}*/ /*{bgActiveRepeat}*/;
font-weight: normal/*{fwDefault}*/;
color: #ffffff/*{fcActive}*/;
}
.ui-icon-background,
.ui-state-active .ui-icon-background {
border: #003eff/*{borderColorActive}*/;
background-color: #ffffff/*{fcActive}*/;
}
.ui-state-active a,
.ui-state-active a:link,
.ui-state-active a:visited {
color: #ffffff/*{fcActive}*/;
text-decoration: none;
}

View File

@@ -1,22 +1,9 @@
$avatar-base-size: 30;
.avatar {
text-align: center;
background-color: #d2d6de;
border-radius: 50%;
display: inline-block;
height: ($avatar-base-size)+px;
width: ($avatar-base-size)+px;
vertical-align: middle;
}
.initials {
line-height: 1;
position: relative;
font-weight: bold;
font-size: ceil($avatar-base-size / 2 - 2)+px;
top: floor($avatar-base-size / 4 - 1)+px;
}
$avatarSizes: "xs" .75, "sm" 1.25, "md" 1.5, "lg" 2;
@@ -28,7 +15,6 @@ $avatarSizes: "xs" .75, "sm" 1.25, "md" 1.5, "lg" 2;
.initials {
font-size: ceil($avatar-base-size * $avatarBaseSize / 2 - 2)+px;
top: ceil($avatar-base-size * $avatarBaseSize / 4 - 1)+px;
}
}
}
@@ -41,7 +27,6 @@ $avatarSizes: "xs" .75, "sm" 1.25, "md" 1.5, "lg" 2;
height: ceil($avatar-base-size * 2.75)+px;
.initials {
font-size: ceil($avatar-base-size * 2.75 / 2 - 2)+px;
top: ceil($avatar-base-size * 2.75 / 4 - 1)+px;
}
}
}
@@ -54,7 +39,3 @@ table.dataTable.table > tbody > tr > td {
}
}
}
.avatar.teamlead {
box-shadow: 0px 0px 5px 1px rgba(0,0,0,.4),0 0px 3px 0 rgba(0,0,0,0.3);
}

View File

@@ -1,22 +0,0 @@
.box {
/* used on detail pages for: customer, project and activity */
.box-body.no-padding div.comment,
.box-body.no-padding .box-padding {
padding: 10px;
}
.box-tools {
/* a button that is directly connected with a pagination element inside the box tools (eg. project list on customer detail page) */
.btn-pager {
float: left;
margin-right: 5px;
}
}
}
#customer_details_box,
#project_details_box,
#activity_details_box {
th {
width: 30%;
}
}

View File

@@ -1,51 +1,15 @@
.popover-content {
.calendar-entry {
ul {
padding: 0;
list-style-type: none;
}
.calendar-entry {
ul {
padding: 0;
list-style-type: none;
}
}
/* Drag and Drop events with styling */
.external-events {
.external-event {
vertical-align: middle;
padding: 0 !important;
display: inline-block;
position: relative;
width: 100%;
}
.subtitle {
padding: 0 7px 4px 7px;
display: block;
overflow: hidden;
text-overflow: ellipsis;
white-space: nowrap;
font-size: 0.7em;
}
.title {
padding: 3px 7px 0;
display: block;
overflow: hidden;
text-overflow: ellipsis;
white-space: nowrap;
}
.draggable {
cursor: grab;
}
.fc-bootstrap3 {
.table-bordered > tbody > tr > td,
.table-bordered > thead > tr > td,
.table-bordered > thead > tr > th {
border: 1px solid #ddd;
}
.fc-head {
background-color: #fafafa;
}
td.fc-today {
background-color: #fcf8e3!important;
}
}
#timesheet_calendar {
--bs-gray-400: var(--tblr-border-color);
--bs-gray-200: var(--tblr-gray-200);
}

View File

@@ -1,65 +0,0 @@
/*
* This file is part of the Kimai time-tracking app.
*
* For the full copyright and license information, please view the LICENSE
* file that was distributed with this source code.
*/
.content-header {
height: 50px;
border-top: 1px solid rgba(0, 0, 0, 0.1);
box-shadow: 0 1px 2px rgba(0, 0, 0, 0.1) !important;
background-color: #fff !important;
padding: 10px 0 0 10px;
h1 {
padding-top: 3px;
float: left;
small {
display: none;
}
}
}
/* Page based action buttons in the upper right corner of the content area */
.content-header>.breadcrumb {
position: absolute;
float: right;
background: transparent;
top: 0;
right: 0;
padding-left: 10px;
.btn {
span.label {
position: absolute;
top: 1px;
right: 1px;
text-align: center;
font-size: 9px;
padding: 2px 3px;
}
}
}
@media (max-width: $screen-md-max) {
.content-header h1 {
font-size: 1.5em;
}
.content-header>.breadcrumb {
margin-top: 0;
}
}
@media (min-width: $screen-sm-min) {
.content-header>.breadcrumb {
right: 10px;
}
.content-header {
h1 {
small {
display: inline-block;
}
}
}
}

View File

@@ -5,20 +5,16 @@
* file that was distributed with this source code.
*/
.content {
padding: 15px 0;
/* make sure that elements can be hidden without taking space (eg. hidden modals like the search or column visibility) */
.hidden-no-space {
margin: 0;
padding: 0;
}
@media (min-width: $screen-sm-min) {
.content {
padding: 15px;
}
}
@media (min-width: $screen-lg-min) {
.content {
padding: 20px;
}
/* used at least in the duration dropdown */
.pre-scrollable {
max-height: 340px;
overflow-y: scroll;
}
td {
@@ -30,16 +26,11 @@ td {
margin: 0;
}
}
}
/* ABOUT SCREEN */
.box-body .menu-icon {
width: 35px;
height: 35px;
border-radius: 50%;
text-align: center;
line-height: 35px;
margin-right: 15px;
/* table cells that contain badges (like the team or timesheet view)
and are multi-line entries the badges do not have margin between them */
&.badges {
line-height: 22px;
}
}
.label-gray {
@@ -47,11 +38,6 @@ td {
color: #666;
}
/* Delete link in action dropdowns */
.dropdown-menu > li.delete > a {
color: #dd4b39;
}
.open-edit {
cursor: pointer;
}
@@ -66,17 +52,46 @@ table.dataTable thead > tr > th.hw-min {
width: 1%;
white-space: normal;
}
.badge {
font-weight: normal;
color: #000;
background-color: $kimai-default;
/* If a table column contains ONLY avatar <img> it will collapse, so make it a defined width */
.w-avatar {
width: 40px;
img.avatar {
/* a weird bug in tables with real avatar <img> only causes them to collapse */
max-width: 40px;
}
}
.label {
font-weight: normal;
.list-group-item{
/* !important rules, because dark theme overwrites list-group-item */
&.danger {
padding-left: $list-group-item-padding-x - 0.2rem;
border-left: 0.2rem solid $danger!important;
}
&.success {
padding-left: $list-group-item-padding-x - 0.2rem;
border-left: 0.2rem solid $success!important;;
}
}
a.link-black {
color: #000;
}
/* Scrollable boxes (eg. widgets on dashboard) */
.box-body-scrollable {
overflow: auto;
max-height: 340px;
}
.card {
.card-tools {
/* a button that is directly connected with a pagination element inside the box tools (eg. project list on customer detail page) */
.btn-pager {
float: left;
margin-right: 5px;
}
}
}
#customer_details_box,
#project_details_box,
#activity_details_box {
th {
width: 30%;
}
}

View File

@@ -1,20 +0,0 @@
/*
* This file is part of the Kimai time-tracking app.
*
* For the full copyright and license information, please view the LICENSE
* file that was distributed with this source code.
*/
section {
&.dashboard {
.info-box {
.info-box-text {
white-space: normal;
}
}
}
.box-body-scrollable {
overflow: auto;
max-height: 300px;
}
}

View File

@@ -1,265 +0,0 @@
/*
* This file is part of the Kimai time-tracking app.
*
* For the full copyright and license information, please view the LICENSE
* file that was distributed with this source code.
*/
/* Loading indicator: overwritten from AdminLTE for positioning and supporting fas classes */
.box .overlay > .fas,
section.content .overlay > .fas,
.overlay-wrapper .overlay > .fas {
position: absolute;
top: 50vh;
left: 50vw;
margin-left: -15px;
margin-top: -15px;
color: #000;
font-size: 30px;
}
.box > .overlay,
.overlay-wrapper > .overlay,
section.content > .overlay,
.box > .loading-img,
.overlay-wrapper > .loading-img {
position: fixed; /* see #1330 */
top: 0;
left: 0;
width: 100%;
height: 100%;
}
.box .overlay,
section.content .overlay,
.overlay-wrapper .overlay {
z-index: 50;
background: rgba(255, 255, 255, 0.7);
border-radius: $box-border-radius;
}
.box .overlay.dark,
section.content .overlay.dark,
.overlay-wrapper .overlay.dark {
background: rgba(0, 0, 0, 0.5);
}
/*
dataTables.bootstrap.css
*/
div.dataTables_length label {
font-weight: normal;
text-align: left;
white-space: nowrap;
}
div.dataTables_length select {
width: 75px;
display: inline-block;
}
div.dataTables_filter {
text-align: right;
}
div.dataTables_filter label {
font-weight: normal;
white-space: nowrap;
text-align: left;
}
div.dataTables_filter input {
margin-left: 0.5em;
display: inline-block;
width: auto;
}
div.dataTables_info {
padding-top: 8px;
white-space: nowrap;
}
div.dataTables_paginate {
margin: 0;
white-space: nowrap;
text-align: right;
}
div.dataTables_paginate ul.pagination {
margin: 2px 0;
white-space: nowrap;
}
@media screen and (max-width: 767px) {
div.dataTables_length,
div.dataTables_filter,
div.dataTables_info,
div.dataTables_paginate {
text-align: center;
}
div.DTTT {
margin-bottom: 0.5em;
}
}
table.dataTable td,
table.dataTable th {
-webkit-box-sizing: content-box;
-moz-box-sizing: content-box;
box-sizing: content-box;
}
table.dataTable {
clear: both;
/*margin-top: 6px !important;
margin-bottom: 6px !important;*/
margin-bottom: 0px !important;
max-width: none !important;
}
table.dataTable thead .sorting,
table.dataTable thead .sorting_asc,
table.dataTable thead .sorting_desc,
table.dataTable thead .sorting_asc_disabled,
table.dataTable thead .sorting_desc_disabled {
cursor: pointer;
position: relative;
}
table.dataTable thead .sorting_asc,
table.dataTable thead .sorting_desc {
font-weight: bold;
}
table.dataTable thead .sorting:after,
table.dataTable thead .sorting_asc:after,
table.dataTable thead .sorting_desc:after {
padding-left: 5px;
font-family: 'Font Awesome 5 Free';
opacity: 0.5;
font-size: 12px;
}
table.dataTable thead .sorting:after {
opacity: 0.2;
content: "\f0dc"; /* sort */
}
table.dataTable thead .sorting_asc:after {
content: "\f062";
}
table.dataTable thead .sorting_desc:after {
content: "\f063";
}
div.dataTables_scrollBody table.dataTable thead .sorting:before,
div.dataTables_scrollBody table.dataTable thead .sorting_asc:before,
div.dataTables_scrollBody table.dataTable thead .sorting_desc:before {
display: none;
}
table.dataTable thead .sorting_asc_disabled:before,
table.dataTable thead .sorting_desc_disabled:before {
color: #eee;
}
table.dataTable thead > tr > th {
vertical-align: top;
white-space: nowrap;
}
table.dataTable th:active {
outline: none;
}
/* Condensed */
table.dataTable.table-condensed thead > tr > th {
padding-right: 20px;
}
table.dataTable.table-condensed thead .sorting:before,
table.dataTable.table-condensed thead .sorting_asc:before,
table.dataTable.table-condensed thead .sorting_desc:before {
top: 6px;
right: 6px;
}
/* Scrolling */
div.dataTables_scrollHead table {
margin-bottom: 0 !important;
border-bottom-left-radius: 0;
border-bottom-right-radius: 0;
}
div.dataTables_scrollHead table thead tr:last-child th:first-child,
div.dataTables_scrollHead table thead tr:last-child td:first-child {
border-bottom-left-radius: 0 !important;
border-bottom-right-radius: 0 !important;
}
div.dataTables_scrollBody table {
border-top: none;
margin-top: 0 !important;
margin-bottom: 0 !important;
}
div.dataTables_scrollBody tbody tr:first-child th,
div.dataTables_scrollBody tbody tr:first-child td {
border-top: none;
}
div.dataTables_scrollFoot table {
margin-top: 0 !important;
border-top: none;
}
/* Frustratingly the border-collapse:collapse used by Bootstrap makes the column
width calculations when using scrolling impossible to align columns. We have
to use separate
*/
table.table-bordered.dataTable {
border-collapse: separate !important;
}
table.table-bordered thead th,
table.table-bordered thead td {
border-left-width: 0;
border-top-width: 0;
}
table.table-bordered tbody th,
table.table-bordered tbody td {
border-left-width: 0;
border-bottom-width: 0;
}
table.table-bordered tfoot th,
table.table-bordered tfoot td {
border-left-width: 0;
border-bottom-width: 0;
}
table.table-bordered th:last-child,
table.table-bordered td:last-child {
border-right-width: 0;
}
div.dataTables_scrollHead table.table-bordered {
border-bottom-width: 0;
}
/*
* TableTools styles
*/
.table.dataTable tbody tr.active td,
.table.dataTable tbody tr.active th {
background-color: #08C;
color: white;
}
.table.dataTable tbody tr.active:hover td,
.table.dataTable tbody tr.active:hover th {
background-color: #0075b0 !important;
}
.table.dataTable tbody tr.active th > a,
.table.dataTable tbody tr.active td > a {
color: white;
}
.table-striped.dataTable tbody tr.active:nth-child(odd) td,
.table-striped.dataTable tbody tr.active:nth-child(odd) th {
background-color: #017ebc;
}

View File

@@ -1,13 +0,0 @@
@import '~daterangepicker/daterangepicker.css';
.drp-calendar {
.calendar-table {
td.today:not(.active) {
background-color: lighten(#357ebd, 40);
color: #357ebd;
}
select.yearselect{
width: unset;
}
}
}

View File

@@ -0,0 +1,62 @@
/*
* This file is part of the Kimai time-tracking app.
*
* For the full copyright and license information, please view the LICENSE
* file that was distributed with this source code.
*/
body {
font-family: sans-serif;
font-size: 10pt;
margin: 0;
padding: 0;
}
p {
margin: 0;
}
table.items {
border: 0.1mm solid #000000;
width: 100%;
font-size: 9pt;
border-collapse: collapse;
}
td, th {
padding: 7px;
}
td {
vertical-align: top;
}
.items td {
border-left: 0.1mm solid #000000;
border-right: 0.1mm solid #000000;
}
.items tr.even {
background-color: #f5f5f5;
}
.items tr.summary {
background-color: #efefef;
}
.items tr.summary td {
font-weight: bold;
border-top: 0.1mm solid #000000;
border-bottom: 0.1mm solid #000000;
}
table thead th {
background-color: #ececec;
border: 0.1mm solid #000000;
font-weight: bold;
font-size: 10pt;
text-align: left;
}
.items td.totals {
font-weight: bold;
border: 0.1mm solid #000000;
}
.items .center,
.items td.duration,
.items td.cost {
text-align: center;
}
.text-nowrap {
white-space: nowrap;
}

View File

@@ -10,3 +10,10 @@ $fa-font-path: "~@fortawesome/fontawesome-free/webfonts/";
@import '~@fortawesome/fontawesome-free/scss/regular';
@import '~@fortawesome/fontawesome-free/scss/solid';
@import '~@fortawesome/fontawesome-free/scss/brands';
/* all icon-buttons with fontawesome icons */
.btn-icon i.icon {
font-size: 16px;
color: $text-muted;
padding-top: 2px;
}

View File

@@ -1,11 +0,0 @@
/*
* This file is part of the Kimai time-tracking app.
*
* For the full copyright and license information, please view the LICENSE
* file that was distributed with this source code.
*/
footer.main-footer {
padding: 5px;
font-size: 80%;
}

View File

@@ -1,67 +1,38 @@
/* Currently only used in batch-update form for timesheets, to highlight sections of combined fields */
form .box-body fieldset {
border-radius: $box-border-radius;
padding: 10px;
&:hover {
background-color: $highlight-bg;
/* bootstrap thead.sticky-top has z-index 1020 and the reporting form dropdowns hide behind that */
.checkbox-menu.show {
z-index: 1021;
}
/* make sure that at least xx:yy fits into the widget */
.duration-widget {
.input-group {
min-width: 110px;
}
input.duration-input {
min-width: 55px;
}
}
/* To be used with .form-horizontal - to reduce the space between rows, eg. used in the search modals */
form.form-narrow {
.form-group {
margin: 0 0 5px 0;
#report-form {
div.btn-list {
width: 100%;
div.selectpicker {
min-width: 200px;
max-width: 400px;
}
li.dropdown-item {
.form-check {
margin-bottom: 0;
}
}
}
}
/* Mark as exported checkbox in export and invoice create screen */
.form-horizontal {
.checkbox {
min-height: 20px;
}
}
/* bootstrap3 hack because the filter look plain ugly without it (see report: project month) */
.checkbox-menu li label {
display: block;
padding: 5px 15px 5px 10px !important;
clear: both;
font-weight: normal;
line-height: 1.42857143;
color: #333;
white-space: nowrap;
margin:0;
transition: background-color .4s ease;
}
.checkbox-menu li div.checkbox {
display: block;
width: 100%;
}
.checkbox-menu li div.radio {
display: block;
width: 100%;
}
.checkbox-menu li input {
margin: 0 5px !important;
position: relative;
}
.checkbox-menu li.active label {
background-color: #cbcbff;
font-weight:bold;
}
.checkbox-menu li label:hover,
.checkbox-menu li label:focus {
background-color: #f5f5f5;
}
.checkbox-menu li.active label:hover,
.checkbox-menu li.active label:focus {
background-color: #b8b8ff;
}
.duration-input {
min-width:50px;
padding: 6px;
.color-choice-item {
width: 20px;
height: 20px;
display: inline-block;
margin-right: 10px;
border-radius: var(--tblr-border-radius);
}

36
assets/sass/help.scss Normal file
View File

@@ -0,0 +1,36 @@
/*
* This file is part of the Kimai time-tracking app.
*
* For the full copyright and license information, please view the LICENSE
* file that was distributed with this source code.
*/
.float-help {
position: fixed;
width: 50px;
height: 50px;
border-radius: 50px;
bottom: 20px;
right: 20px;
background-color: var(--tblr-body-color);
text-align: center;
z-index: 1021;
/* box-shadow: 2px 2px 3px var(--tblr-body-color); */
i {
margin-top: 11px;
color: var(--tblr-body-bg);
font-size: 30px;
}
}
@include media-breakpoint-down(md) {
.float-help {
width: 36px;
height: 36px;
border-radius: 36px;
i {
margin-top: 8px;
font-size: 20px;
}
}
}

View File

@@ -8,7 +8,7 @@
body {
font-family: sans-serif;
font-size: 10pt;
margin: 0;
margin: 4px;
padding: 0;
}
table, tr, td, th, p, h1, h2, h3, h4, h5 {
@@ -44,14 +44,10 @@ p {
white-space: nowrap;
}
.date {
color: #666;
font-size: 80%;
text-align: right;
padding-top: 6px;
}
.wrapper {
margin: 4px;
}
table {
width: 100%;
border-spacing: 0;

View File

@@ -5,19 +5,21 @@
* file that was distributed with this source code.
*/
@import "~bootstrap-sass/assets/stylesheets/bootstrap/variables";
@import "~bootstrap-sass/assets/stylesheets/bootstrap/mixins";
@import "~bootstrap-sass/assets/stylesheets/bootstrap/normalize";
@import "~bootstrap-sass/assets/stylesheets/bootstrap/print";
@import "~bootstrap-sass/assets/stylesheets/bootstrap/scaffolding";
@import "~bootstrap-sass/assets/stylesheets/bootstrap/type";
@import "~bootstrap-sass/assets/stylesheets/bootstrap/grid";
@import "~bootstrap-sass/assets/stylesheets/bootstrap/tables";
@import "~bootstrap-sass/assets/stylesheets/bootstrap/list-group";
@import "~bootstrap-sass/assets/stylesheets/bootstrap/panels";
@import "~bootstrap-sass/assets/stylesheets/bootstrap/wells";
@import "~bootstrap-sass/assets/stylesheets/bootstrap/utilities";
@import "~bootstrap-sass/assets/stylesheets/bootstrap/responsive-utilities";
@import "~bootstrap/scss/functions";
@import "~bootstrap/scss/variables";
@import "~bootstrap/scss/maps";
@import "~bootstrap/scss/mixins";
//@import "~bootstrap/scss/normalize";
//@import "~bootstrap/scss/print";
//@import "~bootstrap/scss/scaffolding";
@import "~bootstrap/scss/reboot";
@import "~bootstrap/scss/type";
@import "~bootstrap/scss/grid";
@import "~bootstrap/scss/tables";
@import "~bootstrap/scss/list-group";
@import "~bootstrap/scss/card";
@import "~bootstrap/scss/utilities";
//@import "~bootstrap/scss/responsive-utilities";
body {
font-family: $font-family-sans-serif;

View File

@@ -1,8 +1,38 @@
@media (max-width: $screen-sm-max) {
.main-header .logo {
display: none;
.inline-search {
max-width: 200px;
/* the entire inline-search should actually use .input-group-flat, but that causes some weird css problems inside the dropdown menu */
#searchTerm {
border-right: 0;
}
.fixed .content-wrapper, .fixed .right-side, .control-sidebar, .main-sidebar {
padding-top: 50px;
}
@media (min-width: 360px) {
.inline-search {
max-width: 235px;
}
}
}
@include media-breakpoint-up(md) {
.inline-search {
max-width: 325px;
}
.search-dropdown {
width: 500px;
}
}
/* Format the company title in the left navigation, as Tabler is optimized for an image only */
h1.navbar-brand a {
span {
display: inline-block;
padding-top: 0.5rem;
}
&:hover {
text-decoration: none;
}
}
.page-actions .dropdown-menu,
#export-buttons .dropdown-menu,
.inline-search .dropdown-menu {
/* bootstrap thead.sticky-top has z-index 1020 and the reporting form dropdowns hide behind that */
z-index: 1021;
}

View File

@@ -0,0 +1,25 @@
/*
* This file is part of the Kimai time-tracking app.
*
* For the full copyright and license information, please view the LICENSE
* file that was distributed with this source code.
*/
.overlay {
position: fixed;
top: 0;
left: 0;
width: 100%;
height: 100%;
z-index: 50;
background: rgba(255, 255, 255, 0.7);
> .fas {
position: absolute;
top: 50vh;
left: 50vw;
margin-left: -15px;
margin-top: -15px;
color: #000;
font-size: 30px;
}
}

View File

@@ -1,9 +1,3 @@
.modal-header,
.modal-footer {
padding-top: 10px;
padding-bottom: 10px;
}
.modal-content {
border-radius: 3px;
box-shadow: 0 10px 80px rgba(0, 0, 0, 0.6);
}

View File

@@ -1,153 +0,0 @@
/*
* This file is part of the Kimai time-tracking app.
*
* For the full copyright and license information, please view the LICENSE
* file that was distributed with this source code.
*/
.navbar-custom-menu {
.navbar-nav {
li>.ddt-small {
padding-top: 10px;
padding-bottom: 10px;
}
}
}
.navbar-nav {
.avatar {
max-height: 30px;
max-width: 30px;
height: 30px;
width: 30px;
margin-top: 0;
.initials {
top: 5px;
left: 0;
}
}
li>.ddt-small {
padding-top: 10px;
padding-bottom: 10px;
}
li.messages-menu ul.menu li {
a:hover .pull-left i {
color: #dd4b39;
}
a .pull-left i {
color: #444;
}
}
.messages-menu>.dropdown-menu>li .menu>li>a>p {
overflow: hidden;
text-overflow: ellipsis;
}
.messages-menu>.dropdown-menu>li .menu>li>a>h4>span {
margin-right: 55px;
}
.dropdown-menu {
box-shadow: 0 8px 17px 0 rgba(0, 0, 0, 0.2), 0 6px 20px 0 rgba(0, 0, 0, 0.19);
max-width: 90vw;
width: unset !important;
}
.user-menu {
ul {
li {
a {
color: #444;
&:hover {
background-color: #f4f4f4;
}
i {
padding-right: 10px;
}
}
hr {
margin: 0;
}
}
}
}
}
@keyframes ticktac-blink {
0% { opacity: 1; }
5% { opacity: 0.95; }
10% { opacity: 0.9; }
15% { opacity: 0.85; }
20% { opacity: 0.8; }
25% { opacity: 0.75; }
30% { opacity: 0.7; }
35% { opacity: 0.65; }
40% { opacity: 0.6; }
45% { opacity: 0.65; }
50% { opacity: 0.7; }
55% { opacity: 0.75; }
60% { opacity: 0.8; }
65% { opacity: 0.85; }
70% { opacity: 0.9; }
75% { opacity: 0.95; }
100% { opacity: 1; }
}
.ticktac-single {
display: block;
position: relative;
padding-left: 15px;
padding-right: 15px;
i {
animation: ticktac-blink 2s step-end infinite;
}
span {
font-size: 1.8em;
line-height: 1em;
padding-left: 5px;
padding-right: 0;
}
&:hover {
background: rgba(0,0,0,.3);
}
}
body.fixed {
.navbar-nav {
.user-menu {
margin-right: 10px;
}
}
}
@media (max-width: $screen-sm-max) {
.navbar-custom-menu>.navbar-nav>li>.dropdown-menu {
right: 0;
}
body.fixed {
.navbar-nav {
.user-menu {
margin-right: 0;
}
}
}
.navbar-nav .user-menu.open .dropdown-menu > li > a {
padding: 5px 25px 5px 25px
}
}
@media (max-width: $screen-sm-max) {
.ticktac-single {
padding-left: 5px;
padding-right: 5px;
}
.navbar-custom-menu .navbar-nav li>.ddt-small {
padding-left: 5px;
padding-right: 5px;
}
}
@media (max-width: $screen-md-max) {
.ticktac-single {
padding-left: 10px;
padding-right: 10px;
}
.navbar-custom-menu .navbar-nav li>.ddt-small {
padding-left: 10px;
padding-right: 10px;
}
}

39
assets/sass/pages.scss Normal file
View File

@@ -0,0 +1,39 @@
/*
* This file is part of the Kimai time-tracking app.
*
* For the full copyright and license information, please view the LICENSE
* file that was distributed with this source code.
*/
/*
----------- This file contains rules that only page to certain pages -----------
*/
/* weekly working times AKA quick-entries form */
section.quick-entry-page {
#quick_entry_form {
display: none;
}
/* shrinks the dropdown elements for project and activity to fit into the table, instead of adjusting to the longest option element */
.ts-wrapper {
display: table;
table-layout: fixed;
}
/* make the duration field and dropdown smaller */
#quick_entry_box {
.duration-widget {
.input-group {
min-width: 85px;
}
.btn-duration-preset {
padding: 7px 8px 7px 5px;
}
input {
padding: 7px 3px 7px 7px;
}
}
}
}

View File

@@ -12,7 +12,7 @@
.col-print-12{
width:100%;
}
.sidebar-mini.sidebar-collapse .content-wrapper, .sidebar-mini.sidebar-collapse .main-footer, .sidebar-mini.sidebar-collapse .right-side {
.content-wrapper {
margin: 0!important;
}
section.content {

View File

@@ -13,7 +13,6 @@
.progress-number {
display: inline-block;
width: 98%;
text-align: right;
float: none;
}
}

View File

@@ -1,7 +0,0 @@
.form-reporting .box-header .form-group {
margin-right: 10px;
label {
font-size: $font-size-base;
}
}

View File

@@ -5,5 +5,12 @@
* file that was distributed with this source code.
*/
$icon-font-path: "~bootstrap-sass/assets/fonts/bootstrap/";
@import '~bootstrap-sass/assets/stylesheets/bootstrap';
html[dir=rtl] {
.fa-chevron-left:before {
content: "\f054";
}
.fa-chevron-right:before {
content: "\f053";
}
}

View File

@@ -1,35 +0,0 @@
body.login-page {
.alert {
margin-bottom: 0;
}
.login-box-body {
text-align: center;
padding: 30px 35px;
box-shadow: 0 10px 30px 0 rgba(172, 168, 168, 0.43);
.btn {
padding: 7px;
font-size: 115%;
}
}
.login-head {
margin-top: 0;
}
.login-actions a {
display: block;
}
.form-group {
input[type=password], input[type=text] {
padding: 20px 15px;
}
}
span.glyphicon {
display: none;
}
}
@media (max-width: $screen-sm-max) {
body.login-page {
.login-box-body {
padding: 20px 27px;
}
}
}

View File

@@ -1,29 +1,26 @@
@import '~select2/dist/css/select2.min.css';
@import '~select2-bootstrap-theme/dist/select2-bootstrap.min.css';
@import '~tom-select/dist/scss/tom-select.bootstrap5';
/* some labels were placed incorrect due to a margin-top: -4px */
.select2-container .select2-selection--single .select2-selection__rendered {
margin-top: 0;
}
/* make sure the border looks like all other form elements */
.select2-container--bootstrap .select2-selection {
border-radius: 0;
}
/* placeholder in multi-selects were cut off */
.select2-search.select2-search--inline .select2-search__field {
width: 100% !important;
}
/* make sure that <optgroup> elements are padded, to allow visual difference to global activities */
.select2-container--bootstrap .select2-results__options.select2-results__options--nested li.select2-results__option {
padding-left: 30px;
}
/* empty <option> were too small to be noticed as clickable element */
.select2-container--bootstrap .select2-results__option {
min-height: 30px;
/* bootstrap thead.sticky-top has z-index 1020 and tomselect dropdowns often hide behind that */
.ts-dropdown {
z-index: 1021;
}
/* Fixes the size on quick-entry form */
.select2-container--bootstrap {
display: table;
table-layout: fixed;
.ts-control {
> input {
min-width: unset;
}
.item {
white-space: nowrap!important;
}
}
.ts-dropdown {
.optgroup-header {
background-color: #eee;
color: #000;
font-weight: 600;
}
[data-selectable].option {
padding-left: 20px;
}
}

View File

@@ -1,19 +0,0 @@
/*
* This file is part of the Kimai time-tracking app.
*
* For the full copyright and license information, please view the LICENSE
* file that was distributed with this source code.
*/
@media (min-width: $screen-sm-min) {
.sidebar-mini.sidebar-collapse .sidebar-menu li.header {
border-top-width: 1px;
border-top-style: solid;
display: block !important;
margin-top: 16px;
opacity: 0.4;
span {
display: none !important;
}
}
}

View File

@@ -1,69 +0,0 @@
$skins:
"blue" $yellow #fff $yellow $red,
"black" $yellow #000 $green $red,
"green" $yellow #fff $yellow $red,
"purple" $yellow #fff $yellow $red,
"red" $yellow #fff $yellow $yellow,
"yellow" $blue #fff $green $red
;
@each $skinColor, $navHighlight, $tickTacColor, $startButton, $stopButton in $skins {
@each $prefix in (".skin-#{$skinColor}", ".skin-#{$skinColor}-light") {
@media (max-width: $screen-sm-max) {
#{$prefix} {
.main-header .navbar .dropdown-menu li.divider {
background-color: #ccc;
}
.main-header .navbar .dropdown-menu li a {
color: #444;
}
.main-header .navbar .dropdown-menu li a:hover {
background: #fff;
}
}
}
#{$prefix} {
.navbar-nav {
.user-menu {
ul {
li {
a {
&:hover {
i {
color: $navHighlight;
}
}
}
}
}
}
.notifications-menu > .dropdown-menu > li .menu > li > a:hover i {
color: $navHighlight;
}
}
.ticktac-single {
i {
color: $tickTacColor;
}
span {
color: $tickTacColor;
}
&:hover {
.ticktac-stop {
i {
color: $stopButton;
}
}
.ticktac-start {
i {
color: $startButton;
}
}
}
}
}
}
}

View File

@@ -0,0 +1,6 @@
@import '~@tabler/core/src/scss/variables';
/* fix for vertical labels in date-time pickers, if they are used in half-column forms, e.g. "create tasks" or "create expenses" */
fieldset legend.col-form-label {
padding-top: 0;
}

View File

@@ -4,39 +4,82 @@
* For the full copyright and license information, please view the LICENSE
* file that was distributed with this source code.
*/
@import "variables";
table.dataTable.table > tbody > tr > td {
vertical-align: middle;
.img-circle {
width: 30px;
height: 30px;
margin-right: 0;
&.teamlead {
box-shadow: 0 0 5px 3px $gray-lte;
}
table.dataTable {
clear: both;
margin-bottom: 0 !important;
max-width: none !important;
thead .sorting,
thead .sorting_asc,
thead .sorting_desc {
cursor: pointer;
position: relative;
}
thead .sorting_asc,
thead .sorting_desc {
font-weight: bold;
}
thead .sorting:after,
thead .sorting_asc:after,
thead .sorting_desc:after {
padding-left: 5px;
font-family: 'Font Awesome 5 Free';
opacity: 0.5;
font-size: 12px;
}
thead .sorting:after {
opacity: 0.2;
content: "\f0dc"; /* sort */
}
thead .sorting_asc:after {
content: "\f077";
}
thead .sorting_desc:after {
content: "\f078";
}
thead > tr > th {
vertical-align: top;
white-space: nowrap;
}
th:active {
outline: none;
}
}
span.label-color,
span.label-meta,
span.label-tag,
span.label-user,
span.label-activity,
span.label-project,
span.label-customer {
display: inline-block;
.name {
white-space: nowrap;
.name-inner {
white-space: normal;
}
table.table-bordered {
thead th,
thead td {
border-left-width: 0;
border-top-width: 0;
}
.dot {
font-size: 9px;
margin-right: 3px;
color: $gray-lte;
tbody th,
tbody td {
border-left-width: 0;
border-bottom-width: 0;
}
tfoot th,
tfoot td {
border-left-width: 0;
border-bottom-width: 0;
}
th:last-child,
td:last-child {
border-right-width: 0;
}
}
@include media-breakpoint-up(xl) {
table.dataTable.table > tbody > tr > td {
vertical-align: middle;
}
}
@@ -46,17 +89,17 @@ table.dataTable {
width: 40px;
}
tr {
/* summary row - provided in the users own timesheet table */
/* summary row - used in many tables to show rows with summarized values like durations or money */
&.summary td {
font-weight: bold;
border-bottom: 1px solid #ccc;
background-color: #eaeaea;
border: 0;
background-color: var(--tblr-table-striped-bg);
}
th.multiCheckbox {
width: 15px;
}
&.overlapping {
border-top: 2px solid rgba(255, 0, 0, 0.1);
border-top: 2px solid rgba(214,57,57,.1);
}
&.exported {
opacity: 0.7;
@@ -91,15 +134,6 @@ table.dataTable {
opacity: 0.8;
}
}
tfoot {
tr {
/* overwritten if used in tfoot, to switch the border from below to top */
&.summary td {
border-top: 1px solid #ccc;
border-bottom: 0;
}
}
}
th.weekend,
td.weekend {
background-color: #f9f9f9;

View File

@@ -1,3 +0,0 @@
.tab-content {
margin-top: 20px;
}

View File

@@ -0,0 +1,56 @@
@include dark-mode {
.form-check-input {
border-color: $input-border-color;
}
/* selectpicker.scss / Tom Select */
.ts-wrapper.form-select .ts-control,
.ts-wrapper.form-select.single.input-active .ts-control {
color: $dark-mode-text;
}
.ts-dropdown {
background-color: $dark-mode-lighten;
color: $dark-mode-text;
}
.ts-control {
> input {
min-width: unset;
color: $dark-mode-text;
}
.item {
background-color: $dark;
color: $dark-mode-text;
}
}
.optgroup-header {
background-color: $dropdown-dark-bg;
color: $dark-mode-text;
}
table.dataTable {
th.weekend, td.weekend {
background-color: $dark-mode-weekend;
color: $dark-mode-text;
}
/* must be defined after weekend, to overwrite it */
th.today, td.today {
background-color: $dark-mode-today;
color: $dark-mode-text;
}
tr {
&.summary td {
background-color: $dark-mode-darken;
}
}
}
.overlay {
background: rgba(0, 0, 0, 0.5);
> .fas {
color: $dark-mode-text;
}
}
}

43
assets/sass/ticktac.scss Normal file
View File

@@ -0,0 +1,43 @@
/*
* This file is part of the Kimai time-tracking app.
*
* For the full copyright and license information, please view the LICENSE
* file that was distributed with this source code.
*/
@keyframes ticktac-blink {
0% { opacity: 1; }
5% { opacity: 0.95; }
10% { opacity: 0.9; }
15% { opacity: 0.85; }
20% { opacity: 0.8; }
25% { opacity: 0.75; }
30% { opacity: 0.7; }
35% { opacity: 0.65; }
40% { opacity: 0.6; }
45% { opacity: 0.65; }
50% { opacity: 0.7; }
55% { opacity: 0.75; }
60% { opacity: 0.8; }
65% { opacity: 0.85; }
70% { opacity: 0.9; }
75% { opacity: 0.95; }
100% { opacity: 1; }
}
.ticktac-start,
.ticktac-stop {
i {
animation: ticktac-blink 2s step-end infinite;
}
}
/* Full size with bright colors => navbar turns dark in small screens: button and color would still be white */
@include media-breakpoint-down(lg) {
aside.navbar .btn-outline-white,
header.navbar .btn-outline-white {
background-color: var(--tblr-body-color);
border-color: hsla(0,0%,100%,.2);
color: hsla(0,0%,100%,.7);
}
}

View File

@@ -1,26 +0,0 @@
/*
* This file is part of the Kimai time-tracking app.
*
* For the full copyright and license information, please view the LICENSE
* file that was distributed with this source code.
*/
@media (min-width: $screen-sm-min) {
.toolbar {
// @deprecated since 1.2 - using the navbar-form is deprecated and will be removed with 2.0
form.navbar-form {
font-size: $font-size-base;
.form-control {
display: inline-block;
width: 100%;
vertical-align: middle;
}
.control-label {
width: 100%;
}
.input-group {
width: 100%;
}
}
}
}

View File

@@ -5,129 +5,26 @@
* file that was distributed with this source code.
*/
@import "~bootstrap-sass/assets/stylesheets/bootstrap/variables";
@import "~bootstrap/scss/functions";
@import "~bootstrap/scss/variables";
@import "~bootstrap/scss/mixins";
@import '~@tabler/core/src/scss/variables';
@import '~@tabler/core/src/scss/mixins';
/* For highlighting rows, fieldsets and so on */
$highlight-bg: #f5f5f5;
$highlight-today: #fcf8e3;
/**
* BELOW: A simple one to one clone of /node_modules/admin-lte/build/less/variables.less
*/
// COLORS
// --------------------------------------------------------
// Primary
//$light-blue: #3c8dbc;
// Danger
$red: #dd4b39;
// Success
$green: #00a65a;
// Info
//$aqua: #00c0ef;
// Warning
$yellow: #f0ad4e;
$blue: #0073b7;
//$navy: #001F3F;
//$teal: #39CCCC;
//$olive: #3D9970;
//$lime: #01FF70;
//$orange: #FF851B;
//$fuchsia: #F012BE;
//$purple: #605ca8;
//$maroon: #D81B60;
//$black: #111;
$gray-lte: #d2d6de;
$kimai-default: $gray-lte;
// LAYOUT
// --------------------------------------------------------
//
// Side bar and logo width
//$sidebar-width: 230px;
//
// Link colors (Aka: <a> tags)
//$link-color: $light-blue;
//$link-hover-color: lighten($link-color, 15%);
//
// Body background (Affects main content background only)
//$body-bg: #ecf0f5; // DEPRECATED
//$content-bg: #ecf0f5;
//
// SIDEBAR SKINS
// --------------------------------------------------------
//
// Dark sidebar
//$sidebar-dark-bg: #222d32;
//$sidebar-dark-hover-bg: darken($sidebar-dark-bg, 2%);
//$sidebar-dark-color: lighten($sidebar-dark-bg, 60%);
//$sidebar-dark-hover-color: #fff;
//$sidebar-dark-submenu-bg: lighten($sidebar-dark-bg, 5%);
//$sidebar-dark-submenu-color: lighten($sidebar-dark-submenu-bg, 40%);
//$sidebar-dark-submenu-hover-color: #fff;
//
// Light sidebar
//$sidebar-ligh//t-bg: #f9fafc;
//$sidebar-light-hover-bg: lighten(#f0f0f1, 1.5%);
//$sidebar-light-color: #444;
//$sidebar-light-hover-color: #000;
//$sidebar-light-submenu-bg: $sidebar-light-hover-bg;
//$sidebar-light-submenu-color: #777;
//$sidebar-light-submenu-hover-color: #000;
//
// sidebar-expanded-on-hover
//$sidebar-expanded-shadow: 3px 0 8px rgba(0,0,0,.125);
//
// CONTROL SIDEBAR
// --------------------------------------------------------
//$control-sidebar-width: $sidebar-width;
//
// BOXES
// --------------------------------------------------------
//$box-border-color: #f4f4f4;
$box-border-radius: 3px;
//$box-footer-bg: #fff;
//$box-boxshadow: 0 1px 1px rgba(0, 0, 0, .1);
//$box-padding: 10px;
//
// Box variants
//$box-default-border-top-color: #d2d6de;
//
// BUTTONS
// --------------------------------------------------------
//$btn-boxshadow: none;
//
// PROGRESS BARS
// --------------------------------------------------------
//$progress-bar-border-radius: 1px;
//$progress-bar-sm-border-radius: 1px;
//$progress-bar-xs-border-radius: 1px;
//
// FORMS
// --------------------------------------------------------
//$input-radius: 0;
//
// BUTTONS
// --------------------------------------------------------
//
// Border radius for non flat buttons
//$btn-border-radius: 3px;
//
// DIRECT CHAT
// --------------------------------------------------------
//$direct-chat-height: 250px;
//$direct-chat-default-msg-bg: $gray-lte;
//$direct-chat-default-font-color: #444;
//$direct-chat-default-msg-border-color: $gray-lte;
//
// CHAT WIDGET
// --------------------------------------------------------
//$attachment-border-radius: 3px;
//
// TRANSITIONS SETTINGS
// --------------------------------------------------------
//
// Transition global options
//$transition-speed: .3s;
//$transition-fn: ease-in-out;
//
$dark-mode-today: var(--tblr-blue);
$dark-mode-weekend: lighten($dark, 5%) !default;