Files
Atomcms-edit/app/Filament/Pages/General/ThemeSettings.php
T
2026-05-09 17:32:17 +02:00

2198 lines
129 KiB
PHP
Executable File
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
<?php
namespace App\Filament\Pages\General;
use App\Models\Miscellaneous\WebsiteSetting;
use App\Services\SettingsService;
use Filament\Actions\Action;
use Filament\Forms\Components\ColorPicker;
use Filament\Forms\Components\Select;
use Filament\Forms\Components\TextInput;
use Filament\Forms\Components\Toggle;
use Filament\Forms\Concerns\InteractsWithForms;
use Filament\Forms\Contracts\HasForms;
use Filament\Notifications\Notification;
use Filament\Pages\Page;
use Filament\Schemas\Components\Section;
use Filament\Schemas\Schema;
final class ThemeSettings extends Page implements HasForms
{
use InteractsWithForms;
#[\Override]
protected static string|\BackedEnum|null $navigationIcon = 'heroicon-o-paint-brush';
#[\Override]
protected static string|\UnitEnum|null $navigationGroup = 'Website';
#[\Override]
protected static ?string $navigationLabel = null;
#[\Override]
public static function getNavigationLabel(): string
{
return __('Theme & Buttons');
}
#[\Override]
protected static ?string $title = 'Theme & Button Settings';
#[\Override]
protected string $view = 'filament.pages.general.theme-settings';
/** @var array<string, mixed> */
public array $data = [];
public string $selectedPreset = 'custom';
public function mount(): void
{
$this->fillForm();
}
protected function fillForm(): void
{
$this->data = [
'preset' => $this->getSetting('preset', 'default'),
'color_primary' => $this->getSetting('color_primary', '#eeb425'),
'color_background' => $this->getSetting('color_background', '#1a1a2e'),
'color_surface' => $this->getSetting('color_surface', '#2d2d44'),
'color_dropdown' => $this->getSetting('color_dropdown', '#2d2d44'),
'color_navbar' => $this->getSetting('color_navbar', '#2d2d44'),
'card_background' => $this->getSetting('card_background', '#2d2d44'),
'card_border_color' => $this->getSetting('card_border_color', '#4b5563'),
'color_navbar_text' => $this->getSetting('color_navbar_text', '#ffffff'),
'color_text' => $this->getSetting('color_text', '#ffffff'),
'color_text_muted' => $this->getSetting('color_text_muted', '#9ca3af'),
'color_accent' => $this->getSetting('color_accent', '#10b981'),
'dropdown_style' => $this->getSetting('dropdown_style', 'rounded'),
'dropdown_border' => $this->getSettingBool('dropdown_border', true),
'dropdown_shadow' => $this->getSetting('dropdown_shadow', 'medium'),
'font_family' => $this->getSetting('font_family', 'Nunito'),
'border_radius' => $this->getSetting('border_radius', '12'),
'border_color' => $this->getSetting('border_color', '#eeb425'),
'dark_mode' => $this->getSettingBool('dark_mode', true),
'animations' => $this->getSettingBool('animations', true),
// Sizing settings
'size_navigation_font' => $this->getSetting('size_navigation_font', '14'),
'size_navigation_padding' => $this->getSetting('size_navigation_padding', '16'),
'size_navigation_height' => $this->getSetting('size_navigation_height', '60'),
'size_heading_h1' => $this->getSetting('size_heading_h1', '32'),
'size_heading_h2' => $this->getSetting('size_heading_h2', '24'),
'size_heading_h3' => $this->getSetting('size_heading_h3', '20'),
'size_body_text' => $this->getSetting('size_body_text', '16'),
'size_small_text' => $this->getSetting('size_small_text', '14'),
'size_button_text' => $this->getSetting('size_button_text', '14'),
'size_card_padding' => $this->getSetting('size_card_padding', '24'),
'size_icon_small' => $this->getSetting('size_icon_small', '16'),
'size_icon_medium' => $this->getSetting('size_icon_medium', '24'),
'size_icon_large' => $this->getSetting('size_icon_large', '32'),
// Button settings from ButtonSettings
'button_enabled' => $this->getSettingBool('button_enabled', true),
'button_primary_color' => $this->getSetting('button_primary_color', '#eeb425'),
'button_secondary_color' => $this->getSetting('button_secondary_color', '#1a1a2e'),
'button_text_color' => $this->getSetting('button_text_color', '#1a1a2e'),
'button_hover_color' => $this->getSetting('button_hover_color', '#cf9d15'),
'button_border_color' => $this->getSetting('button_border_color', '#cf9d15'),
'button_border_width' => $this->getSetting('button_border_width', '2'),
'button_border_radius' => $this->getSetting('button_border_radius', '8'),
'button_font_size' => $this->getSetting('button_font_size', '14'),
'button_padding_x' => $this->getSetting('button_padding_x', '16'),
'button_padding_y' => $this->getSetting('button_padding_y', '8'),
'button_hover_scale' => $this->getSetting('button_hover_scale', '1.05'),
'button_shadow' => $this->getSetting('button_shadow', 'lg'),
'button_transition' => $this->getSetting('button_transition', 'all'),
'button_transition_duration' => $this->getSetting('button_transition_duration', '300'),
'toolbar_primary_color' => $this->getSetting('toolbar_primary_color', '#eeb425'),
'toolbar_hover_color' => $this->getSetting('toolbar_hover_color', '#cf9d15'),
'toolbar_border_color' => $this->getSetting('toolbar_border_color', '#cf9d15'),
'toolbar_text_color' => $this->getSetting('toolbar_text_color', '#1a1a2e'),
'button_border_only' => $this->getSettingBool('button_border_only', false),
'button_effects_enabled' => $this->getSettingBool('button_effects_enabled', false),
'button_effects_navigation' => $this->getSetting('button_effects_navigation', 'none'),
'button_effects_buttons' => $this->getSetting('button_effects_buttons', 'none'),
'button_effects_links' => $this->getSetting('button_effects_links', 'none'),
'button_effects_speed' => $this->getSetting('button_effects_speed', 'normal'),
'button_text_uppercase' => $this->getSettingBool('button_text_uppercase', false),
'button_font_weight' => $this->getSetting('button_font_weight', '600'),
'background_image' => $this->getSetting('background_image', ''),
// Secondary button settings
'button_secondary_enabled' => $this->getSettingBool('button_secondary_enabled', true),
'button_secondary_btn_color' => $this->getSetting('button_secondary_color', '#22c55e'),
'button_secondary_text_color' => $this->getSetting('button_secondary_text_color', '#ffffff'),
'button_secondary_hover_color' => $this->getSetting('button_secondary_hover_color', '#16a34a'),
'button_secondary_border_color' => $this->getSetting('button_secondary_border_color', '#16a34a'),
// Danger button settings
'button_danger_enabled' => $this->getSettingBool('button_danger_enabled', true),
'button_danger_color' => $this->getSetting('button_danger_color', '#ef4444'),
'button_danger_text_color' => $this->getSetting('button_danger_text_color', '#ffffff'),
'button_danger_hover_color' => $this->getSetting('button_danger_hover_color', '#dc2626'),
'button_danger_border_color' => $this->getSetting('button_danger_border_color', '#dc2626'),
// Outline button settings
'button_outline_enabled' => $this->getSettingBool('button_outline_enabled', true),
'button_outline_color' => $this->getSetting('button_outline_color', '#eeb425'),
'button_outline_text_color' => $this->getSetting('button_outline_text_color', '#1a1a2e'),
'button_outline_hover_color' => $this->getSetting('button_outline_hover_color', '#cf9d15'),
// Navigation icons
'nav_icon_discord_url' => $this->getSetting('nav_icon_discord_url', ''),
'nav_icon_radio' => $this->getSettingBool('nav_icon_radio', true),
// Navbar settings
'navbar_height' => $this->getSetting('navbar_height', '64'),
'navbar_sticky' => $this->getSettingBool('navbar_sticky', true),
'navbar_shadow' => $this->getSettingBool('navbar_shadow', true),
'navbar_style' => $this->getSetting('navbar_style', 'default'),
// Avatar settings
'avatar_border_radius' => $this->getSetting('avatar_border_radius', '8'),
'avatar_border' => $this->getSettingBool('avatar_border', true),
'avatar_border_color' => $this->getSetting('avatar_border_color', '#eeb425'),
// Badge settings
'badge_background' => $this->getSetting('badge_background', '#eeb425'),
'badge_text_color' => $this->getSetting('badge_text_color', '#000000'),
'badge_border_radius' => $this->getSetting('badge_border_radius', '4'),
// Shadow settings
'shadow_color' => $this->getSetting('shadow_color', '#000000'),
'shadow_opacity' => $this->getSetting('shadow_opacity', '20'),
// Spinner
'spinner_color' => $this->getSetting('spinner_color', '#eeb425'),
// Input settings
'input_background' => $this->getSetting('input_background', '#1f2937'),
'input_border_color' => $this->getSetting('input_border_color', '#4b5563'),
'input_text_color' => $this->getSetting('input_text_color', '#ffffff'),
'input_placeholder_color' => $this->getSetting('input_placeholder_color', '#9ca3af'),
'input_focus_color' => $this->getSetting('input_focus_color', '#eeb425'),
// Link settings
'link_color' => $this->getSetting('link_color', '#eeb425'),
'link_hover_color' => $this->getSetting('link_hover_color', '#cf9d15'),
'link_underline' => $this->getSettingBool('link_underline', false),
// Card settings
'card_border_width' => $this->getSetting('card_border_width', '1'),
'card_border_radius' => $this->getSetting('card_border_radius', '12'),
// Page transition
'page_transition' => $this->getSettingBool('page_transition', true),
// Header/Footer colors
'header_background' => $this->getSetting('header_background', '#2d2d44'),
'header_text_color' => $this->getSetting('header_text_color', '#ffffff'),
'header_link_color' => $this->getSetting('header_link_color', '#eeb425'),
'footer_background' => $this->getSetting('footer_background', '#2d2d44'),
'footer_text_color' => $this->getSetting('footer_text_color', '#ffffff'),
'footer_link_color' => $this->getSetting('footer_link_color', '#eeb425'),
// Card colors
'card_background' => $this->getSetting('card_background', '#2d2d44'),
'card_border_color' => $this->getSetting('card_border_color', '#4b5563'),
'card_padding' => $this->getSetting('card_padding', '24'),
// v1.2 Profile Page Customization
'profile_show_online_status' => $this->getSettingBool('profile_show_online_status', true),
'profile_show_guilds' => $this->getSettingBool('profile_show_guilds', true),
'profile_show_friends' => $this->getSettingBool('profile_show_friends', true),
'profile_show_guestbook' => $this->getSettingBool('profile_show_guestbook', true),
'profile_show_photos' => $this->getSettingBool('profile_show_photos', true),
'profile_show_badges' => $this->getSettingBool('profile_show_badges', true),
'profile_show_stats' => $this->getSettingBool('profile_show_stats', true),
'profile_show_activity' => $this->getSettingBool('profile_show_activity', true),
'profile_header_style' => $this->getSetting('profile_header_style', 'default'),
'profile_default_tab' => $this->getSetting('profile_default_tab', 'guestbook'),
// v1.2 Custom CSS
'custom_css_enabled' => $this->getSettingBool('custom_css_enabled', false),
'custom_css' => $this->getSetting('custom_css', ''),
'custom_js_enabled' => $this->getSettingBool('custom_js_enabled', false),
'custom_js' => $this->getSetting('custom_js', ''),
// v1.2 Advanced Header/Footer
'header_custom_html' => $this->getSetting('header_custom_html', ''),
'footer_custom_html' => $this->getSetting('footer_custom_html', ''),
'footer_show_copyright' => $this->getSettingBool('footer_show_copyright', true),
'footer_show_links' => $this->getSettingBool('footer_show_links', true),
// v1.3 PWA Settings
'pwa_enabled' => $this->getSettingBool('pwa_enabled', false),
'pwa_name' => $this->getSetting('pwa_name', 'Epicnabbo Hotel'),
'pwa_short_name' => $this->getSetting('pwa_short_name', 'Epicnabbo'),
'pwa_description' => $this->getSetting('pwa_description', 'Welcome to Epicnabbo - Your Habbo Hotel'),
'pwa_theme_color' => $this->getSetting('pwa_theme_color', '#eeb425'),
'pwa_background_color' => $this->getSetting('pwa_background_color', '#1a1a2e'),
];
$this->selectedPreset = $this->data['preset'];
}
protected function getSetting(string $key, string $default = ''): string
{
/** @var WebsiteSetting|null $setting */
$setting = WebsiteSetting::where('key', $key)->first();
return $setting?->value ?? $default;
}
protected function getSettingBool(string $key, bool $default = false): bool
{
/** @var WebsiteSetting|null $setting */
$setting = WebsiteSetting::where('key', $key)->first();
$value = $setting?->value;
return $value !== null ? (bool) $value : $default;
}
protected function saveSettings(array $keys): void
{
foreach ($keys as $key) {
if (isset($this->data[$key]) && is_string($key)) {
WebsiteSetting::updateOrCreate(
['key' => $key],
['value' => $this->data[$key]],
);
}
}
}
protected function saveBoolSettings(array $keys): void
{
foreach ($keys as $key) {
if (isset($this->data[$key]) && is_string($key)) {
WebsiteSetting::updateOrCreate(
['key' => $key],
['value' => $this->data[$key] ? '1' : '0'],
);
}
}
}
protected function exportSettingsToFile(): void
{
try {
$settingsFile = base_path('theme-settings-export.json');
$exportData = [
'exported_at' => now()->toDateTimeString(),
'settings' => $this->data,
];
file_put_contents(
$settingsFile,
json_encode($exportData, JSON_PRETTY_PRINT | JSON_UNESCAPED_SLASHES),
);
} catch (\Throwable) {
// Silent fail - don't break the form
}
}
public function applyPreset(string $preset): void
{
$presets = [
'default' => [
'color_primary' => '#eeb425', 'color_background' => '#f3f4f6',
'color_surface' => '#ffffff', 'color_dropdown' => '#ffffff',
'color_navbar' => '#ffffff', 'color_navbar_text' => '#1f2937', 'color_text' => '#1f2937',
'color_text_muted' => '#6b7280', 'color_accent' => '#10b981',
'input_text_color' => '#1f2937', 'input_placeholder_color' => '#6b7280',
'input_border_color' => '#d1d5db', 'input_background' => '#ffffff', 'input_focus_color' => '#eeb425',
'button_primary_color' => '#eeb425', 'button_text_color' => '#1f2937',
'button_hover_color' => '#cf9d15', 'button_border_color' => '#cf9d15',
'toolbar_primary_color' => '#eeb425', 'toolbar_text_color' => '#1f2937',
'toolbar_hover_color' => '#cf9d15', 'toolbar_border_color' => '#cf9d15',
'button_border_width' => '2', 'button_border_radius' => '8',
'button_font_size' => '14', 'button_padding_x' => '16', 'button_padding_y' => '8',
'button_hover_scale' => '1.05', 'button_shadow' => 'md', 'button_transition' => 'all',
'button_transition_duration' => '200', 'button_border_only' => false,
'button_text_uppercase' => false, 'button_font_weight' => '600',
'dropdown_style' => 'rounded', 'dropdown_border' => true, 'dropdown_shadow' => 'small',
'font_family' => 'Nunito', 'border_radius' => '12', 'border_color' => '#eeb425',
'background_image' => '',
],
'modern' => [
'color_primary' => '#6366f1', 'color_background' => '#0f172a',
'color_surface' => '#1e293b', 'color_dropdown' => '#1e293b',
'color_navbar' => '#1e293b', 'color_navbar_text' => '#f8fafc', 'color_text' => '#f8fafc',
'color_text_muted' => '#94a3b8', 'color_accent' => '#22d3ee',
'input_text_color' => '#f8fafc', 'input_placeholder_color' => '#94a3af',
'input_border_color' => '#475569', 'input_background' => '#1e293b', 'input_focus_color' => '#6366f1',
'button_primary_color' => '#6366f1', 'button_text_color' => '#ffffff',
'button_hover_color' => '#4f46e5', 'button_border_color' => '#6366f1',
'toolbar_primary_color' => '#6366f1', 'toolbar_text_color' => '#ffffff',
'toolbar_hover_color' => '#4f46e5', 'toolbar_border_color' => '#6366f1',
'button_border_width' => '2', 'button_border_radius' => '8',
'button_font_size' => '14', 'button_padding_x' => '20', 'button_padding_y' => '10',
'button_hover_scale' => '1.05', 'button_shadow' => 'lg', 'button_transition' => 'all',
'button_transition_duration' => '200', 'button_border_only' => false,
'dropdown_style' => 'rounded', 'dropdown_border' => true, 'dropdown_shadow' => 'large',
'font_family' => 'Inter', 'border_radius' => '8', 'border_color' => '#6366f1',
],
'retro' => [
'color_primary' => '#f43f5e', 'color_background' => '#18181b',
'color_surface' => '#27272a', 'color_dropdown' => '#27272a',
'color_navbar' => '#18181b', 'color_navbar_text' => '#fafafa', 'color_text' => '#fafafa',
'color_text_muted' => '#a1a1aa', 'color_accent' => '#fbbf24',
'input_text_color' => '#fafafa', 'input_placeholder_color' => '#a1a1aa',
'input_border_color' => '#3f3f46', 'input_background' => '#27272a',
'button_primary_color' => '#f43f5e', 'button_text_color' => '#ffffff',
'button_hover_color' => '#e11d48', 'button_border_color' => '#f43f5e',
'toolbar_primary_color' => '#f43f5e', 'toolbar_text_color' => '#ffffff',
'toolbar_hover_color' => '#e11d48', 'toolbar_border_color' => '#f43f5e',
'button_border_width' => '2', 'button_border_radius' => '0',
'button_font_size' => '14', 'button_padding_x' => '16', 'button_padding_y' => '8',
'button_hover_scale' => '1.0', 'button_shadow' => 'none', 'button_transition' => 'none',
'button_transition_duration' => '0', 'button_border_only' => false,
'dropdown_style' => 'square', 'dropdown_border' => true, 'dropdown_shadow' => 'none',
'font_family' => 'Pixel', 'border_radius' => '0', 'border_color' => '#f43f5e',
],
'nature' => [
'color_primary' => '#22c55e', 'color_background' => '#052e16',
'color_surface' => '#14532d', 'color_dropdown' => '#14532d',
'color_navbar' => '#052e16', 'color_navbar_text' => '#f0fdf4', 'color_text' => '#f0fdf4',
'color_text_muted' => '#86efac', 'color_accent' => '#34d399',
'input_text_color' => '#f0fdf4', 'input_placeholder_color' => '#86efac',
'input_border_color' => '#166534', 'input_background' => '#14532d',
'button_primary_color' => '#22c55e', 'button_text_color' => '#ffffff',
'button_hover_color' => '#16a34a', 'button_border_color' => '#22c55e',
'toolbar_primary_color' => '#22c55e', 'toolbar_text_color' => '#ffffff',
'toolbar_hover_color' => '#16a34a', 'toolbar_border_color' => '#22c55e',
'toolbar_primary_color' => '#22c55e', 'toolbar_text_color' => '#ffffff',
'toolbar_hover_color' => '#16a34a', 'toolbar_border_color' => '#22c55e',
'button_border_width' => '2', 'button_border_radius' => '20',
'button_font_size' => '14', 'button_padding_x' => '20', 'button_padding_y' => '10',
'button_hover_scale' => '1.05', 'button_shadow' => 'md', 'button_transition' => 'all',
'button_transition_duration' => '300', 'button_border_only' => false,
'dropdown_style' => 'pill', 'dropdown_border' => false, 'dropdown_shadow' => 'medium',
'font_family' => 'Nunito', 'border_radius' => '20', 'border_color' => '#22c55e',
],
'ocean' => [
'color_primary' => '#0ea5e9', 'color_background' => '#0c4a6e',
'color_surface' => '#164e63', 'color_dropdown' => '#164e63',
'color_navbar' => '#164e63', 'color_navbar_text' => '#f0f9ff', 'color_text' => '#f0f9ff',
'color_text_muted' => '#7dd3fc', 'color_accent' => '#06b6d4',
'input_text_color' => '#f0f9ff', 'input_placeholder_color' => '#7dd3fc',
'input_border_color' => '#155e75', 'input_background' => '#164e63',
'button_primary_color' => '#0ea5e9', 'button_text_color' => '#ffffff',
'button_hover_color' => '#0284c7', 'button_border_color' => '#0ea5e9',
'toolbar_primary_color' => '#0ea5e9', 'toolbar_text_color' => '#ffffff',
'toolbar_hover_color' => '#0284c7', 'toolbar_border_color' => '#0ea5e9',
'button_border_width' => '2', 'button_border_radius' => '16',
'button_font_size' => '14', 'button_padding_x' => '20', 'button_padding_y' => '10',
'button_hover_scale' => '1.05', 'button_shadow' => 'lg', 'button_transition' => 'all',
'button_transition_duration' => '300', 'button_border_only' => false,
'dropdown_style' => 'rounded', 'dropdown_border' => true, 'dropdown_shadow' => 'large',
'font_family' => 'Inter', 'border_radius' => '16', 'border_color' => '#0ea5e9',
'background_image' => '/assets/images/themes/arctic-ice.png',
],
'sunset' => [
'color_primary' => '#f97316', 'color_background' => '#1c1917',
'color_surface' => '#292524', 'color_dropdown' => '#292524',
'color_navbar' => '#1c1917', 'color_navbar_text' => '#fafaf9', 'color_text' => '#fafaf9',
'color_text_muted' => '#a8a29e', 'color_accent' => '#fb923c',
'input_text_color' => '#fafaf9', 'input_placeholder_color' => '#a8a29e',
'input_border_color' => '#44403c', 'input_background' => '#292524',
'button_primary_color' => '#f97316', 'button_text_color' => '#ffffff',
'button_hover_color' => '#ea580c', 'button_border_color' => '#f97316',
'toolbar_primary_color' => '#f97316', 'toolbar_text_color' => '#ffffff',
'toolbar_hover_color' => '#ea580c', 'toolbar_border_color' => '#f97316',
'button_border_width' => '2', 'button_border_radius' => '24',
'button_font_size' => '14', 'button_padding_x' => '24', 'button_padding_y' => '12',
'button_hover_scale' => '1.05', 'button_shadow' => 'lg', 'button_transition' => 'all',
'button_transition_duration' => '300', 'button_border_only' => false,
'dropdown_style' => 'pill', 'dropdown_border' => false, 'dropdown_shadow' => 'large',
'font_family' => 'Poppins', 'border_radius' => '24', 'border_color' => '#f97316',
],
'royal' => [
'color_primary' => '#8b5cf6', 'color_background' => '#1e1b4b',
'color_surface' => '#312e81', 'color_dropdown' => '#312e81',
'color_navbar' => '#1e1b4b', 'color_navbar_text' => '#ede9fe', 'color_text' => '#ede9fe',
'color_text_muted' => '#a5b4fc', 'color_accent' => '#c4b5fd',
'input_text_color' => '#ede9fe', 'input_placeholder_color' => '#a5b4fc',
'input_border_color' => '#4c1d95', 'input_background' => '#312e81',
'button_primary_color' => '#8b5cf6', 'button_text_color' => '#ffffff',
'button_hover_color' => '#7c3aed', 'button_border_color' => '#8b5cf6',
'toolbar_primary_color' => '#8b5cf6', 'toolbar_text_color' => '#ffffff',
'toolbar_hover_color' => '#7c3aed', 'toolbar_border_color' => '#8b5cf6',
'button_border_width' => '2', 'button_border_radius' => '8',
'button_font_size' => '14', 'button_padding_x' => '20', 'button_padding_y' => '10',
'button_hover_scale' => '1.05', 'button_shadow' => 'md', 'button_transition' => 'all',
'button_transition_duration' => '300', 'button_border_only' => false,
'dropdown_style' => 'rounded', 'dropdown_border' => true, 'dropdown_shadow' => 'medium',
'font_family' => 'Playfair Display', 'border_radius' => '8', 'border_color' => '#8b5cf6',
],
'atom_original' => [
'color_primary' => '#eeb425', 'color_background' => '#f3f4f6',
'color_surface' => '#ffffff', 'color_dropdown' => '#ffffff',
'color_navbar' => '#ffffff', 'color_navbar_text' => '#1f2937', 'color_text' => '#1f2937',
'color_text_muted' => '#6b7280', 'color_accent' => '#10b981',
'input_text_color' => '#1f2937', 'input_placeholder_color' => '#6b7280',
'input_border_color' => '#d1d5db', 'input_background' => '#ffffff', 'input_focus_color' => '#eeb425',
'button_primary_color' => '#eeb425', 'button_text_color' => '#1f2937',
'button_hover_color' => '#cf9d15', 'button_border_color' => '#cf9d15',
'button_border_width' => '2', 'button_border_radius' => '8',
'button_font_size' => '14', 'button_padding_x' => '16', 'button_padding_y' => '8',
'button_hover_scale' => '1.05', 'button_shadow' => 'md', 'button_transition' => 'all',
'button_transition_duration' => '200', 'button_border_only' => false,
'dropdown_style' => 'rounded', 'dropdown_border' => true, 'dropdown_shadow' => 'small',
'font_family' => 'Poppins', 'border_radius' => '8', 'border_color' => '#eeb425',
],
'galaxy' => [
'color_primary' => '#c0c0c0', 'color_background' => '#0a0a1a',
'color_surface' => '#1a1a2e', 'color_dropdown' => '#1a1a2e',
'color_navbar' => '#0a0a1a', 'color_navbar_text' => '#e2e8f0', 'color_text' => '#e2e8f0',
'color_text_muted' => '#94a3b8', 'color_accent' => '#60a5fa',
'input_text_color' => '#e2e8f0', 'input_placeholder_color' => '#94a3b8',
'input_border_color' => '#334155', 'input_background' => '#1a1a2e',
'button_primary_color' => '#c0c0c0', 'button_text_color' => '#0a0a1a',
'button_hover_color' => '#a3a3a3', 'button_border_color' => '#c0c0c0',
'toolbar_primary_color' => '#c0c0c0', 'toolbar_text_color' => '#0a0a1a',
'toolbar_hover_color' => '#a3a3a3', 'toolbar_border_color' => '#c0c0c0',
'button_border_width' => '2', 'button_border_radius' => '16',
'button_font_size' => '14', 'button_padding_x' => '20', 'button_padding_y' => '10',
'button_hover_scale' => '1.05', 'button_shadow' => 'lg', 'button_transition' => 'all',
'button_transition_duration' => '300', 'button_border_only' => false,
'dropdown_style' => 'pill', 'dropdown_border' => false, 'dropdown_shadow' => 'large',
'font_family' => 'Inter', 'border_radius' => '16', 'border_color' => '#c0c0c0',
'background_image' => '/assets/images/themes/arctic-ice.png',
],
'minimal' => [
'color_primary' => '#000000', 'color_background' => '#ffffff',
'color_surface' => '#f9fafb', 'color_dropdown' => '#ffffff',
'color_navbar' => '#ffffff', 'color_navbar_text' => '#111827', 'color_text' => '#111827',
'color_text_muted' => '#6b7280', 'color_accent' => '#3b82f6',
'input_text_color' => '#111827', 'input_placeholder_color' => '#6b7280',
'input_border_color' => '#d1d5db', 'input_background' => '#ffffff', 'input_focus_color' => '#000000',
'button_primary_color' => '#000000', 'button_text_color' => '#ffffff',
'button_hover_color' => '#374151', 'button_border_color' => '#000000',
'toolbar_primary_color' => '#000000', 'toolbar_text_color' => '#ffffff',
'toolbar_hover_color' => '#374151', 'toolbar_border_color' => '#000000',
'button_border_width' => '2', 'button_border_radius' => '0',
'button_font_size' => '14', 'button_padding_x' => '16', 'button_padding_y' => '8',
'button_hover_scale' => '1.0', 'button_shadow' => 'sm', 'button_transition' => 'all',
'button_transition_duration' => '200', 'button_border_only' => false,
'dropdown_style' => 'square', 'dropdown_border' => true, 'dropdown_shadow' => 'small',
'font_family' => 'Inter', 'border_radius' => '0', 'border_color' => '#000000',
],
'cyberpunk' => [
'color_primary' => '#f0f', 'color_background' => '#0a0a0f',
'color_surface' => '#1a1a2e', 'color_dropdown' => '#1a1a2e',
'color_navbar' => '#0a0a0f', 'color_navbar_text' => '#0ff', 'color_text' => '#b3e0e0',
'color_text_muted' => '#f0f', 'color_accent' => '#ff0',
'input_text_color' => '#b3e0e0', 'input_placeholder_color' => '#806080',
'input_border_color' => '#ec4899', 'input_background' => '#1a1a2e', 'input_focus_color' => '#f0f',
'button_primary_color' => '#f0f', 'button_text_color' => '#000',
'button_hover_color' => '#d0d', 'button_border_color' => '#f0f',
'button_border_width' => '2', 'button_border_radius' => '4',
'button_font_size' => '14', 'button_padding_x' => '20', 'button_padding_y' => '10',
'button_hover_scale' => '1.1', 'button_shadow' => 'lg', 'button_transition' => 'all',
'button_transition_duration' => '150', 'button_border_only' => false,
'dropdown_style' => 'rounded', 'dropdown_border' => true, 'dropdown_shadow' => 'large',
'font_family' => 'Inter', 'border_radius' => '4', 'border_color' => '#f0f',
],
'christmas' => [
'color_primary' => '#dc2626', 'color_background' => '#0f172a',
'color_surface' => '#1e293b', 'color_dropdown' => '#1e293b',
'color_navbar' => '#dc2626', 'color_navbar_text' => '#ffffff', 'color_text' => '#ffffff',
'color_text_muted' => '#86efac', 'color_accent' => '#22c55e',
'input_text_color' => '#ffffff', 'input_placeholder_color' => '#86efac',
'input_border_color' => '#334155', 'input_background' => '#1e293b',
'button_primary_color' => '#dc2626', 'button_text_color' => '#ffffff',
'button_hover_color' => '#b91c1c', 'button_border_color' => '#dc2626',
'button_border_width' => '2', 'button_border_radius' => '12',
'button_font_size' => '14', 'button_padding_x' => '16', 'button_padding_y' => '8',
'button_hover_scale' => '1.05', 'button_shadow' => 'md', 'button_transition' => 'all',
'button_transition_duration' => '300', 'button_border_only' => false,
'dropdown_style' => 'rounded', 'dropdown_border' => true, 'dropdown_shadow' => 'medium',
'font_family' => 'Nunito', 'border_radius' => '12', 'border_color' => '#dc2626',
],
'halloween' => [
'color_primary' => '#f97316', 'color_background' => '#0c0a09',
'color_surface' => '#1c1917', 'color_dropdown' => '#1c1917',
'color_navbar' => '#0c0a09', 'color_navbar_text' => '#f97316', 'color_text' => '#fafaf9',
'color_text_muted' => '#78716c', 'color_accent' => '#a855f7',
'input_text_color' => '#fafaf9', 'input_placeholder_color' => '#78716c',
'input_border_color' => '#44403c', 'input_background' => '#1c1917',
'button_primary_color' => '#f97316', 'button_text_color' => '#000',
'button_hover_color' => '#ea580c', 'button_border_color' => '#f97316',
'toolbar_primary_color' => '#f97316', 'toolbar_text_color' => '#ffffff',
'toolbar_hover_color' => '#ea580c', 'toolbar_border_color' => '#f97316',
'button_border_width' => '2', 'button_border_radius' => '20',
'button_font_size' => '14', 'button_padding_x' => '20', 'button_padding_y' => '10',
'button_hover_scale' => '1.05', 'button_shadow' => 'lg', 'button_transition' => 'all',
'button_transition_duration' => '300', 'button_border_only' => false,
'dropdown_style' => 'pill', 'dropdown_border' => false, 'dropdown_shadow' => 'large',
'font_family' => 'Poppins', 'border_radius' => '20', 'border_color' => '#f97316',
],
'valentine' => [
'color_primary' => '#ec4899', 'color_background' => '#fdf2f8',
'color_surface' => '#fce7f3', 'color_dropdown' => '#ffffff',
'color_navbar' => '#ec4899', 'color_navbar_text' => '#ffffff', 'color_text' => '#831843',
'color_text_muted' => '#db2777', 'color_accent' => '#f472b6',
'input_text_color' => '#831843', 'input_placeholder_color' => '#db2777',
'input_border_color' => '#fbcfe8', 'input_background' => '#ffffff', 'input_focus_color' => '#ec4899',
'button_primary_color' => '#ec4899', 'button_text_color' => '#ffffff',
'button_hover_color' => '#db2777', 'button_border_color' => '#ec4899',
'button_border_width' => '2', 'button_border_radius' => '16',
'button_font_size' => '14', 'button_padding_x' => '20', 'button_padding_y' => '10',
'button_hover_scale' => '1.05', 'button_shadow' => 'md', 'button_transition' => 'all',
'button_transition_duration' => '300', 'button_border_only' => false,
'dropdown_style' => 'pill', 'dropdown_border' => true, 'dropdown_shadow' => 'medium',
'font_family' => 'Playfair Display', 'border_radius' => '16', 'border_color' => '#ec4899',
],
'matrix' => [
'color_primary' => '#00ff00', 'color_background' => '#000000',
'color_surface' => '#0a0a0a', 'color_dropdown' => '#0a0a0a',
'color_navbar' => '#000000', 'color_navbar_text' => '#00ff00', 'color_text' => '#00ff00',
'color_text_muted' => '#00cc00', 'color_accent' => '#00ff41',
'input_text_color' => '#00ff00', 'input_placeholder_color' => '#00cc00',
'input_border_color' => '#003300', 'input_background' => '#0a0a0a',
'button_primary_color' => '#00ff00', 'button_text_color' => '#000000',
'button_hover_color' => '#00cc00', 'button_border_color' => '#00ff00',
'button_border_width' => '2', 'button_border_radius' => '0',
'button_font_size' => '14', 'button_padding_x' => '16', 'button_padding_y' => '8',
'button_hover_scale' => '1.0', 'button_shadow' => 'none', 'button_transition' => 'none',
'button_transition_duration' => '0', 'button_border_only' => false,
'dropdown_style' => 'square', 'dropdown_border' => true, 'dropdown_shadow' => 'none',
'font_family' => 'Roboto', 'border_radius' => '0', 'border_color' => '#00ff00',
],
'discord' => [
'color_primary' => '#5865f2', 'color_background' => '#36393f',
'color_surface' => '#2f3136', 'color_dropdown' => '#202225',
'color_navbar' => '#202225', 'color_navbar_text' => '#ffffff', 'color_text' => '#dcddde',
'color_text_muted' => '#72767d', 'color_accent' => '#5865f2',
'input_text_color' => '#dcddde', 'input_placeholder_color' => '#72767d',
'input_border_color' => '#202225', 'input_background' => '#2f3136',
'button_primary_color' => '#5865f2', 'button_text_color' => '#ffffff',
'button_hover_color' => '#4752c4', 'button_border_color' => '#5865f2',
'button_border_width' => '2', 'button_border_radius' => '8',
'button_font_size' => '14', 'button_padding_x' => '20', 'button_padding_y' => '10',
'button_hover_scale' => '1.02', 'button_shadow' => 'lg', 'button_transition' => 'all',
'button_transition_duration' => '200', 'button_border_only' => false,
'dropdown_style' => 'rounded', 'dropdown_border' => false, 'dropdown_shadow' => 'large',
'font_family' => 'Inter', 'border_radius' => '8', 'border_color' => '#5865f2',
],
'neon' => [
'color_primary' => '#ff00ff', 'color_background' => '#0f0f23',
'color_surface' => '#1a1a3e', 'color_dropdown' => '#1a1a3e',
'color_navbar' => '#0f0f23', 'color_navbar_text' => '#00ffff', 'color_text' => '#e0b0e0',
'color_text_muted' => '#9400d3', 'color_accent' => '#00ffff',
'input_text_color' => '#e0b0e0', 'input_placeholder_color' => '#b366b3',
'input_border_color' => '#4c1d95', 'input_background' => '#1a1a3e', 'input_focus_color' => '#ff00ff',
'button_primary_color' => '#ff00ff', 'button_text_color' => '#000000',
'button_hover_color' => '#d900d9', 'button_border_color' => '#ff00ff',
'button_border_width' => '2', 'button_border_radius' => '24',
'button_font_size' => '14', 'button_padding_x' => '24', 'button_padding_y' => '12',
'button_hover_scale' => '1.1', 'button_shadow' => 'xl', 'button_transition' => 'all',
'button_transition_duration' => '200', 'button_border_only' => false,
'dropdown_style' => 'pill', 'dropdown_border' => true, 'dropdown_shadow' => 'xl',
'font_family' => 'Inter', 'border_radius' => '24', 'border_color' => '#ff00ff',
],
'coffee' => [
'color_primary' => '#8b5a2b', 'color_background' => '#f5f5dc',
'color_surface' => '#faf0e6', 'color_dropdown' => '#fff8dc',
'color_navbar' => '#8b5a2b', 'color_navbar_text' => '#fff8dc', 'color_text' => '#4a3728',
'color_text_muted' => '#a0826d', 'color_accent' => '#d2691e',
'input_text_color' => '#4a3728', 'input_placeholder_color' => '#a0826d',
'input_border_color' => '#d4c4b0', 'input_background' => '#fff8dc', 'input_focus_color' => '#8b5a2b',
'button_primary_color' => '#8b5a2b', 'button_text_color' => '#fff8dc',
'button_hover_color' => '#6f4620', 'button_border_color' => '#8b5a2b',
'button_border_width' => '2', 'button_border_radius' => '8',
'button_font_size' => '14', 'button_padding_x' => '16', 'button_padding_y' => '8',
'button_hover_scale' => '1.05', 'button_shadow' => 'md', 'button_transition' => 'all',
'button_transition_duration' => '300', 'button_border_only' => false,
'dropdown_style' => 'rounded', 'dropdown_border' => true, 'dropdown_shadow' => 'medium',
'font_family' => 'Playfair Display', 'border_radius' => '8', 'border_color' => '#8b5a2b',
],
'strawberry' => [
'color_primary' => '#ff6b6b', 'color_background' => '#fff5f5',
'color_surface' => '#ffe0e0', 'color_dropdown' => '#ffffff',
'color_navbar' => '#ff6b6b', 'color_navbar_text' => '#ffffff', 'color_text' => '#c92a2a',
'color_text_muted' => '#fa5252', 'color_accent' => '#ff8787',
'input_text_color' => '#c92a2a', 'input_placeholder_color' => '#fa5252',
'input_border_color' => '#fed7d7', 'input_background' => '#ffffff', 'input_focus_color' => '#ff6b6b',
'button_primary_color' => '#ff6b6b', 'button_text_color' => '#ffffff',
'button_hover_color' => '#fa5252', 'button_border_color' => '#ff6b6b',
'button_border_width' => '2', 'button_border_radius' => '16',
'button_font_size' => '14', 'button_padding_x' => '20', 'button_padding_y' => '10',
'button_hover_scale' => '1.05', 'button_shadow' => 'md', 'button_transition' => 'all',
'button_transition_duration' => '300', 'button_border_only' => false,
'dropdown_style' => 'pill', 'dropdown_border' => true, 'dropdown_shadow' => 'medium',
'font_family' => 'Nunito', 'border_radius' => '16', 'border_color' => '#ff6b6b',
'background_image' => '',
],
'lavender' => [
'color_primary' => '#a855f7', 'color_background' => '#faf5ff',
'color_surface' => '#f3e8ff', 'color_dropdown' => '#ffffff',
'color_navbar' => '#a855f7', 'color_navbar_text' => '#ffffff', 'color_text' => '#581c87',
'color_text_muted' => '#9333ea', 'color_accent' => '#c084fc',
'input_text_color' => '#581c87', 'input_placeholder_color' => '#9333ea',
'input_border_color' => '#e9d5ff', 'input_background' => '#ffffff', 'input_focus_color' => '#a855f7',
'button_primary_color' => '#a855f7', 'button_text_color' => '#ffffff',
'button_hover_color' => '#9333ea', 'button_border_color' => '#a855f7',
'button_border_width' => '2', 'button_border_radius' => '12',
'button_font_size' => '14', 'button_padding_x' => '20', 'button_padding_y' => '10',
'button_hover_scale' => '1.05', 'button_shadow' => 'md', 'button_transition' => 'all',
'button_transition_duration' => '300', 'button_border_only' => false,
'dropdown_style' => 'pill', 'dropdown_border' => true, 'dropdown_shadow' => 'medium',
'font_family' => 'Inter', 'border_radius' => '12', 'border_color' => '#a855f7',
'background_image' => '',
],
'midnight' => [
'color_primary' => '#60a5fa', 'color_background' => '#020617',
'color_surface' => '#0f172a', 'color_dropdown' => '#0f172a',
'color_navbar' => '#020617', 'color_navbar_text' => '#e2e8f0', 'color_text' => '#e2e8f0',
'color_text_muted' => '#64748b', 'color_accent' => '#38bdf8',
'input_text_color' => '#e2e8f0', 'input_placeholder_color' => '#64748b',
'input_border_color' => '#1e293b', 'input_background' => '#0f172a',
'button_primary_color' => '#3b82f6', 'button_text_color' => '#ffffff',
'button_hover_color' => '#2563eb', 'button_border_color' => '#3b82f6',
'button_border_width' => '2', 'button_border_radius' => '8',
'button_font_size' => '14', 'button_padding_x' => '16', 'button_padding_y' => '8',
'button_hover_scale' => '1.05', 'button_shadow' => 'lg', 'button_transition' => 'all',
'button_transition_duration' => '300', 'button_border_only' => false,
'dropdown_style' => 'rounded', 'dropdown_border' => true, 'dropdown_shadow' => 'large',
'font_family' => 'Inter', 'border_radius' => '8', 'border_color' => '#60a5fa',
'background_image' => '',
],
'golden' => [
'color_primary' => '#fbbf24', 'color_background' => '#451a03',
'color_surface' => '#78350f', 'color_dropdown' => '#92400e',
'color_navbar' => '#451a03', 'color_navbar_text' => '#fef3c7', 'color_text' => '#fef3c7',
'color_text_muted' => '#d97706', 'color_accent' => '#f59e0b',
'input_text_color' => '#fef3c7', 'input_placeholder_color' => '#d97706',
'input_border_color' => '#92400e', 'input_background' => '#78350f',
'button_primary_color' => '#fbbf24', 'button_text_color' => '#451a03',
'button_hover_color' => '#f59e0b', 'button_border_color' => '#fbbf24',
'button_border_width' => '2', 'button_border_radius' => '12',
'button_font_size' => '14', 'button_padding_x' => '20', 'button_padding_y' => '10',
'button_hover_scale' => '1.05', 'button_shadow' => 'lg', 'button_transition' => 'all',
'button_transition_duration' => '300', 'button_border_only' => false,
'dropdown_style' => 'pill', 'dropdown_border' => true, 'dropdown_shadow' => 'large',
'font_family' => 'Playfair Display', 'border_radius' => '12', 'border_color' => '#fbbf24',
'background_image' => '/assets/images/themes/golden-pattern.png',
],
'arctic' => [
'color_primary' => '#06b6d4', 'color_background' => '#ecfeff',
'color_surface' => '#cffafe', 'color_dropdown' => '#a5f3fc',
'color_navbar' => '#06b6d4', 'color_navbar_text' => '#ffffff', 'color_text' => '#164e63',
'color_text_muted' => '#0891b2', 'color_accent' => '#22d3ee',
'input_text_color' => '#164e63', 'input_placeholder_color' => '#0891b2',
'input_border_color' => '#a5f3fc', 'input_background' => '#ffffff', 'input_focus_color' => '#06b6d4',
'button_primary_color' => '#06b6d4', 'button_text_color' => '#ffffff',
'button_hover_color' => '#0891b2', 'button_border_color' => '#06b6d4',
'button_border_width' => '2', 'button_border_radius' => '16',
'button_font_size' => '14', 'button_padding_x' => '20', 'button_padding_y' => '10',
'button_hover_scale' => '1.05', 'button_shadow' => 'md', 'button_transition' => 'all',
'button_transition_duration' => '300', 'button_border_only' => false,
'dropdown_style' => 'pill', 'dropdown_border' => true, 'dropdown_shadow' => 'medium',
'font_family' => 'Inter', 'border_radius' => '16', 'border_color' => '#06b6d4',
'background_image' => '/assets/images/themes/arctic-ice.png',
],
'magma' => [
'color_primary' => '#ef4444', 'color_background' => '#1c1917',
'color_surface' => '#292524', 'color_dropdown' => '#44403c',
'color_navbar' => '#1c1917', 'color_navbar_text' => '#fca5a5', 'color_text' => '#fecaca',
'color_text_muted' => '#b91c1c', 'color_accent' => '#f87171',
'input_text_color' => '#fecaca', 'input_placeholder_color' => '#b91c1c',
'input_border_color' => '#57534e', 'input_background' => '#292524',
'button_primary_color' => '#ef4444', 'button_text_color' => '#ffffff',
'button_hover_color' => '#dc2626', 'button_border_color' => '#ef4444',
'button_border_width' => '2', 'button_border_radius' => '4',
'button_font_size' => '14', 'button_padding_x' => '16', 'button_padding_y' => '8',
'button_hover_scale' => '1.05', 'button_shadow' => 'xl', 'button_transition' => 'all',
'button_transition_duration' => '200', 'button_border_only' => false,
'dropdown_style' => 'rounded', 'dropdown_border' => true, 'dropdown_shadow' => 'xl',
'font_family' => 'Roboto', 'border_radius' => '4', 'border_color' => '#ef4444',
],
'forest' => [
'color_primary' => '#16a34a', 'color_background' => '#052e16',
'color_surface' => '#14532d', 'color_dropdown' => '#166534',
'color_navbar' => '#052e16', 'color_navbar_text' => '#86efac', 'color_text' => '#bbf7d0',
'color_text_muted' => '#15803d', 'color_accent' => '#4ade80',
'input_text_color' => '#bbf7d0', 'input_placeholder_color' => '#15803d',
'input_border_color' => '#166534', 'input_background' => '#14532d',
'button_primary_color' => '#16a34a', 'button_text_color' => '#ffffff',
'button_hover_color' => '#15803d', 'button_border_color' => '#16a34a',
'button_border_width' => '2', 'button_border_radius' => '8',
'button_font_size' => '14', 'button_padding_x' => '16', 'button_padding_y' => '8',
'button_hover_scale' => '1.05', 'button_shadow' => 'md', 'button_transition' => 'all',
'button_transition_duration' => '300', 'button_border_only' => false,
'dropdown_style' => 'rounded', 'dropdown_border' => true, 'dropdown_shadow' => 'medium',
'font_family' => 'Nunito', 'border_radius' => '8', 'border_color' => '#16a34a',
],
'sakura' => [
'color_primary' => '#f472b6', 'color_background' => '#fdf2f8',
'color_surface' => '#fce7f3', 'color_dropdown' => '#fbcfe8',
'color_navbar' => '#f472b6', 'color_navbar_text' => '#ffffff', 'color_text' => '#be185d',
'color_text_muted' => '#db2777', 'color_accent' => '#f9a8d4',
'input_text_color' => '#be185d', 'input_placeholder_color' => '#db2777',
'input_border_color' => '#fbcfe8', 'input_background' => '#ffffff', 'input_focus_color' => '#f472b6',
'button_primary_color' => '#f472b6', 'button_text_color' => '#ffffff',
'button_hover_color' => '#ec4899', 'button_border_color' => '#f472b6',
'button_border_width' => '2', 'button_border_radius' => '20',
'button_font_size' => '14', 'button_padding_x' => '20', 'button_padding_y' => '10',
'button_hover_scale' => '1.05', 'button_shadow' => 'sm', 'button_transition' => 'all',
'button_transition_duration' => '300', 'button_border_only' => false,
'dropdown_style' => 'pill', 'dropdown_border' => true, 'dropdown_shadow' => 'small',
'font_family' => 'Poppins', 'border_radius' => '20', 'border_color' => '#f472b6',
],
'space' => [
'color_primary' => '#a855f7', 'color_background' => '#0f0518',
'color_surface' => '#1e0b33', 'color_dropdown' => '#2d1654',
'color_navbar' => '#0f0518', 'color_navbar_text' => '#e9d5ff', 'color_text' => '#f3e8ff',
'color_text_muted' => '#9333ea', 'color_accent' => '#c084fc',
'input_text_color' => '#f3e8ff', 'input_placeholder_color' => '#9333ea',
'input_border_color' => '#581c87', 'input_background' => '#1e0b33',
'button_primary_color' => '#a855f7', 'button_text_color' => '#ffffff',
'button_hover_color' => '#9333ea', 'button_border_color' => '#a855f7',
'button_border_width' => '2', 'button_border_radius' => '16',
'button_font_size' => '14', 'button_padding_x' => '20', 'button_padding_y' => '10',
'button_hover_scale' => '1.05', 'button_shadow' => 'xl', 'button_transition' => 'all',
'button_transition_duration' => '300', 'button_border_only' => false,
'dropdown_style' => 'pill', 'dropdown_border' => false, 'dropdown_shadow' => 'xl',
'font_family' => 'Inter', 'border_radius' => '16', 'border_color' => '#a855f7',
'background_image' => '/assets/images/themes/arctic-ice.png',
],
'bubblegum' => [
'color_primary' => '#ff69b4', 'color_background' => '#fff0f5',
'color_surface' => '#ffe4e1', 'color_dropdown' => '#ffffff',
'color_navbar' => '#ff69b4', 'color_navbar_text' => '#ffffff', 'color_text' => '#c71585',
'color_text_muted' => '#ff1493', 'color_accent' => '#ff1493',
'input_text_color' => '#c71585', 'input_placeholder_color' => '#ff1493',
'input_border_color' => '#ffb6c1', 'input_background' => '#ffffff', 'input_focus_color' => '#ff69b4',
'button_primary_color' => '#ff69b4', 'button_text_color' => '#ffffff',
'button_hover_color' => '#ff1493', 'button_border_color' => '#ff69b4',
'button_border_width' => '2', 'button_border_radius' => '24',
'button_font_size' => '14', 'button_padding_x' => '24', 'button_padding_y' => '12',
'button_hover_scale' => '1.05', 'button_shadow' => 'md', 'button_transition' => 'all',
'button_transition_duration' => '300', 'button_border_only' => false,
'dropdown_style' => 'pill', 'dropdown_border' => true, 'dropdown_shadow' => 'medium',
'font_family' => 'Poppins', 'border_radius' => '24', 'border_color' => '#ff69b4',
],
'obsidian' => [
'color_primary' => '#71717a', 'color_background' => '#09090b',
'color_surface' => '#18181b', 'color_dropdown' => '#27272a',
'color_navbar' => '#000000', 'color_navbar_text' => '#a1a1aa', 'color_text' => '#d4d4d8',
'color_text_muted' => '#52525b', 'color_accent' => '#a1a1aa',
'input_text_color' => '#d4d4d8', 'input_placeholder_color' => '#52525b',
'input_border_color' => '#3f3f46', 'input_background' => '#18181b',
'button_primary_color' => '#52525b', 'button_text_color' => '#fafafa',
'button_hover_color' => '#3f3f46', 'button_border_color' => '#52525b',
'button_border_width' => '2', 'button_border_radius' => '2',
'button_font_size' => '14', 'button_padding_x' => '16', 'button_padding_y' => '8',
'button_hover_scale' => '1.0', 'button_shadow' => 'lg', 'button_transition' => 'all',
'button_transition_duration' => '200', 'button_border_only' => false,
'dropdown_style' => 'square', 'dropdown_border' => false, 'dropdown_shadow' => 'large',
'font_family' => 'Inter', 'border_radius' => '2', 'border_color' => '#71717a',
],
];
if (isset($presets[$preset])) {
foreach ($presets[$preset] as $key => $value) {
$this->data[$key] = $value;
}
$this->data['preset'] = $preset;
$this->selectedPreset = $preset;
}
}
public function form(Schema $schema): Schema
{
return $schema
->components([
// PRESETS
Section::make(__('Choose a Style'))
->description(__('Choose a preset style or customize yourself'))
->schema([
Select::make('preset')
->label(__('Style'))
->options([
'custom' => '✏️ Custom (eigen)',
'atom_original' => '<span style="display:inline-flex;align-items:center;gap:8px;"><span style="width:16px;height:16px;background:#eeb425;border-radius:3px;"></span>🏨 Atom (Origineel)</span>',
'galaxy' => '<span style="display:inline-flex;align-items:center;gap:8px;"><span style="width:16px;height:16px;background:linear-gradient(135deg,#c0c0c0,#0a0a1a);border-radius:3px;"></span>🌌 Galaxy (Nacht)</span>',
'default' => '<span style="display:inline-flex;align-items:center;gap:8px;"><span style="width:16px;height:16px;background:#eeb425;border-radius:3px;"></span>🌟 Default (Goud)</span>',
'modern' => '<span style="display:inline-flex;align-items:center;gap:8px;"><span style="width:16px;height:16px;background:#6366f1;border-radius:3px;"></span>💜 Modern (Paars)</span>',
'retro' => '<span style="display:inline-flex;align-items:center;gap:8px;"><span style="width:16px;height:16px;background:#f43f5e;border-radius:3px;"></span>🎮 Retro (Rood/Zwart)</span>',
'nature' => '<span style="display:inline-flex;align-items:center;gap:8px;"><span style="width:16px;height:16px;background:#22c55e;border-radius:3px;"></span>🌿 Nature (Groen)</span>',
'ocean' => '<span style="display:inline-flex;align-items:center;gap:8px;"><span style="width:16px;height:16px;background:#0ea5e9;border-radius:3px;"></span>🌊 Ocean (Blauw)</span>',
'sunset' => '<span style="display:inline-flex;align-items:center;gap:8px;"><span style="width:16px;height:16px;background:#f97316;border-radius:3px;"></span>🌅 Sunset (Oranje)</span>',
'royal' => '<span style="display:inline-flex;align-items:center;gap:8px;"><span style="width:16px;height:16px;background:#8b5cf6;border-radius:3px;"></span>👑 Royal (Paars)</span>',
'minimal' => '<span style="display:inline-flex;align-items:center;gap:8px;"><span style="width:16px;height:16px;background:#000000;border-radius:3px;"></span>⚪ Minimal (Zwart/Wit)</span>',
'cyberpunk' => '<span style="display:inline-flex;align-items:center;gap:8px;"><span style="width:16px;height:16px;background:#f0f;border-radius:3px;"></span>⚡ Cyberpunk (Roze/Cyaan)</span>',
'christmas' => '<span style="display:inline-flex;align-items:center;gap:8px;"><span style="width:16px;height:16px;background:#dc2626;border-radius:3px;"></span>🎄 Christmas (Rood/Groen)</span>',
'halloween' => '<span style="display:inline-flex;align-items:center;gap:8px;"><span style="width:16px;height:16px;background:#f97316;border-radius:3px;"></span>🎃 Halloween (Oranje/Paars)</span>',
'valentine' => '<span style="display:inline-flex;align-items:center;gap:8px;"><span style="width:16px;height:16px;background:#ec4899;border-radius:3px;"></span>💝 Valentine (Roze)</span>',
'matrix' => '<span style="display:inline-flex;align-items:center;gap:8px;"><span style="width:16px;height:16px;background:#00ff00;border-radius:3px;"></span>💻 Matrix (Groen/Zwart)</span>',
'discord' => '<span style="display:inline-flex;align-items:center;gap:8px;"><span style="width:16px;height:16px;background:#5865f2;border-radius:3px;"></span>💬 Discord (Blauw/Grijs)</span>',
'neon' => '<span style="display:inline-flex;align-items:center;gap:8px;"><span style="width:16px;height:16px;background:#ff00ff;border-radius:3px;"></span>💡 Neon (Roze/Blauw)</span>',
'coffee' => '<span style="display:inline-flex;align-items:center;gap:8px;"><span style="width:16px;height:16px;background:#8b5a2b;border-radius:3px;"></span>☕ Coffee (Bruin/Creme)</span>',
'strawberry' => '<span style="display:inline-flex;align-items:center;gap:8px;"><span style="width:16px;height:16px;background:#ff6b6b;border-radius:3px;"></span>🍓 Strawberry (Rood/Roze)</span>',
'lavender' => '<span style="display:inline-flex;align-items:center;gap:8px;"><span style="width:16px;height:16px;background:#a855f7;border-radius:3px;"></span>💜 Lavender (Paars/Wit)</span>',
'midnight' => '<span style="display:inline-flex;align-items:center;gap:8px;"><span style="width:16px;height:16px;background:#60a5fa;border-radius:3px;"></span>🌙 Midnight (Donkerblauw)</span>',
'golden' => '<span style="display:inline-flex;align-items:center;gap:8px;"><span style="width:16px;height:16px;background:#fbbf24;border-radius:3px;"></span>✨ Golden (Goud/Bruin)</span>',
'arctic' => '<span style="display:inline-flex;align-items:center;gap:8px;"><span style="width:16px;height:16px;background:#06b6d4;border-radius:3px;"></span>❄️ Arctic (Cyaan/Wit)</span>',
'magma' => '<span style="display:inline-flex;align-items:center;gap:8px;"><span style="width:16px;height:16px;background:#ef4444;border-radius:3px;"></span>🔥 Magma (Rood/Zwart)</span>',
'forest' => '<span style="display:inline-flex;align-items:center;gap:8px;"><span style="width:16px;height:16px;background:#16a34a;border-radius:3px;"></span>🌲 Forest (Groen/Donker)</span>',
'sakura' => '<span style="display:inline-flex;align-items:center;gap:8px;"><span style="width:16px;height:16px;background:#f472b6;border-radius:3px;"></span>🌸 Sakura (Roze/Wit)</span>',
'space' => '<span style="display:inline-flex;align-items:center;gap:8px;"><span style="width:16px;height:16px;background:#a855f7;border-radius:3px;"></span>🚀 Space (Paars/Zwart)</span>',
'bubblegum' => '<span style="display:inline-flex;align-items:center;gap:8px;"><span style="width:16px;height:16px;background:#ff69b4;border-radius:3px;"></span>🍬 Bubblegum (Roze)</span>',
'obsidian' => '<span style="display:inline-flex;align-items:center;gap:8px;"><span style="width:16px;height:16px;background:#71717a;border-radius:3px;"></span>🖤 Obsidian (Zwart/Grijs)</span>',
])
->allowHtml()
->default('custom')
->reactive()
->afterStateUpdated(function ($state) {
if ($state !== 'custom') {
$this->applyPreset($state);
}
}),
]),
// BRAND COLOR
Section::make(__('Primary Color'))
->description(__('The primary color of your website'))
->schema([
ColorPicker::make('color_primary')
->label(__('Color'))
->default('#eeb425')
->helperText(__('This color is used for logo, buttons, etc.')),
]),
// COLORS
Section::make(__('Colors'))
->schema([
ColorPicker::make('color_background')
->label(__('Background'))
->default('#1a1a2e'),
ColorPicker::make('color_surface')
->label(__('Surface'))
->default('#2d2d44')
->helperText(__('For cards and containers')),
ColorPicker::make('color_dropdown')
->label(__('Dropdown'))
->default('#2d2d44')
->helperText(__('Background color of dropdown menus')),
ColorPicker::make('color_navbar')
->label(__('Navbar'))
->default('#2d2d44')
->helperText(__('Background color of the navbar')),
ColorPicker::make('color_navbar_text')
->label(__('Navbar Text'))
->default('#ffffff')
->helperText(__('Text color in the navbar')),
ColorPicker::make('color_text')
->label(__('Text'))
->default('#ffffff'),
ColorPicker::make('color_text_muted')
->label(__('Muted Text'))
->default('#9ca3af')
->helperText(__('For captions and placeholder text')),
ColorPicker::make('color_accent')
->label(__('Accent'))
->default('#10b981')
->helperText(__('For success messages, links, etc.')),
]),
// SIZING
Section::make(__('Element Sizes'))
->description(__('Adjust the size of various elements'))
->schema([
TextInput::make('size_navigation_font')
->label(__('Navigation font size (px)'))
->numeric()
->minValue(10)
->maxValue(24)
->default(14),
TextInput::make('size_navigation_padding')
->label(__('Navigation padding (px)'))
->numeric()
->minValue(8)
->maxValue(40)
->default(16),
TextInput::make('size_navigation_height')
->label(__('Navigation height (px)'))
->numeric()
->minValue(40)
->maxValue(120)
->default(60),
TextInput::make('size_heading_h1')
->label(__('Heading H1 size (px)'))
->numeric()
->minValue(20)
->maxValue(64)
->default(32),
TextInput::make('size_heading_h2')
->label(__('Heading H2 size (px)'))
->numeric()
->minValue(16)
->maxValue(48)
->default(24),
TextInput::make('size_heading_h3')
->label(__('Heading H3 size (px)'))
->numeric()
->minValue(14)
->maxValue(36)
->default(20),
TextInput::make('size_body_text')
->label(__('Body text size (px)'))
->numeric()
->minValue(12)
->maxValue(24)
->default(16),
TextInput::make('size_small_text')
->label(__('Small text size (px)'))
->numeric()
->minValue(10)
->maxValue(20)
->default(14),
TextInput::make('size_button_text')
->label(__('Button text size (px)'))
->numeric()
->minValue(10)
->maxValue(24)
->default(14),
TextInput::make('size_card_padding')
->label(__('Card padding (px)'))
->numeric()
->minValue(8)
->maxValue(48)
->default(24),
TextInput::make('size_icon_small')
->label(__('Small icon size (px)'))
->numeric()
->minValue(12)
->maxValue(32)
->default(16),
TextInput::make('size_icon_medium')
->label(__('Medium icon size (px)'))
->numeric()
->minValue(16)
->maxValue(48)
->default(24),
TextInput::make('size_icon_large')
->label(__('Large icon size (px)'))
->numeric()
->minValue(24)
->maxValue(64)
->default(32),
])
->columns(3),
// BUTTONS - Uitgebreid van ButtonSettings
Section::make(__('Client Toolbar'))
->description(__('Toolbar customization for client'))
->schema([
ColorPicker::make('toolbar_primary_color')
->label(__('Toolbar color (background)'))
->default('#eeb425'),
ColorPicker::make('toolbar_text_color')
->label(__('Toolbar icon/text color'))
->default('#1a1a2e'),
ColorPicker::make('toolbar_hover_color')
->label(__('Toolbar hover color'))
->default('#cf9d15'),
ColorPicker::make('toolbar_border_color')
->label(__('Toolbar border color'))
->default('#cf9d15'),
])
->columns(4),
Section::make(__('Button Settings'))
->description(__('Customize your hotel buttons'))
->schema([
ColorPicker::make('button_primary_color')
->label(__('Primary color (background)'))
->default('#eeb425'),
ColorPicker::make('button_text_color')
->label(__('Text color'))
->default('#1a1a2e'),
ColorPicker::make('button_hover_color')
->label(__('Hover color'))
->default('#cf9d15'),
Toggle::make('button_border_only')
->label(__('Border only (no background)'))
->helperText(__('Show only the border without background color')),
ColorPicker::make('button_border_color')
->label(__('Border color'))
->default('#cf9d15'),
TextInput::make('button_border_width')
->label(__('Border width (px)'))
->numeric()
->minValue(0)
->maxValue(50)
->default(2),
TextInput::make('button_border_radius')
->label(__('Border radius (px)'))
->numeric()
->minValue(0)
->maxValue(100)
->default(8),
TextInput::make('button_font_size')
->label(__('Font size (px)'))
->numeric()
->minValue(8)
->maxValue(32)
->default(14),
TextInput::make('button_padding_x')
->label(__('Padding X (px)'))
->numeric()
->minValue(0)
->maxValue(100)
->default(16),
TextInput::make('button_padding_y')
->label(__('Padding Y (px)'))
->numeric()
->minValue(0)
->maxValue(50)
->default(8),
TextInput::make('button_hover_scale')
->label(__('Hover scale (1.0 = none)'))
->numeric()
->minValue(0.5)
->maxValue(2.0)
->step(0.01)
->default(1.05),
Select::make('button_shadow')
->label(__('Shadow'))
->options([
'none' => __('None'),
'sm' => __('Small'),
'md' => __('Medium'),
'lg' => __('Large'),
'xl' => __('Extra Large'),
])
->default('lg'),
Select::make('button_transition')
->label(__('Transition type'))
->options([
'none' => __('None'),
'all' => __('All'),
'color' => __('Color only'),
'transform' => __('Transform only'),
])
->default('all'),
TextInput::make('button_transition_duration')
->label(__('Transition duration (ms)'))
->numeric()
->minValue(0)
->maxValue(5000)
->default(300),
Select::make('button_effects_speed')
->label(__('Effect speed'))
->options([
'slow' => __('Slow'),
'normal' => __('Normal'),
'fast' => __('Fast'),
])
->default('normal')
->helperText(__('How fast the animation plays')),
Toggle::make('button_text_uppercase')
->label(__('Uppercase text'))
->default(false)
->helperText(__('Make button text uppercase')),
Select::make('button_font_weight')
->label(__('Font weight'))
->options([
'400' => __('Normal'),
'500' => __('Medium'),
'600' => __('Semi Bold'),
'700' => __('Bold'),
])
->default('600'),
])
->columns(2),
// BUTTON EFFECTS
Section::make(__('Button Animations'))
->description(__('Animation effects for different elements'))
->schema([
Toggle::make('button_effects_enabled')
->label(__('Enable effects'))
->default(false)
->helperText(__('Enable or disable all button effects')),
Select::make('button_effects_navigation')
->label(__('Navigation effect'))
->options([
'none' => __('None'),
'sparkle' => '✨ ' . __('Sparkle'),
'glow' => '💡 ' . __('Glow'),
'float' => '🎈 ' . __('Float'),
'bounce' => '⚡ ' . __('Bounce'),
'pulse' => '💓 ' . __('Pulse'),
'shine' => '✨ ' . __('Shine'),
'shake' => '📳 ' . __('Shake'),
'wobble' => '🌀 ' . __('Wobble'),
'heartbeat' => '❤️ ' . __('Heartbeat'),
'rubber-band' => '🎯 ' . __('Rubber Band'),
'flip' => '🔄 ' . __('Flip'),
'swing' => '🎪 ' . __('Swing'),
'jello' => '🍮 Jello',
'color-cycle' => '🌈 ' . __('Color Cycle'),
'rotate' => '🔄 ' . __('Rotate'),
'scale-pulse' => '💫 ' . __('Scale Pulse'),
'fade-in' => '👻 ' . __('Fade In'),
'fade-out' => '🌫️ ' . __('Fade Out'),
'slide-up' => '⬆️ ' . __('Slide Up'),
'slide-down' => '⬇️ ' . __('Slide Down'),
'slide-left' => '⬅️ ' . __('Slide Left'),
'slide-right' => '➡️ ' . __('Slide Right'),
'zoom-in' => '🔍 ' . __('Zoom In'),
'zoom-out' => '🔎 ' . __('Zoom Out'),
'blur' => '🔮 ' . __('Blur'),
'neon-pulse' => '💡 ' . __('Neon Pulse'),
'shake-hard' => '💥 ' . __('Shake Hard'),
'vibrate' => '📳 ' . __('Vibrate'),
'spin' => '🔄 ' . __('Spin'),
'flip-x' => '↔️ ' . __('Flip X'),
'flip-y' => '↕️ ' . __('Flip Y'),
'skew' => '⛷️ ' . __('Skew'),
'stretch' => '🦒 ' . __('Stretch'),
'squeeze' => '🤏 ' . __('Squeeze'),
'elastic' => '🌀 ' . __('Elastic'),
'flash' => '⚡ ' . __('Flash'),
'rainbow' => '🌈 ' . __('Rainbow'),
'wave' => '〰️ ' . __('Wave'),
'ripple' => '💧 ' . __('Ripple'),
'fire' => '🔥 ' . __('Fire'),
'ice' => '🧊 ' . __('Ice'),
'shadow-move' => '👥 ' . __('Shadow Move'),
'glitch' => '👾 ' . __('Glitch'),
'typewriter' => '📝 ' . __('Typewriter'),
'falling' => '🍂 ' . __('Falling'),
'rising' => '🚀 ' . __('Rising'),
'pop' => '🎉 ' . __('Pop'),
'slam' => '💥 ' . __('Slam'),
'invert' => '🔱 ' . __('Invert'),
'hue-rotate' => '🎨 ' . __('Hue Rotate'),
'blur-in' => '🌟 ' . __('Blur In'),
'blur-out' => '💨 ' . __('Blur Out'),
])
->default('none')
->helperText(__('Effect for navigation items')),
Select::make('button_effects_buttons')
->label(__('Buttons effect'))
->options([
'none' => __('None'),
'sparkle' => '✨ ' . __('Sparkle'),
'glow' => '💡 ' . __('Glow'),
'float' => '🎈 ' . __('Float'),
'bounce' => '⚡ ' . __('Bounce'),
'pulse' => '💓 ' . __('Pulse'),
'shine' => '✨ ' . __('Shine'),
'shake' => '📳 ' . __('Shake'),
'wobble' => '🌀 ' . __('Wobble'),
'heartbeat' => '❤️ ' . __('Heartbeat'),
'rubber-band' => '🎯 ' . __('Rubber Band'),
'flip' => '🔄 ' . __('Flip'),
'swing' => '🎪 ' . __('Swing'),
'jello' => '🍮 Jello',
'color-cycle' => '🌈 ' . __('Color Cycle'),
'rotate' => '🔄 ' . __('Rotate'),
'scale-pulse' => '💫 ' . __('Scale Pulse'),
'fade-in' => '👻 ' . __('Fade In'),
'fade-out' => '🌫️ ' . __('Fade Out'),
'slide-up' => '⬆️ ' . __('Slide Up'),
'slide-down' => '⬇️ ' . __('Slide Down'),
'slide-left' => '⬅️ ' . __('Slide Left'),
'slide-right' => '➡️ ' . __('Slide Right'),
'zoom-in' => '🔍 ' . __('Zoom In'),
'zoom-out' => '🔎 ' . __('Zoom Out'),
'blur' => '🔮 ' . __('Blur'),
'neon-pulse' => '💡 ' . __('Neon Pulse'),
'shake-hard' => '💥 ' . __('Shake Hard'),
'vibrate' => '📳 ' . __('Vibrate'),
'spin' => '🔄 ' . __('Spin'),
'flip-x' => '↔️ ' . __('Flip X'),
'flip-y' => '↕️ ' . __('Flip Y'),
'skew' => '⛷️ ' . __('Skew'),
'stretch' => '🦒 ' . __('Stretch'),
'squeeze' => '🤏 ' . __('Squeeze'),
'elastic' => '🌀 ' . __('Elastic'),
'flash' => '⚡ ' . __('Flash'),
'rainbow' => '🌈 ' . __('Rainbow'),
'wave' => '〰️ ' . __('Wave'),
'ripple' => '💧 ' . __('Ripple'),
'fire' => '🔥 ' . __('Fire'),
'ice' => '🧊 ' . __('Ice'),
'shadow-move' => '👥 ' . __('Shadow Move'),
'glitch' => '👾 ' . __('Glitch'),
'typewriter' => '📝 ' . __('Typewriter'),
'falling' => '🍂 ' . __('Falling'),
'rising' => '🚀 ' . __('Rising'),
'pop' => '🎉 ' . __('Pop'),
'slam' => '💥 ' . __('Slam'),
'invert' => '🔱 ' . __('Invert'),
'hue-rotate' => '🎨 ' . __('Hue Rotate'),
'blur-in' => '🌟 ' . __('Blur In'),
'blur-out' => '💨 ' . __('Blur Out'),
'contrast' => '📺 ' . __('Contrast'),
'grayscale' => '⬛ ' . __('Grayscale'),
'sepia' => '🟤 ' . __('Sepia'),
'saturate' => '🎭 ' . __('Saturate'),
'brightness' => '☀️ ' . __('Brightness'),
'drop-shadow' => '🎭 ' . __('Drop Shadow'),
])
->default('none')
->helperText(__('Effect for all buttons')),
Select::make('button_effects_links')
->label('Links effect')
->options([
'none' => __('None'),
'sparkle' => '✨ ' . __('Sparkle'),
'glow' => '💡 ' . __('Glow'),
'float' => '🎈 ' . __('Float'),
'bounce' => '⚡ ' . __('Bounce'),
'pulse' => '💓 ' . __('Pulse'),
'shine' => '✨ ' . __('Shine'),
'shake' => '📳 ' . __('Shake'),
'wobble' => '🌀 ' . __('Wobble'),
'heartbeat' => '❤️ ' . __('Heartbeat'),
'rubber-band' => '🎯 ' . __('Rubber Band'),
'flip' => '🔄 ' . __('Flip'),
'swing' => '🎪 ' . __('Swing'),
'jello' => '🍮 Jello',
'color-cycle' => '🌈 ' . __('Color Cycle'),
'rotate' => '🔄 ' . __('Rotate'),
'scale-pulse' => '💫 ' . __('Scale Pulse'),
'fade-in' => '👻 ' . __('Fade In'),
'fade-out' => '🌫️ ' . __('Fade Out'),
'slide-up' => '⬆️ ' . __('Slide Up'),
'slide-down' => '⬇️ ' . __('Slide Down'),
'slide-left' => '⬅️ ' . __('Slide Left'),
'slide-right' => '➡️ ' . __('Slide Right'),
'zoom-in' => '🔍 ' . __('Zoom In'),
'zoom-out' => '🔎 ' . __('Zoom Out'),
'blur' => '🔮 ' . __('Blur'),
'neon-pulse' => '💡 ' . __('Neon Pulse'),
'shake-hard' => '💥 ' . __('Shake Hard'),
'vibrate' => '📳 ' . __('Vibrate'),
'spin' => '🔄 ' . __('Spin'),
'flip-x' => '↔️ ' . __('Flip X'),
'flip-y' => '↕️ ' . __('Flip Y'),
'skew' => '⛷️ ' . __('Skew'),
'stretch' => '🦒 ' . __('Stretch'),
'squeeze' => '🤏 ' . __('Squeeze'),
'elastic' => '🌀 ' . __('Elastic'),
'flash' => '⚡ ' . __('Flash'),
'rainbow' => '🌈 ' . __('Rainbow'),
'wave' => '〰️ ' . __('Wave'),
'ripple' => '💧 ' . __('Ripple'),
'fire' => '🔥 ' . __('Fire'),
'ice' => '🧊 ' . __('Ice'),
'shadow-move' => '👥 ' . __('Shadow Move'),
'glitch' => '👾 ' . __('Glitch'),
'typewriter' => '📝 ' . __('Typewriter'),
'falling' => '🍂 ' . __('Falling'),
'rising' => '🚀 ' . __('Rising'),
'pop' => '🎉 ' . __('Pop'),
'slam' => '💥 ' . __('Slam'),
'invert' => '🔱 ' . __('Invert'),
'hue-rotate' => '🎨 ' . __('Hue Rotate'),
'blur-in' => '🌟 ' . __('Blur In'),
'blur-out' => '💨 ' . __('Blur Out'),
'contrast' => '📺 ' . __('Contrast'),
'grayscale' => '⬛ ' . __('Grayscale'),
'sepia' => '🟤 ' . __('Sepia'),
'saturate' => '🎭 ' . __('Saturate'),
'brightness' => '☀️ ' . __('Brightness'),
'drop-shadow' => '🎭 ' . __('Drop Shadow'),
'outline' => '🔲 ' . __('Outline'),
'underline' => ' ' . __('underline') . ' ' . __('Underline'),
'overline' => ' ' . __('overline') . ' ' . __('Overline'),
'line-through' => ' ' . __('Line Through'),
'blink' => '💫 ' . __('Blink'),
'tada' => '🎊 ' . __('Tada'),
' wiggle' => '〿 ' . __('Wiggle'),
'hang' => '📉 ' . __('Hang'),
'indent' => '📏 ' . __('Indent'),
'outdent' => '📐 ' . __('Outdent'),
'quote' => '💬 ' . __('Quote'),
'strike' => '〰️ ' . __('Strike'),
])
->default('none')
->helperText(__('Effect for links')),
]),
// SECONDARY BUTTONS
Section::make(__('Secondary Button'))
->description(__('Style for secondary/green buttons'))
->schema([
Toggle::make('button_secondary_enabled')
->label(__('Enable secondary button style'))
->default(true),
ColorPicker::make('button_secondary_color')
->label(__('Background color'))
->default('#22c55e'),
ColorPicker::make('button_secondary_text_color')
->label(__('Text color'))
->default('#ffffff'),
ColorPicker::make('button_secondary_hover_color')
->label(__('Hover color'))
->default('#16a34a'),
ColorPicker::make('button_secondary_border_color')
->label(__('Border color'))
->default('#16a34a'),
])
->columns(2),
// DANGER BUTTONS
Section::make(__('Danger Button'))
->description(__('Style for danger/red buttons'))
->schema([
Toggle::make('button_danger_enabled')
->label(__('Enable danger button style'))
->default(true),
ColorPicker::make('button_danger_color')
->label(__('Background color'))
->default('#ef4444'),
ColorPicker::make('button_danger_text_color')
->label(__('Text color'))
->default('#ffffff'),
ColorPicker::make('button_danger_hover_color')
->label(__('Hover color'))
->default('#dc2626'),
ColorPicker::make('button_danger_border_color')
->label(__('Border color'))
->default('#dc2626'),
])
->columns(2),
// OUTLINE BUTTONS
Section::make(__('Outline Button'))
->description(__('Style for outline buttons (transparent with border)'))
->schema([
Toggle::make('button_outline_enabled')
->label(__('Enable outline button style'))
->default(true),
ColorPicker::make('button_outline_color')
->label(__('Border color'))
->default('#eeb425'),
ColorPicker::make('button_outline_text_color')
->label(__('Text color'))
->default('#1a1a2e'),
ColorPicker::make('button_outline_hover_color')
->label(__('Hover background color'))
->default('#cf9d15'),
])
->columns(2),
// DROPDOWNS
Section::make(__('Dropdowns'))
->description(__('Style of dropdown menus in the navigation'))
->schema([
Select::make('dropdown_style')
->label(__('Dropdown style'))
->options([
'square' => __('Square'),
'rounded' => __('Rounded'),
'pill' => __('Pill (extra round)'),
])
->default('rounded'),
Toggle::make('dropdown_border')
->label(__('Show border'))
->default(true)
->helperText(__('Show a border around the dropdown')),
Select::make('dropdown_shadow')
->label(__('Shadow'))
->options([
'none' => __('None'),
'small' => __('Small'),
'medium' => __('Medium'),
'large' => __('Large'),
])
->default('medium'),
]),
// TYPOGRAPHY
Section::make(__('Typography'))
->schema([
Select::make('font_family')
->label(__('Font Family'))
->options([
// Modern & Clean
'Inter' => 'Inter (Modern & Clean)',
'DM Sans' => 'DM Sans (' . __('Minimalist') . ')',
'Space Grotesk' => 'Space Grotesk (' . __('Futuristic') . ')',
'Work Sans' => 'Work Sans (' . __('Functional') . ')',
// Friendly & Warm
'Nunito' => 'Nunito (' . __('Friendly & Warm') . ')',
'Quicksand' => 'Quicksand (' . __('Round & Soft') . ')',
'Varela Round' => 'Varela Round (' . __('Super Round') . ')',
'Comfortaa' => 'Comfortaa (' . __('Cozy') . ')',
// Playful & Fun
'Poppins' => 'Poppins (' . __('Playful') . ')',
'Fredoka One' => 'Fredoka One (' . __('Bubbly') . ')',
'Baloo 2' => 'Baloo 2 (' . __('Friendly') . ')',
// Classic & Professional
'Roboto' => 'Roboto (' . __('Classic') . ')',
'Open Sans' => 'Open Sans (' . __('Readable') . ')',
'Lato' => 'Lato (' . __('Professional') . ')',
'PT Sans' => 'PT Sans (' . __('Versatile') . ')',
'Source Sans Pro' => 'Source Sans Pro (Open Source)',
'Noto Sans' => 'Noto Sans (Universeel)',
// Bold & Strong
'Montserrat' => 'Montserrat (' . __('Bold & Modern') . ')',
'Oswald' => 'Oswald (' . __('Condensed') . ')',
'Bebas Neue' => 'Bebas Neue (' . __('Ultra Bold') . ')',
'Anton' => 'Anton (' . __('Impact') . ')',
'Archivo Black' => 'Archivo Black (' . __('Heavy') . ')',
// Elegant & Serif
'Playfair Display' => 'Playfair Display (Elegant Serif)',
'Merriweather' => 'Merriweather (' . __('Classic Serif') . ')',
'Libre Baskerville' => 'Libre Baskerville (' . __('Timeless') . ')',
'Lora' => 'Lora (' . __('Literary') . ')',
'Crimson Pro' => 'Crimson Pro (' . __('Book') . ')',
// Stylish & Unique
'Raleway' => 'Raleway (' . __('Stylish') . ')',
'Ubuntu' => 'Ubuntu (' . __('Unique') . ')',
'Fira Sans' => 'Fira Sans (' . __('Technical') . ')',
'Exo 2' => 'Exo 2 (' . __('Sci-Fi') . ')',
'Orbitron' => 'Orbitron (' . __('Cyberpunk') . ')',
// Gaming & Retro
'Pixel' => 'Pixel (' . __('Retro/Gaming') . ')',
'Press Start 2P' => 'Press Start 2P (Arcade)',
'VT323' => 'VT323 (Terminal)',
'Creepster' => 'Creepster (Horror)',
// Handwritten & Fun
'Pacifico' => 'Pacifico (Handgeschreven)',
'Dancing Script' => 'Dancing Script (Sierlijk)',
'Permanent Marker' => 'Permanent Marker (Stoer)',
'Lobster' => 'Lobster (Feestelijk)',
// Monospace & Code
'JetBrains Mono' => 'JetBrains Mono (Code)',
'Fira Code' => 'Fira Code (Developer)',
'Source Code Pro' => 'Source Code Pro (Terminal)',
// Comic & Cartoon
'Comic Neue' => 'Comic Neue (Strip)',
'Bangers' => 'Bangers (Cartoon)',
'Chewy' => 'Chewy (Speels)',
// Minimal & Clean
'Manrope' => 'Manrope (Modern)',
'Outfit' => 'Outfit (Geometrisch)',
'Plus Jakarta Sans' => 'Plus Jakarta (Urban)',
'Sora' => 'Sora (Techno)',
'Syne' => 'Syne (Artistic)',
// Elegant & Luxury
'Cormorant Garamond' => 'Cormorant (Luxury Serif)',
'Cardo' => 'Cardo (Classic Book)',
'EB Garamond' => 'EB Garamond (Renaissance)',
'Cinzel' => 'Cinzel (Ancient)',
'Forum' => 'Forum (Elegant)',
'Marcellus' => 'Marcellus (Roman)',
'Italiana' => 'Italiana (Italian)',
// Display & Decorative
'Abril Fatface' => 'Abril Fatface (Bold Serif)',
'Alfa Slab One' => 'Alfa Slab (Heavy Slab)',
'Audiowide' => 'Audiowide (Tech Display)',
'Black Ops One' => 'Black Ops (Military)',
'Bungee' => 'Bungee (Urban)',
'Carter One' => 'Carter One (Sporty)',
'Concert One' => 'Concert One (Rounded)',
'Days One' => 'Days One (News)',
'Fugaz One' => 'Fugaz One (Italic)',
'Kaushan Script' => 'Kaushan Script (Brush)',
'Knewave' => 'Knewave (Paint)',
'Lilita One' => 'Lilita One (Chubby)',
'Monoton' => 'Monoton (Neon)',
'Righteous' => 'Righteous (Geometric)',
'Russo One' => 'Russo One (Industrial)',
'Shrikhand' => 'Shrikhand (Indian)',
'Sigmar One' => 'Sigmar One (Comic)',
'Syncopate' => 'Syncopate (Space)',
'Titan One' => 'Titan One (Thick)',
'Ultra' => 'Ultra (Heavy Serif)',
'Unica One' => 'Unica One (Vintage)',
'Yeseva One' => 'Yeseva One (Curvy)',
// Nature & Organic
'Amatic SC' => 'Amatic (Handdrawn)',
'Caveat' => 'Caveat (Casual Script)',
'Courgette' => 'Courgette (Smooth)',
'Great Vibes' => 'Great Vibes (Elegant Script)',
'Indie Flower' => 'Indie Flower (Messy)',
'Kalam' => 'Kalam (Quick)',
'Sacramento' => 'Sacramento (Retro Script)',
'Satisfy' => 'Satisfy (Charming)',
'Shadows Into Light' => 'Shadows (Sketchy)',
// Corporate & Business
'Arimo' => 'Arimo (Corporate)',
'Cabin' => 'Cabin (Humanist)',
'Hind' => 'Hind (Indian)',
'IBM Plex Sans' => 'IBM Plex (Tech Corp)',
'Karla' => 'Karla (Friendly)',
'Libre Franklin' => 'Libre Franklin (News)',
'Muli' => 'Muli (Versatile)',
'Nobile' => 'Nobile (Italian)',
'Questrial' => 'Questrial (Minimal)',
'Rubik' => 'Rubik (Cubic)',
'Tajawal' => 'Tajawal (Arabic)',
'Titillium Web' => 'Titillium (Professional)',
// Fun & Whimsical
'Barrio' => 'Barrio (Funky)',
'Bonbon' => 'Bonbon (Sweet)',
'Butterfly Kids' => 'Butterfly (Kids)',
'Chelsea Market' => 'Chelsea (Market)',
'Fruktur' => 'Fruktur (Fruit)',
'Gorditas' => 'Gorditas (Puffy)',
'Henny Penny' => 'Henny Penny (Storybook)',
'Kirang Haerang' => 'Kirang (Korean)',
'Lily Script One' => 'Lily (Flowery)',
'Mystery Quest' => 'Mystery (Spooky)',
'Paprika' => 'Paprika (Spicy)',
'Pompiere' => 'Pompiere (French)',
'Ranchers' => 'Ranchers (Western)',
'Ribeye' => 'Ribeye (Meaty)',
'Snowburst One' => 'Snowburst (Winter)',
'Spirax' => 'Spirax (Mysterious)',
'Unkempt' => 'Unkempt (Messy)',
'Zcool KuaiLe' => 'Zcool (Chinese)',
// Modern Sans-Serif
'Geologica' => 'Geologica (Variable)',
'Lexend' => 'Lexend (Readable)',
'Gabarito' => 'Gabarito (Rounded)',
'Schibsted Grotesk' => 'Schibsted (Nordic)',
'Albert Sans' => 'Albert Sans (Swiss)',
'Instrument Sans' => 'Instrument (Clean)',
'Figtree' => 'Figtree (Friendly)',
'Nokora' => 'Nokora (Khmer)',
'Noto Sans SC' => 'Noto SC (Chinese)',
'Noto Sans JP' => 'Noto JP (Japanese)',
'Noto Sans KR' => 'Noto KR (Korean)',
// Creative & Artistic
'Bodoni Moda' => 'Bodoni (High Fashion)',
'Cormorant' => 'Cormorant (Poetry)',
'Josefin Sans' => 'Josefin (Art Deco)',
'Josefin Slab' => 'Josefin Slab (Vintage)',
'Alegreya' => 'Alegreya (Literature)',
'Alegreya Sans' => 'Alegreya Sans (Story)',
'Bitter' => 'Bitter (Serif Slab)',
'Inconsolata' => 'Inconsolata (Coding)',
// Elegant & Wedding
'Alex Brush' => 'Alex Brush (Calligraphy)',
'Allura' => 'Allura (Wedding)',
'Great Vibes L' => 'Great Vibes (Luxury)',
'Herr Von Muellerhoff' => 'Herr (Signature)',
'Monsieur La Doulaise' => 'Monsieur (French)',
'Parisienne' => 'Parisienne (Romantic)',
'Pinyon Script' => 'Pinyon (Classic Script)',
'Tangerine' => 'Tangerine (Thin Script)',
'WindSong' => 'WindSong (Flowing)',
// Industrial & Tech
'Chakra Petch' => 'Chakra (Thai Tech)',
'Rajdhani' => 'Rajdhani (Indian Tech)',
'Sarpanch' => 'Sarpanch (Bold Hindi)',
'Share Tech Mono' => 'Share Tech (Display)',
'Teko' => 'Teko (Indian Display)',
'Yatra One' => 'Yatra (Sanskrit)',
// Retro & Vintage
'Abril Fatface V' => 'Abril (Magazine)',
'Alfa Slab One V' => 'Alfa Slab (Newspaper)',
'Arvo' => 'Arvo (Slab Serif)',
'Bevan' => 'Bevan (Heavy)',
'BioRhyme' => 'BioRhyme (Wide)',
'Bree Serif' => 'Bree (Energetic)',
'Crete Round' => 'Crete (Soft Slab)',
'Patua One' => 'Patua (Curvy)',
'Sanchez' => 'Sanchez (Classic Slab)',
'Scope One' => 'Scope (Academic)',
'Special Elite' => 'Special Elite (Typewriter)',
'Stint Ultra Expanded' => 'Stint (Wide)',
'Ultra V' => 'Ultra (Black)',
// Groovy & 70s
'Shrikhand V' => 'Shrikhand (Gujarati)',
'Sedgwick Ave' => 'Sedgwick (Street)',
'Sedgwick Ave Display' => 'Sedgwick Display (Bold)',
'Londrina Solid' => 'Londrina (Brazilian)',
'Londrina Shadow' => 'Londrina Shadow (3D)',
'Londrina Sketch' => 'Londrina Sketch (Hand)',
'Londrina Outline' => 'Londrina Outline (Line)',
// Fantasy & Medieval
'Almendra' => 'Almendra (Fantasy)',
'Almendra Display' => 'Almendra Display (Magic)',
'Cinzel Decorative' => 'Cinzel Deco (Royal)',
'Metamorphous' => 'Metamorphous (Wizard)',
'Pirata One' => 'Pirata (Pirate)',
'Rye' => 'Rye (Western)',
'Smokum' => 'Smokum (Wild West)',
// Japanese
'Kosugi' => 'Kosugi (Sans)',
'Kosugi Maru' => 'Kosugi Maru (Rounded)',
'M PLUS 1p' => 'M PLUS (Modern JP)',
'M PLUS Rounded 1c' => 'M PLUS Rounded (Soft)',
'Sawarabi Gothic' => 'Sawarabi (Gothic)',
'Sawarabi Mincho' => 'Sawarabi Mincho (Traditional)',
// Arabic & Hebrew
'Alef' => 'Alef (Hebrew)',
'Amatic SC H' => 'Amatic (Hebrew Script)',
'Frank Ruhl Libre' => 'Frank Ruhl (Jewish)',
'Heebo' => 'Heebo (Modern Hebrew)',
'Secular One' => 'Secular (Israeli)',
'Suez One' => 'Suez (Bold Hebrew)',
'Varela' => 'Varela (Hebrew Sans)',
])
->default('Nunito'),
TextInput::make('border_radius')
->label(__('Border radius (0-50)'))
->numeric()
->minValue(0)
->maxValue(100)
->default(12)
->helperText(__('How round are the corners?')),
]),
// EXTRAS
Section::make(__('Extra Options'))
->schema([
Toggle::make('dark_mode')
->label(__('Dark mode support'))
->helperText(__('Automatic dark theme for systems that prefer it')),
Toggle::make('animations')
->label(__('Animations'))
->helperText(__('Enable animations and transitions')),
TextInput::make('background_image')
->label(__('Background Image'))
->placeholder('/assets/images/themes/your-image.png')
->helperText(__('URL to the background image (leave empty for no image)')),
]),
// HEADER & FOOTER
Section::make(__('Header & Footer'))
->schema([
ColorPicker::make('header_background')
->label(__('Header Background'))
->default('#2d2d44'),
ColorPicker::make('header_text_color')
->label(__('Header Text'))
->default('#ffffff'),
ColorPicker::make('header_link_color')
->label(__('Header Links'))
->default('#ffffff'),
ColorPicker::make('footer_background')
->label(__('Footer Background'))
->default('#1a1a2e'),
ColorPicker::make('footer_text_color')
->label(__('Footer Text'))
->default('#9ca3af'),
ColorPicker::make('footer_link_color')
->label(__('Footer Links'))
->default('#eeb425'),
]),
// CARDS & CONTAINERS
Section::make(__('Cards & Containers'))
->schema([
ColorPicker::make('card_background')
->label(__('Card Background'))
->default('#2d2d44'),
ColorPicker::make('card_border_color')
->label(__('Card Border'))
->default('transparent'),
TextInput::make('card_border_width')
->label(__('Card Border Width'))
->numeric()
->default(0),
TextInput::make('card_padding')
->label(__('Card Padding'))
->numeric()
->default(16),
TextInput::make('card_border_radius')
->label(__('Card Border Radius'))
->numeric()
->default(12),
]),
// FORM INPUTS
Section::make(__('Form Inputs'))
->schema([
ColorPicker::make('input_background')
->label(__('Input Background'))
->default('#1a1a2e'),
ColorPicker::make('input_border_color')
->label(__('Input Border'))
->default('#4b5563'),
ColorPicker::make('input_text_color')
->label(__('Input Text'))
->default('#ffffff'),
ColorPicker::make('input_placeholder_color')
->label(__('Input Placeholder'))
->default('#9ca3af'),
ColorPicker::make('input_focus_color')
->label(__('Input Focus'))
->default('#eeb425'),
]),
// LINKS
Section::make(__('Links'))
->schema([
ColorPicker::make('link_color')
->label(__('Link Color'))
->default('#eeb425'),
ColorPicker::make('link_hover_color')
->label(__('Link Hover'))
->default('#cf9d15'),
Toggle::make('link_underline')
->label(__('Underline Links'))
->default(false),
]),
// BORDERS
Section::make(__('Borders'))
->schema([
ColorPicker::make('border_color')
->label(__('Default Border'))
->default('#4b5563'),
TextInput::make('border_width')
->label(__('Default Border Width'))
->numeric()
->default(1),
]),
// NAVIGATION
Section::make(__('Navigation'))
->schema([
TextInput::make('navbar_height')
->label(__('Navbar Height'))
->numeric()
->default(64),
Toggle::make('navbar_sticky')
->label(__('Sticky Navbar'))
->default(true),
Toggle::make('navbar_shadow')
->label(__('Navbar Shadow'))
->default(true),
Select::make('navbar_style')
->label(__('Navbar Style'))
->options([
'transparent' => __('Transparent'),
'solid' => __('Solid'),
'glass' => __('Glass Effect'),
])
->default('solid'),
]),
// AVATARS & IMAGES
Section::make(__('Avatars & Images'))
->schema([
TextInput::make('avatar_border_radius')
->label(__('Avatar Border Radius'))
->numeric()
->default(50),
Toggle::make('avatar_border')
->label(__('Avatar Border'))
->default(true),
ColorPicker::make('avatar_border_color')
->label(__('Avatar Border Color'))
->default('#eeb425'),
]),
// BADGES & TAGS
Section::make(__('Badges & Tags'))
->schema([
ColorPicker::make('badge_background')
->label(__('Badge Background'))
->default('#eeb425'),
ColorPicker::make('badge_text_color')
->label(__('Badge Text'))
->default('#1a1a2e'),
TextInput::make('badge_border_radius')
->label(__('Badge Border Radius'))
->numeric()
->default(12),
]),
// SHADOWS
Section::make(__('Shadows'))
->schema([
ColorPicker::make('shadow_color')
->label(__('Shadow Color'))
->default('#000000'),
TextInput::make('shadow_opacity')
->label(__('Shadow Opacity'))
->numeric()
->minValue(0)
->maxValue(100)
->default(25),
]),
// LOADING & SPINNERS
Section::make(__('Loading & Spinners'))
->schema([
ColorPicker::make('spinner_color')
->label(__('Spinner Color'))
->default('#eeb425'),
Toggle::make('page_transition')
->label(__('Page Transitions'))
->default(true),
]),
// v1.2 PROFILE PAGE CUSTOMIZATION
Section::make(__('Profile Page'))
->description(__('Customize the user profile page'))
->icon('heroicon-o-user')
->schema([
Toggle::make('profile_show_online_status')
->label(__('Show Online Status'))
->default(true),
Toggle::make('profile_show_guilds')
->label(__('Show Guilds/Groups'))
->default(true),
Toggle::make('profile_show_friends')
->label(__('Show Friends'))
->default(true),
Toggle::make('profile_show_guestbook')
->label(__('Show Guestbook'))
->default(true),
Toggle::make('profile_show_photos')
->label(__('Show Photos'))
->default(true),
Toggle::make('profile_show_badges')
->label(__('Show Badges'))
->default(true),
Toggle::make('profile_show_stats')
->label(__('Show Statistics'))
->default(true),
Toggle::make('profile_show_activity')
->label(__('Show Recent Activity'))
->default(true),
Select::make('profile_header_style')
->label(__('Header Style'))
->options([
'default' => __('Default'),
'banner' => __('Banner'),
'minimal' => __('Minimal'),
])
->default('default'),
Select::make('profile_default_tab')
->label(__('Default Tab'))
->options([
'guestbook' => __('Guestbook'),
'photos' => __('Photos'),
'badges' => __('Badges'),
'friends' => __('Friends'),
])
->default('guestbook'),
])
->columns(2),
// v1.2 CUSTOM CSS & JS
Section::make(__('Custom CSS & JavaScript'))
->description(__('Add custom CSS and JavaScript to your site'))
->icon('heroicon-o-code-bracket')
->schema([
Toggle::make('custom_css_enabled')
->label(__('Enable Custom CSS'))
->default(false),
TextInput::make('custom_css')
->label(__('Custom CSS'))
->helperText(__('Add your own CSS styles here'))
->columnSpanFull(),
Toggle::make('custom_js_enabled')
->label(__('Enable Custom JavaScript'))
->default(false),
TextInput::make('custom_js')
->label(__('Custom JavaScript'))
->helperText(__('Add your own JavaScript here'))
->columnSpanFull(),
])
->columns(2),
// v1.2 ADVANCED HEADER/FOOTER
Section::make(__('Advanced Header & Footer'))
->description(__('Add custom HTML to header and footer'))
->icon('heroicon-o-paint-brush')
->schema([
TextInput::make('header_custom_html')
->label(__('Custom Header HTML'))
->helperText(__('Add custom HTML before </head>'))
->columnSpanFull(),
TextInput::make('footer_custom_html')
->label(__('Custom Footer HTML'))
->helperText(__('Add custom HTML before </body>'))
->columnSpanFull(),
Toggle::make('footer_show_copyright')
->label(__('Show Copyright'))
->default(true),
Toggle::make('footer_show_links')
->label(__('Show Footer Links'))
->default(true),
])
->columns(2),
// v1.3 PWA (PROGRESSIVE WEB APP)
Section::make(__('PWA - Progressive Web App'))
->description(__('Make your hotel installable as an app'))
->icon('heroicon-o-device-phone-mobile')
->schema([
Toggle::make('pwa_enabled')
->label(__('Enable PWA'))
->default(false)
->helperText(__('Users can install your site as an app on mobile')),
TextInput::make('pwa_name')
->label(__('App Name'))
->default('Epicnabbo Hotel')
->helperText(__('Full name of the app')),
TextInput::make('pwa_short_name')
->label(__('Short Name'))
->default('Epicnabbo')
->maxLength(12)
->helperText(__('Name shown on home screen')),
TextInput::make('pwa_description')
->label(__('Description'))
->default('Welcome to Epicnabbo - Your Habbo Hotel')
->columnSpanFull(),
ColorPicker::make('pwa_theme_color')
->label(__('Theme Color'))
->default('#eeb425'),
ColorPicker::make('pwa_background_color')
->label(__('Background Color'))
->default('#1a1a2e'),
])
->columns(2),
])
->statePath('data');
}
public function save(): void
{
$this->saveBoolSettings([
'dark_mode',
'animations',
'dropdown_border',
'button_enabled',
'button_border_only',
'button_effects_enabled',
'button_secondary_enabled',
'button_danger_enabled',
'button_outline_enabled',
'button_text_uppercase',
'link_underline',
'navbar_sticky',
'navbar_shadow',
'nav_icon_radio',
'avatar_border',
'page_transition',
]);
$this->saveSettings([
'preset',
'color_primary',
'color_background',
'color_surface',
'color_dropdown',
'color_navbar',
'color_navbar_text',
'color_text',
'color_text_muted',
'color_accent',
'button_primary_color',
'button_text_color',
'button_hover_color',
'button_border_color',
'button_border_width',
'button_border_radius',
'button_font_size',
'button_padding_x',
'button_padding_y',
'button_hover_scale',
'button_shadow',
'button_transition',
'button_transition_duration',
'button_effects_speed',
'button_effects_navigation',
'button_effects_buttons',
'button_effects_links',
'button_text_uppercase',
'button_font_weight',
'dropdown_style',
'dropdown_shadow',
'font_family',
'border_radius',
'background_image',
// Sizing settings
'size_navigation_font',
'size_navigation_padding',
'size_navigation_height',
'size_heading_h1',
'size_heading_h2',
'size_heading_h3',
'size_body_text',
'size_small_text',
'size_button_text',
'size_card_padding',
'size_icon_small',
'size_icon_medium',
'size_icon_large',
'button_secondary_color',
'button_secondary_text_color',
'button_secondary_hover_color',
'button_secondary_border_color',
'button_danger_color',
'button_danger_text_color',
'button_danger_hover_color',
'button_danger_border_color',
'button_outline_color',
'button_outline_text_color',
'button_outline_hover_color',
// NEW SETTINGS
'header_background',
'header_text_color',
'header_link_color',
'footer_background',
'footer_text_color',
'footer_link_color',
'card_background',
'card_border_color',
'card_border_width',
'card_padding',
'card_border_radius',
'input_background',
'input_border_color',
'input_text_color',
'input_placeholder_color',
'input_focus_color',
'link_color',
'link_hover_color',
'border_color',
'border_width',
'navbar_height',
'navbar_style',
'nav_icon_discord_url',
'nav_icon_radio',
'avatar_border_radius',
'avatar_border_color',
'badge_background',
'badge_text_color',
'badge_border_radius',
'shadow_color',
'shadow_opacity',
'spinner_color',
// v1.2 Profile Page Customization
'profile_show_online_status',
'profile_show_guilds',
'profile_show_friends',
'profile_show_guestbook',
'profile_show_photos',
'profile_show_badges',
'profile_show_stats',
'profile_show_activity',
'profile_header_style',
'profile_default_tab',
// v1.2 Custom CSS/JS
'custom_css_enabled',
'custom_css',
'custom_js_enabled',
'custom_js',
// v1.2 Advanced Header/Footer
'header_custom_html',
'footer_custom_html',
'footer_show_copyright',
'footer_show_links',
// v1.3 PWA Settings
'pwa_enabled',
'pwa_name',
'pwa_short_name',
'pwa_description',
'pwa_theme_color',
'pwa_background_color',
]);
SettingsService::clearCache();
// Export to JSON file for auto-commit
$this->exportSettingsToFile();
Notification::make()
->success()
->title('Opgeslagen!')
->body('Je thema en knoppen zijn succesvol aangepast.')
->send();
}
#[\Override]
protected function getActions(): array
{
return [
Action::make('save')
->label(__('Save Theme & Buttons'))
->action('save')
->color('primary'),
];
}
}