diff --git a/app/Filament/Pages/Information/CourseSchedule/Index.php b/app/Filament/Pages/Information/CourseSchedule/Index.php
index 8fdc560..c5e0a45 100644
--- a/app/Filament/Pages/Information/CourseSchedule/Index.php
+++ b/app/Filament/Pages/Information/CourseSchedule/Index.php
@@ -5,6 +5,7 @@
use App\Filament\Pages\Information\CourseSchedule\Actions\CreateScheduleAction;
use App\Filament\Pages\Information\CourseSchedule\Actions\DeleteScheduleAction;
use App\Filament\Pages\Information\CourseSchedule\Actions\EditScheduleAction;
+use App\Filament\Support\SystemNotification;
use App\Models\Course;
use App\Models\CourseSchedule;
use App\Settings\GeneralSettings;
@@ -45,6 +46,24 @@ class Index extends Page implements HasActions, HasForms
protected string $view = 'filament.pages.information.course-schedule.index';
+ #[Computed]
+ public function instructions(): string
+ {
+ return SystemNotification::getMessage('Geser ke samping buat intip hari lainnya ya! 📅✨', 'Geser ke samping untuk melihat hari lainnya.');
+ }
+
+ #[Computed]
+ public function emptyHeading(): string
+ {
+ return SystemNotification::getMessage('Yah, Belum Ada Jadwal Nih! 📄💤', 'Tidak ada data yang ditemukan');
+ }
+
+ #[Computed]
+ public function emptyDescription(): string
+ {
+ return SystemNotification::getMessage('Belum ada jadwal perkuliahan yang terdaftar. Mungkin hari ini kamu bisa istirahat dulu? 😉💤', 'Belum ada jadwal perkuliahan yang terdaftar untuk kriteria ini. Hubungi administrator jika jadwal Anda belum muncul.');
+ }
+
public ?string $search = '';
public static function getPagePermission(): string
diff --git a/app/Filament/Pages/Learning/StudyGroup/Index.php b/app/Filament/Pages/Learning/StudyGroup/Index.php
index cd30962..67a4122 100644
--- a/app/Filament/Pages/Learning/StudyGroup/Index.php
+++ b/app/Filament/Pages/Learning/StudyGroup/Index.php
@@ -6,6 +6,7 @@
use App\Filament\Pages\Learning\StudyGroup\Actions\DeleteStudyGroupAction;
use App\Filament\Pages\Learning\StudyGroup\Actions\EditStudyGroupAction;
use App\Filament\Pages\Learning\StudyGroup\Actions\SelectAllCoursesAction;
+use App\Filament\Support\SystemNotification;
use App\Models\Course;
use App\Models\Student;
use App\Models\StudyGroup;
@@ -52,6 +53,30 @@ public static function getPagePermission(): string
protected string $view = 'filament.pages.learning.study-group.index';
+ #[Computed]
+ public function heading(): string
+ {
+ return SystemNotification::getMessage('Daftar Grup Seru! 💃🕺', 'Kelompok Belajar');
+ }
+
+ #[Computed]
+ public function description(): string
+ {
+ return SystemNotification::getMessage('Lihat semua kelompok belajarmu di sini. Makin kompak makin asik! 🤝📚', 'Daftar kelompok belajar Anda dan teman-teman sekelas.');
+ }
+
+ #[Computed]
+ public function emptyHeading(): string
+ {
+ return SystemNotification::getMessage('Wah, Belum Ada Grup! 👯♂️🌀', 'Tidak ada data yang ditemukan');
+ }
+
+ #[Computed]
+ public function emptyDescription(): string
+ {
+ return SystemNotification::getMessage('Belum ada kelompok belajar yang terdaftar. Ayo ajak teman-temanmu bikin kelompok biar makin seru belajarnya! 🤝📄', 'Belum ada kelompok belajar yang terdaftar untuk kriteria ini. Klik tombol tambah untuk memulai pembuatan kelompok.');
+ }
+
public ?int $course_id = null;
public function mount(): void
diff --git a/app/Filament/Resources/Learning/Assignments/Pages/ListAssignments.php b/app/Filament/Resources/Learning/Assignments/Pages/ListAssignments.php
index 6ddcdfb..18411b7 100644
--- a/app/Filament/Resources/Learning/Assignments/Pages/ListAssignments.php
+++ b/app/Filament/Resources/Learning/Assignments/Pages/ListAssignments.php
@@ -8,6 +8,7 @@
use App\Filament\Resources\Learning\Assignments\Actions\EditAssignmentAction;
use App\Filament\Resources\Learning\Assignments\Actions\PinAction;
use App\Filament\Resources\Learning\Assignments\AssignmentResource;
+use App\Filament\Support\SystemNotification;
use App\Models\Assignment;
use App\Models\AssignmentPin;
use App\Settings\GeneralSettings;
@@ -34,6 +35,18 @@ protected function getHeaderActions(): array
];
}
+ #[Computed]
+ public function heading(): string
+ {
+ return SystemNotification::getMessage('Daftar Tugas Bikin Lemes! 🤣📒', 'Tugas Saya');
+ }
+
+ #[Computed]
+ public function description(): string
+ {
+ return SystemNotification::getMessage('Yuk, cek dan kumpulin tugasmu biar tenang hidupnya! Klik aja di tugasnya ya. 🚀👨💻', 'Klik pada tugas untuk melihat detail dan mengumpulkan file.');
+ }
+
public function pinAction(): Action
{
return PinAction::make();
diff --git a/app/Filament/Resources/Learning/Attendances/Pages/ManageAttendances.php b/app/Filament/Resources/Learning/Attendances/Pages/ManageAttendances.php
index d9af667..e4dbc04 100644
--- a/app/Filament/Resources/Learning/Attendances/Pages/ManageAttendances.php
+++ b/app/Filament/Resources/Learning/Attendances/Pages/ManageAttendances.php
@@ -35,6 +35,42 @@ class ManageAttendances extends Page implements HasForms, HasTable
protected string $view = 'filament.resources.learning.attendances.index';
+ #[Computed]
+ public function heading(): string
+ {
+ return SystemNotification::getMessage('Ayo Presensi Dulu! 🙋♂️✨', 'Sesi Kuliah');
+ }
+
+ #[Computed]
+ public function description(): string
+ {
+ return SystemNotification::getMessage('Jangan lupa absen ya kalau kelasnya udah mulai! Biar tercatat hadir. 💪', 'Silakan melakukan presensi sesuai dengan waktu kelas.');
+ }
+
+ #[Computed]
+ public function historyHeading(): string
+ {
+ return SystemNotification::getMessage('Jejak Presensimu 🕰️📜', 'Riwayat Presensi');
+ }
+
+ #[Computed]
+ public function historyDescription(): string
+ {
+ return SystemNotification::getMessage('Di sini kamu bisa ngecek semua histori kehadiranmu sebelumnya. Rajin-rajin ya! 🎓', 'Berikut adalah riwayat kehadiran Anda pada sesi perkuliahan.');
+ }
+
+ #[Computed]
+ public function emptyHeading(): string
+ {
+ return SystemNotification::getMessage('Yah, Absensi Belum Muncul! 💁♂️🌀', 'Tidak ada data yang ditemukan');
+ }
+
+ #[Computed]
+ public function emptyDescription(): string
+ {
+ return SystemNotification::getMessage('Sabar ya, setelah jadwal perkuliahan kamu muncul baru bisa diabsen di sini. Pantau terus jam kuliahnya! 🕒💪', 'Setelah jadwal Anda muncul, Anda dapat melakukan presensi di sini. Pastikan Anda mengecek kembali pada jam perkuliahan.');
+ }
+
public function getSchedules()
{
/** @var User|null $user */
diff --git a/app/Filament/Support/SystemNotification.php b/app/Filament/Support/SystemNotification.php
index 4fe309d..759af1a 100644
--- a/app/Filament/Support/SystemNotification.php
+++ b/app/Filament/Support/SystemNotification.php
@@ -232,6 +232,110 @@ public static function getMessage(string $cheerful, string $formal): string
return self::getNotifStyle() === NotifStyle::Cheerful ? $cheerful : $formal;
}
+ /**
+ * Get the theme settings for the current user.
+ */
+ public static function getThemeSettings(): object
+ {
+ /** @var \App\Models\User|null $user */
+ $user = Auth::user();
+ $settings = $user?->settings;
+
+ return (object) [
+ 'font' => $settings->font ?? 'Inter',
+ 'primary_color' => $settings->primary_color ?? 'amber',
+ 'border_radius' => match ($settings->border_radius ?? 'md') {
+ 'none' => '0px',
+ 'md' => '0.375rem',
+ 'lg' => '0.5rem',
+ 'xl' => '0.75rem',
+ '2xl' => '1rem',
+ default => '0.5rem',
+ },
+ 'content_width' => $settings->content_width ?? 'full',
+ 'top_navigation' => $settings->top_navigation ?? false,
+ ];
+ }
+
+ /**
+ * Get the RGB values for the selected primary color.
+ */
+ public static function getPrimaryColorValues(): array
+ {
+ /** @var \App\Models\User|null $user */
+ $user = Auth::user();
+ $colorName = $user?->settings?->primary_color ?? 'amber';
+
+ // Mapping from Filament base colors (these are standard Tailwind scale RGB values)
+ return match ($colorName) {
+ 'blue' => [
+ 50 => '239, 246, 255', 100 => '219, 234, 254', 200 => '191, 219, 254', 300 => '147, 197, 253',
+ 400 => '96, 165, 250', 500 => '59, 130, 246', 600 => '37, 99, 235', 700 => '29, 78, 216',
+ 800 => '30, 64, 175', 900 => '30, 58, 138', 950 => '23, 37, 84',
+ ],
+ 'sky' => [
+ 50 => '240, 249, 255', 100 => '224, 242, 254', 200 => '186, 230, 253', 300 => '125, 211, 252',
+ 400 => '56, 189, 248', 500 => '14, 165, 233', 600 => '2, 132, 199', 700 => '3, 105, 161',
+ 800 => '7, 89, 133', 900 => '12, 74, 110', 950 => '8, 51, 68',
+ ],
+ 'cyan' => [
+ 50 => '236, 254, 255', 100 => '207, 250, 254', 200 => '165, 243, 252', 300 => '103, 232, 249',
+ 400 => '34, 211, 238', 500 => '6, 182, 212', 600 => '8, 145, 178', 700 => '14, 116, 144',
+ 800 => '21, 94, 117', 900 => '22, 78, 99', 950 => '8, 51, 68',
+ ],
+ 'emerald' => [
+ 50 => '236, 253, 245', 100 => '209, 250, 229', 200 => '167, 243, 208', 300 => '110, 231, 183',
+ 400 => '52, 211, 153', 500 => '16, 185, 129', 600 => '5, 150, 105', 700 => '4, 120, 87',
+ 800 => '6, 95, 70', 900 => '6, 77, 58', 950 => '2, 44, 34',
+ ],
+ 'teal' => [
+ 50 => '240, 253, 250', 100 => '204, 251, 241', 200 => '153, 246, 228', 300 => '94, 234, 212',
+ 400 => '45, 212, 191', 500 => '20, 184, 166', 600 => '13, 148, 136', 700 => '15, 118, 110',
+ 800 => '17, 94, 89', 900 => '19, 78, 74', 950 => '4, 47, 46',
+ ],
+ 'lime' => [
+ 50 => '247, 254, 231', 100 => '236, 252, 203', 200 => '217, 249, 157', 300 => '190, 242, 94',
+ 400 => '163, 230, 53', 500 => '132, 204, 22', 600 => '101, 163, 13', 700 => '77, 124, 15',
+ 800 => '63, 98, 18', 900 => '54, 83, 20', 950 => '26, 46, 5',
+ ],
+ 'amber' => [
+ 50 => '255, 251, 235', 100 => '254, 243, 199', 200 => '253, 230, 138', 300 => '252, 211, 77',
+ 400 => '251, 191, 36', 500 => '245, 158, 11', 600 => '217, 119, 6', 700 => '180, 83, 9',
+ 800 => '146, 64, 14', 900 => '120, 53, 15', 950 => '69, 26, 3',
+ ],
+ 'orange' => [
+ 50 => '255, 247, 237', 100 => '255, 237, 213', 200 => '254, 215, 170', 300 => '253, 186, 116',
+ 400 => '251, 146, 60', 500 => '249, 115, 22', 600 => '234, 88, 12', 700 => '194, 65, 12',
+ 800 => '154, 52, 18', 900 => '124, 45, 18', 950 => '67, 20, 7',
+ ],
+ 'rose' => [
+ 50 => '255, 241, 242', 100 => '255, 228, 230', 200 => '254, 205, 211', 300 => '253, 164, 175',
+ 400 => '251, 113, 133', 500 => '244, 63, 94', 600 => '225, 29, 72', 700 => '190, 18, 60',
+ 800 => '159, 18, 57', 900 => '136, 19, 55', 950 => '76, 5, 25',
+ ],
+ 'fuchsia' => [
+ 50 => '253, 244, 255', 100 => '245, 208, 254', 200 => '240, 171, 252', 300 => '232, 121, 249',
+ 400 => '217, 70, 239', 500 => '192, 38, 211', 600 => '162, 28, 175', 700 => '134, 25, 143',
+ 800 => '112, 26, 117', 900 => '86, 28, 94', 950 => '70, 10, 73',
+ ],
+ 'violet' => [
+ 50 => '245, 243, 255', 100 => '237, 233, 254', 200 => '221, 214, 254', 300 => '196, 181, 253',
+ 400 => '167, 139, 250', 500 => '139, 92, 246', 600 => '124, 58, 237', 700 => '109, 40, 217',
+ 800 => '91, 33, 182', 900 => '76, 29, 149', 950 => '46, 16, 101',
+ ],
+ 'indigo' => [
+ 50 => '238, 242, 255', 100 => '224, 231, 255', 200 => '199, 210, 254', 300 => '165, 180, 252',
+ 400 => '129, 140, 248', 500 => '99, 102, 241', 600 => '79, 70, 229', 700 => '67, 56, 202',
+ 800 => '55, 48, 163', 900 => '49, 46, 129', 950 => '30, 27, 75',
+ ],
+ default => [
+ 50 => '255, 251, 235', 100 => '254, 243, 199', 200 => '253, 230, 138', 300 => '252, 211, 77',
+ 400 => '251, 191, 36', 500 => '245, 158, 11', 600 => '217, 119, 6', 700 => '180, 83, 9',
+ 800 => '146, 64, 14', 900 => '120, 53, 15', 950 => '69, 26, 3',
+ ],
+ };
+ }
+
/**
* Strip emojis if the notification style is formal.
*/
diff --git a/app/Filament/Widgets/SupportWidget.php b/app/Filament/Widgets/SupportWidget.php
index 7864864..b6510a1 100644
--- a/app/Filament/Widgets/SupportWidget.php
+++ b/app/Filament/Widgets/SupportWidget.php
@@ -2,6 +2,7 @@
namespace App\Filament\Widgets;
+use App\Filament\Support\SystemNotification;
use Filament\Widgets\Widget;
class SupportWidget extends Widget
@@ -11,4 +12,9 @@ class SupportWidget extends Widget
protected int|string|array $columnSpan = 'full';
protected string $view = 'filament.widgets.support-widget';
+
+ public function getHeading(): string
+ {
+ return SystemNotification::getMessage('Butuh Bantuan? Tanya Saja! 💬✨', 'Informasi & Bantuan');
+ }
}
diff --git a/app/Http/Controllers/HomeController.php b/app/Http/Controllers/HomeController.php
new file mode 100644
index 0000000..e5fb1a8
--- /dev/null
+++ b/app/Http/Controllers/HomeController.php
@@ -0,0 +1,27 @@
+ SystemNotification::getMessage('Kuliah Jadi Makin Simpel! 🚀📚', 'Sistem Manajemen Kelas'),
+ 'hero_subtitle' => SystemNotification::getMessage('Gak Ribet Lagi.', 'Sederhana & Terintegrasi.'),
+ 'feature_session' => SystemNotification::getMessage('Info Sesi Kuliah 🏢📅', 'Manajemen Sesi'),
+ 'feature_session_desc' => SystemNotification::getMessage('Pantau jadwal kelasmu biar nggak ketinggalan info penting ya! 🕒✨', 'Pemantauan kelas dan penjadwalan terstruktur dan mudah dilihat.'),
+ 'feature_task' => SystemNotification::getMessage('Tugas & Materi 📝📚', 'Tugas & Materi'),
+ 'feature_task_desc' => SystemNotification::getMessage('Ambil materi dan kumpulin tugas dalam satu tempat, praktis banget! 🚀📂', 'Pengelolaan repositori perkuliahan dan pengumpulan tugas.'),
+ 'feature_attendance' => SystemNotification::getMessage('Presensi Digital 🙋♂️✅', 'Presensi Digital'),
+ 'feature_attendance_desc' => SystemNotification::getMessage('Absen makin gampang, tinggal klik langsung tercatat hadir. Gapake lama! 🔥⚡', 'Sistem pendataan kehadiran yang praktis, cepat, dan real-time.'),
+ 'feature_group' => SystemNotification::getMessage('Grup Belajar 👯♀️💬', 'Grup Belajar'),
+ 'feature_group_desc' => SystemNotification::getMessage('Bikin kelompok biar belajar bareng temen makin asik dan seru! 🌈✨', 'Ruang kolaborasi, diskusi, dan obrolan untuk saling terhubung.'),
+ ];
+
+ return view('welcome', compact('headings'));
+ }
+}
diff --git a/app/Http/Controllers/ShareAssignmentController.php b/app/Http/Controllers/ShareAssignmentController.php
index 0806c2b..f2c2a05 100644
--- a/app/Http/Controllers/ShareAssignmentController.php
+++ b/app/Http/Controllers/ShareAssignmentController.php
@@ -3,6 +3,7 @@
namespace App\Http\Controllers;
use App\Enums\AssignmentType;
+use App\Filament\Support\SystemNotification;
use App\Models\Assignment;
use App\Models\AssignmentSubmission;
use App\Models\Course;
@@ -62,6 +63,11 @@ public function show(Request $request, Course $course): View
? Carbon::parse($assignment->due_date)->translatedFormat('l, d F Y H:i')
: '-';
+ $headings = [
+ 'list' => SystemNotification::getMessage('Daftar Pengumpulan 🚀✨', 'Daftar Pengumpulan'),
+ 'info' => SystemNotification::getMessage('Informasi Tugas 📚✨', 'Informasi Tugas'),
+ ];
+
return view('pages.share-assignment', compact(
'course',
'assignment',
@@ -72,7 +78,8 @@ public function show(Request $request, Course $course): View
'submittedCount',
'submissionPercentage',
'formattedDeadline',
- 'isGroup'
+ 'isGroup',
+ 'headings'
));
}
}
diff --git a/app/Http/Controllers/ShareAttendanceController.php b/app/Http/Controllers/ShareAttendanceController.php
index ba13dde..c3f3879 100644
--- a/app/Http/Controllers/ShareAttendanceController.php
+++ b/app/Http/Controllers/ShareAttendanceController.php
@@ -2,6 +2,7 @@
namespace App\Http\Controllers;
+use App\Filament\Support\SystemNotification;
use App\Models\Assignment;
use App\Models\Attendance;
use App\Models\ClassSession;
@@ -55,6 +56,11 @@ public function show(Request $request, Course $course): View
? Carbon::parse($sessionInfo->start_time)->format('H:i').' - '.Carbon::parse($sessionInfo->end_time)->format('H:i')
: '-';
+ $headings = [
+ 'list' => SystemNotification::getMessage('Daftar Kehadiran 📝✨', 'Daftar Kehadiran'),
+ 'info' => SystemNotification::getMessage('Informasi Sesi 🏢✨', 'Informasi Sesi'),
+ ];
+
return view('pages.share-attendance', compact(
'course',
'attendances',
@@ -65,7 +71,8 @@ public function show(Request $request, Course $course): View
'totalStudents',
'presentCount',
'attendancePercentage',
- 'formattedTime'
+ 'formattedTime',
+ 'headings'
));
}
}
diff --git a/app/Http/Middleware/DynamicFilamentTheme.php b/app/Http/Middleware/DynamicFilamentTheme.php
index 51b996c..5e0468a 100644
--- a/app/Http/Middleware/DynamicFilamentTheme.php
+++ b/app/Http/Middleware/DynamicFilamentTheme.php
@@ -75,6 +75,12 @@ public function handle(Request $request, Closure $next): Response
:root {
--font-family: '{$font}', sans-serif;
--c-border-radius: {$radius};
+
+ /* Global Tailwind V4 Radius Overrides */
+ --radius-md: {$radius} !important;
+ --radius-lg: {$radius} !important;
+ --radius-xl: {$radius} !important;
+ --radius-2xl: {$radius} !important;
}
body {
@@ -88,9 +94,32 @@ public function handle(Request $request, Closure $next): Response
margin-right: auto !important;
}
- /* Apply border radius to common elements */
- .fi-section, .fi-btn, .fi-input, .fi-card, .fi-modal-window {
- border-radius: {$radius} !important;
+ /* Apply border radius to common elements and custom containers */
+ .fi-section, .fi-btn, .fi-input, .fi-card, .fi-modal-window,
+ .rounded-lg, .rounded-md, .rounded-xl, .rounded-2xl {
+ border-radius: var(--c-border-radius) !important;
+ }
+
+ /* Target specific buttons and areas in custom views */
+ .fi-main input[type='file']::file-selector-button {
+ border-radius: var(--c-border-radius) !important;
+ }
+
+ /* Ensure primary color for custom views (Tailwind Custom Colors mapping) */
+ @media screen {
+ :root {
+ --color-primary-50: rgb(var(--primary-50)) !important;
+ --color-primary-100: rgb(var(--primary-100)) !important;
+ --color-primary-200: rgb(var(--primary-200)) !important;
+ --color-primary-300: rgb(var(--primary-300)) !important;
+ --color-primary-400: rgb(var(--primary-400)) !important;
+ --color-primary-500: rgb(var(--primary-500)) !important;
+ --color-primary-600: rgb(var(--primary-600)) !important;
+ --color-primary-700: rgb(var(--primary-700)) !important;
+ --color-primary-800: rgb(var(--primary-800)) !important;
+ --color-primary-900: rgb(var(--primary-900)) !important;
+ --color-primary-950: rgb(var(--primary-950)) !important;
+ }
}
")
diff --git a/app/Providers/AppServiceProvider.php b/app/Providers/AppServiceProvider.php
index 452e6b6..eb1df7c 100644
--- a/app/Providers/AppServiceProvider.php
+++ b/app/Providers/AppServiceProvider.php
@@ -2,6 +2,7 @@
namespace App\Providers;
+use App\Filament\Support\SystemNotification;
use Illuminate\Support\ServiceProvider;
class AppServiceProvider extends ServiceProvider
@@ -19,6 +20,9 @@ public function register(): void
*/
public function boot(): void
{
- //
+ view()->composer('*', function ($view) {
+ $view->with('userTheme', SystemNotification::getThemeSettings());
+ $view->with('primaryColors', SystemNotification::getPrimaryColorValues());
+ });
}
}
diff --git a/resources/views/filament/pages/information/course-schedule/index.blade.php b/resources/views/filament/pages/information/course-schedule/index.blade.php
index 814ce21..7b4736e 100644
--- a/resources/views/filament/pages/information/course-schedule/index.blade.php
+++ b/resources/views/filament/pages/information/course-schedule/index.blade.php
@@ -6,7 +6,7 @@ class="fi-section-content rounded-xl border border-info-200 bg-info-50 dark:bg-i
Jika Anda menemukan masalah dalam penggunaan aplikasi, membutuhkan bantuan, atau memiliki ide diff --git a/resources/views/pages/share-assignment.blade.php b/resources/views/pages/share-assignment.blade.php index d471ea0..a181a52 100644 --- a/resources/views/pages/share-assignment.blade.php +++ b/resources/views/pages/share-assignment.blade.php @@ -7,6 +7,26 @@
Kelola jadwal kelas, daftar presensi, pengumpulan tugas, hingga materi belajar dalam satu @@ -78,9 +107,10 @@ class="w-12 h-12 rounded-lg bg-primary-50 dark:bg-primary-500/10 flex items-cent
Pemantauan kelas dan penjadwalan terstruktur - dan mudah dilihat.
++ {{ $headings['feature_session_desc'] }}
Pengelolaan repositori perkuliahan dan - pengumpulan tugas.
++ {{ $headings['feature_task_desc'] }}
Sistem pendataan kehadiran yang praktis, - cepat, dan real-time.
++ {{ $headings['feature_attendance_desc'] }}
Ruang kolaborasi, diskusi, dan obrolan untuk - saling terhubung.
++ {{ $headings['feature_group_desc'] }}