{
    "id": 22,
    "name": "Slider NRES",
    "code": "slider_nres",
    "content": "{{-- ============================================================================\r\n     COMPONENT: Slider NRES — data dari modul Content Slider (CMS)\r\n     Kod komponen: slider_nres  ·  komponen DB #22\r\n\r\n     Sumber data:\r\n       · content_slider              → slider_portal (slug site), slider_status = ACTIVE,\r\n                                       slider_sort, slider_url_type (NONE/EXTERNAL/INTERNAL/FILE),\r\n                                       slider_url, slider_url_upload, tetingkap tarikh\r\n       · content_slider_translation  → tajuk + imej (ms/en, fallback main=1)\r\n\r\n     Fail imej/PDF: disk `public` → /storage/content-slider/…  (disimpan LOKAL,\r\n     tiada hotlink ke portal asal)\r\n\r\n     JS carousel (auto, prev/next, dots, swipe) ada dalam layout site NRES dan\r\n     hanya aktif bila elemen #cepa wujud — markup/kelas di bawah mesti kekal.\r\n     ============================================================================ --}}\r\n\r\n@php\r\n    $sldLang = ($lang ?? session('locale', 'ms')) === 'en' ? 'en' : 'ms';\r\n    $sldPortal = (string) ($siteSlug ?? 'nres');\r\n    $sldToday = now()->toDateString();\r\n\r\n    $sldRows = DB::table('content_slider')\r\n        ->where('slider_portal', $sldPortal)\r\n        ->where('slider_status', 'ACTIVE')\r\n        ->orderBy('slider_sort')\r\n        ->orderBy('slider_id')\r\n        ->get();\r\n\r\n    $sldIds = $sldRows->pluck('slider_id')->all();\r\n\r\n    $sldTr = $sldIds\r\n        ? DB::table('content_slider_translation')\r\n            ->whereIn('slider_translation_parent_id', $sldIds)\r\n            ->get()\r\n            ->groupBy('slider_translation_parent_id')\r\n        : collect();\r\n\r\n    // Laluan relatif (disk public) → URL /storage/…  ; URL penuh dibiarkan\r\n    $sldUrl = function ($path) {\r\n        $path = trim((string) $path);\r\n\r\n        if ($path === '') {\r\n            return '';\r\n        }\r\n\r\n        if (preg_match('#^(https?:)?//#i', $path)) {\r\n            return $path;\r\n        }\r\n\r\n        return asset('storage/'.ltrim($path, '/'));\r\n    };\r\n\r\n    // Tetingkap terbit (tarikh sahaja; nilai kosong = sentiasa aktif)\r\n    $sldInWindow = function ($row) use ($sldToday) {\r\n        $start = trim((string) ($row->slider_start_date ?? ''));\r\n        $end = trim((string) ($row->slider_end_date ?? ''));\r\n\r\n        if ($start !== '' && preg_match('/^\\d{4}-\\d{2}-\\d{2}/', $start) && substr($start, 0, 10) > $sldToday) {\r\n            return false;\r\n        }\r\n\r\n        if ($end !== '' && preg_match('/^\\d{4}-\\d{2}-\\d{2}/', $end) && substr($end, 0, 10) < $sldToday) {\r\n            return false;\r\n        }\r\n\r\n        return true;\r\n    };\r\n\r\n    $sldItems = [];\r\n\r\n    foreach ($sldRows as $sldRow) {\r\n        if (! $sldInWindow($sldRow)) {\r\n            continue;\r\n        }\r\n\r\n        $rows = $sldTr[$sldRow->slider_id] ?? collect();\r\n\r\n        $tr = $rows->firstWhere('slider_translation_language', $sldLang)\r\n            ?? $rows->firstWhere('slider_translation_main', 1)\r\n            ?? $rows->first();\r\n\r\n        if (! $tr) {\r\n            continue;\r\n        }\r\n\r\n        $img = $sldUrl($tr->slider_translation_img);\r\n\r\n        if ($img === '') {\r\n            continue;\r\n        }\r\n\r\n        $link = '';\r\n\r\n        if ((string) $sldRow->slider_url_type === 'FILE') {\r\n            $link = $sldUrl($sldRow->slider_url_upload);\r\n        } elseif (in_array((string) $sldRow->slider_url_type, ['EXTERNAL', 'INTERNAL'], true)) {\r\n            $link = trim((string) $sldRow->slider_url);\r\n        }\r\n\r\n        $sldItems[] = [\r\n            'title' => trim((string) $tr->slider_translation_title),\r\n            'img' => $img,\r\n            'link' => $link,\r\n        ];\r\n    }\r\n\r\n    $sldTotal = count($sldItems);\r\n@endphp\r\n\r\n@if ($sldTotal > 0)\r\n    <section class=\"card-soft p-2 overlap\">\r\n        <div class=\"cepa\" id=\"cepa\" role=\"region\" aria-roledescription=\"karusel\" aria-label=\"{{ $sldLang === 'en' ? 'Highlights' : 'Sorotan' }}\">\r\n            <div class=\"cepa-track\">\r\n                @foreach ($sldItems as $sldIndex => $sldItem)\r\n                    <figure class=\"cepa-slide\" role=\"group\" aria-roledescription=\"slaid\" aria-label=\"{{ ($sldIndex + 1).' / '.$sldTotal }}\">\r\n                        <div class=\"blur\" style=\"background-image:url('{{ $sldItem['img'] }}')\"></div>\r\n\r\n                        @if ($sldItem['link'] !== '')\r\n                            <a href=\"{{ $sldItem['link'] }}\" target=\"_blank\" rel=\"noopener\">\r\n                                <img src=\"{{ $sldItem['img'] }}\" alt=\"{{ $sldItem['title'] }}\" loading=\"{{ $sldIndex === 0 ? 'eager' : 'lazy' }}\">\r\n                            </a>\r\n                        @else\r\n                            <img src=\"{{ $sldItem['img'] }}\" alt=\"{{ $sldItem['title'] }}\" loading=\"{{ $sldIndex === 0 ? 'eager' : 'lazy' }}\">\r\n                        @endif\r\n                    </figure>\r\n                @endforeach\r\n            </div>\r\n\r\n            <span class=\"cepa-tag\">{{ $sldLang === 'en' ? 'HIGHLIGHTS' : 'SOROTAN' }}</span>\r\n\r\n            <button class=\"cepa-nav prev\" type=\"button\" aria-label=\"{{ $sldLang === 'en' ? 'Previous' : 'Sebelum' }}\"><svg viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"2.4\" stroke-linecap=\"round\" stroke-linejoin=\"round\" aria-hidden=\"true\"><path d=\"M15 5l-7 7 7 7\"/></svg></button>\r\n            <button class=\"cepa-nav next\" type=\"button\" aria-label=\"{{ $sldLang === 'en' ? 'Next' : 'Seterusnya' }}\"><svg viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"2.4\" stroke-linecap=\"round\" stroke-linejoin=\"round\" aria-hidden=\"true\"><path d=\"M9 5l7 7-7 7\"/></svg></button>\r\n\r\n            <div class=\"cepa-foot\"><div class=\"cepa-dots\"></div></div>\r\n            <span class=\"cepa-count\" aria-live=\"polite\">1 / {{ $sldTotal }}</span>\r\n        </div>\r\n    </section>\r\n@endif\r\n"
}