Update guest v2 branding and theming
This commit is contained in:
@@ -28,6 +28,10 @@ function resolveThemeVariant(
|
||||
? 'dark'
|
||||
: null;
|
||||
|
||||
if (appearanceOverride) {
|
||||
return appearanceOverride;
|
||||
}
|
||||
|
||||
if (mode === 'dark') {
|
||||
return 'dark';
|
||||
}
|
||||
@@ -36,10 +40,6 @@ function resolveThemeVariant(
|
||||
return 'light';
|
||||
}
|
||||
|
||||
if (appearanceOverride) {
|
||||
return appearanceOverride;
|
||||
}
|
||||
|
||||
if (backgroundPrefers) {
|
||||
return backgroundPrefers;
|
||||
}
|
||||
|
||||
28
resources/js/guest-v2/lib/guestTheme.ts
Normal file
28
resources/js/guest-v2/lib/guestTheme.ts
Normal file
@@ -0,0 +1,28 @@
|
||||
import { DEFAULT_EVENT_BRANDING, useOptionalEventBranding } from '@/guest/context/EventBrandingContext';
|
||||
import type { EventBranding } from '@/guest/types/event-branding';
|
||||
import { useAppearance, type Appearance } from '@/hooks/use-appearance';
|
||||
import { resolveGuestThemeName } from './brandingTheme';
|
||||
|
||||
export function resolveGuestThemeVariant(branding: EventBranding, appearance: Appearance): 'light' | 'dark' {
|
||||
const themeName = resolveGuestThemeName(branding, appearance);
|
||||
return themeName === 'guestNight' ? 'dark' : 'light';
|
||||
}
|
||||
|
||||
export function useGuestThemeVariant(brandingOverride?: EventBranding | null): {
|
||||
isDark: boolean;
|
||||
variant: 'light' | 'dark';
|
||||
themeName: 'guestLight' | 'guestNight';
|
||||
branding: EventBranding;
|
||||
} {
|
||||
const { appearance, resolved } = useAppearance() as {
|
||||
appearance?: Appearance;
|
||||
resolved?: 'light' | 'dark';
|
||||
};
|
||||
const brandingContext = useOptionalEventBranding();
|
||||
const branding = brandingOverride ?? brandingContext?.branding ?? DEFAULT_EVENT_BRANDING;
|
||||
const appearanceMode = appearance ?? (resolved === 'dark' ? 'dark' : 'light');
|
||||
const themeName = resolveGuestThemeName(branding, appearanceMode);
|
||||
const variant = themeName === 'guestNight' ? 'dark' : 'light';
|
||||
|
||||
return { isDark: variant === 'dark', variant, themeName, branding };
|
||||
}
|
||||
18
resources/js/guest-v2/lib/toast.ts
Normal file
18
resources/js/guest-v2/lib/toast.ts
Normal file
@@ -0,0 +1,18 @@
|
||||
export type GuestToastPayload = {
|
||||
text: string;
|
||||
type?: 'success' | 'error' | 'info';
|
||||
action?: { label: string; onClick: () => void };
|
||||
durationMs?: number;
|
||||
};
|
||||
|
||||
export function pushGuestToast(detail: GuestToastPayload) {
|
||||
if (typeof window === 'undefined') {
|
||||
return;
|
||||
}
|
||||
|
||||
try {
|
||||
window.dispatchEvent(new CustomEvent('guest-toast', { detail }));
|
||||
} catch (error) {
|
||||
console.warn('Dispatching toast event failed', error);
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user