diff --git a/.gitignore b/.gitignore index 23d3d029..982c70ff 100644 --- a/.gitignore +++ b/.gitignore @@ -51,3 +51,6 @@ e2e/playwright-report e2e/.test-state.json e2e/.env.test frontend/static/config/config.json + +# Playwright MCP +.playwright-mcp diff --git a/CHANGELOG.md b/CHANGELOG.md index b44fba23..bfbce5ae 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -6,8 +6,26 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0 ## [Unreleased] +### Added + +- [home] Replace Navigation grid on homepage with a time-based greeting component that addresses the current user by their identifier (morning/afternoon/evening/night, DE + EN). + +### Changed + +- [global] Replace broken date/ID emojis with Carbon `EventSchedule` and `Identification` icons across admin and feature components (Identifiers, Toggles, LinkPresets, Activities, Jokes, JokeOfTheDay). +- [global] Redesign login screen: add logo, `tilloh.dev` title, and tagline above the login input; left-align branding with the input field; compensate PNG transparent padding via negative margin. +- [global] Hide header and redirect to home route when no valid identifier is set; login input is shown full-screen without navigation elements. +- [global] Replace emoji storage-state indicator (🌐/📴) in header with colored Carbon Cloud/CloudOffline icons displayed inline after the page title. +- [global] Increase header route icon size to `1em` (relative to h2 font-size) and align it using flexbox with `gap: 0.3em`. + +### Fixed + +- [global] Fix GlobalMenu showing apps with inactive toggles: `getToggleValue` was defaulting to `true` when a toggle key was missing or unreachable, causing all apps to appear. Changed default to `false` so apps are only shown when their toggle is explicitly enabled. +- [global] Fix letter-spacing not applying to text elements: Carbon CSS explicitly sets `letter-spacing` via its own tokens on `p`, `h1`, etc., overriding the inherited `body` value. Added `body * { letter-spacing: var(--letter-spacing) !important }` to enforce the global spacing across all child elements. + ### Changed +- [todo] Replace raw view-toggle buttons with Carbon Buttons (ghost/secondary/danger); add vertical divider between view toggles and cleanup button; replace raw mobile-edit button with Carbon ghost Button; edit button now always visible directly before delete button; add subtle dark row background with hover highlight; add `--default_padding` gap between edit and delete buttons; indent category headers by `--default_padding / 2`. - [global] Translate all German source code comments to English across e2e specs, frontend components, and utility files. ### Added diff --git a/e2e/tests/auth/login.spec.ts b/e2e/tests/auth/login.spec.ts index f3278cfd..a3900982 100644 --- a/e2e/tests/auth/login.spec.ts +++ b/e2e/tests/auth/login.spec.ts @@ -46,4 +46,19 @@ test.describe('Login-Gate', () => { await expect(notification).toBeVisible({ timeout: 10_000 }); await expect(passwordInput).toBeVisible(); }); + + test('ungültiger Identifier im localStorage zeigt Login-Gate', async ({ page }) => { + // Set an invalid identifier in localStorage before navigation + await page.goto(FRONTEND_URL); + await page.evaluate(() => + localStorage.setItem('identifier', 'invalid-stale-identifier-xyz'), + ); + await page.reload(); + + // Layout verifies on mount and clears invalid identifier → login gate appears + await expect(page.locator('input[type="password"]')).toBeVisible({ + timeout: 15_000, + }); + await expect(page.locator('main')).not.toBeVisible(); + }); }); diff --git a/frontend/src/lib/components/admin/Activities.svelte b/frontend/src/lib/components/admin/Activities.svelte index f0b9c379..004b7bc4 100644 --- a/frontend/src/lib/components/admin/Activities.svelte +++ b/frontend/src/lib/components/admin/Activities.svelte @@ -5,7 +5,9 @@ import AccordionItem from 'carbon-components-svelte/src/Accordion/AccordionItem.svelte'; import CopyButton from 'carbon-components-svelte/src/CopyButton/CopyButton.svelte'; import InlineNotification from 'carbon-components-svelte/src/Notification/InlineNotification.svelte'; + import EventSchedule from 'carbon-icons-svelte/lib/EventSchedule.svelte'; import FaceActivated from 'carbon-icons-svelte/lib/FaceActivated.svelte'; + import Identification from 'carbon-icons-svelte/lib/Identification.svelte'; import Information from 'carbon-icons-svelte/lib/Information.svelte'; import Link from 'carbon-icons-svelte/lib/Link.svelte'; import User from 'carbon-icons-svelte/lib/User.svelte'; @@ -56,12 +58,8 @@
- 📅{new Date(activity.updated).toLocaleString('de-DE')} -
-- 🆔{activity.id} -
+- ✨{new Date(identifier.created).toLocaleString('de-DE')} - 📅{new Date(identifier.updated).toLocaleString('de-DE')} -
-- 🆔{identifier._id} -
+