clear(); $basePath = config('theme.base_path', base_path('resources/themes')); if ($parentTheme) { View::addLocation("{$basePath}/{$parentTheme}/views"); $this->parentTheme = $parentTheme; } View::addLocation("{$basePath}/{$theme}/views"); $this->activeTheme = $theme; $this->registerVendorNamespaces($theme, $basePath); } public function active(): ?string { return $this->activeTheme; } public function parent(): ?string { return $this->parentTheme; } public function resolve(?string $theme = null): string { return $theme ?? $this->activeTheme ?? self::DEFAULT_THEME; } public function clear(): void { $this->activeTheme = null; $this->parentTheme = null; } private function registerVendorNamespaces(string $theme, string $basePath): void { $vendorPath = "{$basePath}/{$theme}/views/vendor"; if (! is_dir($vendorPath)) { return; } $directories = scandir($vendorPath); foreach ($directories as $namespace) { if ($namespace !== '.' && $namespace !== '..') { View::prependNamespace($namespace, "{$vendorPath}/{$namespace}"); } } } }