@if(isset($live_session)) {{-- window.Echo (Reverb client) — sadece canlı ders sayfasında yükleniyor, normal /panel hiç Vite kullanmıyor, bu satır ona dokunmuyor. --}} @vite(['resources/js/app.js']) @endif @yield('title', t('site-title')) {{-- Bootstrap CSS --}} {{-- Fancybox (lightbox) --}} {{-- --}} {{-- Sayfa yükleme overlay: SVG render bitene kadar tam ekran gösterilir --}} @if(isset($live_session)) @endif {{-- Sayfa yükleme overlay --}}
Yükleniyor...
@php $loaderRequestedMain = preg_replace('/_transit$/', '', trim((string) request()->input('main_chart', ''))); if (!is_string($loaderRequestedMain)) { $loaderRequestedMain = ''; } @endphp {{-- Logout form'u sayfanın başında garantili olarak oluşturuluyor --}} @auth
@csrf
@endauth
@php $defaultKey = array_key_exists('natal', $charts) ? 'natal' : array_key_first($charts); $requestedMainRaw = trim((string) request()->input('main_chart', '')); $requestedMainKey = preg_replace('/_transit$/', '', $requestedMainRaw); if (!is_string($requestedMainKey)) { $requestedMainKey = ''; } $previewTarget = request()->input('preview_target'); $isPreviewFocused = !empty($previewTarget) && in_array( $previewTarget, ['natal', 'solar_return', 'secondary_progression_361', 'secondary_progression_naibod'], true ); // Sol ve Sağ anahtarları duruma göre belirle if ((isset($is_relationship_view) && $is_relationship_view) || (isset($is_dual_view) && $is_dual_view)) { // İLİŞKİ / ÇOKLU MODU // Bu modda sol/sağ paneller boş başlar; kullanıcı ilişkiye ait haritaları elle yerleştirir. $leftKeys = []; $rightKeys = []; $defaultKey = array_key_exists('synastry', $charts) ? 'synastry' : array_key_first($charts); } else { // NORMAL MOD (Eski Hali) $leftKeys = ['solar_arc', 'solar_return']; $rightKeys = ['draconic', 'secondary_progression_naibod']; $defaultKey = array_key_exists('natal', $charts) ? 'natal' : array_key_first($charts); // URL ile açıkça istenen harita mevcutsa ilk render'da onu göster. if ($requestedMainKey !== '' && isset($charts[$requestedMainKey])) { $defaultKey = $requestedMainKey; } elseif (!empty($panelLayoutState) && is_array($panelLayoutState)) { $savedMain = trim((string) ($panelLayoutState['main'] ?? '')); if ($savedMain !== '' && isset($charts[$savedMain])) { $defaultKey = $savedMain; } } // Kayıtlı panel düzeni varsa, ilk render'ı da bu düzenden başlat. // Böylece loader sonrası "secondary -> heliocentric" geçişi yaşanmaz. if (!empty($panelLayoutState) && is_array($panelLayoutState)) { $normalizeKeys = function ($keys, $fallback, $preserveUnknown = false, $fillWithFallback = true) use ($charts) { $picked = []; if (is_array($keys)) { foreach ($keys as $k) { if (!is_string($k)) { continue; } $k = trim($k); if ($k === '' || in_array($k, $picked, true)) { continue; } if (!isset($charts[$k]) && !$preserveUnknown) { continue; } $picked[] = $k; if (count($picked) >= 2) { break; } } } if ($fillWithFallback) { foreach ($fallback as $k) { if (!isset($charts[$k]) || in_array($k, $picked, true)) { continue; } $picked[] = $k; if (count($picked) >= 2) { break; } } } return $picked; }; $hasSavedLeftSlots = array_key_exists('left', $panelLayoutState); $hasSavedRightSlots = array_key_exists('right', $panelLayoutState); $leftKeys = $normalizeKeys( $hasSavedLeftSlots ? ($panelLayoutState['left'] ?? []) : null, $leftKeys, true, !$hasSavedLeftSlots ); $rightKeys = $normalizeKeys( $hasSavedRightSlots ? ($panelLayoutState['right'] ?? []) : null, $rightKeys, true, !$hasSavedRightSlots ); } } // Preview'da ortadaki harita, seçilen master'a göre gelmeli. if ($isPreviewFocused) { $defaultKey = $previewTarget; if (in_array($previewTarget, ['secondary_progression_361', 'secondary_progression_naibod'], true)) { $rightKeys = ['draconic', 'natal']; } } if (in_array((string) $defaultKey, ['secondary_progression_361', 'secondary_progression_naibod'], true)) { $rightKeys = ['draconic', 'natal']; } // Kişi sekmeleri için değişkenler (toolbar'da kullanılır) $showPersonTabs = (!empty($is_relationship_view) || !empty($is_dual_view)) && !empty($charts[$defaultKey]['visual']['statsB'] ?? null); $personATitle = $relationshipA['title'] ?? ($dualA['title'] ?? 'Kişi A'); $personBTitle = $relationshipB['title'] ?? ($dualB['title'] ?? 'Kişi B'); $personAColor = $relationshipA['color'] ?? ($dualA['color'] ?? '#e91e63'); $personBColor = $relationshipB['color'] ?? ($dualB['color'] ?? '#1e88e5'); // Toolbar kaydet butonu koşulları $toolbarSaveIsSingle = request()->filled('birth_place_id'); $toolbarSaveIsRel = request()->filled('rel_date') && request()->filled('rel_time') && request()->filled('rel_lat') && request()->filled('rel_lon') && request()->filled('a_place_id') && request()->filled('b_place_id') && !request()->boolean('rel_saved'); $toolbarSaveIsDual = request()->boolean('dual_preview') && request()->filled('rel_date') && request()->filled('rel_lat') && request()->filled('dual_a_place_id') && request()->filled('dual_b_place_id') && !request()->boolean('dual_saved'); $showToolbarSave = $toolbarSaveIsSingle || $toolbarSaveIsRel || $toolbarSaveIsDual; $toolbarSaveLabel = $toolbarSaveIsRel ? t('save-relationship') : ($toolbarSaveIsDual ? t('save-dual-chart') : t('save-map')); $layoutAyanamsa = null; $layoutSiderealDasha = null; $layoutHarmonic = null; if (!empty($panelLayoutState) && is_array($panelLayoutState)) { $layoutAyanamsa = isset($panelLayoutState['ayanamsa']) ? (int) $panelLayoutState['ayanamsa'] : null; $layoutSiderealDasha = isset($panelLayoutState['sidereal_dasha']) ? (int) $panelLayoutState['sidereal_dasha'] : null; $layoutHarmonic = isset($panelLayoutState['harmonic']) ? (int) $panelLayoutState['harmonic'] : null; } $siderealAyanamsaValue = request()->filled('ayanamsa') ? (int) request('ayanamsa') : ($layoutAyanamsa ?? 0); $siderealDashaValue = request()->filled('sidereal_dasha') ? (int) request('sidereal_dasha') : ($layoutSiderealDasha ?? 1); $harmonicFactorValue = request()->filled('harmonic') ? (int) request('harmonic') : ($layoutHarmonic ?? 9); @endphp
{{-- Formu başlatıyoruz --}}
{{-- GİZLİ INPUTLAR (Mevcut yapın korundu) --}} @php $logoRedirectUrl = auth()->check() ? route('panel') : route('login'); @endphp {{-- TOOLBAR --}}
{{-- 1. LOGO --}} {{-- MOBİL: Sağa iten boşluk (hamburger + avatar sağda) --}} {{-- 2. BUTONLAR (MASAÜSTÜ - MOBİLDE GİZLİ) --}}
{{-- Yeni Harita Dropdown --}}
{{-- Ev Sistemi --}} {{--
--}} @if (empty($is_relationship_view) && empty($is_dual_view)) {{-- Haritalar (Offcanvas Drawer) - Abone olmayanlarda kredi bitince devre dışı --}} @php $canAccessMaps = $canAccessMapsDrawer ?? true; $isEnLocale = str_starts_with(strtolower(app()->getLocale()), 'en'); @endphp @endif {{-- ✅ ÇOKLU HARİTA: "Değiştir" (harita seç / iç-dış katman değiştir) butonu sadece 2-3 kişilik ilişki/çoklu haritada anlamlı — A/B kartları ve iç/dış katman değiştirme sadece 2 kişiyi bilir. 4 kişilik haritada (relationshipD dolu) bu buton kaldırılır. --}} @if (!empty($is_relationship_view) && empty($relationshipD))
@endif {{-- Haritalarım (panel içinde modal) --}} {{-- Transit --}} {{-- Yıldızlar --}} {{-- Rapor --}} {{-- Yorum Al --}} @if (!($isSubscriber ?? false)) {{-- Abone Ol (yorum al butonunun yanında, sadece abone değilse) --}} {{ t('subscribe') }} @endif {{-- Paket Al --}} {{-- Paket Al --}} @if (empty($is_relationship_view) && empty($is_dual_view)) {{-- Horary (Soru Sor) --}} @endif {{-- Yıllık --}} {{-- --}} @php $rectificationLabel = str_starts_with(strtolower(app()->getLocale()), 'en') ? 'Rectification' : 'Rektifikasyon'; $electionalLabel = str_starts_with(strtolower(app()->getLocale()), 'en') ? 'Electional' : 'Seçim Astrolojisi'; @endphp {{-- Kaydet butonu (önizleme modunda) – harita seçin yanında --}}
{{-- 4. MOBİL: Hızlı Aksiyonlar --}}
{{-- 4. AVATAR (sadece masaüstü) --}}
{{-- MOBİL: Soldan açılan menü – scroll yok, ızgara + kompakt profil --}}
{{-- Harita İşlemleri: 2x4 ızgara, scroll yok --}}
{{ t('map-operations') }}
@if (empty($is_relationship_view) && empty($is_dual_view)) @php $canAccessMapsSidebar = $canAccessMapsDrawer ?? true; $isEnLocaleSidebar = str_starts_with(strtolower(app()->getLocale()), 'en'); @endphp
@endif @if (!empty($is_relationship_view) && empty($relationshipD))
@endif
@if (empty($is_relationship_view) && empty($is_dual_view))
@endif
{{-- Yan sekmede panel açık - buradan mı devam et? --}} {{-- Rapor Hakkı Bitti Modal --}} {{-- Yorum Al Modal --}} {{-- Natal Yorum Raporu Sonuç Modalı --}} {{-- Panel toast bildirimi (sağ üst) --}}
{{-- Rapor hazırlanma bildirim banner'ı --}}
{{-- Loading durumu --}}
{{ t('report-is-being-prepared') }}
{{ t('continue-using-the-panel') }}
0%
{{-- Hazır durumu --}}
{{ t('report-is-ready') }}
{{ t('click-to-view') }}
{{-- SOL: Haritalar --}}
{{-- SOL küçükler --}}
@if ($isPreviewFocused) @endif @foreach ($leftKeys as $k) @php $leftHasChart = isset($charts[$k]); $leftTitle = $leftHasChart ? ($charts[$k]['title'] ?? $k) : ucwords(str_replace('_', ' ', (string) $k)); @endphp
{{ $leftTitle }}
{{ t('drag') }}
@if ($leftHasChart) {!! app(\App\Services\ChartVisualizerService::class)->renderSvgForChartKey($k, is_array($charts[$k]['raw'] ?? null) ? $charts[$k]['raw'] : [], $charts[$k]['visual']) !!} @endif
@endforeach
{{-- ORTA büyük --}}
{{-- ✅ ÜST BİLGİ (Konum / Tarih / Saat / TZ / LatLon) --}}
@if (!empty($is_relationship_view)) {{-- İLİŞKİ: A sol üst köşe, B sağ üst köşe (normal mod gibi kompakt) --}} @php $dotColorA = $relationshipA['color'] ?? '#e91e63'; $dotColorB = $relationshipB['color'] ?? '#1e88e5'; $dotColorC = $relationshipC['color'] ?? '#16a34a'; $dotColorD = $relationshipD['color'] ?? '#f59e0b'; @endphp {{-- Kişi A: Sol üst köşe — tıklanınca alt istatistikler Kişi A'ya geçer --}}
{{ $relationshipA['title'] ?? 'Kişi A' }}
{{ !empty($relationshipA['date'] ?? null) ? \Carbon\Carbon::parse($relationshipA['date'])->format('d-m-Y') : '-' }}
{{ $relationshipA['time'] ?? '-' }}
{{ $relationshipA['cityName'] ?? '' }}
{{ $houseSystems[$relationshipA['house_system'] ?? ($houseSystem ?? 'P')] ?? 'Placidus' }}
detaylar
{{-- Kişi B: Sağ üst köşe — tıklanınca alt istatistikler Kişi B'ye geçer --}}
{{ $relationshipB['title'] ?? 'Kişi B' }}
{{ !empty($relationshipB['date'] ?? null) ? \Carbon\Carbon::parse($relationshipB['date'])->format('d-m-Y') : '-' }}
{{ $relationshipB['time'] ?? '-' }}
{{ $relationshipB['cityName'] ?? '' }}
{{ $houseSystems[$relationshipB['house_system'] ?? ($houseSystem ?? 'P')] ?? 'Placidus' }}
detaylar
{{-- ✅ ÇOKLU HARİTA: Kişi C — Sol alt köşe (sadece 3-4 kişilik haritada dolu) --}} @if (!empty($relationshipC))
{{ $relationshipC['title'] ?? 'Kişi C' }}
{{ !empty($relationshipC['date'] ?? null) ? \Carbon\Carbon::parse($relationshipC['date'])->format('d-m-Y') : '-' }}
{{ $relationshipC['time'] ?? '-' }}
{{ $relationshipC['cityName'] ?? '' }}
{{ $houseSystems[$relationshipC['house_system'] ?? ($houseSystem ?? 'P')] ?? 'Placidus' }}
detaylar
@endif {{-- ✅ ÇOKLU HARİTA: Kişi D — Sağ alt köşe (sadece 4 kişilik haritada dolu) --}} @if (!empty($relationshipD))
{{ $relationshipD['title'] ?? 'Kişi D' }}
{{ !empty($relationshipD['date'] ?? null) ? \Carbon\Carbon::parse($relationshipD['date'])->format('d-m-Y') : '-' }}
{{ $relationshipD['time'] ?? '-' }}
{{ $relationshipD['cityName'] ?? '' }}
{{ $houseSystems[$relationshipD['house_system'] ?? ($houseSystem ?? 'P')] ?? 'Placidus' }}
detaylar
@endif @elseif (!empty($is_dual_view)) {{-- ÇOKLU: A sol üst köşe, B sağ üst köşe --}} @php $dotColorA = $dualA['color'] ?? '#e91e63'; $dotColorB = $dualB['color'] ?? '#1e88e5'; @endphp {{-- Kişi A: Sol --}}
{{ $dualA['title'] ?? 'Kişi A' }}
{{ !empty($dualA['date'] ?? null) ? \Carbon\Carbon::parse($dualA['date'])->format('d-m-Y') : '-' }}
{{ $dualA['time'] ?? '-' }}
{{ $dualA['cityName'] ?? '' }}
detaylar
{{-- Kişi B: Sağ --}}
{{ $dualB['title'] ?? 'Kişi B' }}
{{ !empty($dualB['date'] ?? null) ? \Carbon\Carbon::parse($dualB['date'])->format('d-m-Y') : '-' }}
{{ $dualB['time'] ?? '-' }}
{{ $dualB['cityName'] ?? '' }}
detaylar
@else {{-- TEKİL HARİTA: Sol üst köşe dikey bilgi kartı --}} @php $dotColor = match ($chartGender ?? null) { 'male' => '#3b82f6', 'female' => '#ec4899', default => '#479483', }; $isDefaultHorary = in_array($defaultKey ?? '', ['horary', 'horary_transit'], true); $defaultHoraryRaw = null; if ($isDefaultHorary) { $defaultHoraryRaw = $charts['horary']['raw'] ?? null; if (!is_array($defaultHoraryRaw)) { $defaultHoraryRaw = null; } } $isDefaultSidereal = in_array($defaultKey ?? '', ['sidereal', 'sidereal_transit'], true); $defaultSiderealAyanamsaName = null; $defaultSiderealAyanamsaFormatted = null; $defaultSiderealDChartLabel = null; $defaultSiderealDChartName = null; if ($isDefaultSidereal) { $defaultSiderealRaw = $charts['sidereal']['raw'] ?? null; if (is_array($defaultSiderealRaw)) { $defaultSiderealAyanamsaName = $defaultSiderealRaw['ayanamsa']['name'] ?? null; $defaultSiderealAyanamsaFormatted = $defaultSiderealRaw['ayanamsa']['formatted'] ?? null; $defaultSiderealDChartLabel = $defaultSiderealRaw['d_chart']['label'] ?? null; $defaultSiderealDChartName = $defaultSiderealRaw['d_chart']['name'] ?? null; } } $defaultHoraryDate = null; $defaultHoraryTime = null; $defaultHoraryDateTime = isset($defaultHoraryRaw['horary_datetime']) ? trim((string) $defaultHoraryRaw['horary_datetime']) : ''; if ($defaultHoraryDateTime !== '' && preg_match('/^(\d{2}\.\d{2}\.\d{4})\s+(\d{2}:\d{2})/', $defaultHoraryDateTime, $dateMatches)) { $defaultHoraryDate = $dateMatches[1]; $defaultHoraryTime = $dateMatches[2]; } $defaultHoraryLocation = isset($defaultHoraryRaw['horary_location']) ? trim((string) $defaultHoraryRaw['horary_location']) : ''; $defaultHoraryQuestion = isset($defaultHoraryRaw['horary_question']) ? preg_replace('/\s+/u', ' ', trim((string) $defaultHoraryRaw['horary_question'])) : ''; @endphp
{{ $ownerName ?? 'Kişi' }}
{{ !empty($date) ? \Carbon\Carbon::parse($date)->format('d-m-Y') : '-' }}
{{ !empty($is_time_unknown) ? 'Bilinmiyor' : ($time ?? '-') }}
{{ $cityName ?? '' }}
@php $defaultChartHouseLabel = $charts[$defaultKey]['visual']['house_system_label'] ?? null; $houseName = $defaultChartHouseLabel ?? (isset($houseSystems[$houseSystem ?? 'P']) ? $houseSystems[$houseSystem ?? 'P'] : $houseSystem ?? 'Placidus'); @endphp {{ $houseName }}
Horary Soru
{{ $defaultHoraryQuestion !== '' ? $defaultHoraryQuestion : '-' }}
{{ $defaultHoraryDate ?: '-' }}
{{ $defaultHoraryTime ?: '-' }}
{{ $defaultHoraryLocation !== '' ? $defaultHoraryLocation : '-' }}
Ayanamsha : {{ $defaultSiderealAyanamsaName ?: '-' }}
Dasha : @if ($defaultSiderealDChartLabel) {{ $defaultSiderealDChartLabel }}{{ $defaultSiderealDChartName ? ' (' . $defaultSiderealDChartName . ')' : '' }} @else - @endif
Derece : {{ $defaultSiderealAyanamsaFormatted ?: '-' }}
@endif
{{ $charts[$defaultKey]['title'] ?? 'Doğum Haritası' }}
@isset($charts[$defaultKey]) {!! app(\App\Services\ChartVisualizerService::class)->renderSvgForChartKey($defaultKey, is_array($charts[$defaultKey]['raw'] ?? null) ? $charts[$defaultKey]['raw'] : [], $charts[$defaultKey]['visual']) !!} @endisset
{{-- Local Space Leaflet harita konteynırı (varsayılan gizli) --}}
{{-- SAĞ küçükler --}}
@if ($isPreviewFocused) @endif @foreach ($rightKeys as $k) @php $rightHasChart = isset($charts[$k]); $rightTitle = $rightHasChart ? ($charts[$k]['title'] ?? $k) : ucwords(str_replace('_', ' ', (string) $k)); @endphp
{{ $rightTitle }}
{{ t('drag') }}
@if ($rightHasChart) {!! app(\App\Services\ChartVisualizerService::class)->renderSvgForChartKey($k, is_array($charts[$k]['raw'] ?? null) ? $charts[$k]['raw'] : [], $charts[$k]['visual']) !!} @endif
@endforeach
@php $showPersonTabs = (!empty($is_relationship_view) || !empty($is_dual_view)) && !empty($charts[$defaultKey]['visual']['statsB'] ?? null); $personATitle = $relationshipA['title'] ?? (null ?? (isset($dualA['title']) ? $dualA['title'] : 'Kişi A')); $personBTitle = $relationshipB['title'] ?? (null ?? (isset($dualB['title']) ? $dualB['title'] : 'Kişi B')); $personAColor = $relationshipA['color'] ?? (null ?? (isset($dualA['color']) ? $dualA['color'] : '#e91e63')); $personBColor = $relationshipB['color'] ?? (null ?? (isset($dualB['color']) ? $dualB['color'] : '#1e88e5')); $statsA = $charts[$defaultKey]['visual']['statsA'] ?? null; $statsB = $charts[$defaultKey]['visual']['statsB'] ?? null; // ✅ ÇOKLU HARİTA: 3. ve 4. kişi (sadece varsa dolu). $statsC = $charts[$defaultKey]['visual']['statsC'] ?? null; $statsD = $charts[$defaultKey]['visual']['statsD'] ?? null; @endphp {{-- Mobil Harita Seç --}}
@php $isSubscriber = $isSubscriber ?? false; $shouldBlurContent = $isPreviewFocused ? true : !($canViewContentClear ?? true); $panelTimeGate = $isPreviewFocused ? false : !$isSubscriber; $initialBlurForTimeGate = false; // AI Chat, harita/rapor içeriğinden ayrı bir kapıya sahip: abone olsa bile // Token'ı bitmiş/hiç olmayan kullanıcıya "abone ol" değil "Token satın al" gösterilir. $aiChatNeedsTokens = $isSubscriber && (($chatWordsRemaining ?? 0) <= 0); $aiChatShouldBlur = $isPreviewFocused ? true : (!$isSubscriber || $aiChatNeedsTokens); @endphp
@if ($shouldBlurContent || $panelTimeGate) @endif {{-- MOBİL: Aşağı açılır toggle butonu (sadece
{{-- /person-detail-section --}}
{{-- SAĞ: TAB'lı Panel --}}
{{-- MOBİL: Aşağı açılır toggle butonu (sadece
{{-- /.panel-page-main --}} {{-- Panel sayfası altbilgisi --}} @include('component.frontend.footer') @include('frontend.panel.partials.chart-save') {{-- Gizli person-tab UL: JS syncPersonDetailPanes() için state tutucu --}} @if ($showPersonTabs) @endif {{-- ANA LAYOUT --}} {{-- Modal burada da kullanılacaksa include edebilirsin --}} @include('frontend.panel.partials.fixed-stars-modal') @include('frontend.panel.partials.new-chart-modal') @include('frontend.panel.partials.my-charts-modal') @include('frontend.panel.partials.relationship-modal') @include('frontend.panel.partials.dual-chart-modal') @include('frontend.panel.partials.horary-modal') @include('frontend.panel.partials.transit-modal') @include('frontend.panel.partials.rectification-modal') @include('frontend.panel.partials.electional-modal') @if (!empty($is_relationship_view)) @include('frontend.panel.partials.relationship-chart-picker-modal') @endif {{-- Haritalar Offcanvas (Sağdan Açılır Panel) --}} @include('frontend.panel.partials.all-chart-modal') @if (empty($is_relationship_view) && empty($is_dual_view)) {{-- Harita Kombinasyonları (bi-wheel) modal --}} @include('frontend.panel.partials.chart-combo-modal') @endif {{-- Social giriş: eksik profil bilgilerini tamamlama popup'ı --}} @auth @if(auth()->user()->provider) @include('frontend.panel.partials.complete-social-profile-modal') @endif @endauth {{-- Bootstrap JS --}} @if (!empty($is_relationship_view)) @endif @if(isset($live_session)) @include('frontend.panel.partials.live-session-controls') @else @include('frontend.panel.partials.live-session-launcher') @endif {{-- Mobil sidebar: tetikleyici butonlar ve modal/offcanvas tıklanınca kapat --}} {{-- Bootstrap Tooltip Initialize --}} {{-- Yan sekme algılama: panel birden fazla sekmede açılırsa "buradan mı devam?" sorusu --}} @auth @php $u = auth()->user(); $needsEmailVerify = $u && method_exists($u, 'hasVerifiedEmail') ? !$u->hasVerifiedEmail() : empty($u?->email_verified_at); @endphp @if ($needsEmailVerify)
{{ t('email-verify-title') }}
{{ t('email-verify-body') }}
@endif @endauth