From 12485b4d075b02fc544b8ef6e3e87b15112a42a4 Mon Sep 17 00:00:00 2001 From: Codex Agent Date: Tue, 3 Feb 2026 21:13:09 +0100 Subject: [PATCH] Refine guest upload camera UI --- resources/js/guest/components/BottomNav.tsx | 8 +- resources/js/guest/components/Header.tsx | 2 +- .../js/guest/components/settings-sheet.tsx | 6 +- resources/js/guest/pages/UploadPage.tsx | 236 ++++++++++-------- 4 files changed, 144 insertions(+), 108 deletions(-) diff --git a/resources/js/guest/components/BottomNav.tsx b/resources/js/guest/components/BottomNav.tsx index ca81168a..302f232d 100644 --- a/resources/js/guest/components/BottomNav.tsx +++ b/resources/js/guest/components/BottomNav.tsx @@ -127,14 +127,18 @@ export default function BottomNav() { diff --git a/resources/js/guest/components/Header.tsx b/resources/js/guest/components/Header.tsx index a279fcde..6dfe8eb9 100644 --- a/resources/js/guest/components/Header.tsx +++ b/resources/js/guest/components/Header.tsx @@ -404,7 +404,7 @@ function NotificationButton({ center, eventToken, open, onToggle, panelRef, butt ref={buttonRef} type="button" onClick={onToggle} - className="relative rounded-full bg-white/15 p-2 text-current transition hover:bg-white/30" + className="relative flex h-10 w-10 items-center justify-center rounded-2xl border border-white/25 bg-white/15 text-current shadow-lg shadow-black/20 backdrop-blur transition hover:border-white/40 hover:bg-white/25 focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-white/60" aria-label={open ? t('header.notifications.close', 'Benachrichtigungen schließen') : t('header.notifications.open', 'Benachrichtigungen anzeigen')} > diff --git a/resources/js/guest/components/settings-sheet.tsx b/resources/js/guest/components/settings-sheet.tsx index 65a404c7..b4d1e884 100644 --- a/resources/js/guest/components/settings-sheet.tsx +++ b/resources/js/guest/components/settings-sheet.tsx @@ -121,7 +121,11 @@ export function SettingsSheet() { return ( - diff --git a/resources/js/guest/pages/UploadPage.tsx b/resources/js/guest/pages/UploadPage.tsx index 9b385113..439406fe 100644 --- a/resources/js/guest/pages/UploadPage.tsx +++ b/resources/js/guest/pages/UploadPage.tsx @@ -19,6 +19,7 @@ import { useGuestTaskProgress } from '../hooks/useGuestTaskProgress'; import { cn } from '@/lib/utils'; import { AlertTriangle, + Check, Camera, ChevronDown, Grid3X3, @@ -30,6 +31,7 @@ import { Timer, Sparkles, FlipHorizontal, + X, Zap, ZapOff, } from 'lucide-react'; @@ -1237,7 +1239,11 @@ const renderWithDialog = (content: ReactNode, wrapperClassName = 'space-y-6 pb-[ const countdownDegrees = Math.round(countdownProgress * 360); const controlIconButtonBase = 'flex h-10 w-10 items-center justify-center rounded-full border border-white/25 bg-white/10 text-white shadow-sm backdrop-blur transition hover:border-white/40 hover:bg-white/15 focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-white/60'; - const cameraControlsInset = 'calc(env(safe-area-inset-bottom, 0px) + 72px)'; + const actionIconButtonBase = + 'flex h-14 w-14 items-center justify-center rounded-2xl border border-white/25 bg-white/10 text-white shadow-lg shadow-black/25 backdrop-blur transition hover:border-white/40 hover:bg-white/20 focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-white/60 disabled:pointer-events-none disabled:opacity-50'; + const actionDockClass = + 'rounded-[28px] border border-white/15 bg-white/10 p-4 shadow-2xl backdrop-blur'; + const cameraControlsInset = 'calc(env(safe-area-inset-bottom, 0px) + 104px)'; return renderWithDialog( <> @@ -1398,45 +1404,6 @@ const renderWithDialog = (content: ReactNode, wrapperClassName = 'space-y-6 pb-[ {t('upload.controls.toggleMirror')} )} - - - - @@ -1495,26 +1462,16 @@ const renderWithDialog = (content: ReactNode, wrapperClassName = 'space-y-6 pb-[ )} -
- - +
{mode === 'review' && reviewPhoto ? ( -
+
{uploadsRequireApproval ? ( -
+

{t('upload.review.noticeTitle', 'Uploads werden geprüft')}

{t('upload.review.noticeBody', 'Dein Foto erscheint, sobald es freigegeben wurde.')}

) : null} -
+

{t('upload.liveShow.title', 'Live-Show')}

@@ -1534,65 +1491,136 @@ const renderWithDialog = (content: ReactNode, wrapperClassName = 'space-y-6 pb-[ : t('upload.liveShow.reviewed', 'Wird nach Freigabe für die Live-Show angezeigt.')}

-
- +
+
) : ( -
- {!isCountdownActive && mode !== 'uploading' && ( - - )} - {isCountdownActive && ( -
- )} -
- +
+
+
+ +
+ +
+ {!isCountdownActive && mode !== 'uploading' && ( + + )} + {isCountdownActive && ( +
+ )} +
+ +
+ +
+ +
+
+ +
+ + +
)} - -