diff --git a/app/Filament/Admin/Pages/UserGuide.php b/app/Filament/Admin/Pages/UserGuide.php index e2c461d..df08ebd 100644 --- a/app/Filament/Admin/Pages/UserGuide.php +++ b/app/Filament/Admin/Pages/UserGuide.php @@ -5,6 +5,7 @@ namespace App\Filament\Admin\Pages; use App\Services\GuideService; use BackedEnum; use Filament\Pages\Page; +use Filament\Support\Enums\Width; use Filament\Support\Icons\Heroicon; class UserGuide extends Page @@ -37,6 +38,11 @@ class UserGuide extends Page return __('user-guide.title'); } + public function getMaxContentWidth(): Width | string | null + { + return Width::Full; + } + public function getGuides(): array { $guideService = app(GuideService::class); diff --git a/app/Http/Controllers/TemplatePreviewController.php b/app/Http/Controllers/TemplatePreviewController.php index b10a2e2..6b66ddd 100644 --- a/app/Http/Controllers/TemplatePreviewController.php +++ b/app/Http/Controllers/TemplatePreviewController.php @@ -48,9 +48,9 @@ class TemplatePreviewController extends Controller } // Replace placeholders with default data - if (!empty($defaultData)) { - $content = TemplateService::replacePlaceholders($content, $defaultData); - } + // Always call replacePlaceholders to handle custom components and special placeholders + // even if defaultData is empty + $content = TemplateService::replacePlaceholders($content, $defaultData ?? []); $html = TemplatePreviewService::getPreviewHtml($content, $type); diff --git a/app/Services/TemplateService.php b/app/Services/TemplateService.php index 119eea0..099f997 100644 --- a/app/Services/TemplateService.php +++ b/app/Services/TemplateService.php @@ -295,18 +295,37 @@ class TemplateService foreach ($customMatches[0] as $index => $fullMatch) { $componentName = $customMatches[1][$index] ?? null; if ($componentName) { + // Normalize component name to lowercase for consistent file system access + $componentName = strtolower($componentName); $viewPath = "components.custom.{$componentName}"; if (view()->exists($viewPath)) { try { $renderedComponent = view($viewPath)->render(); + // Ensure rendered component is properly formatted + $renderedComponent = trim($renderedComponent); $html = str_replace($fullMatch, $renderedComponent, $html); } catch (\Exception $e) { - // If rendering fails, remove the placeholder or show error - $html = str_replace($fullMatch, "", $html); + // Log the error for debugging + \Log::error("Custom component render error: {$viewPath}", [ + 'error' => $e->getMessage(), + 'trace' => $e->getTraceAsString() + ]); + + // Show error message in preview (visible in development) + $errorMessage = htmlspecialchars($e->getMessage(), ENT_QUOTES, 'UTF-8'); + $errorHtml = "