find($theme); $settings->save( $item, (array) $request->input('settings', []), (string) $request->input('variant', 'light'), $request->string('appearance')->toString() ?: null, $request->string('accent')->toString() ?: null, ); return back()->with('status', 'Theme settings saved.'); } public function install(Request $request, ThemePackageManager $packages) { $request->validate(['theme' => ['required','file','mimes:zip','max:51200']]); $theme = $packages->install($request->file('theme')); return back()->with('status', $theme->name().' installed.'); } public function uninstall(string $theme, Loader $loader, ThemePackageManager $packages) { $item = $loader->find($theme); $packages->uninstall($item); return back()->with('status', $item->name().' uninstalled.'); } public function export(string $theme, Loader $loader, ThemePackageManager $packages) { $item = $loader->find($theme); $path = $packages->export($item); return response()->download($path)->deleteFileAfterSend(); } public function optimize(string $theme, Loader $loader, ThemeOptimizer $optimizer) { $item = $loader->find($theme); $result = $optimizer->optimize($item); return back()->with('status', "Optimised {$result['css']} CSS, {$result['js']} JS and {$result['images']} images."); } public function validateTheme(string $theme, Loader $loader, ThemeAccessibilityValidator $validator) { return response()->json(['issues' => $validator->validate($loader->find($theme))]); } }