style: UI-Verbesserungen für EditProfile, Imprint und Statistics Views

This commit is contained in:
2026-03-20 15:48:15 +01:00
parent c2bc4e4900
commit d8ee804019
4 changed files with 33 additions and 27 deletions

View File

@@ -1385,7 +1385,14 @@ vaadin-grid-tree-toggle[expanded] .nav-expand-icon {
justify-content: flex-end; justify-content: flex-end;
} }
.statistics-header, .statistics-header {
width: min(1240px, 100%);
margin: 0 auto;
border: none;
background: transparent;
box-shadow: none;
}
.statistics-input-panel { .statistics-input-panel {
width: min(1240px, 100%); width: min(1240px, 100%);
margin: 0 auto; margin: 0 auto;
@@ -1402,6 +1409,7 @@ vaadin-grid-tree-toggle[expanded] .nav-expand-icon {
background: linear-gradient(180deg, rgba(238, 244, 255, 0.75), rgba(248, 250, 252, 0.96)); background: linear-gradient(180deg, rgba(238, 244, 255, 0.75), rgba(248, 250, 252, 0.96));
border-radius: 30px; border-radius: 30px;
box-shadow: var(--app-shadow-lg); box-shadow: var(--app-shadow-lg);
box-sizing: border-box;
} }
.station-tile.validated { .station-tile.validated {

View File

@@ -1,6 +1,7 @@
package de.assecutor.votianlt.pages.view; package de.assecutor.votianlt.pages.view;
import com.vaadin.flow.component.button.Button; import com.vaadin.flow.component.button.Button;
import de.assecutor.votianlt.pages.base.ui.component.ViewToolbar;
import com.vaadin.flow.component.button.ButtonVariant; import com.vaadin.flow.component.button.ButtonVariant;
import com.vaadin.flow.component.checkbox.Checkbox; import com.vaadin.flow.component.checkbox.Checkbox;
import com.vaadin.flow.component.formlayout.FormLayout; import com.vaadin.flow.component.formlayout.FormLayout;
@@ -111,6 +112,10 @@ public class EditProfileView extends HorizontalLayout implements HasDynamicTitle
formColumn.setHeightFull(); formColumn.setHeightFull();
formColumn.setPadding(false); formColumn.setPadding(false);
formColumn.setSpacing(false); formColumn.setSpacing(false);
ViewToolbar toolbar = new ViewToolbar(getTranslation("page.title.profile.edit"));
formColumn.add(toolbar);
// TabSheet // TabSheet
TabSheet tabSheet = new TabSheet(); TabSheet tabSheet = new TabSheet();
tabSheet.setSizeFull(); tabSheet.setSizeFull();

View File

@@ -2,6 +2,7 @@ package de.assecutor.votianlt.pages.view;
import com.vaadin.flow.component.html.Div; import com.vaadin.flow.component.html.Div;
import com.vaadin.flow.component.orderedlayout.VerticalLayout; import com.vaadin.flow.component.orderedlayout.VerticalLayout;
import de.assecutor.votianlt.pages.base.ui.component.ViewToolbar;
import org.springframework.core.io.ClassPathResource; import org.springframework.core.io.ClassPathResource;
import com.vaadin.flow.router.HasDynamicTitle; import com.vaadin.flow.router.HasDynamicTitle;
import com.vaadin.flow.router.Route; import com.vaadin.flow.router.Route;
@@ -13,9 +14,16 @@ public class ImprintView extends VerticalLayout implements HasDynamicTitle {
public ImprintView() { public ImprintView() {
setSizeFull(); setSizeFull();
setPadding(true); setPadding(true);
setSpacing(true); setSpacing(false);
setAlignItems(Alignment.CENTER); addClassName("form-page");
addClassNames("data-view", "form-shell");
VerticalLayout content = new VerticalLayout();
content.setWidthFull();
content.setPadding(false);
content.setSpacing(false);
ViewToolbar toolbar = new ViewToolbar(getTranslation("page.title.imprint"));
content.add(toolbar);
try { try {
// Load HTML content from resources // Load HTML content from resources
@@ -27,15 +35,17 @@ public class ImprintView extends VerticalLayout implements HasDynamicTitle {
imprintDiv.addClassNames("form-card", "form-shell"); imprintDiv.addClassNames("form-card", "form-shell");
imprintDiv.getElement().setProperty("innerHTML", htmlContent); imprintDiv.getElement().setProperty("innerHTML", htmlContent);
add(imprintDiv); content.add(imprintDiv);
} catch (Exception e) { } catch (Exception e) {
// Fallback content in case of error // Fallback content in case of error
Div errorDiv = new Div(); Div errorDiv = new Div();
errorDiv.addClassNames("form-card", "form-shell"); errorDiv.addClassNames("form-card", "form-shell");
errorDiv.setText(getTranslation("imprint.error", e.getMessage())); errorDiv.setText(getTranslation("imprint.error", e.getMessage()));
add(errorDiv); content.add(errorDiv);
} }
add(content);
} }
@Override @Override

View File

@@ -7,7 +7,7 @@ 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.dependency.JavaScript; import com.vaadin.flow.component.dependency.JavaScript;
import com.vaadin.flow.component.html.Div; import com.vaadin.flow.component.html.Div;
import com.vaadin.flow.component.html.H2; import de.assecutor.votianlt.pages.base.ui.component.ViewToolbar;
import com.vaadin.flow.component.html.Paragraph; import com.vaadin.flow.component.html.Paragraph;
import com.vaadin.flow.component.html.Span; import com.vaadin.flow.component.html.Span;
import com.vaadin.flow.component.icon.Icon; import com.vaadin.flow.component.icon.Icon;
@@ -56,7 +56,7 @@ public class StatisticsView extends VerticalLayout implements HasDynamicTitle {
addClassName("statistics-chat-view"); addClassName("statistics-chat-view");
// Header // Header
HorizontalLayout header = createHeader(); ViewToolbar header = createHeader();
add(header); add(header);
// Chat Container mit Scroll // Chat Container mit Scroll
@@ -81,25 +81,8 @@ public class StatisticsView extends VerticalLayout implements HasDynamicTitle {
add(inputArea); add(inputArea);
} }
private HorizontalLayout createHeader() { private ViewToolbar createHeader() {
HorizontalLayout header = new HorizontalLayout(); return new ViewToolbar(getTranslation("statistics.title"));
header.setWidthFull();
header.setPadding(true);
header.setAlignItems(FlexComponent.Alignment.CENTER);
header.addClassName("statistics-header");
Icon aiIcon = VaadinIcon.MAGIC.create();
aiIcon.getStyle().set("color", "var(--lumo-primary-color)");
H2 title = new H2(getTranslation("statistics.title"));
title.getStyle().set("margin", "0").set("font-size", "var(--lumo-font-size-xl)");
Span subtitle = new Span(getTranslation("statistics.subtitle"));
subtitle.getStyle().set("color", "var(--lumo-secondary-text-color)").set("font-size", "var(--lumo-font-size-s)")
.set("margin-left", "var(--lumo-space-m)");
header.add(aiIcon, title, subtitle);
return header;
} }
private HorizontalLayout createInputArea() { private HorizontalLayout createInputArea() {