-
Libra
+@props([
+ 'size' => 'default',
+ 'variant' => 'full',
+ 'showText' => true
+])
+
+@php
+$sizes = [
+ 'small' => 'h-8 min-w-[80px]', // Mobile minimum
+ 'default' => 'h-12 min-w-[120px]', // Desktop default
+ 'large' => 'h-16 min-w-[160px]', // Large displays
+];
+
+$variants = [
+ 'full' => 'logo.svg',
+ 'reversed' => 'logo-reversed.svg',
+ 'mono' => 'logo-mono.svg',
+];
+
+$sizeClass = $sizes[$size] ?? $sizes['default'];
+$logoFile = $variants[$variant] ?? $variants['full'];
+@endphp
+
+
merge(['class' => 'flex items-center gap-2 p-5']) }}>
+
 }})
+ @if($showText)
+
{{ __('Libra Law Firm') }}
+ @endif
diff --git a/resources/views/components/layouts/app/header.blade.php b/resources/views/components/layouts/app/header.blade.php
index 4278ecc..e98fb07 100644
--- a/resources/views/components/layouts/app/header.blade.php
+++ b/resources/views/components/layouts/app/header.blade.php
@@ -8,7 +8,7 @@
-
+
@@ -93,7 +93,7 @@
-
+
diff --git a/tests/Feature/Components/LogoComponentTest.php b/tests/Feature/Components/LogoComponentTest.php
new file mode 100644
index 0000000..3d312af
--- /dev/null
+++ b/tests/Feature/Components/LogoComponentTest.php
@@ -0,0 +1,82 @@
+blade('');
+
+ $view->assertSee('Libra Law Firm');
+ $view->assertSee('logo.svg');
+});
+
+test('logo component renders small size variant', function () {
+ $view = $this->blade('');
+
+ $view->assertSee('h-8');
+});
+
+test('logo component renders default size variant', function () {
+ $view = $this->blade('');
+
+ $view->assertSee('h-12');
+});
+
+test('logo component renders large size variant', function () {
+ $view = $this->blade('');
+
+ $view->assertSee('h-16');
+});
+
+test('logo component renders reversed color variant', function () {
+ $view = $this->blade('');
+
+ $view->assertSee('logo-reversed.svg');
+});
+
+test('logo component renders mono color variant', function () {
+ $view = $this->blade('');
+
+ $view->assertSee('logo-mono.svg');
+});
+
+test('logo component renders without text when showText is false', function () {
+ $view = $this->blade('');
+
+ $view->assertDontSee('blade('');
+
+ $view->assertSee('assertSee('Libra Law Firm');
+});
+
+test('logo has accessible alt text', function () {
+ $view = $this->blade('');
+
+ $view->assertSee('alt="Libra Law Firm"', false);
+});
+
+test('logo has PNG fallback via onerror attribute', function () {
+ $view = $this->blade('');
+
+ $view->assertSee('logo.png', false);
+ $view->assertSee('onerror', false);
+});
+
+test('logo component accepts custom classes', function () {
+ $view = $this->blade('');
+
+ $view->assertSee('custom-class', false);
+});
+
+test('logo component has correct minimum width for desktop', function () {
+ $view = $this->blade('');
+
+ $view->assertSee('min-w-[120px]', false);
+});
+
+test('logo component has correct minimum width for mobile', function () {
+ $view = $this->blade('');
+
+ $view->assertSee('min-w-[80px]', false);
+});