Neue Branding-Page und Gäste-PWA reagiert nun auf Branding-Einstellungen vom event-admin. Implemented local Google Fonts pipeline and admin UI selects for branding and invites.
- Added fonts:sync-google command (uses GOOGLE_FONTS_API_KEY, generates /public/fonts/google files, manifest, CSS, cache flush) and
exposed manifest via new GET /api/v1/tenant/fonts endpoint with fallbacks for existing local fonts.
- Imported generated fonts CSS, added API client + font loader hook, and wired branding page font fields to searchable selects (with
custom override) that auto-load selected fonts.
- Invites layout editor now offers font selection per element with runtime font loading for previews/export alignment.
- New tests cover font sync command and font manifest API.
Tests run: php artisan test --filter=Fonts --testsuite=Feature.
Note: repository already has other modified files (e.g., EventPublicController, SettingsStoreRequest, guest components, etc.); left
untouched. Run php artisan fonts:sync-google after setting the API key to populate /public/fonts/google.
This commit is contained in:
@@ -6,6 +6,46 @@ export interface EventBrandingPayload {
|
||||
background_color?: string | null;
|
||||
font_family?: string | null;
|
||||
logo_url?: string | null;
|
||||
surface_color?: string | null;
|
||||
heading_font?: string | null;
|
||||
body_font?: string | null;
|
||||
font_size?: 's' | 'm' | 'l' | null;
|
||||
icon?: string | null;
|
||||
logo_mode?: 'emoticon' | 'upload' | null;
|
||||
logo_value?: string | null;
|
||||
logo_position?: 'left' | 'right' | 'center' | null;
|
||||
logo_size?: 's' | 'm' | 'l' | null;
|
||||
button_style?: 'filled' | 'outline' | null;
|
||||
button_radius?: number | null;
|
||||
button_primary_color?: string | null;
|
||||
button_secondary_color?: string | null;
|
||||
link_color?: string | null;
|
||||
mode?: 'light' | 'dark' | 'auto' | null;
|
||||
use_default_branding?: boolean | null;
|
||||
palette?: {
|
||||
primary?: string | null;
|
||||
secondary?: string | null;
|
||||
background?: string | null;
|
||||
surface?: string | null;
|
||||
} | null;
|
||||
typography?: {
|
||||
heading?: string | null;
|
||||
body?: string | null;
|
||||
size?: 's' | 'm' | 'l' | null;
|
||||
} | null;
|
||||
logo?: {
|
||||
mode?: 'emoticon' | 'upload';
|
||||
value?: string | null;
|
||||
position?: 'left' | 'right' | 'center';
|
||||
size?: 's' | 'm' | 'l';
|
||||
} | null;
|
||||
buttons?: {
|
||||
style?: 'filled' | 'outline';
|
||||
radius?: number | null;
|
||||
primary?: string | null;
|
||||
secondary?: string | null;
|
||||
link_color?: string | null;
|
||||
} | null;
|
||||
}
|
||||
|
||||
export interface EventData {
|
||||
|
||||
@@ -4,6 +4,14 @@ export interface GalleryBranding {
|
||||
primary_color: string;
|
||||
secondary_color: string;
|
||||
background_color: string;
|
||||
surface_color?: string;
|
||||
mode?: 'light' | 'dark' | 'auto';
|
||||
palette?: {
|
||||
primary?: string | null;
|
||||
secondary?: string | null;
|
||||
background?: string | null;
|
||||
surface?: string | null;
|
||||
} | null;
|
||||
}
|
||||
|
||||
export interface GalleryMetaResponse {
|
||||
|
||||
Reference in New Issue
Block a user