frontend update to tabler beta 19 (#4029)

This commit is contained in:
Kevin Papst
2023-05-15 19:10:00 +02:00
committed by GitHub
parent 43bd7bf1ab
commit 04422f3530
63 changed files with 235 additions and 1018 deletions

View File

@@ -1,5 +1,5 @@
require('./sass/app.scss'); require('./sass/_app.scss');
// ------ Kimai itself ------ // ------ Kimai itself ------
require('./js/KimaiWebLoader.js'); require('./js/KimaiWebLoader.js');

View File

@@ -1,2 +1,2 @@
require('./sass/export-pdf.scss'); require('./sass/_export-pdf.scss');

View File

@@ -1,2 +1,2 @@
require('./sass/invoice-pdf.scss'); require('./sass/_invoice-pdf.scss');

View File

@@ -1,2 +1,2 @@
require('./sass/invoice.scss'); require('./sass/_invoice.scss');

View File

@@ -194,7 +194,7 @@ export default class KimaiAlert extends KimaiPlugin {
<div class="toast-body"> <div class="toast-body">
` + icon + ' ' + message + ` ` + icon + ' ' + message + `
</div> </div>
<button type="button" class="btn-close btn-close-white me-2 m-auto" data-bs-dismiss="toast" aria-label="` + translation.get('close') + `"></button> <button type="button" class="btn-close me-2 m-auto" data-bs-dismiss="toast" aria-label="` + translation.get('close') + `"></button>
</div> </div>
</div>`; </div>`;

37
assets/sass/_app.scss Normal file
View File

@@ -0,0 +1,37 @@
/*
* 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.
*/
@import "bootstrap/scss/functions";
@import "@tabler/core/src/scss/variables";
@import "@tabler/core/src/scss/variables-dark";
@import "@tabler/core/src/scss/mixins";
@import "bootstrap/scss/variables";
@import "bootstrap/scss/variables-dark";
@import "bootstrap/scss/maps";
@import "bootstrap/scss/mixins";
@import "bootstrap/scss/utilities";
@import "layout";
@import "error-page";
@import "print";
@import "content";
@import "loading-spinner";
@import "tables";
@import "calendar";
@import "ticktac";
@import "selectpicker";
@import "forms";
@import "modal";
@import "progressbar";
@import "avatar";
@import "theme-dark";
@import "pages";
@import "tabler-fixes";
@import "help";
@import "rtl";

View File

@@ -7,15 +7,17 @@
@import "bootstrap/scss/functions"; @import "bootstrap/scss/functions";
@import "bootstrap/scss/variables"; @import "bootstrap/scss/variables";
@import "bootstrap/scss/variables-dark";
@import "bootstrap/scss/maps"; @import "bootstrap/scss/maps";
@import "bootstrap/scss/mixins"; @import "bootstrap/scss/mixins";
@import "bootstrap/scss/utilities";
@import "bootstrap/scss/reboot"; @import "bootstrap/scss/reboot";
@import "bootstrap/scss/type"; @import "bootstrap/scss/type";
@import "bootstrap/scss/grid"; @import "bootstrap/scss/grid";
@import "bootstrap/scss/tables"; @import "bootstrap/scss/tables";
@import "bootstrap/scss/list-group"; @import "bootstrap/scss/list-group";
@import "bootstrap/scss/card"; @import "bootstrap/scss/card";
@import "bootstrap/scss/utilities";
body { body {
font-family: $font-family-sans-serif; font-family: $font-family-sans-serif;

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.
*/
@import 'variables';
@import 'layout';
@import 'error-page';
@import 'print';
@import 'content';
@import 'loading-spinner';
@import 'tables';
@import 'calendar';
@import 'ticktac';
@import 'selectpicker';
@import 'forms';
@import 'modal';
@import 'progressbar';
@import 'avatar';
@import 'theme-dark';
@import 'pages';
@import 'tabler-fixes';
@import 'help';
@import 'rtl';

View File

@@ -3,18 +3,18 @@ $avatar-base-size: 30;
.initials { .initials {
font-weight: bold; font-weight: bold;
font-size: ceil($avatar-base-size / 2 - 2)+px; font-size: ceil(calc($avatar-base-size / 2 - 2))+px;
} }
$avatarSizes: "xs" .75, "sm" 1.25, "md" 1.5, "lg" 2; $avatarSizes: "xs" .75, "sm" 1.25, "md" 1.5, "lg" 2;
@each $avatarSizeName, $avatarBaseSize in $avatarSizes { @each $avatarSizeName, $avatarBaseSize in $avatarSizes {
.avatar-#{$avatarSizeName} { .avatar-#{$avatarSizeName} {
width: ceil($avatar-base-size * $avatarBaseSize)+px; width: ceil(calc($avatar-base-size * $avatarBaseSize))+px;
height: ceil($avatar-base-size * $avatarBaseSize)+px; height: ceil(calc($avatar-base-size * $avatarBaseSize))+px;
.initials { .initials {
font-size: ceil($avatar-base-size * $avatarBaseSize / 2 - 2)+px; font-size: ceil(calc($avatar-base-size * $avatarBaseSize / 2 - 2))+px;
} }
} }
} }
@@ -23,10 +23,10 @@ $avatarSizes: "xs" .75, "sm" 1.25, "md" 1.5, "lg" 2;
border-radius: 50%; border-radius: 50%;
border: 3px solid #fff; border: 3px solid #fff;
.avatar { .avatar {
width: ceil($avatar-base-size * 2.75)+px; width: ceil(calc($avatar-base-size * 2.75))+px;
height: ceil($avatar-base-size * 2.75)+px; height: ceil(calc($avatar-base-size * 2.75))+px;
.initials { .initials {
font-size: ceil($avatar-base-size * 2.75 / 2 - 2)+px; font-size: ceil(calc($avatar-base-size * 2.75 / 2 - 2))+px;
} }
} }
} }
@@ -39,3 +39,8 @@ table.dataTable.table > tbody > tr > td {
} }
} }
} }
/* decreases the margin between avatars, see https://github.com/tabler/tabler/issues/1567 */
.avatar-list-stacked .avatar {
margin-right: calc(var(--tblr-avatar-size)*-.1)!important;
}

View File

@@ -5,6 +5,11 @@
* file that was distributed with this source code. * file that was distributed with this source code.
*/ */
/* used in security screens and other full-size pages */
.page-center {
justify-content: center;
}
/* make sure that elements can be hidden without taking space (eg. hidden modals like the search or column visibility) */ /* make sure that elements can be hidden without taking space (eg. hidden modals like the search or column visibility) */
.hidden-no-space { .hidden-no-space {
margin: 0; margin: 0;
@@ -33,11 +38,6 @@ td {
} }
} }
.label-gray {
background-color: $gray-lte;
color: #666;
}
.open-edit { .open-edit {
cursor: pointer; cursor: pointer;
} }

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.
*/
$fa-font-path: "~@fortawesome/fontawesome-free/webfonts/";
@import "@fortawesome/fontawesome-free/scss/fontawesome";
@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

@@ -38,3 +38,8 @@ h1.navbar-brand a {
/* bootstrap thead.sticky-top has z-index 1020 and the reporting form dropdowns hide behind that */ /* bootstrap thead.sticky-top has z-index 1020 and the reporting form dropdowns hide behind that */
z-index: 1021; z-index: 1021;
} }
/* reduce the default font size for the brand header */
.navbar {
--tblr-navbar-brand-font-size: 1rem;
}

View File

@@ -11,7 +11,7 @@
left: 0; left: 0;
width: 100%; width: 100%;
height: 100%; height: 100%;
z-index: 50; z-index: 1021;
background: rgba(255, 255, 255, 0.7); background: rgba(255, 255, 255, 0.7);
> .fas { > .fas {
position: absolute; position: absolute;

View File

@@ -1,23 +1,22 @@
@import "tom-select/dist/scss/tom-select.bootstrap5";
/* bootstrap thead.sticky-top has z-index 1020 and tomselect dropdowns often hide behind that */ /* bootstrap thead.sticky-top has z-index 1020 and tomselect dropdowns often hide behind that */
.ts-dropdown { .ts-dropdown {
z-index: 1021; z-index: 1021;
} }
/* can be removed if no error is reported. it is unknown why this was added */
/*
.ts-control { .ts-control {
> input { > input {
min-width: unset; min-width: unset;
} }
} }
*/
.ts-dropdown { .ts-dropdown {
.optgroup-header { .optgroup {
background-color: #eee; [data-selectable].option {
color: #000; padding-left: 20px;
font-weight: 600; }
}
[data-selectable].option {
padding-left: 20px;
} }
} }

View File

@@ -1,5 +1,3 @@
@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" */ /* 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 { fieldset legend.col-form-label {
padding-top: 0; padding-top: 0;

View File

@@ -4,7 +4,6 @@
* For the full copyright and license information, please view the LICENSE * For the full copyright and license information, please view the LICENSE
* file that was distributed with this source code. * file that was distributed with this source code.
*/ */
@import "variables";
table.dataTable { table.dataTable {
clear: both; clear: both;
@@ -93,7 +92,7 @@ table.dataTable {
&.summary td { &.summary td {
font-weight: bold; font-weight: bold;
border: 0; border: 0;
background-color: var(--tblr-table-striped-bg); background-color: var(--tblr-bg-surface-secondary);
} }
th.multiCheckbox { th.multiCheckbox {
width: 15px; width: 15px;
@@ -118,30 +117,17 @@ table.dataTable {
padding: .3em .6em .3em; padding: .3em .6em .3em;
line-height: 24px; line-height: 24px;
} }
span.label-activity,
span.label-project,
span.label-customer {
a {
color: unset;
padding-bottom: 2px;
border-bottom: 1px dotted $gray-lte;
&:hover {
border-bottom: 1px dotted darken($gray-lte, 20);
}
}
}
span.label-invisible { span.label-invisible {
opacity: 0.8; opacity: 0.6;
} }
} }
th.weekend, th.weekend,
td.weekend { td.weekend {
background-color: #f9f9f9; background-color: var(--tblr-bg-surface-secondary);
} }
/* order is important, "today” should overwrite "weekend" therefor later in the file */ /* order is important, "today” should overwrite "weekend" therefor later in the file */
th.today, th.today {
td.today { background-color: var(--tblr-highlight-bg);
background-color: $highlight-today;
} }
th.total, th.total,
td.total { td.total {

View File

@@ -1,48 +1,7 @@
@include dark-mode { @include color-mode(dark, true) {
.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 { table.dataTable {
th.weekend, td.weekend { th.today {
background-color: $dark-mode-weekend; color: var(--tblr-muted);
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;
}
} }
} }
@@ -50,7 +9,7 @@
background: rgba(0, 0, 0, 0.5); background: rgba(0, 0, 0, 0.5);
> .fas { > .fas {
color: $dark-mode-text; color: var(--tblr-white);
} }
} }
} }

View File

@@ -37,8 +37,6 @@
@include media-breakpoint-down(lg) { @include media-breakpoint-down(lg) {
aside.navbar .btn-outline-white, aside.navbar .btn-outline-white,
header.navbar .btn-outline-white { header.navbar .btn-outline-white {
background-color: var(--tblr-body-color);
border-color: hsla(0,0%,100%,.2); border-color: hsla(0,0%,100%,.2);
color: hsla(0,0%,100%,.7);
} }
} }

View File

@@ -1,30 +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.
*/
@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;
$red: #dd4b39;
$green: #00a65a;
$yellow: #f0ad4e;
$blue: #0073b7;
$gray-lte: #d2d6de;
$kimai-default: $gray-lte;
$box-border-radius: 3px;
$dark-mode-today: var(--tblr-blue);
$dark-mode-weekend: lighten($dark, 5%) !default;

View File

@@ -34,7 +34,7 @@
"friendsofsymfony/rest-bundle": "^3.0", "friendsofsymfony/rest-bundle": "^3.0",
"gedmo/doctrine-extensions": "^3.6", "gedmo/doctrine-extensions": "^3.6",
"jms/serializer-bundle": "^5.0", "jms/serializer-bundle": "^5.0",
"kevinpapst/tabler-bundle": "^0.15", "kevinpapst/tabler-bundle": "^0.16",
"league/csv": "^9.4", "league/csv": "^9.4",
"mpdf/mpdf": "^8.0", "mpdf/mpdf": "^8.0",
"nelmio/api-doc-bundle": "^4.0", "nelmio/api-doc-bundle": "^4.0",

14
composer.lock generated
View File

@@ -4,7 +4,7 @@
"Read more about it at https://getcomposer.org/doc/01-basic-usage.md#installing-dependencies", "Read more about it at https://getcomposer.org/doc/01-basic-usage.md#installing-dependencies",
"This file is @generated automatically" "This file is @generated automatically"
], ],
"content-hash": "276b8b25218c04ae6527eccfec7f1464", "content-hash": "26d6641fd4c8f977b0a50cab05e1df87",
"packages": [ "packages": [
{ {
"name": "bacon/bacon-qr-code", "name": "bacon/bacon-qr-code",
@@ -2416,16 +2416,16 @@
}, },
{ {
"name": "kevinpapst/tabler-bundle", "name": "kevinpapst/tabler-bundle",
"version": "0.15", "version": "0.16",
"source": { "source": {
"type": "git", "type": "git",
"url": "https://github.com/kevinpapst/TablerBundle.git", "url": "https://github.com/kevinpapst/TablerBundle.git",
"reference": "570cdda287a49127217f0f2aa4425d3174073bdb" "reference": "c5986daa3595fc5163f7d0cb15f69dc5f696b987"
}, },
"dist": { "dist": {
"type": "zip", "type": "zip",
"url": "https://api.github.com/repos/kevinpapst/TablerBundle/zipball/570cdda287a49127217f0f2aa4425d3174073bdb", "url": "https://api.github.com/repos/kevinpapst/TablerBundle/zipball/c5986daa3595fc5163f7d0cb15f69dc5f696b987",
"reference": "570cdda287a49127217f0f2aa4425d3174073bdb", "reference": "c5986daa3595fc5163f7d0cb15f69dc5f696b987",
"shasum": "" "shasum": ""
}, },
"require": { "require": {
@@ -2474,7 +2474,7 @@
"description": "Admin/Backend theme bundle for Symfony based on Tabler.io", "description": "Admin/Backend theme bundle for Symfony based on Tabler.io",
"support": { "support": {
"issues": "https://github.com/kevinpapst/TablerBundle/issues", "issues": "https://github.com/kevinpapst/TablerBundle/issues",
"source": "https://github.com/kevinpapst/TablerBundle/tree/0.15" "source": "https://github.com/kevinpapst/TablerBundle/tree/0.16"
}, },
"funding": [ "funding": [
{ {
@@ -2486,7 +2486,7 @@
"type": "github" "type": "github"
} }
], ],
"time": "2023-04-06T16:30:28+00:00" "time": "2023-05-15T12:01:30+00:00"
}, },
{ {
"name": "laminas/laminas-escaper", "name": "laminas/laminas-escaper",

View File

@@ -36,7 +36,7 @@
"@fullcalendar/interaction": "^5.11", "@fullcalendar/interaction": "^5.11",
"@fullcalendar/timegrid": "^5.11", "@fullcalendar/timegrid": "^5.11",
"@symfony/webpack-encore": "^4.0", "@symfony/webpack-encore": "^4.0",
"@tabler/core": "1.0.0-beta16", "@tabler/core": "1.0.0-beta18",
"chart.js": "^3.9", "chart.js": "^3.9",
"core-js": "^3.6", "core-js": "^3.6",
"eslint": "^8.0", "eslint": "^8.0",
@@ -44,9 +44,9 @@
"gridstack": "^7.1", "gridstack": "^7.1",
"litepicker": "^2.0", "litepicker": "^2.0",
"luxon": "^3.3", "luxon": "^3.3",
"node-sass": "^8.0", "sass": "^1.62.1",
"sass-loader": "^13.2", "sass-loader": "^13.2",
"tom-select": "^2.0", "tom-select": "^2.2",
"webpack": "^5.74.0", "webpack": "^5.74.0",
"webpack-cli": "^4.10.0", "webpack-cli": "^4.10.0",
"webpack-notifier": "^1.13" "webpack-notifier": "^1.13"

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

View File

@@ -1,6 +1,6 @@
/*! /*!
* Bootstrap v5.2.2 (https://getbootstrap.com/) * Bootstrap v5.3.0-alpha3 (https://getbootstrap.com/)
* Copyright 2011-2022 The Bootstrap Authors (https://github.com/twbs/bootstrap/graphs/contributors) * Copyright 2011-2023 The Bootstrap Authors (https://github.com/twbs/bootstrap/graphs/contributors)
* Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE) * Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE)
*/ */

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

View File

@@ -1,6 +1,6 @@
/*! /*!
* Bootstrap v5.2.2 (https://getbootstrap.com/) * Bootstrap v5.3.0-alpha3 (https://getbootstrap.com/)
* Copyright 2011-2022 The Bootstrap Authors (https://github.com/twbs/bootstrap/graphs/contributors) * Copyright 2011-2023 The Bootstrap Authors (https://github.com/twbs/bootstrap/graphs/contributors)
* Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE) * Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE)
*/ */

View File

@@ -3,16 +3,16 @@
"app": { "app": {
"js": [ "js": [
"/build/runtime.f0079159.js", "/build/runtime.f0079159.js",
"/build/app.c61734af.js" "/build/app.bed7a1bf.js"
], ],
"css": [ "css": [
"/build/app.d3ccebf5.css" "/build/app.80fb16e8.css"
] ]
}, },
"export-pdf": { "export-pdf": {
"js": [ "js": [
"/build/runtime.f0079159.js", "/build/runtime.f0079159.js",
"/build/export-pdf.587575e7.js" "/build/export-pdf.d367a32e.js"
], ],
"css": [ "css": [
"/build/export-pdf.d8a6c23b.css" "/build/export-pdf.d8a6c23b.css"
@@ -21,16 +21,16 @@
"invoice": { "invoice": {
"js": [ "js": [
"/build/runtime.f0079159.js", "/build/runtime.f0079159.js",
"/build/invoice.c8ae95ad.js" "/build/invoice.2604495e.js"
], ],
"css": [ "css": [
"/build/invoice.d0ae14e1.css" "/build/invoice.5bea118e.css"
] ]
}, },
"invoice-pdf": { "invoice-pdf": {
"js": [ "js": [
"/build/runtime.f0079159.js", "/build/runtime.f0079159.js",
"/build/invoice-pdf.d86b82ee.js" "/build/invoice-pdf.ce9aace0.js"
], ],
"css": [ "css": [
"/build/invoice-pdf.2b749265.css" "/build/invoice-pdf.2b749265.css"
@@ -45,7 +45,7 @@
"calendar": { "calendar": {
"js": [ "js": [
"/build/runtime.f0079159.js", "/build/runtime.f0079159.js",
"/build/calendar.8577d9cd.js" "/build/calendar.198a5c2b.js"
], ],
"css": [ "css": [
"/build/calendar.bb473428.css" "/build/calendar.bb473428.css"
@@ -63,16 +63,16 @@
}, },
"integrity": { "integrity": {
"/build/runtime.f0079159.js": "sha384-H22sAW1aTvyIPqvHOvGXWSWTxf0y6mptp+MsVmyXCfjx/WJjBbhX9gbUZ+qIuihV", "/build/runtime.f0079159.js": "sha384-H22sAW1aTvyIPqvHOvGXWSWTxf0y6mptp+MsVmyXCfjx/WJjBbhX9gbUZ+qIuihV",
"/build/app.c61734af.js": "sha384-EP0ldSWtoYJlwRuaj2IjQCncdMT5rlz4cfZgDzciCd0i2pGn6MEijujB4bUU0PCP", "/build/app.bed7a1bf.js": "sha384-OCg9guQNr23augSqlruX0IK2FWrKO1MWMx0sBRIzAkKgg561U4stZRHfxQbrwJeG",
"/build/app.d3ccebf5.css": "sha384-9ufQd+D9ebk0tkPhQvGxswVMeHGES5GgJGK5lsDFS9+dQmdKbxwB/58ZSCVA3N/2", "/build/app.80fb16e8.css": "sha384-kDryvDuNVyJAdIyQEuF5NpT1duQ4VmScmUNtha3B0ssQyzLuQdWBz/G3m70wao12",
"/build/export-pdf.587575e7.js": "sha384-J50GStmmfVwUTN4dIRQ02eg9hyzGFPSzpTtpPody92j0V6zCqw+s5l8+ZhVTugeW", "/build/export-pdf.d367a32e.js": "sha384-Z5baqnzjI636nYFs4g63ViIKBZKRW4Jhv/7PQmTEQlqhfA7eK0vUMUtiyy0R5A9u",
"/build/export-pdf.d8a6c23b.css": "sha384-ztepocHE4rnGE9eKZ4kL6jTKaePUyiwiB9TjJjstjpf/ckcKg1HedrEOOk/8ElJg", "/build/export-pdf.d8a6c23b.css": "sha384-ztepocHE4rnGE9eKZ4kL6jTKaePUyiwiB9TjJjstjpf/ckcKg1HedrEOOk/8ElJg",
"/build/invoice.c8ae95ad.js": "sha384-2eVY7MBiMQxo1vhfizU+fYfEZbz9bYUdzqxnpTQhxpYiLaxeSV4WnaObq2G7/Pks", "/build/invoice.2604495e.js": "sha384-D6JvhGSqlx7z72b/qD3nF3QDXPy+XsCSRGtWfs1icjDKOcd2UzuXwuSa/E1Fg2TJ",
"/build/invoice.d0ae14e1.css": "sha384-DZ9f2EsTAIOVoFBZe4jMaW3R6yNVGCtcn3Dq3hxZnWRDdFzhyt1O1iQqRZUyQFTM", "/build/invoice.5bea118e.css": "sha384-KNyGdZSTXnAi8Tn2WqrxJnCP18yRK7BrZTHKCAGAEtl5/4S/XAe4IHKpM5gfsmB7",
"/build/invoice-pdf.d86b82ee.js": "sha384-A0HJqP+MvEqQr1uG8wViCeEWxBRKyS6l8D+Ao4pFYHUA12gCC1gRYhk9I+SJPvZq", "/build/invoice-pdf.ce9aace0.js": "sha384-mtZkXrpsXFMX2YvmmTlCm91QgsTlZLzLJnDAFcTuBDtDZ7TNkqLYkfCeLzFLVfwb",
"/build/invoice-pdf.2b749265.css": "sha384-DXXgkz2WWnrWnfBnXX5fmfPQSPb98upMnWxYKwTGYS04EhrPIWfDCutB2unIrWh7", "/build/invoice-pdf.2b749265.css": "sha384-DXXgkz2WWnrWnfBnXX5fmfPQSPb98upMnWxYKwTGYS04EhrPIWfDCutB2unIrWh7",
"/build/chart.f5becfac.js": "sha384-GSqETm8wULiVXyizvwRompfwu63r/C0Qd/AvrHDE4cqAKiIGCssb3QyBtGu1WN+W", "/build/chart.f5becfac.js": "sha384-GSqETm8wULiVXyizvwRompfwu63r/C0Qd/AvrHDE4cqAKiIGCssb3QyBtGu1WN+W",
"/build/calendar.8577d9cd.js": "sha384-1qlF+4tr7/zve+wvZef7sVcbUxhK0/yEm5Hbuct8K/ZV4JtENdNY7YRLqOcZ/8Y3", "/build/calendar.198a5c2b.js": "sha384-Rx1eiPfZeAO2iapu94+f3xx4tjj7xbtkUaZwycaxMU+v/bYLjAJIL+VSjiBPYnTg",
"/build/calendar.bb473428.css": "sha384-900W9o8666Qpw21rLP7hn5Ql8tWd40k0IcE3QpFm7E7V6bKva7xQgGlyzVuuh4GK", "/build/calendar.bb473428.css": "sha384-900W9o8666Qpw21rLP7hn5Ql8tWd40k0IcE3QpFm7E7V6bKva7xQgGlyzVuuh4GK",
"/build/dashboard.6774a712.js": "sha384-lBwkNqUPv+IBbznagiFakY2BOIueq/Bg89wHO2XeM9YAZ51rPkrvdMd+XmFupHsM", "/build/dashboard.6774a712.js": "sha384-lBwkNqUPv+IBbznagiFakY2BOIueq/Bg89wHO2XeM9YAZ51rPkrvdMd+XmFupHsM",
"/build/dashboard.18f5a8b7.css": "sha384-PBD8ftb2yBoSjRe2sN5Xb4dEz045kOEUfcIufdSis+tWoWdAx5j4Yic+F/6CYbrP" "/build/dashboard.18f5a8b7.css": "sha384-PBD8ftb2yBoSjRe2sN5Xb4dEz045kOEUfcIufdSis+tWoWdAx5j4Yic+F/6CYbrP"

View File

@@ -1 +0,0 @@
(self.webpackChunkkimai2=self.webpackChunkkimai2||[]).push([[185],{8810:function(i,n,u){u(8568)},8568:function(i,n,u){"use strict";u.r(n)}},function(i){var n;n=8810,i(i.s=n)}]);

View File

@@ -0,0 +1 @@
(self.webpackChunkkimai2=self.webpackChunkkimai2||[]).push([[185],{8810:function(i,n,u){u(9508)},9508:function(i,n,u){"use strict";u.r(n)}},function(i){var n;n=8810,i(i.s=n)}]);

View File

@@ -0,0 +1 @@
(self.webpackChunkkimai2=self.webpackChunkkimai2||[]).push([[266],{35:function(i,n,u){u(6197)},6197:function(i,n,u){"use strict";u.r(n)}},function(i){var n;n=35,i(i.s=n)}]);

View File

@@ -1 +0,0 @@
(self.webpackChunkkimai2=self.webpackChunkkimai2||[]).push([[266],{35:function(i,n,u){u(297)},297:function(i,n,u){"use strict";u.r(n)}},function(i){var n;n=35,i(i.s=n)}]);

View File

@@ -0,0 +1 @@
(self.webpackChunkkimai2=self.webpackChunkkimai2||[]).push([[149],{474:function(i,n,u){u(9822)},9822:function(i,n,u){"use strict";u.r(n)}},function(i){var n;n=474,i(i.s=n)}]);

File diff suppressed because one or more lines are too long

View File

@@ -1 +0,0 @@
(self.webpackChunkkimai2=self.webpackChunkkimai2||[]).push([[149],{474:function(i,n,u){u(3648)},3648:function(i,n,u){"use strict";u.r(n)}},function(i){var n;n=474,i(i.s=n)}]);

File diff suppressed because one or more lines are too long

View File

@@ -1,15 +1,15 @@
{ {
"build/app.css": "/build/app.d3ccebf5.css", "build/app.css": "/build/app.80fb16e8.css",
"build/app.js": "/build/app.c61734af.js", "build/app.js": "/build/app.bed7a1bf.js",
"build/export-pdf.css": "/build/export-pdf.d8a6c23b.css", "build/export-pdf.css": "/build/export-pdf.d8a6c23b.css",
"build/export-pdf.js": "/build/export-pdf.587575e7.js", "build/export-pdf.js": "/build/export-pdf.d367a32e.js",
"build/invoice.css": "/build/invoice.d0ae14e1.css", "build/invoice.css": "/build/invoice.5bea118e.css",
"build/invoice.js": "/build/invoice.c8ae95ad.js", "build/invoice.js": "/build/invoice.2604495e.js",
"build/invoice-pdf.css": "/build/invoice-pdf.2b749265.css", "build/invoice-pdf.css": "/build/invoice-pdf.2b749265.css",
"build/invoice-pdf.js": "/build/invoice-pdf.d86b82ee.js", "build/invoice-pdf.js": "/build/invoice-pdf.ce9aace0.js",
"build/chart.js": "/build/chart.f5becfac.js", "build/chart.js": "/build/chart.f5becfac.js",
"build/calendar.css": "/build/calendar.bb473428.css", "build/calendar.css": "/build/calendar.bb473428.css",
"build/calendar.js": "/build/calendar.8577d9cd.js", "build/calendar.js": "/build/calendar.198a5c2b.js",
"build/dashboard.css": "/build/dashboard.18f5a8b7.css", "build/dashboard.css": "/build/dashboard.18f5a8b7.css",
"build/dashboard.js": "/build/dashboard.6774a712.js", "build/dashboard.js": "/build/dashboard.6774a712.js",
"build/runtime.js": "/build/runtime.f0079159.js" "build/runtime.js": "/build/runtime.f0079159.js"

View File

@@ -10,6 +10,7 @@
namespace App\EventSubscriber; namespace App\EventSubscriber;
use App\Configuration\LocaleService; use App\Configuration\LocaleService;
use App\Constants;
use App\Entity\User; use App\Entity\User;
use App\Entity\UserPreference; use App\Entity\UserPreference;
use KevinPapst\TablerBundle\Helper\ContextHelper; use KevinPapst\TablerBundle\Helper\ContextHelper;
@@ -41,6 +42,8 @@ final class ThemeOptionsSubscriber implements EventSubscriberInterface
return; return;
} }
$this->helper->setAssetVersion((string) Constants::VERSION_ID);
if ($this->localeService->isRightToLeft(\Locale::getDefault())) { if ($this->localeService->isRightToLeft(\Locale::getDefault())) {
$this->helper->setIsRightToLeft(true); $this->helper->setIsRightToLeft(true);
} }
@@ -66,8 +69,7 @@ final class ThemeOptionsSubscriber implements EventSubscriberInterface
$this->helper->setIsCondensedUserMenu(false); $this->helper->setIsCondensedUserMenu(false);
$this->helper->setIsCondensedNavbar(false); $this->helper->setIsCondensedNavbar(false);
$this->helper->setIsNavbarOverlapping(false); $this->helper->setIsNavbarOverlapping(false);
if (!$this->helper->isDarkMode()) { $this->helper->setIsNavbarDark(true);
$this->helper->setIsNavbarDark(true); $this->helper->setIsHeaderDark($this->helper->isDarkMode());
}
} }
} }

View File

@@ -12,27 +12,27 @@
<h3 class="m-0 mb-1"> <h3 class="m-0 mb-1">
<a href="{{ constant('App\\Constants::HOMEPAGE') }}" target="_blank">{{ constant('App\\Constants::SOFTWARE') }}</a> <a href="{{ constant('App\\Constants::HOMEPAGE') }}" target="_blank">{{ constant('App\\Constants::SOFTWARE') }}</a>
</h3> </h3>
<div class="text-muted"> <div class="text-body-secondary">
{{ constant('App\\Constants::VERSION') }} {{ constant('App\\Constants::VERSION') }}
</div> </div>
</div> </div>
<div class="d-flex"> <div class="d-flex">
<a href="{{ ''|docu_link }}" target="_blank" class="card-btn"> <a href="{{ ''|docu_link }}" target="_blank" class="card-btn">
<i class="me-2 text-muted {{ 'help'|icon(false) }}"></i> <i class="me-2 text-body-secondary {{ 'help'|icon(false) }}"></i>
{{ 'help'|trans({}, 'about') }} {{ 'help'|trans({}, 'about') }}
</a> </a>
<a href="{{ constant('App\\Constants::GITHUB') }}discussions" target="_blank" class="card-btn"> <a href="{{ constant('App\\Constants::GITHUB') }}discussions" target="_blank" class="card-btn">
<i class="me-2 text-muted {{ 'fab fa-github'|icon(false) }}"></i> <i class="me-2 text-body-secondary {{ 'fab fa-github'|icon(false) }}"></i>
{{ 'support'|trans({}, 'about') }} {{ 'support'|trans({}, 'about') }}
</a> </a>
</div> </div>
<div class="d-flex"> <div class="d-flex">
<a href="{{ constant('App\\Constants::HOMEPAGE') }}" target="_blank" class="card-btn"> <a href="{{ constant('App\\Constants::HOMEPAGE') }}" target="_blank" class="card-btn">
<i class="me-2 text-muted {{ 'home'|icon(false) }}"></i> <i class="me-2 text-body-secondary {{ 'home'|icon(false) }}"></i>
{{ 'website'|trans({}, 'about') }} {{ 'website'|trans({}, 'about') }}
</a> </a>
<a href="{{ constant('App\\Constants::HOMEPAGE') }}/donate/" target="_blank" class="card-btn"> <a href="{{ constant('App\\Constants::HOMEPAGE') }}/donate/" target="_blank" class="card-btn">
<i class="me-2 text-muted {{ 'fas fa-hand-holding-heart'|icon(false) }}"></i> <i class="me-2 text-body-secondary {{ 'fas fa-hand-holding-heart'|icon(false) }}"></i>
{{ 'donate'|trans({}, 'about') }} {{ 'donate'|trans({}, 'about') }}
</a> </a>
</div> </div>
@@ -92,11 +92,11 @@
<i class="fa-2x fas fa-balance-scale"></i> <i class="fa-2x fas fa-balance-scale"></i>
</div> </div>
<div> <div>
<small class="text-muted">{{ constant('\\App\\Constants::SOFTWARE') }} is licensed under the</small> <small class="text-body-secondary">{{ constant('\\App\\Constants::SOFTWARE') }} is licensed under the</small>
<h3 class="lh-1">GNU Affero General Public License v3.0</h3> <h3 class="lh-1">GNU Affero General Public License v3.0</h3>
</div> </div>
</div> </div>
<div class="text-muted mb-3"> <div class="text-body-secondary mb-3">
Permissions of this strongest copyleft license are conditioned on making available complete source code of licensed works and modifications, Permissions of this strongest copyleft license are conditioned on making available complete source code of licensed works and modifications,
which include larger works using a licensed work, under the same license. which include larger works using a licensed work, under the same license.
Copyright and license notices must be preserved. Contributors provide an express grant of patent rights. Copyright and license notices must be preserved. Contributors provide an express grant of patent rights.

View File

@@ -157,7 +157,7 @@
{% if block('table_actions') is defined %} {% if block('table_actions') is defined %}
{{ block('table_actions') }} {{ block('table_actions') }}
{% elseif block('breadcrumb') is defined %} {% elseif block('breadcrumb') is defined %}
<div class="text-muted mt-1"> <div class="text-body-secondary mt-1">
{{ block('breadcrumb') }} {{ block('breadcrumb') }}
</div> </div>
{% endif %} {% endif %}

View File

@@ -28,7 +28,7 @@
{% if source.blockInclude is not null and entry.blockName is not null and block(entry.blockName, source.blockInclude) is defined %} {% if source.blockInclude is not null and entry.blockName is not null and block(entry.blockName, source.blockInclude) is defined %}
{{ block(entry.blockName, source.blockInclude) }} {{ block(entry.blockName, source.blockInclude) }}
{% else %} {% else %}
<span class="d-block text-muted text-truncate mt-n1">{{ entry.title }}</span> <span class="d-block text-body-secondary text-truncate mt-n1">{{ entry.title }}</span>
{% endif %} {% endif %}
</div> </div>
</div> </div>

View File

@@ -2,6 +2,6 @@
{% import "macros/widgets.html.twig" as widgets %} {% import "macros/widgets.html.twig" as widgets %}
{{ title }} {{ title }}
{% if project is not null %} {% if project is not null %}
<small class="d-block text-muted text-truncate mt-n1">{{ project }}{% if customer is not null %}, {{ customer }}{% endif %}</small> <small class="d-block text-body-secondary text-truncate mt-n1">{{ project }}{% if customer is not null %}, {{ customer }}{% endif %}</small>
{% endif %} {% endif %}
{% endmacro %} {% endmacro %}

View File

@@ -12,7 +12,7 @@
{% endif %} {% endif %}
{% endblock %} {% endblock %}
</h5> </h5>
<button type="button" class="btn-close{% if tabler_bundle.isDarkMode() %} btn-close-white{% endif %}" data-bs-dismiss="modal" aria-label="{{ 'action.close'|trans }}"></button> <button type="button" class="btn-close" data-bs-dismiss="modal" aria-label="{{ 'action.close'|trans }}"></button>
</div> </div>
<div class="modal-body"> <div class="modal-body">
{% block modal_body %} {% block modal_body %}

View File

@@ -106,7 +106,7 @@
{%- elseif '.ERROR' in logLine -%} {%- elseif '.ERROR' in logLine -%}
{%- set logLineClass = 'text-warning text-bold' -%} {%- set logLineClass = 'text-warning text-bold' -%}
{%- elseif '.DEBUG' in logLine -%} {%- elseif '.DEBUG' in logLine -%}
{%- set logLineClass = 'text-muted' -%} {%- set logLineClass = 'text-body-secondary' -%}
{%- endif -%} {%- endif -%}
<span class="{{ logLineClass }}">{{- logLine -}}</span> <span class="{{ logLineClass }}">{{- logLine -}}</span>
{%- endfor %}</pre> {%- endfor %}</pre>

View File

@@ -22,7 +22,7 @@
<div class="text-truncate"> <div class="text-truncate">
<strong>{{ widgets.username(comment.createdBy) }}</strong> <strong>{{ widgets.username(comment.createdBy) }}</strong>
</div> </div>
<div class="text-muted">{{ comment.createdAt|date_time }}</div> <div class="text-body-secondary">{{ comment.createdAt|date_time }}</div>
</div> </div>
<div class="col-auto align-self-center"> <div class="col-auto align-self-center">
{% if route_pin is not null %} {% if route_pin is not null %}

View File

@@ -20,7 +20,7 @@
{% block box_attributes %}id="team_listing_box"{% endblock %} {% block box_attributes %}id="team_listing_box"{% endblock %}
{% block box_title %} {% block box_title %}
{{ 'permissions'|trans({}, 'actions') }} {{ 'permissions'|trans({}, 'actions') }}
{% if teams|length > 0 %}<small class="text-muted d-none d-sm-inline ms-1">{{ 'team.visibility_restricted'|trans({}, 'teams') }}</small>{% endif %} {% if teams|length > 0 %}<small class="text-body-secondary d-none d-sm-inline ms-1">{{ 'team.visibility_restricted'|trans({}, 'teams') }}</small>{% endif %}
{% endblock %} {% endblock %}
{% block box_body_class %}{% if teams|length > 0 %}p-0{% endif %}{% endblock %} {% block box_body_class %}{% if teams|length > 0 %}p-0{% endif %}{% endblock %}
{% block box_body %} {% block box_body %}

View File

@@ -103,9 +103,9 @@
{{ form_errors(form.user) }} {{ form_errors(form.user) }}
</div> </div>
{% if user is not null %} {% if user is not null %}
<div class="text-muted">{{- form.vars.data.user.title -}}</div> <div class="text-body-secondary">{{- form.vars.data.user.title -}}</div>
{% else %} {% else %}
<div class="text-muted">__TITLE__</div> <div class="text-body-secondary">__TITLE__</div>
{% endif %} {% endif %}
</div> </div>
</div> </div>

View File

@@ -4,7 +4,7 @@
{% import "invoice/actions.html.twig" as actions %} {% import "invoice/actions.html.twig" as actions %}
{% block datatable_row %} {% block datatable_row %}
<tr class="modal-ajax-form open-edit{% if entry.canceled %} warning text-muted{% endif %}" data-href="{{ path('admin_invoice_edit', {'id': entry.id}) }}"> <tr class="modal-ajax-form open-edit{% if entry.canceled %} text-body-secondary{% endif %}" data-href="{{ path('admin_invoice_edit', {'id': entry.id}) }}">
<td class="{{ tables.class(dataTable, 'avatar') }}">{{ widgets.user_avatar(entry.user) }}</td> <td class="{{ tables.class(dataTable, 'avatar') }}">{{ widgets.user_avatar(entry.user) }}</td>
<td class="{{ tables.class(dataTable, 'date') }}">{{ entry.createdAt|date_short }}</td> <td class="{{ tables.class(dataTable, 'date') }}">{{ entry.createdAt|date_short }}</td>
<td class="{{ tables.class(dataTable, 'user') }}">{{ widgets.label_user(entry.user) }}</td> <td class="{{ tables.class(dataTable, 'user') }}">{{ widgets.label_user(entry.user) }}</td>

View File

@@ -262,7 +262,7 @@
{{ form_end(multi_update_form) }} {{ form_end(multi_update_form) }}
{% endif %} {% endif %}
{% if route is not empty and entries is not null %} {% if route is not empty and entries is not null %}
<p class="d-none d-sm-block m-0 text-muted multi_update_form_hide"> <p class="d-none d-sm-block m-0 text-body-secondary multi_update_form_hide">
{{ 'pagination'|trans({'%start%': entries.getCurrentPageOffsetStart(), '%end%': entries.getCurrentPageOffsetEnd(), '%total%': entries.getNbResults()}) }} {{ 'pagination'|trans({'%start%': entries.getCurrentPageOffsetStart(), '%end%': entries.getCurrentPageOffsetEnd(), '%total%': entries.getNbResults()}) }}
</p> </p>
{% set options = { 'css_container_class': 'pagination m-0 ms-auto d-print-none' } %} {% set options = { 'css_container_class': 'pagination m-0 ms-auto d-print-none' } %}

View File

@@ -7,7 +7,7 @@
{% endblock %} {% endblock %}
{% block login_actions %} {% block login_actions %}
<div class="text-center text-muted mt-3"> <div class="text-center text-body-secondary mt-3">
<a href="{{ path('homepage') }}"> <a href="{{ path('homepage') }}">
{{ 'Show homepage'|trans({}, 'TablerBundle') }} {{ 'Show homepage'|trans({}, 'TablerBundle') }}
</a> </a>

View File

@@ -7,7 +7,7 @@
{% block login_box_msg %}{{ 'security.unlock.title'|trans }}{% endblock %} {% block login_box_msg %}{{ 'security.unlock.title'|trans }}{% endblock %}
{% block login_form %} {% block login_form %}
<p class="text-muted text-center mb-4"> <p class="text-body-secondary text-center mb-4">
{% block unlock_title %}{{ 'security.unlock.intro'|trans }}{% endblock %} {% block unlock_title %}{{ 'security.unlock.intro'|trans }}{% endblock %}
</p> </p>
<div class="mb-4 text-center"> <div class="mb-4 text-center">
@@ -15,7 +15,7 @@
{{ user_avatar(app.user, false, 'avatar-xl mb-3') }} {{ user_avatar(app.user, false, 'avatar-xl mb-3') }}
<h3>{{ username(app.user) }}</h3> <h3>{{ username(app.user) }}</h3>
{% if app.user.title is not empty %} {% if app.user.title is not empty %}
<p class="text-muted">{{ app.user.title }}</p> <p class="text-body-secondary">{{ app.user.title }}</p>
{% endif %} {% endif %}
</div> </div>
{% block unlock_form %} {% block unlock_form %}

View File

@@ -17,7 +17,7 @@
{% for section in sorted|sort((a, b) => a.name <=> b.name) %} {% for section in sorted|sort((a, b) => a.name <=> b.name) %}
<a class="list-group-item d-flex" href="#conf_{{ section.id }}"> <a class="list-group-item d-flex" href="#conf_{{ section.id }}">
{{ section.name }} {{ section.name }}
<small class="text-muted ms-auto">{{ section.counter }}</small> <small class="text-body-secondary ms-auto">{{ section.counter }}</small>
</a> </a>
{% endfor %} {% endfor %}
</div> </div>

View File

@@ -18,7 +18,7 @@
<div class="col" style="min-width: 100px"> <div class="col" style="min-width: 100px">
<h4 class="card-title m-0">{{ widgets.username(user) }}</h4> <h4 class="card-title m-0">{{ widgets.username(user) }}</h4>
{% if user.title is not empty %} {% if user.title is not empty %}
<div class="text-muted"> <div class="text-body-secondary">
{{ user.title }} {{ user.title }}
</div> </div>
{% endif %} {% endif %}

View File

@@ -16,7 +16,7 @@
<div class="font-weight-medium"> <div class="font-weight-medium">
{{ title|trans }} {{ title|trans }}
</div> </div>
<div class="text-muted"> <div class="text-body-secondary">
{% block widget_data %} {% block widget_data %}
{{ data }} {{ data }}
{% endblock %} {% endblock %}

View File

@@ -17,7 +17,7 @@
{{ title|trans }} {{ title|trans }}
</a> </a>
</div> </div>
<div class="text-muted"> <div class="text-body-secondary">
{% if data is iterable %} {% if data is iterable %}
{{ 'Invalid data' }} {{ 'Invalid data' }}
{% else %} {% else %}

View File

@@ -5,7 +5,7 @@
<div class="card-body text-center py-4 p-sm-5"> <div class="card-body text-center py-4 p-sm-5">
<img src="{{ asset('wizard/done.png') }}" height="120" class="mb-n2" alt="Illustration by Katerina Limpitsouni from https://undraw.co/"> <img src="{{ asset('wizard/done.png') }}" height="120" class="mb-n2" alt="Illustration by Katerina Limpitsouni from https://undraw.co/">
<h1 class="mt-5">{{ 'wizard.done.title'|trans({}, 'wizard') }}</h1> <h1 class="mt-5">{{ 'wizard.done.title'|trans({}, 'wizard') }}</h1>
<p class="text-muted">{{ 'wizard.done.description'|trans({}, 'wizard') }}</p> <p class="text-body-secondary">{{ 'wizard.done.description'|trans({}, 'wizard') }}</p>
</div> </div>
{% endblock %} {% endblock %}

View File

@@ -4,6 +4,6 @@
<div class="card-body text-center py-4 p-sm-5"> <div class="card-body text-center py-4 p-sm-5">
<img src="{{ asset('wizard/time-management.png') }}" height="120" class="mb-n2" alt="Illustration by Katerina Limpitsouni from https://undraw.co/"> <img src="{{ asset('wizard/time-management.png') }}" height="120" class="mb-n2" alt="Illustration by Katerina Limpitsouni from https://undraw.co/">
<h1 class="mt-5">{{ 'wizard.intro.title'|trans({}, 'wizard') }}</h1> <h1 class="mt-5">{{ 'wizard.intro.title'|trans({}, 'wizard') }}</h1>
<p class="text-muted">{{ 'wizard.intro.description'|trans({}, 'wizard') }}</p> <p class="text-body-secondary">{{ 'wizard.intro.description'|trans({}, 'wizard') }}</p>
</div> </div>
{% endblock %} {% endblock %}

View File

@@ -3,7 +3,7 @@
{% block wizard_content %} {% block wizard_content %}
<div class="card-body text-center py-4 p-sm-5"> <div class="card-body text-center py-4 p-sm-5">
<h1 class="mt-2">{{ 'wizard.profile.title'|trans({}, 'wizard') }}</h1> <h1 class="mt-2">{{ 'wizard.profile.title'|trans({}, 'wizard') }}</h1>
<p class="text-muted">{{ 'wizard.profile.description'|trans({}, 'wizard') }}</p> <p class="text-body-secondary">{{ 'wizard.profile.description'|trans({}, 'wizard') }}</p>
</div> </div>
<div class="hr-text hr-text-center hr-text-spaceless">{{ 'wizard.separator'|trans({}, 'wizard') }}</div> <div class="hr-text hr-text-center hr-text-spaceless">{{ 'wizard.separator'|trans({}, 'wizard') }}</div>
<div class="card-body"> <div class="card-body">

845
yarn.lock

File diff suppressed because it is too large Load Diff