feat: integrate system notifications for enhanced messaging and theming across various pages and components
This commit is contained in:
parent
a20ca4b0b3
commit
e14f402322
@ -5,6 +5,7 @@
|
|||||||
use App\Filament\Pages\Information\CourseSchedule\Actions\CreateScheduleAction;
|
use App\Filament\Pages\Information\CourseSchedule\Actions\CreateScheduleAction;
|
||||||
use App\Filament\Pages\Information\CourseSchedule\Actions\DeleteScheduleAction;
|
use App\Filament\Pages\Information\CourseSchedule\Actions\DeleteScheduleAction;
|
||||||
use App\Filament\Pages\Information\CourseSchedule\Actions\EditScheduleAction;
|
use App\Filament\Pages\Information\CourseSchedule\Actions\EditScheduleAction;
|
||||||
|
use App\Filament\Support\SystemNotification;
|
||||||
use App\Models\Course;
|
use App\Models\Course;
|
||||||
use App\Models\CourseSchedule;
|
use App\Models\CourseSchedule;
|
||||||
use App\Settings\GeneralSettings;
|
use App\Settings\GeneralSettings;
|
||||||
@ -45,6 +46,24 @@ class Index extends Page implements HasActions, HasForms
|
|||||||
|
|
||||||
protected string $view = 'filament.pages.information.course-schedule.index';
|
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 ?string $search = '';
|
||||||
|
|
||||||
public static function getPagePermission(): string
|
public static function getPagePermission(): string
|
||||||
|
|||||||
@ -6,6 +6,7 @@
|
|||||||
use App\Filament\Pages\Learning\StudyGroup\Actions\DeleteStudyGroupAction;
|
use App\Filament\Pages\Learning\StudyGroup\Actions\DeleteStudyGroupAction;
|
||||||
use App\Filament\Pages\Learning\StudyGroup\Actions\EditStudyGroupAction;
|
use App\Filament\Pages\Learning\StudyGroup\Actions\EditStudyGroupAction;
|
||||||
use App\Filament\Pages\Learning\StudyGroup\Actions\SelectAllCoursesAction;
|
use App\Filament\Pages\Learning\StudyGroup\Actions\SelectAllCoursesAction;
|
||||||
|
use App\Filament\Support\SystemNotification;
|
||||||
use App\Models\Course;
|
use App\Models\Course;
|
||||||
use App\Models\Student;
|
use App\Models\Student;
|
||||||
use App\Models\StudyGroup;
|
use App\Models\StudyGroup;
|
||||||
@ -52,6 +53,30 @@ public static function getPagePermission(): string
|
|||||||
|
|
||||||
protected string $view = 'filament.pages.learning.study-group.index';
|
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 ?int $course_id = null;
|
||||||
|
|
||||||
public function mount(): void
|
public function mount(): void
|
||||||
|
|||||||
@ -8,6 +8,7 @@
|
|||||||
use App\Filament\Resources\Learning\Assignments\Actions\EditAssignmentAction;
|
use App\Filament\Resources\Learning\Assignments\Actions\EditAssignmentAction;
|
||||||
use App\Filament\Resources\Learning\Assignments\Actions\PinAction;
|
use App\Filament\Resources\Learning\Assignments\Actions\PinAction;
|
||||||
use App\Filament\Resources\Learning\Assignments\AssignmentResource;
|
use App\Filament\Resources\Learning\Assignments\AssignmentResource;
|
||||||
|
use App\Filament\Support\SystemNotification;
|
||||||
use App\Models\Assignment;
|
use App\Models\Assignment;
|
||||||
use App\Models\AssignmentPin;
|
use App\Models\AssignmentPin;
|
||||||
use App\Settings\GeneralSettings;
|
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
|
public function pinAction(): Action
|
||||||
{
|
{
|
||||||
return PinAction::make();
|
return PinAction::make();
|
||||||
|
|||||||
@ -35,6 +35,42 @@ class ManageAttendances extends Page implements HasForms, HasTable
|
|||||||
|
|
||||||
protected string $view = 'filament.resources.learning.attendances.index';
|
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()
|
public function getSchedules()
|
||||||
{
|
{
|
||||||
/** @var User|null $user */
|
/** @var User|null $user */
|
||||||
|
|||||||
@ -232,6 +232,110 @@ public static function getMessage(string $cheerful, string $formal): string
|
|||||||
return self::getNotifStyle() === NotifStyle::Cheerful ? $cheerful : $formal;
|
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.
|
* Strip emojis if the notification style is formal.
|
||||||
*/
|
*/
|
||||||
|
|||||||
@ -2,6 +2,7 @@
|
|||||||
|
|
||||||
namespace App\Filament\Widgets;
|
namespace App\Filament\Widgets;
|
||||||
|
|
||||||
|
use App\Filament\Support\SystemNotification;
|
||||||
use Filament\Widgets\Widget;
|
use Filament\Widgets\Widget;
|
||||||
|
|
||||||
class SupportWidget extends Widget
|
class SupportWidget extends Widget
|
||||||
@ -11,4 +12,9 @@ class SupportWidget extends Widget
|
|||||||
protected int|string|array $columnSpan = 'full';
|
protected int|string|array $columnSpan = 'full';
|
||||||
|
|
||||||
protected string $view = 'filament.widgets.support-widget';
|
protected string $view = 'filament.widgets.support-widget';
|
||||||
|
|
||||||
|
public function getHeading(): string
|
||||||
|
{
|
||||||
|
return SystemNotification::getMessage('Butuh Bantuan? Tanya Saja! 💬✨', 'Informasi & Bantuan');
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
27
app/Http/Controllers/HomeController.php
Normal file
27
app/Http/Controllers/HomeController.php
Normal file
@ -0,0 +1,27 @@
|
|||||||
|
<?php
|
||||||
|
|
||||||
|
namespace App\Http\Controllers;
|
||||||
|
|
||||||
|
use App\Filament\Support\SystemNotification;
|
||||||
|
use Illuminate\Contracts\View\View;
|
||||||
|
|
||||||
|
class HomeController extends Controller
|
||||||
|
{
|
||||||
|
public function index(): View
|
||||||
|
{
|
||||||
|
$headings = [
|
||||||
|
'hero_title' => 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'));
|
||||||
|
}
|
||||||
|
}
|
||||||
@ -3,6 +3,7 @@
|
|||||||
namespace App\Http\Controllers;
|
namespace App\Http\Controllers;
|
||||||
|
|
||||||
use App\Enums\AssignmentType;
|
use App\Enums\AssignmentType;
|
||||||
|
use App\Filament\Support\SystemNotification;
|
||||||
use App\Models\Assignment;
|
use App\Models\Assignment;
|
||||||
use App\Models\AssignmentSubmission;
|
use App\Models\AssignmentSubmission;
|
||||||
use App\Models\Course;
|
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')
|
? 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(
|
return view('pages.share-assignment', compact(
|
||||||
'course',
|
'course',
|
||||||
'assignment',
|
'assignment',
|
||||||
@ -72,7 +78,8 @@ public function show(Request $request, Course $course): View
|
|||||||
'submittedCount',
|
'submittedCount',
|
||||||
'submissionPercentage',
|
'submissionPercentage',
|
||||||
'formattedDeadline',
|
'formattedDeadline',
|
||||||
'isGroup'
|
'isGroup',
|
||||||
|
'headings'
|
||||||
));
|
));
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@ -2,6 +2,7 @@
|
|||||||
|
|
||||||
namespace App\Http\Controllers;
|
namespace App\Http\Controllers;
|
||||||
|
|
||||||
|
use App\Filament\Support\SystemNotification;
|
||||||
use App\Models\Assignment;
|
use App\Models\Assignment;
|
||||||
use App\Models\Attendance;
|
use App\Models\Attendance;
|
||||||
use App\Models\ClassSession;
|
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')
|
? 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(
|
return view('pages.share-attendance', compact(
|
||||||
'course',
|
'course',
|
||||||
'attendances',
|
'attendances',
|
||||||
@ -65,7 +71,8 @@ public function show(Request $request, Course $course): View
|
|||||||
'totalStudents',
|
'totalStudents',
|
||||||
'presentCount',
|
'presentCount',
|
||||||
'attendancePercentage',
|
'attendancePercentage',
|
||||||
'formattedTime'
|
'formattedTime',
|
||||||
|
'headings'
|
||||||
));
|
));
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@ -75,6 +75,12 @@ public function handle(Request $request, Closure $next): Response
|
|||||||
:root {
|
:root {
|
||||||
--font-family: '{$font}', sans-serif;
|
--font-family: '{$font}', sans-serif;
|
||||||
--c-border-radius: {$radius};
|
--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 {
|
body {
|
||||||
@ -88,9 +94,32 @@ public function handle(Request $request, Closure $next): Response
|
|||||||
margin-right: auto !important;
|
margin-right: auto !important;
|
||||||
}
|
}
|
||||||
|
|
||||||
/* Apply border radius to common elements */
|
/* Apply border radius to common elements and custom containers */
|
||||||
.fi-section, .fi-btn, .fi-input, .fi-card, .fi-modal-window {
|
.fi-section, .fi-btn, .fi-input, .fi-card, .fi-modal-window,
|
||||||
border-radius: {$radius} !important;
|
.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;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
</style>
|
</style>
|
||||||
")
|
")
|
||||||
|
|||||||
@ -2,6 +2,7 @@
|
|||||||
|
|
||||||
namespace App\Providers;
|
namespace App\Providers;
|
||||||
|
|
||||||
|
use App\Filament\Support\SystemNotification;
|
||||||
use Illuminate\Support\ServiceProvider;
|
use Illuminate\Support\ServiceProvider;
|
||||||
|
|
||||||
class AppServiceProvider extends ServiceProvider
|
class AppServiceProvider extends ServiceProvider
|
||||||
@ -19,6 +20,9 @@ public function register(): void
|
|||||||
*/
|
*/
|
||||||
public function boot(): void
|
public function boot(): void
|
||||||
{
|
{
|
||||||
//
|
view()->composer('*', function ($view) {
|
||||||
|
$view->with('userTheme', SystemNotification::getThemeSettings());
|
||||||
|
$view->with('primaryColors', SystemNotification::getPrimaryColorValues());
|
||||||
|
});
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@ -6,7 +6,7 @@ class="fi-section-content rounded-xl border border-info-200 bg-info-50 dark:bg-i
|
|||||||
<x-heroicon-o-information-circle class="w-5 h-5 text-info-600 dark:text-info-400 mt-0.5" />
|
<x-heroicon-o-information-circle class="w-5 h-5 text-info-600 dark:text-info-400 mt-0.5" />
|
||||||
|
|
||||||
<div class="text-sm text-info-800 dark:text-info-200">
|
<div class="text-sm text-info-800 dark:text-info-200">
|
||||||
Geser ke samping untuk melihat hari lainnya.
|
{{ $this->instructions }}
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
@ -108,8 +108,9 @@ class="flex items-center justify-end gap-1 pt-3 border-t border-gray-100 dark:bo
|
|||||||
</section>
|
</section>
|
||||||
@empty
|
@empty
|
||||||
<div class="w-full">
|
<div class="w-full">
|
||||||
<x-filament::empty-state icon="heroicon-o-calendar-days" heading="Tidak ada data yang ditemukan"
|
<x-filament::empty-state icon="heroicon-o-calendar-days"
|
||||||
description="Belum ada jadwal perkuliahan yang terdaftar untuk kriteria ini. Hubungi administrator jika jadwal Anda belum muncul."
|
heading="{{ $this->emptyHeading }}"
|
||||||
|
description="{{ $this->emptyDescription }}"
|
||||||
iconColor="gray">
|
iconColor="gray">
|
||||||
</x-filament::empty-state>
|
</x-filament::empty-state>
|
||||||
</div>
|
</div>
|
||||||
|
|||||||
@ -147,8 +147,10 @@ class="text-[10px] font-bold px-1.5 py-0.5 rounded bg-violet-50 dark:bg-violet-5
|
|||||||
@endforeach
|
@endforeach
|
||||||
</div>
|
</div>
|
||||||
@else
|
@else
|
||||||
<x-filament::empty-state icon="heroicon-o-users" heading="Tidak ada data yang ditemukan"
|
<x-filament::empty-state icon="heroicon-o-users"
|
||||||
description="Anda belum terdaftar dalam kelompok belajar apapun untuk saat ini." iconColor="gray">
|
heading="{{ $this->emptyHeading }}"
|
||||||
|
description="{{ $this->emptyDescription }}"
|
||||||
|
iconColor="gray">
|
||||||
</x-filament::empty-state>
|
</x-filament::empty-state>
|
||||||
@endif
|
@endif
|
||||||
|
|
||||||
|
|||||||
@ -3,15 +3,14 @@
|
|||||||
icon="{{ \App\Filament\Support\SystemNotification::getNotifStyle() === \App\Enums\NotifStyle::Cheerful ? 'heroicon-o-pencil-square' : 'heroicon-o-briefcase' }}"
|
icon="{{ \App\Filament\Support\SystemNotification::getNotifStyle() === \App\Enums\NotifStyle::Cheerful ? 'heroicon-o-pencil-square' : 'heroicon-o-briefcase' }}"
|
||||||
icon-color="primary"
|
icon-color="primary"
|
||||||
>
|
>
|
||||||
<x-slot name="heading">{{ \App\Filament\Support\SystemNotification::getMessage('Daftar Tugas Bikin Lemes! 🤣📒', 'Tugas Saya') }}</x-slot>
|
<x-slot name="heading">{{ $this->heading }}</x-slot>
|
||||||
<x-slot name="description">{{ \App\Filament\Support\SystemNotification::getMessage('Yuk, cek dan kumpulin tugasmu biar tenang hidupnya! Klik aja di tugasnya ya. 🚀👨💻', 'Klik pada tugas untuk melihat detail dan mengumpulkan file.') }}</x-slot>
|
<x-slot name="description">{{ $this->description }}</x-slot>
|
||||||
|
|
||||||
<div class="space-y-4">
|
<div class="space-y-4">
|
||||||
@forelse ($this->assignmentCards as $card)
|
@forelse ($this->assignmentCards as $card)
|
||||||
|
|
||||||
<div class="{{ $card->card_classes }} flex-col sm:flex-row">
|
<div class="{{ $card->card_classes }} flex-col sm:flex-row">
|
||||||
|
|
||||||
|
|
||||||
<a href="{{ \App\Filament\Resources\Learning\Assignments\AssignmentResource::getUrl('submit', ['record' => $card->id]) }}"
|
<a href="{{ \App\Filament\Resources\Learning\Assignments\AssignmentResource::getUrl('submit', ['record' => $card->id]) }}"
|
||||||
class="flex flex-1 items-start gap-3 p-4 sm:p-5 text-left min-w-0 hover:bg-primary-500/5 transition-colors cursor-pointer">
|
class="flex flex-1 items-start gap-3 p-4 sm:p-5 text-left min-w-0 hover:bg-primary-500/5 transition-colors cursor-pointer">
|
||||||
|
|
||||||
@ -110,8 +109,8 @@ class="{{ $card->indicator_icon_classes }}"
|
|||||||
</div>
|
</div>
|
||||||
@empty
|
@empty
|
||||||
<x-filament::empty-state icon="heroicon-o-clipboard-document-list"
|
<x-filament::empty-state icon="heroicon-o-clipboard-document-list"
|
||||||
heading="Tidak ada data yang ditemukan"
|
heading="{{ \App\Filament\Support\SystemNotification::getMessage('Hore, Belum Ada Tugas! 🎊✨', 'Tidak ada data yang ditemukan') }}"
|
||||||
description="Belum ada tugas baru yang perlu dikerjakan untuk saat ini. Tetap semangat!"
|
description="{{ \App\Filament\Support\SystemNotification::getMessage('Belum ada tugas baru yang perlu dikerjakan. Hidup tenang tanpa beban tugas itu asik ya! 😊🌈', 'Belum ada tugas baru yang perlu dikerjakan untuk saat ini. Tetap semangat!') }}"
|
||||||
iconColor="gray">
|
iconColor="gray">
|
||||||
</x-filament::empty-state>
|
</x-filament::empty-state>
|
||||||
@endforelse
|
@endforelse
|
||||||
|
|||||||
@ -3,8 +3,8 @@
|
|||||||
icon="{{ \App\Filament\Support\SystemNotification::getNotifStyle() === \App\Enums\NotifStyle::Cheerful ? 'heroicon-o-hand-raised' : 'heroicon-o-clipboard-document-check' }}"
|
icon="{{ \App\Filament\Support\SystemNotification::getNotifStyle() === \App\Enums\NotifStyle::Cheerful ? 'heroicon-o-hand-raised' : 'heroicon-o-clipboard-document-check' }}"
|
||||||
icon-color="primary"
|
icon-color="primary"
|
||||||
>
|
>
|
||||||
<x-slot name="heading">{{ \App\Filament\Support\SystemNotification::getMessage('Ayo Presensi Dulu! 🙋♂️✨', 'Sesi Kuliah') }}</x-slot>
|
<x-slot name="heading">{{ $this->heading }}</x-slot>
|
||||||
<x-slot name="description">{{ \App\Filament\Support\SystemNotification::getMessage('Jangan lupa absen ya kalau kelasnya udah mulai! Biar tercatat hadir. 💪', 'Silakan melakukan presensi sesuai dengan waktu kelas.') }}</x-slot>
|
<x-slot name="description">{{ $this->description }}</x-slot>
|
||||||
|
|
||||||
@if (count($this->scheduleCards))
|
@if (count($this->scheduleCards))
|
||||||
<div class="columns-1 md:columns-2 lg:columns-3 xl:columns-4 gap-6 space-y-6">
|
<div class="columns-1 md:columns-2 lg:columns-3 xl:columns-4 gap-6 space-y-6">
|
||||||
@ -102,8 +102,9 @@ class="text-[10px] font-bold text-gray-400 uppercase tracking-widest leading-non
|
|||||||
@endforeach
|
@endforeach
|
||||||
</div>
|
</div>
|
||||||
@else
|
@else
|
||||||
<x-filament::empty-state icon="heroicon-o-finger-print" heading="Tidak ada data yang ditemukan"
|
<x-filament::empty-state icon="heroicon-o-finger-print"
|
||||||
description="Setelah jadwal Anda muncul, Anda dapat melakukan presensi di sini. Pastikan Anda mengecek kembali pada jam perkuliahan."
|
heading="{{ $this->emptyHeading }}"
|
||||||
|
description="{{ $this->emptyDescription }}"
|
||||||
iconColor="gray">
|
iconColor="gray">
|
||||||
</x-filament::empty-state>
|
</x-filament::empty-state>
|
||||||
@endif
|
@endif
|
||||||
@ -114,8 +115,8 @@ class="text-[10px] font-bold text-gray-400 uppercase tracking-widest leading-non
|
|||||||
icon="{{ \App\Filament\Support\SystemNotification::getNotifStyle() === \App\Enums\NotifStyle::Cheerful ? 'heroicon-o-clock' : 'heroicon-o-archive-box' }}"
|
icon="{{ \App\Filament\Support\SystemNotification::getNotifStyle() === \App\Enums\NotifStyle::Cheerful ? 'heroicon-o-clock' : 'heroicon-o-archive-box' }}"
|
||||||
icon-color="gray"
|
icon-color="gray"
|
||||||
>
|
>
|
||||||
<x-slot name="heading">{{ \App\Filament\Support\SystemNotification::getMessage('Jejak Presensimu 🕰️📜', 'Riwayat Presensi') }}</x-slot>
|
<x-slot name="heading">{{ $this->historyHeading }}</x-slot>
|
||||||
<x-slot name="description">{{ \App\Filament\Support\SystemNotification::getMessage('Di sini kamu bisa ngecek semua histori kehadiranmu sebelumnya. Rajin-rajin ya! 🎓', 'Berikut adalah riwayat kehadiran Anda pada sesi perkuliahan.') }}</x-slot>
|
<x-slot name="description">{{ $this->historyDescription }}</x-slot>
|
||||||
|
|
||||||
{{ $this->table }}
|
{{ $this->table }}
|
||||||
</x-filament::section>
|
</x-filament::section>
|
||||||
|
|||||||
@ -62,8 +62,8 @@
|
|||||||
</div>
|
</div>
|
||||||
@empty
|
@empty
|
||||||
<x-filament::empty-state icon="heroicon-o-presentation-chart-bar"
|
<x-filament::empty-state icon="heroicon-o-presentation-chart-bar"
|
||||||
heading="Tidak ada data yang ditemukan"
|
heading="{{ \App\Filament\Support\SystemNotification::getMessage('Duh, Belum Ada Sesi Kelas! 🏢🛌', 'Tidak ada data yang ditemukan') }}"
|
||||||
description="Belum ada sesi perkuliahan yang dibuat untuk mata kuliah ini."
|
description="{{ \App\Filament\Support\SystemNotification::getMessage('Belum ada sesi perkuliahan yang dibuat buat mata kuliah ini. Waktunya istirahat mungkin? 😴✨', 'Belum ada sesi perkuliahan yang dibuat untuk mata kuliah ini.') }}"
|
||||||
iconColor="gray">
|
iconColor="gray">
|
||||||
</x-filament::empty-state>
|
</x-filament::empty-state>
|
||||||
@endforelse
|
@endforelse
|
||||||
|
|||||||
@ -18,7 +18,7 @@ class="w-7 h-7 text-primary-600 dark:text-primary-400 group-hover:animate-pulse"
|
|||||||
<div>
|
<div>
|
||||||
<h2
|
<h2
|
||||||
class="text-xl font-bold bg-clip-text text-transparent bg-gradient-to-r from-gray-900 to-gray-600 dark:from-white dark:to-gray-300 group-hover:from-primary-600 group-hover:to-primary-400 transition-all duration-300">
|
class="text-xl font-bold bg-clip-text text-transparent bg-gradient-to-r from-gray-900 to-gray-600 dark:from-white dark:to-gray-300 group-hover:from-primary-600 group-hover:to-primary-400 transition-all duration-300">
|
||||||
Informasi & Bantuan</h2>
|
{{ $this->getHeading() }}</h2>
|
||||||
<p
|
<p
|
||||||
class="text-sm text-gray-600 dark:text-gray-400 mt-2 leading-relaxed group-hover:text-gray-900 dark:group-hover:text-gray-300 transition-colors duration-300">
|
class="text-sm text-gray-600 dark:text-gray-400 mt-2 leading-relaxed group-hover:text-gray-900 dark:group-hover:text-gray-300 transition-colors duration-300">
|
||||||
Jika Anda menemukan masalah dalam penggunaan aplikasi, membutuhkan bantuan, atau memiliki ide
|
Jika Anda menemukan masalah dalam penggunaan aplikasi, membutuhkan bantuan, atau memiliki ide
|
||||||
|
|||||||
@ -7,6 +7,26 @@
|
|||||||
<title>Tugas {{ $course->name }} - {{ config('app.name', 'MyClass') }}</title>
|
<title>Tugas {{ $course->name }} - {{ config('app.name', 'MyClass') }}</title>
|
||||||
@vite(['resources/css/app.css', 'resources/js/app.js'])
|
@vite(['resources/css/app.css', 'resources/js/app.js'])
|
||||||
<style>
|
<style>
|
||||||
|
:root {
|
||||||
|
--font-family: '{{ $userTheme->font }}', sans-serif;
|
||||||
|
--c-border-radius: {{ $userTheme->border_radius }};
|
||||||
|
|
||||||
|
/* Global Tailwind V4 Radius Overrides */
|
||||||
|
--radius-md: {{ $userTheme->border_radius }} !important;
|
||||||
|
--radius-lg: {{ $userTheme->border_radius }} !important;
|
||||||
|
--radius-xl: {{ $userTheme->border_radius }} !important;
|
||||||
|
--radius-2xl: {{ $userTheme->border_radius }} !important;
|
||||||
|
|
||||||
|
/* Dynamic Primary Color Overrides */
|
||||||
|
@foreach($primaryColors as $shade => $rgb)
|
||||||
|
--color-primary-{{ $shade }}: rgb({{ $rgb }}) !important;
|
||||||
|
@endforeach
|
||||||
|
}
|
||||||
|
|
||||||
|
body {
|
||||||
|
font-family: var(--font-family) !important;
|
||||||
|
}
|
||||||
|
|
||||||
.bg-grid {
|
.bg-grid {
|
||||||
background-size: 32px 32px;
|
background-size: 32px 32px;
|
||||||
background-image: linear-gradient(to right, rgba(230, 230, 230, 0.4) 1px, transparent 1px),
|
background-image: linear-gradient(to right, rgba(230, 230, 230, 0.4) 1px, transparent 1px),
|
||||||
@ -23,7 +43,17 @@
|
|||||||
[x-cloak] {
|
[x-cloak] {
|
||||||
display: none !important;
|
display: none !important;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/* Apply border radius override to everything with standard rounded classes */
|
||||||
|
.rounded-md, .rounded-lg, .rounded-xl, .rounded-2xl {
|
||||||
|
border-radius: var(--c-border-radius) !important;
|
||||||
|
}
|
||||||
</style>
|
</style>
|
||||||
|
@if($userTheme->font !== 'Inter')
|
||||||
|
<link rel='preconnect' href='https://fonts.googleapis.com'>
|
||||||
|
<link rel='preconnect' href='https://fonts.gstatic.com' crossorigin>
|
||||||
|
<link href='https://fonts.googleapis.com/css2?family={{ $userTheme->font }}:wght@400;500;600;700&display=swap' rel='stylesheet'>
|
||||||
|
@endif
|
||||||
</head>
|
</head>
|
||||||
|
|
||||||
<body class="min-h-screen bg-gray-50 dark:bg-gray-950 text-gray-900 dark:text-gray-100 flex flex-col relative font-sans">
|
<body class="min-h-screen bg-gray-50 dark:bg-gray-950 text-gray-900 dark:text-gray-100 flex flex-col relative font-sans">
|
||||||
@ -62,8 +92,9 @@ class="inline-flex items-center rounded-md bg-zinc-100 dark:bg-zinc-800 px-2 py-
|
|||||||
<!-- Attendance -->
|
<!-- Attendance -->
|
||||||
<div class="lg:col-span-8 flex flex-col gap-4">
|
<div class="lg:col-span-8 flex flex-col gap-4">
|
||||||
<div class="flex items-center justify-between px-1">
|
<div class="flex items-center justify-between px-1">
|
||||||
<h2 class="text-base font-bold text-gray-950 dark:text-white tracking-tight uppercase">Daftar
|
<h2 class="text-base font-bold text-gray-950 dark:text-white tracking-tight uppercase">
|
||||||
Pengumpulan</h2>
|
{{ $headings['list'] }}
|
||||||
|
</h2>
|
||||||
</div>
|
</div>
|
||||||
|
|
||||||
<div
|
<div
|
||||||
@ -180,7 +211,7 @@ class="h-6 w-6 text-gray-400 dark:text-gray-500" />
|
|||||||
<div class="flex flex-col gap-3">
|
<div class="flex flex-col gap-3">
|
||||||
<h3
|
<h3
|
||||||
class="text-[11px] font-black text-gray-400 dark:text-gray-500 uppercase tracking-widest pl-1">
|
class="text-[11px] font-black text-gray-400 dark:text-gray-500 uppercase tracking-widest pl-1">
|
||||||
Informasi Tugas</h3>
|
{{ $headings['info'] }}</h3>
|
||||||
|
|
||||||
<div
|
<div
|
||||||
class="fi-card rounded-xl border border-gray-200 dark:border-gray-700 bg-white dark:bg-gray-900 shadow-sm p-5 flex flex-col gap-5">
|
class="fi-card rounded-xl border border-gray-200 dark:border-gray-700 bg-white dark:bg-gray-900 shadow-sm p-5 flex flex-col gap-5">
|
||||||
|
|||||||
@ -7,6 +7,26 @@
|
|||||||
<title>Presensi {{ $course->name }} - {{ config('app.name', 'MyClass') }}</title>
|
<title>Presensi {{ $course->name }} - {{ config('app.name', 'MyClass') }}</title>
|
||||||
@vite(['resources/css/app.css', 'resources/js/app.js'])
|
@vite(['resources/css/app.css', 'resources/js/app.js'])
|
||||||
<style>
|
<style>
|
||||||
|
:root {
|
||||||
|
--font-family: '{{ $userTheme->font }}', sans-serif;
|
||||||
|
--c-border-radius: {{ $userTheme->border_radius }};
|
||||||
|
|
||||||
|
/* Global Tailwind V4 Radius Overrides */
|
||||||
|
--radius-md: {{ $userTheme->border_radius }} !important;
|
||||||
|
--radius-lg: {{ $userTheme->border_radius }} !important;
|
||||||
|
--radius-xl: {{ $userTheme->border_radius }} !important;
|
||||||
|
--radius-2xl: {{ $userTheme->border_radius }} !important;
|
||||||
|
|
||||||
|
/* Dynamic Primary Color Overrides */
|
||||||
|
@foreach($primaryColors as $shade => $rgb)
|
||||||
|
--color-primary-{{ $shade }}: rgb({{ $rgb }}) !important;
|
||||||
|
@endforeach
|
||||||
|
}
|
||||||
|
|
||||||
|
body {
|
||||||
|
font-family: var(--font-family) !important;
|
||||||
|
}
|
||||||
|
|
||||||
.bg-grid {
|
.bg-grid {
|
||||||
background-size: 32px 32px;
|
background-size: 32px 32px;
|
||||||
background-image: linear-gradient(to right, rgba(230, 230, 230, 0.4) 1px, transparent 1px),
|
background-image: linear-gradient(to right, rgba(230, 230, 230, 0.4) 1px, transparent 1px),
|
||||||
@ -23,7 +43,17 @@
|
|||||||
[x-cloak] {
|
[x-cloak] {
|
||||||
display: none !important;
|
display: none !important;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/* Apply border radius override to everything with standard rounded classes */
|
||||||
|
.rounded-md, .rounded-lg, .rounded-xl, .rounded-2xl {
|
||||||
|
border-radius: var(--c-border-radius) !important;
|
||||||
|
}
|
||||||
</style>
|
</style>
|
||||||
|
@if($userTheme->font !== 'Inter')
|
||||||
|
<link rel='preconnect' href='https://fonts.googleapis.com'>
|
||||||
|
<link rel='preconnect' href='https://fonts.gstatic.com' crossorigin>
|
||||||
|
<link href='https://fonts.googleapis.com/css2?family={{ $userTheme->font }}:wght@400;500;600;700&display=swap' rel='stylesheet'>
|
||||||
|
@endif
|
||||||
</head>
|
</head>
|
||||||
|
|
||||||
<body
|
<body
|
||||||
@ -63,8 +93,9 @@ class="inline-flex items-center rounded-md bg-zinc-100 dark:bg-zinc-800 px-2 py-
|
|||||||
<!-- Attendance -->
|
<!-- Attendance -->
|
||||||
<div class="lg:col-span-8 flex flex-col gap-4">
|
<div class="lg:col-span-8 flex flex-col gap-4">
|
||||||
<div class="flex items-center justify-between px-1">
|
<div class="flex items-center justify-between px-1">
|
||||||
<h2 class="text-base font-bold text-gray-950 dark:text-white tracking-tight uppercase">Daftar
|
<h2 class="text-base font-bold text-gray-950 dark:text-white tracking-tight uppercase">
|
||||||
Kehadiran</h2>
|
{{ $headings['list'] }}
|
||||||
|
</h2>
|
||||||
<span class="text-[11px] font-black text-gray-400 dark:text-gray-500 uppercase tracking-widest">
|
<span class="text-[11px] font-black text-gray-400 dark:text-gray-500 uppercase tracking-widest">
|
||||||
{{ $attendances->count() }} Terdata
|
{{ $attendances->count() }} Terdata
|
||||||
</span>
|
</span>
|
||||||
@ -139,7 +170,7 @@ class="h-6 w-6 text-gray-400 dark:text-gray-500" />
|
|||||||
<div class="flex flex-col gap-3">
|
<div class="flex flex-col gap-3">
|
||||||
<h3
|
<h3
|
||||||
class="text-[11px] font-black text-gray-400 dark:text-gray-500 uppercase tracking-widest pl-1">
|
class="text-[11px] font-black text-gray-400 dark:text-gray-500 uppercase tracking-widest pl-1">
|
||||||
Informasi Sesi {{ $sessionInfo ? 'Ke-' . $sessionInfo->session_number : '' }}</h3>
|
{{ $headings['info'] }} {{ $sessionInfo ? 'Ke-' . $sessionInfo->session_number : '' }}</h3>
|
||||||
|
|
||||||
<div
|
<div
|
||||||
class="fi-card rounded-xl border border-gray-200 dark:border-gray-700 bg-white dark:bg-gray-900 shadow-sm p-5 flex flex-col gap-5">
|
class="fi-card rounded-xl border border-gray-200 dark:border-gray-700 bg-white dark:bg-gray-900 shadow-sm p-5 flex flex-col gap-5">
|
||||||
|
|||||||
@ -22,7 +22,7 @@
|
|||||||
padding: 0 0.75rem;
|
padding: 0 0.75rem;
|
||||||
padding-bottom: env(safe-area-inset-bottom, 0px);
|
padding-bottom: env(safe-area-inset-bottom, 0px);
|
||||||
|
|
||||||
border-radius: 1.75rem;
|
border-radius: {{ $userTheme->border_radius === '0px' ? '0px' : '1.75rem' }};
|
||||||
|
|
||||||
backdrop-filter: blur(20px) saturate(180%);
|
backdrop-filter: blur(20px) saturate(180%);
|
||||||
-webkit-backdrop-filter: blur(20px) saturate(180%);
|
-webkit-backdrop-filter: blur(20px) saturate(180%);
|
||||||
|
|||||||
@ -7,6 +7,26 @@
|
|||||||
<title>{{ config('app.name', 'MyClass') }} - Sistem Informasi Manajemen</title>
|
<title>{{ config('app.name', 'MyClass') }} - Sistem Informasi Manajemen</title>
|
||||||
@vite(['resources/css/app.css', 'resources/js/app.js'])
|
@vite(['resources/css/app.css', 'resources/js/app.js'])
|
||||||
<style>
|
<style>
|
||||||
|
:root {
|
||||||
|
--font-family: '{{ $userTheme->font }}', sans-serif;
|
||||||
|
--c-border-radius: {{ $userTheme->border_radius }};
|
||||||
|
|
||||||
|
/* Global Tailwind V4 Radius Overrides */
|
||||||
|
--radius-md: {{ $userTheme->border_radius }} !important;
|
||||||
|
--radius-lg: {{ $userTheme->border_radius }} !important;
|
||||||
|
--radius-xl: {{ $userTheme->border_radius }} !important;
|
||||||
|
--radius-2xl: {{ $userTheme->border_radius }} !important;
|
||||||
|
|
||||||
|
/* Dynamic Primary Color Overrides */
|
||||||
|
@foreach($primaryColors as $shade => $rgb)
|
||||||
|
--color-primary-{{ $shade }}: rgb({{ $rgb }}) !important;
|
||||||
|
@endforeach
|
||||||
|
}
|
||||||
|
|
||||||
|
body {
|
||||||
|
font-family: var(--font-family) !important;
|
||||||
|
}
|
||||||
|
|
||||||
.bg-grid {
|
.bg-grid {
|
||||||
background-size: 32px 32px;
|
background-size: 32px 32px;
|
||||||
background-image: linear-gradient(to right, rgba(230, 230, 230, 0.4) 1px, transparent 1px),
|
background-image: linear-gradient(to right, rgba(230, 230, 230, 0.4) 1px, transparent 1px),
|
||||||
@ -19,7 +39,17 @@
|
|||||||
linear-gradient(to bottom, rgba(255, 255, 255, 0.05) 1px, transparent 1px);
|
linear-gradient(to bottom, rgba(255, 255, 255, 0.05) 1px, transparent 1px);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/* Apply border radius override to everything with standard rounded classes */
|
||||||
|
.rounded-md, .rounded-lg, .rounded-xl, .rounded-2xl {
|
||||||
|
border-radius: var(--c-border-radius) !important;
|
||||||
|
}
|
||||||
</style>
|
</style>
|
||||||
|
@if($userTheme->font !== 'Inter')
|
||||||
|
<link rel='preconnect' href='https://fonts.googleapis.com'>
|
||||||
|
<link rel='preconnect' href='https://fonts.gstatic.com' crossorigin>
|
||||||
|
<link href='https://fonts.googleapis.com/css2?family={{ $userTheme->font }}:wght@400;500;600;700&display=swap' rel='stylesheet'>
|
||||||
|
@endif
|
||||||
</head>
|
</head>
|
||||||
|
|
||||||
<body
|
<body
|
||||||
@ -41,8 +71,7 @@ class="inline-flex items-center rounded-full bg-primary-50 dark:bg-primary-900/3
|
|||||||
</div>
|
</div>
|
||||||
<h1
|
<h1
|
||||||
class="text-4xl sm:text-5xl font-extrabold tracking-tight text-gray-900 dark:text-white leading-tight">
|
class="text-4xl sm:text-5xl font-extrabold tracking-tight text-gray-900 dark:text-white leading-tight">
|
||||||
Sistem Manajemen <br /> <span class="text-primary-600 dark:text-primary-400">Kelas
|
{{ $headings['hero_title'] }} <br /> <span class="text-primary-600 dark:text-primary-400">{{ $headings['hero_subtitle'] }}</span>
|
||||||
Sederhana.</span>
|
|
||||||
</h1>
|
</h1>
|
||||||
<p class="text-lg text-gray-600 dark:text-gray-400 leading-relaxed max-w-xl">
|
<p class="text-lg text-gray-600 dark:text-gray-400 leading-relaxed max-w-xl">
|
||||||
Kelola jadwal kelas, daftar presensi, pengumpulan tugas, hingga materi belajar dalam satu
|
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
|
|||||||
</path>
|
</path>
|
||||||
</svg>
|
</svg>
|
||||||
</div>
|
</div>
|
||||||
<h3 class="font-bold text-gray-950 dark:text-white mb-2 leading-tight">Manajemen Sesi</h3>
|
<h3 class="font-bold text-gray-950 dark:text-white mb-2 leading-tight">
|
||||||
<p class="text-sm text-gray-500 dark:text-gray-400">Pemantauan kelas dan penjadwalan terstruktur
|
{{ $headings['feature_session'] }}</h3>
|
||||||
dan mudah dilihat.</p>
|
<p class="text-sm text-gray-500 dark:text-gray-400">
|
||||||
|
{{ $headings['feature_session_desc'] }}</p>
|
||||||
</div>
|
</div>
|
||||||
<div
|
<div
|
||||||
class="rounded-xl border border-gray-200 dark:border-gray-800 bg-white dark:bg-gray-900 p-6 shadow-sm hover:shadow-xl hover:border-primary-500/30 dark:hover:border-primary-500/30 transition-all duration-300 hover:-translate-y-1 group cursor-default translate-y-0 sm:translate-y-6">
|
class="rounded-xl border border-gray-200 dark:border-gray-800 bg-white dark:bg-gray-900 p-6 shadow-sm hover:shadow-xl hover:border-primary-500/30 dark:hover:border-primary-500/30 transition-all duration-300 hover:-translate-y-1 group cursor-default translate-y-0 sm:translate-y-6">
|
||||||
@ -92,9 +122,10 @@ class="w-12 h-12 rounded-lg bg-primary-50 dark:bg-primary-500/10 flex items-cent
|
|||||||
</path>
|
</path>
|
||||||
</svg>
|
</svg>
|
||||||
</div>
|
</div>
|
||||||
<h3 class="font-bold text-gray-950 dark:text-white mb-2 leading-tight">Tugas & Materi</h3>
|
<h3 class="font-bold text-gray-950 dark:text-white mb-2 leading-tight">
|
||||||
<p class="text-sm text-gray-500 dark:text-gray-400">Pengelolaan repositori perkuliahan dan
|
{{ $headings['feature_task'] }}</h3>
|
||||||
pengumpulan tugas.</p>
|
<p class="text-sm text-gray-500 dark:text-gray-400">
|
||||||
|
{{ $headings['feature_task_desc'] }}</p>
|
||||||
</div>
|
</div>
|
||||||
<div
|
<div
|
||||||
class="rounded-xl border border-gray-200 dark:border-gray-800 bg-white dark:bg-gray-900 p-6 shadow-sm hover:shadow-xl hover:border-primary-500/30 dark:hover:border-primary-500/30 transition-all duration-300 hover:-translate-y-1 group cursor-default">
|
class="rounded-xl border border-gray-200 dark:border-gray-800 bg-white dark:bg-gray-900 p-6 shadow-sm hover:shadow-xl hover:border-primary-500/30 dark:hover:border-primary-500/30 transition-all duration-300 hover:-translate-y-1 group cursor-default">
|
||||||
@ -105,9 +136,10 @@ class="w-12 h-12 rounded-lg bg-primary-50 dark:bg-primary-500/10 flex items-cent
|
|||||||
d="M9 12l2 2 4-4m6 2a9 9 0 11-18 0 9 9 0 0118 0z"></path>
|
d="M9 12l2 2 4-4m6 2a9 9 0 11-18 0 9 9 0 0118 0z"></path>
|
||||||
</svg>
|
</svg>
|
||||||
</div>
|
</div>
|
||||||
<h3 class="font-bold text-gray-950 dark:text-white mb-2 leading-tight">Presensi Digital</h3>
|
<h3 class="font-bold text-gray-950 dark:text-white mb-2 leading-tight">
|
||||||
<p class="text-sm text-gray-500 dark:text-gray-400">Sistem pendataan kehadiran yang praktis,
|
{{ $headings['feature_attendance'] }}</h3>
|
||||||
cepat, dan real-time.</p>
|
<p class="text-sm text-gray-500 dark:text-gray-400">
|
||||||
|
{{ $headings['feature_attendance_desc'] }}</p>
|
||||||
</div>
|
</div>
|
||||||
<div
|
<div
|
||||||
class="rounded-xl border border-gray-200 dark:border-gray-800 bg-white dark:bg-gray-900 p-6 shadow-sm hover:shadow-xl hover:border-primary-500/30 dark:hover:border-primary-500/30 transition-all duration-300 hover:-translate-y-1 group cursor-default translate-y-0 sm:translate-y-6">
|
class="rounded-xl border border-gray-200 dark:border-gray-800 bg-white dark:bg-gray-900 p-6 shadow-sm hover:shadow-xl hover:border-primary-500/30 dark:hover:border-primary-500/30 transition-all duration-300 hover:-translate-y-1 group cursor-default translate-y-0 sm:translate-y-6">
|
||||||
@ -119,9 +151,10 @@ class="w-12 h-12 rounded-lg bg-primary-50 dark:bg-primary-500/10 flex items-cent
|
|||||||
</path>
|
</path>
|
||||||
</svg>
|
</svg>
|
||||||
</div>
|
</div>
|
||||||
<h3 class="font-bold text-gray-950 dark:text-white mb-2 leading-tight">Grup Belajar</h3>
|
<h3 class="font-bold text-gray-950 dark:text-white mb-2 leading-tight">
|
||||||
<p class="text-sm text-gray-500 dark:text-gray-400">Ruang kolaborasi, diskusi, dan obrolan untuk
|
{{ $headings['feature_group'] }}</h3>
|
||||||
saling terhubung.</p>
|
<p class="text-sm text-gray-500 dark:text-gray-400">
|
||||||
|
{{ $headings['feature_group_desc'] }}</p>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
|
|
||||||
|
|||||||
@ -1,12 +1,11 @@
|
|||||||
<?php
|
<?php
|
||||||
|
|
||||||
|
use App\Http\Controllers\HomeController;
|
||||||
use App\Http\Controllers\ShareAssignmentController;
|
use App\Http\Controllers\ShareAssignmentController;
|
||||||
use App\Http\Controllers\ShareAttendanceController;
|
use App\Http\Controllers\ShareAttendanceController;
|
||||||
use Illuminate\Support\Facades\Route;
|
use Illuminate\Support\Facades\Route;
|
||||||
|
|
||||||
Route::get('/', function () {
|
Route::get('/', [HomeController::class, 'index']);
|
||||||
return view('welcome');
|
|
||||||
});
|
|
||||||
|
|
||||||
Route::get('/share/attendance/{course}', [ShareAttendanceController::class, 'show'])->name('share.attendance')->middleware('signed');
|
Route::get('/share/attendance/{course}', [ShareAttendanceController::class, 'show'])->name('share.attendance')->middleware('signed');
|
||||||
Route::get('/share/assignment/{course}', [ShareAssignmentController::class, 'show'])->name('share.assignment')->middleware('signed');
|
Route::get('/share/assignment/{course}', [ShareAssignmentController::class, 'show'])->name('share.assignment')->middleware('signed');
|
||||||
|
|||||||
Loading…
Reference in New Issue
Block a user