feat: UI refinements - landing page gradient, button styling, drawer navigation

- Update landing view to use shell gradient background consistently

- Make surface-panel and hero-panel transparent in landing view

- Add button styling: remove shadows, use LUMO_TERTIARY for secondary actions

- Add clickable drawer header navigation to dashboard

- Remove unused title translations from message files
This commit is contained in:
2026-03-20 11:21:13 +01:00
parent 84f8531bbf
commit 8d4f04156e
19 changed files with 122 additions and 137 deletions

View File

@@ -157,7 +157,7 @@ vaadin-app-layout::part(content) {
box-sizing: border-box; box-sizing: border-box;
padding: 0; padding: 0;
gap: 1rem; gap: 1rem;
background: #ffffff !important; background: transparent !important;
min-height: 100vh; min-height: 100vh;
min-height: 100dvh; min-height: 100dvh;
} }
@@ -192,6 +192,24 @@ body:has(.dashboard-home-view) vaadin-app-layout::part(content) {
box-shadow: none; box-shadow: none;
} }
body:has(.landing-view) {
background: var(--app-shell-background);
}
.landing-view .surface-panel {
border: 1px solid var(--app-border-strong);
background: transparent;
backdrop-filter: none;
box-shadow: none;
}
.landing-view .landing-header,
.landing-view .section-panel,
.landing-view .app-overview-panel,
.landing-view .footer-panel {
background: var(--app-surface-solid);
}
.dashboard-home-view .hero-panel { .dashboard-home-view .hero-panel {
box-shadow: none; box-shadow: none;
} }
@@ -201,10 +219,6 @@ body:has(.dashboard-home-view) vaadin-app-layout::part(content) {
gap: 20px; gap: 20px;
} }
body:has(.landing-view) {
background: #ffffff;
}
.data-view, .data-view,
.dashboard-view, .dashboard-view,
.form-page, .form-page,
@@ -452,7 +466,28 @@ vaadin-vertical-layout.admin-form-view {
transition: transform 0.22s ease, box-shadow 0.22s ease, border-color 0.22s ease; transition: transform 0.22s ease, box-shadow 0.22s ease, border-color 0.22s ease;
} }
.feature-card-link {
display: block;
width: 100%;
color: inherit;
text-decoration: none;
cursor: pointer;
}
.feature-card-link:hover,
.feature-card-link:hover *,
.feature-card-link:focus-visible,
.feature-card-link:focus-visible * {
color: inherit;
text-decoration: none;
}
.feature-card-link .feature-card {
cursor: pointer;
}
.feature-card:hover, .feature-card:hover,
.feature-card-link:focus-visible .feature-card,
.message-card:hover { .message-card:hover {
transform: translateY(-4px); transform: translateY(-4px);
box-shadow: 0 24px 48px rgba(15, 23, 42, 0.14); box-shadow: 0 24px 48px rgba(15, 23, 42, 0.14);
@@ -486,20 +521,21 @@ vaadin-vertical-layout.admin-form-view {
} }
.footer-details p, .footer-details p,
.footer-cta, .app-cta,
.footer-slogan, .app-slogan,
.footer-version { .footer-version {
margin: 0; margin: 0;
text-align: center; text-align: center;
} }
.footer-cta { .app-cta {
margin-top: 0.75rem; margin-top: 0.75rem;
color: var(--app-accent-strong); color: var(--app-accent-strong);
font-weight: 700; font-weight: 700;
max-width: 820px;
} }
.footer-slogan { .app-slogan {
color: var(--app-accent-strong); color: var(--app-accent-strong);
font-style: italic; font-style: italic;
} }
@@ -689,6 +725,18 @@ vaadin-vertical-layout.admin-form-view {
transition: transform 0.18s ease, background-color 0.18s ease, border-color 0.18s ease; transition: transform 0.18s ease, background-color 0.18s ease, border-color 0.18s ease;
} }
.app-nav-row-root {
width: 20.5rem;
}
.app-nav-row-management-child {
width: 18.25rem;
}
.app-nav-row-user-child {
width: 17rem;
}
.app-nav-row:hover { .app-nav-row:hover {
transform: translateX(4px); transform: translateX(4px);
background: rgba(255, 255, 255, 0.14); background: rgba(255, 255, 255, 0.14);

View File

@@ -176,6 +176,15 @@ public final class MainLayout extends AppLayout {
row.setMargin(false); row.setMargin(false);
row.getStyle().set("max-width", "calc(100% - 4px)"); row.getStyle().set("max-width", "calc(100% - 4px)");
row.addClassName("app-nav-row"); row.addClassName("app-nav-row");
if (treeData.getParent(item) == null) {
row.addClassName("app-nav-row-root");
}
if (verwaltungItem.equals(treeData.getParent(item))) {
row.addClassName("app-nav-row-management-child");
}
if (benutzerItem.equals(treeData.getParent(item))) {
row.addClassName("app-nav-row-user-child");
}
// Icon // Icon
if (item.icon() != null) { if (item.icon() != null) {

View File

@@ -4,8 +4,6 @@ import com.vaadin.flow.component.button.Button;
import com.vaadin.flow.component.button.ButtonVariant; import com.vaadin.flow.component.button.ButtonVariant;
import com.vaadin.flow.component.formlayout.FormLayout; import com.vaadin.flow.component.formlayout.FormLayout;
import com.vaadin.flow.component.html.H2; import com.vaadin.flow.component.html.H2;
import com.vaadin.flow.component.icon.Icon;
import com.vaadin.flow.component.icon.VaadinIcon;
import com.vaadin.flow.component.notification.Notification; import com.vaadin.flow.component.notification.Notification;
import com.vaadin.flow.component.orderedlayout.FlexComponent; import com.vaadin.flow.component.orderedlayout.FlexComponent;
import com.vaadin.flow.component.orderedlayout.HorizontalLayout; import com.vaadin.flow.component.orderedlayout.HorizontalLayout;
@@ -43,6 +41,9 @@ public class AddAppUserView extends VerticalLayout implements HasDynamicTitle {
setPadding(true); setPadding(true);
setSpacing(true); setSpacing(true);
addClassName("form-page"); addClassName("form-page");
setJustifyContentMode(FlexComponent.JustifyContentMode.START);
setDefaultHorizontalComponentAlignment(FlexComponent.Alignment.STRETCH);
getStyle().set("overflow", "auto");
// Set field labels via i18n // Set field labels via i18n
designationField.setLabel(getTranslation("addappuser.designation")); designationField.setLabel(getTranslation("addappuser.designation"));
@@ -53,20 +54,18 @@ public class AddAppUserView extends VerticalLayout implements HasDynamicTitle {
passwordField.setLabel(getTranslation("addappuser.password")); passwordField.setLabel(getTranslation("addappuser.password"));
confirmPasswordField.setLabel(getTranslation("addappuser.password.confirm")); confirmPasswordField.setLabel(getTranslation("addappuser.password.confirm"));
// Center content vertically
setJustifyContentMode(FlexComponent.JustifyContentMode.CENTER);
setDefaultHorizontalComponentAlignment(FlexComponent.Alignment.CENTER);
// Create main content container // Create main content container
VerticalLayout contentContainer = new VerticalLayout(); VerticalLayout contentContainer = new VerticalLayout();
contentContainer.setWidth("600px"); contentContainer.setWidthFull();
contentContainer.setMaxWidth("90%"); contentContainer.setMaxWidth("100%");
contentContainer.setSpacing(true); contentContainer.setSpacing(true);
contentContainer.setPadding(true); contentContainer.setPadding(true);
contentContainer.setDefaultHorizontalComponentAlignment(FlexComponent.Alignment.STRETCH);
contentContainer.addClassNames("form-shell", "form-card"); contentContainer.addClassNames("form-shell", "form-card");
// Header with title and back button // Header
HorizontalLayout header = new HorizontalLayout(); HorizontalLayout header = new HorizontalLayout();
header.setWidthFull();
header.setAlignItems(FlexComponent.Alignment.CENTER); header.setAlignItems(FlexComponent.Alignment.CENTER);
header.setSpacing(true); header.setSpacing(true);
header.addClassName("form-header"); header.addClassName("form-header");
@@ -75,16 +74,12 @@ public class AddAppUserView extends VerticalLayout implements HasDynamicTitle {
title.getStyle().set("margin", "0"); title.getStyle().set("margin", "0");
title.addClassName("form-title"); title.addClassName("form-title");
Button backButton = new Button(getTranslation("button.back"), new Icon(VaadinIcon.ARROW_LEFT)); header.add(title);
backButton.addThemeVariants(ButtonVariant.LUMO_TERTIARY);
backButton.addClickListener(e -> navigateBack());
header.add(title, backButton);
header.setJustifyContentMode(FlexComponent.JustifyContentMode.BETWEEN);
contentContainer.add(header); contentContainer.add(header);
// Form layout // Form layout
FormLayout formLayout = new FormLayout(); FormLayout formLayout = new FormLayout();
formLayout.setWidthFull();
formLayout.setResponsiveSteps(new FormLayout.ResponsiveStep("0", 1)); formLayout.setResponsiveSteps(new FormLayout.ResponsiveStep("0", 1));
// Configure fields // Configure fields

View File

@@ -350,7 +350,7 @@ public class AddJobView extends Main implements HasDynamicTitle {
submitButtonLayout.setWidthFull(); submitButtonLayout.setWidthFull();
submitButtonLayout.setJustifyContentMode(FlexComponent.JustifyContentMode.CENTER); submitButtonLayout.setJustifyContentMode(FlexComponent.JustifyContentMode.CENTER);
submitButtonLayout.setPadding(true); submitButtonLayout.setPadding(true);
submitButtonLayout.addClassNames("surface-panel", "form-shell"); submitButtonLayout.addClassName("form-shell");
submitButtonLayout.add(submitButton); submitButtonLayout.add(submitButton);
submitButtonLayout.setVisible(false); submitButtonLayout.setVisible(false);
@@ -572,7 +572,11 @@ public class AddJobView extends Main implements HasDynamicTitle {
return removeButton; return removeButton;
}).setHeader(getTranslation("common.actions")).setAutoWidth(true).setFlexGrow(0); }).setHeader(getTranslation("common.actions")).setAutoWidth(true).setFlexGrow(0);
priceAndDetailsSection.add(servicesGrid); Div servicesGridPanel = new Div(servicesGrid);
servicesGridPanel.addClassNames("surface-panel", "data-grid-panel");
servicesGridPanel.setWidthFull();
priceAndDetailsSection.add(servicesGridPanel);
// Add Service Button // Add Service Button
Button addServiceButton = new Button(getTranslation("addjob.services.add"), new Icon(VaadinIcon.PLUS)); Button addServiceButton = new Button(getTranslation("addjob.services.add"), new Icon(VaadinIcon.PLUS));

View File

@@ -5,10 +5,10 @@ import com.vaadin.flow.component.html.*;
import com.vaadin.flow.component.icon.Icon; import com.vaadin.flow.component.icon.Icon;
import com.vaadin.flow.component.icon.VaadinIcon; import com.vaadin.flow.component.icon.VaadinIcon;
import com.vaadin.flow.component.orderedlayout.FlexComponent; import com.vaadin.flow.component.orderedlayout.FlexComponent;
import com.vaadin.flow.component.orderedlayout.HorizontalLayout;
import com.vaadin.flow.component.orderedlayout.VerticalLayout; import com.vaadin.flow.component.orderedlayout.VerticalLayout;
import com.vaadin.flow.router.HasDynamicTitle; import com.vaadin.flow.router.HasDynamicTitle;
import com.vaadin.flow.router.Route; import com.vaadin.flow.router.Route;
import com.vaadin.flow.router.RouterLink;
import de.assecutor.votianlt.model.User; import de.assecutor.votianlt.model.User;
import de.assecutor.votianlt.security.SecurityService; import de.assecutor.votianlt.security.SecurityService;
import de.assecutor.votianlt.pages.base.ui.view.MainLayout; import de.assecutor.votianlt.pages.base.ui.view.MainLayout;
@@ -40,12 +40,6 @@ public class AuthenticatedStartView extends VerticalLayout implements HasDynamic
// System Section // System Section
add(createSystemSection()); add(createSystemSection());
// App Section
add(createAppSection());
// Footer
add(createFooter());
} }
private Component createAuthenticatedHeroSection() { private Component createAuthenticatedHeroSection() {
@@ -94,17 +88,18 @@ public class AuthenticatedStartView extends VerticalLayout implements HasDynamic
// Feature Cards // Feature Cards
featuresGrid.add( featuresGrid.add(
createFeatureCard(VaadinIcon.COG, getTranslation("dashboard.feature.setup.title"), createFeatureCard(VaadinIcon.COG, getTranslation("dashboard.feature.setup.title"),
getTranslation("dashboard.feature.setup.desc")), getTranslation("dashboard.feature.setup.desc"), EditProfileView.class),
createFeatureCard(VaadinIcon.USERS, getTranslation("dashboard.feature.customers.title"), createFeatureCard(VaadinIcon.USERS, getTranslation("dashboard.feature.customers.title"),
getTranslation("dashboard.feature.customers.desc")), getTranslation("dashboard.feature.customers.desc"), ShowCustomersView.class),
createFeatureCard(VaadinIcon.CLIPBOARD_TEXT, getTranslation("dashboard.feature.jobs.title"), createFeatureCard(VaadinIcon.CLIPBOARD_TEXT, getTranslation("dashboard.feature.jobs.title"),
getTranslation("dashboard.feature.jobs.desc"))); getTranslation("dashboard.feature.jobs.desc"), ShowJobsView.class));
systemSection.add(systemTitle, systemIntro, featuresGrid); systemSection.add(systemTitle, systemIntro, featuresGrid);
return systemSection; return systemSection;
} }
private Component createFeatureCard(VaadinIcon iconType, String title, String description) { private Component createFeatureCard(VaadinIcon iconType, String title, String description,
Class<? extends Component> navigationTarget) {
VerticalLayout card = new VerticalLayout(); VerticalLayout card = new VerticalLayout();
card.setDefaultHorizontalComponentAlignment(FlexComponent.Alignment.CENTER); card.setDefaultHorizontalComponentAlignment(FlexComponent.Alignment.CENTER);
card.setPadding(true); card.setPadding(true);
@@ -123,46 +118,14 @@ public class AuthenticatedStartView extends VerticalLayout implements HasDynamic
cardDescription.addClassName("feature-card-description"); cardDescription.addClassName("feature-card-description");
card.add(icon, cardTitle, cardDescription); card.add(icon, cardTitle, cardDescription);
return card;
}
private Component createAppSection() { RouterLink link = new RouterLink();
VerticalLayout appSection = new VerticalLayout(); link.setRoute(navigationTarget);
appSection.setWidthFull(); link.add(card);
appSection.setPadding(true); link.addClassName("feature-card-link");
appSection.setSpacing(true); link.getStyle().set("width", "100%");
appSection.setDefaultHorizontalComponentAlignment(FlexComponent.Alignment.CENTER); link.getElement().setAttribute("aria-label", title);
appSection.addClassNames("page-shell", "surface-panel", "app-overview-panel"); return link;
H2 appTitle = new H2(getTranslation("dashboard.app.title"));
appTitle.addClassName("section-title");
Paragraph appDescription = new Paragraph(getTranslation("dashboard.app.description"));
appDescription.addClassName("section-intro");
appSection.add(appTitle, appDescription);
return appSection;
}
private Component createFooter() {
VerticalLayout footer = new VerticalLayout();
footer.setWidthFull();
footer.setPadding(true);
footer.setSpacing(true);
footer.setDefaultHorizontalComponentAlignment(FlexComponent.Alignment.CENTER);
footer.addClassNames("page-shell", "surface-panel", "footer-panel");
HorizontalLayout footerContent = new HorizontalLayout();
footerContent.setDefaultVerticalComponentAlignment(FlexComponent.Alignment.CENTER);
footerContent.setJustifyContentMode(FlexComponent.JustifyContentMode.CENTER);
Paragraph copyright = new Paragraph(getTranslation("dashboard.footer.copyright"));
copyright.addClassName("footer-version");
footerContent.add(copyright);
footer.add(footerContent);
return footer;
} }
@Override @Override

View File

@@ -4,8 +4,6 @@ import com.vaadin.flow.component.button.Button;
import com.vaadin.flow.component.button.ButtonVariant; import com.vaadin.flow.component.button.ButtonVariant;
import com.vaadin.flow.component.formlayout.FormLayout; import com.vaadin.flow.component.formlayout.FormLayout;
import com.vaadin.flow.component.html.H2; import com.vaadin.flow.component.html.H2;
import com.vaadin.flow.component.icon.Icon;
import com.vaadin.flow.component.icon.VaadinIcon;
import com.vaadin.flow.component.notification.Notification; import com.vaadin.flow.component.notification.Notification;
import com.vaadin.flow.component.orderedlayout.FlexComponent; import com.vaadin.flow.component.orderedlayout.FlexComponent;
import com.vaadin.flow.component.orderedlayout.HorizontalLayout; import com.vaadin.flow.component.orderedlayout.HorizontalLayout;
@@ -48,6 +46,9 @@ public class EditAppUserView extends VerticalLayout implements HasUrlParameter<S
setPadding(true); setPadding(true);
addClassName("form-page"); addClassName("form-page");
setSpacing(true); setSpacing(true);
setJustifyContentMode(FlexComponent.JustifyContentMode.START);
setDefaultHorizontalComponentAlignment(FlexComponent.Alignment.STRETCH);
getStyle().set("overflow", "auto");
// Set field labels via i18n // Set field labels via i18n
designationField.setLabel(getTranslation("addappuser.designation")); designationField.setLabel(getTranslation("addappuser.designation"));
@@ -58,20 +59,18 @@ public class EditAppUserView extends VerticalLayout implements HasUrlParameter<S
changePasswordField.setLabel(getTranslation("editappuser.password.change")); changePasswordField.setLabel(getTranslation("editappuser.password.change"));
confirmChangePasswordField.setLabel(getTranslation("editappuser.password.change.confirm")); confirmChangePasswordField.setLabel(getTranslation("editappuser.password.change.confirm"));
// Center content vertically
setJustifyContentMode(FlexComponent.JustifyContentMode.CENTER);
setDefaultHorizontalComponentAlignment(FlexComponent.Alignment.CENTER);
// Create main content container // Create main content container
VerticalLayout contentContainer = new VerticalLayout(); VerticalLayout contentContainer = new VerticalLayout();
contentContainer.setWidth("600px"); contentContainer.setWidthFull();
contentContainer.setMaxWidth("90%"); contentContainer.setMaxWidth("100%");
contentContainer.setSpacing(true); contentContainer.setSpacing(true);
contentContainer.setPadding(true); contentContainer.setPadding(true);
contentContainer.setDefaultHorizontalComponentAlignment(FlexComponent.Alignment.STRETCH);
contentContainer.addClassNames("form-shell", "form-card"); contentContainer.addClassNames("form-shell", "form-card");
// Header with title and back button // Header
HorizontalLayout header = new HorizontalLayout(); HorizontalLayout header = new HorizontalLayout();
header.setWidthFull();
header.setAlignItems(FlexComponent.Alignment.CENTER); header.setAlignItems(FlexComponent.Alignment.CENTER);
header.setSpacing(true); header.setSpacing(true);
header.addClassName("form-header"); header.addClassName("form-header");
@@ -79,16 +78,12 @@ public class EditAppUserView extends VerticalLayout implements HasUrlParameter<S
H2 title = new H2(getTranslation("editappuser.title")); H2 title = new H2(getTranslation("editappuser.title"));
title.addClassName("form-title"); title.addClassName("form-title");
Button backButton = new Button(getTranslation("button.back"), new Icon(VaadinIcon.ARROW_LEFT)); header.add(title);
backButton.addThemeVariants(ButtonVariant.LUMO_TERTIARY);
backButton.addClickListener(e -> navigateBack());
header.add(title, backButton);
header.setJustifyContentMode(FlexComponent.JustifyContentMode.BETWEEN);
contentContainer.add(header); contentContainer.add(header);
// Form layout // Form layout
FormLayout formLayout = new FormLayout(); FormLayout formLayout = new FormLayout();
formLayout.setWidthFull();
formLayout.setResponsiveSteps(new FormLayout.ResponsiveStep("0", 1)); formLayout.setResponsiveSteps(new FormLayout.ResponsiveStep("0", 1));
// Configure fields // Configure fields

View File

@@ -52,6 +52,9 @@ public class EditCustomerView extends VerticalLayout implements HasUrlParameter<
setPadding(true); setPadding(true);
addClassName("form-page"); addClassName("form-page");
setSpacing(true); setSpacing(true);
setJustifyContentMode(FlexComponent.JustifyContentMode.START);
setDefaultHorizontalComponentAlignment(FlexComponent.Alignment.STRETCH);
getStyle().set("overflow", "auto");
// Set field labels via i18n // Set field labels via i18n
titleField.setLabel(getTranslation("addjob.address.salutation")); titleField.setLabel(getTranslation("addjob.address.salutation"));
@@ -67,16 +70,13 @@ public class EditCustomerView extends VerticalLayout implements HasUrlParameter<
zipField.setLabel(getTranslation("profile.zip")); zipField.setLabel(getTranslation("profile.zip"));
cityField.setLabel(getTranslation("profile.city")); cityField.setLabel(getTranslation("profile.city"));
// Center content vertically
setJustifyContentMode(FlexComponent.JustifyContentMode.CENTER);
setDefaultHorizontalComponentAlignment(FlexComponent.Alignment.CENTER);
// Create main content container // Create main content container
VerticalLayout contentContainer = new VerticalLayout(); VerticalLayout contentContainer = new VerticalLayout();
contentContainer.setWidth("800px"); contentContainer.setWidthFull();
contentContainer.setMaxWidth("90%"); contentContainer.setMaxWidth("100%");
contentContainer.setSpacing(true); contentContainer.setSpacing(true);
contentContainer.setPadding(true); contentContainer.setPadding(true);
contentContainer.setDefaultHorizontalComponentAlignment(FlexComponent.Alignment.STRETCH);
contentContainer.addClassNames("form-shell", "form-card"); contentContainer.addClassNames("form-shell", "form-card");
// Header // Header
@@ -87,6 +87,7 @@ public class EditCustomerView extends VerticalLayout implements HasUrlParameter<
// Form layout // Form layout
FormLayout formLayout = new FormLayout(); FormLayout formLayout = new FormLayout();
formLayout.setWidthFull();
formLayout.setResponsiveSteps(new FormLayout.ResponsiveStep("0", 1)); formLayout.setResponsiveSteps(new FormLayout.ResponsiveStep("0", 1));
// Add fields to form - all fields in single column // Add fields to form - all fields in single column

View File

@@ -579,6 +579,7 @@ public class EditProfileView extends HorizontalLayout implements HasDynamicTitle
// Profil speichern Button (unten rechts) // Profil speichern Button (unten rechts)
Button saveProfile = new Button(getTranslation("button.save")); Button saveProfile = new Button(getTranslation("button.save"));
saveProfile.addThemeVariants(ButtonVariant.LUMO_PRIMARY); saveProfile.addThemeVariants(ButtonVariant.LUMO_PRIMARY);
saveProfile.getStyle().set("box-shadow", "none");
saveProfile.addClickListener(e -> { saveProfile.addClickListener(e -> {
// Validate all required fields first // Validate all required fields first
boolean isValid = validateAllProfileFields(companyField, firstnameField, lastnameField, phoneField, boolean isValid = validateAllProfileFields(companyField, firstnameField, lastnameField, phoneField,
@@ -628,7 +629,7 @@ public class EditProfileView extends HorizontalLayout implements HasDynamicTitle
// Fixieren am unteren Rand // Fixieren am unteren Rand
buttonBar.getStyle().set("position", "sticky"); buttonBar.getStyle().set("position", "sticky");
buttonBar.getStyle().set("bottom", "0"); buttonBar.getStyle().set("bottom", "0");
buttonBar.getStyle().set("background", "var(--lumo-base-color)"); buttonBar.getStyle().set("background", "transparent");
buttonBar.getStyle().set("padding", "var(--lumo-space-s) 0"); buttonBar.getStyle().set("padding", "var(--lumo-space-s) 0");
buttonBar.getStyle().set("z-index", "1"); buttonBar.getStyle().set("z-index", "1");
formColumn.add(buttonBar); formColumn.add(buttonBar);

View File

@@ -358,7 +358,13 @@ public class StartView extends VerticalLayout implements BeforeEnterObserver, Ha
appIcon.setSize("80px"); appIcon.setSize("80px");
appIcon.addClassName("feature-card-icon"); appIcon.addClassName("feature-card-icon");
appSection.add(appTitle, appDescription, appIcon); Paragraph ctaText = new Paragraph(getTranslation("start.cta.text"));
ctaText.addClassName("app-cta");
Paragraph slogan = new Paragraph(getTranslation("start.slogan"));
slogan.addClassName("app-slogan");
appSection.add(appTitle, appDescription, appIcon, ctaText, slogan);
return appSection; return appSection;
} }
@@ -385,18 +391,11 @@ public class StartView extends VerticalLayout implements BeforeEnterObserver, Ha
new Paragraph(getTranslation("start.imprint.phone")), new Paragraph(getTranslation("start.imprint.phone")),
new Paragraph(getTranslation("start.imprint.email"))); new Paragraph(getTranslation("start.imprint.email")));
// Call to Action
Paragraph ctaText = new Paragraph(getTranslation("start.cta.text"));
ctaText.addClassName("footer-cta");
Paragraph slogan = new Paragraph(getTranslation("start.slogan"));
slogan.addClassName("footer-slogan");
// Versionsnummer // Versionsnummer
Span versionSpan = new Span("Version " + appVersion); Span versionSpan = new Span("Version " + appVersion);
versionSpan.addClassName("footer-version"); versionSpan.addClassName("footer-version");
footer.add(companyTitle, companyInfo, ctaText, slogan, versionSpan); footer.add(companyTitle, companyInfo, versionSpan);
return footer; return footer;
} }

View File

@@ -273,7 +273,6 @@ page.title.add.job=Neuen Auftrag anlegen
# Dashboard # Dashboard
dashboard.welcome=Willkommen, {0}! dashboard.welcome=Willkommen, {0}!
dashboard.footer.copyright=© 2024 VotianLT. Alle Rechte vorbehalten.
dashboard.description=Hier können Sie Ihre Aufträge verwalten, Kunden organisieren und alle wichtigen Funktionen von VotianLT nutzen. dashboard.description=Hier können Sie Ihre Aufträge verwalten, Kunden organisieren und alle wichtigen Funktionen von VotianLT nutzen.
dashboard.system.title=Systemübersicht dashboard.system.title=Systemübersicht
dashboard.system.intro=Verwalten Sie Ihre Geschäftsprozesse effizient mit den folgenden Funktionen dashboard.system.intro=Verwalten Sie Ihre Geschäftsprozesse effizient mit den folgenden Funktionen
@@ -283,8 +282,6 @@ dashboard.feature.customers.title=Kunden
dashboard.feature.customers.desc=Verwalten Sie Ihre Kundenbeziehungen und Kontakte dashboard.feature.customers.desc=Verwalten Sie Ihre Kundenbeziehungen und Kontakte
dashboard.feature.jobs.title=Aufträge dashboard.feature.jobs.title=Aufträge
dashboard.feature.jobs.desc=Erstellen und verwalten Sie Aufträge effizient dashboard.feature.jobs.desc=Erstellen und verwalten Sie Aufträge effizient
dashboard.app.title=Mobile App
dashboard.app.description=Nutzen Sie die VotianLT App für unterwegs und bleiben Sie immer verbunden
# Add App User # Add App User
addappuser.title=Neuen App-Nutzer anlegen addappuser.title=Neuen App-Nutzer anlegen

View File

@@ -243,7 +243,6 @@ page.title.forget.password=Parooli l\u00e4htestamine
page.title.admin.pricetable=Hinnatabel page.title.admin.pricetable=Hinnatabel
page.title.add.job=Uue tellimuse loomine page.title.add.job=Uue tellimuse loomine
dashboard.welcome=Tere tulemast, {0}! dashboard.welcome=Tere tulemast, {0}!
dashboard.footer.copyright=\u00a9 2024 VotianLT. K\u00f5ik \u00f5igused kaitstud.
dashboard.description=Siin saate hallata oma tellimusi, korraldada kliente ja kasutada k\u00f5iki VotianLT olulisi funktsioone. dashboard.description=Siin saate hallata oma tellimusi, korraldada kliente ja kasutada k\u00f5iki VotianLT olulisi funktsioone.
dashboard.system.title=S\u00fcsteemi \u00fclevaade dashboard.system.title=S\u00fcsteemi \u00fclevaade
dashboard.system.intro=Hallake oma \u00e4riprotsesse t\u00f5husalt j\u00e4rgmiste funktsioonidega dashboard.system.intro=Hallake oma \u00e4riprotsesse t\u00f5husalt j\u00e4rgmiste funktsioonidega
@@ -253,8 +252,6 @@ dashboard.feature.customers.title=Kliendid
dashboard.feature.customers.desc=Hallake oma kliendisuhteid ja kontakte dashboard.feature.customers.desc=Hallake oma kliendisuhteid ja kontakte
dashboard.feature.jobs.title=Tellimused dashboard.feature.jobs.title=Tellimused
dashboard.feature.jobs.desc=Looge ja hallake tellimusi t\u00f5husalt dashboard.feature.jobs.desc=Looge ja hallake tellimusi t\u00f5husalt
dashboard.app.title=Mobiilirakendus
dashboard.app.description=Kasutage VotianLT rakendust liikvel olles ja p\u00fcsige alati \u00fchenduses
addappuser.title=Uue \u00e4pikasutaja loomine addappuser.title=Uue \u00e4pikasutaja loomine
addappuser.designation=T\u00e4his addappuser.designation=T\u00e4his
addappuser.phone=Telefon (mobiil) addappuser.phone=Telefon (mobiil)

View File

@@ -273,7 +273,6 @@ page.title.add.job=Create New Job
# Dashboard # Dashboard
dashboard.welcome=Welcome, {0}! dashboard.welcome=Welcome, {0}!
dashboard.footer.copyright=\u00a9 2024 VotianLT. All rights reserved.
dashboard.description=Here you can manage your jobs, organize customers, and use all important features of VotianLT. dashboard.description=Here you can manage your jobs, organize customers, and use all important features of VotianLT.
dashboard.system.title=System Overview dashboard.system.title=System Overview
dashboard.system.intro=Manage your business processes efficiently with the following features dashboard.system.intro=Manage your business processes efficiently with the following features
@@ -283,8 +282,6 @@ dashboard.feature.customers.title=Customers
dashboard.feature.customers.desc=Manage your customer relationships and contacts dashboard.feature.customers.desc=Manage your customer relationships and contacts
dashboard.feature.jobs.title=Jobs dashboard.feature.jobs.title=Jobs
dashboard.feature.jobs.desc=Create and manage jobs efficiently dashboard.feature.jobs.desc=Create and manage jobs efficiently
dashboard.app.title=Mobile App
dashboard.app.description=Use the VotianLT App on the go and stay connected at all times
# Add App User # Add App User
addappuser.title=Create New App User addappuser.title=Create New App User

View File

@@ -273,7 +273,6 @@ page.title.add.job=Crear nuevo pedido
# Dashboard # Dashboard
dashboard.welcome=\u00a1Bienvenido/a, {0}! dashboard.welcome=\u00a1Bienvenido/a, {0}!
dashboard.footer.copyright=\u00a9 2024 VotianLT. Todos los derechos reservados.
dashboard.description=Aqu\u00ed puede gestionar sus pedidos, organizar clientes y utilizar todas las funciones importantes de VotianLT. dashboard.description=Aqu\u00ed puede gestionar sus pedidos, organizar clientes y utilizar todas las funciones importantes de VotianLT.
dashboard.system.title=Vista general del sistema dashboard.system.title=Vista general del sistema
dashboard.system.intro=Gestione sus procesos empresariales de manera eficiente con las siguientes funciones dashboard.system.intro=Gestione sus procesos empresariales de manera eficiente con las siguientes funciones
@@ -283,8 +282,6 @@ dashboard.feature.customers.title=Clientes
dashboard.feature.customers.desc=Gestione sus relaciones con los clientes y contactos dashboard.feature.customers.desc=Gestione sus relaciones con los clientes y contactos
dashboard.feature.jobs.title=Pedidos dashboard.feature.jobs.title=Pedidos
dashboard.feature.jobs.desc=Cree y gestione pedidos de manera eficiente dashboard.feature.jobs.desc=Cree y gestione pedidos de manera eficiente
dashboard.app.title=App m\u00f3vil
dashboard.app.description=Utilice la app de VotianLT en cualquier lugar y permanezca siempre conectado
# Add App User # Add App User
addappuser.title=Crear nuevo usuario de la app addappuser.title=Crear nuevo usuario de la app

View File

@@ -273,7 +273,6 @@ page.title.add.job=Cr\u00e9er une nouvelle mission
# Dashboard # Dashboard
dashboard.welcome=Bienvenue, {0} ! dashboard.welcome=Bienvenue, {0} !
dashboard.footer.copyright=\u00a9 2024 VotianLT. Tous droits r\u00e9serv\u00e9s.
dashboard.description=Ici, vous pouvez g\u00e9rer vos missions, organiser vos clients et acc\u00e9der \u00e0 toutes les fonctions importantes de VotianLT. dashboard.description=Ici, vous pouvez g\u00e9rer vos missions, organiser vos clients et acc\u00e9der \u00e0 toutes les fonctions importantes de VotianLT.
dashboard.system.title=Aper\u00e7u du syst\u00e8me dashboard.system.title=Aper\u00e7u du syst\u00e8me
dashboard.system.intro=G\u00e9rez vos processus m\u00e9tiers efficacement avec les fonctions suivantes dashboard.system.intro=G\u00e9rez vos processus m\u00e9tiers efficacement avec les fonctions suivantes
@@ -283,8 +282,6 @@ dashboard.feature.customers.title=Clients
dashboard.feature.customers.desc=G\u00e9rez vos relations clients et vos contacts dashboard.feature.customers.desc=G\u00e9rez vos relations clients et vos contacts
dashboard.feature.jobs.title=Missions dashboard.feature.jobs.title=Missions
dashboard.feature.jobs.desc=Cr\u00e9ez et g\u00e9rez vos missions efficacement dashboard.feature.jobs.desc=Cr\u00e9ez et g\u00e9rez vos missions efficacement
dashboard.app.title=Application mobile
dashboard.app.description=Utilisez l'application VotianLT en d\u00e9placement et restez toujours connect\u00e9
# Add App User # Add App User
addappuser.title=Cr\u00e9er un nouvel utilisateur d'app addappuser.title=Cr\u00e9er un nouvel utilisateur d'app

View File

@@ -273,7 +273,6 @@ page.title.add.job=Sukurti naują užsakymą
# Dashboard # Dashboard
dashboard.welcome=Sveiki, {0}! dashboard.welcome=Sveiki, {0}!
dashboard.footer.copyright=© 2024 VotianLT. Visos teisės saugomos.
dashboard.description=Čia galite valdyti savo užsakymus, organizuoti klientus ir naudoti visas svarbias VotianLT funkcijas. dashboard.description=Čia galite valdyti savo užsakymus, organizuoti klientus ir naudoti visas svarbias VotianLT funkcijas.
dashboard.system.title=Sistemos apžvalga dashboard.system.title=Sistemos apžvalga
dashboard.system.intro=Efektyviai valdykite savo verslo procesus naudodami šias funkcijas dashboard.system.intro=Efektyviai valdykite savo verslo procesus naudodami šias funkcijas
@@ -283,8 +282,6 @@ dashboard.feature.customers.title=Klientai
dashboard.feature.customers.desc=Valdykite savo klientų ryšius ir kontaktus dashboard.feature.customers.desc=Valdykite savo klientų ryšius ir kontaktus
dashboard.feature.jobs.title=Užsakymai dashboard.feature.jobs.title=Užsakymai
dashboard.feature.jobs.desc=Efektyviai kurkite ir valdykite užsakymus dashboard.feature.jobs.desc=Efektyviai kurkite ir valdykite užsakymus
dashboard.app.title=Mobili programėlė
dashboard.app.description=Naudokite VotianLT programėlę kelionėje ir visada likite prisijungę
# Add App User # Add App User
addappuser.title=Sukurti naują programėlės naudotoją addappuser.title=Sukurti naują programėlės naudotoją

View File

@@ -273,7 +273,6 @@ page.title.add.job=Izveidot jaunu uzdevumu
# Dashboard # Dashboard
dashboard.welcome=Laipni lūgti, {0}! dashboard.welcome=Laipni lūgti, {0}!
dashboard.footer.copyright=© 2024 VotianLT. Visas tiesības aizsargātas.
dashboard.description=Šeit jūs varat pārvaldīt savus uzdevumus, organizēt klientus un izmantot visas svarīgās VotianLT funkcijas. dashboard.description=Šeit jūs varat pārvaldīt savus uzdevumus, organizēt klientus un izmantot visas svarīgās VotianLT funkcijas.
dashboard.system.title=Sistēmas pārskats dashboard.system.title=Sistēmas pārskats
dashboard.system.intro=Efektīvi pārvaldiet savus biznesa procesus ar šādām funkcijām dashboard.system.intro=Efektīvi pārvaldiet savus biznesa procesus ar šādām funkcijām
@@ -283,8 +282,6 @@ dashboard.feature.customers.title=Klienti
dashboard.feature.customers.desc=Pārvaldiet savas klientu attiecības un kontaktus dashboard.feature.customers.desc=Pārvaldiet savas klientu attiecības un kontaktus
dashboard.feature.jobs.title=Uzdevumi dashboard.feature.jobs.title=Uzdevumi
dashboard.feature.jobs.desc=Izveidojiet un pārvaldiet uzdevumus efektīvi dashboard.feature.jobs.desc=Izveidojiet un pārvaldiet uzdevumus efektīvi
dashboard.app.title=Mobilā lietotne
dashboard.app.description=Izmantojiet VotianLT lietotni ceļā un palieciet vienmēr savienoti
# Add App User # Add App User
addappuser.title=Izveidot jaunu lietotnes lietotāju addappuser.title=Izveidot jaunu lietotnes lietotāju

View File

@@ -273,7 +273,6 @@ page.title.add.job=Dodaj nowe zlecenie
# Dashboard # Dashboard
dashboard.welcome=Witaj, {0}! dashboard.welcome=Witaj, {0}!
dashboard.footer.copyright=\u00a9 2024 VotianLT. Wszelkie prawa zastrze\u017cone.
dashboard.description=Tutaj mo\u017cesz zarz\u0105dza\u0107 swoimi zleceniami, organizowa\u0107 klient\u00f3w i korzysta\u0107 ze wszystkich wa\u017cnych funkcji VotianLT. dashboard.description=Tutaj mo\u017cesz zarz\u0105dza\u0107 swoimi zleceniami, organizowa\u0107 klient\u00f3w i korzysta\u0107 ze wszystkich wa\u017cnych funkcji VotianLT.
dashboard.system.title=Przegl\u0105d systemu dashboard.system.title=Przegl\u0105d systemu
dashboard.system.intro=Zarz\u0105dzaj swoimi procesami biznesowymi efektywnie za pomoc\u0105 nast\u0119puj\u0105cych funkcji dashboard.system.intro=Zarz\u0105dzaj swoimi procesami biznesowymi efektywnie za pomoc\u0105 nast\u0119puj\u0105cych funkcji
@@ -283,8 +282,6 @@ dashboard.feature.customers.title=Klienci
dashboard.feature.customers.desc=Zarz\u0105dzaj relacjami z klientami i kontaktami dashboard.feature.customers.desc=Zarz\u0105dzaj relacjami z klientami i kontaktami
dashboard.feature.jobs.title=Zlecenia dashboard.feature.jobs.title=Zlecenia
dashboard.feature.jobs.desc=Tworzenie i zarz\u0105dzanie zleceniami w spos\u00f3b efektywny dashboard.feature.jobs.desc=Tworzenie i zarz\u0105dzanie zleceniami w spos\u00f3b efektywny
dashboard.app.title=Aplikacja mobilna
dashboard.app.description=Korzystaj z aplikacji VotianLT w podr\u00f3\u017cy i b\u0105d\u017a zawsze po\u0142\u0105czony
# Add App User # Add App User
addappuser.title=Dodaj nowego u\u017cytkownika aplikacji addappuser.title=Dodaj nowego u\u017cytkownika aplikacji

View File

@@ -273,7 +273,6 @@ page.title.add.job=Создать новый заказ
# Dashboard # Dashboard
dashboard.welcome=Добро пожаловать, {0}! dashboard.welcome=Добро пожаловать, {0}!
dashboard.footer.copyright=\u00a9 2024 VotianLT. Все права защищены.
dashboard.description=Здесь вы можете управлять своими заказами, организовывать клиентов и использовать все важные функции VotianLT. dashboard.description=Здесь вы можете управлять своими заказами, организовывать клиентов и использовать все важные функции VotianLT.
dashboard.system.title=Обзор системы dashboard.system.title=Обзор системы
dashboard.system.intro=Эффективно управляйте своими бизнес-процессами с помощью следующих функций dashboard.system.intro=Эффективно управляйте своими бизнес-процессами с помощью следующих функций
@@ -283,8 +282,6 @@ dashboard.feature.customers.title=Клиенты
dashboard.feature.customers.desc=Управляйте отношениями с клиентами и контактами dashboard.feature.customers.desc=Управляйте отношениями с клиентами и контактами
dashboard.feature.jobs.title=Заказы dashboard.feature.jobs.title=Заказы
dashboard.feature.jobs.desc=Создавайте и управляйте заказами эффективно dashboard.feature.jobs.desc=Создавайте и управляйте заказами эффективно
dashboard.app.title=Мобильное приложение
dashboard.app.description=Используйте приложение VotianLT в дороге и оставайтесь всегда на связи
# Add App User # Add App User
addappuser.title=Создать нового пользователя приложения addappuser.title=Создать нового пользователя приложения

View File

@@ -273,7 +273,6 @@ page.title.add.job=Yeni \u0130\u015f Olu\u015ftur
# Dashboard # Dashboard
dashboard.welcome=Ho\u015f geldiniz, {0}! dashboard.welcome=Ho\u015f geldiniz, {0}!
dashboard.footer.copyright=\u00a9 2024 VotianLT. T\u00fcm haklar\u0131 sakl\u0131d\u0131r.
dashboard.description=Burada i\u015flerinizi y\u00f6netebilir, m\u00fc\u015fterilerinizi organize edebilir ve VotianLT'nin t\u00fcm \u00f6nemli \u00f6zelliklerini kullanabilirsiniz. dashboard.description=Burada i\u015flerinizi y\u00f6netebilir, m\u00fc\u015fterilerinizi organize edebilir ve VotianLT'nin t\u00fcm \u00f6nemli \u00f6zelliklerini kullanabilirsiniz.
dashboard.system.title=Sisteme Genel Bak\u0131\u015f dashboard.system.title=Sisteme Genel Bak\u0131\u015f
dashboard.system.intro=A\u015fa\u011f\u0131daki \u00f6zelliklerle i\u015f s\u00fcre\u00e7lerinizi verimli bir \u015fekilde y\u00f6netin dashboard.system.intro=A\u015fa\u011f\u0131daki \u00f6zelliklerle i\u015f s\u00fcre\u00e7lerinizi verimli bir \u015fekilde y\u00f6netin
@@ -283,8 +282,6 @@ dashboard.feature.customers.title=M\u00fc\u015fteriler
dashboard.feature.customers.desc=M\u00fc\u015fteri ili\u015fkilerinizi ve ki\u015filerinizi y\u00f6netin dashboard.feature.customers.desc=M\u00fc\u015fteri ili\u015fkilerinizi ve ki\u015filerinizi y\u00f6netin
dashboard.feature.jobs.title=\u0130\u015fler dashboard.feature.jobs.title=\u0130\u015fler
dashboard.feature.jobs.desc=\u0130\u015flerinizi verimli bir \u015fekilde olu\u015fturun ve y\u00f6netin dashboard.feature.jobs.desc=\u0130\u015flerinizi verimli bir \u015fekilde olu\u015fturun ve y\u00f6netin
dashboard.app.title=Mobil Uygulama
dashboard.app.description=Hareket halindeyken VotianLT Uygulamas\u0131n\u0131 kullan\u0131n ve her zaman ba\u011fl\u0131 kal\u0131n
# Add App User # Add App User
addappuser.title=Yeni Uygulama Kullan\u0131c\u0131s\u0131 Olu\u015ftur addappuser.title=Yeni Uygulama Kullan\u0131c\u0131s\u0131 Olu\u015ftur