+
{children}
);
diff --git a/apps/cockpit/src/components/Transition/FadeTransition.tsx b/apps/cockpit/src/components/Transition/FadeTransition.tsx
index f4a0caf..09a34de 100644
--- a/apps/cockpit/src/components/Transition/FadeTransition.tsx
+++ b/apps/cockpit/src/components/Transition/FadeTransition.tsx
@@ -47,7 +47,12 @@ export function FadeTransition({ children, transitionKey, durationMs = 300, clas
return (
{visibleChildren}
diff --git a/apps/cockpit/src/domain/weather/WeatherWidget.tsx b/apps/cockpit/src/domain/weather/WeatherWidget.tsx
index 76216dd..b54e770 100644
--- a/apps/cockpit/src/domain/weather/WeatherWidget.tsx
+++ b/apps/cockpit/src/domain/weather/WeatherWidget.tsx
@@ -1,9 +1,8 @@
-import { FadeTransition } from '@/components/Transition/FadeTransition.tsx';
-import { Section } from '@/components/Section/Section.tsx';
import { WeatherCurrentSummary } from '@/domain/weather/WeatherCurrentSummary.tsx';
import type { WeatherDataLoaded, WeatherLocation } from '@/domain/weather/model/model.ts';
import { Header } from '@/domain/weather/Header.tsx';
import { useWeatherSnapshot } from '@/domain/weather/model/useWeatherSnapshot.ts';
+import { FadeTransition } from '@/components/Transition/FadeTransition.tsx';
type WeatherWidgetProps = {
location: WeatherLocation;
@@ -14,12 +13,9 @@ export function WeatherWidget({ location }: WeatherWidgetProps) {
return (
- {weather.status === 'error' && }
- {weather.status === 'loaded' && (
-
- )}
+ {weather.status === 'loading' && }
+ {weather.status === 'error' && weather.errorMessage}
+ {weather.status === 'loaded' && }
);
}
@@ -37,3 +33,23 @@ function WeatherWidgetContent({ location, weather }: WeatherWidgetContentProps)
);
}
+
+function Skeleton() {
+ return (
+
+ );
+}
diff --git a/apps/cockpit/src/domain/weather/model/model.ts b/apps/cockpit/src/domain/weather/model/model.ts
index 9908e64..ae2bdfa 100644
--- a/apps/cockpit/src/domain/weather/model/model.ts
+++ b/apps/cockpit/src/domain/weather/model/model.ts
@@ -22,6 +22,14 @@ export const LOCATION_OBERNHEIM: WeatherLocation = {
timezone: 'Europe/Berlin',
};
+export const LOCATION_TUEBINGEN: WeatherLocation = {
+ id: 'tuebingen',
+ label: 'Tübingen',
+ latitude: 48.31,
+ longitude: 9.3,
+ timezone: 'Europe/Berlin',
+};
+
export interface HourlyTemperaturePoint {
timeIso: string;
temperatureC: number;
diff --git a/apps/cockpit/src/routes/finance/transactions.tsx b/apps/cockpit/src/routes/finance/transactions.tsx
index 1e0b92d..0260e64 100644
--- a/apps/cockpit/src/routes/finance/transactions.tsx
+++ b/apps/cockpit/src/routes/finance/transactions.tsx
@@ -1,5 +1,6 @@
import { createFileRoute } from '@tanstack/react-router';
import { Transactions } from '@/domain/finance/transactions/Transactions.tsx';
+import { GridLayout } from '@/components/ContentLayout/GridLayout.tsx';
export const Route = createFileRoute('/finance/transactions')({
component: TransactionsRoute,
@@ -9,5 +10,9 @@ export const Route = createFileRoute('/finance/transactions')({
});
function TransactionsRoute() {
- return
;
+ return (
+
+
+
+ );
}
diff --git a/apps/cockpit/src/routes/index.tsx b/apps/cockpit/src/routes/index.tsx
index 4b8b268..f7295fe 100644
--- a/apps/cockpit/src/routes/index.tsx
+++ b/apps/cockpit/src/routes/index.tsx
@@ -1,20 +1,25 @@
import { createFileRoute } from '@tanstack/react-router';
import { WeatherWidget } from '@/domain/weather/WeatherWidget.tsx';
-import { LOCATION_MOESSINGEN, LOCATION_OBERNHEIM } from '@/domain/weather/model/model.ts';
+import { LOCATION_MOESSINGEN, LOCATION_OBERNHEIM, LOCATION_TUEBINGEN } from '@/domain/weather/model/model.ts';
import { GridLayout } from '@/components/ContentLayout/GridLayout.tsx';
+import { Section } from '@/components/Section/Section.tsx';
export const Route = createFileRoute('/')({
- component: App,
+ component: Overview,
});
-function App() {
+function Overview() {
return (
-
-
- {/*
-
- */}
+
+
+
);
}
diff --git a/apps/cockpit/src/styles.css b/apps/cockpit/src/styles.css
index d64eb99..d1a1edd 100644
--- a/apps/cockpit/src/styles.css
+++ b/apps/cockpit/src/styles.css
@@ -11,6 +11,7 @@
--color-section-border: #d6dde6;
--color-sem-positive: oklch(59.6% 0.145 163.225);
--color-sem-negative: oklch(58.6% 0.253 17.585);
+ --color-skeleton: #e6e6e6;
}
@media (prefers-color-scheme: dark) {
@@ -25,14 +26,14 @@
--color-section-border: #272727;
--color-sem-positive: oklch(84.5% 0.143 164.978);
--color-sem-negative: oklch(71.2% 0.194 13.428);
+ --color-skeleton: #272727;
}
}
body {
@apply m-0 bg-(--color-bg) text-(--color-txt) min-h-screen w-full overflow-hidden;
- font-family:
- -apple-system, BlinkMacSystemFont, 'Segoe UI', 'Roboto', 'Oxygen', 'Ubuntu', 'Cantarell', 'Fira Sans', 'Droid Sans',
- 'Helvetica Neue', sans-serif;
+ font-family: -apple-system, BlinkMacSystemFont, 'Segoe UI', 'Roboto', 'Oxygen', 'Ubuntu', 'Cantarell', 'Fira Sans', 'Droid Sans',
+ 'Helvetica Neue', sans-serif;
-webkit-font-smoothing: antialiased;
-moz-osx-font-smoothing: grayscale;
}
From 35e0e9c0fb7d6d49c58b1543634302c2dd46dede Mon Sep 17 00:00:00 2001
From: =?UTF-8?q?Matth=C3=A4us=20Mayer?=
<7984982+theMattCode@users.noreply.github.com>
Date: Thu, 2 Jul 2026 07:55:50 +0200
Subject: [PATCH 5/8] Fix Transactions layout
#6
---
.../KPI/KPISection.tsx/KPISection.tsx | 2 +-
.../finance/transactions/Transactions.tsx | 63 ++++++++-----------
2 files changed, 28 insertions(+), 37 deletions(-)
diff --git a/apps/cockpit/src/components/KPI/KPISection.tsx/KPISection.tsx b/apps/cockpit/src/components/KPI/KPISection.tsx/KPISection.tsx
index 88a69d8..7bb8145 100644
--- a/apps/cockpit/src/components/KPI/KPISection.tsx/KPISection.tsx
+++ b/apps/cockpit/src/components/KPI/KPISection.tsx/KPISection.tsx
@@ -9,7 +9,7 @@ interface Props {
export function KPISection({ label, value, tone }: Props) {
return (
-
+
{label}
- {data && (
- <>
- {data?.summary && (
-
-
-
- )}
- {error && (
-
- {error.message}
-
- )}
-
- {loading &&
Loading transactions...
}
- {/* Transaction list should have kind of toolbar
+ <>
+ {data?.summary &&
}
+ {error && (
+
+ {error.message}
+
+ )}
+
+ {loading &&
Loading transactions...
}
+ {/* Transaction list should have kind of toolbar
setDateRangeMonth(event.target.value)} />
*/}
- {data &&
}
- >
- )}
-
+ {data &&
}
+ >
);
}
@@ -175,7 +166,7 @@ function TransactionForm({
}: TransactionFormProps) {
const updateForm = (patch: Partial
) => onChange({ ...form, ...patch });
return (
-