From a43fe060803c8aa2f0054ec9551c121ffc8d6f4d Mon Sep 17 00:00:00 2001 From: Aryaaazrr <94944128+Aryaaazrr@users.noreply.github.com> Date: Sat, 10 May 2025 23:23:14 +0700 Subject: [PATCH] up --- .editorconfig | 18 + .env.example | 90 + .gitattributes | 11 + .github/workflows/github.yml | 42 + .gitignore | 21 + README.md | 66 + app/Events/AlternatifUpdated.php | 38 + app/Events/KuotaUpdated.php | 38 + app/Events/SubmissionCreated.php | 40 + app/Helpers/helpers.php | 11 + app/Http/Controllers/AlternatifController.php | 96 + .../V1/Alternatif/AlternatifController.php | 65 + .../Api/V1/Aspek/AspekController.php | 71 + .../Api/V1/Kriteria/KriteriaController.php | 71 + .../ProfileMatchingController.php | 221 + .../Api/V1/ProfileMethod/ProfileMethod.php | 70 + .../ProfileMethod/ProfileMethodController.php | 71 + app/Http/Controllers/AspekController.php | 113 + .../Auth/AuthenticatedSessionController.php | 47 + .../Auth/ConfirmablePasswordController.php | 40 + ...mailVerificationNotificationController.php | 24 + .../EmailVerificationPromptController.php | 21 + .../Auth/NewPasswordController.php | 61 + .../Controllers/Auth/PasswordController.php | 29 + .../Auth/PasswordResetLinkController.php | 44 + .../Auth/RegisteredUserController.php | 52 + .../ThirdParty/Google/GoogleController.php | 68 + .../Auth/VerifyEmailController.php | 27 + app/Http/Controllers/Controller.php | 8 + app/Http/Controllers/DashboardController.php | 76 + app/Http/Controllers/KriteriaController.php | 105 + app/Http/Controllers/MahasiswaController.php | 67 + app/Http/Controllers/ProfileController.php | 62 + .../Controllers/ProfileMatchingController.php | 287 ++ .../Controllers/ProfileMethodController.php | 167 + .../Controllers/SubkriteriaController.php | 114 + .../Controllers/SubmissionsController.php | 127 + app/Http/Controllers/SystemController.php | 85 + .../Requests/Alternatif/AlternatifRequest.php | 46 + .../Requests/Aspek/AspekCreateRequest.php | 47 + app/Http/Requests/Auth/LoginRequest.php | 85 + .../Requests/Kriteria/KriteriaRequest.php | 53 + .../ProfileMatchingRequest.php | 67 + .../ProfileMethod/ProfileMethodRequest.php | 43 + app/Http/Requests/ProfileUpdateRequest.php | 34 + .../Subkriteria/SubkriteriaRequest.php | 30 + .../Submission/SubmissionDetailRequest.php | 29 + .../Requests/Submission/SubmissionRequest.php | 32 + app/Http/Resources/AspekResource.php | 28 + app/Http/Resources/KriteriaResource.php | 28 + app/Http/Resources/ProfileMethodResource.php | 28 + app/Jobs/ProcessSubmission.php | 90 + app/Models/Alternatif.php | 51 + app/Models/Angkatan.php | 22 + app/Models/Aspek.php | 37 + app/Models/IzinPemilihan.php | 16 + app/Models/Kriteria.php | 59 + app/Models/Nilai.php | 21 + app/Models/ProfileMethod.php | 33 + app/Models/Setting.php | 56 + app/Models/Subkriteria.php | 34 + app/Models/SubmissionDetail.php | 33 + app/Models/Submissions.php | 41 + app/Models/User.php | 66 + app/Observers/SubmissionsDetailObserver.php | 125 + app/Observers/SubmissionsObserver.php | 57 + app/Providers/AppServiceProvider.php | 26 + app/Providers/EventServiceProvider.php | 23 + app/View/Components/AppLayout.php | 17 + app/View/Components/GuestLayout.php | 17 + artisan | 15 + bootstrap/app.php | 25 + bootstrap/cache/.gitignore | 2 + bootstrap/providers.php | 6 + composer.json | 80 + config/app.php | 126 + config/auth.php | 115 + config/broadcasting.php | 82 + config/cache.php | 108 + config/database.php | 173 + config/filesystems.php | 77 + config/logging.php | 132 + config/mail.php | 116 + config/permission.php | 186 + config/queue.php | 112 + config/reverb.php | 92 + config/sanctum.php | 83 + config/services.php | 44 + config/session.php | 217 + config/tinker.php | 50 + database/.gitignore | 1 + database/factories/AlternatifFactory.php | 39 + .../factories/SubmissionDetailFactory.php | 26 + database/factories/SubmissionsFactory.php | 27 + database/factories/UserFactory.php | 45 + .../0001_01_01_000000_create_users_table.php | 51 + .../0001_01_01_000001_create_cache_table.php | 35 + .../0001_01_01_000002_create_jobs_table.php | 57 + ..._01_04_162405_create_permission_tables.php | 140 + ...025_01_04_164804_create_settings_table.php | 33 + .../2025_01_05_054619_create_aspek_table.php | 31 + ...025_01_05_074311_create_kriteria_table.php | 33 + ..._01_07_032650_create_subkriteria_table.php | 30 + ...5_01_07_113557_create_alternatif_table.php | 29 + ..._07_113638_create_profile_method_table.php | 35 + ...5_01_07_141505_create_submission_table.php | 32 + ...19_create_personal_access_tokens_table.php | 33 + ...15_115744_add_google_id_to_users_table.php | 28 + ..._234222_create_submission_detail_table.php | 31 + .../2025_02_23_155439_create_nilai_table.php | 28 + ...d_id_nilai_column_to_subkriteria_table.php | 29 + ...025_02_25_121610_create_angkatan_table.php | 29 + ..._25_143745_create_izin_pengajuan_table.php | 28 + ...050_add_angkatan_column_to_users_table.php | 29 + database/migrations/create_kuota_table | 30 + ...id_angkatan_column_to_profile_method_table | 29 + database/seeders/AlternatifSeeder.php | 139 + database/seeders/AspekSeeder.php | 43 + database/seeders/DatabaseSeeder.php | 30 + database/seeders/KriteriaSeeder.php | 74 + database/seeders/KuotaSeeder.php | 39 + database/seeders/ProfileMethodSeeder.php | 1284 ++++++ database/seeders/RoleAndPermissionSeeder.php | 82 + database/seeders/SettingSeeder.php | 152 + database/seeders/SubkriteriaSeeder.php | 80 + database/seeders/User/AdminSeeder.php | 32 + database/seeders/User/MahasiswaSeeder.php | 99 + docker/8.0/Dockerfile | 69 + docker/8.0/php.ini | 5 + docker/8.0/start-container | 26 + docker/8.0/supervisord.conf | 14 + docker/8.1/Dockerfile | 68 + docker/8.1/php.ini | 5 + docker/8.1/start-container | 26 + docker/8.1/supervisord.conf | 14 + docker/8.2/Dockerfile | 69 + docker/8.2/php.ini | 5 + docker/8.2/start-container | 26 + docker/8.2/supervisord.conf | 14 + docker/8.3/Dockerfile | 70 + docker/8.3/php.ini | 5 + docker/8.3/start-container | 26 + docker/8.3/supervisord.conf | 14 + docker/8.4/Dockerfile | 71 + docker/8.4/php.ini | 5 + docker/8.4/start-container | 26 + docker/8.4/supervisord.conf | 14 + docker/mariadb/create-testing-database.sh | 6 + docker/mysql/create-testing-database.sh | 6 + docker/pgsql/create-testing-database.sql | 2 + package-lock.json | 4058 +++++++++++++++++ package.json | 42 + phpunit.xml | 33 + postcss.config.js | 6 + public/.htaccess | 21 + public/favicon.ico | 0 public/index.php | 17 + public/robots.txt | 2 + public/static/image/fyi.png | Bin 0 -> 192386 bytes public/static/image/hero-section.png | Bin 0 -> 133867 bytes public/static/image/hero.png | Bin 0 -> 171908 bytes public/static/image/logo_polije.png | Bin 0 -> 21716 bytes public/static/image/profile-placeholder.jpg | Bin 0 -> 23581 bytes resources/css/app.css | 217 + resources/js/animated/navigation.js | 169 + resources/js/app.js | 209 + resources/js/bootstrap.js | 12 + resources/js/echo.js | 14 + .../components/application-logo.blade.php | 1 + .../components/auth-session-error.blade.php | 23 + .../components/auth-session-status.blade.php | 23 + .../views/components/danger-button.blade.php | 3 + .../views/components/dropdown-link.blade.php | 1 + resources/views/components/dropdown.blade.php | 35 + .../views/components/input-error.blade.php | 9 + .../views/components/input-label.blade.php | 5 + resources/views/components/modal.blade.php | 78 + .../components/nav-item-dropdown.blade.php | 33 + resources/views/components/nav-item.blade.php | 9 + resources/views/components/nav-link.blade.php | 11 + .../views/components/primary-button.blade.php | 4 + .../components/responsive-nav-link.blade.php | 11 + .../components/secondary-button.blade.php | 4 + .../views/components/text-input.blade.php | 4 + resources/views/errors/401.blade.php | 5 + resources/views/errors/402.blade.php | 5 + resources/views/errors/403.blade.php | 5 + resources/views/errors/404.blade.php | 35 + resources/views/errors/419.blade.php | 35 + resources/views/errors/429.blade.php | 5 + resources/views/errors/500.blade.php | 5 + resources/views/errors/503.blade.php | 5 + resources/views/errors/layout.blade.php | 53 + resources/views/errors/minimal.blade.php | 34 + resources/views/layouts/app.blade.php | 120 + resources/views/layouts/guest.blade.php | 38 + resources/views/layouts/home.blade.php | 18 + resources/views/layouts/navigation.blade.php | 163 + resources/views/layouts/sidebar.blade.php | 330 ++ .../views/pages/alternatif/create.blade.php | 145 + .../views/pages/alternatif/edit.blade.php | 147 + .../views/pages/alternatif/index.blade.php | 434 ++ resources/views/pages/aspek/create.blade.php | 162 + resources/views/pages/aspek/edit.blade.php | 165 + resources/views/pages/aspek/index.blade.php | 312 ++ resources/views/pages/aspek/show.blade.php | 133 + .../pages/auth/confirm-password.blade.php | 27 + .../pages/auth/forgot-password.blade.php | 30 + resources/views/pages/auth/login.blade.php | 72 + resources/views/pages/auth/register.blade.php | 73 + .../views/pages/auth/reset-password.blade.php | 39 + .../views/pages/auth/verify-email.blade.php | 31 + .../views/pages/dashboard/index.blade.php | 253 + resources/views/pages/home/index.blade.php | 711 +++ .../views/pages/home/kesimpulan.blade.php | 35 + resources/views/pages/home/metode.blade.php | 289 ++ .../views/pages/home/pendahuluan.blade.php | 371 ++ .../views/pages/kriteria/create.blade.php | 182 + resources/views/pages/kriteria/edit.blade.php | 501 ++ .../views/pages/kriteria/index.blade.php | 309 ++ resources/views/pages/kriteria/show.blade.php | 438 ++ .../views/pages/mahasiswa/create.blade.php | 158 + .../views/pages/mahasiswa/index.blade.php | 308 ++ .../pages/profile-matching/index.blade.php | 189 + .../pages/profile-method/create.blade.php | 191 + .../views/pages/profile-method/edit.blade.php | 197 + .../pages/profile-method/index.blade.php | 312 ++ .../views/pages/profile-method/show.blade.php | 0 .../views/pages/settings/system.blade.php | 1 + .../views/pages/subkriteria/create.blade.php | 166 + .../views/pages/subkriteria/edit.blade.php | 183 + .../views/pages/subkriteria/index.blade.php | 143 + .../views/pages/subkriteria/show.blade.php | 147 + .../views/pages/submissions/create.blade.php | 271 ++ .../views/pages/submissions/index.blade.php | 955 ++++ resources/views/partials/content.blade.php | 7 + resources/views/partials/footer.blade.php | 43 + resources/views/partials/header.blade.php | 214 + resources/views/partials/metadata.blade.php | 6 + resources/views/partials/scripts.blade.php | 5 + resources/views/partials/styles.blade.php | 14 + .../views/profile-matching/result.blade.php | 443 ++ resources/views/profile/edit.blade.php | 187 + .../partials/delete-user-form.blade.php | 55 + .../partials/update-password-form.blade.php | 48 + .../update-profile-information-form.blade.php | 64 + .../views/vendor/mail/html/button.blade.php | 24 + .../views/vendor/mail/html/footer.blade.php | 11 + .../views/vendor/mail/html/header.blade.php | 12 + .../views/vendor/mail/html/layout.blade.php | 58 + .../views/vendor/mail/html/message.blade.php | 27 + .../views/vendor/mail/html/panel.blade.php | 14 + .../views/vendor/mail/html/subcopy.blade.php | 7 + .../views/vendor/mail/html/table.blade.php | 3 + .../views/vendor/mail/html/themes/default.css | 291 ++ .../views/vendor/mail/text/button.blade.php | 1 + .../views/vendor/mail/text/footer.blade.php | 1 + .../views/vendor/mail/text/header.blade.php | 1 + .../views/vendor/mail/text/layout.blade.php | 9 + .../views/vendor/mail/text/message.blade.php | 27 + .../views/vendor/mail/text/panel.blade.php | 1 + .../views/vendor/mail/text/subcopy.blade.php | 1 + .../views/vendor/mail/text/table.blade.php | 1 + .../vendor/notifications/email.blade.php | 58 + .../vendor/pagination/bootstrap-4.blade.php | 46 + .../vendor/pagination/bootstrap-5.blade.php | 88 + .../views/vendor/pagination/default.blade.php | 46 + .../vendor/pagination/semantic-ui.blade.php | 36 + .../pagination/simple-bootstrap-4.blade.php | 27 + .../pagination/simple-bootstrap-5.blade.php | 29 + .../pagination/simple-default.blade.php | 19 + .../pagination/simple-tailwind.blade.php | 25 + .../vendor/pagination/tailwind.blade.php | 106 + routes/api.php | 30 + routes/auth.php | 65 + routes/channels.php | 7 + routes/console.php | 8 + routes/web.php | 64 + sail | 603 +++ storage/app/.gitignore | 4 + storage/app/private/.gitignore | 2 + storage/app/public/.gitignore | 2 + storage/debugbar/.gitignore | 2 + storage/framework/.gitignore | 9 + storage/framework/cache/.gitignore | 3 + storage/framework/cache/data/.gitignore | 2 + storage/framework/sessions/.gitignore | 2 + storage/framework/testing/.gitignore | 2 + storage/framework/views/.gitignore | 2 + storage/logs/.gitignore | 2 + tailwind.config.js | 59 + tests/Feature/Auth/AuthenticationTest.php | 54 + tests/Feature/Auth/EmailVerificationTest.php | 58 + .../Feature/Auth/PasswordConfirmationTest.php | 44 + tests/Feature/Auth/PasswordResetTest.php | 73 + tests/Feature/Auth/PasswordUpdateTest.php | 51 + tests/Feature/Auth/RegistrationTest.php | 31 + tests/Feature/ExampleTest.php | 19 + tests/Feature/ProfileTest.php | 99 + tests/TestCase.php | 10 + tests/Unit/EventTest.php | 140 + tests/Unit/ExampleTest.php | 16 + vite.config.js | 11 + 303 files changed, 26976 insertions(+) create mode 100644 .editorconfig create mode 100644 .env.example create mode 100644 .gitattributes create mode 100644 .github/workflows/github.yml create mode 100644 .gitignore create mode 100644 README.md create mode 100644 app/Events/AlternatifUpdated.php create mode 100644 app/Events/KuotaUpdated.php create mode 100644 app/Events/SubmissionCreated.php create mode 100644 app/Helpers/helpers.php create mode 100644 app/Http/Controllers/AlternatifController.php create mode 100644 app/Http/Controllers/Api/V1/Alternatif/AlternatifController.php create mode 100644 app/Http/Controllers/Api/V1/Aspek/AspekController.php create mode 100644 app/Http/Controllers/Api/V1/Kriteria/KriteriaController.php create mode 100644 app/Http/Controllers/Api/V1/ProfileMatching/ProfileMatchingController.php create mode 100644 app/Http/Controllers/Api/V1/ProfileMethod/ProfileMethod.php create mode 100644 app/Http/Controllers/Api/V1/ProfileMethod/ProfileMethodController.php create mode 100644 app/Http/Controllers/AspekController.php create mode 100644 app/Http/Controllers/Auth/AuthenticatedSessionController.php create mode 100644 app/Http/Controllers/Auth/ConfirmablePasswordController.php create mode 100644 app/Http/Controllers/Auth/EmailVerificationNotificationController.php create mode 100644 app/Http/Controllers/Auth/EmailVerificationPromptController.php create mode 100644 app/Http/Controllers/Auth/NewPasswordController.php create mode 100644 app/Http/Controllers/Auth/PasswordController.php create mode 100644 app/Http/Controllers/Auth/PasswordResetLinkController.php create mode 100644 app/Http/Controllers/Auth/RegisteredUserController.php create mode 100644 app/Http/Controllers/Auth/ThirdParty/Google/GoogleController.php create mode 100644 app/Http/Controllers/Auth/VerifyEmailController.php create mode 100644 app/Http/Controllers/Controller.php create mode 100644 app/Http/Controllers/DashboardController.php create mode 100644 app/Http/Controllers/KriteriaController.php create mode 100644 app/Http/Controllers/MahasiswaController.php create mode 100644 app/Http/Controllers/ProfileController.php create mode 100644 app/Http/Controllers/ProfileMatchingController.php create mode 100644 app/Http/Controllers/ProfileMethodController.php create mode 100644 app/Http/Controllers/SubkriteriaController.php create mode 100644 app/Http/Controllers/SubmissionsController.php create mode 100644 app/Http/Controllers/SystemController.php create mode 100644 app/Http/Requests/Alternatif/AlternatifRequest.php create mode 100644 app/Http/Requests/Aspek/AspekCreateRequest.php create mode 100644 app/Http/Requests/Auth/LoginRequest.php create mode 100644 app/Http/Requests/Kriteria/KriteriaRequest.php create mode 100644 app/Http/Requests/ProfileMatching/ProfileMatchingRequest.php create mode 100644 app/Http/Requests/ProfileMethod/ProfileMethodRequest.php create mode 100644 app/Http/Requests/ProfileUpdateRequest.php create mode 100644 app/Http/Requests/Subkriteria/SubkriteriaRequest.php create mode 100644 app/Http/Requests/Submission/SubmissionDetailRequest.php create mode 100644 app/Http/Requests/Submission/SubmissionRequest.php create mode 100644 app/Http/Resources/AspekResource.php create mode 100644 app/Http/Resources/KriteriaResource.php create mode 100644 app/Http/Resources/ProfileMethodResource.php create mode 100644 app/Jobs/ProcessSubmission.php create mode 100644 app/Models/Alternatif.php create mode 100644 app/Models/Angkatan.php create mode 100644 app/Models/Aspek.php create mode 100644 app/Models/IzinPemilihan.php create mode 100644 app/Models/Kriteria.php create mode 100644 app/Models/Nilai.php create mode 100644 app/Models/ProfileMethod.php create mode 100644 app/Models/Setting.php create mode 100644 app/Models/Subkriteria.php create mode 100644 app/Models/SubmissionDetail.php create mode 100644 app/Models/Submissions.php create mode 100644 app/Models/User.php create mode 100644 app/Observers/SubmissionsDetailObserver.php create mode 100644 app/Observers/SubmissionsObserver.php create mode 100644 app/Providers/AppServiceProvider.php create mode 100644 app/Providers/EventServiceProvider.php create mode 100644 app/View/Components/AppLayout.php create mode 100644 app/View/Components/GuestLayout.php create mode 100644 artisan create mode 100644 bootstrap/app.php create mode 100644 bootstrap/cache/.gitignore create mode 100644 bootstrap/providers.php create mode 100644 composer.json create mode 100644 config/app.php create mode 100644 config/auth.php create mode 100644 config/broadcasting.php create mode 100644 config/cache.php create mode 100644 config/database.php create mode 100644 config/filesystems.php create mode 100644 config/logging.php create mode 100644 config/mail.php create mode 100644 config/permission.php create mode 100644 config/queue.php create mode 100644 config/reverb.php create mode 100644 config/sanctum.php create mode 100644 config/services.php create mode 100644 config/session.php create mode 100644 config/tinker.php create mode 100644 database/.gitignore create mode 100644 database/factories/AlternatifFactory.php create mode 100644 database/factories/SubmissionDetailFactory.php create mode 100644 database/factories/SubmissionsFactory.php create mode 100644 database/factories/UserFactory.php create mode 100644 database/migrations/0001_01_01_000000_create_users_table.php create mode 100644 database/migrations/0001_01_01_000001_create_cache_table.php create mode 100644 database/migrations/0001_01_01_000002_create_jobs_table.php create mode 100644 database/migrations/2025_01_04_162405_create_permission_tables.php create mode 100644 database/migrations/2025_01_04_164804_create_settings_table.php create mode 100644 database/migrations/2025_01_05_054619_create_aspek_table.php create mode 100644 database/migrations/2025_01_05_074311_create_kriteria_table.php create mode 100644 database/migrations/2025_01_07_032650_create_subkriteria_table.php create mode 100644 database/migrations/2025_01_07_113557_create_alternatif_table.php create mode 100644 database/migrations/2025_01_07_113638_create_profile_method_table.php create mode 100644 database/migrations/2025_01_07_141505_create_submission_table.php create mode 100644 database/migrations/2025_01_13_091619_create_personal_access_tokens_table.php create mode 100644 database/migrations/2025_02_15_115744_add_google_id_to_users_table.php create mode 100644 database/migrations/2025_02_20_234222_create_submission_detail_table.php create mode 100644 database/migrations/2025_02_23_155439_create_nilai_table.php create mode 100644 database/migrations/2025_02_23_172822_add_id_nilai_column_to_subkriteria_table.php create mode 100644 database/migrations/2025_02_25_121610_create_angkatan_table.php create mode 100644 database/migrations/2025_02_25_143745_create_izin_pengajuan_table.php create mode 100644 database/migrations/2025_02_25_144050_add_angkatan_column_to_users_table.php create mode 100644 database/migrations/create_kuota_table create mode 100644 database/migrations/noted.add_id_angkatan_column_to_profile_method_table create mode 100644 database/seeders/AlternatifSeeder.php create mode 100644 database/seeders/AspekSeeder.php create mode 100644 database/seeders/DatabaseSeeder.php create mode 100644 database/seeders/KriteriaSeeder.php create mode 100644 database/seeders/KuotaSeeder.php create mode 100644 database/seeders/ProfileMethodSeeder.php create mode 100644 database/seeders/RoleAndPermissionSeeder.php create mode 100644 database/seeders/SettingSeeder.php create mode 100644 database/seeders/SubkriteriaSeeder.php create mode 100644 database/seeders/User/AdminSeeder.php create mode 100644 database/seeders/User/MahasiswaSeeder.php create mode 100644 docker/8.0/Dockerfile create mode 100644 docker/8.0/php.ini create mode 100644 docker/8.0/start-container create mode 100644 docker/8.0/supervisord.conf create mode 100644 docker/8.1/Dockerfile create mode 100644 docker/8.1/php.ini create mode 100644 docker/8.1/start-container create mode 100644 docker/8.1/supervisord.conf create mode 100644 docker/8.2/Dockerfile create mode 100644 docker/8.2/php.ini create mode 100644 docker/8.2/start-container create mode 100644 docker/8.2/supervisord.conf create mode 100644 docker/8.3/Dockerfile create mode 100644 docker/8.3/php.ini create mode 100644 docker/8.3/start-container create mode 100644 docker/8.3/supervisord.conf create mode 100644 docker/8.4/Dockerfile create mode 100644 docker/8.4/php.ini create mode 100644 docker/8.4/start-container create mode 100644 docker/8.4/supervisord.conf create mode 100644 docker/mariadb/create-testing-database.sh create mode 100644 docker/mysql/create-testing-database.sh create mode 100644 docker/pgsql/create-testing-database.sql create mode 100644 package-lock.json create mode 100644 package.json create mode 100644 phpunit.xml create mode 100644 postcss.config.js create mode 100644 public/.htaccess create mode 100644 public/favicon.ico create mode 100644 public/index.php create mode 100644 public/robots.txt create mode 100644 public/static/image/fyi.png create mode 100644 public/static/image/hero-section.png create mode 100644 public/static/image/hero.png create mode 100644 public/static/image/logo_polije.png create mode 100644 public/static/image/profile-placeholder.jpg create mode 100644 resources/css/app.css create mode 100644 resources/js/animated/navigation.js create mode 100644 resources/js/app.js create mode 100644 resources/js/bootstrap.js create mode 100644 resources/js/echo.js create mode 100644 resources/views/components/application-logo.blade.php create mode 100644 resources/views/components/auth-session-error.blade.php create mode 100644 resources/views/components/auth-session-status.blade.php create mode 100644 resources/views/components/danger-button.blade.php create mode 100644 resources/views/components/dropdown-link.blade.php create mode 100644 resources/views/components/dropdown.blade.php create mode 100644 resources/views/components/input-error.blade.php create mode 100644 resources/views/components/input-label.blade.php create mode 100644 resources/views/components/modal.blade.php create mode 100644 resources/views/components/nav-item-dropdown.blade.php create mode 100644 resources/views/components/nav-item.blade.php create mode 100644 resources/views/components/nav-link.blade.php create mode 100644 resources/views/components/primary-button.blade.php create mode 100644 resources/views/components/responsive-nav-link.blade.php create mode 100644 resources/views/components/secondary-button.blade.php create mode 100644 resources/views/components/text-input.blade.php create mode 100644 resources/views/errors/401.blade.php create mode 100644 resources/views/errors/402.blade.php create mode 100644 resources/views/errors/403.blade.php create mode 100644 resources/views/errors/404.blade.php create mode 100644 resources/views/errors/419.blade.php create mode 100644 resources/views/errors/429.blade.php create mode 100644 resources/views/errors/500.blade.php create mode 100644 resources/views/errors/503.blade.php create mode 100644 resources/views/errors/layout.blade.php create mode 100644 resources/views/errors/minimal.blade.php create mode 100644 resources/views/layouts/app.blade.php create mode 100644 resources/views/layouts/guest.blade.php create mode 100644 resources/views/layouts/home.blade.php create mode 100644 resources/views/layouts/navigation.blade.php create mode 100644 resources/views/layouts/sidebar.blade.php create mode 100644 resources/views/pages/alternatif/create.blade.php create mode 100644 resources/views/pages/alternatif/edit.blade.php create mode 100644 resources/views/pages/alternatif/index.blade.php create mode 100644 resources/views/pages/aspek/create.blade.php create mode 100644 resources/views/pages/aspek/edit.blade.php create mode 100644 resources/views/pages/aspek/index.blade.php create mode 100644 resources/views/pages/aspek/show.blade.php create mode 100644 resources/views/pages/auth/confirm-password.blade.php create mode 100644 resources/views/pages/auth/forgot-password.blade.php create mode 100644 resources/views/pages/auth/login.blade.php create mode 100644 resources/views/pages/auth/register.blade.php create mode 100644 resources/views/pages/auth/reset-password.blade.php create mode 100644 resources/views/pages/auth/verify-email.blade.php create mode 100644 resources/views/pages/dashboard/index.blade.php create mode 100644 resources/views/pages/home/index.blade.php create mode 100644 resources/views/pages/home/kesimpulan.blade.php create mode 100644 resources/views/pages/home/metode.blade.php create mode 100644 resources/views/pages/home/pendahuluan.blade.php create mode 100644 resources/views/pages/kriteria/create.blade.php create mode 100644 resources/views/pages/kriteria/edit.blade.php create mode 100644 resources/views/pages/kriteria/index.blade.php create mode 100644 resources/views/pages/kriteria/show.blade.php create mode 100644 resources/views/pages/mahasiswa/create.blade.php create mode 100644 resources/views/pages/mahasiswa/index.blade.php create mode 100644 resources/views/pages/profile-matching/index.blade.php create mode 100644 resources/views/pages/profile-method/create.blade.php create mode 100644 resources/views/pages/profile-method/edit.blade.php create mode 100644 resources/views/pages/profile-method/index.blade.php create mode 100644 resources/views/pages/profile-method/show.blade.php create mode 100644 resources/views/pages/settings/system.blade.php create mode 100644 resources/views/pages/subkriteria/create.blade.php create mode 100644 resources/views/pages/subkriteria/edit.blade.php create mode 100644 resources/views/pages/subkriteria/index.blade.php create mode 100644 resources/views/pages/subkriteria/show.blade.php create mode 100644 resources/views/pages/submissions/create.blade.php create mode 100644 resources/views/pages/submissions/index.blade.php create mode 100644 resources/views/partials/content.blade.php create mode 100644 resources/views/partials/footer.blade.php create mode 100644 resources/views/partials/header.blade.php create mode 100644 resources/views/partials/metadata.blade.php create mode 100644 resources/views/partials/scripts.blade.php create mode 100644 resources/views/partials/styles.blade.php create mode 100644 resources/views/profile-matching/result.blade.php create mode 100644 resources/views/profile/edit.blade.php create mode 100644 resources/views/profile/partials/delete-user-form.blade.php create mode 100644 resources/views/profile/partials/update-password-form.blade.php create mode 100644 resources/views/profile/partials/update-profile-information-form.blade.php create mode 100644 resources/views/vendor/mail/html/button.blade.php create mode 100644 resources/views/vendor/mail/html/footer.blade.php create mode 100644 resources/views/vendor/mail/html/header.blade.php create mode 100644 resources/views/vendor/mail/html/layout.blade.php create mode 100644 resources/views/vendor/mail/html/message.blade.php create mode 100644 resources/views/vendor/mail/html/panel.blade.php create mode 100644 resources/views/vendor/mail/html/subcopy.blade.php create mode 100644 resources/views/vendor/mail/html/table.blade.php create mode 100644 resources/views/vendor/mail/html/themes/default.css create mode 100644 resources/views/vendor/mail/text/button.blade.php create mode 100644 resources/views/vendor/mail/text/footer.blade.php create mode 100644 resources/views/vendor/mail/text/header.blade.php create mode 100644 resources/views/vendor/mail/text/layout.blade.php create mode 100644 resources/views/vendor/mail/text/message.blade.php create mode 100644 resources/views/vendor/mail/text/panel.blade.php create mode 100644 resources/views/vendor/mail/text/subcopy.blade.php create mode 100644 resources/views/vendor/mail/text/table.blade.php create mode 100644 resources/views/vendor/notifications/email.blade.php create mode 100644 resources/views/vendor/pagination/bootstrap-4.blade.php create mode 100644 resources/views/vendor/pagination/bootstrap-5.blade.php create mode 100644 resources/views/vendor/pagination/default.blade.php create mode 100644 resources/views/vendor/pagination/semantic-ui.blade.php create mode 100644 resources/views/vendor/pagination/simple-bootstrap-4.blade.php create mode 100644 resources/views/vendor/pagination/simple-bootstrap-5.blade.php create mode 100644 resources/views/vendor/pagination/simple-default.blade.php create mode 100644 resources/views/vendor/pagination/simple-tailwind.blade.php create mode 100644 resources/views/vendor/pagination/tailwind.blade.php create mode 100644 routes/api.php create mode 100644 routes/auth.php create mode 100644 routes/channels.php create mode 100644 routes/console.php create mode 100644 routes/web.php create mode 100644 sail create mode 100644 storage/app/.gitignore create mode 100644 storage/app/private/.gitignore create mode 100644 storage/app/public/.gitignore create mode 100644 storage/debugbar/.gitignore create mode 100644 storage/framework/.gitignore create mode 100644 storage/framework/cache/.gitignore create mode 100644 storage/framework/cache/data/.gitignore create mode 100644 storage/framework/sessions/.gitignore create mode 100644 storage/framework/testing/.gitignore create mode 100644 storage/framework/views/.gitignore create mode 100644 storage/logs/.gitignore create mode 100644 tailwind.config.js create mode 100644 tests/Feature/Auth/AuthenticationTest.php create mode 100644 tests/Feature/Auth/EmailVerificationTest.php create mode 100644 tests/Feature/Auth/PasswordConfirmationTest.php create mode 100644 tests/Feature/Auth/PasswordResetTest.php create mode 100644 tests/Feature/Auth/PasswordUpdateTest.php create mode 100644 tests/Feature/Auth/RegistrationTest.php create mode 100644 tests/Feature/ExampleTest.php create mode 100644 tests/Feature/ProfileTest.php create mode 100644 tests/TestCase.php create mode 100644 tests/Unit/EventTest.php create mode 100644 tests/Unit/ExampleTest.php create mode 100644 vite.config.js diff --git a/.editorconfig b/.editorconfig new file mode 100644 index 0000000..8f0de65 --- /dev/null +++ b/.editorconfig @@ -0,0 +1,18 @@ +root = true + +[*] +charset = utf-8 +end_of_line = lf +indent_size = 4 +indent_style = space +insert_final_newline = true +trim_trailing_whitespace = true + +[*.md] +trim_trailing_whitespace = false + +[*.{yml,yaml}] +indent_size = 2 + +[docker-compose.yml] +indent_size = 4 diff --git a/.env.example b/.env.example new file mode 100644 index 0000000..d4c0d73 --- /dev/null +++ b/.env.example @@ -0,0 +1,90 @@ +APP_NAME=Laravel +APP_ENV=local +APP_KEY= +APP_DEBUG=true +APP_TIMEZONE=UTC +APP_URL=http://localhost + +APP_LOCALE=en +APP_FALLBACK_LOCALE=en +APP_FAKER_LOCALE=en_US + +APP_MAINTENANCE_DRIVER=file +# APP_MAINTENANCE_STORE=database + +PHP_CLI_SERVER_WORKERS=4 + +BCRYPT_ROUNDS=12 + +LOG_CHANNEL=stack +LOG_STACK=single +LOG_DEPRECATIONS_CHANNEL=null +LOG_LEVEL=debug + +DB_CONNECTION=mysql +DB_HOST=127.0.0.1 +DB_PORT=3306 +DB_DATABASE=spk_pm_dosbing +DB_USERNAME=root +DB_PASSWORD= + +SESSION_DRIVER=database +SESSION_LIFETIME=120 +SESSION_ENCRYPT=false +SESSION_PATH=/ +SESSION_DOMAIN=null + +BROADCAST_CONNECTION=log +FILESYSTEM_DISK=local +QUEUE_CONNECTION=database + +# PUSHER_APP_ID=1944527 +# PUSHER_APP_KEY=6a84a71e1b473120450c +# PUSHER_APP_SECRET=e65278939c6516ea0ef2 +# PUSHER_HOST= +# PUSHER_PORT=443 +# PUSHER_SCHEME="https" +# PUSHER_APP_CLUSTER="mt1" + +CACHE_STORE=database +CACHE_PREFIX= + +MEMCACHED_HOST=127.0.0.1 + +REDIS_CLIENT=phpredis +REDIS_HOST=127.0.0.1 +REDIS_PASSWORD=null +REDIS_PORT=6379 + +MAIL_MAILER=log +MAIL_HOST=127.0.0.1 +MAIL_PORT=2525 +MAIL_USERNAME=null +MAIL_PASSWORD=null +MAIL_ENCRYPTION=null +MAIL_FROM_ADDRESS="hello@example.com" +MAIL_FROM_NAME="${APP_NAME}" + +AWS_ACCESS_KEY_ID= +AWS_SECRET_ACCESS_KEY= +AWS_DEFAULT_REGION=us-east-1 +AWS_BUCKET= +AWS_USE_PATH_STYLE_ENDPOINT=false + +VITE_APP_NAME="${APP_NAME}" + +GOOGLE_CLIENT_ID= +GOOGLE_CLIENT_SECRET= +GOOGLE_REDIRECT_URI= + +REVERB_APP_ID= +REVERB_APP_KEY= +REVERB_APP_SECRET= +REVERB_HOST= +REVERB_PORT= +REVERB_SCHEME= + +VITE_REVERB_APP_KEY="${REVERB_APP_KEY}" +VITE_REVERB_HOST="${REVERB_HOST}" +VITE_REVERB_PORT="${REVERB_PORT}" +VITE_REVERB_SCHEME="${REVERB_SCHEME}" diff --git a/.gitattributes b/.gitattributes new file mode 100644 index 0000000..fcb21d3 --- /dev/null +++ b/.gitattributes @@ -0,0 +1,11 @@ +* text=auto eol=lf + +*.blade.php diff=html +*.css diff=css +*.html diff=html +*.md diff=markdown +*.php diff=php + +/.github export-ignore +CHANGELOG.md export-ignore +.styleci.yml export-ignore diff --git a/.github/workflows/github.yml b/.github/workflows/github.yml new file mode 100644 index 0000000..5e49f2a --- /dev/null +++ b/.github/workflows/github.yml @@ -0,0 +1,42 @@ +name: SPK_PM_DOSBING +on: + push: + branches: ["main"] + pull_request: + branches: ["main"] +jobs: + deploy: + name: deploy to staging + runs-on: ubuntu-latest + steps: + - uses: shivammathur/setup-php@15c43e89cdef867065b0213be354c2841860869e + with: + php-version: "8.2" + - uses: actions/checkout@v4 + - name: Copy .env + run: php -r "file_exists('.env') || copy('.env.example', '.env');" + - name: Install Dependencies + run: composer install -q --no-ansi --no-interaction --no-scripts --no-progress --prefer-dist --no-dev --optimize-autoloader --no-interaction --prefer-dist + - name: Generate key + run: php artisan key:generate + - name: Directory Permissions + run: chmod -R 777 storage bootstrap/cache + - name: Create Database + run: | + mkdir -p database + touch database/database.mysql + - name: Setup Node + uses: actions/setup-node@v4 + with: + node-version: "20.x" + cache: "npm" + - name: Install Dependencies & Build + run: | + npm ci + npm run build + - name: 📂 Sync files + uses: SamKirkland/FTP-Deploy-Action@v4.3.5 + with: + server: ${{ secrets.ftp_servername }} + username: ${{ secrets.ftp_username }} + password: ${{ secrets.ftp_password }} diff --git a/.gitignore b/.gitignore new file mode 100644 index 0000000..698ef51 --- /dev/null +++ b/.gitignore @@ -0,0 +1,21 @@ +/.phpunit.cache +/node_modules +/public/build +/public/hot +/public/storage +/storage/*.key +/vendor +.env +.env.backup +.env.production +Homestead.json +Homestead.yaml +auth.json +npm-debug.log +yarn-error.log +/.fleet +/.idea +/.vscode +tailwind.config copy.js +composer.lock +.phpunit.result.cache diff --git a/README.md b/README.md new file mode 100644 index 0000000..1a4c26b --- /dev/null +++ b/README.md @@ -0,0 +1,66 @@ +

Laravel Logo

+ +

+Build Status +Total Downloads +Latest Stable Version +License +

+ +## About Laravel + +Laravel is a web application framework with expressive, elegant syntax. We believe development must be an enjoyable and creative experience to be truly fulfilling. Laravel takes the pain out of development by easing common tasks used in many web projects, such as: + +- [Simple, fast routing engine](https://laravel.com/docs/routing). +- [Powerful dependency injection container](https://laravel.com/docs/container). +- Multiple back-ends for [session](https://laravel.com/docs/session) and [cache](https://laravel.com/docs/cache) storage. +- Expressive, intuitive [database ORM](https://laravel.com/docs/eloquent). +- Database agnostic [schema migrations](https://laravel.com/docs/migrations). +- [Robust background job processing](https://laravel.com/docs/queues). +- [Real-time event broadcasting](https://laravel.com/docs/broadcasting). + +Laravel is accessible, powerful, and provides tools required for large, robust applications. + +## Learning Laravel + +Laravel has the most extensive and thorough [documentation](https://laravel.com/docs) and video tutorial library of all modern web application frameworks, making it a breeze to get started with the framework. + +You may also try the [Laravel Bootcamp](https://bootcamp.laravel.com), where you will be guided through building a modern Laravel application from scratch. + +If you don't feel like reading, [Laracasts](https://laracasts.com) can help. Laracasts contains thousands of video tutorials on a range of topics including Laravel, modern PHP, unit testing, and JavaScript. Boost your skills by digging into our comprehensive video library. + +## Laravel Sponsors + +We would like to extend our thanks to the following sponsors for funding Laravel development. If you are interested in becoming a sponsor, please visit the [Laravel Partners program](https://partners.laravel.com). + +### Premium Partners + +- **[Vehikl](https://vehikl.com/)** +- **[Tighten Co.](https://tighten.co)** +- **[WebReinvent](https://webreinvent.com/)** +- **[Kirschbaum Development Group](https://kirschbaumdevelopment.com)** +- **[64 Robots](https://64robots.com)** +- **[Curotec](https://www.curotec.com/services/technologies/laravel/)** +- **[Cyber-Duck](https://cyber-duck.co.uk)** +- **[DevSquad](https://devsquad.com/hire-laravel-developers)** +- **[Jump24](https://jump24.co.uk)** +- **[Redberry](https://redberry.international/laravel/)** +- **[Active Logic](https://activelogic.com)** +- **[byte5](https://byte5.de)** +- **[OP.GG](https://op.gg)** + +## Contributing + +Thank you for considering contributing to the Laravel framework! The contribution guide can be found in the [Laravel documentation](https://laravel.com/docs/contributions). + +## Code of Conduct + +In order to ensure that the Laravel community is welcoming to all, please review and abide by the [Code of Conduct](https://laravel.com/docs/contributions#code-of-conduct). + +## Security Vulnerabilities + +If you discover a security vulnerability within Laravel, please send an e-mail to Taylor Otwell via [taylor@laravel.com](mailto:taylor@laravel.com). All security vulnerabilities will be promptly addressed. + +## License + +The Laravel framework is open-sourced software licensed under the [MIT license](https://opensource.org/licenses/MIT). diff --git a/app/Events/AlternatifUpdated.php b/app/Events/AlternatifUpdated.php new file mode 100644 index 0000000..04ec327 --- /dev/null +++ b/app/Events/AlternatifUpdated.php @@ -0,0 +1,38 @@ +alternatif = $alternatif; + } + + /** + * Get the channels the event should broadcast on. + * + * @return array + */ + public function broadcastOn(): array + { + return [ + new PrivateChannel('update-value'), + ]; + } +} diff --git a/app/Events/KuotaUpdated.php b/app/Events/KuotaUpdated.php new file mode 100644 index 0000000..bf0cf84 --- /dev/null +++ b/app/Events/KuotaUpdated.php @@ -0,0 +1,38 @@ +subkriteria = $subkriteria; + } + + /** + * Get the channels the event should broadcast on. + * + * @return array + */ + public function broadcastOn(): array + { + return [ + new Channel('kuota-channel'), + ]; + } +} \ No newline at end of file diff --git a/app/Events/SubmissionCreated.php b/app/Events/SubmissionCreated.php new file mode 100644 index 0000000..3e4e9ac --- /dev/null +++ b/app/Events/SubmissionCreated.php @@ -0,0 +1,40 @@ +submission = $submission; + } + + /** + * Get the channels the event should broadcast on. + * + * @return array + */ + public function broadcastOn(): array + { + return [ + new PrivateChannel('channel-name'), + ]; + } +} \ No newline at end of file diff --git a/app/Helpers/helpers.php b/app/Helpers/helpers.php new file mode 100644 index 0000000..b012555 --- /dev/null +++ b/app/Helpers/helpers.php @@ -0,0 +1,11 @@ +validated(); + + Alternatif::create($validated); + + return redirect()->route('alternatif.index')->with('success', 'Data Berhasil Ditambah'); + } catch (\Exception $e) { + Log::error($e->getMessage()); + return back()->with(['error' => 'Gagal Menambahkan Data: ' . $e->getMessage()]); + } + } + + /** + * Display the specified resource. + */ + public function show(string $id) + { + // + } + + /** + * Show the form for editing the specified resource. + */ + public function edit(string $id) + { + $data['alternatif'] = Alternatif::find($id); + + return view('pages.alternatif.edit', $data); + } + + /** + * Update the specified resource in storage. + */ + public function update(AlternatifRequest $request, string $id) + { + try { + $validated = $request->validated(); + + Alternatif::find($id)->update($validated); + + return redirect()->route('alternatif.index')->with('success', 'Data Berhasil Diperbarui'); + } catch (\Exception $e) { + Log::error($e->getMessage()); + + return back()->with(['error' => 'Gagal Mengubah Data: ' . $e->getMessage()]); + } + } + + /** + * Remove the specified resource from storage. + */ + public function destroy(string $id) + { + try { + Alternatif::find($id)->delete(); + return redirect()->route('alternatif.index')->with('success', 'Data Berhasil Dihapus'); + } catch (\Exception $e) { + Log::error($e->getMessage()); + return back()->with(['error' => 'Gagal Menghapus Data: ' . $e->getMessage()]); + } + } +} diff --git a/app/Http/Controllers/Api/V1/Alternatif/AlternatifController.php b/app/Http/Controllers/Api/V1/Alternatif/AlternatifController.php new file mode 100644 index 0000000..087c1a6 --- /dev/null +++ b/app/Http/Controllers/Api/V1/Alternatif/AlternatifController.php @@ -0,0 +1,65 @@ +limit ?? 10; + + $kriteria = Aspek::paginate($limit); + + return new AspekResource($kriteria); + } + + /** + * Show the form for creating a new resource. + */ + public function create() + { + // + } + + /** + * Store a newly created resource in storage. + */ + public function store(Request $request) + { + // + } + + /** + * Display the specified resource. + */ + public function show(string $id) + { + // + } + + /** + * Show the form for editing the specified resource. + */ + public function edit(string $id) + { + // + } + + /** + * Update the specified resource in storage. + */ + public function update(Request $request, string $id) + { + // + } + + /** + * Remove the specified resource from storage. + */ + public function destroy(string $id) + { + // + } +} \ No newline at end of file diff --git a/app/Http/Controllers/Api/V1/Kriteria/KriteriaController.php b/app/Http/Controllers/Api/V1/Kriteria/KriteriaController.php new file mode 100644 index 0000000..b1e97bb --- /dev/null +++ b/app/Http/Controllers/Api/V1/Kriteria/KriteriaController.php @@ -0,0 +1,71 @@ +limit ?? 10; + + $kriteria = Kriteria::where('id_aspek', '!=', 1)->with('subkriteria')->paginate($limit); + + return new KriteriaResource($kriteria); + } + + /** + * Show the form for creating a new resource. + */ + public function create() + { + // + } + + /** + * Store a newly created resource in storage. + */ + public function store(Request $request) + { + // + } + + /** + * Display the specified resource. + */ + public function show(string $id) + { + // + } + + /** + * Show the form for editing the specified resource. + */ + public function edit(string $id) + { + // + } + + /** + * Update the specified resource in storage. + */ + public function update(Request $request, string $id) + { + // + } + + /** + * Remove the specified resource from storage. + */ + public function destroy(string $id) + { + // + } +} diff --git a/app/Http/Controllers/Api/V1/ProfileMatching/ProfileMatchingController.php b/app/Http/Controllers/Api/V1/ProfileMatching/ProfileMatchingController.php new file mode 100644 index 0000000..3487ad6 --- /dev/null +++ b/app/Http/Controllers/Api/V1/ProfileMatching/ProfileMatchingController.php @@ -0,0 +1,221 @@ +validated(); + + $data['judul'] = $request->input('judul'); + $data['deskripsi'] = $request->input('deskripsi'); + $selectedKriteria = $request->input('kriteria', []); + $selectedAlternatif = $request->input('alternatif', []); + + if (empty($selectedKriteria) || empty($selectedAlternatif)) { + return back()->withErrors('Kriteria dan alternatif harus dipilih.')->withInput(); + } + + Log::info('Selected Kriteria:', ['data' => $selectedKriteria]); + Log::info('Selected Alternatif:', ['data' => $selectedAlternatif]); + + $data['resultsGAP'] = $this->gapProfil($selectedAlternatif, $selectedKriteria); + $data['normalizedGAP'] = $this->normalizeGAP($data['resultsGAP']); + $data['factorValue'] = $this->factorValue($data['normalizedGAP']); + $data['totalValue'] = $this->totalValue($data['factorValue']); + $data['ranking'] = $this->rankAlternatif($data['totalValue']); + + $data['data_aspek'] = Aspek::all(); + $data['data_kriteria'] = Kriteria::all(); + + if (empty($data['resultsGAP']) || empty($data['ranking'])) { + return back()->withErrors('Terjadi kesalahan saat memproses data.')->withInput(); + } + + // dd($data); + return view('profile-matching.result', $data); + + } catch (\Exception $e) { + Log::error('Error in Profile Matching:', ['message' => $e->getMessage()]); + + return response()->json(['error' => 'Terjadi kesalahan saat memproses data: ' . $e->getMessage()], 500); + } +} + + private function gapProfil($alternatif, $kriteria) + { + $resultsGAP = []; + $gapValues = []; + + $dosenProfile = ProfileMethod::with('kriteria', 'subkriteria')->whereIn('id_alternatif', $alternatif)->get(); + + foreach ($dosenProfile as $dosen) { + + $dosenSubkriteria = $dosen->subkriteria; + $dosenKriteria = $dosen->kriteria; + + foreach ($kriteria as $key => $subkriteriaId) { + $idealValue = Subkriteria::with('kriteria')->find($subkriteriaId); + $idealKriteria = $idealValue->kriteria; + + if ($dosenKriteria->id_kriteria == $idealKriteria->id_kriteria) { + $gapValues[$idealValue->id_kriteria] = $dosenSubkriteria->nilai - $idealValue->nilai; + } + } + + $resultsGAP[$dosen->id_alternatif] = $gapValues; + } + Log::info('Ideal Value:', ['data' => $idealValue]); + Log::info('GAP Values:', ['dosenId' => $dosen->id_alternatif, 'gapValues' => $gapValues]); + + return $resultsGAP; + } + + private function normalizeGAP($resultsGAP) + { + $normalizedGAP = []; + $normalizedValues = []; + $conversionTable = [ + 0 => 5, + 1 => 4.5, + -1 => 4, + 2 => 3.5, + -2 => 3, + 3 => 2.5, + -3 => 2, + 4 => 1.5, + -4 => 1 + ]; + + foreach ($resultsGAP as $dosenId => $gapValues) { + + foreach ($gapValues as $key => $gap) { + $normalizedValues[$key] = $conversionTable[$gap] ?? 1; + } + + $normalizedGAP[$dosenId] = $normalizedValues; + } + + return $normalizedGAP; + } + + private function factorValue($normalizedGAP) { + $resultsFactor = []; + + foreach ($normalizedGAP as $dosenId => $gapValues) { + $dataAspek = Aspek::all(); + $aspek = []; + + foreach ($dataAspek as $aspekValue) { + $aspekId = $aspekValue->id_aspek; + + $coreValues = 0; + $secondaryValues = 0; + $coreCount = 0; + $secondaryCount = 0; + $factorValue = []; + + foreach ($gapValues as $kriteria => $values) { + $factor = Kriteria::find($kriteria); + + if ($factor->tipe == 'Core Factor') { + if ($aspekId == $factor->id_aspek) { + $coreValues += $values; + $coreCount++; + } + } else { + if ($aspekId == $factor->id_aspek) { + $secondaryValues += $values; + $secondaryCount++; + } + } + } + + if ($coreCount > 0) { + $factorValue['NCF'] = $coreValues / $coreCount; + } + if ($secondaryCount > 0) { + $factorValue['NSF'] = $secondaryValues / $secondaryCount; + } + + $aspek[$aspekId] = $factorValue; + } + $resultsFactor[$dosenId] = $aspek; + } + + return $resultsFactor; + } + + private function totalValue($factorValue) + { + $totalValues = []; + $aspek = []; + $totalValueFactor = []; + $bobotCF = 60; + $bobotSF = 40; + + foreach ($factorValue as $dosenId => $value) { + foreach ($value as $aspekId => $values) { + $value = []; + + foreach ($values as $tipeValue => $valueFactor) { + if ($tipeValue == 'NCF') { + $value[] = $valueFactor * $bobotCF / 100; + } else { + $value[] = $valueFactor * $bobotSF / 100; + } + } + $totalValueFactor = array_sum($value); + $aspek[$aspekId] = $totalValueFactor; + } + $totalValues[$dosenId] = $aspek; + } + + return $totalValues; + } + + private function rankAlternatif($totalValues) + { + $rankedResults = []; + + foreach ($totalValues as $dosenId => $totalValue) { + $ha = 0; + + foreach ($totalValue as $aspekId => $value) { + $bobotAspek = Aspek::where('id_aspek', $aspekId)->pluck('persentase')->first(); + if ($bobotAspek) { + $ha += $value * ($bobotAspek / 100); + } + } + $alternatif = Alternatif::where('id_alternatif', $dosenId)->first(); + + $rankedResults[] = [ + 'dosenId' => $alternatif->id_alternatif, + 'dosenName' => $alternatif->name, + 'hasilAkhir' => $ha, + ]; + } + + usort($rankedResults, function ($a, $b) { + return $b['hasilAkhir'] <=> $a['hasilAkhir']; + }); + + foreach ($rankedResults as $index => &$result) { + $result['rank'] = $index + 1; + } + + return $rankedResults; + } +} \ No newline at end of file diff --git a/app/Http/Controllers/Api/V1/ProfileMethod/ProfileMethod.php b/app/Http/Controllers/Api/V1/ProfileMethod/ProfileMethod.php new file mode 100644 index 0000000..2ad4b20 --- /dev/null +++ b/app/Http/Controllers/Api/V1/ProfileMethod/ProfileMethod.php @@ -0,0 +1,70 @@ +limit ?? 10; + + $alternatif = ModelsProfileMethod::with('subkriteria')->paginate($limit); + + return new kriteriaResource($kriteria); + } + + /** + * Show the form for creating a new resource. + */ + public function create() + { + // + } + + /** + * Store a newly created resource in storage. + */ + public function store(Request $request) + { + // + } + + /** + * Display the specified resource. + */ + public function show(string $id) + { + // + } + + /** + * Show the form for editing the specified resource. + */ + public function edit(string $id) + { + // + } + + /** + * Update the specified resource in storage. + */ + public function update(Request $request, string $id) + { + // + } + + /** + * Remove the specified resource from storage. + */ + public function destroy(string $id) + { + // + } +} \ No newline at end of file diff --git a/app/Http/Controllers/Api/V1/ProfileMethod/ProfileMethodController.php b/app/Http/Controllers/Api/V1/ProfileMethod/ProfileMethodController.php new file mode 100644 index 0000000..b3f36c8 --- /dev/null +++ b/app/Http/Controllers/Api/V1/ProfileMethod/ProfileMethodController.php @@ -0,0 +1,71 @@ +limit ?? 10; + + $profile = ProfileMethod::with('alternatif', 'kriteria', 'subkriteria')->paginate($limit); + + return new ProfileMethodResource($profile); + } + + /** + * Show the form for creating a new resource. + */ + public function create() + { + // + } + + /** + * Store a newly created resource in storage. + */ + public function store(Request $request) + { + // + } + + /** + * Display the specified resource. + */ + public function show(string $id) + { + // + } + + /** + * Show the form for editing the specified resource. + */ + public function edit(string $id) + { + // + } + + /** + * Update the specified resource in storage. + */ + public function update(Request $request, string $id) + { + // + } + + /** + * Remove the specified resource from storage. + */ + public function destroy(string $id) + { + // + } +} \ No newline at end of file diff --git a/app/Http/Controllers/AspekController.php b/app/Http/Controllers/AspekController.php new file mode 100644 index 0000000..9ca56bc --- /dev/null +++ b/app/Http/Controllers/AspekController.php @@ -0,0 +1,113 @@ +validated(); + + $validated['persentase'] = FormatHelper::formatPersentase($validated['persentase']); + + Aspek::create($validated); + + return redirect()->route('aspek.index')->with('success', 'Data Berhasil Ditambah'); + } catch (\Exception $e) { + Log::error($e->getMessage()); + return back()->with(['error' => 'Gagal Menambahkan Data: ' . $e->getMessage()]); + } + } + + + /** + * Display the specified resource. + */ + public function show(string $id) + { + $data['aspek'] = Aspek::find($id); + + return view('pages.aspek.show', $data); + } + + /** + * Show the form for editing the specified resource. + */ + public function edit(string $id) + { + $data['aspek'] = Aspek::find($id); + + return view('pages.aspek.edit', $data); + } + + /** + * Update the specified resource in storage. + */ + public function update(AspekCreateRequest $request, string $id) + { + try { + $validated = $request->validated(); + + $validated['persentase'] = FormatHelper::formatPersentase($validated['persentase']); + + Aspek::find($id)->update($validated); + + return redirect()->route('aspek.index')->with('success', 'Data Berhasil Diperbarui'); + } catch (\Exception $e) { + Log::error($e->getMessage()); + + return back()->with(['error' => 'Gagal Mengubah Data: ' . $e->getMessage()]); + } + } + + /** + * Remove the specified resource from storage. + */ + public function destroy(string $id) + { + try { + Aspek::find($id)->delete(); + return redirect()->route('aspek.index')->with('success', 'Data Berhasil Dihapus'); + } catch (\Exception $e) { + Log::error($e->getMessage()); + return back()->with(['error' => 'Gagal Menghapus Data: ' . $e->getMessage()]); + } + } +} \ No newline at end of file diff --git a/app/Http/Controllers/Auth/AuthenticatedSessionController.php b/app/Http/Controllers/Auth/AuthenticatedSessionController.php new file mode 100644 index 0000000..d50c8c8 --- /dev/null +++ b/app/Http/Controllers/Auth/AuthenticatedSessionController.php @@ -0,0 +1,47 @@ +authenticate(); + + $request->session()->regenerate(); + + return redirect()->intended(route('dashboard.index', absolute: false)); + } + + /** + * Destroy an authenticated session. + */ + public function destroy(Request $request): RedirectResponse + { + Auth::guard('web')->logout(); + + $request->session()->invalidate(); + + $request->session()->regenerateToken(); + + return redirect('/'); + } +} \ No newline at end of file diff --git a/app/Http/Controllers/Auth/ConfirmablePasswordController.php b/app/Http/Controllers/Auth/ConfirmablePasswordController.php new file mode 100644 index 0000000..5ee72d9 --- /dev/null +++ b/app/Http/Controllers/Auth/ConfirmablePasswordController.php @@ -0,0 +1,40 @@ +validate([ + 'email' => $request->user()->email, + 'password' => $request->password, + ])) { + throw ValidationException::withMessages([ + 'password' => __('auth.password'), + ]); + } + + $request->session()->put('auth.password_confirmed_at', time()); + + return redirect()->intended(route('dashboard.index', absolute: false)); + } +} diff --git a/app/Http/Controllers/Auth/EmailVerificationNotificationController.php b/app/Http/Controllers/Auth/EmailVerificationNotificationController.php new file mode 100644 index 0000000..d06f675 --- /dev/null +++ b/app/Http/Controllers/Auth/EmailVerificationNotificationController.php @@ -0,0 +1,24 @@ +user()->hasVerifiedEmail()) { + return redirect()->intended(route('dashboard.index', absolute: false)); + } + + $request->user()->sendEmailVerificationNotification(); + + return back()->with('status', 'verification-link-sent'); + } +} \ No newline at end of file diff --git a/app/Http/Controllers/Auth/EmailVerificationPromptController.php b/app/Http/Controllers/Auth/EmailVerificationPromptController.php new file mode 100644 index 0000000..afce27a --- /dev/null +++ b/app/Http/Controllers/Auth/EmailVerificationPromptController.php @@ -0,0 +1,21 @@ +user()->hasVerifiedEmail() + ? redirect()->intended(route('dashboard.index', absolute: false)) + : view('pages.auth.verify-email'); + } +} \ No newline at end of file diff --git a/app/Http/Controllers/Auth/NewPasswordController.php b/app/Http/Controllers/Auth/NewPasswordController.php new file mode 100644 index 0000000..0415962 --- /dev/null +++ b/app/Http/Controllers/Auth/NewPasswordController.php @@ -0,0 +1,61 @@ + $request]); + } + + /** + * Handle an incoming new password request. + * + * @throws \Illuminate\Validation\ValidationException + */ + public function store(Request $request): RedirectResponse + { + $request->validate([ + 'token' => ['required'], + 'email' => ['required', 'email'], + 'password' => ['required', 'confirmed', Rules\Password::defaults()], + ]); + + // Here we will attempt to reset the user's password. If it is successful we + // will update the password on an actual user model and persist it to the + // database. Otherwise we will parse the error and return the response. + $status = Password::reset( + $request->only('email', 'password', 'password_confirmation', 'token'), + function ($user) use ($request) { + $user->forceFill([ + 'password' => Hash::make($request->password), + 'remember_token' => Str::random(60), + ])->save(); + + event(new PasswordReset($user)); + } + ); + + // If the password was successfully reset, we will redirect the user back to + // the application's home authenticated view. If there is an error we can + // redirect them back to where they came from with their error message. + return $status == Password::PASSWORD_RESET + ? redirect()->route('login')->with('status', __($status)) + : back()->withInput($request->only('email')) + ->withErrors(['email' => __($status)]); + } +} \ No newline at end of file diff --git a/app/Http/Controllers/Auth/PasswordController.php b/app/Http/Controllers/Auth/PasswordController.php new file mode 100644 index 0000000..6916409 --- /dev/null +++ b/app/Http/Controllers/Auth/PasswordController.php @@ -0,0 +1,29 @@ +validateWithBag('updatePassword', [ + 'current_password' => ['required', 'current_password'], + 'password' => ['required', Password::defaults(), 'confirmed'], + ]); + + $request->user()->update([ + 'password' => Hash::make($validated['password']), + ]); + + return back()->with('status', 'password-updated'); + } +} diff --git a/app/Http/Controllers/Auth/PasswordResetLinkController.php b/app/Http/Controllers/Auth/PasswordResetLinkController.php new file mode 100644 index 0000000..5e82056 --- /dev/null +++ b/app/Http/Controllers/Auth/PasswordResetLinkController.php @@ -0,0 +1,44 @@ +validate([ + 'email' => ['required', 'email'], + ]); + + // We will send the password reset link to this user. Once we have attempted + // to send the link, we will examine the response then see the message we + // need to show to the user. Finally, we'll send out a proper response. + $status = Password::sendResetLink( + $request->only('email') + ); + + return $status == Password::RESET_LINK_SENT + ? back()->with('status', __($status)) + : back()->withInput($request->only('email')) + ->withErrors(['email' => __($status)]); + } +} \ No newline at end of file diff --git a/app/Http/Controllers/Auth/RegisteredUserController.php b/app/Http/Controllers/Auth/RegisteredUserController.php new file mode 100644 index 0000000..d67a2e2 --- /dev/null +++ b/app/Http/Controllers/Auth/RegisteredUserController.php @@ -0,0 +1,52 @@ +validate([ + 'name' => ['required', 'string', 'max:255'], + 'email' => ['required', 'string', 'lowercase', 'email', 'max:255', 'unique:'.User::class], + 'password' => ['required', 'confirmed', Rules\Password::defaults()], + ]); + + $user = User::create([ + 'name' => $request->name, + 'email' => $request->email, + 'password' => Hash::make($request->password), + ]); + + event(new Registered($user)); + + $user->assignRole('mahasiswa'); + + Auth::login($user); + + return redirect(route('dashboard.index', absolute: false)); + } +} \ No newline at end of file diff --git a/app/Http/Controllers/Auth/ThirdParty/Google/GoogleController.php b/app/Http/Controllers/Auth/ThirdParty/Google/GoogleController.php new file mode 100644 index 0000000..75aa12e --- /dev/null +++ b/app/Http/Controllers/Auth/ThirdParty/Google/GoogleController.php @@ -0,0 +1,68 @@ +redirect(); + } + + public function handleGoogleCallback(): RedirectResponse + { + try { + $socialUser = Socialite::driver('google')->user(); + + $existingGoogleUser = User::where('google_id', $socialUser->id)->first(); + + if ($existingGoogleUser) { + Auth::login($existingGoogleUser); + } else { + $existingEmailUser = User::where('email', $socialUser->email)->first(); + + if ($existingEmailUser) { + $existingEmailUser->google_id = $socialUser->id; + $existingEmailUser->save(); + + Auth::login($existingEmailUser); + } else { + $username = $socialUser->nickname ?: strtolower(str_replace(' ', '', $socialUser->name)) . rand(100, 999); + + $newUser = User::create([ + 'username' => $username, + 'name' => $socialUser->name, + 'email' => $socialUser->email, + 'google_id' => $socialUser->id, + 'password' => Hash::make(Str::random(16)), + ]); + + event(new Registered($newUser)); + + $newUser->assignRole('mahasiswa'); + + Auth::login($newUser); + } + } + + return redirect('dashboard'); + } catch (Exception $e) { + Log::error('Google Login Error', ['message' => $e->getMessage()]); + + return redirect()->route('login')->with([ + 'error' => 'Login with Google failed. Please refresh and try again.', + ]); + } + } +} \ No newline at end of file diff --git a/app/Http/Controllers/Auth/VerifyEmailController.php b/app/Http/Controllers/Auth/VerifyEmailController.php new file mode 100644 index 0000000..3a6f6a8 --- /dev/null +++ b/app/Http/Controllers/Auth/VerifyEmailController.php @@ -0,0 +1,27 @@ +user()->hasVerifiedEmail()) { + return redirect()->intended(route('dashboard.index', absolute: false).'?verified=1'); + } + + if ($request->user()->markEmailAsVerified()) { + event(new Verified($request->user())); + } + + return redirect()->intended(route('dashboard.index', absolute: false).'?verified=1'); + } +} \ No newline at end of file diff --git a/app/Http/Controllers/Controller.php b/app/Http/Controllers/Controller.php new file mode 100644 index 0000000..8677cd5 --- /dev/null +++ b/app/Http/Controllers/Controller.php @@ -0,0 +1,8 @@ +first() + ->users() + ->count(); + $data['jumlah_pengajuan'] = Submissions::count(); + + return view('pages.dashboard.index', $data); + } + + /** + * Show the form for creating a new resource. + */ + public function create() + { + // + } + + /** + * Store a newly created resource in storage. + */ + public function store(Request $request) + { + // + } + + /** + * Display the specified resource. + */ + public function show(string $id) + { + // + } + + /** + * Show the form for editing the specified resource. + */ + public function edit(string $id) + { + // + } + + /** + * Update the specified resource in storage. + */ + public function update(Request $request, string $id) + { + // + } + + /** + * Remove the specified resource from storage. + */ + public function destroy(string $id) + { + // + } +} \ No newline at end of file diff --git a/app/Http/Controllers/KriteriaController.php b/app/Http/Controllers/KriteriaController.php new file mode 100644 index 0000000..92afe83 --- /dev/null +++ b/app/Http/Controllers/KriteriaController.php @@ -0,0 +1,105 @@ +validated(); + + Kriteria::create($validated); + + return redirect()->route('kriteria.index')->with('success', 'Data Berhasil Ditambah'); + } catch (\Exception $e) { + Log::error($e->getMessage()); + return back()->with(['error' => 'Gagal Menambahkan Data: ' . $e->getMessage()]); + } + } + + /** + * Display the specified resource. + */ + public function show(string $id) + { + $data['kriteria'] = Kriteria::find($id); + $data['aspek'] = Aspek::all(); + $data['subkriteria'] = Subkriteria::with('kriteria')->where('id_kriteria', $id)->get(); + + return view('pages.kriteria.show', $data); + } + + /** + * Show the form for editing the specified resource. + */ + public function edit(string $id) + { + $data['kriteria'] = Kriteria::find($id); + $data['aspek'] = Aspek::all(); + $data['subkriteria'] = Subkriteria::with('kriteria')->where('id_kriteria', $id)->get(); + + return view('pages.kriteria.edit', $data); + } + + /** + * Update the specified resource in storage. + */ + public function update(KriteriaRequest $request, string $id) + { + try { + $validated = $request->validated(); + + Kriteria::find($id)->update($validated); + + return redirect()->route('kriteria.index')->with('success', 'Data Berhasil Diperbarui'); + } catch (\Exception $e) { + Log::error($e->getMessage()); + + return back()->with(['error' => 'Gagal Mengubah Data: ' . $e->getMessage()]); + } + } + + /** + * Remove the specified resource from storage. + */ + public function destroy(string $id) + { + try { + Kriteria::find($id)->delete(); + return redirect()->route('kriteria.index')->with('success', 'Data Berhasil Dihapus'); + } catch (\Exception $e) { + Log::error($e->getMessage()); + return back()->with(['error' => 'Gagal Menghapus Data: ' . $e->getMessage()]); + } + } +} \ No newline at end of file diff --git a/app/Http/Controllers/MahasiswaController.php b/app/Http/Controllers/MahasiswaController.php new file mode 100644 index 0000000..60c6758 --- /dev/null +++ b/app/Http/Controllers/MahasiswaController.php @@ -0,0 +1,67 @@ +get(); + + return view('pages.mahasiswa.index', $data); + } + + /** + * Show the form for creating a new resource. + */ + public function create() + { + // + } + + /** + * Store a newly created resource in storage. + */ + public function store(Request $request) + { + // + } + + /** + * Display the specified resource. + */ + public function show(string $id) + { + // + } + + /** + * Show the form for editing the specified resource. + */ + public function edit(string $id) + { + // + } + + /** + * Update the specified resource in storage. + */ + public function update(Request $request, string $id) + { + // + } + + /** + * Remove the specified resource from storage. + */ + public function destroy(string $id) + { + // + } +} \ No newline at end of file diff --git a/app/Http/Controllers/ProfileController.php b/app/Http/Controllers/ProfileController.php new file mode 100644 index 0000000..ca8e0d0 --- /dev/null +++ b/app/Http/Controllers/ProfileController.php @@ -0,0 +1,62 @@ + $request->user(), + 'angkatan' => Angkatan::all(), + ]); + } + + /** + * Update the user's profile information. + */ + public function update(ProfileUpdateRequest $request): RedirectResponse + { + $request->user()->fill($request->validated()); + + if ($request->user()->isDirty('email')) { + $request->user()->email_verified_at = null; + } + + $request->user()->save(); + + return Redirect::route('profile.edit')->with('status', 'profile-updated'); + } + + /** + * Delete the user's account. + */ + public function destroy(Request $request): RedirectResponse + { + $request->validateWithBag('userDeletion', [ + 'password' => ['required', 'current_password'], + ]); + + $user = $request->user(); + + Auth::logout(); + + $user->delete(); + + $request->session()->invalidate(); + $request->session()->regenerateToken(); + + return Redirect::to('/'); + } +} diff --git a/app/Http/Controllers/ProfileMatchingController.php b/app/Http/Controllers/ProfileMatchingController.php new file mode 100644 index 0000000..4f6bcfe --- /dev/null +++ b/app/Http/Controllers/ProfileMatchingController.php @@ -0,0 +1,287 @@ +all()); + $subkriteria1 = ProfileMethod::where('id_kriteria', 1) + ->pluck('id_subkriteria') + ->toArray(); + + // $subkriteria2 = ProfileMethod::where('id_kriteria', 2) + // ->pluck('id_subkriteria') + // ->toArray(); + + $countSubkriteria1 = array_count_values($subkriteria1); + // $countSubkriteria2 = array_count_values($subkriteria2); + + $mostKriteria1 = array_search(max($countSubkriteria1), $countSubkriteria1); + // $mostKriteria2 = array_search(max($countSubkriteria2), $countSubkriteria2); + + try { + $validated = $request->validated(); + + $selectKriteria = $request->input('kriteria', []); + $selectedAlternatif = $request->input('alternatif', []); + + $selectKriteria = array_merge([$mostKriteria1, 7], $selectKriteria); + $selectedKriteria = $selectKriteria; + + $selectedKriteria = array_map(function ($item) { + return (string) $item; + }, $selectedKriteria); + + if (empty($selectedKriteria) || empty($selectedAlternatif)) { + return back()->withErrors('Kriteria dan alternatif harus dipilih.')->withInput(); + } + + Log::info('Selected Kriteria:', ['data' => $selectedKriteria]); + Log::info('Selected Alternatif:', ['data' => $selectedAlternatif]); + + $data['selectedKriteria'] = $selectedKriteria; + $data['resultsGAP'] = $this->gapProfil($selectedAlternatif, $selectedKriteria); + $data['normalizedGAP'] = $this->normalizeGAP($data['resultsGAP']); + $data['factorValue'] = $this->factorValue($data['normalizedGAP']); + $data['totalValue'] = $this->totalValue($data['factorValue']); + $data['ranking'] = $this->rankAlternatif($data['totalValue']); + + $data['data_aspek'] = Aspek::all(); + $data['data_kriteria'] = Kriteria::all(); + + if (empty($data['resultsGAP']) || empty($data['ranking'])) { + return back()->withErrors('Terjadi kesalahan saat memproses data.')->withInput(); + } + + return view('profile-matching.result', $data); + + } catch (\Exception $e) { + Log::error('Error in Profile Matching:', ['message' => $e->getMessage()]); + + return response()->json(['error' => 'Terjadi kesalahan saat memproses data: ' . $e->getMessage()], 500); + } + } + + private function gapProfil($alternatif, $kriteria) + { + $resultsGAP = []; + $gapValues = []; + + $dosenProfile = ProfileMethod::with('kriteria', 'subkriteria')->whereIn('id_alternatif', $alternatif)->get(); + + foreach ($dosenProfile as $dosen) { + + $totalKeahlianUtama = ProfileMethod::with('kriteria') + ->where('id_alternatif', $dosen->id_alternatif) + ->whereHas('kriteria', function ($query) { + $query->where('kriteria_name', 'Keahlian Utama'); + })->count(); + + foreach ($kriteria as $subkriteriaId) { + $idealValue = Subkriteria::with('kriteria')->find($subkriteriaId); + $idealKriteria = $idealValue->kriteria; + + if ($dosen->kriteria->id_kriteria == $idealKriteria->id_kriteria) { + $dosenNilai = optional($dosen->subkriteria->nilai)->value; + $idealNilai = optional($idealValue->nilai)->value; + + $gap = $dosenNilai - $idealNilai; + + if ($idealKriteria->kriteria_name === 'Keahlian Utama') { + if ($totalKeahlianUtama > 1) { + if (abs($gap) <= 1) { + $gapValues[$idealKriteria->id_kriteria] = $gap; + } + } else { + $gapValues[$idealKriteria->id_kriteria] = $gap; + } + } else { + $gapValues[$idealKriteria->id_kriteria] = $gap; + } + } + } + + if (!empty($gapValues)) { + ksort($gapValues); + $resultsGAP[$dosen->id_alternatif] = $gapValues; + } + } + Log::info('Ideal Value:', ['data' => $idealValue]); + Log::info('GAP Values:', $resultsGAP); + + return $resultsGAP; + } + + private function normalizeGAP($resultsGAP) + { + $normalizedGAP = []; + $normalizedValues = []; + $conversionTable = [ + 0 => 5, + 1 => 4.5, + -1 => 4, + 2 => 3.5, + -2 => 3, + 3 => 2.5, + -3 => 2, + 4 => 1.5, + -4 => 1 + ]; + + foreach ($resultsGAP as $dosenId => $gapValues) { + + foreach ($gapValues as $key => $gap) { + $normalizedValues[$key] = $conversionTable[$gap] ?? 1; + } + + $normalizedGAP[$dosenId] = $normalizedValues; + } + + Log::info('Pemetaan GAP:', $normalizedGAP); + + return $normalizedGAP; + } + + private function factorValue($normalizedGAP) { + $resultsFactor = []; + + foreach ($normalizedGAP as $dosenId => $gapValues) { + $dataAspek = Aspek::all(); + $aspek = []; + + foreach ($dataAspek as $aspekValue) { + $aspekId = $aspekValue->id_aspek; + + $coreValues = 0; + $secondaryValues = 0; + $coreCount = 0; + $secondaryCount = 0; + $factorValue = []; + + foreach ($gapValues as $kriteria => $values) { + $factor = Kriteria::find($kriteria); + + if ($factor->tipe == 'Core Factor') { + if ($aspekId == $factor->id_aspek) { + $coreValues += $values; + $coreCount++; + } + } else { + if ($aspekId == $factor->id_aspek) { + $secondaryValues += $values; + $secondaryCount++; + } + } + } + + if ($coreCount > 0) { + $factorValue['NCF'] = $coreValues / $coreCount; + } + if ($secondaryCount > 0) { + $factorValue['NSF'] = $secondaryValues / $secondaryCount; + } + + $aspek[$aspekId] = $factorValue; + } + $resultsFactor[$dosenId] = $aspek; + } + + Log::info('NCSF:', $resultsFactor); + + return $resultsFactor; + } + + private function totalValue($factorValue) + { + $totalValues = []; + $aspek = []; + $totalValueFactor = []; + $bobotCF = 60; + $bobotSF = 40; + + foreach ($factorValue as $dosenId => $value) { + foreach ($value as $aspekId => $values) { + $value = []; + + foreach ($values as $tipeValue => $valueFactor) { + if ($tipeValue == 'NCF') { + $value[] = $valueFactor * $bobotCF / 100; + } else { + $value[] = $valueFactor * $bobotSF / 100; + } + } + $totalValueFactor = array_sum($value); + $aspek[$aspekId] = $totalValueFactor; + } + $totalValues[$dosenId] = $aspek; + } + + Log::info('Nilai Total:', $totalValues); + + return $totalValues; + } + + private function rankAlternatif($totalValues) + { + $rankedResults = []; + + foreach ($totalValues as $dosenId => $totalValue) { + $ha = 0; + + foreach ($totalValue as $aspekId => $value) { + $bobotAspek = Aspek::where('id_aspek', $aspekId)->pluck('persentase')->first(); + if ($bobotAspek) { + $ha += $value * ($bobotAspek / 100); + } + } + $alternatif = Alternatif::where('id_alternatif', $dosenId)->first(); + + $rankedResults[] = [ + 'dosenId' => $alternatif->id_alternatif, + 'dosenName' => $alternatif->name, + 'hasilAkhir' => $ha, + ]; + } + + usort($rankedResults, function ($a, $b) { + return $b['hasilAkhir'] <=> $a['hasilAkhir']; + }); + + foreach ($rankedResults as $index => &$result) { + $result['rank'] = $index + 1; + } + + Log::info('Ranking:', $rankedResults); + + return $rankedResults; + } + + public function submit(SubmissionRequest $request) + { + try { + $validated = $request->validated(); + + Submissions::create($validated); + + return redirect()->route('results.data')->with('success', 'Pengajuan Judul Berhasil'); + // return view('profile-matching.result'); + } catch (\Exception $e) { + Log::error($e->getMessage()); + return back()->with(['error' => 'Pengajuan Judul Gagal: ' . $e->getMessage()]); + } + } + +} diff --git a/app/Http/Controllers/ProfileMethodController.php b/app/Http/Controllers/ProfileMethodController.php new file mode 100644 index 0000000..9c5fa08 --- /dev/null +++ b/app/Http/Controllers/ProfileMethodController.php @@ -0,0 +1,167 @@ +get(); + + return view('pages.profile-method.index', $data); + } + + /** + * Show the form for creating a new resource. + */ + public function create() + { + $data['alternatif'] = Alternatif::with('profile_method')->whereDoesntHave('profile_method')->get(); + $data['kriteria'] = Kriteria::all(); + $data['subkriteria'] = Subkriteria::all(); + + return view('pages.profile-method.create', $data); + } + + /** + * Store a newly created resource in storage. + */ + public function store(ProfileMethodRequest $request) + { + try { + foreach ($request->kriteria as $id_kriteria => $id_subkriteria) { + if (is_array($id_subkriteria)) { + foreach ($id_subkriteria as $subId) { + if ($subId) { + ProfileMethod::updateOrCreate( + [ + 'id_alternatif' => $request->id_alternatif, + 'id_kriteria' => $id_kriteria, + 'id_subkriteria' => $subId, + ], + [] + ); + } + } + } else { + if ($id_subkriteria) { + ProfileMethod::updateOrCreate( + [ + 'id_alternatif' => $request->id_alternatif, + 'id_kriteria' => $id_kriteria, + ], + [ + 'id_subkriteria' => $id_subkriteria, + ] + ); + } + } + } + + return redirect()->route('method-profile.index')->with('success', 'Data Berhasil Ditambah'); + } catch (\Exception $e) { + Log::error($e->getMessage()); + return back()->with(['error' => 'Gagal Menambahkan Data: ' . $e->getMessage()]); + } + } + + /** + * Display the specified resource. + */ + public function show(string $id) + { + // + } + + /** + * Show the form for editing the specified resource. + */ + public function edit(string $id) + { + $data['profile_method'] = ProfileMethod::with('alternatif', 'kriteria', 'subkriteria') + ->where('id_alternatif', $id) + ->get(); + $data['alternatif'] = Alternatif::findOrFail($id); + $data['kriteria'] = Kriteria::all(); + + return view('pages.profile-method.edit', $data); + } + + /** + * Update the specified resource in storage. + */ + public function update(ProfileMethodRequest $request, string $id) + { + try { + foreach ($request->kriteria as $id_kriteria => $id_subkriteria) { + if (is_array($id_subkriteria)) { + // Hapus semua yang tidak termasuk dalam pilihan baru + ProfileMethod::where('id_alternatif', $request->id_alternatif) + ->where('id_kriteria', $id_kriteria) + ->whereNotIn('id_subkriteria', $id_subkriteria) + ->delete(); + + foreach ($id_subkriteria as $subId) { + if ($subId) { + ProfileMethod::updateOrCreate( + [ + 'id_alternatif' => $request->id_alternatif, + 'id_kriteria' => $id_kriteria, + 'id_subkriteria' => $subId, + ], + [] + ); + } + } + } else { + if ($id_subkriteria) { + // Update untuk kriteria dengan 1 nilai saja + ProfileMethod::updateOrCreate( + [ + 'id_alternatif' => $request->id_alternatif, + 'id_kriteria' => $id_kriteria, + ], + [ + 'id_subkriteria' => $id_subkriteria, + ] + ); + } + } + } + + return redirect()->route('method-profile.index')->with('success', 'Data Berhasil Diperbarui'); + } catch (\Exception $e) { + Log::error($e->getMessage()); + return back()->with(['error' => 'Gagal Memperbarui Data: ' . $e->getMessage()]); + } + } + + /** + * Remove the specified resource from storage. + */ + public function destroy(string $id) + { + try { + $profile_method = ProfileMethod::where('id_alternatif', $id); + + $profile_method->delete(); + + return redirect()->route('method-profile.index')->with('success', 'Data Berhasil Dihapus'); + } catch (\Exception $e) { + Log::error($e->getMessage()); + return back()->with(['error' => 'Gagal Menghapus Data: ' . $e->getMessage()]); + } + } +} diff --git a/app/Http/Controllers/SubkriteriaController.php b/app/Http/Controllers/SubkriteriaController.php new file mode 100644 index 0000000..c7a63f5 --- /dev/null +++ b/app/Http/Controllers/SubkriteriaController.php @@ -0,0 +1,114 @@ +id_kriteria)->count(); + + if ($count >= 5) { + return redirect()->route('kriteria.edit', $kriteria)->withErrors(['Kriteria ' . $kriteria->kriteria_name .' sudah memiliki subkriteria maksimal 5']); + } + + $data['kriteria'] = $kriteria; + $data['nilai'] = Nilai::all(); + + return view('pages.subkriteria.create', $data); + } + + /** + * Store a newly created resource in storage. + */ + public function store(SubkriteriaRequest $request, $kriteria) + { + try { + $validated = $request->validated(); + + Subkriteria::create($validated); + + return redirect()->route('kriteria.edit', $kriteria)->with('success', 'Data Berhasil Ditambah'); + } catch (\Exception $e) { + Log::error($e->getMessage()); + return back()->with(['error' => 'Gagal Menambahkan Data: ' . $e->getMessage()]); + } + } + + /** + * Display the specified resource. + */ + public function show(Kriteria $kriteria, Subkriteria $subkriteria) + { + $data['subkriteria'] = $subkriteria; + $data['kriteria'] = $kriteria; + $data['nilai'] = Nilai::all(); + + return view('pages.subkriteria.show', $data); + } + + /** + * Show the form for editing the specified resource. + */ + public function edit(Kriteria $kriteria, Subkriteria $subkriteria) + { + $data['subkriteria'] = $subkriteria; + $data['kriteria'] = $kriteria; + $data['nilai'] = Nilai::all(); + + return view('pages.subkriteria.edit', $data); + } + + /** + * Update the specified resource in storage. + */ + public function update(SubkriteriaRequest $request, $kriteria, $subkriteria) + { + try { + $validated = $request->validated(); + + Subkriteria::find($subkriteria)->update($validated); + + return redirect()->route('kriteria.edit', $kriteria)->with('success', 'Data Berhasil Diperbarui'); + } catch (\Exception $e) { + Log::error($e->getMessage()); + + return back()->with(['error' => 'Gagal Mengubah Data: ' . $e->getMessage()]); + } + } + + /** + * Remove the specified resource from storage. + */ + public function destroy($kriteria, $subkriteria) + { + try { + Subkriteria::find($subkriteria)->delete(); + + return redirect()->route('kriteria.edit', $kriteria)->with('success', 'Data Berhasil Dihapus'); + } catch (\Exception $e) { + Log::error($e->getMessage()); + return back()->with(['error' => 'Gagal Menghapus Data: ' . $e->getMessage()]); + } + } +} diff --git a/app/Http/Controllers/SubmissionsController.php b/app/Http/Controllers/SubmissionsController.php new file mode 100644 index 0000000..7fc96cc --- /dev/null +++ b/app/Http/Controllers/SubmissionsController.php @@ -0,0 +1,127 @@ +get(); + $data['submission_detail'] = SubmissionDetail::with('alternatif')->get(); + $data['profile'] = ProfileMethod::with(['alternatif', 'kriteria', 'subkriteria'])->get(); + $data['kriteria'] = Kriteria::with('subkriteria')->get(); + $data['izin'] = IzinPemilihan::first(); + + return view('pages.submissions.index', $data); + } + + /** + * Show the form for creating a new resource. + */ + public function create() + { + $data['alternatif'] = Alternatif::all(); + $data['izin'] = IzinPemilihan::first(); + + if (Auth::check()) { + $user = Auth::user(); + + if ($user->hasRole(User::ROLE_MAHASISWA)) { + if (empty($user->nim) || empty($user->id_angkatan)) { + Log::error('Submission gagal: Profil tidak lengkap', [ + 'id' => $user->id, + 'nim' => $user->nim, + 'id_angkatan' => $user->id_angkatan, + ]); + + return redirect()->route('profile.edit')->withErrors(['error' => 'Gagal mengakses pengajuan: Silahkan lengkapi profil anda!']); + } + } + } + + return view('pages.submissions.create', $data); + } + + /** + * Store a newly created resource in storage. + */ + public function store(SubmissionRequest $request) + { + DB::beginTransaction(); + + try { + $validatedSubmission = $request->validated(); + + $submission = Submissions::create([ + 'id' => $validatedSubmission['id'], + 'judul' => $validatedSubmission['judul'], + 'deskripsi' => $validatedSubmission['deskripsi'], + 'prodi' => $validatedSubmission['prodi'], + ]); + + SubmissionDetail::create([ + 'id_submission' => $submission->id_submission, + 'id_alternatif' => $validatedSubmission['id_alternatif'], + ]); + + DB::commit(); + + return redirect()->route('submissions.create')->with('success', 'Pengajuan Berhasil'); + } catch (\Exception $e) { + DB::rollBack(); + Log::error($e->getMessage()); + + return back()->withErrors(['error' => 'Pengajuan Gagal: Terjadi kesalahan!']); + } + } + + + /** + * Display the specified resource. + */ + public function show(string $id) + { + // + } + + /** + * Show the form for editing the specified resource. + */ + public function edit(string $id) + { + // + } + + /** + * Update the specified resource in storage. + */ + public function update(Request $request, string $id) + { + // + } + + /** + * Remove the specified resource from storage. + */ + public function destroy(string $id) + { + // + } +} diff --git a/app/Http/Controllers/SystemController.php b/app/Http/Controllers/SystemController.php new file mode 100644 index 0000000..e611c83 --- /dev/null +++ b/app/Http/Controllers/SystemController.php @@ -0,0 +1,85 @@ +validate([ + 'izin' => 'required|in:on,off' + ]); + + $izin = IzinPemilihan::first(); + $izin->izin = $request->izin; + $izin->save(); + + return response()->json([ + 'status' => 'success', + 'message' => 'Izin berhasil diperbarui!', + 'izin' => $izin->izin + ], 200); + } + + /** + * Remove the specified resource from storage. + */ + public function destroy(string $id) + { + // + } +} \ No newline at end of file diff --git a/app/Http/Requests/Alternatif/AlternatifRequest.php b/app/Http/Requests/Alternatif/AlternatifRequest.php new file mode 100644 index 0000000..a22da72 --- /dev/null +++ b/app/Http/Requests/Alternatif/AlternatifRequest.php @@ -0,0 +1,46 @@ +|string> + */ + public function rules(): array + { + return [ + 'nip' => ['required', 'string', 'max:225'], + 'name' => ['required', 'string', 'max:255'], + ]; + } + + /** + * Get the custom error messages for validation errors. + * + * @return array + */ + public function messages(): array + { + return [ + 'nip.required' => 'NIP harus diisi.', + 'nip.string' => 'NIP harus berupa teks.', + 'nip.max' => 'NIP tidak boleh lebih dari 255 karakter.', + 'name.required' => 'Nama Kriteria harus diisi.', + 'name.string' => 'Nama Kriteria harus berupa teks.', + 'name.max' => 'Nama Kriteria tidak boleh lebih dari 255 karakter.', + ]; + } +} \ No newline at end of file diff --git a/app/Http/Requests/Aspek/AspekCreateRequest.php b/app/Http/Requests/Aspek/AspekCreateRequest.php new file mode 100644 index 0000000..480f9aa --- /dev/null +++ b/app/Http/Requests/Aspek/AspekCreateRequest.php @@ -0,0 +1,47 @@ +|string> + */ + public function rules(): array + { + return [ + 'aspek_name' => ['required', 'string', 'max:225'], + 'persentase' => ['required', 'string', 'min:0', 'max:100'], + 'keterangan' => ['nullable', 'string', 'max:500'], + ]; + } + + public function messages(): array + { + return [ + 'aspek_name.required' => 'Nama aspek wajib diisi.', + 'aspek_name.string' => 'Nama aspek harus berupa teks.', + 'aspek_name.max' => 'Nama aspek maksimal 225 karakter.', + + 'persentase.required' => 'Persentase wajib diisi.', + 'persentase.numeric' => 'Persentase harus berupa angka.', + 'persentase.min' => 'Persentase tidak boleh kurang dari 0.', + 'persentase.max' => 'Persentase tidak boleh lebih dari 100.', + + 'keterangan.string' => 'Keterangan harus berupa teks.', + 'keterangan.max' => 'Keterangan maksimal 500 karakter.', + ]; + } +} \ No newline at end of file diff --git a/app/Http/Requests/Auth/LoginRequest.php b/app/Http/Requests/Auth/LoginRequest.php new file mode 100644 index 0000000..2574642 --- /dev/null +++ b/app/Http/Requests/Auth/LoginRequest.php @@ -0,0 +1,85 @@ +|string> + */ + public function rules(): array + { + return [ + 'email' => ['required', 'string', 'email'], + 'password' => ['required', 'string'], + ]; + } + + /** + * Attempt to authenticate the request's credentials. + * + * @throws \Illuminate\Validation\ValidationException + */ + public function authenticate(): void + { + $this->ensureIsNotRateLimited(); + + if (! Auth::attempt($this->only('email', 'password'), $this->boolean('remember'))) { + RateLimiter::hit($this->throttleKey()); + + throw ValidationException::withMessages([ + 'email' => trans('auth.failed'), + ]); + } + + RateLimiter::clear($this->throttleKey()); + } + + /** + * Ensure the login request is not rate limited. + * + * @throws \Illuminate\Validation\ValidationException + */ + public function ensureIsNotRateLimited(): void + { + if (! RateLimiter::tooManyAttempts($this->throttleKey(), 5)) { + return; + } + + event(new Lockout($this)); + + $seconds = RateLimiter::availableIn($this->throttleKey()); + + throw ValidationException::withMessages([ + 'email' => trans('auth.throttle', [ + 'seconds' => $seconds, + 'minutes' => ceil($seconds / 60), + ]), + ]); + } + + /** + * Get the rate limiting throttle key for the request. + */ + public function throttleKey(): string + { + return Str::transliterate(Str::lower($this->string('email')).'|'.$this->ip()); + } +} diff --git a/app/Http/Requests/Kriteria/KriteriaRequest.php b/app/Http/Requests/Kriteria/KriteriaRequest.php new file mode 100644 index 0000000..fef6578 --- /dev/null +++ b/app/Http/Requests/Kriteria/KriteriaRequest.php @@ -0,0 +1,53 @@ +|string> + */ + public function rules(): array + { + return [ + 'kriteria_name' => ['required', 'string', 'max:255'], + 'tipe' => ['required', 'string', 'in:Core Factor,Secondary Factor'], + 'id_aspek' => ['required'], + 'keterangan' => ['nullable', 'string', 'max:500'], + ]; + } + + /** + * Get the custom error messages for validation errors. + * + * @return array + */ + public function messages(): array + { + return [ + 'kriteria_name.required' => 'Nama Kriteria harus diisi.', + 'kriteria_name.string' => 'Nama Kriteria harus berupa teks.', + 'kriteria_name.max' => 'Nama Kriteria tidak boleh lebih dari 255 karakter.', + 'id_aspek.required' => 'Aspek harus dipilih.', + 'tipe.required' => 'Tipe harus diisi.', + 'tipe.string' => 'Tipe harus berupa teks.', + 'tipe.in' => 'Tipe harus salah satu dari Core Factor atau Secondary Factor.', + 'keterangan.string' => 'Keterangan harus berupa teks.', + 'keterangan.max' => 'Keterangan tidak boleh lebih dari 500 karakter.', + ]; + } +} \ No newline at end of file diff --git a/app/Http/Requests/ProfileMatching/ProfileMatchingRequest.php b/app/Http/Requests/ProfileMatching/ProfileMatchingRequest.php new file mode 100644 index 0000000..6817994 --- /dev/null +++ b/app/Http/Requests/ProfileMatching/ProfileMatchingRequest.php @@ -0,0 +1,67 @@ +|string> + */ + public function rules(): array + { + // $rules = [ + // 'judul' => ['required', 'max:255'], + // 'deskripsi' => ['required', 'max:255'], + // ]; + + $rules['kriteria'] = ['required', 'array']; + foreach (range(0, 3) as $index) { + $rules["kriteria.$index"] = ['required', 'exists:subkriteria,id_subkriteria']; + } + + $rules['alternatif'] = ['required', 'array', 'min:1', 'max:3']; + foreach (range(0, 2) as $index) { + $rules["alternatif.$index"] = ['nullable', 'exists:alternatif,id_alternatif']; + } + + return $rules; + } + + /** + * Get the custom error messages for validation errors. + * + * @return array + */ + public function messages(): array + { + $messages = [ + 'judul.required' => 'Judul harus diisi.', + 'judul.max' => 'Judul tidak boleh lebih dari 255 karakter.', + 'deskripsi.required' => 'Deskripsi harus diisi.', + + 'kriteria.required' => 'Semua kriteria harus diisi.', + 'kriteria.array' => 'Format kriteria tidak valid.', + 'kriteria.*.exists' => 'Kriteria yang dipilih tidak valid.', + + 'alternatif.required' => 'Setidaknya satu alternatif harus dipilih.', + 'alternatif.array' => 'Format alternatif tidak valid.', + 'alternatif.min' => 'Setidaknya satu alternatif harus dipilih.', + 'alternatif.max' => 'Tidak boleh lebih dari tiga alternatif.', + 'alternatif.*.exists' => 'Alternatif yang dipilih tidak valid.', + ]; + + return $messages; + } +} diff --git a/app/Http/Requests/ProfileMethod/ProfileMethodRequest.php b/app/Http/Requests/ProfileMethod/ProfileMethodRequest.php new file mode 100644 index 0000000..629b88d --- /dev/null +++ b/app/Http/Requests/ProfileMethod/ProfileMethodRequest.php @@ -0,0 +1,43 @@ +|string> + */ + public function rules(): array + { + return [ + 'id_alternatif' => 'required|exists:alternatif,id_alternatif', + 'kriteria' => 'required|array', + 'kriteria.*' => 'required|exists:subkriteria,id_subkriteria', + ]; + } + + /** + * Pesan error khusus untuk validasi. + */ + public function messages(): array + { + return [ + 'id_alternatif.required' => 'Nama alternatif wajib diisi.', + 'id_alternatif.exists' => 'Alternatif yang dipilih tidak valid.', + 'kriteria.required' => 'Nilai kriteria harus diisi.', + 'kriteria.*.exists' => 'Subkriteria yang dipilih tidak valid.', + ]; + } +} diff --git a/app/Http/Requests/ProfileUpdateRequest.php b/app/Http/Requests/ProfileUpdateRequest.php new file mode 100644 index 0000000..32dc4e0 --- /dev/null +++ b/app/Http/Requests/ProfileUpdateRequest.php @@ -0,0 +1,34 @@ +|string> + */ + public function rules(): array + { + return [ + 'nim' => ['required', 'string'], + 'name' => ['required', 'string', 'max:255'], + 'email' => [ + 'required', + 'string', + 'lowercase', + 'email', + 'max:255', + Rule::unique(User::class)->ignore($this->user()->id), + ], + 'id_angkatan' => [ + 'required' + ] + ]; + } +} \ No newline at end of file diff --git a/app/Http/Requests/Subkriteria/SubkriteriaRequest.php b/app/Http/Requests/Subkriteria/SubkriteriaRequest.php new file mode 100644 index 0000000..26a3c96 --- /dev/null +++ b/app/Http/Requests/Subkriteria/SubkriteriaRequest.php @@ -0,0 +1,30 @@ +|string> + */ + public function rules(): array + { + return [ + 'id_kriteria' => ['required'], + 'subkriteria_name' => ['required', 'string', 'max:255'], + // 'id_nilai' => ['required'], + ]; + } +} diff --git a/app/Http/Requests/Submission/SubmissionDetailRequest.php b/app/Http/Requests/Submission/SubmissionDetailRequest.php new file mode 100644 index 0000000..c6a502b --- /dev/null +++ b/app/Http/Requests/Submission/SubmissionDetailRequest.php @@ -0,0 +1,29 @@ +|string> + */ + public function rules(): array + { + return [ + 'id_submission' => ['required'], + 'id_alternatif' => ['required'], + ]; + } +} \ No newline at end of file diff --git a/app/Http/Requests/Submission/SubmissionRequest.php b/app/Http/Requests/Submission/SubmissionRequest.php new file mode 100644 index 0000000..8619b71 --- /dev/null +++ b/app/Http/Requests/Submission/SubmissionRequest.php @@ -0,0 +1,32 @@ +|string> + */ + public function rules(): array + { + return [ + 'id' => ['required'], + 'prodi' => ['required', 'string', 'max:255'], + 'judul' => ['required', 'string', 'max:255'], + 'deskripsi' => ['required', 'string', 'max:255'], + 'id_alternatif' => ['required'], + ]; + } +} \ No newline at end of file diff --git a/app/Http/Resources/AspekResource.php b/app/Http/Resources/AspekResource.php new file mode 100644 index 0000000..105c864 --- /dev/null +++ b/app/Http/Resources/AspekResource.php @@ -0,0 +1,28 @@ + + */ + public function toArray(Request $request): array + { + return [ + 'aspek' => $this->collection, + 'pagination' => [ + 'total' => $this->total(), + 'count' => $this->count(), + 'per_page' => $this->perPage(), + 'current_page' => $this->currentPage(), + 'total_pages' => $this->lastPage() + ] + ]; + } +} \ No newline at end of file diff --git a/app/Http/Resources/KriteriaResource.php b/app/Http/Resources/KriteriaResource.php new file mode 100644 index 0000000..1659c4d --- /dev/null +++ b/app/Http/Resources/KriteriaResource.php @@ -0,0 +1,28 @@ + + */ + public function toArray(Request $request): array + { + return [ + 'data' => $this->collection, + 'pagination' => [ + 'total' => $this->total(), + 'count' => $this->count(), + 'per_page' => $this->perPage(), + 'current_page' => $this->currentPage(), + 'total_pages' => $this->lastPage() + ] + ]; + } +} \ No newline at end of file diff --git a/app/Http/Resources/ProfileMethodResource.php b/app/Http/Resources/ProfileMethodResource.php new file mode 100644 index 0000000..c3e283f --- /dev/null +++ b/app/Http/Resources/ProfileMethodResource.php @@ -0,0 +1,28 @@ + + */ + public function toArray(Request $request): array + { + return [ + 'profile' => $this->collection, + 'pagination' => [ + 'total' => $this->total(), + 'count' => $this->count(), + 'per_page' => $this->perPage(), + 'current_page' => $this->currentPage(), + 'total_pages' => $this->lastPage() + ] + ]; + } +} \ No newline at end of file diff --git a/app/Jobs/ProcessSubmission.php b/app/Jobs/ProcessSubmission.php new file mode 100644 index 0000000..3f22c99 --- /dev/null +++ b/app/Jobs/ProcessSubmission.php @@ -0,0 +1,90 @@ +submissions = $submission; + } + + public function handle() + { + try { + Log::info("Menjalankan ProcessSubmission untuk submission: ", ['id_submission' => $this->submissions->id_submission]); + + $user = User::find($this->submissions->id); + + if (!$user || !$user->id_angkatan) { + Log::warning('Submission dibuat user tanpa data angkatan.', ['id_submission' => $this->submissions->id_submission]); + return; + } + + // Tunggu hingga SubmissionDetail tersedia + $maxRetries = 5; + $retryInterval = 2; // Coba setiap 2 detik + + for ($i = 0; $i < $maxRetries; $i++) { + $submissionDetails = SubmissionDetail::where('id_submission', $this->submissions->id_submission)->get(); + + if (!$submissionDetails->isEmpty()) { + break; + } + + Log::info("Menunggu SubmissionDetail dalam job untuk id_submission: " . $this->submissions->id_submission); + sleep($retryInterval); + } + + if ($submissionDetails->isEmpty()) { + Log::warning('SubmissionDetail masih tidak ditemukan setelah menunggu di job.', ['id_submission' => $this->submissions->id_submission]); + return; + } + + $id_angkatan = $user->id_angkatan; + + $alternatifCounts = SubmissionDetail::join('submission', 'submission.id_submission', '=', 'submission_detail.id_submission') + ->join('users', 'users.id', '=', 'submission.id_user') + ->where('users.angkatan', $id_angkatan) + ->selectRaw('id_alternatif, COUNT(*) as total_permintaan') + ->groupBy('id_alternatif') + ->pluck('total_permintaan', 'id_alternatif'); + + foreach ($submissionDetails as $detail) { + $id_alternatif = $detail->id_alternatif; + $total_permintaan = $alternatifCounts[$id_alternatif] ?? 0; + + $kuotaMax = ProfileMethod::where('id_alternatif', $id_alternatif)->value('id_nilai') ?? 0; + + $rasio = ($total_permintaan > 0 && $kuotaMax > 0) ? ($total_permintaan / $kuotaMax) * 100 : 0; + + Log::info('Perhitungan kuota untuk alternatif', [ + 'id_alternatif' => $id_alternatif, + 'total_permintaan' => $total_permintaan, + 'kuota_maksimum' => $kuotaMax, + 'rasio_kuota' => $rasio . '%' + ]); + } + + } catch (\Exception $e) { + Log::error('Terjadi kesalahan saat menghitung kuota dalam job:', [ + 'id_submission' => $this->submissions->id_submission, + 'error' => $e->getMessage() + ]); + } + } + +} diff --git a/app/Models/Alternatif.php b/app/Models/Alternatif.php new file mode 100644 index 0000000..2134cf8 --- /dev/null +++ b/app/Models/Alternatif.php @@ -0,0 +1,51 @@ +nip)) { + $model->nip = self::formatNip($model->nip); + } + }); + } + + public static function formatNip($nip) + { + $nip = preg_replace('/\s+/', '', $nip); + + return substr($nip, 0, 8) . ' ' . + substr($nip, 8, 6) . ' ' . + substr($nip, 14, 1) . ' ' . + substr($nip, 15); + } + + public function profile_method() + { + return $this->hasMany(ProfileMethod::class, 'id_alternatif'); + } + + public function submission_detail() + { + return $this->hasMany(SubmissionDetail::class, 'id_alternatif'); + } +} \ No newline at end of file diff --git a/app/Models/Angkatan.php b/app/Models/Angkatan.php new file mode 100644 index 0000000..0b96887 --- /dev/null +++ b/app/Models/Angkatan.php @@ -0,0 +1,22 @@ +hasMany(User::class, 'id_angkatan'); + } +} \ No newline at end of file diff --git a/app/Models/Aspek.php b/app/Models/Aspek.php new file mode 100644 index 0000000..dcb532a --- /dev/null +++ b/app/Models/Aspek.php @@ -0,0 +1,37 @@ +first(); + $lastNumber = $latestAspek ? intval(substr($latestAspek->kode_aspek, 1)) : 0; + $newNumber = $lastNumber + 1; + + $aspek->kode_aspek = 'A' . str_pad($newNumber, 3, '0', STR_PAD_LEFT); + }); + } + + public function kriteria() + { + return $this->hasMany(Kriteria::class, 'id_aspek'); + } +} \ No newline at end of file diff --git a/app/Models/IzinPemilihan.php b/app/Models/IzinPemilihan.php new file mode 100644 index 0000000..061ab3c --- /dev/null +++ b/app/Models/IzinPemilihan.php @@ -0,0 +1,16 @@ +first(); + $lastNumber = $latestKriteria ? intval(substr($latestKriteria->kode_kriteria, 1)) : 0; + $newNumber = $lastNumber + 1; + + $kriteria->kode_kriteria = 'K' . str_pad($newNumber, 3, '0', STR_PAD_LEFT); + }); + } + + public static function getTipeOptions() + { + return [ + self::TIPE_CORE => 'Core Factor', + self::TIPE_SECONDARY => 'Secondary Factor', + ]; + } + + public function aspek() + { + return $this->belongsTo(Aspek::class, 'id_aspek'); + } + + public function subkriteria() + { + return $this->hasMany(Subkriteria::class, 'id_kriteria'); + } + + public function profile_method() + { + return $this->hasMany(ProfileMethod::class, 'id_kriteria'); + } +} \ No newline at end of file diff --git a/app/Models/Nilai.php b/app/Models/Nilai.php new file mode 100644 index 0000000..ce4b867 --- /dev/null +++ b/app/Models/Nilai.php @@ -0,0 +1,21 @@ +hasMany(Subkriteria::class, 'id_nilai'); + } +} \ No newline at end of file diff --git a/app/Models/ProfileMethod.php b/app/Models/ProfileMethod.php new file mode 100644 index 0000000..6730500 --- /dev/null +++ b/app/Models/ProfileMethod.php @@ -0,0 +1,33 @@ +belongsTo(Alternatif::class, 'id_alternatif'); + } + + public function kriteria() + { + return $this->belongsTo(Kriteria::class, 'id_kriteria'); + } + + public function subkriteria() + { + return $this->belongsTo(Subkriteria::class, 'id_subkriteria'); + } +} \ No newline at end of file diff --git a/app/Models/Setting.php b/app/Models/Setting.php new file mode 100644 index 0000000..f1124ee --- /dev/null +++ b/app/Models/Setting.php @@ -0,0 +1,56 @@ +where('key', $key); + } + + public function scopeLocale($query, $lang) + { + return $query->whereLocale($lang); + } + + public function getJsonValueAttribute($value) + { + return json_decode($value); + } + + public function getAdditionalJsonValueAttribute($value) + { + return json_decode($value); + } +} \ No newline at end of file diff --git a/app/Models/Subkriteria.php b/app/Models/Subkriteria.php new file mode 100644 index 0000000..d7d9d31 --- /dev/null +++ b/app/Models/Subkriteria.php @@ -0,0 +1,34 @@ +belongsTo(Kriteria::class, 'id_kriteria'); + } + + public function nilai() + { + return $this->belongsTo(nilai::class, 'id_nilai'); + } + + public function profile_method() + { + return $this->hasMany(ProfileMethod::class, 'id_subkriteria'); + } +} \ No newline at end of file diff --git a/app/Models/SubmissionDetail.php b/app/Models/SubmissionDetail.php new file mode 100644 index 0000000..e65071a --- /dev/null +++ b/app/Models/SubmissionDetail.php @@ -0,0 +1,33 @@ +belongsTo(Submissions::class, 'id_submission'); + } + + public function alternatif() + { + return $this->belongsTo(Alternatif::class, 'id_alternatif'); + } +} \ No newline at end of file diff --git a/app/Models/Submissions.php b/app/Models/Submissions.php new file mode 100644 index 0000000..da34e98 --- /dev/null +++ b/app/Models/Submissions.php @@ -0,0 +1,41 @@ +belongsTo(User::class, 'id'); + } + + public function submission_detail() + { + return $this->hasMany(SubmissionDetail::class, 'id_submission'); + } + +} \ No newline at end of file diff --git a/app/Models/User.php b/app/Models/User.php new file mode 100644 index 0000000..2c9b722 --- /dev/null +++ b/app/Models/User.php @@ -0,0 +1,66 @@ + */ + use HasFactory, Notifiable, HasRoles; + + public const ROLE_ADMIN = 'admin'; + public const ROLE_MAHASISWA = 'mahasiswa'; + + /** + * The attributes that are mass assignable. + * + * @var array + */ + protected $fillable = [ + 'nim', + 'name', + 'email', + 'password', + 'id_angkatan', + ]; + + /** + * The attributes that should be hidden for serialization. + * + * @var array + */ + protected $hidden = [ + 'password', + 'remember_token', + ]; + + /** + * Get the attributes that should be cast. + * + * @return array + */ + protected function casts(): array + { + return [ + 'email_verified_at' => 'datetime', + 'password' => 'hashed', + ]; + } + + public function angkatan() + { + return $this->belongsTo(Angkatan::class, 'id_angkatan'); + } + + public function submission() + { + return $this->hasMany(Submissions::class, 'id'); + } +} \ No newline at end of file diff --git a/app/Observers/SubmissionsDetailObserver.php b/app/Observers/SubmissionsDetailObserver.php new file mode 100644 index 0000000..d875f05 --- /dev/null +++ b/app/Observers/SubmissionsDetailObserver.php @@ -0,0 +1,125 @@ + $submissionDetail->id_submission]); + + $submission = Submissions::find($submissionDetail->id_submission); + if (!$submission) { + Log::warning('Submission tidak ditemukan.', ['id_submission' => $submissionDetail->id_submission]); + return; + } + + $user = User::find($submission->id); + if (!$user || !$user->id_angkatan) { + Log::warning('User tidak ditemukan atau tidak memiliki id_angkatan.', ['id_submission' => $submissionDetail->id_submission]); + return; + } + + $id_angkatan = $user->id_angkatan; + + $alternatifCounts = SubmissionDetail::join('submission', 'submission.id_submission', '=', 'submission_detail.id_submission') + ->join('users', 'users.id', '=', 'submission.id') + ->where('users.id_angkatan', $id_angkatan) + ->selectRaw('id_alternatif, COUNT(*) as total_permintaan') + ->groupBy('id_alternatif') + ->pluck('total_permintaan', 'id_alternatif'); + + $id_alternatif = $submissionDetail->id_alternatif; + if (!$id_alternatif) { + Log::error('SubmissionDetail tidak memiliki id_alternatif', ['id_submission' => $submissionDetail->id_submission]); + return; + } + + $total_permintaan = $alternatifCounts[$id_alternatif] ?? 0; + + $subkriteriadata = ProfileMethod::join('subkriteria', 'subkriteria.id_subkriteria', '=', 'profile_method.id_subkriteria') + ->where('profile_method.id_alternatif', $id_alternatif) + ->value('subkriteria.subkriteria_name') ?? 0; + + $pemenuhanKuota = ProfileMethod::join('subkriteria', 'subkriteria.id_subkriteria', '=', 'profile_method.id_subkriteria') + ->where('profile_method.id_alternatif', $id_alternatif) + ->where('subkriteria.id_kriteria', 2) + ->value('subkriteria.subkriteria_name'); + + preg_match_all('/\d+/', $subkriteriadata, $matches); + $rangeStart = isset($matches[0][0]) ? (int) $matches[0][0] : 0; + $rangeEnd = isset($matches[0][1]) ? (int) $matches[0][1] : $rangeStart; + + // komen revisi + // $rasio = ($total_permintaan > 0 && $kuotaMax > 0) ? ($total_permintaan / $kuotaMax) * 100 : 0; + + $rasio = ($total_permintaan >= $rangeEnd) ? 'Terpenuhi' : 'Belum Terpenuhi'; + + if ($rasio !== $pemenuhanKuota) { + ProfileMethod::where('id_alternatif', $id_alternatif) + ->where('id_kriteria', 2) + ->update(['id_subkriteria' => 6]); + } + + Log::info('Perhitungan Kuota:', [ + 'id_users' => $user->id, + 'angkatan' => $user->id_angkatan, + 'id_alternatif' => $id_alternatif, + 'total_permintaan' => $total_permintaan, + 'subkriteria' => $subkriteriadata, + 'rangeStart' => $rangeStart, + 'rangeEnd' => $rangeEnd, + 'status' => $rasio, + 'pemenuhanKuota' => $pemenuhanKuota, + ]); + } catch (\Exception $e) { + Log::error('Terjadi kesalahan saat menghitung kuota:', [ + 'id_submission' => $submissionDetail->id_submission, + 'error' => $e->getMessage() + ]); + } + } + + /** + * Handle the SubmissionDetail "updated" event. + */ + public function updated(SubmissionDetail $submissionDetail): void + { + // + } + + /** + * Handle the SubmissionDetail "deleted" event. + */ + public function deleted(SubmissionDetail $submissionDetail): void + { + // + } + + /** + * Handle the SubmissionDetail "restored" event. + */ + public function restored(SubmissionDetail $submissionDetail): void + { + // + } + + /** + * Handle the SubmissionDetail "force deleted" event. + */ + public function forceDeleted(SubmissionDetail $submissionDetail): void + { + // + } +} \ No newline at end of file diff --git a/app/Observers/SubmissionsObserver.php b/app/Observers/SubmissionsObserver.php new file mode 100644 index 0000000..d33f4a1 --- /dev/null +++ b/app/Observers/SubmissionsObserver.php @@ -0,0 +1,57 @@ + [ + // UpdateProfileMethodOnSubmission::class, + // ], + // ]; + + /** + * Bootstrap services. + */ + public function boot(): void + { + } +} \ No newline at end of file diff --git a/app/View/Components/AppLayout.php b/app/View/Components/AppLayout.php new file mode 100644 index 0000000..de0d46f --- /dev/null +++ b/app/View/Components/AppLayout.php @@ -0,0 +1,17 @@ +handleCommand(new ArgvInput); + +exit($status); diff --git a/bootstrap/app.php b/bootstrap/app.php new file mode 100644 index 0000000..2d0be5e --- /dev/null +++ b/bootstrap/app.php @@ -0,0 +1,25 @@ +withRouting( + web: __DIR__.'/../routes/web.php', + api: __DIR__.'/../routes/api.php', + commands: __DIR__.'/../routes/console.php', + channels: __DIR__.'/../routes/channels.php', + health: '/up', + ) + ->withMiddleware(function (Middleware $middleware) { + $middleware->alias([ + 'role' => \Spatie\Permission\Middleware\RoleMiddleware::class, + 'permission' => \Spatie\Permission\Middleware\PermissionMiddleware::class, + 'role_or_permission' => \Spatie\Permission\Middleware\RoleOrPermissionMiddleware::class, + ]); + $middleware->redirectGuestsTo('/login'); + }) + ->withExceptions(function (Exceptions $exceptions) { + // + })->create(); \ No newline at end of file diff --git a/bootstrap/cache/.gitignore b/bootstrap/cache/.gitignore new file mode 100644 index 0000000..d6b7ef3 --- /dev/null +++ b/bootstrap/cache/.gitignore @@ -0,0 +1,2 @@ +* +!.gitignore diff --git a/bootstrap/providers.php b/bootstrap/providers.php new file mode 100644 index 0000000..002013b --- /dev/null +++ b/bootstrap/providers.php @@ -0,0 +1,6 @@ + env('APP_NAME', 'Laravel'), + + /* + |-------------------------------------------------------------------------- + | Application Environment + |-------------------------------------------------------------------------- + | + | This value determines the "environment" your application is currently + | running in. This may determine how you prefer to configure various + | services the application utilizes. Set this in your ".env" file. + | + */ + + 'env' => env('APP_ENV', 'production'), + + /* + |-------------------------------------------------------------------------- + | Application Debug Mode + |-------------------------------------------------------------------------- + | + | When your application is in debug mode, detailed error messages with + | stack traces will be shown on every error that occurs within your + | application. If disabled, a simple generic error page is shown. + | + */ + + 'debug' => (bool) env('APP_DEBUG', false), + + /* + |-------------------------------------------------------------------------- + | Application URL + |-------------------------------------------------------------------------- + | + | This URL is used by the console to properly generate URLs when using + | the Artisan command line tool. You should set this to the root of + | the application so that it's available within Artisan commands. + | + */ + + 'url' => env('APP_URL', 'http://localhost'), + + /* + |-------------------------------------------------------------------------- + | Application Timezone + |-------------------------------------------------------------------------- + | + | Here you may specify the default timezone for your application, which + | will be used by the PHP date and date-time functions. The timezone + | is set to "UTC" by default as it is suitable for most use cases. + | + */ + + 'timezone' => env('APP_TIMEZONE', 'UTC'), + + /* + |-------------------------------------------------------------------------- + | Application Locale Configuration + |-------------------------------------------------------------------------- + | + | The application locale determines the default locale that will be used + | by Laravel's translation / localization methods. This option can be + | set to any locale for which you plan to have translation strings. + | + */ + + 'locale' => env('APP_LOCALE', 'en'), + + 'fallback_locale' => env('APP_FALLBACK_LOCALE', 'en'), + + 'faker_locale' => env('APP_FAKER_LOCALE', 'en_US'), + + /* + |-------------------------------------------------------------------------- + | Encryption Key + |-------------------------------------------------------------------------- + | + | This key is utilized by Laravel's encryption services and should be set + | to a random, 32 character string to ensure that all encrypted values + | are secure. You should do this prior to deploying the application. + | + */ + + 'cipher' => 'AES-256-CBC', + + 'key' => env('APP_KEY'), + + 'previous_keys' => [ + ...array_filter( + explode(',', env('APP_PREVIOUS_KEYS', '')) + ), + ], + + /* + |-------------------------------------------------------------------------- + | Maintenance Mode Driver + |-------------------------------------------------------------------------- + | + | These configuration options determine the driver used to determine and + | manage Laravel's "maintenance mode" status. The "cache" driver will + | allow maintenance mode to be controlled across multiple machines. + | + | Supported drivers: "file", "cache" + | + */ + + 'maintenance' => [ + 'driver' => env('APP_MAINTENANCE_DRIVER', 'file'), + 'store' => env('APP_MAINTENANCE_STORE', 'database'), + ], + +]; diff --git a/config/auth.php b/config/auth.php new file mode 100644 index 0000000..0ba5d5d --- /dev/null +++ b/config/auth.php @@ -0,0 +1,115 @@ + [ + 'guard' => env('AUTH_GUARD', 'web'), + 'passwords' => env('AUTH_PASSWORD_BROKER', 'users'), + ], + + /* + |-------------------------------------------------------------------------- + | Authentication Guards + |-------------------------------------------------------------------------- + | + | Next, you may define every authentication guard for your application. + | Of course, a great default configuration has been defined for you + | which utilizes session storage plus the Eloquent user provider. + | + | All authentication guards have a user provider, which defines how the + | users are actually retrieved out of your database or other storage + | system used by the application. Typically, Eloquent is utilized. + | + | Supported: "session" + | + */ + + 'guards' => [ + 'web' => [ + 'driver' => 'session', + 'provider' => 'users', + ], + ], + + /* + |-------------------------------------------------------------------------- + | User Providers + |-------------------------------------------------------------------------- + | + | All authentication guards have a user provider, which defines how the + | users are actually retrieved out of your database or other storage + | system used by the application. Typically, Eloquent is utilized. + | + | If you have multiple user tables or models you may configure multiple + | providers to represent the model / table. These providers may then + | be assigned to any extra authentication guards you have defined. + | + | Supported: "database", "eloquent" + | + */ + + 'providers' => [ + 'users' => [ + 'driver' => 'eloquent', + 'model' => env('AUTH_MODEL', App\Models\User::class), + ], + + // 'users' => [ + // 'driver' => 'database', + // 'table' => 'users', + // ], + ], + + /* + |-------------------------------------------------------------------------- + | Resetting Passwords + |-------------------------------------------------------------------------- + | + | These configuration options specify the behavior of Laravel's password + | reset functionality, including the table utilized for token storage + | and the user provider that is invoked to actually retrieve users. + | + | The expiry time is the number of minutes that each reset token will be + | considered valid. This security feature keeps tokens short-lived so + | they have less time to be guessed. You may change this as needed. + | + | The throttle setting is the number of seconds a user must wait before + | generating more password reset tokens. This prevents the user from + | quickly generating a very large amount of password reset tokens. + | + */ + + 'passwords' => [ + 'users' => [ + 'provider' => 'users', + 'table' => env('AUTH_PASSWORD_RESET_TOKEN_TABLE', 'password_reset_tokens'), + 'expire' => 60, + 'throttle' => 60, + ], + ], + + /* + |-------------------------------------------------------------------------- + | Password Confirmation Timeout + |-------------------------------------------------------------------------- + | + | Here you may define the amount of seconds before a password confirmation + | window expires and users are asked to re-enter their password via the + | confirmation screen. By default, the timeout lasts for three hours. + | + */ + + 'password_timeout' => env('AUTH_PASSWORD_TIMEOUT', 10800), + +]; diff --git a/config/broadcasting.php b/config/broadcasting.php new file mode 100644 index 0000000..ce23714 --- /dev/null +++ b/config/broadcasting.php @@ -0,0 +1,82 @@ + env('BROADCAST_CONNECTION', 'null'), + + /* + |-------------------------------------------------------------------------- + | Broadcast Connections + |-------------------------------------------------------------------------- + | + | Here you may define all of the broadcast connections that will be used + | to broadcast events to other systems or over WebSockets. Samples of + | each available type of connection are provided inside this array. + | + */ + + 'connections' => [ + + 'reverb' => [ + 'driver' => 'reverb', + 'key' => env('REVERB_APP_KEY'), + 'secret' => env('REVERB_APP_SECRET'), + 'app_id' => env('REVERB_APP_ID'), + 'options' => [ + 'host' => env('REVERB_HOST'), + 'port' => env('REVERB_PORT', 443), + 'scheme' => env('REVERB_SCHEME', 'https'), + 'useTLS' => env('REVERB_SCHEME', 'https') === 'https', + ], + 'client_options' => [ + // Guzzle client options: https://docs.guzzlephp.org/en/stable/request-options.html + ], + ], + + 'pusher' => [ + 'driver' => 'pusher', + 'key' => env('PUSHER_APP_KEY'), + 'secret' => env('PUSHER_APP_SECRET'), + 'app_id' => env('PUSHER_APP_ID'), + 'options' => [ + 'cluster' => env('PUSHER_APP_CLUSTER'), + 'host' => env('PUSHER_HOST') ?: 'api-'.env('PUSHER_APP_CLUSTER', 'mt1').'.pusher.com', + 'port' => env('PUSHER_PORT', 443), + 'scheme' => env('PUSHER_SCHEME', 'https'), + 'encrypted' => true, + 'useTLS' => env('PUSHER_SCHEME', 'https') === 'https', + ], + 'client_options' => [ + // Guzzle client options: https://docs.guzzlephp.org/en/stable/request-options.html + ], + ], + + 'ably' => [ + 'driver' => 'ably', + 'key' => env('ABLY_KEY'), + ], + + 'log' => [ + 'driver' => 'log', + ], + + 'null' => [ + 'driver' => 'null', + ], + + ], + +]; \ No newline at end of file diff --git a/config/cache.php b/config/cache.php new file mode 100644 index 0000000..925f7d2 --- /dev/null +++ b/config/cache.php @@ -0,0 +1,108 @@ + env('CACHE_STORE', 'database'), + + /* + |-------------------------------------------------------------------------- + | Cache Stores + |-------------------------------------------------------------------------- + | + | Here you may define all of the cache "stores" for your application as + | well as their drivers. You may even define multiple stores for the + | same cache driver to group types of items stored in your caches. + | + | Supported drivers: "array", "database", "file", "memcached", + | "redis", "dynamodb", "octane", "null" + | + */ + + 'stores' => [ + + 'array' => [ + 'driver' => 'array', + 'serialize' => false, + ], + + 'database' => [ + 'driver' => 'database', + 'connection' => env('DB_CACHE_CONNECTION'), + 'table' => env('DB_CACHE_TABLE', 'cache'), + 'lock_connection' => env('DB_CACHE_LOCK_CONNECTION'), + 'lock_table' => env('DB_CACHE_LOCK_TABLE'), + ], + + 'file' => [ + 'driver' => 'file', + 'path' => storage_path('framework/cache/data'), + 'lock_path' => storage_path('framework/cache/data'), + ], + + 'memcached' => [ + 'driver' => 'memcached', + 'persistent_id' => env('MEMCACHED_PERSISTENT_ID'), + 'sasl' => [ + env('MEMCACHED_USERNAME'), + env('MEMCACHED_PASSWORD'), + ], + 'options' => [ + // Memcached::OPT_CONNECT_TIMEOUT => 2000, + ], + 'servers' => [ + [ + 'host' => env('MEMCACHED_HOST', '127.0.0.1'), + 'port' => env('MEMCACHED_PORT', 11211), + 'weight' => 100, + ], + ], + ], + + 'redis' => [ + 'driver' => 'redis', + 'connection' => env('REDIS_CACHE_CONNECTION', 'cache'), + 'lock_connection' => env('REDIS_CACHE_LOCK_CONNECTION', 'default'), + ], + + 'dynamodb' => [ + 'driver' => 'dynamodb', + 'key' => env('AWS_ACCESS_KEY_ID'), + 'secret' => env('AWS_SECRET_ACCESS_KEY'), + 'region' => env('AWS_DEFAULT_REGION', 'us-east-1'), + 'table' => env('DYNAMODB_CACHE_TABLE', 'cache'), + 'endpoint' => env('DYNAMODB_ENDPOINT'), + ], + + 'octane' => [ + 'driver' => 'octane', + ], + + ], + + /* + |-------------------------------------------------------------------------- + | Cache Key Prefix + |-------------------------------------------------------------------------- + | + | When utilizing the APC, database, memcached, Redis, and DynamoDB cache + | stores, there might be other applications using the same cache. For + | that reason, you may prefix every cache key to avoid collisions. + | + */ + + 'prefix' => env('CACHE_PREFIX', Str::slug(env('APP_NAME', 'laravel'), '_').'_cache_'), + +]; diff --git a/config/database.php b/config/database.php new file mode 100644 index 0000000..125949e --- /dev/null +++ b/config/database.php @@ -0,0 +1,173 @@ + env('DB_CONNECTION', 'sqlite'), + + /* + |-------------------------------------------------------------------------- + | Database Connections + |-------------------------------------------------------------------------- + | + | Below are all of the database connections defined for your application. + | An example configuration is provided for each database system which + | is supported by Laravel. You're free to add / remove connections. + | + */ + + 'connections' => [ + + 'sqlite' => [ + 'driver' => 'sqlite', + 'url' => env('DB_URL'), + 'database' => env('DB_DATABASE', database_path('database.sqlite')), + 'prefix' => '', + 'foreign_key_constraints' => env('DB_FOREIGN_KEYS', true), + 'busy_timeout' => null, + 'journal_mode' => null, + 'synchronous' => null, + ], + + 'mysql' => [ + 'driver' => 'mysql', + 'url' => env('DB_URL'), + 'host' => env('DB_HOST', '127.0.0.1'), + 'port' => env('DB_PORT', '3306'), + 'database' => env('DB_DATABASE', 'laravel'), + 'username' => env('DB_USERNAME', 'root'), + 'password' => env('DB_PASSWORD', ''), + 'unix_socket' => env('DB_SOCKET', ''), + 'charset' => env('DB_CHARSET', 'utf8mb4'), + 'collation' => env('DB_COLLATION', 'utf8mb4_unicode_ci'), + 'prefix' => '', + 'prefix_indexes' => true, + 'strict' => true, + 'engine' => null, + 'options' => extension_loaded('pdo_mysql') ? array_filter([ + PDO::MYSQL_ATTR_SSL_CA => env('MYSQL_ATTR_SSL_CA'), + ]) : [], + ], + + 'mariadb' => [ + 'driver' => 'mariadb', + 'url' => env('DB_URL'), + 'host' => env('DB_HOST', '127.0.0.1'), + 'port' => env('DB_PORT', '3306'), + 'database' => env('DB_DATABASE', 'laravel'), + 'username' => env('DB_USERNAME', 'root'), + 'password' => env('DB_PASSWORD', ''), + 'unix_socket' => env('DB_SOCKET', ''), + 'charset' => env('DB_CHARSET', 'utf8mb4'), + 'collation' => env('DB_COLLATION', 'utf8mb4_unicode_ci'), + 'prefix' => '', + 'prefix_indexes' => true, + 'strict' => true, + 'engine' => null, + 'options' => extension_loaded('pdo_mysql') ? array_filter([ + PDO::MYSQL_ATTR_SSL_CA => env('MYSQL_ATTR_SSL_CA'), + ]) : [], + ], + + 'pgsql' => [ + 'driver' => 'pgsql', + 'url' => env('DB_URL'), + 'host' => env('DB_HOST', '127.0.0.1'), + 'port' => env('DB_PORT', '5432'), + 'database' => env('DB_DATABASE', 'laravel'), + 'username' => env('DB_USERNAME', 'root'), + 'password' => env('DB_PASSWORD', ''), + 'charset' => env('DB_CHARSET', 'utf8'), + 'prefix' => '', + 'prefix_indexes' => true, + 'search_path' => 'public', + 'sslmode' => 'prefer', + ], + + 'sqlsrv' => [ + 'driver' => 'sqlsrv', + 'url' => env('DB_URL'), + 'host' => env('DB_HOST', 'localhost'), + 'port' => env('DB_PORT', '1433'), + 'database' => env('DB_DATABASE', 'laravel'), + 'username' => env('DB_USERNAME', 'root'), + 'password' => env('DB_PASSWORD', ''), + 'charset' => env('DB_CHARSET', 'utf8'), + 'prefix' => '', + 'prefix_indexes' => true, + // 'encrypt' => env('DB_ENCRYPT', 'yes'), + // 'trust_server_certificate' => env('DB_TRUST_SERVER_CERTIFICATE', 'false'), + ], + + ], + + /* + |-------------------------------------------------------------------------- + | Migration Repository Table + |-------------------------------------------------------------------------- + | + | This table keeps track of all the migrations that have already run for + | your application. Using this information, we can determine which of + | the migrations on disk haven't actually been run on the database. + | + */ + + 'migrations' => [ + 'table' => 'migrations', + 'update_date_on_publish' => true, + ], + + /* + |-------------------------------------------------------------------------- + | Redis Databases + |-------------------------------------------------------------------------- + | + | Redis is an open source, fast, and advanced key-value store that also + | provides a richer body of commands than a typical key-value system + | such as Memcached. You may define your connection settings here. + | + */ + + 'redis' => [ + + 'client' => env('REDIS_CLIENT', 'phpredis'), + + 'options' => [ + 'cluster' => env('REDIS_CLUSTER', 'redis'), + 'prefix' => env('REDIS_PREFIX', Str::slug(env('APP_NAME', 'laravel'), '_').'_database_'), + ], + + 'default' => [ + 'url' => env('REDIS_URL'), + 'host' => env('REDIS_HOST', '127.0.0.1'), + 'username' => env('REDIS_USERNAME'), + 'password' => env('REDIS_PASSWORD'), + 'port' => env('REDIS_PORT', '6379'), + 'database' => env('REDIS_DB', '0'), + ], + + 'cache' => [ + 'url' => env('REDIS_URL'), + 'host' => env('REDIS_HOST', '127.0.0.1'), + 'username' => env('REDIS_USERNAME'), + 'password' => env('REDIS_PASSWORD'), + 'port' => env('REDIS_PORT', '6379'), + 'database' => env('REDIS_CACHE_DB', '1'), + ], + + ], + +]; diff --git a/config/filesystems.php b/config/filesystems.php new file mode 100644 index 0000000..b564035 --- /dev/null +++ b/config/filesystems.php @@ -0,0 +1,77 @@ + env('FILESYSTEM_DISK', 'local'), + + /* + |-------------------------------------------------------------------------- + | Filesystem Disks + |-------------------------------------------------------------------------- + | + | Below you may configure as many filesystem disks as necessary, and you + | may even configure multiple disks for the same driver. Examples for + | most supported storage drivers are configured here for reference. + | + | Supported drivers: "local", "ftp", "sftp", "s3" + | + */ + + 'disks' => [ + + 'local' => [ + 'driver' => 'local', + 'root' => storage_path('app/private'), + 'serve' => true, + 'throw' => false, + ], + + 'public' => [ + 'driver' => 'local', + 'root' => storage_path('app/public'), + 'url' => env('APP_URL').'/storage', + 'visibility' => 'public', + 'throw' => false, + ], + + 's3' => [ + 'driver' => 's3', + 'key' => env('AWS_ACCESS_KEY_ID'), + 'secret' => env('AWS_SECRET_ACCESS_KEY'), + 'region' => env('AWS_DEFAULT_REGION'), + 'bucket' => env('AWS_BUCKET'), + 'url' => env('AWS_URL'), + 'endpoint' => env('AWS_ENDPOINT'), + 'use_path_style_endpoint' => env('AWS_USE_PATH_STYLE_ENDPOINT', false), + 'throw' => false, + ], + + ], + + /* + |-------------------------------------------------------------------------- + | Symbolic Links + |-------------------------------------------------------------------------- + | + | Here you may configure the symbolic links that will be created when the + | `storage:link` Artisan command is executed. The array keys should be + | the locations of the links and the values should be their targets. + | + */ + + 'links' => [ + public_path('storage') => storage_path('app/public'), + ], + +]; diff --git a/config/logging.php b/config/logging.php new file mode 100644 index 0000000..8d94292 --- /dev/null +++ b/config/logging.php @@ -0,0 +1,132 @@ + env('LOG_CHANNEL', 'stack'), + + /* + |-------------------------------------------------------------------------- + | Deprecations Log Channel + |-------------------------------------------------------------------------- + | + | This option controls the log channel that should be used to log warnings + | regarding deprecated PHP and library features. This allows you to get + | your application ready for upcoming major versions of dependencies. + | + */ + + 'deprecations' => [ + 'channel' => env('LOG_DEPRECATIONS_CHANNEL', 'null'), + 'trace' => env('LOG_DEPRECATIONS_TRACE', false), + ], + + /* + |-------------------------------------------------------------------------- + | Log Channels + |-------------------------------------------------------------------------- + | + | Here you may configure the log channels for your application. Laravel + | utilizes the Monolog PHP logging library, which includes a variety + | of powerful log handlers and formatters that you're free to use. + | + | Available drivers: "single", "daily", "slack", "syslog", + | "errorlog", "monolog", "custom", "stack" + | + */ + + 'channels' => [ + + 'stack' => [ + 'driver' => 'stack', + 'channels' => explode(',', env('LOG_STACK', 'single')), + 'ignore_exceptions' => false, + ], + + 'single' => [ + 'driver' => 'single', + 'path' => storage_path('logs/laravel.log'), + 'level' => env('LOG_LEVEL', 'debug'), + 'replace_placeholders' => true, + ], + + 'daily' => [ + 'driver' => 'daily', + 'path' => storage_path('logs/laravel.log'), + 'level' => env('LOG_LEVEL', 'debug'), + 'days' => env('LOG_DAILY_DAYS', 14), + 'replace_placeholders' => true, + ], + + 'slack' => [ + 'driver' => 'slack', + 'url' => env('LOG_SLACK_WEBHOOK_URL'), + 'username' => env('LOG_SLACK_USERNAME', 'Laravel Log'), + 'emoji' => env('LOG_SLACK_EMOJI', ':boom:'), + 'level' => env('LOG_LEVEL', 'critical'), + 'replace_placeholders' => true, + ], + + 'papertrail' => [ + 'driver' => 'monolog', + 'level' => env('LOG_LEVEL', 'debug'), + 'handler' => env('LOG_PAPERTRAIL_HANDLER', SyslogUdpHandler::class), + 'handler_with' => [ + 'host' => env('PAPERTRAIL_URL'), + 'port' => env('PAPERTRAIL_PORT'), + 'connectionString' => 'tls://'.env('PAPERTRAIL_URL').':'.env('PAPERTRAIL_PORT'), + ], + 'processors' => [PsrLogMessageProcessor::class], + ], + + 'stderr' => [ + 'driver' => 'monolog', + 'level' => env('LOG_LEVEL', 'debug'), + 'handler' => StreamHandler::class, + 'formatter' => env('LOG_STDERR_FORMATTER'), + 'with' => [ + 'stream' => 'php://stderr', + ], + 'processors' => [PsrLogMessageProcessor::class], + ], + + 'syslog' => [ + 'driver' => 'syslog', + 'level' => env('LOG_LEVEL', 'debug'), + 'facility' => env('LOG_SYSLOG_FACILITY', LOG_USER), + 'replace_placeholders' => true, + ], + + 'errorlog' => [ + 'driver' => 'errorlog', + 'level' => env('LOG_LEVEL', 'debug'), + 'replace_placeholders' => true, + ], + + 'null' => [ + 'driver' => 'monolog', + 'handler' => NullHandler::class, + ], + + 'emergency' => [ + 'path' => storage_path('logs/laravel.log'), + ], + + ], + +]; diff --git a/config/mail.php b/config/mail.php new file mode 100644 index 0000000..df13d3d --- /dev/null +++ b/config/mail.php @@ -0,0 +1,116 @@ + env('MAIL_MAILER', 'log'), + + /* + |-------------------------------------------------------------------------- + | Mailer Configurations + |-------------------------------------------------------------------------- + | + | Here you may configure all of the mailers used by your application plus + | their respective settings. Several examples have been configured for + | you and you are free to add your own as your application requires. + | + | Laravel supports a variety of mail "transport" drivers that can be used + | when delivering an email. You may specify which one you're using for + | your mailers below. You may also add additional mailers if needed. + | + | Supported: "smtp", "sendmail", "mailgun", "ses", "ses-v2", + | "postmark", "resend", "log", "array", + | "failover", "roundrobin" + | + */ + + 'mailers' => [ + + 'smtp' => [ + 'transport' => 'smtp', + 'url' => env('MAIL_URL'), + 'host' => env('MAIL_HOST', '127.0.0.1'), + 'port' => env('MAIL_PORT', 2525), + 'encryption' => env('MAIL_ENCRYPTION', 'tls'), + 'username' => env('MAIL_USERNAME'), + 'password' => env('MAIL_PASSWORD'), + 'timeout' => null, + 'local_domain' => env('MAIL_EHLO_DOMAIN', parse_url(env('APP_URL', 'http://localhost'), PHP_URL_HOST)), + ], + + 'ses' => [ + 'transport' => 'ses', + ], + + 'postmark' => [ + 'transport' => 'postmark', + // 'message_stream_id' => env('POSTMARK_MESSAGE_STREAM_ID'), + // 'client' => [ + // 'timeout' => 5, + // ], + ], + + 'resend' => [ + 'transport' => 'resend', + ], + + 'sendmail' => [ + 'transport' => 'sendmail', + 'path' => env('MAIL_SENDMAIL_PATH', '/usr/sbin/sendmail -bs -i'), + ], + + 'log' => [ + 'transport' => 'log', + 'channel' => env('MAIL_LOG_CHANNEL'), + ], + + 'array' => [ + 'transport' => 'array', + ], + + 'failover' => [ + 'transport' => 'failover', + 'mailers' => [ + 'smtp', + 'log', + ], + ], + + 'roundrobin' => [ + 'transport' => 'roundrobin', + 'mailers' => [ + 'ses', + 'postmark', + ], + ], + + ], + + /* + |-------------------------------------------------------------------------- + | Global "From" Address + |-------------------------------------------------------------------------- + | + | You may wish for all emails sent by your application to be sent from + | the same address. Here you may specify a name and address that is + | used globally for all emails that are sent by your application. + | + */ + + 'from' => [ + 'address' => env('MAIL_FROM_ADDRESS', 'hello@example.com'), + 'name' => env('MAIL_FROM_NAME', 'Example'), + ], + +]; diff --git a/config/permission.php b/config/permission.php new file mode 100644 index 0000000..2a520f3 --- /dev/null +++ b/config/permission.php @@ -0,0 +1,186 @@ + [ + + /* + * When using the "HasPermissions" trait from this package, we need to know which + * Eloquent model should be used to retrieve your permissions. Of course, it + * is often just the "Permission" model but you may use whatever you like. + * + * The model you want to use as a Permission model needs to implement the + * `Spatie\Permission\Contracts\Permission` contract. + */ + + 'permission' => Spatie\Permission\Models\Permission::class, + + /* + * When using the "HasRoles" trait from this package, we need to know which + * Eloquent model should be used to retrieve your roles. Of course, it + * is often just the "Role" model but you may use whatever you like. + * + * The model you want to use as a Role model needs to implement the + * `Spatie\Permission\Contracts\Role` contract. + */ + + 'role' => Spatie\Permission\Models\Role::class, + + ], + + 'table_names' => [ + + /* + * When using the "HasRoles" trait from this package, we need to know which + * table should be used to retrieve your roles. We have chosen a basic + * default value but you may easily change it to any table you like. + */ + + 'roles' => 'roles', + + /* + * When using the "HasPermissions" trait from this package, we need to know which + * table should be used to retrieve your permissions. We have chosen a basic + * default value but you may easily change it to any table you like. + */ + + 'permissions' => 'permissions', + + /* + * When using the "HasPermissions" trait from this package, we need to know which + * table should be used to retrieve your models permissions. We have chosen a + * basic default value but you may easily change it to any table you like. + */ + + 'model_has_permissions' => 'model_has_permissions', + + /* + * When using the "HasRoles" trait from this package, we need to know which + * table should be used to retrieve your models roles. We have chosen a + * basic default value but you may easily change it to any table you like. + */ + + 'model_has_roles' => 'model_has_roles', + + /* + * When using the "HasRoles" trait from this package, we need to know which + * table should be used to retrieve your roles permissions. We have chosen a + * basic default value but you may easily change it to any table you like. + */ + + 'role_has_permissions' => 'role_has_permissions', + ], + + 'column_names' => [ + /* + * Change this if you want to name the related pivots other than defaults + */ + 'role_pivot_key' => null, //default 'role_id', + 'permission_pivot_key' => null, //default 'permission_id', + + /* + * Change this if you want to name the related model primary key other than + * `model_id`. + * + * For example, this would be nice if your primary keys are all UUIDs. In + * that case, name this `model_uuid`. + */ + + 'model_morph_key' => 'model_id', + + /* + * Change this if you want to use the teams feature and your related model's + * foreign key is other than `team_id`. + */ + + 'team_foreign_key' => 'team_id', + ], + + /* + * When set to true, the method for checking permissions will be registered on the gate. + * Set this to false if you want to implement custom logic for checking permissions. + */ + + 'register_permission_check_method' => true, + + /* + * When set to true, Laravel\Octane\Events\OperationTerminated event listener will be registered + * this will refresh permissions on every TickTerminated, TaskTerminated and RequestTerminated + * NOTE: This should not be needed in most cases, but an Octane/Vapor combination benefited from it. + */ + 'register_octane_reset_listener' => false, + + /* + * Teams Feature. + * When set to true the package implements teams using the 'team_foreign_key'. + * If you want the migrations to register the 'team_foreign_key', you must + * set this to true before doing the migration. + * If you already did the migration then you must make a new migration to also + * add 'team_foreign_key' to 'roles', 'model_has_roles', and 'model_has_permissions' + * (view the latest version of this package's migration file) + */ + + 'teams' => false, + + /* + * Passport Client Credentials Grant + * When set to true the package will use Passports Client to check permissions + */ + + 'use_passport_client_credentials' => false, + + /* + * When set to true, the required permission names are added to exception messages. + * This could be considered an information leak in some contexts, so the default + * setting is false here for optimum safety. + */ + + 'display_permission_in_exception' => false, + + /* + * When set to true, the required role names are added to exception messages. + * This could be considered an information leak in some contexts, so the default + * setting is false here for optimum safety. + */ + + 'display_role_in_exception' => false, + + /* + * By default wildcard permission lookups are disabled. + * See documentation to understand supported syntax. + */ + + 'enable_wildcard_permission' => false, + + /* + * The class to use for interpreting wildcard permissions. + * If you need to modify delimiters, override the class and specify its name here. + */ + // 'permission.wildcard_permission' => Spatie\Permission\WildcardPermission::class, + + /* Cache-specific settings */ + + 'cache' => [ + + /* + * By default all permissions are cached for 24 hours to speed up performance. + * When permissions or roles are updated the cache is flushed automatically. + */ + + 'expiration_time' => \DateInterval::createFromDateString('24 hours'), + + /* + * The cache key used to store all permissions. + */ + + 'key' => 'spatie.permission.cache', + + /* + * You may optionally indicate a specific cache driver to use for permission and + * role caching using any of the `store` drivers listed in the cache.php config + * file. Using 'default' here means to use the `default` set in cache.php. + */ + + 'store' => 'default', + ], +]; diff --git a/config/queue.php b/config/queue.php new file mode 100644 index 0000000..116bd8d --- /dev/null +++ b/config/queue.php @@ -0,0 +1,112 @@ + env('QUEUE_CONNECTION', 'database'), + + /* + |-------------------------------------------------------------------------- + | Queue Connections + |-------------------------------------------------------------------------- + | + | Here you may configure the connection options for every queue backend + | used by your application. An example configuration is provided for + | each backend supported by Laravel. You're also free to add more. + | + | Drivers: "sync", "database", "beanstalkd", "sqs", "redis", "null" + | + */ + + 'connections' => [ + + 'sync' => [ + 'driver' => 'sync', + ], + + 'database' => [ + 'driver' => 'database', + 'connection' => env('DB_QUEUE_CONNECTION'), + 'table' => env('DB_QUEUE_TABLE', 'jobs'), + 'queue' => env('DB_QUEUE', 'default'), + 'retry_after' => (int) env('DB_QUEUE_RETRY_AFTER', 90), + 'after_commit' => false, + ], + + 'beanstalkd' => [ + 'driver' => 'beanstalkd', + 'host' => env('BEANSTALKD_QUEUE_HOST', 'localhost'), + 'queue' => env('BEANSTALKD_QUEUE', 'default'), + 'retry_after' => (int) env('BEANSTALKD_QUEUE_RETRY_AFTER', 90), + 'block_for' => 0, + 'after_commit' => false, + ], + + 'sqs' => [ + 'driver' => 'sqs', + 'key' => env('AWS_ACCESS_KEY_ID'), + 'secret' => env('AWS_SECRET_ACCESS_KEY'), + 'prefix' => env('SQS_PREFIX', 'https://sqs.us-east-1.amazonaws.com/your-account-id'), + 'queue' => env('SQS_QUEUE', 'default'), + 'suffix' => env('SQS_SUFFIX'), + 'region' => env('AWS_DEFAULT_REGION', 'us-east-1'), + 'after_commit' => false, + ], + + 'redis' => [ + 'driver' => 'redis', + 'connection' => env('REDIS_QUEUE_CONNECTION', 'default'), + 'queue' => env('REDIS_QUEUE', 'default'), + 'retry_after' => (int) env('REDIS_QUEUE_RETRY_AFTER', 90), + 'block_for' => null, + 'after_commit' => false, + ], + + ], + + /* + |-------------------------------------------------------------------------- + | Job Batching + |-------------------------------------------------------------------------- + | + | The following options configure the database and table that store job + | batching information. These options can be updated to any database + | connection and table which has been defined by your application. + | + */ + + 'batching' => [ + 'database' => env('DB_CONNECTION', 'sqlite'), + 'table' => 'job_batches', + ], + + /* + |-------------------------------------------------------------------------- + | Failed Queue Jobs + |-------------------------------------------------------------------------- + | + | These options configure the behavior of failed queue job logging so you + | can control how and where failed jobs are stored. Laravel ships with + | support for storing failed jobs in a simple file or in a database. + | + | Supported drivers: "database-uuids", "dynamodb", "file", "null" + | + */ + + 'failed' => [ + 'driver' => env('QUEUE_FAILED_DRIVER', 'database-uuids'), + 'database' => env('DB_CONNECTION', 'sqlite'), + 'table' => 'failed_jobs', + ], + +]; diff --git a/config/reverb.php b/config/reverb.php new file mode 100644 index 0000000..3fead53 --- /dev/null +++ b/config/reverb.php @@ -0,0 +1,92 @@ + env('REVERB_SERVER', 'reverb'), + + /* + |-------------------------------------------------------------------------- + | Reverb Servers + |-------------------------------------------------------------------------- + | + | Here you may define details for each of the supported Reverb servers. + | Each server has its own configuration options that are defined in + | the array below. You should ensure all the options are present. + | + */ + + 'servers' => [ + + 'reverb' => [ + 'host' => env('REVERB_SERVER_HOST', '0.0.0.0'), + 'port' => env('REVERB_SERVER_PORT', 8080), + 'hostname' => env('REVERB_HOST'), + 'options' => [ + 'tls' => [], + ], + 'max_request_size' => env('REVERB_MAX_REQUEST_SIZE', 10_000), + 'scaling' => [ + 'enabled' => env('REVERB_SCALING_ENABLED', false), + 'channel' => env('REVERB_SCALING_CHANNEL', 'reverb'), + 'server' => [ + 'url' => env('REDIS_URL'), + 'host' => env('REDIS_HOST', '127.0.0.1'), + 'port' => env('REDIS_PORT', '6379'), + 'username' => env('REDIS_USERNAME'), + 'password' => env('REDIS_PASSWORD'), + 'database' => env('REDIS_DB', '0'), + ], + ], + 'pulse_ingest_interval' => env('REVERB_PULSE_INGEST_INTERVAL', 15), + 'telescope_ingest_interval' => env('REVERB_TELESCOPE_INGEST_INTERVAL', 15), + ], + + ], + + /* + |-------------------------------------------------------------------------- + | Reverb Applications + |-------------------------------------------------------------------------- + | + | Here you may define how Reverb applications are managed. If you choose + | to use the "config" provider, you may define an array of apps which + | your server will support, including their connection credentials. + | + */ + + 'apps' => [ + + 'provider' => 'config', + + 'apps' => [ + [ + 'key' => env('REVERB_APP_KEY'), + 'secret' => env('REVERB_APP_SECRET'), + 'app_id' => env('REVERB_APP_ID'), + 'options' => [ + 'host' => env('REVERB_HOST'), + 'port' => env('REVERB_PORT', 443), + 'scheme' => env('REVERB_SCHEME', 'https'), + 'useTLS' => env('REVERB_SCHEME', 'https') === 'https', + ], + 'allowed_origins' => ['*'], + 'ping_interval' => env('REVERB_APP_PING_INTERVAL', 60), + 'activity_timeout' => env('REVERB_APP_ACTIVITY_TIMEOUT', 30), + 'max_message_size' => env('REVERB_APP_MAX_MESSAGE_SIZE', 10_000), + ], + ], + + ], + +]; diff --git a/config/sanctum.php b/config/sanctum.php new file mode 100644 index 0000000..764a82f --- /dev/null +++ b/config/sanctum.php @@ -0,0 +1,83 @@ + explode(',', env('SANCTUM_STATEFUL_DOMAINS', sprintf( + '%s%s', + 'localhost,localhost:3000,127.0.0.1,127.0.0.1:8000,::1', + Sanctum::currentApplicationUrlWithPort() + ))), + + /* + |-------------------------------------------------------------------------- + | Sanctum Guards + |-------------------------------------------------------------------------- + | + | This array contains the authentication guards that will be checked when + | Sanctum is trying to authenticate a request. If none of these guards + | are able to authenticate the request, Sanctum will use the bearer + | token that's present on an incoming request for authentication. + | + */ + + 'guard' => ['web'], + + /* + |-------------------------------------------------------------------------- + | Expiration Minutes + |-------------------------------------------------------------------------- + | + | This value controls the number of minutes until an issued token will be + | considered expired. This will override any values set in the token's + | "expires_at" attribute, but first-party sessions are not affected. + | + */ + + 'expiration' => null, + + /* + |-------------------------------------------------------------------------- + | Token Prefix + |-------------------------------------------------------------------------- + | + | Sanctum can prefix new tokens in order to take advantage of numerous + | security scanning initiatives maintained by open source platforms + | that notify developers if they commit tokens into repositories. + | + | See: https://docs.github.com/en/code-security/secret-scanning/about-secret-scanning + | + */ + + 'token_prefix' => env('SANCTUM_TOKEN_PREFIX', ''), + + /* + |-------------------------------------------------------------------------- + | Sanctum Middleware + |-------------------------------------------------------------------------- + | + | When authenticating your first-party SPA with Sanctum you may need to + | customize some of the middleware Sanctum uses while processing the + | request. You may change the middleware listed below as required. + | + */ + + 'middleware' => [ + 'authenticate_session' => Laravel\Sanctum\Http\Middleware\AuthenticateSession::class, + 'encrypt_cookies' => Illuminate\Cookie\Middleware\EncryptCookies::class, + 'validate_csrf_token' => Illuminate\Foundation\Http\Middleware\ValidateCsrfToken::class, + ], + +]; diff --git a/config/services.php b/config/services.php new file mode 100644 index 0000000..5d5385b --- /dev/null +++ b/config/services.php @@ -0,0 +1,44 @@ + [ + 'client_id' => env('GOOGLE_CLIENT_ID'), + 'client_secret' => env('GOOGLE_CLIENT_SECRET'), + 'redirect' => env('GOOGLE_REDIRECT_URI'), + ], + + 'postmark' => [ + 'token' => env('POSTMARK_TOKEN'), + ], + + 'ses' => [ + 'key' => env('AWS_ACCESS_KEY_ID'), + 'secret' => env('AWS_SECRET_ACCESS_KEY'), + 'region' => env('AWS_DEFAULT_REGION', 'us-east-1'), + ], + + 'resend' => [ + 'key' => env('RESEND_KEY'), + ], + + 'slack' => [ + 'notifications' => [ + 'bot_user_oauth_token' => env('SLACK_BOT_USER_OAUTH_TOKEN'), + 'channel' => env('SLACK_BOT_USER_DEFAULT_CHANNEL'), + ], + ], + +]; \ No newline at end of file diff --git a/config/session.php b/config/session.php new file mode 100644 index 0000000..f0b6541 --- /dev/null +++ b/config/session.php @@ -0,0 +1,217 @@ + env('SESSION_DRIVER', 'database'), + + /* + |-------------------------------------------------------------------------- + | Session Lifetime + |-------------------------------------------------------------------------- + | + | Here you may specify the number of minutes that you wish the session + | to be allowed to remain idle before it expires. If you want them + | to expire immediately when the browser is closed then you may + | indicate that via the expire_on_close configuration option. + | + */ + + 'lifetime' => env('SESSION_LIFETIME', 120), + + 'expire_on_close' => env('SESSION_EXPIRE_ON_CLOSE', false), + + /* + |-------------------------------------------------------------------------- + | Session Encryption + |-------------------------------------------------------------------------- + | + | This option allows you to easily specify that all of your session data + | should be encrypted before it's stored. All encryption is performed + | automatically by Laravel and you may use the session like normal. + | + */ + + 'encrypt' => env('SESSION_ENCRYPT', false), + + /* + |-------------------------------------------------------------------------- + | Session File Location + |-------------------------------------------------------------------------- + | + | When utilizing the "file" session driver, the session files are placed + | on disk. The default storage location is defined here; however, you + | are free to provide another location where they should be stored. + | + */ + + 'files' => storage_path('framework/sessions'), + + /* + |-------------------------------------------------------------------------- + | Session Database Connection + |-------------------------------------------------------------------------- + | + | When using the "database" or "redis" session drivers, you may specify a + | connection that should be used to manage these sessions. This should + | correspond to a connection in your database configuration options. + | + */ + + 'connection' => env('SESSION_CONNECTION'), + + /* + |-------------------------------------------------------------------------- + | Session Database Table + |-------------------------------------------------------------------------- + | + | When using the "database" session driver, you may specify the table to + | be used to store sessions. Of course, a sensible default is defined + | for you; however, you're welcome to change this to another table. + | + */ + + 'table' => env('SESSION_TABLE', 'sessions'), + + /* + |-------------------------------------------------------------------------- + | Session Cache Store + |-------------------------------------------------------------------------- + | + | When using one of the framework's cache driven session backends, you may + | define the cache store which should be used to store the session data + | between requests. This must match one of your defined cache stores. + | + | Affects: "apc", "dynamodb", "memcached", "redis" + | + */ + + 'store' => env('SESSION_STORE'), + + /* + |-------------------------------------------------------------------------- + | Session Sweeping Lottery + |-------------------------------------------------------------------------- + | + | Some session drivers must manually sweep their storage location to get + | rid of old sessions from storage. Here are the chances that it will + | happen on a given request. By default, the odds are 2 out of 100. + | + */ + + 'lottery' => [2, 100], + + /* + |-------------------------------------------------------------------------- + | Session Cookie Name + |-------------------------------------------------------------------------- + | + | Here you may change the name of the session cookie that is created by + | the framework. Typically, you should not need to change this value + | since doing so does not grant a meaningful security improvement. + | + */ + + 'cookie' => env( + 'SESSION_COOKIE', + Str::slug(env('APP_NAME', 'laravel'), '_').'_session' + ), + + /* + |-------------------------------------------------------------------------- + | Session Cookie Path + |-------------------------------------------------------------------------- + | + | The session cookie path determines the path for which the cookie will + | be regarded as available. Typically, this will be the root path of + | your application, but you're free to change this when necessary. + | + */ + + 'path' => env('SESSION_PATH', '/'), + + /* + |-------------------------------------------------------------------------- + | Session Cookie Domain + |-------------------------------------------------------------------------- + | + | This value determines the domain and subdomains the session cookie is + | available to. By default, the cookie will be available to the root + | domain and all subdomains. Typically, this shouldn't be changed. + | + */ + + 'domain' => env('SESSION_DOMAIN'), + + /* + |-------------------------------------------------------------------------- + | HTTPS Only Cookies + |-------------------------------------------------------------------------- + | + | By setting this option to true, session cookies will only be sent back + | to the server if the browser has a HTTPS connection. This will keep + | the cookie from being sent to you when it can't be done securely. + | + */ + + 'secure' => env('SESSION_SECURE_COOKIE'), + + /* + |-------------------------------------------------------------------------- + | HTTP Access Only + |-------------------------------------------------------------------------- + | + | Setting this value to true will prevent JavaScript from accessing the + | value of the cookie and the cookie will only be accessible through + | the HTTP protocol. It's unlikely you should disable this option. + | + */ + + 'http_only' => env('SESSION_HTTP_ONLY', true), + + /* + |-------------------------------------------------------------------------- + | Same-Site Cookies + |-------------------------------------------------------------------------- + | + | This option determines how your cookies behave when cross-site requests + | take place, and can be used to mitigate CSRF attacks. By default, we + | will set this value to "lax" to permit secure cross-site requests. + | + | See: https://developer.mozilla.org/en-US/docs/Web/HTTP/Headers/Set-Cookie#samesitesamesite-value + | + | Supported: "lax", "strict", "none", null + | + */ + + 'same_site' => env('SESSION_SAME_SITE', 'lax'), + + /* + |-------------------------------------------------------------------------- + | Partitioned Cookies + |-------------------------------------------------------------------------- + | + | Setting this value to true will tie the cookie to the top-level site for + | a cross-site context. Partitioned cookies are accepted by the browser + | when flagged "secure" and the Same-Site attribute is set to "none". + | + */ + + 'partitioned' => env('SESSION_PARTITIONED_COOKIE', false), + +]; diff --git a/config/tinker.php b/config/tinker.php new file mode 100644 index 0000000..c187942 --- /dev/null +++ b/config/tinker.php @@ -0,0 +1,50 @@ + [ + // App\Console\Commands\ExampleCommand::class, + ], + + /* + |-------------------------------------------------------------------------- + | Auto Aliased Classes + |-------------------------------------------------------------------------- + | + | Tinker will not automatically alias classes in your vendor namespaces + | but you may explicitly allow a subset of classes to get aliased by + | adding the names of each of those classes to the following list. + | + */ + + 'alias' => [ + // + ], + + /* + |-------------------------------------------------------------------------- + | Classes That Should Not Be Aliased + |-------------------------------------------------------------------------- + | + | Typically, Tinker automatically aliases classes as you require them in + | Tinker. However, you may wish to never alias certain classes, which + | you may accomplish by listing the classes in the following array. + | + */ + + 'dont_alias' => [ + 'App\Nova', + ], + +]; diff --git a/database/.gitignore b/database/.gitignore new file mode 100644 index 0000000..9b19b93 --- /dev/null +++ b/database/.gitignore @@ -0,0 +1 @@ +*.sqlite* diff --git a/database/factories/AlternatifFactory.php b/database/factories/AlternatifFactory.php new file mode 100644 index 0000000..ba0749d --- /dev/null +++ b/database/factories/AlternatifFactory.php @@ -0,0 +1,39 @@ + + */ +class AlternatifFactory extends Factory +{ + /** + * Define the model's default state. + * + * @return array + */ + public function definition(): array + { + return [ + 'nip' => $this->generateNIP(), + 'name' => $this->faker->name(), + ]; + } + + private function generateNIP(): string + { + $tahun_lahir = $this->faker->numberBetween(1950, 2000); + $bulan_lahir = str_pad($this->faker->numberBetween(1, 12), 2, '0', STR_PAD_LEFT); + $tanggal_lahir = str_pad($this->faker->numberBetween(1, 28), 2, '0', STR_PAD_LEFT); + + $tahun_pns = $this->faker->numberBetween(1990, 2023); + $bulan_pns = str_pad($this->faker->numberBetween(1, 12), 2, '0', STR_PAD_LEFT); + + $golongan = $this->faker->numberBetween(1, 4); + $urutan = str_pad($this->faker->numberBetween(1, 999), 3, '0', STR_PAD_LEFT); + + return "{$tahun_lahir}{$bulan_lahir}{$tanggal_lahir} {$tahun_pns}{$bulan_pns} {$golongan} {$urutan}"; + } +} diff --git a/database/factories/SubmissionDetailFactory.php b/database/factories/SubmissionDetailFactory.php new file mode 100644 index 0000000..acf77f4 --- /dev/null +++ b/database/factories/SubmissionDetailFactory.php @@ -0,0 +1,26 @@ + + */ +class SubmissionDetailFactory extends Factory +{ + /** + * Define the model's default state. + * + * @return array + */ + public function definition(): array + { + return [ + 'id_submission' => Submissions::factory(), + 'id_alternatif' => Alternatif::factory(), + ]; + } +} diff --git a/database/factories/SubmissionsFactory.php b/database/factories/SubmissionsFactory.php new file mode 100644 index 0000000..230015b --- /dev/null +++ b/database/factories/SubmissionsFactory.php @@ -0,0 +1,27 @@ + + */ +class SubmissionsFactory extends Factory +{ + /** + * Define the model's default state. + * + * @return array + */ + public function definition(): array + { + return [ + 'id' => User::factory(), + 'judul' => $this->faker->sentence(), + 'deskripsi' => $this->faker->text(), + 'prodi' => 'Teknik Informatika', + ]; + } +} \ No newline at end of file diff --git a/database/factories/UserFactory.php b/database/factories/UserFactory.php new file mode 100644 index 0000000..1695866 --- /dev/null +++ b/database/factories/UserFactory.php @@ -0,0 +1,45 @@ + + */ +class UserFactory extends Factory +{ + /** + * The current password being used by the factory. + */ + protected static ?string $password; + + /** + * Define the model's default state. + * + * @return array + */ + public function definition(): array + { + return [ + 'nim' => 'E421' . str_pad(random_int(0, 99999), 5, '0', STR_PAD_LEFT), + 'name' => fake()->name(), + 'email' => fake()->unique()->safeEmail(), + 'email_verified_at' => now(), + 'password' => static::$password ??= Hash::make('password'), + 'remember_token' => Str::random(10), + ]; + } + + /** + * Indicate that the model's email address should be unverified. + */ + public function unverified(): static + { + return $this->state(fn (array $attributes) => [ + 'email_verified_at' => null, + ]); + } +} \ No newline at end of file diff --git a/database/migrations/0001_01_01_000000_create_users_table.php b/database/migrations/0001_01_01_000000_create_users_table.php new file mode 100644 index 0000000..11d6591 --- /dev/null +++ b/database/migrations/0001_01_01_000000_create_users_table.php @@ -0,0 +1,51 @@ +id(); + $table->string('nim')->uniqid()->nullable(); + $table->string('name'); + $table->string('email')->unique(); + $table->timestamp('email_verified_at')->nullable(); + $table->string('password'); + $table->rememberToken(); + $table->timestamps(); + }); + + Schema::create('password_reset_tokens', function (Blueprint $table) { + $table->string('email')->primary(); + $table->string('token'); + $table->timestamp('created_at')->nullable(); + }); + + Schema::create('sessions', function (Blueprint $table) { + $table->string('id')->primary(); + $table->foreignId('user_id')->nullable()->index(); + $table->string('ip_address', 45)->nullable(); + $table->text('user_agent')->nullable(); + $table->longText('payload'); + $table->integer('last_activity')->index(); + }); + } + + /** + * Reverse the migrations. + */ + public function down(): void + { + Schema::dropIfExists('users'); + Schema::dropIfExists('password_reset_tokens'); + Schema::dropIfExists('sessions'); + } +}; \ No newline at end of file diff --git a/database/migrations/0001_01_01_000001_create_cache_table.php b/database/migrations/0001_01_01_000001_create_cache_table.php new file mode 100644 index 0000000..b9c106b --- /dev/null +++ b/database/migrations/0001_01_01_000001_create_cache_table.php @@ -0,0 +1,35 @@ +string('key')->primary(); + $table->mediumText('value'); + $table->integer('expiration'); + }); + + Schema::create('cache_locks', function (Blueprint $table) { + $table->string('key')->primary(); + $table->string('owner'); + $table->integer('expiration'); + }); + } + + /** + * Reverse the migrations. + */ + public function down(): void + { + Schema::dropIfExists('cache'); + Schema::dropIfExists('cache_locks'); + } +}; diff --git a/database/migrations/0001_01_01_000002_create_jobs_table.php b/database/migrations/0001_01_01_000002_create_jobs_table.php new file mode 100644 index 0000000..425e705 --- /dev/null +++ b/database/migrations/0001_01_01_000002_create_jobs_table.php @@ -0,0 +1,57 @@ +id(); + $table->string('queue')->index(); + $table->longText('payload'); + $table->unsignedTinyInteger('attempts'); + $table->unsignedInteger('reserved_at')->nullable(); + $table->unsignedInteger('available_at'); + $table->unsignedInteger('created_at'); + }); + + Schema::create('job_batches', function (Blueprint $table) { + $table->string('id')->primary(); + $table->string('name'); + $table->integer('total_jobs'); + $table->integer('pending_jobs'); + $table->integer('failed_jobs'); + $table->longText('failed_job_ids'); + $table->mediumText('options')->nullable(); + $table->integer('cancelled_at')->nullable(); + $table->integer('created_at'); + $table->integer('finished_at')->nullable(); + }); + + Schema::create('failed_jobs', function (Blueprint $table) { + $table->id(); + $table->string('uuid')->unique(); + $table->text('connection'); + $table->text('queue'); + $table->longText('payload'); + $table->longText('exception'); + $table->timestamp('failed_at')->useCurrent(); + }); + } + + /** + * Reverse the migrations. + */ + public function down(): void + { + Schema::dropIfExists('jobs'); + Schema::dropIfExists('job_batches'); + Schema::dropIfExists('failed_jobs'); + } +}; diff --git a/database/migrations/2025_01_04_162405_create_permission_tables.php b/database/migrations/2025_01_04_162405_create_permission_tables.php new file mode 100644 index 0000000..9c7044b --- /dev/null +++ b/database/migrations/2025_01_04_162405_create_permission_tables.php @@ -0,0 +1,140 @@ +engine('InnoDB'); + $table->bigIncrements('id'); // permission id + $table->string('name'); // For MyISAM use string('name', 225); // (or 166 for InnoDB with Redundant/Compact row format) + $table->string('guard_name'); // For MyISAM use string('guard_name', 25); + $table->timestamps(); + + $table->unique(['name', 'guard_name']); + }); + + Schema::create($tableNames['roles'], function (Blueprint $table) use ($teams, $columnNames) { + //$table->engine('InnoDB'); + $table->bigIncrements('id'); // role id + if ($teams || config('permission.testing')) { // permission.testing is a fix for sqlite testing + $table->unsignedBigInteger($columnNames['team_foreign_key'])->nullable(); + $table->index($columnNames['team_foreign_key'], 'roles_team_foreign_key_index'); + } + $table->string('name'); // For MyISAM use string('name', 225); // (or 166 for InnoDB with Redundant/Compact row format) + $table->string('guard_name'); // For MyISAM use string('guard_name', 25); + $table->timestamps(); + if ($teams || config('permission.testing')) { + $table->unique([$columnNames['team_foreign_key'], 'name', 'guard_name']); + } else { + $table->unique(['name', 'guard_name']); + } + }); + + Schema::create($tableNames['model_has_permissions'], function (Blueprint $table) use ($tableNames, $columnNames, $pivotPermission, $teams) { + $table->unsignedBigInteger($pivotPermission); + + $table->string('model_type'); + $table->unsignedBigInteger($columnNames['model_morph_key']); + $table->index([$columnNames['model_morph_key'], 'model_type'], 'model_has_permissions_model_id_model_type_index'); + + $table->foreign($pivotPermission) + ->references('id') // permission id + ->on($tableNames['permissions']) + ->onDelete('cascade'); + if ($teams) { + $table->unsignedBigInteger($columnNames['team_foreign_key']); + $table->index($columnNames['team_foreign_key'], 'model_has_permissions_team_foreign_key_index'); + + $table->primary([$columnNames['team_foreign_key'], $pivotPermission, $columnNames['model_morph_key'], 'model_type'], + 'model_has_permissions_permission_model_type_primary'); + } else { + $table->primary([$pivotPermission, $columnNames['model_morph_key'], 'model_type'], + 'model_has_permissions_permission_model_type_primary'); + } + + }); + + Schema::create($tableNames['model_has_roles'], function (Blueprint $table) use ($tableNames, $columnNames, $pivotRole, $teams) { + $table->unsignedBigInteger($pivotRole); + + $table->string('model_type'); + $table->unsignedBigInteger($columnNames['model_morph_key']); + $table->index([$columnNames['model_morph_key'], 'model_type'], 'model_has_roles_model_id_model_type_index'); + + $table->foreign($pivotRole) + ->references('id') // role id + ->on($tableNames['roles']) + ->onDelete('cascade'); + if ($teams) { + $table->unsignedBigInteger($columnNames['team_foreign_key']); + $table->index($columnNames['team_foreign_key'], 'model_has_roles_team_foreign_key_index'); + + $table->primary([$columnNames['team_foreign_key'], $pivotRole, $columnNames['model_morph_key'], 'model_type'], + 'model_has_roles_role_model_type_primary'); + } else { + $table->primary([$pivotRole, $columnNames['model_morph_key'], 'model_type'], + 'model_has_roles_role_model_type_primary'); + } + }); + + Schema::create($tableNames['role_has_permissions'], function (Blueprint $table) use ($tableNames, $pivotRole, $pivotPermission) { + $table->unsignedBigInteger($pivotPermission); + $table->unsignedBigInteger($pivotRole); + + $table->foreign($pivotPermission) + ->references('id') // permission id + ->on($tableNames['permissions']) + ->onDelete('cascade'); + + $table->foreign($pivotRole) + ->references('id') // role id + ->on($tableNames['roles']) + ->onDelete('cascade'); + + $table->primary([$pivotPermission, $pivotRole], 'role_has_permissions_permission_id_role_id_primary'); + }); + + app('cache') + ->store(config('permission.cache.store') != 'default' ? config('permission.cache.store') : null) + ->forget(config('permission.cache.key')); + } + + /** + * Reverse the migrations. + */ + public function down(): void + { + $tableNames = config('permission.table_names'); + + if (empty($tableNames)) { + throw new \Exception('Error: config/permission.php not found and defaults could not be merged. Please publish the package configuration before proceeding, or drop the tables manually.'); + } + + Schema::drop($tableNames['role_has_permissions']); + Schema::drop($tableNames['model_has_roles']); + Schema::drop($tableNames['model_has_permissions']); + Schema::drop($tableNames['roles']); + Schema::drop($tableNames['permissions']); + } +}; diff --git a/database/migrations/2025_01_04_164804_create_settings_table.php b/database/migrations/2025_01_04_164804_create_settings_table.php new file mode 100644 index 0000000..013fe79 --- /dev/null +++ b/database/migrations/2025_01_04_164804_create_settings_table.php @@ -0,0 +1,33 @@ +increments('id'); + $table->string('key')->nullable(); + $table->string('locale', 10)->nullable(); + $table->text('value')->nullable(); + $table->text('additional_value')->nullable(); + $table->json('json_value')->nullable(); + $table->json('additional_json_value')->nullable(); + $table->timestamps(); + }); + } + + /** + * Reverse the migrations. + */ + public function down(): void + { + Schema::dropIfExists('settings'); + } +}; \ No newline at end of file diff --git a/database/migrations/2025_01_05_054619_create_aspek_table.php b/database/migrations/2025_01_05_054619_create_aspek_table.php new file mode 100644 index 0000000..e739b18 --- /dev/null +++ b/database/migrations/2025_01_05_054619_create_aspek_table.php @@ -0,0 +1,31 @@ +id('id_aspek'); + $table->string('kode_aspek')->unique(); + $table->string('aspek_name')->unique(); + $table->float('persentase', 3, 2); + $table->string('keterangan'); + $table->timestamps(); + }); + } + + /** + * Reverse the migrations. + */ + public function down(): void + { + Schema::dropIfExists('aspek'); + } +}; \ No newline at end of file diff --git a/database/migrations/2025_01_05_074311_create_kriteria_table.php b/database/migrations/2025_01_05_074311_create_kriteria_table.php new file mode 100644 index 0000000..3355810 --- /dev/null +++ b/database/migrations/2025_01_05_074311_create_kriteria_table.php @@ -0,0 +1,33 @@ +id('id_kriteria'); + $table->string('kode_kriteria')->unique(); + $table->unsignedBigInteger('id_aspek'); + $table->foreign('id_aspek')->references('id_aspek')->on('aspek')->onUpdate('cascade')->onDelete('cascade'); + $table->string('kriteria_name')->unique(); + $table->enum('tipe', ['Core Factor', 'Secondary Factor']); + $table->string('keterangan'); + $table->timestamps(); + }); + } + + /** + * Reverse the migrations. + */ + public function down(): void + { + Schema::dropIfExists('kriteria'); + } +}; diff --git a/database/migrations/2025_01_07_032650_create_subkriteria_table.php b/database/migrations/2025_01_07_032650_create_subkriteria_table.php new file mode 100644 index 0000000..fc74420 --- /dev/null +++ b/database/migrations/2025_01_07_032650_create_subkriteria_table.php @@ -0,0 +1,30 @@ +id('id_subkriteria'); + $table->unsignedBigInteger('id_kriteria'); + $table->foreign('id_kriteria')->references('id_kriteria')->on('kriteria')->onUpdate('cascade')->onDelete('cascade'); + $table->string('subkriteria_name'); + $table->timestamps(); + }); + } + + /** + * Reverse the migrations. + */ + public function down(): void + { + Schema::dropIfExists('subkriteria'); + } +}; \ No newline at end of file diff --git a/database/migrations/2025_01_07_113557_create_alternatif_table.php b/database/migrations/2025_01_07_113557_create_alternatif_table.php new file mode 100644 index 0000000..e5cd166 --- /dev/null +++ b/database/migrations/2025_01_07_113557_create_alternatif_table.php @@ -0,0 +1,29 @@ +id('id_alternatif'); + $table->string('nip')->unique(); + $table->string('name'); + $table->timestamps(); + }); + } + + /** + * Reverse the migrations. + */ + public function down(): void + { + Schema::dropIfExists('alternatif'); + } +}; \ No newline at end of file diff --git a/database/migrations/2025_01_07_113638_create_profile_method_table.php b/database/migrations/2025_01_07_113638_create_profile_method_table.php new file mode 100644 index 0000000..ec9d919 --- /dev/null +++ b/database/migrations/2025_01_07_113638_create_profile_method_table.php @@ -0,0 +1,35 @@ +id('id_profile')->primary(); + $table->unsignedBigInteger('id_alternatif'); + $table->foreign('id_alternatif')->references('id_alternatif')->on('alternatif')->onUpdate('cascade')->onDelete('cascade'); + $table->unsignedBigInteger('id_kriteria'); + $table->foreign('id_kriteria')->references('id_kriteria')->on('kriteria')->onUpdate('cascade')->onDelete('cascade'); + $table->unsignedBigInteger('id_subkriteria'); + $table->foreign('id_subkriteria')->references('id_subkriteria')->on('subkriteria')->onUpdate('cascade')->onDelete('cascade'); + // $table->unsignedBigInteger('id_nilai'); + // $table->foreign('id_nilai')->references('id_nilai')->on('nilai')->onUpdate('cascade')->onDelete('cascade'); + $table->timestamps(); + }); + } + + /** + * Reverse the migrations. + */ + public function down(): void + { + Schema::dropIfExists('profile_method'); + } +}; \ No newline at end of file diff --git a/database/migrations/2025_01_07_141505_create_submission_table.php b/database/migrations/2025_01_07_141505_create_submission_table.php new file mode 100644 index 0000000..9813d20 --- /dev/null +++ b/database/migrations/2025_01_07_141505_create_submission_table.php @@ -0,0 +1,32 @@ +id('id_submission'); + $table->unsignedBigInteger('id'); + $table->foreign('id')->references('id')->on('users')->onUpdate('cascade')->onDelete('cascade'); + $table->string('judul'); + $table->string('deskripsi'); + $table->string('prodi'); + $table->timestamps(); + }); + } + + /** + * Reverse the migrations. + */ + public function down(): void + { + Schema::dropIfExists('submission'); + } +}; \ No newline at end of file diff --git a/database/migrations/2025_01_13_091619_create_personal_access_tokens_table.php b/database/migrations/2025_01_13_091619_create_personal_access_tokens_table.php new file mode 100644 index 0000000..e828ad8 --- /dev/null +++ b/database/migrations/2025_01_13_091619_create_personal_access_tokens_table.php @@ -0,0 +1,33 @@ +id(); + $table->morphs('tokenable'); + $table->string('name'); + $table->string('token', 64)->unique(); + $table->text('abilities')->nullable(); + $table->timestamp('last_used_at')->nullable(); + $table->timestamp('expires_at')->nullable(); + $table->timestamps(); + }); + } + + /** + * Reverse the migrations. + */ + public function down(): void + { + Schema::dropIfExists('personal_access_tokens'); + } +}; diff --git a/database/migrations/2025_02_15_115744_add_google_id_to_users_table.php b/database/migrations/2025_02_15_115744_add_google_id_to_users_table.php new file mode 100644 index 0000000..1eb7a34 --- /dev/null +++ b/database/migrations/2025_02_15_115744_add_google_id_to_users_table.php @@ -0,0 +1,28 @@ +string('google_id')->after('remember_token')->nullable()->unique(); + }); + } + + /** + * Reverse the migrations. + */ + public function down(): void + { + Schema::table('users', function (Blueprint $table) { + $table->dropColumn('google_id'); + }); + } +}; \ No newline at end of file diff --git a/database/migrations/2025_02_20_234222_create_submission_detail_table.php b/database/migrations/2025_02_20_234222_create_submission_detail_table.php new file mode 100644 index 0000000..82b2d39 --- /dev/null +++ b/database/migrations/2025_02_20_234222_create_submission_detail_table.php @@ -0,0 +1,31 @@ +id('id_submission_detail'); + $table->unsignedBigInteger('id_submission'); + $table->foreign('id_submission')->references('id_submission')->on('submission')->onUpdate('cascade')->onDelete('cascade'); + $table->unsignedBigInteger('id_alternatif'); + $table->foreign('id_alternatif')->references('id_alternatif')->on('alternatif')->onUpdate('cascade')->onDelete('cascade'); + $table->timestamps(); + }); + } + + /** + * Reverse the migrations. + */ + public function down(): void + { + Schema::dropIfExists('submission_detail'); + } +}; \ No newline at end of file diff --git a/database/migrations/2025_02_23_155439_create_nilai_table.php b/database/migrations/2025_02_23_155439_create_nilai_table.php new file mode 100644 index 0000000..06ce503 --- /dev/null +++ b/database/migrations/2025_02_23_155439_create_nilai_table.php @@ -0,0 +1,28 @@ +id('id_nilai'); + $table->float('value'); + $table->timestamps(); + }); + } + + /** + * Reverse the migrations. + */ + public function down(): void + { + Schema::dropIfExists('nilai'); + } +}; diff --git a/database/migrations/2025_02_23_172822_add_id_nilai_column_to_subkriteria_table.php b/database/migrations/2025_02_23_172822_add_id_nilai_column_to_subkriteria_table.php new file mode 100644 index 0000000..e47c0fd --- /dev/null +++ b/database/migrations/2025_02_23_172822_add_id_nilai_column_to_subkriteria_table.php @@ -0,0 +1,29 @@ +unsignedBigInteger('id_nilai')->after('subkriteria_name'); + $table->foreign('id_nilai')->references('id_nilai')->on('nilai')->onUpdate('cascade')->onDelete('cascade'); + }); + } + + /** + * Reverse the migrations. + */ + public function down(): void + { + Schema::table('subkriteria', function (Blueprint $table) { + $table->dropColumn('id_nilai'); + }); + } +}; diff --git a/database/migrations/2025_02_25_121610_create_angkatan_table.php b/database/migrations/2025_02_25_121610_create_angkatan_table.php new file mode 100644 index 0000000..355ed90 --- /dev/null +++ b/database/migrations/2025_02_25_121610_create_angkatan_table.php @@ -0,0 +1,29 @@ +id('id_angkatan'); + $table->string('tahun'); + // $table->float('jumlah_mahasiswa'); + $table->timestamps(); + }); + } + + /** + * Reverse the migrations. + */ + public function down(): void + { + Schema::dropIfExists('angkatan'); + } +}; \ No newline at end of file diff --git a/database/migrations/2025_02_25_143745_create_izin_pengajuan_table.php b/database/migrations/2025_02_25_143745_create_izin_pengajuan_table.php new file mode 100644 index 0000000..972040d --- /dev/null +++ b/database/migrations/2025_02_25_143745_create_izin_pengajuan_table.php @@ -0,0 +1,28 @@ +id('id_pengaturan'); + $table->enum('izin', ['on', 'off'])->default('on'); + $table->timestamps(); + }); + } + + /** + * Reverse the migrations. + */ + public function down(): void + { + Schema::dropIfExists('izin_pengajuan'); + } +}; \ No newline at end of file diff --git a/database/migrations/2025_02_25_144050_add_angkatan_column_to_users_table.php b/database/migrations/2025_02_25_144050_add_angkatan_column_to_users_table.php new file mode 100644 index 0000000..8fed2f7 --- /dev/null +++ b/database/migrations/2025_02_25_144050_add_angkatan_column_to_users_table.php @@ -0,0 +1,29 @@ +unsignedBigInteger('id_angkatan')->after('password')->nullable(); + $table->foreign('id_angkatan')->references('id_angkatan')->on('angkatan')->onUpdate('cascade')->onDelete('cascade'); + }); + } + + /** + * Reverse the migrations. + */ + public function down(): void + { + Schema::table('users', function (Blueprint $table) { + $table->dropColumn('id_angkatan'); + }); + } +}; \ No newline at end of file diff --git a/database/migrations/create_kuota_table b/database/migrations/create_kuota_table new file mode 100644 index 0000000..089a2fe --- /dev/null +++ b/database/migrations/create_kuota_table @@ -0,0 +1,30 @@ +id('id_kuota'); + // $table->unsignedBigInteger('id_angkatan')->nullable(); + // $table->foreign('id_angkatan')->references('id_angkatan')->on('angkatan')->onUpdate('cascade')->onDelete('cascade'); + // $table->float('max'); + // $table->timestamps(); + // }); + // } + + /** + * Reverse the migrations. + */ + // public function down(): void + // { + // Schema::dropIfExists('kuota'); + // } +}; diff --git a/database/migrations/noted.add_id_angkatan_column_to_profile_method_table b/database/migrations/noted.add_id_angkatan_column_to_profile_method_table new file mode 100644 index 0000000..edc5d74 --- /dev/null +++ b/database/migrations/noted.add_id_angkatan_column_to_profile_method_table @@ -0,0 +1,29 @@ +unsignedBigInteger('id_angkatan')->after('id_profile')->nullable(); + // $table->foreign('id_angkatan')->references('id_angkatan')->on('angkatan')->onUpdate('cascade')->onDelete('cascade'); + // }); + // } + + /** + * Reverse the migrations. + */ + // public function down(): void + // { + // Schema::table('profile_method', function (Blueprint $table) { + // $table->dropColumn('id_angkatan'); + // }); + // } +// }; \ No newline at end of file diff --git a/database/seeders/AlternatifSeeder.php b/database/seeders/AlternatifSeeder.php new file mode 100644 index 0000000..44cd839 --- /dev/null +++ b/database/seeders/AlternatifSeeder.php @@ -0,0 +1,139 @@ +insert([ + [ + 'nip' => '19711009 200312 1 001', + 'name' => 'Dr. Denny Trias Utomo, S.Si, M.T', + 'created_at' => now(), + 'updated_at' => now(), + ], + [ + 'nip' => '19740519 200312 1 002', + 'name' => 'Nugroho Setyo Wibowo, ST. MT', + 'created_at' => now(), + 'updated_at' => now(), + ], + [ + 'nip' => '19801212 200501 1 001', + 'name' => 'Prawidya Destarianto, S.Kom, M.T', + 'created_at' => now(), + 'updated_at' => now(), + ], + [ + 'nip' => '19810615 200604 1 002', + 'name' => 'Syamsul Arifin, S.Kom, M.Cs', + 'created_at' => now(), + 'updated_at' => now(), + ], + [ + 'nip' => '19700831 199803 1 001', + 'name' => 'Moh. Munih Dian Widianta, S.Kom, M.T', + 'created_at' => now(), + 'updated_at' => now(), + ], + [ + 'nip' => '19770929 200501 1 003', + 'name' => 'Didit Rahmat Hartadi, S.Kom, MT', + 'created_at' => now(), + 'updated_at' => now(), + ], + [ + 'nip' => '19781011 200501 2 002', + 'name' => 'Elly Antika, ST, M.Kom', + 'created_at' => now(), + 'updated_at' => now(), + ], + [ + 'nip' => '19830109 201803 1 001', + 'name' => 'Hermawan Arief Putranto, ST, MT', + 'created_at' => now(), + 'updated_at' => now(), + ], + [ + 'nip' => '19851128 200812 1 002', + 'name' => 'Aji Seto Arifianto, S.ST., M.T.', + 'created_at' => now(), + 'updated_at' => now(), + ], + [ + 'nip' => '19860802 201504 2 002', + 'name' => 'Ratih Ayuninghemi, S.ST, M.Kom', + 'created_at' => now(), + 'updated_at' => now(), + ], + [ + 'nip' => '19920528 201803 2 001', + 'name' => 'Bety Etikasari, S.Pd, M.Pd', + 'created_at' => now(), + 'updated_at' => now(), + ], + [ + 'nip' => '19900227 201803 2 001', + 'name' => 'Trismayanti Dwi P, S.Kom, M.Cs', + 'created_at' => now(), + 'updated_at' => now(), + ], + [ + 'nip' => '19920302 201803 2 001', + 'name' => 'Zilvanhisna Emka Fitri, ST. MT', + 'created_at' => now(), + 'updated_at' => now(), + ], + [ + 'nip' => '19890710 201903 1 010', + 'name' => 'Ery Setiyawan Jullev Atmadji, S.Kom, M.Cs', + 'created_at' => now(), + 'updated_at' => now(), + ], + [ + 'nip' => '19940812 201903 1 013', + 'name' => 'Mukhamad Angga Gumilang, S. Pd., M. Eng.', + 'created_at' => now(), + 'updated_at' => now(), + ], + [ + 'nip' => '19930508 202203 2 013', + 'name' => 'Dia Bitari Mei Yuana, S.ST., M.Tr.Kom.', + 'created_at' => now(), + 'updated_at' => now(), + ], + [ + 'nip' => '19921227 202203 1 007', + 'name' => 'Choirul Huda, S.Kom., M.Kom.', + 'created_at' => now(), + 'updated_at' => now(), + ], + [ + 'nip' => '19930831 202406 2 001', + 'name' => 'Arvita Agus Kurniasari, S.ST.,M.Tr.Kom', + 'created_at' => now(), + 'updated_at' => now(), + ], + [ + 'nip' => '19900702 202406 1 002', + 'name' => 'David Juli Ariyadi, S.Kom., M.Kom.', + 'created_at' => now(), + 'updated_at' => now(), + ], + [ + 'nip' => '19950602 202406 2 005', + 'name' => 'Fatimatuzzahra, S.Kom., M.Kom', + 'created_at' => now(), + 'updated_at' => now(), + ], + ]); + } +} \ No newline at end of file diff --git a/database/seeders/AspekSeeder.php b/database/seeders/AspekSeeder.php new file mode 100644 index 0000000..fa0d80e --- /dev/null +++ b/database/seeders/AspekSeeder.php @@ -0,0 +1,43 @@ +insert([ + [ + 'kode_aspek' => 'A001', + 'aspek_name' => 'Kuota Bimbingan', + 'persentase' => 45, + 'keterangan' => 'Aspek ini mengukur jumlah maksimum bimbingan oleh seorang dosen pada satu periode tertentu.', + 'created_at' => now(), + 'updated_at' => now(), + ], + [ + 'kode_aspek' => 'A002', + 'aspek_name' => 'Bidang Keahlian', + 'persentase' => 35, + 'keterangan' => 'Aspek ini mengukur kesesuaian antara topik skripsi mahasiswa dengan bidang keahlian dosen.', + 'created_at' => now(), + 'updated_at' => now(), + ], + [ + 'kode_aspek' => 'A003', + 'aspek_name' => 'Riset Penelitian', + 'persentase' => 20, + 'keterangan' => 'Aspek ini mengukur pengalaman dosen dalam kegiatan riset dan penelitian yang relevan dengan topik skripsi mahasiswa.', + 'created_at' => now(), + 'updated_at' => now(), + ], + ]); + } +} \ No newline at end of file diff --git a/database/seeders/DatabaseSeeder.php b/database/seeders/DatabaseSeeder.php new file mode 100644 index 0000000..ce239a0 --- /dev/null +++ b/database/seeders/DatabaseSeeder.php @@ -0,0 +1,30 @@ +call([ + RoleAndPermissionSeeder::class, + SettingSeeder::class, + AdminSeeder::class, + MahasiswaSeeder::class, + AspekSeeder::class, + KriteriaSeeder::class, + SubkriteriaSeeder::class, + AlternatifSeeder::class, + ProfileMethodSeeder::class, + // KuotaSeeder::class, + ]); + } +} \ No newline at end of file diff --git a/database/seeders/KriteriaSeeder.php b/database/seeders/KriteriaSeeder.php new file mode 100644 index 0000000..fb45f17 --- /dev/null +++ b/database/seeders/KriteriaSeeder.php @@ -0,0 +1,74 @@ +insert([ + [ + 'kode_kriteria' => 'K001', + 'id_aspek' => 1, + 'kriteria_name' => 'Jumlah Kuota Bimbingan', + 'tipe' => 'Core Factor', + 'keterangan' => 'Jumlah maksimal kuota mahasiswa yang dapat dibimbing.', + 'created_at' => now(), + 'updated_at' => now(), + ], + [ + 'kode_kriteria' => 'K002', + 'id_aspek' => 1, + 'kriteria_name' => 'Pemenuhan kuota bimbingan', + 'tipe' => 'Secondary Factor', + 'keterangan' => 'Pemenuhan jumlah maksimal kuota mahasiswa yang dapat dibimbing.', + 'created_at' => now(), + 'updated_at' => now(), + ], + [ + 'kode_kriteria' => 'K003', + 'id_aspek' => 2, + 'kriteria_name' => 'Keahlian Utama', + 'tipe' => 'Core Factor', + 'keterangan' => 'keahlian utama dosen yang dimiliki dosen', + 'created_at' => now(), + 'updated_at' => now(), + ], + [ + 'kode_kriteria' => 'K004', + 'id_aspek' => 2, + 'kriteria_name' => 'Pengalaman Dalam Bidang', + 'tipe' => 'Secondary Factor', + 'keterangan' => 'Jumlah tahun pengalaman dalam keahlian utama yang dimiliki dosen', + 'created_at' => now(), + 'updated_at' => now(), + ], + [ + 'kode_kriteria' => 'K005', + 'id_aspek' => 3, + 'kriteria_name' => 'Proyek Penelitian', + 'tipe' => 'Core Factor', + 'keterangan' => 'Jumlah tahun keterlibatan dalam proyek penelitian.', + 'created_at' => now(), + 'updated_at' => now(), + ], + [ + 'kode_kriteria' => 'K006', + 'id_aspek' => 3, + 'kriteria_name' => 'Jumlah Publikasi Ilmiah', + 'tipe' => 'Secondary Factor', + 'keterangan' => 'Jumlah artikel yang dipublikasikan di Google Scholar.', + 'created_at' => now(), + 'updated_at' => now(), + ], + ]); + } +} \ No newline at end of file diff --git a/database/seeders/KuotaSeeder.php b/database/seeders/KuotaSeeder.php new file mode 100644 index 0000000..9cdf944 --- /dev/null +++ b/database/seeders/KuotaSeeder.php @@ -0,0 +1,39 @@ +count(); + if ($totalAlternatif == 0) { + return; + } + + $angkatans = DB::table('angkatan')->get(); + + foreach ($angkatans as $angkatan) { + $max = $angkatan->jumlah_mahasiswa / $totalAlternatif; + + DB::table('kuota')->insert([ + 'id_angkatan' => $angkatan->id_angkatan, + 'max' => $max, + 'created_at' => now(), + 'updated_at' => now(), + ]); + } + } +} diff --git a/database/seeders/ProfileMethodSeeder.php b/database/seeders/ProfileMethodSeeder.php new file mode 100644 index 0000000..07e8575 --- /dev/null +++ b/database/seeders/ProfileMethodSeeder.php @@ -0,0 +1,1284 @@ +exists() || !DB::table('kuota')->exists() || !DB::table('alternatif')->exists() || !DB::table('subkriteria')->exists()) { + // return; + // } + + // $kuotas = DB::table('kuota')->pluck('max', 'id_angkatan'); + + // $alternatifs = DB::table('alternatif')->pluck('id_alternatif'); + + // $subkriteriaData = DB::table('subkriteria')->pluck('id', 'subkriteria_name'); + + // $alternatifSub = [ + // 1 => [7, 10, 15, 19, 22], + // 2 => [7, 10, 15, 18, 23], + // 3 => [7, 10, 14, 18, 25], + // 4 => [7, 10, 14, 18, 21], + // 5 => [7, 10, 15, 19, 24], + // 6 => [7, 10, 14, 18, 22], + // 7 => [7, 10, 14, 19, 22], + // 8 => [7, 10, 12, 18, 23], + // 9 => [7, 10, 14, 18, 24], + // 10 => [7, 10, 13, 20, 22], + // 11 => [7, 10, 12, 18, 24], + // 12 => [7, 10, 12, 18, 25], + // 13 => [7, 10, 12, 18, 25], + // 14 => [7, 10, 12, 18, 23], + // 15 => [7, 10, 12, 18, 22], + // 16 => [7, 10, 11, 19, 21], + // 17 => [7, 10, 11, 17, 21], + // 18 => [7, 10, 11, 18, 23], + // 19 => [7, 10, 11, 16, 21], + // 20 => [7, 10, 11, 17, 21], + // ]; + + // $max_to_subkriteria = []; + + // foreach ($subkriteriaData as $name => $id) { + // if (preg_match('/(\d+)\s*-\s*(\d+)/', $name, $matches)) { + // $angka = (int) $matches[2]; + // $max_to_subkriteria[$angka] = $id; + // } + // } + + $alternatifs = [ + 1 => [ + 1 => [ + ['id_subkriteria' => 4], + ], + 2 => [ + ['id_subkriteria' => 7], + ], + 3 => [ + ['id_subkriteria' => 10], + ], + 4 => [ + ['id_subkriteria' => 15] + ], + 5 => [ + ['id_subkriteria' => 19], + ], + 6 => [ + ['id_subkriteria' => 22], + ] + ], + 2 => [ + 1 => [ + ['id_subkriteria' => 4], + ], + 2 => [ + ['id_subkriteria' => 7], + ], + 3 => [ + ['id_subkriteria' => 10], + ], + 4 => [ + ['id_subkriteria' => 15], + ], + 5 => [ + ['id_subkriteria' => 18], + ], + 6 => [ + ['id_subkriteria' => 23], + ] + ], + 3 => [ + 1 => [ + ['id_subkriteria' => 4], + ], + 2 => [ + ['id_subkriteria' => 7], + ], + 3 => [ + ['id_subkriteria' => 10], + ], + 4 => [ + ['id_subkriteria' => 14], + ], + 5 => [ + ['id_subkriteria' => 18], + ], + 6 => [ + ['id_subkriteria' => 25], + ] + ], + 4 => [ + 1 => [ + ['id_subkriteria' => 4], + ], + 2 => [ + ['id_subkriteria' => 7], + ], + 3 => [ + ['id_subkriteria' => 10], + ], + 4 => [ + ['id_subkriteria' => 14], + ], + 5 => [ + ['id_subkriteria' => 18], + ], + 6 => [ + ['id_subkriteria' => 21], + ] + ], + 5 => [ + 1 => [ + ['id_subkriteria' => 4], + ], + 2 => [ + ['id_subkriteria' => 7], + ], + 3 => [ + ['id_subkriteria' => 10], + ], + 4 => [ + ['id_subkriteria' => 15], + ], + 5 => [ + ['id_subkriteria' => 19], + ], + 6 => [ + ['id_subkriteria' => 24], + ] + ], + 6 => [ + 1 => [ + ['id_subkriteria' => 4], + ], + 2 => [ + ['id_subkriteria' => 7], + ], + 3 => [ + ['id_subkriteria' => 10], + ], + 4 => [ + ['id_subkriteria' => 14], + ], + 5 => [ + ['id_subkriteria' => 18], + ], + 6 => [ + ['id_subkriteria' => 22], + ] + ], + 7 => [ + 1 => [ + ['id_subkriteria' => 4], + ], + 2 => [ + ['id_subkriteria' => 7], + ], + 3 => [ + ['id_subkriteria' => 10], + ], + 4 => [ + ['id_subkriteria' => 14], + ], + 5 => [ + ['id_subkriteria' => 19], + ], + 6 => [ + ['id_subkriteria' => 22], + ] + ], + 8 => [ + 1 => [ + ['id_subkriteria' => 4], + ], + 2 => [ + ['id_subkriteria' => 7], + ], + 3 => [ + ['id_subkriteria' => 10], + ], + 4 => [ + ['id_subkriteria' => 12], + ], + 5 => [ + ['id_subkriteria' => 18], + ], + 6 => [ + ['id_subkriteria' => 23], + ] + ], + 9 => [ + 1 => [ + ['id_subkriteria' => 4], + ], + 2 => [ + ['id_subkriteria' => 7], + ], + 3 => [ + ['id_subkriteria' => 10], + ], + 4 => [ + ['id_subkriteria' => 14], + ], + 5 => [ + ['id_subkriteria' => 18], + ], + 6 => [ + ['id_subkriteria' => 24], + ] + ], + 10 => [ + 1 => [ + ['id_subkriteria' => 4], + ], + 2 => [ + ['id_subkriteria' => 7], + ], + 3 => [ + ['id_subkriteria' => 10], + ], + 4 => [ + ['id_subkriteria' => 13], + ], + 5 => [ + ['id_subkriteria' => 20], + ], + 6 => [ + ['id_subkriteria' => 22], + ] + ], + 11 => [ + 1 => [ + ['id_subkriteria' => 4], + ], + 2 => [ + ['id_subkriteria' => 7], + ], + 3 => [ + ['id_subkriteria' => 10], + ], + 4 => [ + ['id_subkriteria' => 12], + ], + 5 => [ + ['id_subkriteria' => 18], + ], + 6 => [ + ['id_subkriteria' => 24], + ] + ], + 12 => [ + 1 => [ + ['id_subkriteria' => 4], + ], + 2 => [ + ['id_subkriteria' => 7], + ], + 3 => [ + ['id_subkriteria' => 10], + ], + 4 => [ + ['id_subkriteria' => 12], + ], + 5 => [ + ['id_subkriteria' => 18], + ], + 6 => [ + ['id_subkriteria' => 25], + ] + ], + 13 => [ + 1 => [ + ['id_subkriteria' => 4], + ], + 2 => [ + ['id_subkriteria' => 7], + ], + 3 => [ + ['id_subkriteria' => 10], + ], + 4 => [ + ['id_subkriteria' => 12], + ], + 5 => [ + ['id_subkriteria' => 18], + ], + 6 => [ + ['id_subkriteria' => 25], + ] + ], + 14 => [ + 1 => [ + ['id_subkriteria' => 4], + ], + 2 => [ + ['id_subkriteria' => 7], + ], + 3 => [ + ['id_subkriteria' => 10], + ], + 4 => [ + ['id_subkriteria' => 12], + ], + 5 => [ + ['id_subkriteria' => 18], + ], + 6 => [ + ['id_subkriteria' => 23], + ] + ], + 15 => [ + 1 => [ + ['id_subkriteria' => 4], + ], + 2 => [ + ['id_subkriteria' => 7], + ], + 3 => [ + ['id_subkriteria' => 10], + ], + 4 => [ + ['id_subkriteria' => 12], + ], + 5 => [ + ['id_subkriteria' => 18], + ], + 6 => [ + ['id_subkriteria' => 22], + ] + ], + 16 => [ + 1 => [ + ['id_subkriteria' => 4], + ], + 2 => [ + ['id_subkriteria' => 7], + ], + 3 => [ + ['id_subkriteria' => 10], + ], + 4 => [ + ['id_subkriteria' => 11], + ], + 5 => [ + ['id_subkriteria' => 19], + ], + 6 => [ + ['id_subkriteria' => 21], + ] + ], + 17 => [ + 1 => [ + ['id_subkriteria' => 4], + ], + 2 => [ + ['id_subkriteria' => 7], + ], + 3 => [ + ['id_subkriteria' => 10], + ], + 4 => [ + ['id_subkriteria' => 11], + ], + 5 => [ + ['id_subkriteria' => 17], + ], + 6 => [ + ['id_subkriteria' => 21], + ] + ], + 18 => [ + 1 => [ + ['id_subkriteria' => 4], + ], + 2 => [ + ['id_subkriteria' => 7], + ], + 3 => [ + ['id_subkriteria' => 10], + ], + 4 => [ + ['id_subkriteria' => 11], + ], + 5 => [ + ['id_subkriteria' => 18], + ], + 6 => [ + ['id_subkriteria' => 23], + ] + ], + 19 => [ + 1 => [ + ['id_subkriteria' => 4], + ], + 2 => [ + ['id_subkriteria' => 7], + ], + 3 => [ + ['id_subkriteria' => 10], + ], + 4 => [ + ['id_subkriteria' => 11], + ], + 5 => [ + ['id_subkriteria' => 16], + ], + 6 => [ + ['id_subkriteria' => 21], + ] + ], + 20 => [ + 1 => [ + ['id_subkriteria' => 4], + ], + 2 => [ + ['id_subkriteria' => 7], + ], + 3 => [ + ['id_subkriteria' => 10], + ], + 4 => [ + ['id_subkriteria' => 11], + ], + 5 => [ + ['id_subkriteria' => 17], + ], + 6 => [ + ['id_subkriteria' => 21], + ] + ], + // 1 => [ + + // ], + // 2 => [ + // 1 => [ + // 1 => [ + // ['id_subkriteria' => 4], + // ], + // 2 => [ + // ['id_subkriteria' => 7], + // ], + // 3 => [ + // ['id_subkriteria' => 10], + // ], + // 4 => [ + // ['id_subkriteria' => 15] + // ], + // 5 => [ + // ['id_subkriteria' => 19], + // ], + // 6 => [ + // ['id_subkriteria' => 22], + // ] + // ], + // 2 => [ + // 1 => [ + // ['id_subkriteria' => 4], + // ], + // 2 => [ + // ['id_subkriteria' => 7], + // ], + // 3 => [ + // ['id_subkriteria' => 10], + // ], + // 4 => [ + // ['id_subkriteria' => 15], + // ], + // 5 => [ + // ['id_subkriteria' => 18], + // ], + // 6 => [ + // ['id_subkriteria' => 23], + // ] + // ], + // 3 => [ + // 1 => [ + // ['id_subkriteria' => 4], + // ], + // 2 => [ + // ['id_subkriteria' => 7], + // ], + // 3 => [ + // ['id_subkriteria' => 10], + // ], + // 4 => [ + // ['id_subkriteria' => 14], + // ], + // 5 => [ + // ['id_subkriteria' => 18], + // ], + // 6 => [ + // ['id_subkriteria' => 25], + // ] + // ], + // 4 => [ + // 1 => [ + // ['id_subkriteria' => 4], + // ], + // 2 => [ + // ['id_subkriteria' => 7], + // ], + // 3 => [ + // ['id_subkriteria' => 10], + // ], + // 4 => [ + // ['id_subkriteria' => 14], + // ], + // 5 => [ + // ['id_subkriteria' => 18], + // ], + // 6 => [ + // ['id_subkriteria' => 21], + // ] + // ], + // 5 => [ + // 1 => [ + // ['id_subkriteria' => 4], + // ], + // 2 => [ + // ['id_subkriteria' => 7], + // ], + // 3 => [ + // ['id_subkriteria' => 10], + // ], + // 4 => [ + // ['id_subkriteria' => 15], + // ], + // 5 => [ + // ['id_subkriteria' => 19], + // ], + // 6 => [ + // ['id_subkriteria' => 24], + // ] + // ], + // 6 => [ + // 1 => [ + // ['id_subkriteria' => 4], + // ], + // 2 => [ + // ['id_subkriteria' => 7], + // ], + // 3 => [ + // ['id_subkriteria' => 10], + // ], + // 4 => [ + // ['id_subkriteria' => 14], + // ], + // 5 => [ + // ['id_subkriteria' => 18], + // ], + // 6 => [ + // ['id_subkriteria' => 22], + // ] + // ], + // 7 => [ + // 1 => [ + // ['id_subkriteria' => 4], + // ], + // 2 => [ + // ['id_subkriteria' => 7], + // ], + // 3 => [ + // ['id_subkriteria' => 10], + // ], + // 4 => [ + // ['id_subkriteria' => 14], + // ], + // 5 => [ + // ['id_subkriteria' => 19], + // ], + // 6 => [ + // ['id_subkriteria' => 22], + // ] + // ], + // 8 => [ + // 1 => [ + // ['id_subkriteria' => 4], + // ], + // 2 => [ + // ['id_subkriteria' => 7], + // ], + // 3 => [ + // ['id_subkriteria' => 10], + // ], + // 4 => [ + // ['id_subkriteria' => 12], + // ], + // 5 => [ + // ['id_subkriteria' => 18], + // ], + // 6 => [ + // ['id_subkriteria' => 23], + // ] + // ], + // 9 => [ + // 1 => [ + // ['id_subkriteria' => 4], + // ], + // 2 => [ + // ['id_subkriteria' => 7], + // ], + // 3 => [ + // ['id_subkriteria' => 10], + // ], + // 4 => [ + // ['id_subkriteria' => 14], + // ], + // 5 => [ + // ['id_subkriteria' => 18], + // ], + // 6 => [ + // ['id_subkriteria' => 24], + // ] + // ], + // 10 => [ + // 1 => [ + // ['id_subkriteria' => 4], + // ], + // 2 => [ + // ['id_subkriteria' => 7], + // ], + // 3 => [ + // ['id_subkriteria' => 10], + // ], + // 4 => [ + // ['id_subkriteria' => 13], + // ], + // 5 => [ + // ['id_subkriteria' => 20], + // ], + // 6 => [ + // ['id_subkriteria' => 22], + // ] + // ], + // 11 => [ + // 1 => [ + // ['id_subkriteria' => 4], + // ], + // 2 => [ + // ['id_subkriteria' => 7], + // ], + // 3 => [ + // ['id_subkriteria' => 10], + // ], + // 4 => [ + // ['id_subkriteria' => 12], + // ], + // 5 => [ + // ['id_subkriteria' => 18], + // ], + // 6 => [ + // ['id_subkriteria' => 24], + // ] + // ], + // 12 => [ + // 1 => [ + // ['id_subkriteria' => 4], + // ], + // 2 => [ + // ['id_subkriteria' => 7], + // ], + // 3 => [ + // ['id_subkriteria' => 10], + // ], + // 4 => [ + // ['id_subkriteria' => 12], + // ], + // 5 => [ + // ['id_subkriteria' => 18], + // ], + // 6 => [ + // ['id_subkriteria' => 25], + // ] + // ], + // 13 => [ + // 1 => [ + // ['id_subkriteria' => 4], + // ], + // 2 => [ + // ['id_subkriteria' => 7], + // ], + // 3 => [ + // ['id_subkriteria' => 10], + // ], + // 4 => [ + // ['id_subkriteria' => 12], + // ], + // 5 => [ + // ['id_subkriteria' => 18], + // ], + // 6 => [ + // ['id_subkriteria' => 25], + // ] + // ], + // 14 => [ + // 1 => [ + // ['id_subkriteria' => 4], + // ], + // 2 => [ + // ['id_subkriteria' => 7], + // ], + // 3 => [ + // ['id_subkriteria' => 10], + // ], + // 4 => [ + // ['id_subkriteria' => 12], + // ], + // 5 => [ + // ['id_subkriteria' => 18], + // ], + // 6 => [ + // ['id_subkriteria' => 23], + // ] + // ], + // 15 => [ + // 1 => [ + // ['id_subkriteria' => 4], + // ], + // 2 => [ + // ['id_subkriteria' => 7], + // ], + // 3 => [ + // ['id_subkriteria' => 10], + // ], + // 4 => [ + // ['id_subkriteria' => 12], + // ], + // 5 => [ + // ['id_subkriteria' => 18], + // ], + // 6 => [ + // ['id_subkriteria' => 22], + // ] + // ], + // 16 => [ + // 1 => [ + // ['id_subkriteria' => 4], + // ], + // 2 => [ + // ['id_subkriteria' => 7], + // ], + // 3 => [ + // ['id_subkriteria' => 10], + // ], + // 4 => [ + // ['id_subkriteria' => 11], + // ], + // 5 => [ + // ['id_subkriteria' => 19], + // ], + // 6 => [ + // ['id_subkriteria' => 21], + // ] + // ], + // 17 => [ + // 1 => [ + // ['id_subkriteria' => 4], + // ], + // 2 => [ + // ['id_subkriteria' => 7], + // ], + // 3 => [ + // ['id_subkriteria' => 10], + // ], + // 4 => [ + // ['id_subkriteria' => 11], + // ], + // 5 => [ + // ['id_subkriteria' => 17], + // ], + // 6 => [ + // ['id_subkriteria' => 21], + // ] + // ], + // 18 => [ + // 1 => [ + // ['id_subkriteria' => 4], + // ], + // 2 => [ + // ['id_subkriteria' => 7], + // ], + // 3 => [ + // ['id_subkriteria' => 10], + // ], + // 4 => [ + // ['id_subkriteria' => 11], + // ], + // 5 => [ + // ['id_subkriteria' => 18], + // ], + // 6 => [ + // ['id_subkriteria' => 23], + // ] + // ], + // 19 => [ + // 1 => [ + // ['id_subkriteria' => 4], + // ], + // 2 => [ + // ['id_subkriteria' => 7], + // ], + // 3 => [ + // ['id_subkriteria' => 10], + // ], + // 4 => [ + // ['id_subkriteria' => 11], + // ], + // 5 => [ + // ['id_subkriteria' => 16], + // ], + // 6 => [ + // ['id_subkriteria' => 21], + // ] + // ], + // 20 => [ + // 1 => [ + // ['id_subkriteria' => 4], + // ], + // 2 => [ + // ['id_subkriteria' => 7], + // ], + // 3 => [ + // ['id_subkriteria' => 10], + // ], + // 4 => [ + // ['id_subkriteria' => 11], + // ], + // 5 => [ + // ['id_subkriteria' => 4], + // ], + // 6 => [ + // ['id_subkriteria' => 21], + // ] + // ], + // ], + // 3 => [ + // 1 => [ + // 1 => [ + // ['id_subkriteria' => 4], + // ], + // 2 => [ + // ['id_subkriteria' => 7], + // ], + // 3 => [ + // ['id_subkriteria' => 10], + // ], + // 4 => [ + // ['id_subkriteria' => 15] + // ], + // 5 => [ + // ['id_subkriteria' => 19], + // ], + // 6 => [ + // ['id_subkriteria' => 22], + // ] + // ], + // 2 => [ + // 1 => [ + // ['id_subkriteria' => 4], + // ], + // 2 => [ + // ['id_subkriteria' => 7], + // ], + // 3 => [ + // ['id_subkriteria' => 10], + // ], + // 4 => [ + // ['id_subkriteria' => 15], + // ], + // 5 => [ + // ['id_subkriteria' => 18], + // ], + // 6 => [ + // ['id_subkriteria' => 23], + // ] + // ], + // 3 => [ + // 1 => [ + // ['id_subkriteria' => 4], + // ], + // 2 => [ + // ['id_subkriteria' => 7], + // ], + // 3 => [ + // ['id_subkriteria' => 10], + // ], + // 4 => [ + // ['id_subkriteria' => 14], + // ], + // 5 => [ + // ['id_subkriteria' => 18], + // ], + // 6 => [ + // ['id_subkriteria' => 25], + // ] + // ], + // 4 => [ + // 1 => [ + // ['id_subkriteria' => 4], + // ], + // 2 => [ + // ['id_subkriteria' => 7], + // ], + // 3 => [ + // ['id_subkriteria' => 10], + // ], + // 4 => [ + // ['id_subkriteria' => 14], + // ], + // 5 => [ + // ['id_subkriteria' => 18], + // ], + // 6 => [ + // ['id_subkriteria' => 21], + // ] + // ], + // 5 => [ + // 1 => [ + // ['id_subkriteria' => 4], + // ], + // 2 => [ + // ['id_subkriteria' => 7], + // ], + // 3 => [ + // ['id_subkriteria' => 10], + // ], + // 4 => [ + // ['id_subkriteria' => 15], + // ], + // 5 => [ + // ['id_subkriteria' => 19], + // ], + // 6 => [ + // ['id_subkriteria' => 24], + // ] + // ], + // 6 => [ + // 1 => [ + // ['id_subkriteria' => 4], + // ], + // 2 => [ + // ['id_subkriteria' => 7], + // ], + // 3 => [ + // ['id_subkriteria' => 10], + // ], + // 4 => [ + // ['id_subkriteria' => 14], + // ], + // 5 => [ + // ['id_subkriteria' => 18], + // ], + // 6 => [ + // ['id_subkriteria' => 22], + // ] + // ], + // 7 => [ + // 1 => [ + // ['id_subkriteria' => 4], + // ], + // 2 => [ + // ['id_subkriteria' => 7], + // ], + // 3 => [ + // ['id_subkriteria' => 10], + // ], + // 4 => [ + // ['id_subkriteria' => 14], + // ], + // 5 => [ + // ['id_subkriteria' => 19], + // ], + // 6 => [ + // ['id_subkriteria' => 22], + // ] + // ], + // 8 => [ + // 1 => [ + // ['id_subkriteria' => 4], + // ], + // 2 => [ + // ['id_subkriteria' => 7], + // ], + // 3 => [ + // ['id_subkriteria' => 10], + // ], + // 4 => [ + // ['id_subkriteria' => 12], + // ], + // 5 => [ + // ['id_subkriteria' => 18], + // ], + // 6 => [ + // ['id_subkriteria' => 23], + // ] + // ], + // 9 => [ + // 1 => [ + // ['id_subkriteria' => 4], + // ], + // 2 => [ + // ['id_subkriteria' => 7], + // ], + // 3 => [ + // ['id_subkriteria' => 10], + // ], + // 4 => [ + // ['id_subkriteria' => 14], + // ], + // 5 => [ + // ['id_subkriteria' => 18], + // ], + // 6 => [ + // ['id_subkriteria' => 24], + // ] + // ], + // 10 => [ + // 1 => [ + // ['id_subkriteria' => 4], + // ], + // 2 => [ + // ['id_subkriteria' => 7], + // ], + // 3 => [ + // ['id_subkriteria' => 10], + // ], + // 4 => [ + // ['id_subkriteria' => 13], + // ], + // 5 => [ + // ['id_subkriteria' => 20], + // ], + // 6 => [ + // ['id_subkriteria' => 22], + // ] + // ], + // 11 => [ + // 1 => [ + // ['id_subkriteria' => 4], + // ], + // 2 => [ + // ['id_subkriteria' => 7], + // ], + // 3 => [ + // ['id_subkriteria' => 10], + // ], + // 4 => [ + // ['id_subkriteria' => 12], + // ], + // 5 => [ + // ['id_subkriteria' => 18], + // ], + // 6 => [ + // ['id_subkriteria' => 24], + // ] + // ], + // 12 => [ + // 1 => [ + // ['id_subkriteria' => 4], + // ], + // 2 => [ + // ['id_subkriteria' => 7], + // ], + // 3 => [ + // ['id_subkriteria' => 10], + // ], + // 4 => [ + // ['id_subkriteria' => 12], + // ], + // 5 => [ + // ['id_subkriteria' => 18], + // ], + // 6 => [ + // ['id_subkriteria' => 25], + // ] + // ], + // 13 => [ + // 1 => [ + // ['id_subkriteria' => 4], + // ], + // 2 => [ + // ['id_subkriteria' => 7], + // ], + // 3 => [ + // ['id_subkriteria' => 10], + // ], + // 4 => [ + // ['id_subkriteria' => 12], + // ], + // 5 => [ + // ['id_subkriteria' => 18], + // ], + // 6 => [ + // ['id_subkriteria' => 25], + // ] + // ], + // 14 => [ + // 1 => [ + // ['id_subkriteria' => 4], + // ], + // 2 => [ + // ['id_subkriteria' => 7], + // ], + // 3 => [ + // ['id_subkriteria' => 10], + // ], + // 4 => [ + // ['id_subkriteria' => 12], + // ], + // 5 => [ + // ['id_subkriteria' => 18], + // ], + // 6 => [ + // ['id_subkriteria' => 23], + // ] + // ], + // 15 => [ + // 1 => [ + // ['id_subkriteria' => 4], + // ], + // 2 => [ + // ['id_subkriteria' => 7], + // ], + // 3 => [ + // ['id_subkriteria' => 10], + // ], + // 4 => [ + // ['id_subkriteria' => 12], + // ], + // 5 => [ + // ['id_subkriteria' => 18], + // ], + // 6 => [ + // ['id_subkriteria' => 22], + // ] + // ], + // 16 => [ + // 1 => [ + // ['id_subkriteria' => 4], + // ], + // 2 => [ + // ['id_subkriteria' => 7], + // ], + // 3 => [ + // ['id_subkriteria' => 10], + // ], + // 4 => [ + // ['id_subkriteria' => 11], + // ], + // 5 => [ + // ['id_subkriteria' => 19], + // ], + // 6 => [ + // ['id_subkriteria' => 21], + // ] + // ], + // 17 => [ + // 1 => [ + // ['id_subkriteria' => 4], + // ], + // 2 => [ + // ['id_subkriteria' => 7], + // ], + // 3 => [ + // ['id_subkriteria' => 10], + // ], + // 4 => [ + // ['id_subkriteria' => 11], + // ], + // 5 => [ + // ['id_subkriteria' => 17], + // ], + // 6 => [ + // ['id_subkriteria' => 21], + // ] + // ], + // 18 => [ + // 1 => [ + // ['id_subkriteria' => 4], + // ], + // 2 => [ + // ['id_subkriteria' => 7], + // ], + // 3 => [ + // ['id_subkriteria' => 10], + // ], + // 4 => [ + // ['id_subkriteria' => 11], + // ], + // 5 => [ + // ['id_subkriteria' => 18], + // ], + // 6 => [ + // ['id_subkriteria' => 23], + // ] + // ], + // 19 => [ + // 1 => [ + // ['id_subkriteria' => 4], + // ], + // 2 => [ + // ['id_subkriteria' => 7], + // ], + // 3 => [ + // ['id_subkriteria' => 10], + // ], + // 4 => [ + // ['id_subkriteria' => 11], + // ], + // 5 => [ + // ['id_subkriteria' => 16], + // ], + // 6 => [ + // ['id_subkriteria' => 21], + // ] + // ], + // 20 => [ + // 1 => [ + // ['id_subkriteria' => 4], + // ], + // 2 => [ + // ['id_subkriteria' => 7], + // ], + // 3 => [ + // ['id_subkriteria' => 10], + // ], + // 4 => [ + // ['id_subkriteria' => 11], + // ], + // 5 => [ + // ['id_subkriteria' => 4], + // ], + // 6 => [ + // ['id_subkriteria' => 21], + // ] + // ], + // ], + ]; + + // foreach ($angkatan as $angkatanId => $alternatif) { + foreach ($alternatifs as $alternatifId => $kriteria) { + foreach ($kriteria as $kriteriaId => $valueProfile) { + foreach ($valueProfile as $value) { + ProfileMethod::create([ + // 'id_angkatan' => $angkatanId, + 'id_alternatif' => $alternatifId, + 'id_kriteria' => $kriteriaId, + 'id_subkriteria' => $value['id_subkriteria'], + ]); + } + } + } + // } + } +} \ No newline at end of file diff --git a/database/seeders/RoleAndPermissionSeeder.php b/database/seeders/RoleAndPermissionSeeder.php new file mode 100644 index 0000000..109a65e --- /dev/null +++ b/database/seeders/RoleAndPermissionSeeder.php @@ -0,0 +1,82 @@ +truncate(); + DB::table('model_has_permissions')->truncate(); + DB::table('role_has_permissions')->truncate(); + + $roles = ['admin', 'mahasiswa']; + + foreach ($roles as $role) { + Role::create(['name' => $role]); + } + + $customerRole = Role::where(['name' => 'mahasiswa'])->first(); + $customerPermissions = [ + 'pengajuan-create', + 'pengajuan-read', + 'pengajuan-update', + 'pengajuan-delete', + 'pemilihan-dosen-create', + 'pemilihan-dosen-read', + 'pemilihan-dosen-update', + 'pemilihan-dosen-delete', + ]; + + foreach ($customerPermissions as $permissionName) { + $permission = Permission::create(['name' => $permissionName]); + $customerRole->givePermissionTo($permission); + } + + $adminPermissions = [ + 'aspek-create', + 'aspek-read', + 'aspek-update', + 'aspek-delete', + 'kriteria-create', + 'kriteria-read', + 'kriteria-update', + 'kriteria-delete', + 'alternatif-create', + 'alternatif-read', + 'alternatif-update', + 'alternatif-delete', + 'profile-create', + 'profile-read', + 'profile-update', + 'profile-delete', + 'mahasiswa-create', + 'mahasiswa-read', + 'mahasiswa-update', + 'mahasiswa-delete', + 'setting-update', + 'website-update', + ]; + + $adminRole = Role::where(['name' => 'admin'])->first(); + foreach ($adminPermissions as $permissionName) { + $permission = Permission::create(['name' => $permissionName]); + $adminRole->givePermissionTo($permission); + } + + Schema::enableForeignKeyConstraints(); + } +} \ No newline at end of file diff --git a/database/seeders/SettingSeeder.php b/database/seeders/SettingSeeder.php new file mode 100644 index 0000000..87c4dc0 --- /dev/null +++ b/database/seeders/SettingSeeder.php @@ -0,0 +1,152 @@ +insert([ + [ + 'key' => 'about_us', + 'value' => '

Assalamu‘alaikum warohmatullahi wabarokatuh

+


+

Saibah Mulia Mandiri adalah biro perjalanan umrah dan haji + yang telah berpengalaman melayani para tamu Allah sejak tahun 1995. Saibah didirikan + oleh Ustadz Haji Bambang Riyanto dan Ibu Hj Aisyah Abdillah, dimana beliau berdua + sering menemani atau mendampingi

langsung para Jamaah Umroh maupun Haji.

+


+

Saibah dengan pembimbing yang sangat berpengalaman, mengutamakan kegiatan ibadah + selama di Tanah suci. Insya Allah selain beribadah dengan khusyuk jamaah akan + diperkenalkan dengan sejarah peradaban Islam dengan mengunjungi tempat-tempat + ibadah dan bersejarah bagi Umat Islam. Semoga Keinginan kita untuk beribadah + Umroh dan Haji dikabulkan oleh Allah . Dan semoga Ibadah Haji dan Umroh kita + di Mabrurkan oleh Allah. Aamiin Ya Rabbal ‘Aalamiin.

+


+

Wassalamu‘alaikum warohmatullahi wabarokatuh

+



+

Saibah Mulia Mandiri, Exclusive Umrah and Hajj Travel

+

Kantor Pusat Semarang: Jl. Hasanudin no. 243 B Semarang 50171, Indonesia

+


+

Telp : (024) 3521821, 081225442388

+

Telp/WA 081225442388

+

Telp/Fax (024)3521821,

+

E mail : admin@saibah.co.id

' + ], + [ + 'key' => 'privacy_policy', + 'value' => '

+ Pendukung Keputusan Pemilihan Dosen Pembimbing Skripsi D4-Teknik Informatika Menggunakan Metode Profile Matching + + built the SPK app as a Commercial app. This SERVICE is provided by Achmad Zakariya and is intended for use as is.

+


+

This page is used to inform visitors regarding our policies with the collection, use, and disclosure of Personal Information if anyone decided to use our Service.

+


+

If you choose to use our Service, then you agree to the collection and use of information in relation to this policy. The Personal Information that we collect is + used for providing and improving the Service. We will not use or share your information with anyone except as described in this Privacy Policy.

+


+

The terms used in this Privacy Policy have the same meanings as in our Terms and Conditions, which is accessible at Saibah unless otherwise defined in this Privacy Policy.

+


+

Information Collection and Use

+


+

For a better experience, while using our Service, we may require you to provide us with certain personally identifiable information. The information that we request will + be retained by us and used as described in this privacy policy.

+


+

The app does use third party services that may collect information used to identify you.

+


+

Link to privacy policy of third party service providers used by the app

+
    +
  • Google Play Services
  • +
  • Google
  • +
+


+

Log Data

+


+

We want to inform you that whenever you use our Service, in a case of an error in the app we collect data and information (through third party products) on your phone called Log Data. + This Log Data may include information such as your device Internet Protocol (“IP”) address, device name, operating

' + ] + ]); + + DB::table('settings')->insert([ + [ + 'key' => 'email_setting', + 'json_value' => json_encode([ + 'logo' => '', + 'footer' => '

Mahasiswa Politeknik Negeri Jember, Jawa Timur, Indonesia

', + 'salutation' => "Salam,\r\nAchmad Zakariya" + ]) + ], + [ + 'key' => 'email_registration', + 'json_value' => json_encode([ + 'from' => 'info.spk-dosbing-profile-matching@gmail.com', + 'first_message' => '

Assalamualaikum,

Terimakasih telah mendaftar di platform ini. untuk melakukan proses sistem diharapkan mahasiswa berkenanan mengisi data pribadi guna kelengkapan data pada sistem, sehingga dapat dilakukan proses pemilihan dosen pembimbing dan pengajuan judul anda berjalan dengan lancar.

Terima Kasih

' + ]) + ] + ]); + + DB::table('nilai')->insert([ + [ + 'value' => 1, + 'created_at' => now(), + 'updated_at' => now(), + ], + [ + 'value' => 2, + 'created_at' => now(), + 'updated_at' => now(), + ], + [ + 'value' => 3, + 'created_at' => now(), + 'updated_at' => now(), + ], + [ + 'value' => 4, + 'created_at' => now(), + 'updated_at' => now(), + ], + [ + 'value' => 5, + 'created_at' => now(), + 'updated_at' => now(), + ], + ]); + + DB::table('angkatan')->insert([ + [ + 'tahun' => '2021', + // 'jumlah_mahasiswa' => '185', + 'created_at' => now(), + 'updated_at' => now(), + ], + [ + 'tahun' => '2022', + // 'jumlah_mahasiswa' => '169', + 'created_at' => now(), + 'updated_at' => now(), + ], + [ + 'tahun' => '2023', + // 'jumlah_mahasiswa' => '181', + 'created_at' => now(), + 'updated_at' => now(), + ] + ]); + + DB::table('izin_pengajuan')->insert([ + [ + 'izin' => 'off', + 'created_at' => now(), + 'updated_at' => now(), + ] + ]); + } +} \ No newline at end of file diff --git a/database/seeders/SubkriteriaSeeder.php b/database/seeders/SubkriteriaSeeder.php new file mode 100644 index 0000000..e7c83c8 --- /dev/null +++ b/database/seeders/SubkriteriaSeeder.php @@ -0,0 +1,80 @@ + [ + ['subkriteria' => '1 - 3 Mahasiswa', 'id_nilai' => 1], + ['subkriteria' => '4 - 6 Mahasiswa', 'id_nilai' => 2], + ['subkriteria' => '7 - 9 Mahasiswa', 'id_nilai' => 3], + ['subkriteria' => '10 - 12 Mahasiswa', 'id_nilai' => 4], + ['subkriteria' => '13 - 15 Mahasiswa', 'id_nilai' => 5], + ], + 2 => [ + // ['subkriteria' => 'Tersisa 20%', 'id_nilai' => 1], + // ['subkriteria' => 'Tersisa 40%', 'id_nilai' => 2], + // ['subkriteria' => 'Tersisa 60%', 'id_nilai' => 3], + // ['subkriteria' => 'Tersisa 80%', 'id_nilai' => 4], + // ['subkriteria' => 'Tersisa 100%', 'id_nilai' => 5], + ['subkriteria' => 'Terpenuhi', 'id_nilai' => '1'], + ['subkriteria' => 'Belum Terpenuhi', 'id_nilai' => '2'], + ], + 3 => [ + ['subkriteria' => 'Information Technology Entrepreneur', 'id_nilai' => 1], + ['subkriteria' => 'Software Quality Assurance Analyst', 'id_nilai' => 2], + ['subkriteria' => 'Software Engineer', 'id_nilai' => 3], + ], + 4 => [ + ['subkriteria' => '2022 - 2027', 'id_nilai' => 1], + ['subkriteria' => '2016 - 2021', 'id_nilai' => 2], + ['subkriteria' => '2010 - 2015', 'id_nilai' => 3], + ['subkriteria' => '2004 - 2009', 'id_nilai' => 4], + ['subkriteria' => '1998 - 2003', 'id_nilai' => 5], + ], + 5 => [ + ['subkriteria' => '1 - 3 Tahun', 'id_nilai' => 1], + ['subkriteria' => '4 - 7 Tahun', 'id_nilai' => 2], + ['subkriteria' => '8 - 11 Tahun', 'id_nilai' => 3], + ['subkriteria' => '12 - 15 Tahun', 'id_nilai' => 4], + ['subkriteria' => 'Lebih dari 15 Tahun', 'id_nilai' => 5], + // ['subkriteria' => '4 Tahun'], + // ['subkriteria' => '5 Tahun'], + // ['subkriteria' => '8 Tahun'], + // ['subkriteria' => '10 Tahun'], + // ['subkriteria' => '11 Tahun'], + // ['subkriteria' => '12 Tahun'], + // ['subkriteria' => '15 Tahun'], + // ['subkriteria' => '18 Tahun'], + // ['subkriteria' => '27 Tahun'], + ], + 6 => [ + ['subkriteria' => '0 - 50 Jurnal', 'id_nilai' => 1], + ['subkriteria' => '51 - 101 Jurnal', 'id_nilai' => 2], + ['subkriteria' => '102 - 152 Jurnal', 'id_nilai' => 3], + ['subkriteria' => '153 - 203 Jurnal', 'id_nilai' => 4], + ['subkriteria' => 'Lebih dari 203 Jurnal', 'id_nilai' => 5], + ] + ]; + + foreach ($kriteriaData as $kriteriaId => $subkriterias) { + foreach ($subkriterias as $value) { + Subkriteria::create([ + 'id_kriteria' => $kriteriaId, + 'subkriteria_name' => $value['subkriteria'], + 'id_nilai' => $value['id_nilai'] + ]); + } + } + } +} \ No newline at end of file diff --git a/database/seeders/User/AdminSeeder.php b/database/seeders/User/AdminSeeder.php new file mode 100644 index 0000000..3caebef --- /dev/null +++ b/database/seeders/User/AdminSeeder.php @@ -0,0 +1,32 @@ +truncate(); + DB::statement('SET FOREIGN_KEY_CHECKS=1;'); + + $admin = User::firstOrCreate([ + 'nim' => 'E4211320', + 'email' => 'e41211320@student.polije.ac.id', + ], [ + 'name' => 'e41211320', + 'password' => Hash::make('p4ssword'), + 'email_verified_at' => now(), + ]); + + $admin->assignRole(User::ROLE_ADMIN); + } +} \ No newline at end of file diff --git a/database/seeders/User/MahasiswaSeeder.php b/database/seeders/User/MahasiswaSeeder.php new file mode 100644 index 0000000..eacca8f --- /dev/null +++ b/database/seeders/User/MahasiswaSeeder.php @@ -0,0 +1,99 @@ + $data[1], + 'name' => $name, + 'email' => "$nim@student.polije.ac.id", + 'password' => bcrypt($nim), + 'id_angkatan' => $id_angkatan, + 'email_verified_at' => now(), + ]); + + $user->assignRole(User::ROLE_MAHASISWA); + } + } +} diff --git a/docker/8.0/Dockerfile b/docker/8.0/Dockerfile new file mode 100644 index 0000000..84a5a27 --- /dev/null +++ b/docker/8.0/Dockerfile @@ -0,0 +1,69 @@ +FROM ubuntu:20.04 + +LABEL maintainer="Taylor Otwell" + +ARG WWWGROUP +ARG NODE_VERSION=20 +ARG POSTGRES_VERSION=17 + +WORKDIR /var/www/html + +ENV DEBIAN_FRONTEND=noninteractive +ENV TZ=UTC +ENV SUPERVISOR_PHP_COMMAND="/usr/bin/php -d variables_order=EGPCS /var/www/html/artisan serve --host=0.0.0.0 --port=80" +ENV SUPERVISOR_PHP_USER="sail" + +RUN ln -snf /usr/share/zoneinfo/$TZ /etc/localtime && echo $TZ > /etc/timezone + +RUN echo "Acquire::http::Pipeline-Depth 0;" > /etc/apt/apt.conf.d/99custom && \ + echo "Acquire::http::No-Cache true;" >> /etc/apt/apt.conf.d/99custom && \ + echo "Acquire::BrokenProxy true;" >> /etc/apt/apt.conf.d/99custom + +RUN apt-get update && apt-get upgrade -y \ + && mkdir -p /etc/apt/keyrings \ + && apt-get install -y gnupg gosu curl ca-certificates zip unzip git supervisor sqlite3 libcap2-bin libpng-dev python2 dnsutils librsvg2-bin fswatch ffmpeg nano \ + && curl -sS 'https://keyserver.ubuntu.com/pks/lookup?op=get&search=0x14aa40ec0831756756d7f66c4f4ea0aae5267a6c' | gpg --dearmor | tee /usr/share/keyrings/ppa_ondrej_php.gpg > /dev/null \ + && echo "deb [signed-by=/usr/share/keyrings/ppa_ondrej_php.gpg] https://ppa.launchpadcontent.net/ondrej/php/ubuntu focal main" > /etc/apt/sources.list.d/ppa_ondrej_php.list \ + && apt-get update \ + && apt-get install -y php8.0-cli php8.0-dev \ + php8.0-pgsql php8.0-sqlite3 php8.0-gd php8.0-imagick \ + php8.0-curl php8.0-memcached php8.0-mongodb \ + php8.0-imap php8.0-mysql php8.0-mbstring \ + php8.0-xml php8.0-zip php8.0-bcmath php8.0-soap \ + php8.0-intl php8.0-readline php8.0-pcov \ + php8.0-msgpack php8.0-igbinary php8.0-ldap \ + php8.0-redis php8.0-swoole php8.0-xdebug \ + && curl -sLS https://getcomposer.org/installer | php -- --install-dir=/usr/bin/ --filename=composer \ + && curl -fsSL https://deb.nodesource.com/gpgkey/nodesource-repo.gpg.key | gpg --dearmor -o /etc/apt/keyrings/nodesource.gpg \ + && echo "deb [signed-by=/etc/apt/keyrings/nodesource.gpg] https://deb.nodesource.com/node_$NODE_VERSION.x nodistro main" > /etc/apt/sources.list.d/nodesource.list \ + && apt-get update \ + && apt-get install -y nodejs \ + && npm install -g npm \ + && npm install -g bun \ + && curl -sS https://dl.yarnpkg.com/debian/pubkey.gpg | gpg --dearmor | tee /usr/share/keyrings/yarnkey.gpg >/dev/null \ + && echo "deb [signed-by=/usr/share/keyrings/yarnkey.gpg] https://dl.yarnpkg.com/debian/ stable main" > /etc/apt/sources.list.d/yarn.list \ + && curl -sS https://www.postgresql.org/media/keys/ACCC4CF8.asc | gpg --dearmor | tee /usr/share/keyrings/pgdg.gpg >/dev/null \ + && echo "deb [signed-by=/usr/share/keyrings/pgdg.gpg] http://apt.postgresql.org/pub/repos/apt focal-pgdg main" > /etc/apt/sources.list.d/pgdg.list \ + && apt-get update \ + && apt-get install -y yarn \ + && apt-get install -y mysql-client \ + && apt-get install -y postgresql-client-$POSTGRES_VERSION \ + && apt-get -y autoremove \ + && apt-get clean \ + && rm -rf /var/lib/apt/lists/* /tmp/* /var/tmp/* + +RUN update-alternatives --set php /usr/bin/php8.0 + +RUN setcap "cap_net_bind_service=+ep" /usr/bin/php8.0 + +RUN groupadd --force -g $WWWGROUP sail +RUN useradd -ms /bin/bash --no-user-group -g $WWWGROUP -u 1337 sail + +COPY start-container /usr/local/bin/start-container +COPY supervisord.conf /etc/supervisor/conf.d/supervisord.conf +COPY php.ini /etc/php/8.0/cli/conf.d/99-sail.ini +RUN chmod +x /usr/local/bin/start-container + +EXPOSE 80/tcp + +ENTRYPOINT ["start-container"] diff --git a/docker/8.0/php.ini b/docker/8.0/php.ini new file mode 100644 index 0000000..0d8ce9e --- /dev/null +++ b/docker/8.0/php.ini @@ -0,0 +1,5 @@ +[PHP] +post_max_size = 100M +upload_max_filesize = 100M +variables_order = EGPCS +pcov.directory = . diff --git a/docker/8.0/start-container b/docker/8.0/start-container new file mode 100644 index 0000000..40c55df --- /dev/null +++ b/docker/8.0/start-container @@ -0,0 +1,26 @@ +#!/usr/bin/env bash + +if [ "$SUPERVISOR_PHP_USER" != "root" ] && [ "$SUPERVISOR_PHP_USER" != "sail" ]; then + echo "You should set SUPERVISOR_PHP_USER to either 'sail' or 'root'." + exit 1 +fi + +if [ ! -z "$WWWUSER" ]; then + usermod -u $WWWUSER sail +fi + +if [ ! -d /.composer ]; then + mkdir /.composer +fi + +chmod -R ugo+rw /.composer + +if [ $# -gt 0 ]; then + if [ "$SUPERVISOR_PHP_USER" = "root" ]; then + exec "$@" + else + exec gosu $WWWUSER "$@" + fi +else + exec /usr/bin/supervisord -c /etc/supervisor/conf.d/supervisord.conf +fi diff --git a/docker/8.0/supervisord.conf b/docker/8.0/supervisord.conf new file mode 100644 index 0000000..656da8a --- /dev/null +++ b/docker/8.0/supervisord.conf @@ -0,0 +1,14 @@ +[supervisord] +nodaemon=true +user=root +logfile=/var/log/supervisor/supervisord.log +pidfile=/var/run/supervisord.pid + +[program:php] +command=%(ENV_SUPERVISOR_PHP_COMMAND)s +user=%(ENV_SUPERVISOR_PHP_USER)s +environment=LARAVEL_SAIL="1" +stdout_logfile=/dev/stdout +stdout_logfile_maxbytes=0 +stderr_logfile=/dev/stderr +stderr_logfile_maxbytes=0 diff --git a/docker/8.1/Dockerfile b/docker/8.1/Dockerfile new file mode 100644 index 0000000..591849e --- /dev/null +++ b/docker/8.1/Dockerfile @@ -0,0 +1,68 @@ +FROM ubuntu:22.04 + +LABEL maintainer="Taylor Otwell" + +ARG WWWGROUP +ARG NODE_VERSION=20 +ARG POSTGRES_VERSION=17 + +WORKDIR /var/www/html + +ENV DEBIAN_FRONTEND=noninteractive +ENV TZ=UTC +ENV SUPERVISOR_PHP_COMMAND="/usr/bin/php -d variables_order=EGPCS /var/www/html/artisan serve --host=0.0.0.0 --port=80" +ENV SUPERVISOR_PHP_USER="sail" + +RUN ln -snf /usr/share/zoneinfo/$TZ /etc/localtime && echo $TZ > /etc/timezone + +RUN echo "Acquire::http::Pipeline-Depth 0;" > /etc/apt/apt.conf.d/99custom && \ + echo "Acquire::http::No-Cache true;" >> /etc/apt/apt.conf.d/99custom && \ + echo "Acquire::BrokenProxy true;" >> /etc/apt/apt.conf.d/99custom + +RUN apt-get update && apt-get upgrade -y \ + && mkdir -p /etc/apt/keyrings \ + && apt-get install -y gnupg gosu curl ca-certificates zip unzip git supervisor sqlite3 libcap2-bin libpng-dev python2 dnsutils librsvg2-bin fswatch ffmpeg nano \ + && curl -sS 'https://keyserver.ubuntu.com/pks/lookup?op=get&search=0x14aa40ec0831756756d7f66c4f4ea0aae5267a6c' | gpg --dearmor | tee /usr/share/keyrings/ppa_ondrej_php.gpg > /dev/null \ + && echo "deb [signed-by=/usr/share/keyrings/ppa_ondrej_php.gpg] https://ppa.launchpadcontent.net/ondrej/php/ubuntu jammy main" > /etc/apt/sources.list.d/ppa_ondrej_php.list \ + && apt-get update \ + && apt-get install -y php8.1-cli php8.1-dev \ + php8.1-pgsql php8.1-sqlite3 php8.1-gd php8.1-imagick \ + php8.1-curl php8.1-mongodb \ + php8.1-imap php8.1-mysql php8.1-mbstring \ + php8.1-xml php8.1-zip php8.1-bcmath php8.1-soap \ + php8.1-intl php8.1-readline \ + php8.1-ldap \ + php8.1-msgpack php8.1-igbinary php8.1-redis php8.1-swoole \ + php8.1-memcached php8.1-pcov php8.1-xdebug \ + && curl -sLS https://getcomposer.org/installer | php -- --install-dir=/usr/bin/ --filename=composer \ + && curl -fsSL https://deb.nodesource.com/gpgkey/nodesource-repo.gpg.key | gpg --dearmor -o /etc/apt/keyrings/nodesource.gpg \ + && echo "deb [signed-by=/etc/apt/keyrings/nodesource.gpg] https://deb.nodesource.com/node_$NODE_VERSION.x nodistro main" > /etc/apt/sources.list.d/nodesource.list \ + && apt-get update \ + && apt-get install -y nodejs \ + && npm install -g npm \ + && npm install -g bun \ + && curl -sS https://dl.yarnpkg.com/debian/pubkey.gpg | gpg --dearmor | tee /usr/share/keyrings/yarn.gpg >/dev/null \ + && echo "deb [signed-by=/usr/share/keyrings/yarn.gpg] https://dl.yarnpkg.com/debian/ stable main" > /etc/apt/sources.list.d/yarn.list \ + && curl -sS https://www.postgresql.org/media/keys/ACCC4CF8.asc | gpg --dearmor | tee /usr/share/keyrings/pgdg.gpg >/dev/null \ + && echo "deb [signed-by=/usr/share/keyrings/pgdg.gpg] http://apt.postgresql.org/pub/repos/apt jammy-pgdg main" > /etc/apt/sources.list.d/pgdg.list \ + && apt-get update \ + && apt-get install -y yarn \ + && apt-get install -y mysql-client \ + && apt-get install -y postgresql-client-$POSTGRES_VERSION \ + && apt-get -y autoremove \ + && apt-get clean \ + && rm -rf /var/lib/apt/lists/* /tmp/* /var/tmp/* + +RUN setcap "cap_net_bind_service=+ep" /usr/bin/php8.1 + +RUN groupadd --force -g $WWWGROUP sail +RUN useradd -ms /bin/bash --no-user-group -g $WWWGROUP -u 1337 sail + +COPY start-container /usr/local/bin/start-container +COPY supervisord.conf /etc/supervisor/conf.d/supervisord.conf +COPY php.ini /etc/php/8.1/cli/conf.d/99-sail.ini +RUN chmod +x /usr/local/bin/start-container + +EXPOSE 80/tcp + +ENTRYPOINT ["start-container"] diff --git a/docker/8.1/php.ini b/docker/8.1/php.ini new file mode 100644 index 0000000..0d8ce9e --- /dev/null +++ b/docker/8.1/php.ini @@ -0,0 +1,5 @@ +[PHP] +post_max_size = 100M +upload_max_filesize = 100M +variables_order = EGPCS +pcov.directory = . diff --git a/docker/8.1/start-container b/docker/8.1/start-container new file mode 100644 index 0000000..40c55df --- /dev/null +++ b/docker/8.1/start-container @@ -0,0 +1,26 @@ +#!/usr/bin/env bash + +if [ "$SUPERVISOR_PHP_USER" != "root" ] && [ "$SUPERVISOR_PHP_USER" != "sail" ]; then + echo "You should set SUPERVISOR_PHP_USER to either 'sail' or 'root'." + exit 1 +fi + +if [ ! -z "$WWWUSER" ]; then + usermod -u $WWWUSER sail +fi + +if [ ! -d /.composer ]; then + mkdir /.composer +fi + +chmod -R ugo+rw /.composer + +if [ $# -gt 0 ]; then + if [ "$SUPERVISOR_PHP_USER" = "root" ]; then + exec "$@" + else + exec gosu $WWWUSER "$@" + fi +else + exec /usr/bin/supervisord -c /etc/supervisor/conf.d/supervisord.conf +fi diff --git a/docker/8.1/supervisord.conf b/docker/8.1/supervisord.conf new file mode 100644 index 0000000..656da8a --- /dev/null +++ b/docker/8.1/supervisord.conf @@ -0,0 +1,14 @@ +[supervisord] +nodaemon=true +user=root +logfile=/var/log/supervisor/supervisord.log +pidfile=/var/run/supervisord.pid + +[program:php] +command=%(ENV_SUPERVISOR_PHP_COMMAND)s +user=%(ENV_SUPERVISOR_PHP_USER)s +environment=LARAVEL_SAIL="1" +stdout_logfile=/dev/stdout +stdout_logfile_maxbytes=0 +stderr_logfile=/dev/stderr +stderr_logfile_maxbytes=0 diff --git a/docker/8.2/Dockerfile b/docker/8.2/Dockerfile new file mode 100644 index 0000000..7ab16c7 --- /dev/null +++ b/docker/8.2/Dockerfile @@ -0,0 +1,69 @@ +FROM ubuntu:22.04 + +LABEL maintainer="Taylor Otwell" + +ARG WWWGROUP +ARG NODE_VERSION=20 +ARG POSTGRES_VERSION=17 + +WORKDIR /var/www/html + +ENV DEBIAN_FRONTEND=noninteractive +ENV TZ=UTC +ENV SUPERVISOR_PHP_COMMAND="/usr/bin/php -d variables_order=EGPCS /var/www/html/artisan serve --host=0.0.0.0 --port=80" +ENV SUPERVISOR_PHP_USER="sail" + +RUN ln -snf /usr/share/zoneinfo/$TZ /etc/localtime && echo $TZ > /etc/timezone + +RUN echo "Acquire::http::Pipeline-Depth 0;" > /etc/apt/apt.conf.d/99custom && \ + echo "Acquire::http::No-Cache true;" >> /etc/apt/apt.conf.d/99custom && \ + echo "Acquire::BrokenProxy true;" >> /etc/apt/apt.conf.d/99custom + +RUN apt-get update && apt-get upgrade -y \ + && mkdir -p /etc/apt/keyrings \ + && apt-get install -y gnupg gosu curl ca-certificates zip unzip git supervisor sqlite3 libcap2-bin libpng-dev python2 dnsutils librsvg2-bin fswatch ffmpeg nano \ + && curl -sS 'https://keyserver.ubuntu.com/pks/lookup?op=get&search=0x14aa40ec0831756756d7f66c4f4ea0aae5267a6c' | gpg --dearmor | tee /etc/apt/keyrings/ppa_ondrej_php.gpg > /dev/null \ + && echo "deb [signed-by=/etc/apt/keyrings/ppa_ondrej_php.gpg] https://ppa.launchpadcontent.net/ondrej/php/ubuntu jammy main" > /etc/apt/sources.list.d/ppa_ondrej_php.list \ + && apt-get update \ + && apt-get install -y php8.2-cli php8.2-dev \ + php8.2-pgsql php8.2-sqlite3 php8.2-gd php8.2-imagick \ + php8.2-curl php8.2-mongodb \ + php8.2-imap php8.2-mysql php8.2-mbstring \ + php8.2-xml php8.2-zip php8.2-bcmath php8.2-soap \ + php8.2-intl php8.2-readline \ + php8.2-ldap \ + php8.2-msgpack php8.2-igbinary php8.2-redis php8.2-swoole \ + php8.2-memcached php8.2-pcov php8.2-xdebug \ + && curl -sLS https://getcomposer.org/installer | php -- --install-dir=/usr/bin/ --filename=composer \ + && curl -fsSL https://deb.nodesource.com/gpgkey/nodesource-repo.gpg.key | gpg --dearmor -o /etc/apt/keyrings/nodesource.gpg \ + && echo "deb [signed-by=/etc/apt/keyrings/nodesource.gpg] https://deb.nodesource.com/node_$NODE_VERSION.x nodistro main" > /etc/apt/sources.list.d/nodesource.list \ + && apt-get update \ + && apt-get install -y nodejs \ + && npm install -g npm \ + && npm install -g pnpm \ + && npm install -g bun \ + && curl -sS https://dl.yarnpkg.com/debian/pubkey.gpg | gpg --dearmor | tee /etc/apt/keyrings/yarn.gpg >/dev/null \ + && echo "deb [signed-by=/etc/apt/keyrings/yarn.gpg] https://dl.yarnpkg.com/debian/ stable main" > /etc/apt/sources.list.d/yarn.list \ + && curl -sS https://www.postgresql.org/media/keys/ACCC4CF8.asc | gpg --dearmor | tee /etc/apt/keyrings/pgdg.gpg >/dev/null \ + && echo "deb [signed-by=/etc/apt/keyrings/pgdg.gpg] http://apt.postgresql.org/pub/repos/apt jammy-pgdg main" > /etc/apt/sources.list.d/pgdg.list \ + && apt-get update \ + && apt-get install -y yarn \ + && apt-get install -y mysql-client \ + && apt-get install -y postgresql-client-$POSTGRES_VERSION \ + && apt-get -y autoremove \ + && apt-get clean \ + && rm -rf /var/lib/apt/lists/* /tmp/* /var/tmp/* + +RUN setcap "cap_net_bind_service=+ep" /usr/bin/php8.2 + +RUN groupadd --force -g $WWWGROUP sail +RUN useradd -ms /bin/bash --no-user-group -g $WWWGROUP -u 1337 sail + +COPY start-container /usr/local/bin/start-container +COPY supervisord.conf /etc/supervisor/conf.d/supervisord.conf +COPY php.ini /etc/php/8.2/cli/conf.d/99-sail.ini +RUN chmod +x /usr/local/bin/start-container + +EXPOSE 80/tcp + +ENTRYPOINT ["start-container"] diff --git a/docker/8.2/php.ini b/docker/8.2/php.ini new file mode 100644 index 0000000..0d8ce9e --- /dev/null +++ b/docker/8.2/php.ini @@ -0,0 +1,5 @@ +[PHP] +post_max_size = 100M +upload_max_filesize = 100M +variables_order = EGPCS +pcov.directory = . diff --git a/docker/8.2/start-container b/docker/8.2/start-container new file mode 100644 index 0000000..40c55df --- /dev/null +++ b/docker/8.2/start-container @@ -0,0 +1,26 @@ +#!/usr/bin/env bash + +if [ "$SUPERVISOR_PHP_USER" != "root" ] && [ "$SUPERVISOR_PHP_USER" != "sail" ]; then + echo "You should set SUPERVISOR_PHP_USER to either 'sail' or 'root'." + exit 1 +fi + +if [ ! -z "$WWWUSER" ]; then + usermod -u $WWWUSER sail +fi + +if [ ! -d /.composer ]; then + mkdir /.composer +fi + +chmod -R ugo+rw /.composer + +if [ $# -gt 0 ]; then + if [ "$SUPERVISOR_PHP_USER" = "root" ]; then + exec "$@" + else + exec gosu $WWWUSER "$@" + fi +else + exec /usr/bin/supervisord -c /etc/supervisor/conf.d/supervisord.conf +fi diff --git a/docker/8.2/supervisord.conf b/docker/8.2/supervisord.conf new file mode 100644 index 0000000..656da8a --- /dev/null +++ b/docker/8.2/supervisord.conf @@ -0,0 +1,14 @@ +[supervisord] +nodaemon=true +user=root +logfile=/var/log/supervisor/supervisord.log +pidfile=/var/run/supervisord.pid + +[program:php] +command=%(ENV_SUPERVISOR_PHP_COMMAND)s +user=%(ENV_SUPERVISOR_PHP_USER)s +environment=LARAVEL_SAIL="1" +stdout_logfile=/dev/stdout +stdout_logfile_maxbytes=0 +stderr_logfile=/dev/stderr +stderr_logfile_maxbytes=0 diff --git a/docker/8.3/Dockerfile b/docker/8.3/Dockerfile new file mode 100644 index 0000000..46a5ca4 --- /dev/null +++ b/docker/8.3/Dockerfile @@ -0,0 +1,70 @@ +FROM ubuntu:22.04 + +LABEL maintainer="Taylor Otwell" + +ARG WWWGROUP +ARG NODE_VERSION=20 +ARG MYSQL_CLIENT="mysql-client" +ARG POSTGRES_VERSION=17 + +WORKDIR /var/www/html + +ENV DEBIAN_FRONTEND=noninteractive +ENV TZ=UTC +ENV SUPERVISOR_PHP_COMMAND="/usr/bin/php -d variables_order=EGPCS /var/www/html/artisan serve --host=0.0.0.0 --port=80" +ENV SUPERVISOR_PHP_USER="sail" + +RUN ln -snf /usr/share/zoneinfo/$TZ /etc/localtime && echo $TZ > /etc/timezone + +RUN echo "Acquire::http::Pipeline-Depth 0;" > /etc/apt/apt.conf.d/99custom && \ + echo "Acquire::http::No-Cache true;" >> /etc/apt/apt.conf.d/99custom && \ + echo "Acquire::BrokenProxy true;" >> /etc/apt/apt.conf.d/99custom + +RUN apt-get update && apt-get upgrade -y \ + && mkdir -p /etc/apt/keyrings \ + && apt-get install -y gnupg gosu curl ca-certificates zip unzip git supervisor sqlite3 libcap2-bin libpng-dev python2 dnsutils librsvg2-bin fswatch ffmpeg nano \ + && curl -sS 'https://keyserver.ubuntu.com/pks/lookup?op=get&search=0x14aa40ec0831756756d7f66c4f4ea0aae5267a6c' | gpg --dearmor | tee /etc/apt/keyrings/ppa_ondrej_php.gpg > /dev/null \ + && echo "deb [signed-by=/etc/apt/keyrings/ppa_ondrej_php.gpg] https://ppa.launchpadcontent.net/ondrej/php/ubuntu jammy main" > /etc/apt/sources.list.d/ppa_ondrej_php.list \ + && apt-get update \ + && apt-get install -y php8.3-cli php8.3-dev \ + php8.3-pgsql php8.3-sqlite3 php8.3-gd \ + php8.3-curl php8.3-mongodb \ + php8.3-imap php8.3-mysql php8.3-mbstring \ + php8.3-xml php8.3-zip php8.3-bcmath php8.3-soap \ + php8.3-intl php8.3-readline \ + php8.3-ldap \ + php8.3-msgpack php8.3-igbinary php8.3-redis \ + php8.3-memcached php8.3-pcov php8.3-imagick php8.3-xdebug php8.3-swoole \ + && curl -sLS https://getcomposer.org/installer | php -- --install-dir=/usr/bin/ --filename=composer \ + && curl -fsSL https://deb.nodesource.com/gpgkey/nodesource-repo.gpg.key | gpg --dearmor -o /etc/apt/keyrings/nodesource.gpg \ + && echo "deb [signed-by=/etc/apt/keyrings/nodesource.gpg] https://deb.nodesource.com/node_$NODE_VERSION.x nodistro main" > /etc/apt/sources.list.d/nodesource.list \ + && apt-get update \ + && apt-get install -y nodejs \ + && npm install -g npm \ + && npm install -g pnpm \ + && npm install -g bun \ + && curl -sS https://dl.yarnpkg.com/debian/pubkey.gpg | gpg --dearmor | tee /etc/apt/keyrings/yarn.gpg >/dev/null \ + && echo "deb [signed-by=/etc/apt/keyrings/yarn.gpg] https://dl.yarnpkg.com/debian/ stable main" > /etc/apt/sources.list.d/yarn.list \ + && curl -sS https://www.postgresql.org/media/keys/ACCC4CF8.asc | gpg --dearmor | tee /etc/apt/keyrings/pgdg.gpg >/dev/null \ + && echo "deb [signed-by=/etc/apt/keyrings/pgdg.gpg] http://apt.postgresql.org/pub/repos/apt jammy-pgdg main" > /etc/apt/sources.list.d/pgdg.list \ + && apt-get update \ + && apt-get install -y yarn \ + && apt-get install -y $MYSQL_CLIENT \ + && apt-get install -y postgresql-client-$POSTGRES_VERSION \ + && apt-get -y autoremove \ + && apt-get clean \ + && rm -rf /var/lib/apt/lists/* /tmp/* /var/tmp/* + +RUN setcap "cap_net_bind_service=+ep" /usr/bin/php8.3 + +RUN groupadd --force -g $WWWGROUP sail +RUN useradd -ms /bin/bash --no-user-group -g $WWWGROUP -u 1337 sail + +COPY start-container /usr/local/bin/start-container +COPY supervisord.conf /etc/supervisor/conf.d/supervisord.conf +COPY php.ini /etc/php/8.3/cli/conf.d/99-sail.ini +RUN chmod +x /usr/local/bin/start-container + +EXPOSE 80/tcp + +ENTRYPOINT ["start-container"] diff --git a/docker/8.3/php.ini b/docker/8.3/php.ini new file mode 100644 index 0000000..0d8ce9e --- /dev/null +++ b/docker/8.3/php.ini @@ -0,0 +1,5 @@ +[PHP] +post_max_size = 100M +upload_max_filesize = 100M +variables_order = EGPCS +pcov.directory = . diff --git a/docker/8.3/start-container b/docker/8.3/start-container new file mode 100644 index 0000000..40c55df --- /dev/null +++ b/docker/8.3/start-container @@ -0,0 +1,26 @@ +#!/usr/bin/env bash + +if [ "$SUPERVISOR_PHP_USER" != "root" ] && [ "$SUPERVISOR_PHP_USER" != "sail" ]; then + echo "You should set SUPERVISOR_PHP_USER to either 'sail' or 'root'." + exit 1 +fi + +if [ ! -z "$WWWUSER" ]; then + usermod -u $WWWUSER sail +fi + +if [ ! -d /.composer ]; then + mkdir /.composer +fi + +chmod -R ugo+rw /.composer + +if [ $# -gt 0 ]; then + if [ "$SUPERVISOR_PHP_USER" = "root" ]; then + exec "$@" + else + exec gosu $WWWUSER "$@" + fi +else + exec /usr/bin/supervisord -c /etc/supervisor/conf.d/supervisord.conf +fi diff --git a/docker/8.3/supervisord.conf b/docker/8.3/supervisord.conf new file mode 100644 index 0000000..656da8a --- /dev/null +++ b/docker/8.3/supervisord.conf @@ -0,0 +1,14 @@ +[supervisord] +nodaemon=true +user=root +logfile=/var/log/supervisor/supervisord.log +pidfile=/var/run/supervisord.pid + +[program:php] +command=%(ENV_SUPERVISOR_PHP_COMMAND)s +user=%(ENV_SUPERVISOR_PHP_USER)s +environment=LARAVEL_SAIL="1" +stdout_logfile=/dev/stdout +stdout_logfile_maxbytes=0 +stderr_logfile=/dev/stderr +stderr_logfile_maxbytes=0 diff --git a/docker/8.4/Dockerfile b/docker/8.4/Dockerfile new file mode 100644 index 0000000..ec63236 --- /dev/null +++ b/docker/8.4/Dockerfile @@ -0,0 +1,71 @@ +FROM ubuntu:22.04 + +LABEL maintainer="Taylor Otwell" + +ARG WWWGROUP +ARG NODE_VERSION=20 +ARG MYSQL_CLIENT="mysql-client" +ARG POSTGRES_VERSION=17 + +WORKDIR /var/www/html + +ENV DEBIAN_FRONTEND=noninteractive +ENV TZ=UTC +ENV SUPERVISOR_PHP_COMMAND="/usr/bin/php -d variables_order=EGPCS /var/www/html/artisan serve --host=0.0.0.0 --port=80" +ENV SUPERVISOR_PHP_USER="sail" + +RUN ln -snf /usr/share/zoneinfo/$TZ /etc/localtime && echo $TZ > /etc/timezone + +RUN echo "Acquire::http::Pipeline-Depth 0;" > /etc/apt/apt.conf.d/99custom && \ + echo "Acquire::http::No-Cache true;" >> /etc/apt/apt.conf.d/99custom && \ + echo "Acquire::BrokenProxy true;" >> /etc/apt/apt.conf.d/99custom + +RUN apt-get update && apt-get upgrade -y \ + && mkdir -p /etc/apt/keyrings \ + && apt-get install -y gnupg gosu curl ca-certificates zip unzip git supervisor sqlite3 libcap2-bin libpng-dev python2 dnsutils librsvg2-bin fswatch ffmpeg nano \ + && curl -sS 'https://keyserver.ubuntu.com/pks/lookup?op=get&search=0x14aa40ec0831756756d7f66c4f4ea0aae5267a6c' | gpg --dearmor | tee /etc/apt/keyrings/ppa_ondrej_php.gpg > /dev/null \ + && echo "deb [signed-by=/etc/apt/keyrings/ppa_ondrej_php.gpg] https://ppa.launchpadcontent.net/ondrej/php/ubuntu jammy main" > /etc/apt/sources.list.d/ppa_ondrej_php.list \ + && apt-get update \ + && apt-get install -y php8.4-cli php8.4-dev \ + php8.4-pgsql php8.4-sqlite3 php8.4-gd \ + php8.4-curl php8.4-mongodb \ + php8.4-imap php8.4-mysql php8.4-mbstring \ + php8.4-xml php8.4-zip php8.4-bcmath php8.4-soap \ + php8.4-intl php8.4-readline \ + php8.4-ldap \ + php8.4-msgpack php8.4-igbinary php8.4-redis \ +# php8.4-swoole \ + php8.4-memcached php8.4-pcov php8.4-imagick php8.4-xdebug \ + && curl -sLS https://getcomposer.org/installer | php -- --install-dir=/usr/bin/ --filename=composer \ + && curl -fsSL https://deb.nodesource.com/gpgkey/nodesource-repo.gpg.key | gpg --dearmor -o /etc/apt/keyrings/nodesource.gpg \ + && echo "deb [signed-by=/etc/apt/keyrings/nodesource.gpg] https://deb.nodesource.com/node_$NODE_VERSION.x nodistro main" > /etc/apt/sources.list.d/nodesource.list \ + && apt-get update \ + && apt-get install -y nodejs \ + && npm install -g npm \ + && npm install -g pnpm \ + && npm install -g bun \ + && curl -sS https://dl.yarnpkg.com/debian/pubkey.gpg | gpg --dearmor | tee /etc/apt/keyrings/yarn.gpg >/dev/null \ + && echo "deb [signed-by=/etc/apt/keyrings/yarn.gpg] https://dl.yarnpkg.com/debian/ stable main" > /etc/apt/sources.list.d/yarn.list \ + && curl -sS https://www.postgresql.org/media/keys/ACCC4CF8.asc | gpg --dearmor | tee /etc/apt/keyrings/pgdg.gpg >/dev/null \ + && echo "deb [signed-by=/etc/apt/keyrings/pgdg.gpg] http://apt.postgresql.org/pub/repos/apt jammy-pgdg main" > /etc/apt/sources.list.d/pgdg.list \ + && apt-get update \ + && apt-get install -y yarn \ + && apt-get install -y $MYSQL_CLIENT \ + && apt-get install -y postgresql-client-$POSTGRES_VERSION \ + && apt-get -y autoremove \ + && apt-get clean \ + && rm -rf /var/lib/apt/lists/* /tmp/* /var/tmp/* + +RUN setcap "cap_net_bind_service=+ep" /usr/bin/php8.4 + +RUN groupadd --force -g $WWWGROUP sail +RUN useradd -ms /bin/bash --no-user-group -g $WWWGROUP -u 1337 sail + +COPY start-container /usr/local/bin/start-container +COPY supervisord.conf /etc/supervisor/conf.d/supervisord.conf +COPY php.ini /etc/php/8.4/cli/conf.d/99-sail.ini +RUN chmod +x /usr/local/bin/start-container + +EXPOSE 80/tcp + +ENTRYPOINT ["start-container"] diff --git a/docker/8.4/php.ini b/docker/8.4/php.ini new file mode 100644 index 0000000..0d8ce9e --- /dev/null +++ b/docker/8.4/php.ini @@ -0,0 +1,5 @@ +[PHP] +post_max_size = 100M +upload_max_filesize = 100M +variables_order = EGPCS +pcov.directory = . diff --git a/docker/8.4/start-container b/docker/8.4/start-container new file mode 100644 index 0000000..40c55df --- /dev/null +++ b/docker/8.4/start-container @@ -0,0 +1,26 @@ +#!/usr/bin/env bash + +if [ "$SUPERVISOR_PHP_USER" != "root" ] && [ "$SUPERVISOR_PHP_USER" != "sail" ]; then + echo "You should set SUPERVISOR_PHP_USER to either 'sail' or 'root'." + exit 1 +fi + +if [ ! -z "$WWWUSER" ]; then + usermod -u $WWWUSER sail +fi + +if [ ! -d /.composer ]; then + mkdir /.composer +fi + +chmod -R ugo+rw /.composer + +if [ $# -gt 0 ]; then + if [ "$SUPERVISOR_PHP_USER" = "root" ]; then + exec "$@" + else + exec gosu $WWWUSER "$@" + fi +else + exec /usr/bin/supervisord -c /etc/supervisor/conf.d/supervisord.conf +fi diff --git a/docker/8.4/supervisord.conf b/docker/8.4/supervisord.conf new file mode 100644 index 0000000..656da8a --- /dev/null +++ b/docker/8.4/supervisord.conf @@ -0,0 +1,14 @@ +[supervisord] +nodaemon=true +user=root +logfile=/var/log/supervisor/supervisord.log +pidfile=/var/run/supervisord.pid + +[program:php] +command=%(ENV_SUPERVISOR_PHP_COMMAND)s +user=%(ENV_SUPERVISOR_PHP_USER)s +environment=LARAVEL_SAIL="1" +stdout_logfile=/dev/stdout +stdout_logfile_maxbytes=0 +stderr_logfile=/dev/stderr +stderr_logfile_maxbytes=0 diff --git a/docker/mariadb/create-testing-database.sh b/docker/mariadb/create-testing-database.sh new file mode 100644 index 0000000..d3b19d9 --- /dev/null +++ b/docker/mariadb/create-testing-database.sh @@ -0,0 +1,6 @@ +#!/usr/bin/env bash + +/usr/bin/mariadb --user=root --password="$MYSQL_ROOT_PASSWORD" <<-EOSQL + CREATE DATABASE IF NOT EXISTS testing; + GRANT ALL PRIVILEGES ON \`testing%\`.* TO '$MYSQL_USER'@'%'; +EOSQL diff --git a/docker/mysql/create-testing-database.sh b/docker/mysql/create-testing-database.sh new file mode 100644 index 0000000..aeb1826 --- /dev/null +++ b/docker/mysql/create-testing-database.sh @@ -0,0 +1,6 @@ +#!/usr/bin/env bash + +mysql --user=root --password="$MYSQL_ROOT_PASSWORD" <<-EOSQL + CREATE DATABASE IF NOT EXISTS testing; + GRANT ALL PRIVILEGES ON \`testing%\`.* TO '$MYSQL_USER'@'%'; +EOSQL diff --git a/docker/pgsql/create-testing-database.sql b/docker/pgsql/create-testing-database.sql new file mode 100644 index 0000000..d84dc07 --- /dev/null +++ b/docker/pgsql/create-testing-database.sql @@ -0,0 +1,2 @@ +SELECT 'CREATE DATABASE testing' +WHERE NOT EXISTS (SELECT FROM pg_database WHERE datname = 'testing')\gexec diff --git a/package-lock.json b/package-lock.json new file mode 100644 index 0000000..66fd095 --- /dev/null +++ b/package-lock.json @@ -0,0 +1,4058 @@ +{ + "name": "spk_pm_dosbing", + "lockfileVersion": 3, + "requires": true, + "packages": { + "": { + "dependencies": { + "@popperjs/core": "^2.11.8", + "@preline/accordion": "^2.5.2", + "@preline/datatable": "^2.5.2", + "@preline/dropdown": "^2.5.2", + "@preline/layout-splitter": "^2.5.2", + "@preline/stepper": "^2.5.2", + "@preline/tooltip": "^2.5.2", + "datatables.net-buttons": "^3.2.2", + "datatables.net-dt": "^2.2.2", + "gsap": "^3.12.7", + "jquery": "^3.7.1", + "jszip": "^3.10.1", + "lenis": "^1.1.20", + "pdfmake": "^0.2.18", + "preline": "^2.7.0", + "simple-datatables": "^9.2.1", + "swiper": "^11.2.3" + }, + "devDependencies": { + "@tailwindcss/forms": "^0.5.2", + "alpinejs": "^3.4.2", + "autoprefixer": "^10.4.20", + "axios": "^1.7.4", + "concurrently": "^9.0.1", + "flowbite": "^2.5.2", + "laravel-echo": "^2.0.2", + "laravel-vite-plugin": "^1.2.0", + "postcss": "^8.4.49", + "prettier": "^3.5.2", + "pusher-js": "^8.4.0", + "tailwindcss": "^3.4.15", + "vite": "^6.1.0" + } + }, + "node_modules/@alloc/quick-lru": { + "version": "5.2.0", + "resolved": "https://registry.npmjs.org/@alloc/quick-lru/-/quick-lru-5.2.0.tgz", + "integrity": "sha512-UrcABB+4bUrFABwbluTIBErXwvbsU/V7TZWfmbgJfbkwiBuziS9gxdODUyuiecfdGQ85jglMW6juS3+z5TsKLw==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/@esbuild/aix-ppc64": { + "version": "0.24.2", + "resolved": "https://registry.npmjs.org/@esbuild/aix-ppc64/-/aix-ppc64-0.24.2.tgz", + "integrity": "sha512-thpVCb/rhxE/BnMLQ7GReQLLN8q9qbHmI55F4489/ByVg2aQaQ6kbcLb6FHkocZzQhxc4gx0sCk0tJkKBFzDhA==", + "cpu": [ + "ppc64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "aix" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/android-arm": { + "version": "0.24.2", + "resolved": "https://registry.npmjs.org/@esbuild/android-arm/-/android-arm-0.24.2.tgz", + "integrity": "sha512-tmwl4hJkCfNHwFB3nBa8z1Uy3ypZpxqxfTQOcHX+xRByyYgunVbZ9MzUUfb0RxaHIMnbHagwAxuTL+tnNM+1/Q==", + "cpu": [ + "arm" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "android" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/android-arm64": { + "version": "0.24.2", + "resolved": "https://registry.npmjs.org/@esbuild/android-arm64/-/android-arm64-0.24.2.tgz", + "integrity": "sha512-cNLgeqCqV8WxfcTIOeL4OAtSmL8JjcN6m09XIgro1Wi7cF4t/THaWEa7eL5CMoMBdjoHOTh/vwTO/o2TRXIyzg==", + "cpu": [ + "arm64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "android" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/android-x64": { + "version": "0.24.2", + "resolved": "https://registry.npmjs.org/@esbuild/android-x64/-/android-x64-0.24.2.tgz", + "integrity": "sha512-B6Q0YQDqMx9D7rvIcsXfmJfvUYLoP722bgfBlO5cGvNVb5V/+Y7nhBE3mHV9OpxBf4eAS2S68KZztiPaWq4XYw==", + "cpu": [ + "x64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "android" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/darwin-arm64": { + "version": "0.24.2", + "resolved": "https://registry.npmjs.org/@esbuild/darwin-arm64/-/darwin-arm64-0.24.2.tgz", + "integrity": "sha512-kj3AnYWc+CekmZnS5IPu9D+HWtUI49hbnyqk0FLEJDbzCIQt7hg7ucF1SQAilhtYpIujfaHr6O0UHlzzSPdOeA==", + "cpu": [ + "arm64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "darwin" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/darwin-x64": { + "version": "0.24.2", + "resolved": "https://registry.npmjs.org/@esbuild/darwin-x64/-/darwin-x64-0.24.2.tgz", + "integrity": "sha512-WeSrmwwHaPkNR5H3yYfowhZcbriGqooyu3zI/3GGpF8AyUdsrrP0X6KumITGA9WOyiJavnGZUwPGvxvwfWPHIA==", + "cpu": [ + "x64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "darwin" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/freebsd-arm64": { + "version": "0.24.2", + "resolved": "https://registry.npmjs.org/@esbuild/freebsd-arm64/-/freebsd-arm64-0.24.2.tgz", + "integrity": "sha512-UN8HXjtJ0k/Mj6a9+5u6+2eZ2ERD7Edt1Q9IZiB5UZAIdPnVKDoG7mdTVGhHJIeEml60JteamR3qhsr1r8gXvg==", + "cpu": [ + "arm64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "freebsd" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/freebsd-x64": { + "version": "0.24.2", + "resolved": "https://registry.npmjs.org/@esbuild/freebsd-x64/-/freebsd-x64-0.24.2.tgz", + "integrity": "sha512-TvW7wE/89PYW+IevEJXZ5sF6gJRDY/14hyIGFXdIucxCsbRmLUcjseQu1SyTko+2idmCw94TgyaEZi9HUSOe3Q==", + "cpu": [ + "x64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "freebsd" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/linux-arm": { + "version": "0.24.2", + "resolved": "https://registry.npmjs.org/@esbuild/linux-arm/-/linux-arm-0.24.2.tgz", + "integrity": "sha512-n0WRM/gWIdU29J57hJyUdIsk0WarGd6To0s+Y+LwvlC55wt+GT/OgkwoXCXvIue1i1sSNWblHEig00GBWiJgfA==", + "cpu": [ + "arm" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/linux-arm64": { + "version": "0.24.2", + "resolved": "https://registry.npmjs.org/@esbuild/linux-arm64/-/linux-arm64-0.24.2.tgz", + "integrity": "sha512-7HnAD6074BW43YvvUmE/35Id9/NB7BeX5EoNkK9obndmZBUk8xmJJeU7DwmUeN7tkysslb2eSl6CTrYz6oEMQg==", + "cpu": [ + "arm64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/linux-ia32": { + "version": "0.24.2", + "resolved": "https://registry.npmjs.org/@esbuild/linux-ia32/-/linux-ia32-0.24.2.tgz", + "integrity": "sha512-sfv0tGPQhcZOgTKO3oBE9xpHuUqguHvSo4jl+wjnKwFpapx+vUDcawbwPNuBIAYdRAvIDBfZVvXprIj3HA+Ugw==", + "cpu": [ + "ia32" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/linux-loong64": { + "version": "0.24.2", + "resolved": "https://registry.npmjs.org/@esbuild/linux-loong64/-/linux-loong64-0.24.2.tgz", + "integrity": "sha512-CN9AZr8kEndGooS35ntToZLTQLHEjtVB5n7dl8ZcTZMonJ7CCfStrYhrzF97eAecqVbVJ7APOEe18RPI4KLhwQ==", + "cpu": [ + "loong64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/linux-mips64el": { + "version": "0.24.2", + "resolved": "https://registry.npmjs.org/@esbuild/linux-mips64el/-/linux-mips64el-0.24.2.tgz", + "integrity": "sha512-iMkk7qr/wl3exJATwkISxI7kTcmHKE+BlymIAbHO8xanq/TjHaaVThFF6ipWzPHryoFsesNQJPE/3wFJw4+huw==", + "cpu": [ + "mips64el" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/linux-ppc64": { + "version": "0.24.2", + "resolved": "https://registry.npmjs.org/@esbuild/linux-ppc64/-/linux-ppc64-0.24.2.tgz", + "integrity": "sha512-shsVrgCZ57Vr2L8mm39kO5PPIb+843FStGt7sGGoqiiWYconSxwTiuswC1VJZLCjNiMLAMh34jg4VSEQb+iEbw==", + "cpu": [ + "ppc64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/linux-riscv64": { + "version": "0.24.2", + "resolved": "https://registry.npmjs.org/@esbuild/linux-riscv64/-/linux-riscv64-0.24.2.tgz", + "integrity": "sha512-4eSFWnU9Hhd68fW16GD0TINewo1L6dRrB+oLNNbYyMUAeOD2yCK5KXGK1GH4qD/kT+bTEXjsyTCiJGHPZ3eM9Q==", + "cpu": [ + "riscv64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/linux-s390x": { + "version": "0.24.2", + "resolved": "https://registry.npmjs.org/@esbuild/linux-s390x/-/linux-s390x-0.24.2.tgz", + "integrity": "sha512-S0Bh0A53b0YHL2XEXC20bHLuGMOhFDO6GN4b3YjRLK//Ep3ql3erpNcPlEFed93hsQAjAQDNsvcK+hV90FubSw==", + "cpu": [ + "s390x" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/linux-x64": { + "version": "0.24.2", + "resolved": "https://registry.npmjs.org/@esbuild/linux-x64/-/linux-x64-0.24.2.tgz", + "integrity": "sha512-8Qi4nQcCTbLnK9WoMjdC9NiTG6/E38RNICU6sUNqK0QFxCYgoARqVqxdFmWkdonVsvGqWhmm7MO0jyTqLqwj0Q==", + "cpu": [ + "x64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/netbsd-arm64": { + "version": "0.24.2", + "resolved": "https://registry.npmjs.org/@esbuild/netbsd-arm64/-/netbsd-arm64-0.24.2.tgz", + "integrity": "sha512-wuLK/VztRRpMt9zyHSazyCVdCXlpHkKm34WUyinD2lzK07FAHTq0KQvZZlXikNWkDGoT6x3TD51jKQ7gMVpopw==", + "cpu": [ + "arm64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "netbsd" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/netbsd-x64": { + "version": "0.24.2", + "resolved": "https://registry.npmjs.org/@esbuild/netbsd-x64/-/netbsd-x64-0.24.2.tgz", + "integrity": "sha512-VefFaQUc4FMmJuAxmIHgUmfNiLXY438XrL4GDNV1Y1H/RW3qow68xTwjZKfj/+Plp9NANmzbH5R40Meudu8mmw==", + "cpu": [ + "x64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "netbsd" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/openbsd-arm64": { + "version": "0.24.2", + "resolved": "https://registry.npmjs.org/@esbuild/openbsd-arm64/-/openbsd-arm64-0.24.2.tgz", + "integrity": "sha512-YQbi46SBct6iKnszhSvdluqDmxCJA+Pu280Av9WICNwQmMxV7nLRHZfjQzwbPs3jeWnuAhE9Jy0NrnJ12Oz+0A==", + "cpu": [ + "arm64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "openbsd" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/openbsd-x64": { + "version": "0.24.2", + "resolved": "https://registry.npmjs.org/@esbuild/openbsd-x64/-/openbsd-x64-0.24.2.tgz", + "integrity": "sha512-+iDS6zpNM6EnJyWv0bMGLWSWeXGN/HTaF/LXHXHwejGsVi+ooqDfMCCTerNFxEkM3wYVcExkeGXNqshc9iMaOA==", + "cpu": [ + "x64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "openbsd" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/sunos-x64": { + "version": "0.24.2", + "resolved": "https://registry.npmjs.org/@esbuild/sunos-x64/-/sunos-x64-0.24.2.tgz", + "integrity": "sha512-hTdsW27jcktEvpwNHJU4ZwWFGkz2zRJUz8pvddmXPtXDzVKTTINmlmga3ZzwcuMpUvLw7JkLy9QLKyGpD2Yxig==", + "cpu": [ + "x64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "sunos" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/win32-arm64": { + "version": "0.24.2", + "resolved": "https://registry.npmjs.org/@esbuild/win32-arm64/-/win32-arm64-0.24.2.tgz", + "integrity": "sha512-LihEQ2BBKVFLOC9ZItT9iFprsE9tqjDjnbulhHoFxYQtQfai7qfluVODIYxt1PgdoyQkz23+01rzwNwYfutxUQ==", + "cpu": [ + "arm64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "win32" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/win32-ia32": { + "version": "0.24.2", + "resolved": "https://registry.npmjs.org/@esbuild/win32-ia32/-/win32-ia32-0.24.2.tgz", + "integrity": "sha512-q+iGUwfs8tncmFC9pcnD5IvRHAzmbwQ3GPS5/ceCyHdjXubwQWI12MKWSNSMYLJMq23/IUCvJMS76PDqXe1fxA==", + "cpu": [ + "ia32" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "win32" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/win32-x64": { + "version": "0.24.2", + "resolved": "https://registry.npmjs.org/@esbuild/win32-x64/-/win32-x64-0.24.2.tgz", + "integrity": "sha512-7VTgWzgMGvup6aSqDPLiW5zHaxYJGTO4OokMjIlrCtf+VpEL+cXKtCvg723iguPYI5oaUNdS+/V7OU2gvXVWEg==", + "cpu": [ + "x64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "win32" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@foliojs-fork/fontkit": { + "version": "1.9.2", + "resolved": "https://registry.npmjs.org/@foliojs-fork/fontkit/-/fontkit-1.9.2.tgz", + "integrity": "sha512-IfB5EiIb+GZk+77TRB86AHroVaqfq8JRFlUbz0WEwsInyCG0epX2tCPOy+UfaWPju30DeVoUAXfzWXmhn753KA==", + "license": "MIT", + "dependencies": { + "@foliojs-fork/restructure": "^2.0.2", + "brotli": "^1.2.0", + "clone": "^1.0.4", + "deep-equal": "^1.0.0", + "dfa": "^1.2.0", + "tiny-inflate": "^1.0.2", + "unicode-properties": "^1.2.2", + "unicode-trie": "^2.0.0" + } + }, + "node_modules/@foliojs-fork/linebreak": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/@foliojs-fork/linebreak/-/linebreak-1.1.2.tgz", + "integrity": "sha512-ZPohpxxbuKNE0l/5iBJnOAfUaMACwvUIKCvqtWGKIMv1lPYoNjYXRfhi9FeeV9McBkBLxsMFWTVVhHJA8cyzvg==", + "license": "MIT", + "dependencies": { + "base64-js": "1.3.1", + "unicode-trie": "^2.0.0" + } + }, + "node_modules/@foliojs-fork/pdfkit": { + "version": "0.15.3", + "resolved": "https://registry.npmjs.org/@foliojs-fork/pdfkit/-/pdfkit-0.15.3.tgz", + "integrity": "sha512-Obc0Wmy3bm7BINFVvPhcl2rnSSK61DQrlHU8aXnAqDk9LCjWdUOPwhgD8Ywz5VtuFjRxmVOM/kQ/XLIBjDvltw==", + "license": "MIT", + "dependencies": { + "@foliojs-fork/fontkit": "^1.9.2", + "@foliojs-fork/linebreak": "^1.1.1", + "crypto-js": "^4.2.0", + "jpeg-exif": "^1.1.4", + "png-js": "^1.0.0" + } + }, + "node_modules/@foliojs-fork/restructure": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/@foliojs-fork/restructure/-/restructure-2.0.2.tgz", + "integrity": "sha512-59SgoZ3EXbkfSX7b63tsou/SDGzwUEK6MuB5sKqgVK1/XE0fxmpsOb9DQI8LXW3KfGnAjImCGhhEb7uPPAUVNA==", + "license": "MIT" + }, + "node_modules/@isaacs/cliui": { + "version": "8.0.2", + "resolved": "https://registry.npmjs.org/@isaacs/cliui/-/cliui-8.0.2.tgz", + "integrity": "sha512-O8jcjabXaleOG9DQ0+ARXWZBTfnP4WNAqzuiJK7ll44AmxGKv/J2M4TPjxjY3znBCfvBXFzucm1twdyFybFqEA==", + "dev": true, + "license": "ISC", + "dependencies": { + "string-width": "^5.1.2", + "string-width-cjs": "npm:string-width@^4.2.0", + "strip-ansi": "^7.0.1", + "strip-ansi-cjs": "npm:strip-ansi@^6.0.1", + "wrap-ansi": "^8.1.0", + "wrap-ansi-cjs": "npm:wrap-ansi@^7.0.0" + }, + "engines": { + "node": ">=12" + } + }, + "node_modules/@jridgewell/gen-mapping": { + "version": "0.3.8", + "resolved": "https://registry.npmjs.org/@jridgewell/gen-mapping/-/gen-mapping-0.3.8.tgz", + "integrity": "sha512-imAbBGkb+ebQyxKgzv5Hu2nmROxoDOXHh80evxdoXNOrvAnVx7zimzc1Oo5h9RlfV4vPXaE2iM5pOFbvOCClWA==", + "dev": true, + "license": "MIT", + "dependencies": { + "@jridgewell/set-array": "^1.2.1", + "@jridgewell/sourcemap-codec": "^1.4.10", + "@jridgewell/trace-mapping": "^0.3.24" + }, + "engines": { + "node": ">=6.0.0" + } + }, + "node_modules/@jridgewell/resolve-uri": { + "version": "3.1.2", + "resolved": "https://registry.npmjs.org/@jridgewell/resolve-uri/-/resolve-uri-3.1.2.tgz", + "integrity": "sha512-bRISgCIjP20/tbWSPWMEi54QVPRZExkuD9lJL+UIxUKtwVJA8wW1Trb1jMs1RFXo1CBTNZ/5hpC9QvmKWdopKw==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=6.0.0" + } + }, + "node_modules/@jridgewell/set-array": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/@jridgewell/set-array/-/set-array-1.2.1.tgz", + "integrity": "sha512-R8gLRTZeyp03ymzP/6Lil/28tGeGEzhx1q2k703KGWRAI1VdvPIXdG70VJc2pAMw3NA6JKL5hhFu1sJX0Mnn/A==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=6.0.0" + } + }, + "node_modules/@jridgewell/sourcemap-codec": { + "version": "1.5.0", + "resolved": "https://registry.npmjs.org/@jridgewell/sourcemap-codec/-/sourcemap-codec-1.5.0.tgz", + "integrity": "sha512-gv3ZRaISU3fjPAgNsriBRqGWQL6quFx04YMPW/zD8XMLsU32mhCCbfbO6KZFLjvYpCZ8zyDEgqsgf+PwPaM7GQ==", + "dev": true, + "license": "MIT" + }, + "node_modules/@jridgewell/trace-mapping": { + "version": "0.3.25", + "resolved": "https://registry.npmjs.org/@jridgewell/trace-mapping/-/trace-mapping-0.3.25.tgz", + "integrity": "sha512-vNk6aEwybGtawWmy/PzwnGDOjCkLWSD2wqvjGGAgOAwCGWySYXfYoxt00IJkTF+8Lb57DwOb3Aa0o9CApepiYQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "@jridgewell/resolve-uri": "^3.1.0", + "@jridgewell/sourcemap-codec": "^1.4.14" + } + }, + "node_modules/@nodelib/fs.scandir": { + "version": "2.1.5", + "resolved": "https://registry.npmjs.org/@nodelib/fs.scandir/-/fs.scandir-2.1.5.tgz", + "integrity": "sha512-vq24Bq3ym5HEQm2NKCr3yXDwjc7vTsEThRDnkp2DK9p1uqLR+DHurm/NOTo0KG7HYHU7eppKZj3MyqYuMBf62g==", + "dev": true, + "license": "MIT", + "dependencies": { + "@nodelib/fs.stat": "2.0.5", + "run-parallel": "^1.1.9" + }, + "engines": { + "node": ">= 8" + } + }, + "node_modules/@nodelib/fs.stat": { + "version": "2.0.5", + "resolved": "https://registry.npmjs.org/@nodelib/fs.stat/-/fs.stat-2.0.5.tgz", + "integrity": "sha512-RkhPPp2zrqDAQA/2jNhnztcPAlv64XdhIp7a7454A5ovI7Bukxgt7MX7udwAu3zg1DcpPU0rz3VV1SeaqvY4+A==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">= 8" + } + }, + "node_modules/@nodelib/fs.walk": { + "version": "1.2.8", + "resolved": "https://registry.npmjs.org/@nodelib/fs.walk/-/fs.walk-1.2.8.tgz", + "integrity": "sha512-oGB+UxlgWcgQkgwo8GcEGwemoTFt3FIO9ababBmaGwXIoBKZ+GTy0pP185beGg7Llih/NSHSV2XAs1lnznocSg==", + "dev": true, + "license": "MIT", + "dependencies": { + "@nodelib/fs.scandir": "2.1.5", + "fastq": "^1.6.0" + }, + "engines": { + "node": ">= 8" + } + }, + "node_modules/@pkgjs/parseargs": { + "version": "0.11.0", + "resolved": "https://registry.npmjs.org/@pkgjs/parseargs/-/parseargs-0.11.0.tgz", + "integrity": "sha512-+1VkjdD0QBLPodGrJUeqarH8VAIvQODIbwh9XpP5Syisf7YoQgsJKPNFoqqLQlu+VQ/tVSshMR6loPMn8U+dPg==", + "dev": true, + "license": "MIT", + "optional": true, + "engines": { + "node": ">=14" + } + }, + "node_modules/@popperjs/core": { + "version": "2.11.8", + "resolved": "https://registry.npmjs.org/@popperjs/core/-/core-2.11.8.tgz", + "integrity": "sha512-P1st0aksCrn9sGZhp8GMYwBnQsbvAWsZAX44oXNNvLHGqAOcoVxmjZiohstwQ7SqKnbR47akdNi+uleWD8+g6A==", + "license": "MIT", + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/popperjs" + } + }, + "node_modules/@preline/accordion": { + "version": "2.5.2", + "resolved": "https://registry.npmjs.org/@preline/accordion/-/accordion-2.5.2.tgz", + "integrity": "sha512-5+C8c+vWyUMCdBOWMoXEIPT5ICSZMZ18G3AUjtoGI6UgSOZ+QpZMh/rpfPLoZkg0TrUhuD6XhBDvoqpCyH66Aw==", + "license": "Licensed under MIT and Preline UI Fair Use License" + }, + "node_modules/@preline/datatable": { + "version": "2.5.2", + "resolved": "https://registry.npmjs.org/@preline/datatable/-/datatable-2.5.2.tgz", + "integrity": "sha512-F78PBlGyLRqfqbU2UWkTdPBl7hCn6Ne7jsEQecY3BhhT9C1xtf01RSlNY+avMijBBiqT0UdhxTApcBaC2YEthA==", + "license": "Licensed under MIT and Preline UI Fair Use License" + }, + "node_modules/@preline/dropdown": { + "version": "2.5.2", + "resolved": "https://registry.npmjs.org/@preline/dropdown/-/dropdown-2.5.2.tgz", + "integrity": "sha512-eFrJxIlvIofn8ge6Fr/5jLDLdKtiTx69U/JsIp1jOPTUheuBnyyuyjJGASNAAJjx+VBHnn/V3538ZeK7E/VKAQ==", + "license": "Licensed under MIT and Preline UI Fair Use License" + }, + "node_modules/@preline/layout-splitter": { + "version": "2.5.2", + "resolved": "https://registry.npmjs.org/@preline/layout-splitter/-/layout-splitter-2.5.2.tgz", + "integrity": "sha512-3y+Xiz2XmoDS24XGSFvzJf0xP4f05jLRLY8PV+mzvoDcLOjCSLBPCkaOY4Eirj27Ru9EmG9/zcCUHTmIfGEiLQ==", + "license": "Licensed under MIT and Preline UI Fair Use License" + }, + "node_modules/@preline/stepper": { + "version": "2.5.2", + "resolved": "https://registry.npmjs.org/@preline/stepper/-/stepper-2.5.2.tgz", + "integrity": "sha512-QqUJqreUJp6teXf2TyKmiFNNW2xvuZLZ9WgL3w1j98lWwa5lRfUhVu2NMQ2ffQsVV5OVDeVcGBznO41sWYp5fw==", + "license": "Licensed under MIT and Preline UI Fair Use License" + }, + "node_modules/@preline/tooltip": { + "version": "2.5.2", + "resolved": "https://registry.npmjs.org/@preline/tooltip/-/tooltip-2.5.2.tgz", + "integrity": "sha512-dXqgBRyYZ2Y7LOZxd+QM6jRzRBUqkoT+o4zgaKXtPVessNQjRjulJqaPRhjfW8XSIEz4f5PP781dazvw1Zj0vQ==", + "license": "Licensed under MIT and Preline UI Fair Use License" + }, + "node_modules/@rollup/plugin-node-resolve": { + "version": "15.3.1", + "resolved": "https://registry.npmjs.org/@rollup/plugin-node-resolve/-/plugin-node-resolve-15.3.1.tgz", + "integrity": "sha512-tgg6b91pAybXHJQMAAwW9VuWBO6Thi+q7BCNARLwSqlmsHz0XYURtGvh/AuwSADXSI4h/2uHbs7s4FzlZDGSGA==", + "dev": true, + "license": "MIT", + "dependencies": { + "@rollup/pluginutils": "^5.0.1", + "@types/resolve": "1.20.2", + "deepmerge": "^4.2.2", + "is-module": "^1.0.0", + "resolve": "^1.22.1" + }, + "engines": { + "node": ">=14.0.0" + }, + "peerDependencies": { + "rollup": "^2.78.0||^3.0.0||^4.0.0" + }, + "peerDependenciesMeta": { + "rollup": { + "optional": true + } + } + }, + "node_modules/@rollup/pluginutils": { + "version": "5.1.4", + "resolved": "https://registry.npmjs.org/@rollup/pluginutils/-/pluginutils-5.1.4.tgz", + "integrity": "sha512-USm05zrsFxYLPdWWq+K3STlWiT/3ELn3RcV5hJMghpeAIhxfsUIg6mt12CBJBInWMV4VneoV7SfGv8xIwo2qNQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "@types/estree": "^1.0.0", + "estree-walker": "^2.0.2", + "picomatch": "^4.0.2" + }, + "engines": { + "node": ">=14.0.0" + }, + "peerDependencies": { + "rollup": "^1.20.0||^2.0.0||^3.0.0||^4.0.0" + }, + "peerDependenciesMeta": { + "rollup": { + "optional": true + } + } + }, + "node_modules/@rollup/rollup-android-arm-eabi": { + "version": "4.34.8", + "resolved": "https://registry.npmjs.org/@rollup/rollup-android-arm-eabi/-/rollup-android-arm-eabi-4.34.8.tgz", + "integrity": "sha512-q217OSE8DTp8AFHuNHXo0Y86e1wtlfVrXiAlwkIvGRQv9zbc6mE3sjIVfwI8sYUyNxwOg0j/Vm1RKM04JcWLJw==", + "cpu": [ + "arm" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "android" + ] + }, + "node_modules/@rollup/rollup-android-arm64": { + "version": "4.34.8", + "resolved": "https://registry.npmjs.org/@rollup/rollup-android-arm64/-/rollup-android-arm64-4.34.8.tgz", + "integrity": "sha512-Gigjz7mNWaOL9wCggvoK3jEIUUbGul656opstjaUSGC3eT0BM7PofdAJaBfPFWWkXNVAXbaQtC99OCg4sJv70Q==", + "cpu": [ + "arm64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "android" + ] + }, + "node_modules/@rollup/rollup-darwin-arm64": { + "version": "4.34.8", + "resolved": "https://registry.npmjs.org/@rollup/rollup-darwin-arm64/-/rollup-darwin-arm64-4.34.8.tgz", + "integrity": "sha512-02rVdZ5tgdUNRxIUrFdcMBZQoaPMrxtwSb+/hOfBdqkatYHR3lZ2A2EGyHq2sGOd0Owk80oV3snlDASC24He3Q==", + "cpu": [ + "arm64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "darwin" + ] + }, + "node_modules/@rollup/rollup-darwin-x64": { + "version": "4.34.8", + "resolved": "https://registry.npmjs.org/@rollup/rollup-darwin-x64/-/rollup-darwin-x64-4.34.8.tgz", + "integrity": "sha512-qIP/elwR/tq/dYRx3lgwK31jkZvMiD6qUtOycLhTzCvrjbZ3LjQnEM9rNhSGpbLXVJYQ3rq39A6Re0h9tU2ynw==", + "cpu": [ + "x64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "darwin" + ] + }, + "node_modules/@rollup/rollup-freebsd-arm64": { + "version": "4.34.8", + "resolved": "https://registry.npmjs.org/@rollup/rollup-freebsd-arm64/-/rollup-freebsd-arm64-4.34.8.tgz", + "integrity": "sha512-IQNVXL9iY6NniYbTaOKdrlVP3XIqazBgJOVkddzJlqnCpRi/yAeSOa8PLcECFSQochzqApIOE1GHNu3pCz+BDA==", + "cpu": [ + "arm64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "freebsd" + ] + }, + "node_modules/@rollup/rollup-freebsd-x64": { + "version": "4.34.8", + "resolved": "https://registry.npmjs.org/@rollup/rollup-freebsd-x64/-/rollup-freebsd-x64-4.34.8.tgz", + "integrity": "sha512-TYXcHghgnCqYFiE3FT5QwXtOZqDj5GmaFNTNt3jNC+vh22dc/ukG2cG+pi75QO4kACohZzidsq7yKTKwq/Jq7Q==", + "cpu": [ + "x64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "freebsd" + ] + }, + "node_modules/@rollup/rollup-linux-arm-gnueabihf": { + "version": "4.34.8", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-arm-gnueabihf/-/rollup-linux-arm-gnueabihf-4.34.8.tgz", + "integrity": "sha512-A4iphFGNkWRd+5m3VIGuqHnG3MVnqKe7Al57u9mwgbyZ2/xF9Jio72MaY7xxh+Y87VAHmGQr73qoKL9HPbXj1g==", + "cpu": [ + "arm" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ] + }, + "node_modules/@rollup/rollup-linux-arm-musleabihf": { + "version": "4.34.8", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-arm-musleabihf/-/rollup-linux-arm-musleabihf-4.34.8.tgz", + "integrity": "sha512-S0lqKLfTm5u+QTxlFiAnb2J/2dgQqRy/XvziPtDd1rKZFXHTyYLoVL58M/XFwDI01AQCDIevGLbQrMAtdyanpA==", + "cpu": [ + "arm" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ] + }, + "node_modules/@rollup/rollup-linux-arm64-gnu": { + "version": "4.34.8", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-arm64-gnu/-/rollup-linux-arm64-gnu-4.34.8.tgz", + "integrity": "sha512-jpz9YOuPiSkL4G4pqKrus0pn9aYwpImGkosRKwNi+sJSkz+WU3anZe6hi73StLOQdfXYXC7hUfsQlTnjMd3s1A==", + "cpu": [ + "arm64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ] + }, + "node_modules/@rollup/rollup-linux-arm64-musl": { + "version": "4.34.8", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-arm64-musl/-/rollup-linux-arm64-musl-4.34.8.tgz", + "integrity": "sha512-KdSfaROOUJXgTVxJNAZ3KwkRc5nggDk+06P6lgi1HLv1hskgvxHUKZ4xtwHkVYJ1Rep4GNo+uEfycCRRxht7+Q==", + "cpu": [ + "arm64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ] + }, + "node_modules/@rollup/rollup-linux-loongarch64-gnu": { + "version": "4.34.8", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-loongarch64-gnu/-/rollup-linux-loongarch64-gnu-4.34.8.tgz", + "integrity": "sha512-NyF4gcxwkMFRjgXBM6g2lkT58OWztZvw5KkV2K0qqSnUEqCVcqdh2jN4gQrTn/YUpAcNKyFHfoOZEer9nwo6uQ==", + "cpu": [ + "loong64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ] + }, + "node_modules/@rollup/rollup-linux-powerpc64le-gnu": { + "version": "4.34.8", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-powerpc64le-gnu/-/rollup-linux-powerpc64le-gnu-4.34.8.tgz", + "integrity": "sha512-LMJc999GkhGvktHU85zNTDImZVUCJ1z/MbAJTnviiWmmjyckP5aQsHtcujMjpNdMZPT2rQEDBlJfubhs3jsMfw==", + "cpu": [ + "ppc64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ] + }, + "node_modules/@rollup/rollup-linux-riscv64-gnu": { + "version": "4.34.8", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-riscv64-gnu/-/rollup-linux-riscv64-gnu-4.34.8.tgz", + "integrity": "sha512-xAQCAHPj8nJq1PI3z8CIZzXuXCstquz7cIOL73HHdXiRcKk8Ywwqtx2wrIy23EcTn4aZ2fLJNBB8d0tQENPCmw==", + "cpu": [ + "riscv64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ] + }, + "node_modules/@rollup/rollup-linux-s390x-gnu": { + "version": "4.34.8", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-s390x-gnu/-/rollup-linux-s390x-gnu-4.34.8.tgz", + "integrity": "sha512-DdePVk1NDEuc3fOe3dPPTb+rjMtuFw89gw6gVWxQFAuEqqSdDKnrwzZHrUYdac7A7dXl9Q2Vflxpme15gUWQFA==", + "cpu": [ + "s390x" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ] + }, + "node_modules/@rollup/rollup-linux-x64-gnu": { + "version": "4.34.8", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-x64-gnu/-/rollup-linux-x64-gnu-4.34.8.tgz", + "integrity": "sha512-8y7ED8gjxITUltTUEJLQdgpbPh1sUQ0kMTmufRF/Ns5tI9TNMNlhWtmPKKHCU0SilX+3MJkZ0zERYYGIVBYHIA==", + "cpu": [ + "x64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ] + }, + "node_modules/@rollup/rollup-linux-x64-musl": { + "version": "4.34.8", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-x64-musl/-/rollup-linux-x64-musl-4.34.8.tgz", + "integrity": "sha512-SCXcP0ZpGFIe7Ge+McxY5zKxiEI5ra+GT3QRxL0pMMtxPfpyLAKleZODi1zdRHkz5/BhueUrYtYVgubqe9JBNQ==", + "cpu": [ + "x64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ] + }, + "node_modules/@rollup/rollup-win32-arm64-msvc": { + "version": "4.34.8", + "resolved": "https://registry.npmjs.org/@rollup/rollup-win32-arm64-msvc/-/rollup-win32-arm64-msvc-4.34.8.tgz", + "integrity": "sha512-YHYsgzZgFJzTRbth4h7Or0m5O74Yda+hLin0irAIobkLQFRQd1qWmnoVfwmKm9TXIZVAD0nZ+GEb2ICicLyCnQ==", + "cpu": [ + "arm64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "win32" + ] + }, + "node_modules/@rollup/rollup-win32-ia32-msvc": { + "version": "4.34.8", + "resolved": "https://registry.npmjs.org/@rollup/rollup-win32-ia32-msvc/-/rollup-win32-ia32-msvc-4.34.8.tgz", + "integrity": "sha512-r3NRQrXkHr4uWy5TOjTpTYojR9XmF0j/RYgKCef+Ag46FWUTltm5ziticv8LdNsDMehjJ543x/+TJAek/xBA2w==", + "cpu": [ + "ia32" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "win32" + ] + }, + "node_modules/@rollup/rollup-win32-x64-msvc": { + "version": "4.34.8", + "resolved": "https://registry.npmjs.org/@rollup/rollup-win32-x64-msvc/-/rollup-win32-x64-msvc-4.34.8.tgz", + "integrity": "sha512-U0FaE5O1BCpZSeE6gBl3c5ObhePQSfk9vDRToMmTkbhCOgW4jqvtS5LGyQ76L1fH8sM0keRp4uDTsbjiUyjk0g==", + "cpu": [ + "x64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "win32" + ] + }, + "node_modules/@tailwindcss/forms": { + "version": "0.5.10", + "resolved": "https://registry.npmjs.org/@tailwindcss/forms/-/forms-0.5.10.tgz", + "integrity": "sha512-utI1ONF6uf/pPNO68kmN1b8rEwNXv3czukalo8VtJH8ksIkZXr3Q3VYudZLkCsDd4Wku120uF02hYK25XGPorw==", + "dev": true, + "license": "MIT", + "dependencies": { + "mini-svg-data-uri": "^1.2.3" + }, + "peerDependencies": { + "tailwindcss": ">=3.0.0 || >= 3.0.0-alpha.1 || >= 4.0.0-alpha.20 || >= 4.0.0-beta.1" + } + }, + "node_modules/@types/estree": { + "version": "1.0.6", + "resolved": "https://registry.npmjs.org/@types/estree/-/estree-1.0.6.tgz", + "integrity": "sha512-AYnb1nQyY49te+VRAVgmzfcgjYS91mY5P0TKUDCLEM+gNnA+3T6rWITXRLYCpahpqSQbN5cE+gHpnPyXjHWxcw==", + "dev": true, + "license": "MIT" + }, + "node_modules/@types/resolve": { + "version": "1.20.2", + "resolved": "https://registry.npmjs.org/@types/resolve/-/resolve-1.20.2.tgz", + "integrity": "sha512-60BCwRFOZCQhDncwQdxxeOEEkbc5dIMccYLwbxsS4TUNeVECQ/pBJ0j09mrHOl/JJvpRPGwO9SvE4nR2Nb/a4Q==", + "dev": true, + "license": "MIT" + }, + "node_modules/@vue/reactivity": { + "version": "3.1.5", + "resolved": "https://registry.npmjs.org/@vue/reactivity/-/reactivity-3.1.5.tgz", + "integrity": "sha512-1tdfLmNjWG6t/CsPldh+foumYFo3cpyCHgBYQ34ylaMsJ+SNHQ1kApMIa8jN+i593zQuaw3AdWH0nJTARzCFhg==", + "dev": true, + "license": "MIT", + "dependencies": { + "@vue/shared": "3.1.5" + } + }, + "node_modules/@vue/shared": { + "version": "3.1.5", + "resolved": "https://registry.npmjs.org/@vue/shared/-/shared-3.1.5.tgz", + "integrity": "sha512-oJ4F3TnvpXaQwZJNF3ZK+kLPHKarDmJjJ6jyzVNDKH9md1dptjC7lWR//jrGuLdek/U6iltWxqAnYOu8gCiOvA==", + "dev": true, + "license": "MIT" + }, + "node_modules/alpinejs": { + "version": "3.14.8", + "resolved": "https://registry.npmjs.org/alpinejs/-/alpinejs-3.14.8.tgz", + "integrity": "sha512-wT2fuP2DXpGk/jKaglwy7S/IJpm1FD+b7U6zUrhwErjoq5h27S4dxkJEXVvhbdwyPv9U+3OkUuNLkZT4h2Kfrg==", + "dev": true, + "license": "MIT", + "dependencies": { + "@vue/reactivity": "~3.1.1" + } + }, + "node_modules/ansi-regex": { + "version": "6.1.0", + "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-6.1.0.tgz", + "integrity": "sha512-7HSX4QQb4CspciLpVFwyRe79O3xsIZDDLER21kERQ71oaPodF8jL725AgJMFAYbooIqolJoRLuM81SpeUkpkvA==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/chalk/ansi-regex?sponsor=1" + } + }, + "node_modules/ansi-styles": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", + "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", + "dev": true, + "license": "MIT", + "dependencies": { + "color-convert": "^2.0.1" + }, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/chalk/ansi-styles?sponsor=1" + } + }, + "node_modules/any-promise": { + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/any-promise/-/any-promise-1.3.0.tgz", + "integrity": "sha512-7UvmKalWRt1wgjL1RrGxoSJW/0QZFIegpeGvZG9kjp8vrRu55XTHbwnqq2GpXm9uLbcuhxm3IqX9OB4MZR1b2A==", + "dev": true, + "license": "MIT" + }, + "node_modules/anymatch": { + "version": "3.1.3", + "resolved": "https://registry.npmjs.org/anymatch/-/anymatch-3.1.3.tgz", + "integrity": "sha512-KMReFUr0B4t+D+OBkjR3KYqvocp2XaSzO55UcB6mgQMd3KbcE+mWTyvVV7D/zsdEbNnV6acZUutkiHQXvTr1Rw==", + "dev": true, + "license": "ISC", + "dependencies": { + "normalize-path": "^3.0.0", + "picomatch": "^2.0.4" + }, + "engines": { + "node": ">= 8" + } + }, + "node_modules/anymatch/node_modules/picomatch": { + "version": "2.3.1", + "resolved": "https://registry.npmjs.org/picomatch/-/picomatch-2.3.1.tgz", + "integrity": "sha512-JU3teHTNjmE2VCGFzuY8EXzCDVwEqB2a8fsIvwaStHhAWJEeVd1o1QD80CU6+ZdEXXSLbSsuLwJjkCBWqRQUVA==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=8.6" + }, + "funding": { + "url": "https://github.com/sponsors/jonschlinkert" + } + }, + "node_modules/arg": { + "version": "5.0.2", + "resolved": "https://registry.npmjs.org/arg/-/arg-5.0.2.tgz", + "integrity": "sha512-PYjyFOLKQ9y57JvQ6QLo8dAgNqswh8M1RMJYdQduT6xbWSgK36P/Z/v+p888pM69jMMfS8Xd8F6I1kQ/I9HUGg==", + "dev": true, + "license": "MIT" + }, + "node_modules/asynckit": { + "version": "0.4.0", + "resolved": "https://registry.npmjs.org/asynckit/-/asynckit-0.4.0.tgz", + "integrity": "sha512-Oei9OH4tRh0YqU3GxhX79dM/mwVgvbZJaSNaRk+bshkj0S5cfHcgYakreBjrHwatXKbz+IoIdYLxrKim2MjW0Q==", + "dev": true, + "license": "MIT" + }, + "node_modules/autoprefixer": { + "version": "10.4.20", + "resolved": "https://registry.npmjs.org/autoprefixer/-/autoprefixer-10.4.20.tgz", + "integrity": "sha512-XY25y5xSv/wEoqzDyXXME4AFfkZI0P23z6Fs3YgymDnKJkCGOnkL0iTxCa85UTqaSgfcqyf3UA6+c7wUvx/16g==", + "dev": true, + "funding": [ + { + "type": "opencollective", + "url": "https://opencollective.com/postcss/" + }, + { + "type": "tidelift", + "url": "https://tidelift.com/funding/github/npm/autoprefixer" + }, + { + "type": "github", + "url": "https://github.com/sponsors/ai" + } + ], + "license": "MIT", + "dependencies": { + "browserslist": "^4.23.3", + "caniuse-lite": "^1.0.30001646", + "fraction.js": "^4.3.7", + "normalize-range": "^0.1.2", + "picocolors": "^1.0.1", + "postcss-value-parser": "^4.2.0" + }, + "bin": { + "autoprefixer": "bin/autoprefixer" + }, + "engines": { + "node": "^10 || ^12 || >=14" + }, + "peerDependencies": { + "postcss": "^8.1.0" + } + }, + "node_modules/axios": { + "version": "1.7.9", + "resolved": "https://registry.npmjs.org/axios/-/axios-1.7.9.tgz", + "integrity": "sha512-LhLcE7Hbiryz8oMDdDptSrWowmB4Bl6RCt6sIJKpRB4XtVf0iEgewX3au/pJqm+Py1kCASkb/FFKjxQaLtxJvw==", + "dev": true, + "license": "MIT", + "dependencies": { + "follow-redirects": "^1.15.6", + "form-data": "^4.0.0", + "proxy-from-env": "^1.1.0" + } + }, + "node_modules/balanced-match": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/balanced-match/-/balanced-match-1.0.2.tgz", + "integrity": "sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw==", + "dev": true, + "license": "MIT" + }, + "node_modules/base64-js": { + "version": "1.3.1", + "resolved": "https://registry.npmjs.org/base64-js/-/base64-js-1.3.1.tgz", + "integrity": "sha512-mLQ4i2QO1ytvGWFWmcngKO//JXAQueZvwEKtjgQFM4jIK0kU+ytMfplL8j+n5mspOfjHwoAg+9yhb7BwAHm36g==", + "license": "MIT" + }, + "node_modules/binary-extensions": { + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/binary-extensions/-/binary-extensions-2.3.0.tgz", + "integrity": "sha512-Ceh+7ox5qe7LJuLHoY0feh3pHuUDHAcRUeyL2VYghZwfpkNIy/+8Ocg0a3UuSoYzavmylwuLWQOf3hl0jjMMIw==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/brace-expansion": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-2.0.1.tgz", + "integrity": "sha512-XnAIvQ8eM+kC6aULx6wuQiwVsnzsi9d3WxzV3FpWTGA19F621kwdbsAcFKXgKUHZWsy+mY6iL1sHTxWEFCytDA==", + "dev": true, + "license": "MIT", + "dependencies": { + "balanced-match": "^1.0.0" + } + }, + "node_modules/braces": { + "version": "3.0.3", + "resolved": "https://registry.npmjs.org/braces/-/braces-3.0.3.tgz", + "integrity": "sha512-yQbXgO/OSZVD2IsiLlro+7Hf6Q18EJrKSEsdoMzKePKXct3gvD8oLcOQdIzGupr5Fj+EDe8gO/lxc1BzfMpxvA==", + "dev": true, + "license": "MIT", + "dependencies": { + "fill-range": "^7.1.1" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/brotli": { + "version": "1.3.3", + "resolved": "https://registry.npmjs.org/brotli/-/brotli-1.3.3.tgz", + "integrity": "sha512-oTKjJdShmDuGW94SyyaoQvAjf30dZaHnjJ8uAF+u2/vGJkJbJPJAT1gDiOJP5v1Zb6f9KEyW/1HpuaWIXtGHPg==", + "license": "MIT", + "dependencies": { + "base64-js": "^1.1.2" + } + }, + "node_modules/browserslist": { + "version": "4.24.4", + "resolved": "https://registry.npmjs.org/browserslist/-/browserslist-4.24.4.tgz", + "integrity": "sha512-KDi1Ny1gSePi1vm0q4oxSF8b4DR44GF4BbmS2YdhPLOEqd8pDviZOGH/GsmRwoWJ2+5Lr085X7naowMwKHDG1A==", + "dev": true, + "funding": [ + { + "type": "opencollective", + "url": "https://opencollective.com/browserslist" + }, + { + "type": "tidelift", + "url": "https://tidelift.com/funding/github/npm/browserslist" + }, + { + "type": "github", + "url": "https://github.com/sponsors/ai" + } + ], + "license": "MIT", + "dependencies": { + "caniuse-lite": "^1.0.30001688", + "electron-to-chromium": "^1.5.73", + "node-releases": "^2.0.19", + "update-browserslist-db": "^1.1.1" + }, + "bin": { + "browserslist": "cli.js" + }, + "engines": { + "node": "^6 || ^7 || ^8 || ^9 || ^10 || ^11 || ^12 || >=13.7" + } + }, + "node_modules/call-bind": { + "version": "1.0.8", + "resolved": "https://registry.npmjs.org/call-bind/-/call-bind-1.0.8.tgz", + "integrity": "sha512-oKlSFMcMwpUg2ednkhQ454wfWiU/ul3CkJe/PEHcTKuiX6RpbehUiFMXu13HalGZxfUwCQzZG747YXBn1im9ww==", + "license": "MIT", + "dependencies": { + "call-bind-apply-helpers": "^1.0.0", + "es-define-property": "^1.0.0", + "get-intrinsic": "^1.2.4", + "set-function-length": "^1.2.2" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/call-bind-apply-helpers": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/call-bind-apply-helpers/-/call-bind-apply-helpers-1.0.2.tgz", + "integrity": "sha512-Sp1ablJ0ivDkSzjcaJdxEunN5/XvksFJ2sMBFfq6x0ryhQV/2b/KwFe21cMpmHtPOSij8K99/wSfoEuTObmuMQ==", + "license": "MIT", + "dependencies": { + "es-errors": "^1.3.0", + "function-bind": "^1.1.2" + }, + "engines": { + "node": ">= 0.4" + } + }, + "node_modules/call-bound": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/call-bound/-/call-bound-1.0.4.tgz", + "integrity": "sha512-+ys997U96po4Kx/ABpBCqhA9EuxJaQWDQg7295H4hBphv3IZg0boBKuwYpt4YXp6MZ5AmZQnU/tyMTlRpaSejg==", + "license": "MIT", + "dependencies": { + "call-bind-apply-helpers": "^1.0.2", + "get-intrinsic": "^1.3.0" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/camelcase-css": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/camelcase-css/-/camelcase-css-2.0.1.tgz", + "integrity": "sha512-QOSvevhslijgYwRx6Rv7zKdMF8lbRmx+uQGx2+vDc+KI/eBnsy9kit5aj23AgGu3pa4t9AgwbnXWqS+iOY+2aA==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">= 6" + } + }, + "node_modules/caniuse-lite": { + "version": "1.0.30001700", + "resolved": "https://registry.npmjs.org/caniuse-lite/-/caniuse-lite-1.0.30001700.tgz", + "integrity": "sha512-2S6XIXwaE7K7erT8dY+kLQcpa5ms63XlRkMkReXjle+kf6c5g38vyMl+Z5y8dSxOFDhcFe+nxnn261PLxBSQsQ==", + "dev": true, + "funding": [ + { + "type": "opencollective", + "url": "https://opencollective.com/browserslist" + }, + { + "type": "tidelift", + "url": "https://tidelift.com/funding/github/npm/caniuse-lite" + }, + { + "type": "github", + "url": "https://github.com/sponsors/ai" + } + ], + "license": "CC-BY-4.0" + }, + "node_modules/chalk": { + "version": "4.1.2", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", + "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", + "dev": true, + "license": "MIT", + "dependencies": { + "ansi-styles": "^4.1.0", + "supports-color": "^7.1.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/chalk/chalk?sponsor=1" + } + }, + "node_modules/chalk/node_modules/supports-color": { + "version": "7.2.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", + "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", + "dev": true, + "license": "MIT", + "dependencies": { + "has-flag": "^4.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/chokidar": { + "version": "3.6.0", + "resolved": "https://registry.npmjs.org/chokidar/-/chokidar-3.6.0.tgz", + "integrity": "sha512-7VT13fmjotKpGipCW9JEQAusEPE+Ei8nl6/g4FBAmIm0GOOLMua9NDDo/DWp0ZAxCr3cPq5ZpBqmPAQgDda2Pw==", + "dev": true, + "license": "MIT", + "dependencies": { + "anymatch": "~3.1.2", + "braces": "~3.0.2", + "glob-parent": "~5.1.2", + "is-binary-path": "~2.1.0", + "is-glob": "~4.0.1", + "normalize-path": "~3.0.0", + "readdirp": "~3.6.0" + }, + "engines": { + "node": ">= 8.10.0" + }, + "funding": { + "url": "https://paulmillr.com/funding/" + }, + "optionalDependencies": { + "fsevents": "~2.3.2" + } + }, + "node_modules/chokidar/node_modules/glob-parent": { + "version": "5.1.2", + "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-5.1.2.tgz", + "integrity": "sha512-AOIgSQCepiJYwP3ARnGx+5VnTu2HBYdzbGP45eLw1vr3zB3vZLeyed1sC9hnbcOc9/SrMyM5RPQrkGz4aS9Zow==", + "dev": true, + "license": "ISC", + "dependencies": { + "is-glob": "^4.0.1" + }, + "engines": { + "node": ">= 6" + } + }, + "node_modules/cliui": { + "version": "8.0.1", + "resolved": "https://registry.npmjs.org/cliui/-/cliui-8.0.1.tgz", + "integrity": "sha512-BSeNnyus75C4//NQ9gQt1/csTXyo/8Sb+afLAkzAptFuMsod9HFokGNudZpi/oQV73hnVK+sR+5PVRMd+Dr7YQ==", + "dev": true, + "license": "ISC", + "dependencies": { + "string-width": "^4.2.0", + "strip-ansi": "^6.0.1", + "wrap-ansi": "^7.0.0" + }, + "engines": { + "node": ">=12" + } + }, + "node_modules/cliui/node_modules/ansi-regex": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-5.0.1.tgz", + "integrity": "sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=8" + } + }, + "node_modules/cliui/node_modules/emoji-regex": { + "version": "8.0.0", + "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-8.0.0.tgz", + "integrity": "sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A==", + "dev": true, + "license": "MIT" + }, + "node_modules/cliui/node_modules/string-width": { + "version": "4.2.3", + "resolved": "https://registry.npmjs.org/string-width/-/string-width-4.2.3.tgz", + "integrity": "sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g==", + "dev": true, + "license": "MIT", + "dependencies": { + "emoji-regex": "^8.0.0", + "is-fullwidth-code-point": "^3.0.0", + "strip-ansi": "^6.0.1" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/cliui/node_modules/strip-ansi": { + "version": "6.0.1", + "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.1.tgz", + "integrity": "sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==", + "dev": true, + "license": "MIT", + "dependencies": { + "ansi-regex": "^5.0.1" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/cliui/node_modules/wrap-ansi": { + "version": "7.0.0", + "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-7.0.0.tgz", + "integrity": "sha512-YVGIj2kamLSTxw6NsZjoBxfSwsn0ycdesmc4p+Q21c5zPuZ1pl+NfxVdxPtdHvmNVOQ6XSYG4AUtyt/Fi7D16Q==", + "dev": true, + "license": "MIT", + "dependencies": { + "ansi-styles": "^4.0.0", + "string-width": "^4.1.0", + "strip-ansi": "^6.0.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/chalk/wrap-ansi?sponsor=1" + } + }, + "node_modules/clone": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/clone/-/clone-1.0.4.tgz", + "integrity": "sha512-JQHZ2QMW6l3aH/j6xCqQThY/9OH4D/9ls34cgkUBiEeocRTU04tHfKPBsUK1PqZCUQM7GiA0IIXJSuXHI64Kbg==", + "license": "MIT", + "engines": { + "node": ">=0.8" + } + }, + "node_modules/color-convert": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", + "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "color-name": "~1.1.4" + }, + "engines": { + "node": ">=7.0.0" + } + }, + "node_modules/color-name": { + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", + "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", + "dev": true, + "license": "MIT" + }, + "node_modules/combined-stream": { + "version": "1.0.8", + "resolved": "https://registry.npmjs.org/combined-stream/-/combined-stream-1.0.8.tgz", + "integrity": "sha512-FQN4MRfuJeHf7cBbBMJFXhKSDq+2kAArBlmRBvcvFE5BB1HZKXtSFASDhdlz9zOYwxh8lDdnvmMOe/+5cdoEdg==", + "dev": true, + "license": "MIT", + "dependencies": { + "delayed-stream": "~1.0.0" + }, + "engines": { + "node": ">= 0.8" + } + }, + "node_modules/commander": { + "version": "4.1.1", + "resolved": "https://registry.npmjs.org/commander/-/commander-4.1.1.tgz", + "integrity": "sha512-NOKm8xhkzAjzFx8B2v5OAHT+u5pRQc2UCa2Vq9jYL/31o2wi9mxBA7LIFs3sV5VSC49z6pEhfbMULvShKj26WA==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">= 6" + } + }, + "node_modules/concurrently": { + "version": "9.1.2", + "resolved": "https://registry.npmjs.org/concurrently/-/concurrently-9.1.2.tgz", + "integrity": "sha512-H9MWcoPsYddwbOGM6difjVwVZHl63nwMEwDJG/L7VGtuaJhb12h2caPG2tVPWs7emuYix252iGfqOyrz1GczTQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "chalk": "^4.1.2", + "lodash": "^4.17.21", + "rxjs": "^7.8.1", + "shell-quote": "^1.8.1", + "supports-color": "^8.1.1", + "tree-kill": "^1.2.2", + "yargs": "^17.7.2" + }, + "bin": { + "conc": "dist/bin/concurrently.js", + "concurrently": "dist/bin/concurrently.js" + }, + "engines": { + "node": ">=18" + }, + "funding": { + "url": "https://github.com/open-cli-tools/concurrently?sponsor=1" + } + }, + "node_modules/core-util-is": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/core-util-is/-/core-util-is-1.0.3.tgz", + "integrity": "sha512-ZQBvi1DcpJ4GDqanjucZ2Hj3wEO5pZDS89BWbkcrvdxksJorwUDDZamX9ldFkp9aw2lmBDLgkObEA4DWNJ9FYQ==", + "license": "MIT" + }, + "node_modules/cross-spawn": { + "version": "7.0.6", + "resolved": "https://registry.npmjs.org/cross-spawn/-/cross-spawn-7.0.6.tgz", + "integrity": "sha512-uV2QOWP2nWzsy2aMp8aRibhi9dlzF5Hgh5SHaB9OiTGEyDTiJJyx0uy51QXdyWbtAHNua4XJzUKca3OzKUd3vA==", + "dev": true, + "license": "MIT", + "dependencies": { + "path-key": "^3.1.0", + "shebang-command": "^2.0.0", + "which": "^2.0.1" + }, + "engines": { + "node": ">= 8" + } + }, + "node_modules/crypto-js": { + "version": "4.2.0", + "resolved": "https://registry.npmjs.org/crypto-js/-/crypto-js-4.2.0.tgz", + "integrity": "sha512-KALDyEYgpY+Rlob/iriUtjV6d5Eq+Y191A5g4UqLAi8CyGP9N1+FdVbkc1SxKc2r4YAYqG8JzO2KGL+AizD70Q==", + "license": "MIT" + }, + "node_modules/cssesc": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/cssesc/-/cssesc-3.0.0.tgz", + "integrity": "sha512-/Tb/JcjK111nNScGob5MNtsntNM1aCNUDipB/TkwZFhyDrrE47SOx/18wF2bbjgc3ZzCSKW1T5nt5EbFoAz/Vg==", + "dev": true, + "license": "MIT", + "bin": { + "cssesc": "bin/cssesc" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/datatables.net": { + "version": "2.2.2", + "resolved": "https://registry.npmjs.org/datatables.net/-/datatables.net-2.2.2.tgz", + "integrity": "sha512-gfODIKE3gpgbVeZy2QGj2Dq9roO6hy00S+k1knklrqlMyAMrh1wt0Q6ryBUM7gU96U77ysbq8dYhxFdmcC/oPQ==", + "license": "MIT", + "dependencies": { + "jquery": ">=1.7" + } + }, + "node_modules/datatables.net-buttons": { + "version": "3.2.2", + "resolved": "https://registry.npmjs.org/datatables.net-buttons/-/datatables.net-buttons-3.2.2.tgz", + "integrity": "sha512-+aLTbkbksNmyGpK+8KXbpwYKXYOXvZQR2ySA/8oOQeJU53Xw/67cOHowenEr2d43/RLaz+I0zvV/1Yn+jMRiDw==", + "license": "MIT", + "dependencies": { + "datatables.net": "^2", + "jquery": ">=1.7" + } + }, + "node_modules/datatables.net-dt": { + "version": "2.2.2", + "resolved": "https://registry.npmjs.org/datatables.net-dt/-/datatables.net-dt-2.2.2.tgz", + "integrity": "sha512-Qfe9g/E3yAPTHoDASc1J0r5Yx++3Y3VdcEOFCupvfGJ8LhRrreebUC70UYEzO8vPOKnkutoRanW/VBMRIbXKXA==", + "license": "MIT", + "dependencies": { + "datatables.net": "2.2.2", + "jquery": ">=1.7" + } + }, + "node_modules/dayjs": { + "version": "1.11.13", + "resolved": "https://registry.npmjs.org/dayjs/-/dayjs-1.11.13.tgz", + "integrity": "sha512-oaMBel6gjolK862uaPQOVTA7q3TZhuSvuMQAAglQDOWYO9A91IrAOUJEyKVlqJlHE0vq5p5UXxzdPfMH/x6xNg==", + "license": "MIT" + }, + "node_modules/deep-equal": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/deep-equal/-/deep-equal-1.1.2.tgz", + "integrity": "sha512-5tdhKF6DbU7iIzrIOa1AOUt39ZRm13cmL1cGEh//aqR8x9+tNfbywRf0n5FD/18OKMdo7DNEtrX2t22ZAkI+eg==", + "license": "MIT", + "dependencies": { + "is-arguments": "^1.1.1", + "is-date-object": "^1.0.5", + "is-regex": "^1.1.4", + "object-is": "^1.1.5", + "object-keys": "^1.1.1", + "regexp.prototype.flags": "^1.5.1" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/deepmerge": { + "version": "4.3.1", + "resolved": "https://registry.npmjs.org/deepmerge/-/deepmerge-4.3.1.tgz", + "integrity": "sha512-3sUqbMEc77XqpdNO7FRyRog+eW3ph+GYCbj+rK+uYyRMuwsVy0rMiVtPn+QJlKFvWP/1PYpapqYn0Me2knFn+A==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/define-data-property": { + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/define-data-property/-/define-data-property-1.1.4.tgz", + "integrity": "sha512-rBMvIzlpA8v6E+SJZoo++HAYqsLrkg7MSfIinMPFhmkorw7X+dOXVJQs+QT69zGkzMyfDnIMN2Wid1+NbL3T+A==", + "license": "MIT", + "dependencies": { + "es-define-property": "^1.0.0", + "es-errors": "^1.3.0", + "gopd": "^1.0.1" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/define-properties": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/define-properties/-/define-properties-1.2.1.tgz", + "integrity": "sha512-8QmQKqEASLd5nx0U1B1okLElbUuuttJ/AnYmRXbbbGDWh6uS208EjD4Xqq/I9wK7u0v6O08XhTWnt5XtEbR6Dg==", + "license": "MIT", + "dependencies": { + "define-data-property": "^1.0.1", + "has-property-descriptors": "^1.0.0", + "object-keys": "^1.1.1" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/delayed-stream": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/delayed-stream/-/delayed-stream-1.0.0.tgz", + "integrity": "sha512-ZySD7Nf91aLB0RxL4KGrKHBXl7Eds1DAmEdcoVawXnLD7SDhpNgtuII2aAkg7a7QS41jxPSZ17p4VdGnMHk3MQ==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=0.4.0" + } + }, + "node_modules/dfa": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/dfa/-/dfa-1.2.0.tgz", + "integrity": "sha512-ED3jP8saaweFTjeGX8HQPjeC1YYyZs98jGNZx6IiBvxW7JG5v492kamAQB3m2wop07CvU/RQmzcKr6bgcC5D/Q==", + "license": "MIT" + }, + "node_modules/didyoumean": { + "version": "1.2.2", + "resolved": "https://registry.npmjs.org/didyoumean/-/didyoumean-1.2.2.tgz", + "integrity": "sha512-gxtyfqMg7GKyhQmb056K7M3xszy/myH8w+B4RT+QXBQsvAOdc3XymqDDPHx1BgPgsdAA5SIifona89YtRATDzw==", + "dev": true, + "license": "Apache-2.0" + }, + "node_modules/diff-dom": { + "version": "5.1.4", + "resolved": "https://registry.npmjs.org/diff-dom/-/diff-dom-5.1.4.tgz", + "integrity": "sha512-TSEaVdVGictY1KHg7VpVw2nuM02YKC9C8/qBkGiCnkiAybVbu1zQTMj2/dnVLRO7Z62UsqzHGpXweiOj5/jaZg==", + "license": "LGPL-3.0" + }, + "node_modules/dlv": { + "version": "1.1.3", + "resolved": "https://registry.npmjs.org/dlv/-/dlv-1.1.3.tgz", + "integrity": "sha512-+HlytyjlPKnIG8XuRG8WvmBP8xs8P71y+SKKS6ZXWoEgLuePxtDoUEiH7WkdePWrQ5JBpE6aoVqfZfJUQkjXwA==", + "dev": true, + "license": "MIT" + }, + "node_modules/dunder-proto": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/dunder-proto/-/dunder-proto-1.0.1.tgz", + "integrity": "sha512-KIN/nDJBQRcXw0MLVhZE9iQHmG68qAVIBg9CqmUYjmQIhgij9U5MFvrqkUL5FbtyyzZuOeOt0zdeRe4UY7ct+A==", + "license": "MIT", + "dependencies": { + "call-bind-apply-helpers": "^1.0.1", + "es-errors": "^1.3.0", + "gopd": "^1.2.0" + }, + "engines": { + "node": ">= 0.4" + } + }, + "node_modules/eastasianwidth": { + "version": "0.2.0", + "resolved": "https://registry.npmjs.org/eastasianwidth/-/eastasianwidth-0.2.0.tgz", + "integrity": "sha512-I88TYZWc9XiYHRQ4/3c5rjjfgkjhLyW2luGIheGERbNQ6OY7yTybanSpDXZa8y7VUP9YmDcYa+eyq4ca7iLqWA==", + "dev": true, + "license": "MIT" + }, + "node_modules/electron-to-chromium": { + "version": "1.5.102", + "resolved": "https://registry.npmjs.org/electron-to-chromium/-/electron-to-chromium-1.5.102.tgz", + "integrity": "sha512-eHhqaja8tE/FNpIiBrvBjFV/SSKpyWHLvxuR9dPTdo+3V9ppdLmFB7ZZQ98qNovcngPLYIz0oOBF9P0FfZef5Q==", + "dev": true, + "license": "ISC" + }, + "node_modules/emoji-regex": { + "version": "9.2.2", + "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-9.2.2.tgz", + "integrity": "sha512-L18DaJsXSUk2+42pv8mLs5jJT2hqFkFE4j21wOmgbUqsZ2hL72NsUU785g9RXgo3s0ZNgVl42TiHp3ZtOv/Vyg==", + "dev": true, + "license": "MIT" + }, + "node_modules/es-define-property": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/es-define-property/-/es-define-property-1.0.1.tgz", + "integrity": "sha512-e3nRfgfUZ4rNGL232gUgX06QNyyez04KdjFrF+LTRoOXmrOgFKDg4BCdsjW8EnT69eqdYGmRpJwiPVYNrCaW3g==", + "license": "MIT", + "engines": { + "node": ">= 0.4" + } + }, + "node_modules/es-errors": { + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/es-errors/-/es-errors-1.3.0.tgz", + "integrity": "sha512-Zf5H2Kxt2xjTvbJvP2ZWLEICxA6j+hAmMzIlypy4xcBg1vKVnx89Wy0GbS+kf5cwCVFFzdCFh2XSCFNULS6csw==", + "license": "MIT", + "engines": { + "node": ">= 0.4" + } + }, + "node_modules/es-object-atoms": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/es-object-atoms/-/es-object-atoms-1.1.1.tgz", + "integrity": "sha512-FGgH2h8zKNim9ljj7dankFPcICIK9Cp5bm+c2gQSYePhpaG5+esrLODihIorn+Pe6FGJzWhXQotPv73jTaldXA==", + "license": "MIT", + "dependencies": { + "es-errors": "^1.3.0" + }, + "engines": { + "node": ">= 0.4" + } + }, + "node_modules/es-set-tostringtag": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/es-set-tostringtag/-/es-set-tostringtag-2.1.0.tgz", + "integrity": "sha512-j6vWzfrGVfyXxge+O0x5sh6cvxAog0a/4Rdd2K36zCMV5eJ+/+tOAngRO8cODMNWbVRdVlmGZQL2YS3yR8bIUA==", + "dev": true, + "license": "MIT", + "dependencies": { + "es-errors": "^1.3.0", + "get-intrinsic": "^1.2.6", + "has-tostringtag": "^1.0.2", + "hasown": "^2.0.2" + }, + "engines": { + "node": ">= 0.4" + } + }, + "node_modules/esbuild": { + "version": "0.24.2", + "resolved": "https://registry.npmjs.org/esbuild/-/esbuild-0.24.2.tgz", + "integrity": "sha512-+9egpBW8I3CD5XPe0n6BfT5fxLzxrlDzqydF3aviG+9ni1lDC/OvMHcxqEFV0+LANZG5R1bFMWfUrjVsdwxJvA==", + "dev": true, + "hasInstallScript": true, + "license": "MIT", + "bin": { + "esbuild": "bin/esbuild" + }, + "engines": { + "node": ">=18" + }, + "optionalDependencies": { + "@esbuild/aix-ppc64": "0.24.2", + "@esbuild/android-arm": "0.24.2", + "@esbuild/android-arm64": "0.24.2", + "@esbuild/android-x64": "0.24.2", + "@esbuild/darwin-arm64": "0.24.2", + "@esbuild/darwin-x64": "0.24.2", + "@esbuild/freebsd-arm64": "0.24.2", + "@esbuild/freebsd-x64": "0.24.2", + "@esbuild/linux-arm": "0.24.2", + "@esbuild/linux-arm64": "0.24.2", + "@esbuild/linux-ia32": "0.24.2", + "@esbuild/linux-loong64": "0.24.2", + "@esbuild/linux-mips64el": "0.24.2", + "@esbuild/linux-ppc64": "0.24.2", + "@esbuild/linux-riscv64": "0.24.2", + "@esbuild/linux-s390x": "0.24.2", + "@esbuild/linux-x64": "0.24.2", + "@esbuild/netbsd-arm64": "0.24.2", + "@esbuild/netbsd-x64": "0.24.2", + "@esbuild/openbsd-arm64": "0.24.2", + "@esbuild/openbsd-x64": "0.24.2", + "@esbuild/sunos-x64": "0.24.2", + "@esbuild/win32-arm64": "0.24.2", + "@esbuild/win32-ia32": "0.24.2", + "@esbuild/win32-x64": "0.24.2" + } + }, + "node_modules/escalade": { + "version": "3.2.0", + "resolved": "https://registry.npmjs.org/escalade/-/escalade-3.2.0.tgz", + "integrity": "sha512-WUj2qlxaQtO4g6Pq5c29GTcWGDyd8itL8zTlipgECz3JesAiiOKotd8JU6otB3PACgG6xkJUyVhboMS+bje/jA==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=6" + } + }, + "node_modules/estree-walker": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/estree-walker/-/estree-walker-2.0.2.tgz", + "integrity": "sha512-Rfkk/Mp/DL7JVje3u18FxFujQlTNR2q6QfMSMB7AvCBx91NGj/ba3kCfza0f6dVDbw7YlRf/nDrn7pQrCCyQ/w==", + "dev": true, + "license": "MIT" + }, + "node_modules/fast-glob": { + "version": "3.3.3", + "resolved": "https://registry.npmjs.org/fast-glob/-/fast-glob-3.3.3.tgz", + "integrity": "sha512-7MptL8U0cqcFdzIzwOTHoilX9x5BrNqye7Z/LuC7kCMRio1EMSyqRK3BEAUD7sXRq4iT4AzTVuZdhgQ2TCvYLg==", + "dev": true, + "license": "MIT", + "dependencies": { + "@nodelib/fs.stat": "^2.0.2", + "@nodelib/fs.walk": "^1.2.3", + "glob-parent": "^5.1.2", + "merge2": "^1.3.0", + "micromatch": "^4.0.8" + }, + "engines": { + "node": ">=8.6.0" + } + }, + "node_modules/fast-glob/node_modules/glob-parent": { + "version": "5.1.2", + "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-5.1.2.tgz", + "integrity": "sha512-AOIgSQCepiJYwP3ARnGx+5VnTu2HBYdzbGP45eLw1vr3zB3vZLeyed1sC9hnbcOc9/SrMyM5RPQrkGz4aS9Zow==", + "dev": true, + "license": "ISC", + "dependencies": { + "is-glob": "^4.0.1" + }, + "engines": { + "node": ">= 6" + } + }, + "node_modules/fastq": { + "version": "1.19.0", + "resolved": "https://registry.npmjs.org/fastq/-/fastq-1.19.0.tgz", + "integrity": "sha512-7SFSRCNjBQIZH/xZR3iy5iQYR8aGBE0h3VG6/cwlbrpdciNYBMotQav8c1XI3HjHH+NikUpP53nPdlZSdWmFzA==", + "dev": true, + "license": "ISC", + "dependencies": { + "reusify": "^1.0.4" + } + }, + "node_modules/fill-range": { + "version": "7.1.1", + "resolved": "https://registry.npmjs.org/fill-range/-/fill-range-7.1.1.tgz", + "integrity": "sha512-YsGpe3WHLK8ZYi4tWDg2Jy3ebRz2rXowDxnld4bkQB00cc/1Zw9AWnC0i9ztDJitivtQvaI9KaLyKrc+hBW0yg==", + "dev": true, + "license": "MIT", + "dependencies": { + "to-regex-range": "^5.0.1" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/flowbite": { + "version": "2.5.2", + "resolved": "https://registry.npmjs.org/flowbite/-/flowbite-2.5.2.tgz", + "integrity": "sha512-kwFD3n8/YW4EG8GlY3Od9IoKND97kitO+/ejISHSqpn3vw2i5K/+ZI8Jm2V+KC4fGdnfi0XZ+TzYqQb4Q1LshA==", + "dev": true, + "license": "MIT", + "dependencies": { + "@popperjs/core": "^2.9.3", + "flowbite-datepicker": "^1.3.0", + "mini-svg-data-uri": "^1.4.3" + } + }, + "node_modules/flowbite-datepicker": { + "version": "1.3.2", + "resolved": "https://registry.npmjs.org/flowbite-datepicker/-/flowbite-datepicker-1.3.2.tgz", + "integrity": "sha512-6Nfm0MCVX3mpaR7YSCjmEO2GO8CDt6CX8ZpQnGdeu03WUCWtEPQ/uy0PUiNtIJjJZWnX0Cm3H55MOhbD1g+E/g==", + "dev": true, + "license": "MIT", + "dependencies": { + "@rollup/plugin-node-resolve": "^15.2.3", + "flowbite": "^2.0.0" + } + }, + "node_modules/follow-redirects": { + "version": "1.15.9", + "resolved": "https://registry.npmjs.org/follow-redirects/-/follow-redirects-1.15.9.tgz", + "integrity": "sha512-gew4GsXizNgdoRyqmyfMHyAmXsZDk6mHkSxZFCzW9gwlbtOW44CDtYavM+y+72qD/Vq2l550kMF52DT8fOLJqQ==", + "dev": true, + "funding": [ + { + "type": "individual", + "url": "https://github.com/sponsors/RubenVerborgh" + } + ], + "license": "MIT", + "engines": { + "node": ">=4.0" + }, + "peerDependenciesMeta": { + "debug": { + "optional": true + } + } + }, + "node_modules/foreground-child": { + "version": "3.3.0", + "resolved": "https://registry.npmjs.org/foreground-child/-/foreground-child-3.3.0.tgz", + "integrity": "sha512-Ld2g8rrAyMYFXBhEqMz8ZAHBi4J4uS1i/CxGMDnjyFWddMXLVcDp051DZfu+t7+ab7Wv6SMqpWmyFIj5UbfFvg==", + "dev": true, + "license": "ISC", + "dependencies": { + "cross-spawn": "^7.0.0", + "signal-exit": "^4.0.1" + }, + "engines": { + "node": ">=14" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" + } + }, + "node_modules/form-data": { + "version": "4.0.2", + "resolved": "https://registry.npmjs.org/form-data/-/form-data-4.0.2.tgz", + "integrity": "sha512-hGfm/slu0ZabnNt4oaRZ6uREyfCj6P4fT/n6A1rGV+Z0VdGXjfOhVUpkn6qVQONHGIFwmveGXyDs75+nr6FM8w==", + "dev": true, + "license": "MIT", + "dependencies": { + "asynckit": "^0.4.0", + "combined-stream": "^1.0.8", + "es-set-tostringtag": "^2.1.0", + "mime-types": "^2.1.12" + }, + "engines": { + "node": ">= 6" + } + }, + "node_modules/fraction.js": { + "version": "4.3.7", + "resolved": "https://registry.npmjs.org/fraction.js/-/fraction.js-4.3.7.tgz", + "integrity": "sha512-ZsDfxO51wGAXREY55a7la9LScWpwv9RxIrYABrlvOFBlH/ShPnrtsXeuUIfXKKOVicNxQ+o8JTbJvjS4M89yew==", + "dev": true, + "license": "MIT", + "engines": { + "node": "*" + }, + "funding": { + "type": "patreon", + "url": "https://github.com/sponsors/rawify" + } + }, + "node_modules/fsevents": { + "version": "2.3.3", + "resolved": "https://registry.npmjs.org/fsevents/-/fsevents-2.3.3.tgz", + "integrity": "sha512-5xoDfX+fL7faATnagmWPpbFtwh/R77WmMMqqHGS65C3vvB0YHrgF+B1YmZ3441tMj5n63k0212XNoJwzlhffQw==", + "dev": true, + "hasInstallScript": true, + "license": "MIT", + "optional": true, + "os": [ + "darwin" + ], + "engines": { + "node": "^8.16.0 || ^10.6.0 || >=11.0.0" + } + }, + "node_modules/function-bind": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/function-bind/-/function-bind-1.1.2.tgz", + "integrity": "sha512-7XHNxH7qX9xG5mIwxkhumTox/MIRNcOgDrxWsMt2pAr23WHp6MrRlN7FBSFpCpr+oVO0F744iUgR82nJMfG2SA==", + "license": "MIT", + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/functions-have-names": { + "version": "1.2.3", + "resolved": "https://registry.npmjs.org/functions-have-names/-/functions-have-names-1.2.3.tgz", + "integrity": "sha512-xckBUXyTIqT97tq2x2AMb+g163b5JFysYk0x4qxNFwbfQkmNZoiRHb6sPzI9/QV33WeuvVYBUIiD4NzNIyqaRQ==", + "license": "MIT", + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/get-caller-file": { + "version": "2.0.5", + "resolved": "https://registry.npmjs.org/get-caller-file/-/get-caller-file-2.0.5.tgz", + "integrity": "sha512-DyFP3BM/3YHTQOCUL/w0OZHR0lpKeGrxotcHWcqNEdnltqFwXVfhEBQ94eIo34AfQpo0rGki4cyIiftY06h2Fg==", + "dev": true, + "license": "ISC", + "engines": { + "node": "6.* || 8.* || >= 10.*" + } + }, + "node_modules/get-intrinsic": { + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/get-intrinsic/-/get-intrinsic-1.3.0.tgz", + "integrity": "sha512-9fSjSaos/fRIVIp+xSJlE6lfwhES7LNtKaCBIamHsjr2na1BiABJPo0mOjjz8GJDURarmCPGqaiVg5mfjb98CQ==", + "license": "MIT", + "dependencies": { + "call-bind-apply-helpers": "^1.0.2", + "es-define-property": "^1.0.1", + "es-errors": "^1.3.0", + "es-object-atoms": "^1.1.1", + "function-bind": "^1.1.2", + "get-proto": "^1.0.1", + "gopd": "^1.2.0", + "has-symbols": "^1.1.0", + "hasown": "^2.0.2", + "math-intrinsics": "^1.1.0" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/get-proto": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/get-proto/-/get-proto-1.0.1.tgz", + "integrity": "sha512-sTSfBjoXBp89JvIKIefqw7U2CCebsc74kiY6awiGogKtoSGbgjYE/G/+l9sF3MWFPNc9IcoOC4ODfKHfxFmp0g==", + "license": "MIT", + "dependencies": { + "dunder-proto": "^1.0.1", + "es-object-atoms": "^1.0.0" + }, + "engines": { + "node": ">= 0.4" + } + }, + "node_modules/glob": { + "version": "10.4.5", + "resolved": "https://registry.npmjs.org/glob/-/glob-10.4.5.tgz", + "integrity": "sha512-7Bv8RF0k6xjo7d4A/PxYLbUCfb6c+Vpd2/mB2yRDlew7Jb5hEXiCD9ibfO7wpk8i4sevK6DFny9h7EYbM3/sHg==", + "dev": true, + "license": "ISC", + "dependencies": { + "foreground-child": "^3.1.0", + "jackspeak": "^3.1.2", + "minimatch": "^9.0.4", + "minipass": "^7.1.2", + "package-json-from-dist": "^1.0.0", + "path-scurry": "^1.11.1" + }, + "bin": { + "glob": "dist/esm/bin.mjs" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" + } + }, + "node_modules/glob-parent": { + "version": "6.0.2", + "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-6.0.2.tgz", + "integrity": "sha512-XxwI8EOhVQgWp6iDL+3b0r86f4d6AX6zSU55HfB4ydCEuXLXc5FcYeOu+nnGftS4TEju/11rt4KJPTMgbfmv4A==", + "dev": true, + "license": "ISC", + "dependencies": { + "is-glob": "^4.0.3" + }, + "engines": { + "node": ">=10.13.0" + } + }, + "node_modules/gopd": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/gopd/-/gopd-1.2.0.tgz", + "integrity": "sha512-ZUKRh6/kUFoAiTAtTYPZJ3hw9wNxx+BIBOijnlG9PnrJsCcSjs1wyyD6vJpaYtgnzDrKYRSqf3OO6Rfa93xsRg==", + "license": "MIT", + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/gsap": { + "version": "3.12.7", + "resolved": "https://registry.npmjs.org/gsap/-/gsap-3.12.7.tgz", + "integrity": "sha512-V4GsyVamhmKefvcAKaoy0h6si0xX7ogwBoBSs2CTJwt7luW0oZzC0LhdkyuKV8PJAXr7Yaj8pMjCKD4GJ+eEMg==", + "license": "Standard 'no charge' license: https://gsap.com/standard-license. Club GSAP members get more: https://gsap.com/licensing/. Why GreenSock doesn't employ an MIT license: https://gsap.com/why-license/" + }, + "node_modules/has-flag": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", + "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=8" + } + }, + "node_modules/has-property-descriptors": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/has-property-descriptors/-/has-property-descriptors-1.0.2.tgz", + "integrity": "sha512-55JNKuIW+vq4Ke1BjOTjM2YctQIvCT7GFzHwmfZPGo5wnrgkid0YQtnAleFSqumZm4az3n2BS+erby5ipJdgrg==", + "license": "MIT", + "dependencies": { + "es-define-property": "^1.0.0" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/has-symbols": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/has-symbols/-/has-symbols-1.1.0.tgz", + "integrity": "sha512-1cDNdwJ2Jaohmb3sg4OmKaMBwuC48sYni5HUw2DvsC8LjGTLK9h+eb1X6RyuOHe4hT0ULCW68iomhjUoKUqlPQ==", + "license": "MIT", + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/has-tostringtag": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/has-tostringtag/-/has-tostringtag-1.0.2.tgz", + "integrity": "sha512-NqADB8VjPFLM2V0VvHUewwwsw0ZWBaIdgo+ieHtK3hasLz4qeCRjYcqfB6AQrBggRKppKF8L52/VqdVsO47Dlw==", + "license": "MIT", + "dependencies": { + "has-symbols": "^1.0.3" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/hasown": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/hasown/-/hasown-2.0.2.tgz", + "integrity": "sha512-0hJU9SCPvmMzIBdZFqNPXWa6dqh7WdH0cII9y+CyS8rG3nL48Bclra9HmKhVVUHyPWNH5Y7xDwAB7bfgSjkUMQ==", + "license": "MIT", + "dependencies": { + "function-bind": "^1.1.2" + }, + "engines": { + "node": ">= 0.4" + } + }, + "node_modules/iconv-lite": { + "version": "0.6.3", + "resolved": "https://registry.npmjs.org/iconv-lite/-/iconv-lite-0.6.3.tgz", + "integrity": "sha512-4fCk79wshMdzMp2rH06qWrJE4iolqLhCUH+OiuIgU++RB0+94NlDL81atO7GX55uUKueo0txHNtvEyI6D7WdMw==", + "license": "MIT", + "dependencies": { + "safer-buffer": ">= 2.1.2 < 3.0.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/immediate": { + "version": "3.0.6", + "resolved": "https://registry.npmjs.org/immediate/-/immediate-3.0.6.tgz", + "integrity": "sha512-XXOFtyqDjNDAQxVfYxuF7g9Il/IbWmmlQg2MYKOH8ExIT1qg6xc4zyS3HaEEATgs1btfzxq15ciUiY7gjSXRGQ==", + "license": "MIT" + }, + "node_modules/inherits": { + "version": "2.0.4", + "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.4.tgz", + "integrity": "sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ==", + "license": "ISC" + }, + "node_modules/is-arguments": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/is-arguments/-/is-arguments-1.2.0.tgz", + "integrity": "sha512-7bVbi0huj/wrIAOzb8U1aszg9kdi3KN/CyU19CTI7tAoZYEZoL9yCDXpbXN+uPsuWnP02cyug1gleqq+TU+YCA==", + "license": "MIT", + "dependencies": { + "call-bound": "^1.0.2", + "has-tostringtag": "^1.0.2" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/is-binary-path": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/is-binary-path/-/is-binary-path-2.1.0.tgz", + "integrity": "sha512-ZMERYes6pDydyuGidse7OsHxtbI7WVeUEozgR/g7rd0xUimYNlvZRE/K2MgZTjWy725IfelLeVcEM97mmtRGXw==", + "dev": true, + "license": "MIT", + "dependencies": { + "binary-extensions": "^2.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/is-core-module": { + "version": "2.16.1", + "resolved": "https://registry.npmjs.org/is-core-module/-/is-core-module-2.16.1.tgz", + "integrity": "sha512-UfoeMA6fIJ8wTYFEUjelnaGI67v6+N7qXJEvQuIGa99l4xsCruSYOVSQ0uPANn4dAzm8lkYPaKLrrijLq7x23w==", + "dev": true, + "license": "MIT", + "dependencies": { + "hasown": "^2.0.2" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/is-date-object": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/is-date-object/-/is-date-object-1.1.0.tgz", + "integrity": "sha512-PwwhEakHVKTdRNVOw+/Gyh0+MzlCl4R6qKvkhuvLtPMggI1WAHt9sOwZxQLSGpUaDnrdyDsomoRgNnCfKNSXXg==", + "license": "MIT", + "dependencies": { + "call-bound": "^1.0.2", + "has-tostringtag": "^1.0.2" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/is-extglob": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/is-extglob/-/is-extglob-2.1.1.tgz", + "integrity": "sha512-SbKbANkN603Vi4jEZv49LeVJMn4yGwsbzZworEoyEiutsN3nJYdbO36zfhGJ6QEDpOZIFkDtnq5JRxmvl3jsoQ==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/is-fullwidth-code-point": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-3.0.0.tgz", + "integrity": "sha512-zymm5+u+sCsSWyD9qNaejV3DFvhCKclKdizYaJUuHA83RLjb7nSuGnddCHGv0hk+KY7BMAlsWeK4Ueg6EV6XQg==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=8" + } + }, + "node_modules/is-glob": { + "version": "4.0.3", + "resolved": "https://registry.npmjs.org/is-glob/-/is-glob-4.0.3.tgz", + "integrity": "sha512-xelSayHH36ZgE7ZWhli7pW34hNbNl8Ojv5KVmkJD4hBdD3th8Tfk9vYasLM+mXWOZhFkgZfxhLSnrwRr4elSSg==", + "dev": true, + "license": "MIT", + "dependencies": { + "is-extglob": "^2.1.1" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/is-module": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/is-module/-/is-module-1.0.0.tgz", + "integrity": "sha512-51ypPSPCoTEIN9dy5Oy+h4pShgJmPCygKfyRCISBI+JoWT/2oJvK8QPxmwv7b/p239jXrm9M1mlQbyKJ5A152g==", + "dev": true, + "license": "MIT" + }, + "node_modules/is-number": { + "version": "7.0.0", + "resolved": "https://registry.npmjs.org/is-number/-/is-number-7.0.0.tgz", + "integrity": "sha512-41Cifkg6e8TylSpdtTpeLVMqvSBEVzTttHvERD741+pnZ8ANv0004MRL43QKPDlK9cGvNp6NZWZUBlbGXYxxng==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=0.12.0" + } + }, + "node_modules/is-regex": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/is-regex/-/is-regex-1.2.1.tgz", + "integrity": "sha512-MjYsKHO5O7mCsmRGxWcLWheFqN9DJ/2TmngvjKXihe6efViPqc274+Fx/4fYj/r03+ESvBdTXK0V6tA3rgez1g==", + "license": "MIT", + "dependencies": { + "call-bound": "^1.0.2", + "gopd": "^1.2.0", + "has-tostringtag": "^1.0.2", + "hasown": "^2.0.2" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/isarray": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/isarray/-/isarray-1.0.0.tgz", + "integrity": "sha512-VLghIWNM6ELQzo7zwmcg0NmTVyWKYjvIeM83yjp0wRDTmUnrM678fQbcKBo6n2CJEF0szoG//ytg+TKla89ALQ==", + "license": "MIT" + }, + "node_modules/isexe": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/isexe/-/isexe-2.0.0.tgz", + "integrity": "sha512-RHxMLp9lnKHGHRng9QFhRCMbYAcVpn69smSGcq3f36xjgVVWThj4qqLbTLlq7Ssj8B+fIQ1EuCEGI2lKsyQeIw==", + "dev": true, + "license": "ISC" + }, + "node_modules/jackspeak": { + "version": "3.4.3", + "resolved": "https://registry.npmjs.org/jackspeak/-/jackspeak-3.4.3.tgz", + "integrity": "sha512-OGlZQpz2yfahA/Rd1Y8Cd9SIEsqvXkLVoSw/cgwhnhFMDbsQFeZYoJJ7bIZBS9BcamUW96asq/npPWugM+RQBw==", + "dev": true, + "license": "BlueOak-1.0.0", + "dependencies": { + "@isaacs/cliui": "^8.0.2" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" + }, + "optionalDependencies": { + "@pkgjs/parseargs": "^0.11.0" + } + }, + "node_modules/jiti": { + "version": "1.21.7", + "resolved": "https://registry.npmjs.org/jiti/-/jiti-1.21.7.tgz", + "integrity": "sha512-/imKNG4EbWNrVjoNC/1H5/9GFy+tqjGBHCaSsN+P2RnPqjsLmv6UD3Ej+Kj8nBWaRAwyk7kK5ZUc+OEatnTR3A==", + "dev": true, + "license": "MIT", + "bin": { + "jiti": "bin/jiti.js" + } + }, + "node_modules/jpeg-exif": { + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/jpeg-exif/-/jpeg-exif-1.1.4.tgz", + "integrity": "sha512-a+bKEcCjtuW5WTdgeXFzswSrdqi0jk4XlEtZlx5A94wCoBpFjfFTbo/Tra5SpNCl/YFZPvcV1dJc+TAYeg6ROQ==", + "license": "MIT" + }, + "node_modules/jquery": { + "version": "3.7.1", + "resolved": "https://registry.npmjs.org/jquery/-/jquery-3.7.1.tgz", + "integrity": "sha512-m4avr8yL8kmFN8psrbFFFmB/If14iN5o9nw/NgnnM+kybDJpRsAynV2BsfpTYrTRysYUdADVD7CkUUizgkpLfg==", + "license": "MIT" + }, + "node_modules/jszip": { + "version": "3.10.1", + "resolved": "https://registry.npmjs.org/jszip/-/jszip-3.10.1.tgz", + "integrity": "sha512-xXDvecyTpGLrqFrvkrUSoxxfJI5AH7U8zxxtVclpsUtMCq4JQ290LY8AW5c7Ggnr/Y/oK+bQMbqK2qmtk3pN4g==", + "license": "(MIT OR GPL-3.0-or-later)", + "dependencies": { + "lie": "~3.3.0", + "pako": "~1.0.2", + "readable-stream": "~2.3.6", + "setimmediate": "^1.0.5" + } + }, + "node_modules/laravel-echo": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/laravel-echo/-/laravel-echo-2.0.2.tgz", + "integrity": "sha512-Ciai6hA7r35MFqNRb8G034cvm9WiveSTFQQKRGJhWtZGbng7C8BBa5QvqDxk/Mw5GeJ+q19jrEwQhf7r1b1lcg==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=20" + } + }, + "node_modules/laravel-vite-plugin": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/laravel-vite-plugin/-/laravel-vite-plugin-1.2.0.tgz", + "integrity": "sha512-R0pJ+IcTVeqEMoKz/B2Ij57QVq3sFTABiFmb06gAwFdivbOgsUtuhX6N2MGLEArajrS3U5JbberzwOe7uXHMHQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "picocolors": "^1.0.0", + "vite-plugin-full-reload": "^1.1.0" + }, + "bin": { + "clean-orphaned-assets": "bin/clean.js" + }, + "engines": { + "node": "^18.0.0 || ^20.0.0 || >=22.0.0" + }, + "peerDependencies": { + "vite": "^5.0.0 || ^6.0.0" + } + }, + "node_modules/lenis": { + "version": "1.1.20", + "resolved": "https://registry.npmjs.org/lenis/-/lenis-1.1.20.tgz", + "integrity": "sha512-UE64mlJEN4W8DWP2tfHzPzygk94Q2BhjzeG/YHWoyeMJ2Fd6XziBCNN+IvHwmB4GkmKIYxgr0+TvRYTSAMTMFA==", + "license": "MIT", + "funding": { + "type": "github", + "url": "https://github.com/sponsors/darkroomengineering" + }, + "peerDependencies": { + "react": ">=17.0.0", + "vue": ">=3.0.0" + }, + "peerDependenciesMeta": { + "react": { + "optional": true + }, + "vue": { + "optional": true + } + } + }, + "node_modules/lie": { + "version": "3.3.0", + "resolved": "https://registry.npmjs.org/lie/-/lie-3.3.0.tgz", + "integrity": "sha512-UaiMJzeWRlEujzAuw5LokY1L5ecNQYZKfmyZ9L7wDHb/p5etKaxXhohBcrw0EYby+G/NA52vRSN4N39dxHAIwQ==", + "license": "MIT", + "dependencies": { + "immediate": "~3.0.5" + } + }, + "node_modules/lilconfig": { + "version": "3.1.3", + "resolved": "https://registry.npmjs.org/lilconfig/-/lilconfig-3.1.3.tgz", + "integrity": "sha512-/vlFKAoH5Cgt3Ie+JLhRbwOsCQePABiU3tJ1egGvyQ+33R/vcwM2Zl2QR/LzjsBeItPt3oSVXapn+m4nQDvpzw==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=14" + }, + "funding": { + "url": "https://github.com/sponsors/antonk52" + } + }, + "node_modules/lines-and-columns": { + "version": "1.2.4", + "resolved": "https://registry.npmjs.org/lines-and-columns/-/lines-and-columns-1.2.4.tgz", + "integrity": "sha512-7ylylesZQ/PV29jhEDl3Ufjo6ZX7gCqJr5F7PKrqc93v7fzSymt1BpwEU8nAUXs8qzzvqhbjhK5QZg6Mt/HkBg==", + "dev": true, + "license": "MIT" + }, + "node_modules/lodash": { + "version": "4.17.21", + "resolved": "https://registry.npmjs.org/lodash/-/lodash-4.17.21.tgz", + "integrity": "sha512-v2kDEe57lecTulaDIuNTPy3Ry4gLGJ6Z1O3vE1krgXZNrsQ+LFTGHVxVjcXPs17LhbZVGedAJv8XZ1tvj5FvSg==", + "dev": true, + "license": "MIT" + }, + "node_modules/lru-cache": { + "version": "10.4.3", + "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-10.4.3.tgz", + "integrity": "sha512-JNAzZcXrCt42VGLuYz0zfAzDfAvJWW6AfYlDBQyDV5DClI2m5sAmK+OIO7s59XfsRsWHp02jAJrRadPRGTt6SQ==", + "dev": true, + "license": "ISC" + }, + "node_modules/math-intrinsics": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/math-intrinsics/-/math-intrinsics-1.1.0.tgz", + "integrity": "sha512-/IXtbwEk5HTPyEwyKX6hGkYXxM9nbj64B+ilVJnC/R6B0pH5G4V3b0pVbL7DBj4tkhBAppbQUlf6F6Xl9LHu1g==", + "license": "MIT", + "engines": { + "node": ">= 0.4" + } + }, + "node_modules/merge2": { + "version": "1.4.1", + "resolved": "https://registry.npmjs.org/merge2/-/merge2-1.4.1.tgz", + "integrity": "sha512-8q7VEgMJW4J8tcfVPy8g09NcQwZdbwFEqhe/WZkoIzjn/3TGDwtOCYtXGxA3O8tPzpczCCDgv+P2P5y00ZJOOg==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">= 8" + } + }, + "node_modules/micromatch": { + "version": "4.0.8", + "resolved": "https://registry.npmjs.org/micromatch/-/micromatch-4.0.8.tgz", + "integrity": "sha512-PXwfBhYu0hBCPw8Dn0E+WDYb7af3dSLVWKi3HGv84IdF4TyFoC0ysxFd0Goxw7nSv4T/PzEJQxsYsEiFCKo2BA==", + "dev": true, + "license": "MIT", + "dependencies": { + "braces": "^3.0.3", + "picomatch": "^2.3.1" + }, + "engines": { + "node": ">=8.6" + } + }, + "node_modules/micromatch/node_modules/picomatch": { + "version": "2.3.1", + "resolved": "https://registry.npmjs.org/picomatch/-/picomatch-2.3.1.tgz", + "integrity": "sha512-JU3teHTNjmE2VCGFzuY8EXzCDVwEqB2a8fsIvwaStHhAWJEeVd1o1QD80CU6+ZdEXXSLbSsuLwJjkCBWqRQUVA==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=8.6" + }, + "funding": { + "url": "https://github.com/sponsors/jonschlinkert" + } + }, + "node_modules/mime-db": { + "version": "1.52.0", + "resolved": "https://registry.npmjs.org/mime-db/-/mime-db-1.52.0.tgz", + "integrity": "sha512-sPU4uV7dYlvtWJxwwxHD0PuihVNiE7TyAbQ5SWxDCB9mUYvOgroQOwYQQOKPJ8CIbE+1ETVlOoK1UC2nU3gYvg==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/mime-types": { + "version": "2.1.35", + "resolved": "https://registry.npmjs.org/mime-types/-/mime-types-2.1.35.tgz", + "integrity": "sha512-ZDY+bPm5zTTF+YpCrAU9nK0UgICYPT0QtT1NZWFv4s++TNkcgVaT0g6+4R2uI4MjQjzysHB1zxuWL50hzaeXiw==", + "dev": true, + "license": "MIT", + "dependencies": { + "mime-db": "1.52.0" + }, + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/mini-svg-data-uri": { + "version": "1.4.4", + "resolved": "https://registry.npmjs.org/mini-svg-data-uri/-/mini-svg-data-uri-1.4.4.tgz", + "integrity": "sha512-r9deDe9p5FJUPZAk3A59wGH7Ii9YrjjWw0jmw/liSbHl2CHiyXj6FcDXDu2K3TjVAXqiJdaw3xxwlZZr9E6nHg==", + "dev": true, + "license": "MIT", + "bin": { + "mini-svg-data-uri": "cli.js" + } + }, + "node_modules/minimatch": { + "version": "9.0.5", + "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-9.0.5.tgz", + "integrity": "sha512-G6T0ZX48xgozx7587koeX9Ys2NYy6Gmv//P89sEte9V9whIapMNF4idKxnW2QtCcLiTWlb/wfCabAtAFWhhBow==", + "dev": true, + "license": "ISC", + "dependencies": { + "brace-expansion": "^2.0.1" + }, + "engines": { + "node": ">=16 || 14 >=14.17" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" + } + }, + "node_modules/minipass": { + "version": "7.1.2", + "resolved": "https://registry.npmjs.org/minipass/-/minipass-7.1.2.tgz", + "integrity": "sha512-qOOzS1cBTWYF4BH8fVePDBOO9iptMnGUEZwNc/cMWnTV2nVLZ7VoNWEPHkYczZA0pdoA7dl6e7FL659nX9S2aw==", + "dev": true, + "license": "ISC", + "engines": { + "node": ">=16 || 14 >=14.17" + } + }, + "node_modules/mz": { + "version": "2.7.0", + "resolved": "https://registry.npmjs.org/mz/-/mz-2.7.0.tgz", + "integrity": "sha512-z81GNO7nnYMEhrGh9LeymoE4+Yr0Wn5McHIZMK5cfQCl+NDX08sCZgUc9/6MHni9IWuFLm1Z3HTCXu2z9fN62Q==", + "dev": true, + "license": "MIT", + "dependencies": { + "any-promise": "^1.0.0", + "object-assign": "^4.0.1", + "thenify-all": "^1.0.0" + } + }, + "node_modules/nanoid": { + "version": "3.3.8", + "resolved": "https://registry.npmjs.org/nanoid/-/nanoid-3.3.8.tgz", + "integrity": "sha512-WNLf5Sd8oZxOm+TzppcYk8gVOgP+l58xNy58D0nbUnOxOWRWvlcCV4kUF7ltmI6PsrLl/BgKEyS4mqsGChFN0w==", + "dev": true, + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/ai" + } + ], + "license": "MIT", + "bin": { + "nanoid": "bin/nanoid.cjs" + }, + "engines": { + "node": "^10 || ^12 || ^13.7 || ^14 || >=15.0.1" + } + }, + "node_modules/node-releases": { + "version": "2.0.19", + "resolved": "https://registry.npmjs.org/node-releases/-/node-releases-2.0.19.tgz", + "integrity": "sha512-xxOWJsBKtzAq7DY0J+DTzuz58K8e7sJbdgwkbMWQe8UYB6ekmsQ45q0M/tJDsGaZmbC+l7n57UV8Hl5tHxO9uw==", + "dev": true, + "license": "MIT" + }, + "node_modules/normalize-path": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/normalize-path/-/normalize-path-3.0.0.tgz", + "integrity": "sha512-6eZs5Ls3WtCisHWp9S2GUy8dqkpGi4BVSz3GaqiE6ezub0512ESztXUwUB6C6IKbQkY2Pnb/mD4WYojCRwcwLA==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/normalize-range": { + "version": "0.1.2", + "resolved": "https://registry.npmjs.org/normalize-range/-/normalize-range-0.1.2.tgz", + "integrity": "sha512-bdok/XvKII3nUpklnV6P2hxtMNrCboOjAcyBuQnWEhO665FwrSNRxU+AqpsyvO6LgGYPspN+lu5CLtw4jPRKNA==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/object-assign": { + "version": "4.1.1", + "resolved": "https://registry.npmjs.org/object-assign/-/object-assign-4.1.1.tgz", + "integrity": "sha512-rJgTQnkUnH1sFw8yT6VSU3zD3sWmu6sZhIseY8VX+GRu3P6F7Fu+JNDoXfklElbLJSnc3FUQHVe4cU5hj+BcUg==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/object-hash": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/object-hash/-/object-hash-3.0.0.tgz", + "integrity": "sha512-RSn9F68PjH9HqtltsSnqYC1XXoWe9Bju5+213R98cNGttag9q9yAOTzdbsqvIa7aNm5WffBZFpWYr2aWrklWAw==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">= 6" + } + }, + "node_modules/object-is": { + "version": "1.1.6", + "resolved": "https://registry.npmjs.org/object-is/-/object-is-1.1.6.tgz", + "integrity": "sha512-F8cZ+KfGlSGi09lJT7/Nd6KJZ9ygtvYC0/UYYLI9nmQKLMnydpB9yvbv9K1uSkEu7FU9vYPmVwLg328tX+ot3Q==", + "license": "MIT", + "dependencies": { + "call-bind": "^1.0.7", + "define-properties": "^1.2.1" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/object-keys": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/object-keys/-/object-keys-1.1.1.tgz", + "integrity": "sha512-NuAESUOUMrlIXOfHKzD6bpPu3tYt3xvjNdRIQ+FeT0lNb4K8WR70CaDxhuNguS2XG+GjkyMwOzsN5ZktImfhLA==", + "license": "MIT", + "engines": { + "node": ">= 0.4" + } + }, + "node_modules/package-json-from-dist": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/package-json-from-dist/-/package-json-from-dist-1.0.1.tgz", + "integrity": "sha512-UEZIS3/by4OC8vL3P2dTXRETpebLI2NiI5vIrjaD/5UtrkFX/tNbwjTSRAGC/+7CAo2pIcBaRgWmcBBHcsaCIw==", + "dev": true, + "license": "BlueOak-1.0.0" + }, + "node_modules/pako": { + "version": "1.0.11", + "resolved": "https://registry.npmjs.org/pako/-/pako-1.0.11.tgz", + "integrity": "sha512-4hLB8Py4zZce5s4yd9XzopqwVv/yGNhV1Bl8NTmCq1763HeK2+EwVTv+leGeL13Dnh2wfbqowVPXCIO0z4taYw==", + "license": "(MIT AND Zlib)" + }, + "node_modules/path-key": { + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/path-key/-/path-key-3.1.1.tgz", + "integrity": "sha512-ojmeN0qd+y0jszEtoY48r0Peq5dwMEkIlCOu6Q5f41lfkswXuKtYrhgoTpLnyIcHm24Uhqx+5Tqm2InSwLhE6Q==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=8" + } + }, + "node_modules/path-parse": { + "version": "1.0.7", + "resolved": "https://registry.npmjs.org/path-parse/-/path-parse-1.0.7.tgz", + "integrity": "sha512-LDJzPVEEEPR+y48z93A0Ed0yXb8pAByGWo/k5YYdYgpY2/2EsOsksJrq7lOHxryrVOn1ejG6oAp8ahvOIQD8sw==", + "dev": true, + "license": "MIT" + }, + "node_modules/path-scurry": { + "version": "1.11.1", + "resolved": "https://registry.npmjs.org/path-scurry/-/path-scurry-1.11.1.tgz", + "integrity": "sha512-Xa4Nw17FS9ApQFJ9umLiJS4orGjm7ZzwUrwamcGQuHSzDyth9boKDaycYdDcZDuqYATXw4HFXgaqWTctW/v1HA==", + "dev": true, + "license": "BlueOak-1.0.0", + "dependencies": { + "lru-cache": "^10.2.0", + "minipass": "^5.0.0 || ^6.0.2 || ^7.0.0" + }, + "engines": { + "node": ">=16 || 14 >=14.18" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" + } + }, + "node_modules/pdfmake": { + "version": "0.2.18", + "resolved": "https://registry.npmjs.org/pdfmake/-/pdfmake-0.2.18.tgz", + "integrity": "sha512-Fe+GnMS8EVZu5rci/CDaQ+xmUoHvx8P+rvIlrwSYM6A5c7Aik8G6lpJbddhjBE2jXGjv6WcUCFCB06uZbjxkMw==", + "license": "MIT", + "dependencies": { + "@foliojs-fork/linebreak": "^1.1.2", + "@foliojs-fork/pdfkit": "^0.15.3", + "iconv-lite": "^0.6.3", + "xmldoc": "^1.3.0" + }, + "engines": { + "node": ">=18" + } + }, + "node_modules/picocolors": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/picocolors/-/picocolors-1.1.1.tgz", + "integrity": "sha512-xceH2snhtb5M9liqDsmEw56le376mTZkEX/jEb/RxNFyegNul7eNslCXP9FDj/Lcu0X8KEyMceP2ntpaHrDEVA==", + "dev": true, + "license": "ISC" + }, + "node_modules/picomatch": { + "version": "4.0.2", + "resolved": "https://registry.npmjs.org/picomatch/-/picomatch-4.0.2.tgz", + "integrity": "sha512-M7BAV6Rlcy5u+m6oPhAPFgJTzAioX/6B0DxyvDlo9l8+T3nLKbrczg2WLUyzd45L8RqfUMyGPzekbMvX2Ldkwg==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/sponsors/jonschlinkert" + } + }, + "node_modules/pify": { + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/pify/-/pify-2.3.0.tgz", + "integrity": "sha512-udgsAY+fTnvv7kI7aaxbqwWNb0AHiB0qBO89PZKPkoTmGOgdbrHDKD+0B2X4uTfJ/FT1R09r9gTsjUjNJotuog==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/pirates": { + "version": "4.0.6", + "resolved": "https://registry.npmjs.org/pirates/-/pirates-4.0.6.tgz", + "integrity": "sha512-saLsH7WeYYPiD25LDuLRRY/i+6HaPYr6G1OUlN39otzkSTxKnubR9RTxS3/Kk50s1g2JTgFwWQDQyplC5/SHZg==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">= 6" + } + }, + "node_modules/png-js": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/png-js/-/png-js-1.0.0.tgz", + "integrity": "sha512-k+YsbhpA9e+EFfKjTCH3VW6aoKlyNYI6NYdTfDL4CIvFnvsuO84ttonmZE7rc+v23SLTH8XX+5w/Ak9v0xGY4g==" + }, + "node_modules/postcss": { + "version": "8.5.2", + "resolved": "https://registry.npmjs.org/postcss/-/postcss-8.5.2.tgz", + "integrity": "sha512-MjOadfU3Ys9KYoX0AdkBlFEF1Vx37uCCeN4ZHnmwm9FfpbsGWMZeBLMmmpY+6Ocqod7mkdZ0DT31OlbsFrLlkA==", + "dev": true, + "funding": [ + { + "type": "opencollective", + "url": "https://opencollective.com/postcss/" + }, + { + "type": "tidelift", + "url": "https://tidelift.com/funding/github/npm/postcss" + }, + { + "type": "github", + "url": "https://github.com/sponsors/ai" + } + ], + "license": "MIT", + "dependencies": { + "nanoid": "^3.3.8", + "picocolors": "^1.1.1", + "source-map-js": "^1.2.1" + }, + "engines": { + "node": "^10 || ^12 || >=14" + } + }, + "node_modules/postcss-import": { + "version": "15.1.0", + "resolved": "https://registry.npmjs.org/postcss-import/-/postcss-import-15.1.0.tgz", + "integrity": "sha512-hpr+J05B2FVYUAXHeK1YyI267J/dDDhMU6B6civm8hSY1jYJnBXxzKDKDswzJmtLHryrjhnDjqqp/49t8FALew==", + "dev": true, + "license": "MIT", + "dependencies": { + "postcss-value-parser": "^4.0.0", + "read-cache": "^1.0.0", + "resolve": "^1.1.7" + }, + "engines": { + "node": ">=14.0.0" + }, + "peerDependencies": { + "postcss": "^8.0.0" + } + }, + "node_modules/postcss-js": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/postcss-js/-/postcss-js-4.0.1.tgz", + "integrity": "sha512-dDLF8pEO191hJMtlHFPRa8xsizHaM82MLfNkUHdUtVEV3tgTp5oj+8qbEqYM57SLfc74KSbw//4SeJma2LRVIw==", + "dev": true, + "license": "MIT", + "dependencies": { + "camelcase-css": "^2.0.1" + }, + "engines": { + "node": "^12 || ^14 || >= 16" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/postcss/" + }, + "peerDependencies": { + "postcss": "^8.4.21" + } + }, + "node_modules/postcss-load-config": { + "version": "4.0.2", + "resolved": "https://registry.npmjs.org/postcss-load-config/-/postcss-load-config-4.0.2.tgz", + "integrity": "sha512-bSVhyJGL00wMVoPUzAVAnbEoWyqRxkjv64tUl427SKnPrENtq6hJwUojroMz2VB+Q1edmi4IfrAPpami5VVgMQ==", + "dev": true, + "funding": [ + { + "type": "opencollective", + "url": "https://opencollective.com/postcss/" + }, + { + "type": "github", + "url": "https://github.com/sponsors/ai" + } + ], + "license": "MIT", + "dependencies": { + "lilconfig": "^3.0.0", + "yaml": "^2.3.4" + }, + "engines": { + "node": ">= 14" + }, + "peerDependencies": { + "postcss": ">=8.0.9", + "ts-node": ">=9.0.0" + }, + "peerDependenciesMeta": { + "postcss": { + "optional": true + }, + "ts-node": { + "optional": true + } + } + }, + "node_modules/postcss-nested": { + "version": "6.2.0", + "resolved": "https://registry.npmjs.org/postcss-nested/-/postcss-nested-6.2.0.tgz", + "integrity": "sha512-HQbt28KulC5AJzG+cZtj9kvKB93CFCdLvog1WFLf1D+xmMvPGlBstkpTEZfK5+AN9hfJocyBFCNiqyS48bpgzQ==", + "dev": true, + "funding": [ + { + "type": "opencollective", + "url": "https://opencollective.com/postcss/" + }, + { + "type": "github", + "url": "https://github.com/sponsors/ai" + } + ], + "license": "MIT", + "dependencies": { + "postcss-selector-parser": "^6.1.1" + }, + "engines": { + "node": ">=12.0" + }, + "peerDependencies": { + "postcss": "^8.2.14" + } + }, + "node_modules/postcss-selector-parser": { + "version": "6.1.2", + "resolved": "https://registry.npmjs.org/postcss-selector-parser/-/postcss-selector-parser-6.1.2.tgz", + "integrity": "sha512-Q8qQfPiZ+THO/3ZrOrO0cJJKfpYCagtMUkXbnEfmgUjwXg6z/WBeOyS9APBBPCTSiDV+s4SwQGu8yFsiMRIudg==", + "dev": true, + "license": "MIT", + "dependencies": { + "cssesc": "^3.0.0", + "util-deprecate": "^1.0.2" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/postcss-value-parser": { + "version": "4.2.0", + "resolved": "https://registry.npmjs.org/postcss-value-parser/-/postcss-value-parser-4.2.0.tgz", + "integrity": "sha512-1NNCs6uurfkVbeXG4S8JFT9t19m45ICnif8zWLd5oPSZ50QnwMfK+H3jv408d4jw/7Bttv5axS5IiHoLaVNHeQ==", + "dev": true, + "license": "MIT" + }, + "node_modules/preline": { + "version": "2.7.0", + "resolved": "https://registry.npmjs.org/preline/-/preline-2.7.0.tgz", + "integrity": "sha512-xMuMVZ7aftBT1/5/3Rb48i/t+LWQfsUjBX7bls4peqS6h5OZTbIgz0N6eMDzuDlOZF3DiSWLehl00oGlAkvovw==", + "license": "Licensed under MIT and Preline UI Fair Use License", + "dependencies": { + "@popperjs/core": "^2.11.2" + } + }, + "node_modules/prettier": { + "version": "3.5.2", + "resolved": "https://registry.npmjs.org/prettier/-/prettier-3.5.2.tgz", + "integrity": "sha512-lc6npv5PH7hVqozBR7lkBNOGXV9vMwROAPlumdBkX0wTbbzPu/U1hk5yL8p2pt4Xoc+2mkT8t/sow2YrV/M5qg==", + "dev": true, + "license": "MIT", + "bin": { + "prettier": "bin/prettier.cjs" + }, + "engines": { + "node": ">=14" + }, + "funding": { + "url": "https://github.com/prettier/prettier?sponsor=1" + } + }, + "node_modules/process-nextick-args": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/process-nextick-args/-/process-nextick-args-2.0.1.tgz", + "integrity": "sha512-3ouUOpQhtgrbOa17J7+uxOTpITYWaGP7/AhoR3+A+/1e9skrzelGi/dXzEYyvbxubEF6Wn2ypscTKiKJFFn1ag==", + "license": "MIT" + }, + "node_modules/proxy-from-env": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/proxy-from-env/-/proxy-from-env-1.1.0.tgz", + "integrity": "sha512-D+zkORCbA9f1tdWRK0RaCR3GPv50cMxcrz4X8k5LTSUD1Dkw47mKJEZQNunItRTkWwgtaUSo1RVFRIG9ZXiFYg==", + "dev": true, + "license": "MIT" + }, + "node_modules/pusher-js": { + "version": "8.4.0", + "resolved": "https://registry.npmjs.org/pusher-js/-/pusher-js-8.4.0.tgz", + "integrity": "sha512-wp3HqIIUc1GRyu1XrP6m2dgyE9MoCsXVsWNlohj0rjSkLf+a0jLvEyVubdg58oMk7bhjBWnFClgp8jfAa6Ak4Q==", + "dev": true, + "license": "MIT", + "dependencies": { + "tweetnacl": "^1.0.3" + } + }, + "node_modules/queue-microtask": { + "version": "1.2.3", + "resolved": "https://registry.npmjs.org/queue-microtask/-/queue-microtask-1.2.3.tgz", + "integrity": "sha512-NuaNSa6flKT5JaSYQzJok04JzTL1CA6aGhv5rfLW3PgqA+M2ChpZQnAC8h8i4ZFkBS8X5RqkDBHA7r4hej3K9A==", + "dev": true, + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/feross" + }, + { + "type": "patreon", + "url": "https://www.patreon.com/feross" + }, + { + "type": "consulting", + "url": "https://feross.org/support" + } + ], + "license": "MIT" + }, + "node_modules/read-cache": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/read-cache/-/read-cache-1.0.0.tgz", + "integrity": "sha512-Owdv/Ft7IjOgm/i0xvNDZ1LrRANRfew4b2prF3OWMQLxLfu3bS8FVhCsrSCMK4lR56Y9ya+AThoTpDCTxCmpRA==", + "dev": true, + "license": "MIT", + "dependencies": { + "pify": "^2.3.0" + } + }, + "node_modules/readable-stream": { + "version": "2.3.8", + "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-2.3.8.tgz", + "integrity": "sha512-8p0AUk4XODgIewSi0l8Epjs+EVnWiK7NoDIEGU0HhE7+ZyY8D1IMY7odu5lRrFXGg71L15KG8QrPmum45RTtdA==", + "license": "MIT", + "dependencies": { + "core-util-is": "~1.0.0", + "inherits": "~2.0.3", + "isarray": "~1.0.0", + "process-nextick-args": "~2.0.0", + "safe-buffer": "~5.1.1", + "string_decoder": "~1.1.1", + "util-deprecate": "~1.0.1" + } + }, + "node_modules/readdirp": { + "version": "3.6.0", + "resolved": "https://registry.npmjs.org/readdirp/-/readdirp-3.6.0.tgz", + "integrity": "sha512-hOS089on8RduqdbhvQ5Z37A0ESjsqz6qnRcffsMU3495FuTdqSm+7bhJ29JvIOsBDEEnan5DPu9t3To9VRlMzA==", + "dev": true, + "license": "MIT", + "dependencies": { + "picomatch": "^2.2.1" + }, + "engines": { + "node": ">=8.10.0" + } + }, + "node_modules/readdirp/node_modules/picomatch": { + "version": "2.3.1", + "resolved": "https://registry.npmjs.org/picomatch/-/picomatch-2.3.1.tgz", + "integrity": "sha512-JU3teHTNjmE2VCGFzuY8EXzCDVwEqB2a8fsIvwaStHhAWJEeVd1o1QD80CU6+ZdEXXSLbSsuLwJjkCBWqRQUVA==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=8.6" + }, + "funding": { + "url": "https://github.com/sponsors/jonschlinkert" + } + }, + "node_modules/regexp.prototype.flags": { + "version": "1.5.4", + "resolved": "https://registry.npmjs.org/regexp.prototype.flags/-/regexp.prototype.flags-1.5.4.tgz", + "integrity": "sha512-dYqgNSZbDwkaJ2ceRd9ojCGjBq+mOm9LmtXnAnEGyHhN/5R7iDW2TRw3h+o/jCFxus3P2LfWIIiwowAjANm7IA==", + "license": "MIT", + "dependencies": { + "call-bind": "^1.0.8", + "define-properties": "^1.2.1", + "es-errors": "^1.3.0", + "get-proto": "^1.0.1", + "gopd": "^1.2.0", + "set-function-name": "^2.0.2" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/require-directory": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/require-directory/-/require-directory-2.1.1.tgz", + "integrity": "sha512-fGxEI7+wsG9xrvdjsrlmL22OMTTiHRwAMroiEeMgq8gzoLC/PQr7RsRDSTLUg/bZAZtF+TVIkHc6/4RIKrui+Q==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/resolve": { + "version": "1.22.10", + "resolved": "https://registry.npmjs.org/resolve/-/resolve-1.22.10.tgz", + "integrity": "sha512-NPRy+/ncIMeDlTAsuqwKIiferiawhefFJtkNSW0qZJEqMEb+qBt/77B/jGeeek+F0uOeN05CDa6HXbbIgtVX4w==", + "dev": true, + "license": "MIT", + "dependencies": { + "is-core-module": "^2.16.0", + "path-parse": "^1.0.7", + "supports-preserve-symlinks-flag": "^1.0.0" + }, + "bin": { + "resolve": "bin/resolve" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/reusify": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/reusify/-/reusify-1.0.4.tgz", + "integrity": "sha512-U9nH88a3fc/ekCF1l0/UP1IosiuIjyTh7hBvXVMHYgVcfGvt897Xguj2UOLDeI5BG2m7/uwyaLVT6fbtCwTyzw==", + "dev": true, + "license": "MIT", + "engines": { + "iojs": ">=1.0.0", + "node": ">=0.10.0" + } + }, + "node_modules/rollup": { + "version": "4.34.8", + "resolved": "https://registry.npmjs.org/rollup/-/rollup-4.34.8.tgz", + "integrity": "sha512-489gTVMzAYdiZHFVA/ig/iYFllCcWFHMvUHI1rpFmkoUtRlQxqh6/yiNqnYibjMZ2b/+FUQwldG+aLsEt6bglQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "@types/estree": "1.0.6" + }, + "bin": { + "rollup": "dist/bin/rollup" + }, + "engines": { + "node": ">=18.0.0", + "npm": ">=8.0.0" + }, + "optionalDependencies": { + "@rollup/rollup-android-arm-eabi": "4.34.8", + "@rollup/rollup-android-arm64": "4.34.8", + "@rollup/rollup-darwin-arm64": "4.34.8", + "@rollup/rollup-darwin-x64": "4.34.8", + "@rollup/rollup-freebsd-arm64": "4.34.8", + "@rollup/rollup-freebsd-x64": "4.34.8", + "@rollup/rollup-linux-arm-gnueabihf": "4.34.8", + "@rollup/rollup-linux-arm-musleabihf": "4.34.8", + "@rollup/rollup-linux-arm64-gnu": "4.34.8", + "@rollup/rollup-linux-arm64-musl": "4.34.8", + "@rollup/rollup-linux-loongarch64-gnu": "4.34.8", + "@rollup/rollup-linux-powerpc64le-gnu": "4.34.8", + "@rollup/rollup-linux-riscv64-gnu": "4.34.8", + "@rollup/rollup-linux-s390x-gnu": "4.34.8", + "@rollup/rollup-linux-x64-gnu": "4.34.8", + "@rollup/rollup-linux-x64-musl": "4.34.8", + "@rollup/rollup-win32-arm64-msvc": "4.34.8", + "@rollup/rollup-win32-ia32-msvc": "4.34.8", + "@rollup/rollup-win32-x64-msvc": "4.34.8", + "fsevents": "~2.3.2" + } + }, + "node_modules/run-parallel": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/run-parallel/-/run-parallel-1.2.0.tgz", + "integrity": "sha512-5l4VyZR86LZ/lDxZTR6jqL8AFE2S0IFLMP26AbjsLVADxHdhB/c0GUsH+y39UfCi3dzz8OlQuPmnaJOMoDHQBA==", + "dev": true, + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/feross" + }, + { + "type": "patreon", + "url": "https://www.patreon.com/feross" + }, + { + "type": "consulting", + "url": "https://feross.org/support" + } + ], + "license": "MIT", + "dependencies": { + "queue-microtask": "^1.2.2" + } + }, + "node_modules/rxjs": { + "version": "7.8.1", + "resolved": "https://registry.npmjs.org/rxjs/-/rxjs-7.8.1.tgz", + "integrity": "sha512-AA3TVj+0A2iuIoQkWEK/tqFjBq2j+6PO6Y0zJcvzLAFhEFIO3HL0vls9hWLncZbAAbK0mar7oZ4V079I/qPMxg==", + "dev": true, + "license": "Apache-2.0", + "dependencies": { + "tslib": "^2.1.0" + } + }, + "node_modules/safe-buffer": { + "version": "5.1.2", + "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.1.2.tgz", + "integrity": "sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g==", + "license": "MIT" + }, + "node_modules/safer-buffer": { + "version": "2.1.2", + "resolved": "https://registry.npmjs.org/safer-buffer/-/safer-buffer-2.1.2.tgz", + "integrity": "sha512-YZo3K82SD7Riyi0E1EQPojLz7kpepnSQI9IyPbHHg1XXXevb5dJI7tpyN2ADxGcQbHG7vcyRHk0cbwqcQriUtg==", + "license": "MIT" + }, + "node_modules/sax": { + "version": "1.4.1", + "resolved": "https://registry.npmjs.org/sax/-/sax-1.4.1.tgz", + "integrity": "sha512-+aWOz7yVScEGoKNd4PA10LZ8sk0A/z5+nXQG5giUO5rprX9jgYsTdov9qCchZiPIZezbZH+jRut8nPodFAX4Jg==", + "license": "ISC" + }, + "node_modules/set-function-length": { + "version": "1.2.2", + "resolved": "https://registry.npmjs.org/set-function-length/-/set-function-length-1.2.2.tgz", + "integrity": "sha512-pgRc4hJ4/sNjWCSS9AmnS40x3bNMDTknHgL5UaMBTMyJnU90EgWh1Rz+MC9eFu4BuN/UwZjKQuY/1v3rM7HMfg==", + "license": "MIT", + "dependencies": { + "define-data-property": "^1.1.4", + "es-errors": "^1.3.0", + "function-bind": "^1.1.2", + "get-intrinsic": "^1.2.4", + "gopd": "^1.0.1", + "has-property-descriptors": "^1.0.2" + }, + "engines": { + "node": ">= 0.4" + } + }, + "node_modules/set-function-name": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/set-function-name/-/set-function-name-2.0.2.tgz", + "integrity": "sha512-7PGFlmtwsEADb0WYyvCMa1t+yke6daIG4Wirafur5kcf+MhUnPms1UeR0CKQdTZD81yESwMHbtn+TR+dMviakQ==", + "license": "MIT", + "dependencies": { + "define-data-property": "^1.1.4", + "es-errors": "^1.3.0", + "functions-have-names": "^1.2.3", + "has-property-descriptors": "^1.0.2" + }, + "engines": { + "node": ">= 0.4" + } + }, + "node_modules/setimmediate": { + "version": "1.0.5", + "resolved": "https://registry.npmjs.org/setimmediate/-/setimmediate-1.0.5.tgz", + "integrity": "sha512-MATJdZp8sLqDl/68LfQmbP8zKPLQNV6BIZoIgrscFDQ+RsvK/BxeDQOgyxKKoh0y/8h3BqVFnCqQ/gd+reiIXA==", + "license": "MIT" + }, + "node_modules/shebang-command": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/shebang-command/-/shebang-command-2.0.0.tgz", + "integrity": "sha512-kHxr2zZpYtdmrN1qDjrrX/Z1rR1kG8Dx+gkpK1G4eXmvXswmcE1hTWBWYUzlraYw1/yZp6YuDY77YtvbN0dmDA==", + "dev": true, + "license": "MIT", + "dependencies": { + "shebang-regex": "^3.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/shebang-regex": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/shebang-regex/-/shebang-regex-3.0.0.tgz", + "integrity": "sha512-7++dFhtcx3353uBaq8DDR4NuxBetBzC7ZQOhmTQInHEd6bSrXdiEyzCvG07Z44UYdLShWUyXt5M/yhz8ekcb1A==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=8" + } + }, + "node_modules/shell-quote": { + "version": "1.8.2", + "resolved": "https://registry.npmjs.org/shell-quote/-/shell-quote-1.8.2.tgz", + "integrity": "sha512-AzqKpGKjrj7EM6rKVQEPpB288oCfnrEIuyoT9cyF4nmGa7V8Zk6f7RRqYisX8X9m+Q7bd632aZW4ky7EhbQztA==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/signal-exit": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/signal-exit/-/signal-exit-4.1.0.tgz", + "integrity": "sha512-bzyZ1e88w9O1iNJbKnOlvYTrWPDl46O1bG0D3XInv+9tkPrxrN8jUUTiFlDkkmKWgn1M6CfIA13SuGqOa9Korw==", + "dev": true, + "license": "ISC", + "engines": { + "node": ">=14" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" + } + }, + "node_modules/simple-datatables": { + "version": "9.2.2", + "resolved": "https://registry.npmjs.org/simple-datatables/-/simple-datatables-9.2.2.tgz", + "integrity": "sha512-FgGJIblxM3aR+VdueglTHvZuN3R2D/q1HM272G3EcNVeUb+b9J8aWdtxoPZtKoUqmOdxc7IYWrM1HW+mi2Oq8A==", + "license": "LGPL-3.0", + "dependencies": { + "dayjs": "^1.11.10", + "diff-dom": "^5.1.3" + } + }, + "node_modules/source-map-js": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/source-map-js/-/source-map-js-1.2.1.tgz", + "integrity": "sha512-UXWMKhLOwVKb728IUtQPXxfYU+usdybtUrK/8uGE8CQMvrhOpwvzDBwj0QhSL7MQc7vIsISBG8VQ8+IDQxpfQA==", + "dev": true, + "license": "BSD-3-Clause", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/string_decoder": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.1.1.tgz", + "integrity": "sha512-n/ShnvDi6FHbbVfviro+WojiFzv+s8MPMHBczVePfUpDJLwoLT0ht1l4YwBCbi8pJAveEEdnkHyPyTP/mzRfwg==", + "license": "MIT", + "dependencies": { + "safe-buffer": "~5.1.0" + } + }, + "node_modules/string-width": { + "version": "5.1.2", + "resolved": "https://registry.npmjs.org/string-width/-/string-width-5.1.2.tgz", + "integrity": "sha512-HnLOCR3vjcY8beoNLtcjZ5/nxn2afmME6lhrDrebokqMap+XbeW8n9TXpPDOqdGK5qcI3oT0GKTW6wC7EMiVqA==", + "dev": true, + "license": "MIT", + "dependencies": { + "eastasianwidth": "^0.2.0", + "emoji-regex": "^9.2.2", + "strip-ansi": "^7.0.1" + }, + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/string-width-cjs": { + "name": "string-width", + "version": "4.2.3", + "resolved": "https://registry.npmjs.org/string-width/-/string-width-4.2.3.tgz", + "integrity": "sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g==", + "dev": true, + "license": "MIT", + "dependencies": { + "emoji-regex": "^8.0.0", + "is-fullwidth-code-point": "^3.0.0", + "strip-ansi": "^6.0.1" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/string-width-cjs/node_modules/ansi-regex": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-5.0.1.tgz", + "integrity": "sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=8" + } + }, + "node_modules/string-width-cjs/node_modules/emoji-regex": { + "version": "8.0.0", + "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-8.0.0.tgz", + "integrity": "sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A==", + "dev": true, + "license": "MIT" + }, + "node_modules/string-width-cjs/node_modules/strip-ansi": { + "version": "6.0.1", + "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.1.tgz", + "integrity": "sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==", + "dev": true, + "license": "MIT", + "dependencies": { + "ansi-regex": "^5.0.1" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/strip-ansi": { + "version": "7.1.0", + "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-7.1.0.tgz", + "integrity": "sha512-iq6eVVI64nQQTRYq2KtEg2d2uU7LElhTJwsH4YzIHZshxlgZms/wIc4VoDQTlG/IvVIrBKG06CrZnp0qv7hkcQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "ansi-regex": "^6.0.1" + }, + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/chalk/strip-ansi?sponsor=1" + } + }, + "node_modules/strip-ansi-cjs": { + "name": "strip-ansi", + "version": "6.0.1", + "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.1.tgz", + "integrity": "sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==", + "dev": true, + "license": "MIT", + "dependencies": { + "ansi-regex": "^5.0.1" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/strip-ansi-cjs/node_modules/ansi-regex": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-5.0.1.tgz", + "integrity": "sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=8" + } + }, + "node_modules/sucrase": { + "version": "3.35.0", + "resolved": "https://registry.npmjs.org/sucrase/-/sucrase-3.35.0.tgz", + "integrity": "sha512-8EbVDiu9iN/nESwxeSxDKe0dunta1GOlHufmSSXxMD2z2/tMZpDMpvXQGsc+ajGo8y2uYUmixaSRUc/QPoQ0GA==", + "dev": true, + "license": "MIT", + "dependencies": { + "@jridgewell/gen-mapping": "^0.3.2", + "commander": "^4.0.0", + "glob": "^10.3.10", + "lines-and-columns": "^1.1.6", + "mz": "^2.7.0", + "pirates": "^4.0.1", + "ts-interface-checker": "^0.1.9" + }, + "bin": { + "sucrase": "bin/sucrase", + "sucrase-node": "bin/sucrase-node" + }, + "engines": { + "node": ">=16 || 14 >=14.17" + } + }, + "node_modules/supports-color": { + "version": "8.1.1", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-8.1.1.tgz", + "integrity": "sha512-MpUEN2OodtUzxvKQl72cUF7RQ5EiHsGvSsVG0ia9c5RbWGL2CI4C7EpPS8UTBIplnlzZiNuV56w+FuNxy3ty2Q==", + "dev": true, + "license": "MIT", + "dependencies": { + "has-flag": "^4.0.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/chalk/supports-color?sponsor=1" + } + }, + "node_modules/supports-preserve-symlinks-flag": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/supports-preserve-symlinks-flag/-/supports-preserve-symlinks-flag-1.0.0.tgz", + "integrity": "sha512-ot0WnXS9fgdkgIcePe6RHNk1WA8+muPa6cSjeR3V8K27q9BB1rTE3R1p7Hv0z1ZyAc8s6Vvv8DIyWf681MAt0w==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/swiper": { + "version": "11.2.4", + "resolved": "https://registry.npmjs.org/swiper/-/swiper-11.2.4.tgz", + "integrity": "sha512-DTtglrsFfMYytid+oNy4QI3t2N2+XhhwSYbnyOhlwBmvY8Bkoj3ombK1/b80w8vDpQ+Lqlnbm+0737+i32MrcA==", + "funding": [ + { + "type": "patreon", + "url": "https://www.patreon.com/swiperjs" + }, + { + "type": "open_collective", + "url": "http://opencollective.com/swiper" + } + ], + "license": "MIT", + "engines": { + "node": ">= 4.7.0" + } + }, + "node_modules/tailwindcss": { + "version": "3.4.17", + "resolved": "https://registry.npmjs.org/tailwindcss/-/tailwindcss-3.4.17.tgz", + "integrity": "sha512-w33E2aCvSDP0tW9RZuNXadXlkHXqFzSkQew/aIa2i/Sj8fThxwovwlXHSPXTbAHwEIhBFXAedUhP2tueAKP8Og==", + "dev": true, + "license": "MIT", + "dependencies": { + "@alloc/quick-lru": "^5.2.0", + "arg": "^5.0.2", + "chokidar": "^3.6.0", + "didyoumean": "^1.2.2", + "dlv": "^1.1.3", + "fast-glob": "^3.3.2", + "glob-parent": "^6.0.2", + "is-glob": "^4.0.3", + "jiti": "^1.21.6", + "lilconfig": "^3.1.3", + "micromatch": "^4.0.8", + "normalize-path": "^3.0.0", + "object-hash": "^3.0.0", + "picocolors": "^1.1.1", + "postcss": "^8.4.47", + "postcss-import": "^15.1.0", + "postcss-js": "^4.0.1", + "postcss-load-config": "^4.0.2", + "postcss-nested": "^6.2.0", + "postcss-selector-parser": "^6.1.2", + "resolve": "^1.22.8", + "sucrase": "^3.35.0" + }, + "bin": { + "tailwind": "lib/cli.js", + "tailwindcss": "lib/cli.js" + }, + "engines": { + "node": ">=14.0.0" + } + }, + "node_modules/thenify": { + "version": "3.3.1", + "resolved": "https://registry.npmjs.org/thenify/-/thenify-3.3.1.tgz", + "integrity": "sha512-RVZSIV5IG10Hk3enotrhvz0T9em6cyHBLkH/YAZuKqd8hRkKhSfCGIcP2KUY0EPxndzANBmNllzWPwak+bheSw==", + "dev": true, + "license": "MIT", + "dependencies": { + "any-promise": "^1.0.0" + } + }, + "node_modules/thenify-all": { + "version": "1.6.0", + "resolved": "https://registry.npmjs.org/thenify-all/-/thenify-all-1.6.0.tgz", + "integrity": "sha512-RNxQH/qI8/t3thXJDwcstUO4zeqo64+Uy/+sNVRBx4Xn2OX+OZ9oP+iJnNFqplFra2ZUVeKCSa2oVWi3T4uVmA==", + "dev": true, + "license": "MIT", + "dependencies": { + "thenify": ">= 3.1.0 < 4" + }, + "engines": { + "node": ">=0.8" + } + }, + "node_modules/tiny-inflate": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/tiny-inflate/-/tiny-inflate-1.0.3.tgz", + "integrity": "sha512-pkY1fj1cKHb2seWDy0B16HeWyczlJA9/WW3u3c4z/NiWDsO3DOU5D7nhTLE9CF0yXv/QZFY7sEJmj24dK+Rrqw==", + "license": "MIT" + }, + "node_modules/to-regex-range": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/to-regex-range/-/to-regex-range-5.0.1.tgz", + "integrity": "sha512-65P7iz6X5yEr1cwcgvQxbbIw7Uk3gOy5dIdtZ4rDveLqhrdJP+Li/Hx6tyK0NEb+2GCyneCMJiGqrADCSNk8sQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "is-number": "^7.0.0" + }, + "engines": { + "node": ">=8.0" + } + }, + "node_modules/tree-kill": { + "version": "1.2.2", + "resolved": "https://registry.npmjs.org/tree-kill/-/tree-kill-1.2.2.tgz", + "integrity": "sha512-L0Orpi8qGpRG//Nd+H90vFB+3iHnue1zSSGmNOOCh1GLJ7rUKVwV2HvijphGQS2UmhUZewS9VgvxYIdgr+fG1A==", + "dev": true, + "license": "MIT", + "bin": { + "tree-kill": "cli.js" + } + }, + "node_modules/ts-interface-checker": { + "version": "0.1.13", + "resolved": "https://registry.npmjs.org/ts-interface-checker/-/ts-interface-checker-0.1.13.tgz", + "integrity": "sha512-Y/arvbn+rrz3JCKl9C4kVNfTfSm2/mEp5FSz5EsZSANGPSlQrpRI5M4PKF+mJnE52jOO90PnPSc3Ur3bTQw0gA==", + "dev": true, + "license": "Apache-2.0" + }, + "node_modules/tslib": { + "version": "2.8.1", + "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.8.1.tgz", + "integrity": "sha512-oJFu94HQb+KVduSUQL7wnpmqnfmLsOA/nAh6b6EH0wCEoK0/mPeXU6c3wKDV83MkOuHPRHtSXKKU99IBazS/2w==", + "dev": true, + "license": "0BSD" + }, + "node_modules/tweetnacl": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/tweetnacl/-/tweetnacl-1.0.3.tgz", + "integrity": "sha512-6rt+RN7aOi1nGMyC4Xa5DdYiukl2UWCbcJft7YhxReBGQD7OAM8Pbxw6YMo4r2diNEA8FEmu32YOn9rhaiE5yw==", + "dev": true, + "license": "Unlicense" + }, + "node_modules/unicode-properties": { + "version": "1.4.1", + "resolved": "https://registry.npmjs.org/unicode-properties/-/unicode-properties-1.4.1.tgz", + "integrity": "sha512-CLjCCLQ6UuMxWnbIylkisbRj31qxHPAurvena/0iwSVbQ2G1VY5/HjV0IRabOEbDHlzZlRdCrD4NhB0JtU40Pg==", + "license": "MIT", + "dependencies": { + "base64-js": "^1.3.0", + "unicode-trie": "^2.0.0" + } + }, + "node_modules/unicode-trie": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/unicode-trie/-/unicode-trie-2.0.0.tgz", + "integrity": "sha512-x7bc76x0bm4prf1VLg79uhAzKw8DVboClSN5VxJuQ+LKDOVEW9CdH+VY7SP+vX7xCYQqzzgQpFqz15zeLvAtZQ==", + "license": "MIT", + "dependencies": { + "pako": "^0.2.5", + "tiny-inflate": "^1.0.0" + } + }, + "node_modules/unicode-trie/node_modules/pako": { + "version": "0.2.9", + "resolved": "https://registry.npmjs.org/pako/-/pako-0.2.9.tgz", + "integrity": "sha512-NUcwaKxUxWrZLpDG+z/xZaCgQITkA/Dv4V/T6bw7VON6l1Xz/VnrBqrYjZQ12TamKHzITTfOEIYUj48y2KXImA==", + "license": "MIT" + }, + "node_modules/update-browserslist-db": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/update-browserslist-db/-/update-browserslist-db-1.1.2.tgz", + "integrity": "sha512-PPypAm5qvlD7XMZC3BujecnaOxwhrtoFR+Dqkk5Aa/6DssiH0ibKoketaj9w8LP7Bont1rYeoV5plxD7RTEPRg==", + "dev": true, + "funding": [ + { + "type": "opencollective", + "url": "https://opencollective.com/browserslist" + }, + { + "type": "tidelift", + "url": "https://tidelift.com/funding/github/npm/browserslist" + }, + { + "type": "github", + "url": "https://github.com/sponsors/ai" + } + ], + "license": "MIT", + "dependencies": { + "escalade": "^3.2.0", + "picocolors": "^1.1.1" + }, + "bin": { + "update-browserslist-db": "cli.js" + }, + "peerDependencies": { + "browserslist": ">= 4.21.0" + } + }, + "node_modules/util-deprecate": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/util-deprecate/-/util-deprecate-1.0.2.tgz", + "integrity": "sha512-EPD5q1uXyFxJpCrLnCc1nHnq3gOa6DZBocAIiI2TaSCA7VCJ1UJDMagCzIkXNsUYfD1daK//LTEQ8xiIbrHtcw==", + "license": "MIT" + }, + "node_modules/vite": { + "version": "6.1.1", + "resolved": "https://registry.npmjs.org/vite/-/vite-6.1.1.tgz", + "integrity": "sha512-4GgM54XrwRfrOp297aIYspIti66k56v16ZnqHvrIM7mG+HjDlAwS7p+Srr7J6fGvEdOJ5JcQ/D9T7HhtdXDTzA==", + "dev": true, + "license": "MIT", + "dependencies": { + "esbuild": "^0.24.2", + "postcss": "^8.5.2", + "rollup": "^4.30.1" + }, + "bin": { + "vite": "bin/vite.js" + }, + "engines": { + "node": "^18.0.0 || ^20.0.0 || >=22.0.0" + }, + "funding": { + "url": "https://github.com/vitejs/vite?sponsor=1" + }, + "optionalDependencies": { + "fsevents": "~2.3.3" + }, + "peerDependencies": { + "@types/node": "^18.0.0 || ^20.0.0 || >=22.0.0", + "jiti": ">=1.21.0", + "less": "*", + "lightningcss": "^1.21.0", + "sass": "*", + "sass-embedded": "*", + "stylus": "*", + "sugarss": "*", + "terser": "^5.16.0", + "tsx": "^4.8.1", + "yaml": "^2.4.2" + }, + "peerDependenciesMeta": { + "@types/node": { + "optional": true + }, + "jiti": { + "optional": true + }, + "less": { + "optional": true + }, + "lightningcss": { + "optional": true + }, + "sass": { + "optional": true + }, + "sass-embedded": { + "optional": true + }, + "stylus": { + "optional": true + }, + "sugarss": { + "optional": true + }, + "terser": { + "optional": true + }, + "tsx": { + "optional": true + }, + "yaml": { + "optional": true + } + } + }, + "node_modules/vite-plugin-full-reload": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/vite-plugin-full-reload/-/vite-plugin-full-reload-1.2.0.tgz", + "integrity": "sha512-kz18NW79x0IHbxRSHm0jttP4zoO9P9gXh+n6UTwlNKnviTTEpOlum6oS9SmecrTtSr+muHEn5TUuC75UovQzcA==", + "dev": true, + "license": "MIT", + "dependencies": { + "picocolors": "^1.0.0", + "picomatch": "^2.3.1" + } + }, + "node_modules/vite-plugin-full-reload/node_modules/picomatch": { + "version": "2.3.1", + "resolved": "https://registry.npmjs.org/picomatch/-/picomatch-2.3.1.tgz", + "integrity": "sha512-JU3teHTNjmE2VCGFzuY8EXzCDVwEqB2a8fsIvwaStHhAWJEeVd1o1QD80CU6+ZdEXXSLbSsuLwJjkCBWqRQUVA==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=8.6" + }, + "funding": { + "url": "https://github.com/sponsors/jonschlinkert" + } + }, + "node_modules/which": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/which/-/which-2.0.2.tgz", + "integrity": "sha512-BLI3Tl1TW3Pvl70l3yq3Y64i+awpwXqsGBYWkkqMtnbXgrMD+yj7rhW0kuEDxzJaYXGjEW5ogapKNMEKNMjibA==", + "dev": true, + "license": "ISC", + "dependencies": { + "isexe": "^2.0.0" + }, + "bin": { + "node-which": "bin/node-which" + }, + "engines": { + "node": ">= 8" + } + }, + "node_modules/wrap-ansi": { + "version": "8.1.0", + "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-8.1.0.tgz", + "integrity": "sha512-si7QWI6zUMq56bESFvagtmzMdGOtoxfR+Sez11Mobfc7tm+VkUckk9bW2UeffTGVUbOksxmSw0AA2gs8g71NCQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "ansi-styles": "^6.1.0", + "string-width": "^5.0.1", + "strip-ansi": "^7.0.1" + }, + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/chalk/wrap-ansi?sponsor=1" + } + }, + "node_modules/wrap-ansi-cjs": { + "name": "wrap-ansi", + "version": "7.0.0", + "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-7.0.0.tgz", + "integrity": "sha512-YVGIj2kamLSTxw6NsZjoBxfSwsn0ycdesmc4p+Q21c5zPuZ1pl+NfxVdxPtdHvmNVOQ6XSYG4AUtyt/Fi7D16Q==", + "dev": true, + "license": "MIT", + "dependencies": { + "ansi-styles": "^4.0.0", + "string-width": "^4.1.0", + "strip-ansi": "^6.0.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/chalk/wrap-ansi?sponsor=1" + } + }, + "node_modules/wrap-ansi-cjs/node_modules/ansi-regex": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-5.0.1.tgz", + "integrity": "sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=8" + } + }, + "node_modules/wrap-ansi-cjs/node_modules/emoji-regex": { + "version": "8.0.0", + "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-8.0.0.tgz", + "integrity": "sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A==", + "dev": true, + "license": "MIT" + }, + "node_modules/wrap-ansi-cjs/node_modules/string-width": { + "version": "4.2.3", + "resolved": "https://registry.npmjs.org/string-width/-/string-width-4.2.3.tgz", + "integrity": "sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g==", + "dev": true, + "license": "MIT", + "dependencies": { + "emoji-regex": "^8.0.0", + "is-fullwidth-code-point": "^3.0.0", + "strip-ansi": "^6.0.1" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/wrap-ansi-cjs/node_modules/strip-ansi": { + "version": "6.0.1", + "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.1.tgz", + "integrity": "sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==", + "dev": true, + "license": "MIT", + "dependencies": { + "ansi-regex": "^5.0.1" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/wrap-ansi/node_modules/ansi-styles": { + "version": "6.2.1", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-6.2.1.tgz", + "integrity": "sha512-bN798gFfQX+viw3R7yrGWRqnrN2oRkEkUjjl4JNn4E8GxxbjtG3FbrEIIY3l8/hrwUwIeCZvi4QuOTP4MErVug==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/chalk/ansi-styles?sponsor=1" + } + }, + "node_modules/xmldoc": { + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/xmldoc/-/xmldoc-1.3.0.tgz", + "integrity": "sha512-y7IRWW6PvEnYQZNZFMRLNJw+p3pezM4nKYPfr15g4OOW9i8VpeydycFuipE2297OvZnh3jSb2pxOt9QpkZUVng==", + "license": "MIT", + "dependencies": { + "sax": "^1.2.4" + } + }, + "node_modules/y18n": { + "version": "5.0.8", + "resolved": "https://registry.npmjs.org/y18n/-/y18n-5.0.8.tgz", + "integrity": "sha512-0pfFzegeDWJHJIAmTLRP2DwHjdF5s7jo9tuztdQxAhINCdvS+3nGINqPd00AphqJR/0LhANUS6/+7SCb98YOfA==", + "dev": true, + "license": "ISC", + "engines": { + "node": ">=10" + } + }, + "node_modules/yaml": { + "version": "2.7.0", + "resolved": "https://registry.npmjs.org/yaml/-/yaml-2.7.0.tgz", + "integrity": "sha512-+hSoy/QHluxmC9kCIJyL/uyFmLmc+e5CFR5Wa+bpIhIj85LVb9ZH2nVnqrHoSvKogwODv0ClqZkmiSSaIH5LTA==", + "dev": true, + "license": "ISC", + "bin": { + "yaml": "bin.mjs" + }, + "engines": { + "node": ">= 14" + } + }, + "node_modules/yargs": { + "version": "17.7.2", + "resolved": "https://registry.npmjs.org/yargs/-/yargs-17.7.2.tgz", + "integrity": "sha512-7dSzzRQ++CKnNI/krKnYRV7JKKPUXMEh61soaHKg9mrWEhzFWhFnxPxGl+69cD1Ou63C13NUPCnmIcrvqCuM6w==", + "dev": true, + "license": "MIT", + "dependencies": { + "cliui": "^8.0.1", + "escalade": "^3.1.1", + "get-caller-file": "^2.0.5", + "require-directory": "^2.1.1", + "string-width": "^4.2.3", + "y18n": "^5.0.5", + "yargs-parser": "^21.1.1" + }, + "engines": { + "node": ">=12" + } + }, + "node_modules/yargs-parser": { + "version": "21.1.1", + "resolved": "https://registry.npmjs.org/yargs-parser/-/yargs-parser-21.1.1.tgz", + "integrity": "sha512-tVpsJW7DdjecAiFpbIB1e3qxIQsE6NoPc5/eTdrbbIC4h0LVsWhnoa3g+m2HclBIujHzsxZ4VJVA+GUuc2/LBw==", + "dev": true, + "license": "ISC", + "engines": { + "node": ">=12" + } + }, + "node_modules/yargs/node_modules/ansi-regex": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-5.0.1.tgz", + "integrity": "sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=8" + } + }, + "node_modules/yargs/node_modules/emoji-regex": { + "version": "8.0.0", + "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-8.0.0.tgz", + "integrity": "sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A==", + "dev": true, + "license": "MIT" + }, + "node_modules/yargs/node_modules/string-width": { + "version": "4.2.3", + "resolved": "https://registry.npmjs.org/string-width/-/string-width-4.2.3.tgz", + "integrity": "sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g==", + "dev": true, + "license": "MIT", + "dependencies": { + "emoji-regex": "^8.0.0", + "is-fullwidth-code-point": "^3.0.0", + "strip-ansi": "^6.0.1" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/yargs/node_modules/strip-ansi": { + "version": "6.0.1", + "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.1.tgz", + "integrity": "sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==", + "dev": true, + "license": "MIT", + "dependencies": { + "ansi-regex": "^5.0.1" + }, + "engines": { + "node": ">=8" + } + } + } +} diff --git a/package.json b/package.json new file mode 100644 index 0000000..acc1ee2 --- /dev/null +++ b/package.json @@ -0,0 +1,42 @@ +{ + "private": true, + "type": "module", + "scripts": { + "build": "vite build", + "dev": "vite" + }, + "devDependencies": { + "@tailwindcss/forms": "^0.5.2", + "alpinejs": "^3.4.2", + "autoprefixer": "^10.4.20", + "axios": "^1.7.4", + "concurrently": "^9.0.1", + "flowbite": "^2.5.2", + "laravel-echo": "^2.0.2", + "laravel-vite-plugin": "^1.2.0", + "postcss": "^8.4.49", + "prettier": "^3.5.2", + "pusher-js": "^8.4.0", + "tailwindcss": "^3.4.15", + "vite": "^6.1.0" + }, + "dependencies": { + "@popperjs/core": "^2.11.8", + "@preline/accordion": "^2.5.2", + "@preline/datatable": "^2.5.2", + "@preline/dropdown": "^2.5.2", + "@preline/layout-splitter": "^2.5.2", + "@preline/stepper": "^2.5.2", + "@preline/tooltip": "^2.5.2", + "datatables.net-buttons": "^3.2.2", + "datatables.net-dt": "^2.2.2", + "gsap": "^3.12.7", + "jquery": "^3.7.1", + "jszip": "^3.10.1", + "lenis": "^1.1.20", + "pdfmake": "^0.2.18", + "preline": "^2.7.0", + "simple-datatables": "^9.2.1", + "swiper": "^11.2.3" + } +} diff --git a/phpunit.xml b/phpunit.xml new file mode 100644 index 0000000..506b9a3 --- /dev/null +++ b/phpunit.xml @@ -0,0 +1,33 @@ + + + + + tests/Unit + + + tests/Feature + + + + + app + + + + + + + + + + + + + + + + diff --git a/postcss.config.js b/postcss.config.js new file mode 100644 index 0000000..49c0612 --- /dev/null +++ b/postcss.config.js @@ -0,0 +1,6 @@ +export default { + plugins: { + tailwindcss: {}, + autoprefixer: {}, + }, +}; diff --git a/public/.htaccess b/public/.htaccess new file mode 100644 index 0000000..3aec5e2 --- /dev/null +++ b/public/.htaccess @@ -0,0 +1,21 @@ + + + Options -MultiViews -Indexes + + + RewriteEngine On + + # Handle Authorization Header + RewriteCond %{HTTP:Authorization} . + RewriteRule .* - [E=HTTP_AUTHORIZATION:%{HTTP:Authorization}] + + # Redirect Trailing Slashes If Not A Folder... + RewriteCond %{REQUEST_FILENAME} !-d + RewriteCond %{REQUEST_URI} (.+)/$ + RewriteRule ^ %1 [L,R=301] + + # Send Requests To Front Controller... + RewriteCond %{REQUEST_FILENAME} !-d + RewriteCond %{REQUEST_FILENAME} !-f + RewriteRule ^ index.php [L] + diff --git a/public/favicon.ico b/public/favicon.ico new file mode 100644 index 0000000..e69de29 diff --git a/public/index.php b/public/index.php new file mode 100644 index 0000000..947d989 --- /dev/null +++ b/public/index.php @@ -0,0 +1,17 @@ +handleRequest(Request::capture()); diff --git a/public/robots.txt b/public/robots.txt new file mode 100644 index 0000000..eb05362 --- /dev/null +++ b/public/robots.txt @@ -0,0 +1,2 @@ +User-agent: * +Disallow: diff --git a/public/static/image/fyi.png b/public/static/image/fyi.png new file mode 100644 index 0000000000000000000000000000000000000000..06986782b5158e771f53330482ad553575d94b9b GIT binary patch literal 192386 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 z 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 Gk^cjQTQnO0 literal 0 HcmV?d00001 diff --git a/public/static/image/hero-section.png b/public/static/image/hero-section.png new file mode 100644 index 0000000000000000000000000000000000000000..307180c2b6c8ff2350ae803bd7236da1b2b5119d GIT binary patch literal 133867 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 +@endif diff --git a/resources/views/components/auth-session-status.blade.php b/resources/views/components/auth-session-status.blade.php new file mode 100644 index 0000000..4b8bbb3 --- /dev/null +++ b/resources/views/components/auth-session-status.blade.php @@ -0,0 +1,23 @@ +@props(['status']) + +@if ($status) +
merge(['class' => 'flex items-center p-4 mb-4 text-green-800 rounded-lg bg-green-50 dark:bg-gray-800 dark:text-green-400']) }} + role="alert" id="alert-status"> + +
{{ $status }}
+ +
+@endif diff --git a/resources/views/components/danger-button.blade.php b/resources/views/components/danger-button.blade.php new file mode 100644 index 0000000..d7417b2 --- /dev/null +++ b/resources/views/components/danger-button.blade.php @@ -0,0 +1,3 @@ + diff --git a/resources/views/components/dropdown-link.blade.php b/resources/views/components/dropdown-link.blade.php new file mode 100644 index 0000000..6d5279d --- /dev/null +++ b/resources/views/components/dropdown-link.blade.php @@ -0,0 +1 @@ +
merge(['class' => 'block w-full px-4 py-2 text-start text-sm leading-5 text-gray-700 dark:text-gray-300 hover:bg-gray-100 dark:hover:bg-gray-800 focus:outline-none focus:bg-gray-100 dark:focus:bg-gray-800 transition duration-150 ease-in-out']) }}>{{ $slot }} diff --git a/resources/views/components/dropdown.blade.php b/resources/views/components/dropdown.blade.php new file mode 100644 index 0000000..e4106a4 --- /dev/null +++ b/resources/views/components/dropdown.blade.php @@ -0,0 +1,35 @@ +@props(['align' => 'right', 'width' => '48', 'contentClasses' => 'py-1 bg-white dark:bg-gray-700']) + +@php +$alignmentClasses = match ($align) { + 'left' => 'ltr:origin-top-left rtl:origin-top-right start-0', + 'top' => 'origin-top', + default => 'ltr:origin-top-right rtl:origin-top-left end-0', +}; + +$width = match ($width) { + '48' => 'w-48', + default => $width, +}; +@endphp + +
+
+ {{ $trigger }} +
+ + +
diff --git a/resources/views/components/input-error.blade.php b/resources/views/components/input-error.blade.php new file mode 100644 index 0000000..ad95f6b --- /dev/null +++ b/resources/views/components/input-error.blade.php @@ -0,0 +1,9 @@ +@props(['messages']) + +@if ($messages) +
    merge(['class' => 'text-sm text-red-600 dark:text-red-400 space-y-1']) }}> + @foreach ((array) $messages as $message) +
  • {{ $message }}
  • + @endforeach +
+@endif diff --git a/resources/views/components/input-label.blade.php b/resources/views/components/input-label.blade.php new file mode 100644 index 0000000..e93b059 --- /dev/null +++ b/resources/views/components/input-label.blade.php @@ -0,0 +1,5 @@ +@props(['value']) + + diff --git a/resources/views/components/modal.blade.php b/resources/views/components/modal.blade.php new file mode 100644 index 0000000..384662a --- /dev/null +++ b/resources/views/components/modal.blade.php @@ -0,0 +1,78 @@ +@props([ + 'name', + 'show' => false, + 'maxWidth' => '2xl' +]) + +@php +$maxWidth = [ + 'sm' => 'sm:max-w-sm', + 'md' => 'sm:max-w-md', + 'lg' => 'sm:max-w-lg', + 'xl' => 'sm:max-w-xl', + '2xl' => 'sm:max-w-2xl', +][$maxWidth]; +@endphp + +
+
+
+
+ +
+ {{ $slot }} +
+
diff --git a/resources/views/components/nav-item-dropdown.blade.php b/resources/views/components/nav-item-dropdown.blade.php new file mode 100644 index 0000000..fc4ceb3 --- /dev/null +++ b/resources/views/components/nav-item-dropdown.blade.php @@ -0,0 +1,33 @@ +@props(['hrefSystem', 'hrefAccount', 'title', 'icon', 'active' => false]) + +
  • + + + +
  • diff --git a/resources/views/components/nav-item.blade.php b/resources/views/components/nav-item.blade.php new file mode 100644 index 0000000..69dd7dc --- /dev/null +++ b/resources/views/components/nav-item.blade.php @@ -0,0 +1,9 @@ +@props(['href', 'title', 'icon', 'active' => false]) + +
  • + + {!! $icon !!} + {{ $title }} + +
  • diff --git a/resources/views/components/nav-link.blade.php b/resources/views/components/nav-link.blade.php new file mode 100644 index 0000000..37bad55 --- /dev/null +++ b/resources/views/components/nav-link.blade.php @@ -0,0 +1,11 @@ +@props(['active']) + +@php +$classes = ($active ?? false) + ? 'inline-flex items-center px-1 pt-1 border-b-2 border-indigo-400 dark:border-indigo-600 text-sm font-medium leading-5 text-gray-900 dark:text-gray-100 focus:outline-none focus:border-indigo-700 transition duration-150 ease-in-out' + : 'inline-flex items-center px-1 pt-1 border-b-2 border-transparent text-sm font-medium leading-5 text-gray-500 dark:text-gray-400 hover:text-gray-700 dark:hover:text-gray-300 hover:border-gray-300 dark:hover:border-gray-700 focus:outline-none focus:text-gray-700 dark:focus:text-gray-300 focus:border-gray-300 dark:focus:border-gray-700 transition duration-150 ease-in-out'; +@endphp + +merge(['class' => $classes]) }}> + {{ $slot }} + diff --git a/resources/views/components/primary-button.blade.php b/resources/views/components/primary-button.blade.php new file mode 100644 index 0000000..98aaad7 --- /dev/null +++ b/resources/views/components/primary-button.blade.php @@ -0,0 +1,4 @@ + diff --git a/resources/views/components/responsive-nav-link.blade.php b/resources/views/components/responsive-nav-link.blade.php new file mode 100644 index 0000000..98b55d1 --- /dev/null +++ b/resources/views/components/responsive-nav-link.blade.php @@ -0,0 +1,11 @@ +@props(['active']) + +@php +$classes = ($active ?? false) + ? 'block w-full ps-3 pe-4 py-2 border-l-4 border-indigo-400 dark:border-indigo-600 text-start text-base font-medium text-indigo-700 dark:text-indigo-300 bg-indigo-50 dark:bg-indigo-900/50 focus:outline-none focus:text-indigo-800 dark:focus:text-indigo-200 focus:bg-indigo-100 dark:focus:bg-indigo-900 focus:border-indigo-700 dark:focus:border-indigo-300 transition duration-150 ease-in-out' + : 'block w-full ps-3 pe-4 py-2 border-l-4 border-transparent text-start text-base font-medium text-gray-600 dark:text-gray-400 hover:text-gray-800 dark:hover:text-gray-200 hover:bg-gray-50 dark:hover:bg-gray-700 hover:border-gray-300 dark:hover:border-gray-600 focus:outline-none focus:text-gray-800 dark:focus:text-gray-200 focus:bg-gray-50 dark:focus:bg-gray-700 focus:border-gray-300 dark:focus:border-gray-600 transition duration-150 ease-in-out'; +@endphp + +merge(['class' => $classes]) }}> + {{ $slot }} + diff --git a/resources/views/components/secondary-button.blade.php b/resources/views/components/secondary-button.blade.php new file mode 100644 index 0000000..33e4538 --- /dev/null +++ b/resources/views/components/secondary-button.blade.php @@ -0,0 +1,4 @@ + diff --git a/resources/views/components/text-input.blade.php b/resources/views/components/text-input.blade.php new file mode 100644 index 0000000..7fa444e --- /dev/null +++ b/resources/views/components/text-input.blade.php @@ -0,0 +1,4 @@ +@props(['disabled' => false]) + +merge(['class' => 'border-gray-300 dark:border-gray-700 dark:bg-gray-900 dark:text-gray-300 focus:border-primary dark:focus:border-primary focus:ring-primary dark:focus:ring-primary rounded-md shadow-sm']) }}> diff --git a/resources/views/errors/401.blade.php b/resources/views/errors/401.blade.php new file mode 100644 index 0000000..5c586db --- /dev/null +++ b/resources/views/errors/401.blade.php @@ -0,0 +1,5 @@ +@extends('errors::minimal') + +@section('title', __('Unauthorized')) +@section('code', '401') +@section('message', __('Unauthorized')) diff --git a/resources/views/errors/402.blade.php b/resources/views/errors/402.blade.php new file mode 100644 index 0000000..3bc23ef --- /dev/null +++ b/resources/views/errors/402.blade.php @@ -0,0 +1,5 @@ +@extends('errors::minimal') + +@section('title', __('Payment Required')) +@section('code', '402') +@section('message', __('Payment Required')) diff --git a/resources/views/errors/403.blade.php b/resources/views/errors/403.blade.php new file mode 100644 index 0000000..a5506f0 --- /dev/null +++ b/resources/views/errors/403.blade.php @@ -0,0 +1,5 @@ +@extends('errors::minimal') + +@section('title', __('Forbidden')) +@section('code', '403') +@section('message', __($exception->getMessage() ?: 'Forbidden')) diff --git a/resources/views/errors/404.blade.php b/resources/views/errors/404.blade.php new file mode 100644 index 0000000..34e133f --- /dev/null +++ b/resources/views/errors/404.blade.php @@ -0,0 +1,35 @@ +@extends('layouts.home') + +@section('content') +
    +
    + + +
    +
    +

    404

    +

    Oops, something went wrong.

    +

    Sorry, we couldn't find your page.

    + +
    +
    +
    +
    +@endsection diff --git a/resources/views/errors/419.blade.php b/resources/views/errors/419.blade.php new file mode 100644 index 0000000..b8a2ea7 --- /dev/null +++ b/resources/views/errors/419.blade.php @@ -0,0 +1,35 @@ +@extends('layouts.home') + +@section('content') +
    +
    + + +
    +
    +

    419

    +

    Oops, something went wrong

    +

    Please, Refresh this page again.

    + +
    +
    +
    +
    +@endsection diff --git a/resources/views/errors/429.blade.php b/resources/views/errors/429.blade.php new file mode 100644 index 0000000..f01b07b --- /dev/null +++ b/resources/views/errors/429.blade.php @@ -0,0 +1,5 @@ +@extends('errors::minimal') + +@section('title', __('Too Many Requests')) +@section('code', '429') +@section('message', __('Too Many Requests')) diff --git a/resources/views/errors/500.blade.php b/resources/views/errors/500.blade.php new file mode 100644 index 0000000..d9e95d9 --- /dev/null +++ b/resources/views/errors/500.blade.php @@ -0,0 +1,5 @@ +@extends('errors::minimal') + +@section('title', __('Server Error')) +@section('code', '500') +@section('message', __('Server Error')) diff --git a/resources/views/errors/503.blade.php b/resources/views/errors/503.blade.php new file mode 100644 index 0000000..c5a9dde --- /dev/null +++ b/resources/views/errors/503.blade.php @@ -0,0 +1,5 @@ +@extends('errors::minimal') + +@section('title', __('Service Unavailable')) +@section('code', '503') +@section('message', __('Service Unavailable')) diff --git a/resources/views/errors/layout.blade.php b/resources/views/errors/layout.blade.php new file mode 100644 index 0000000..019c2cd --- /dev/null +++ b/resources/views/errors/layout.blade.php @@ -0,0 +1,53 @@ + + + + + + + @yield('title') + + + + + +
    +
    +
    + @yield('message') +
    +
    +
    + + diff --git a/resources/views/errors/minimal.blade.php b/resources/views/errors/minimal.blade.php new file mode 100644 index 0000000..db69f25 --- /dev/null +++ b/resources/views/errors/minimal.blade.php @@ -0,0 +1,34 @@ + + + + + + + @yield('title') + + + + + + +
    +
    +
    +
    + @yield('code') +
    + +
    + @yield('message') +
    +
    +
    +
    + + diff --git a/resources/views/layouts/app.blade.php b/resources/views/layouts/app.blade.php new file mode 100644 index 0000000..0dad80c --- /dev/null +++ b/resources/views/layouts/app.blade.php @@ -0,0 +1,120 @@ + + + + + + + + + {{ config('app.name', 'Laravel') }} + + + + + + + + + @vite(['resources/css/app.css', 'resources/js/app.js']) + {{-- jquery --}} + + + + + {{--
    --}} + + {{-- + +
    + + +
    +
    +
    + +
    +
    +
    +
    --}} + {{--
    --}} + + @include('layouts.navigation') + + +
    + +
    +
    + + + + + +
      +
    1. + + Home + + + + +
    2. + @yield('mobile-breadcrumb') +
    + +
    +
    + +
    + + + @include('layouts.sidebar') + + + +
    +
    + {{ $slot }} +
    +
    + + + + {{-- flowbite --}} + + + + + + + + {{-- + + + + + + --}} + + + + diff --git a/resources/views/layouts/guest.blade.php b/resources/views/layouts/guest.blade.php new file mode 100644 index 0000000..eb9f643 --- /dev/null +++ b/resources/views/layouts/guest.blade.php @@ -0,0 +1,38 @@ + + + + + + + + + {{ config('app.name', 'Laravel') }} + + + + + + + + + @vite(['resources/css/app.css', 'resources/js/app.js']) + + + +
    + +
    +
    + + + +
    + {{ $slot }} +
    +
    + + + diff --git a/resources/views/layouts/home.blade.php b/resources/views/layouts/home.blade.php new file mode 100644 index 0000000..fd229a2 --- /dev/null +++ b/resources/views/layouts/home.blade.php @@ -0,0 +1,18 @@ + + + + + + @include('partials.metadata') + @include('partials.styles') + + + + + + @include('partials.content') + @include('partials.scripts') + + + + diff --git a/resources/views/layouts/navigation.blade.php b/resources/views/layouts/navigation.blade.php new file mode 100644 index 0000000..1b80535 --- /dev/null +++ b/resources/views/layouts/navigation.blade.php @@ -0,0 +1,163 @@ +{{-- --}} + +
    + +
    + diff --git a/resources/views/layouts/sidebar.blade.php b/resources/views/layouts/sidebar.blade.php new file mode 100644 index 0000000..2137cbc --- /dev/null +++ b/resources/views/layouts/sidebar.blade.php @@ -0,0 +1,330 @@ +{{-- --}} + + diff --git a/resources/views/pages/alternatif/create.blade.php b/resources/views/pages/alternatif/create.blade.php new file mode 100644 index 0000000..95d2808 --- /dev/null +++ b/resources/views/pages/alternatif/create.blade.php @@ -0,0 +1,145 @@ +@section('Breadcrumb') +
    +
    + {{ __('Data Alternatif') }} +
    +
      +
    1. + + + Home + + + + Data Alternatif + + +
    2. +
    3. + Tambah Data Alternatif +
    4. +
    +
    +@endsection + +@section('mobile-breadcrumb') +
  • + + Alternatif + + + + +
  • +
  • + Tambah Data +
  • +@endsection + + + +
    + +
    +
    +

    + {{ __('Tambah Data Alternatif') }} +

    +
    +
    + +
    + @csrf + + + @if ($errors->any()) + + @endif + +
    + +
    + +
    + + +
    +
    + +
    +
    + + +
    + +
    + + +
    + +
    + + +
    + + +
    + + Batal + + +
    +
    + +
    +
    diff --git a/resources/views/pages/alternatif/edit.blade.php b/resources/views/pages/alternatif/edit.blade.php new file mode 100644 index 0000000..7574677 --- /dev/null +++ b/resources/views/pages/alternatif/edit.blade.php @@ -0,0 +1,147 @@ +@section('Breadcrumb') +
    +
    + {{ __('Data Alternatif') }} +
    +
      +
    1. + + + Home + + + + Data Alternatif + + +
    2. +
    3. + Edit Data Alternatif +
    4. +
    +
    +@endsection + +@section('mobile-breadcrumb') +
  • + + Alternatif + + + + +
  • +
  • + Tambah Data +
  • +@endsection + + + +
    + +
    +
    +

    + {{ __('Edit Data Alternatif') }} +

    +
    +
    + +
    + @csrf + @method('PUT') + + + @if ($errors->any()) + + @endif + +
    + +
    + +
    + + +
    +
    + +
    +
    + + +
    + +
    + + +
    + +
    + + +
    + + +
    + + Batal + + +
    +
    + +
    +
    diff --git a/resources/views/pages/alternatif/index.blade.php b/resources/views/pages/alternatif/index.blade.php new file mode 100644 index 0000000..7cad9c5 --- /dev/null +++ b/resources/views/pages/alternatif/index.blade.php @@ -0,0 +1,434 @@ +@role('admin') + @section('Breadcrumb') +
    +
    + {{ __('Data Alternatif') }} +
    +
      +
    1. + + + Home + + +
    2. +
    3. + Data Alternatif +
    4. +
    +
    + @endsection + + @section('mobile-breadcrumb') +
  • + Alternatif +
  • + @endsection +@endrole + +@role('mahasiswa') + @section('Breadcrumb') +
    +
    + {{ __('Data Dosen') }} +
    +
      +
    1. + + + Home + + +
    2. +
    3. + Data Dosen +
    4. +
    +
    + @endsection + + @section('mobile-breadcrumb') +
  • + Dosen +
  • + @endsection +@endrole + + + +
    + +
    +
    + @role('admin') +

    + {{ __('Data Alternatif') }} +

    + @endrole + @role('mahasiswa') +

    + {{ __('Daftar Dosen') }} +

    + @endrole + + @role('admin') + + {{ __('Tambah Data') }} + + @endrole +
    +
    + + {{-- + + + + + + + + + + @foreach ($alternatif as $item) + + + + + + + @endforeach + +
    + + No + + + + + NIP + + + + @role('admin') + + Nama Alternatif + + + @endrole + @role('mahasiswa') + + Nama Dosen + + + @endrole + + + Tindakan + + +
    {{ $loop->iteration }}{{ $item->nip }}{{ $item->name }} + + + + + + +
    --}} +
    +
    +
    +
    +
    +
    + + +
    + + + + +
    +
    +
    + +
    + + + + + + + + + + + + + + @foreach ($alternatif as $item) + + + + + + + @endforeach + +
    +
    + No + + + + +
    +
    +
    + NIP + + + + +
    +
    +
    + Nama + + + + +
    +
    + Action
    + {{ $loop->iteration }} + {{ $item->nip }} + {{ $item->name }} +
    + + + +
    +
    +
    + + +
    +
    +
    +
    + +
    +
    diff --git a/resources/views/pages/aspek/create.blade.php b/resources/views/pages/aspek/create.blade.php new file mode 100644 index 0000000..921d4a9 --- /dev/null +++ b/resources/views/pages/aspek/create.blade.php @@ -0,0 +1,162 @@ +@section('Breadcrumb') +
    +
    + {{ __('Data Aspek') }} +
    +
      +
    1. + + + Home + + + + Data Aspek + + +
    2. +
    3. + Tambah Data Aspek +
    4. +
    +
    +@endsection + +@section('mobile-breadcrumb') +
  • + + Aspek + + + + +
  • +
  • + Tambah Data +
  • +@endsection + + + +
    + +
    +
    +

    + {{ __('Tambah Data Aspek') }} +

    +
    +
    + +
    + @csrf + + + @if ($errors->any()) + + @endif + +
    + +
    + +
    + + +
    +
    + +
    +
    + + +
    + +
    + + +
    + +
    + + +
    +
    + +
    +
    + + +
    + +
    + + +
    + + +
    + + Batal + + +
    +
    + +
    +
    diff --git a/resources/views/pages/aspek/edit.blade.php b/resources/views/pages/aspek/edit.blade.php new file mode 100644 index 0000000..99f0210 --- /dev/null +++ b/resources/views/pages/aspek/edit.blade.php @@ -0,0 +1,165 @@ +@section('Breadcrumb') +
    +
    + {{ __('Data Aspek') }} +
    +
      +
    1. + + + Home + + + + Data Aspek + + +
    2. +
    3. + Edit Data Aspek +
    4. +
    +
    +@endsection + +@section('mobile-breadcrumb') +
  • + + Aspek + + + + +
  • +
  • + Edit Data {{ $aspek->aspek_name }} +
  • +@endsection + + + +
    + +
    +
    +

    + {{ __('Edit Data Aspek') }} +

    +
    +
    + +
    + @csrf + @method('PUT') + + + @if ($errors->any()) + + @endif + +
    + +
    + +
    + + +
    +
    + +
    +
    + + +
    + +
    + + +
    + +
    + + +
    +
    + +
    +
    + + +
    + +
    + + +
    + + +
    + + Batal + + +
    +
    + +
    +
    diff --git a/resources/views/pages/aspek/index.blade.php b/resources/views/pages/aspek/index.blade.php new file mode 100644 index 0000000..9f0c977 --- /dev/null +++ b/resources/views/pages/aspek/index.blade.php @@ -0,0 +1,312 @@ +@section('Breadcrumb') +
    +
    + {{ __('Data Aspek') }} +
    +
      +
    1. + + + Home + + +
    2. +
    3. + Data Aspek +
    4. +
    +
    +@endsection + +@section('mobile-breadcrumb') +
  • + Aspek +
  • +@endsection + + + +
    + +
    +
    +

    + {{ __('Data Aspek') }} +

    + + {{ __('Tambah Data') }} + +
    +
    + +
    +
    +
    +
    +
    +
    + + +
    + + + + +
    +
    +
    + +
    + + + + + + + + + + + + + + + + + + @foreach ($aspek as $item) + + + + + + + + + @endforeach + +
    +
    + No + + + + +
    +
    +
    + Kode + + + + +
    +
    +
    + Aspek + + + + +
    +
    +
    + Persentase + + + + +
    +
    +
    + Keterangan + + + + +
    +
    + Action
    + {{ $loop->iteration }} + {{ $item->kode_aspek }} + {{ $item->aspek_name }} + {{ $item->persentase }}% + {{ $item->keterangan }} +
    + + + +
    +
    +
    + + +
    +
    +
    +
    + +
    + +
    diff --git a/resources/views/pages/aspek/show.blade.php b/resources/views/pages/aspek/show.blade.php new file mode 100644 index 0000000..9ee8f2e --- /dev/null +++ b/resources/views/pages/aspek/show.blade.php @@ -0,0 +1,133 @@ +@section('Breadcrumb') +
    +
    + {{ __('Data Aspek') }} +
    +
      +
    1. + + + Home + + + + Data Aspek + + +
    2. +
    3. + Lihat Detail Data Aspek +
    4. +
    +
    +@endsection + +@section('mobile-breadcrumb') +
  • + + Aspek + + + + +
  • +
  • + Lihat Detail Data {{ $aspek->aspek_name }} +
  • +@endsection + + + +
    + +
    +
    +

    + {{ __('Lihat Detail Data Aspek') }} +

    +
    +
    + + +
    + +
    + +
    + + +
    +
    + +
    +
    + + +
    + +
    + + +
    + +
    + + +
    +
    + +
    +
    + + +
    + +
    + + +
    + + + + +
    +
    diff --git a/resources/views/pages/auth/confirm-password.blade.php b/resources/views/pages/auth/confirm-password.blade.php new file mode 100644 index 0000000..3cbbe08 --- /dev/null +++ b/resources/views/pages/auth/confirm-password.blade.php @@ -0,0 +1,27 @@ + +
    + {{ __('This is a secure area of the application. Please confirm your password before continuing.') }} +
    + +
    + @csrf + + +
    + + + + + +
    + +
    + + {{ __('Confirm') }} + +
    +
    +
    diff --git a/resources/views/pages/auth/forgot-password.blade.php b/resources/views/pages/auth/forgot-password.blade.php new file mode 100644 index 0000000..b38b742 --- /dev/null +++ b/resources/views/pages/auth/forgot-password.blade.php @@ -0,0 +1,30 @@ + + +
    +
    +

    {{ __('Forgot Password') }}

    +

    {{ __('Enter your email below to reset your account password') }}

    +
    +
    + + + + +
    + @csrf + + +
    + + + +
    + +
    + + {{ __('Send Link') }} + +
    +
    +
    diff --git a/resources/views/pages/auth/login.blade.php b/resources/views/pages/auth/login.blade.php new file mode 100644 index 0000000..4e69a7f --- /dev/null +++ b/resources/views/pages/auth/login.blade.php @@ -0,0 +1,72 @@ + + +
    +
    +

    {{ __('Login') }}

    +

    {{ __('Enter your email below to login to your account') }}

    +
    +
    + + + @if (session('error')) + + @else + + @endif + +
    + @csrf + + +
    + + + +
    + + +
    + + + + + +
    + +
    + {{-- @if (Route::has('password.request')) + + {{ __('Forgot Password?') }} + + @endif --}} +
    + + + +
    +

    {{ __('Dont Have Account?') }}

    + + {{ __('Register') }} + +
    +
    +
    diff --git a/resources/views/pages/auth/register.blade.php b/resources/views/pages/auth/register.blade.php new file mode 100644 index 0000000..7399a54 --- /dev/null +++ b/resources/views/pages/auth/register.blade.php @@ -0,0 +1,73 @@ + + +
    +
    +

    {{ __('Create Account') }}

    +

    {{ __('Enter your account below to register your new account') }}

    +
    +
    + +
    + @csrf + + +
    + + + +
    + + +
    + + + +
    + + +
    + + + + + +
    + + +
    + + + + + +
    + +
    + + {{ __('Register') }} + + + {{-- + + + + + {{ __('Register with Google') }} + --}} +
    + +
    +

    {{ __('Already Have Account?') }}

    + + {{ __('Login') }} + +
    +
    +
    diff --git a/resources/views/pages/auth/reset-password.blade.php b/resources/views/pages/auth/reset-password.blade.php new file mode 100644 index 0000000..a6494cc --- /dev/null +++ b/resources/views/pages/auth/reset-password.blade.php @@ -0,0 +1,39 @@ + +
    + @csrf + + + + + +
    + + + +
    + + +
    + + + +
    + + +
    + + + + + +
    + +
    + + {{ __('Reset Password') }} + +
    +
    +
    diff --git a/resources/views/pages/auth/verify-email.blade.php b/resources/views/pages/auth/verify-email.blade.php new file mode 100644 index 0000000..4e4222f --- /dev/null +++ b/resources/views/pages/auth/verify-email.blade.php @@ -0,0 +1,31 @@ + +
    + {{ __('Thanks for signing up! Before getting started, could you verify your email address by clicking on the link we just emailed to you? If you didn\'t receive the email, we will gladly send you another.') }} +
    + + @if (session('status') == 'verification-link-sent') +
    + {{ __('A new verification link has been sent to the email address you provided during registration.') }} +
    + @endif + +
    +
    + @csrf + +
    + + {{ __('Resend Verification Email') }} + +
    +
    + +
    + @csrf + + +
    +
    +
    diff --git a/resources/views/pages/dashboard/index.blade.php b/resources/views/pages/dashboard/index.blade.php new file mode 100644 index 0000000..fb38222 --- /dev/null +++ b/resources/views/pages/dashboard/index.blade.php @@ -0,0 +1,253 @@ +@section('mobile-breadcrumb') +
  • + Hello, {{ Auth::user()->name }} +
  • +@endsection + + + +
    + +
    +
    +
    + + + + +
    + +
    +
    +

    + Dosen +

    +
    +
    +

    + {{ $jumlah_alternatif }} +

    + + + + + + + 12.5% + + +
    +
    +
    +
    + +
    +
    +
    + + + + +
    + +
    +
    +

    + Mahasiswa +

    +
    +
    +

    + {{ $jumlah_mahasiswa }} +

    + + + + + + + + 12.5% + + +
    +
    +
    +
    + +
    +
    +
    + + + + +
    + +
    +
    +

    + Pengajuan Judul +

    +
    +
    +

    + {{ $jumlah_pengajuan }} +

    + + + + + + + 12.5% + + +
    +
    +
    +
    + +
    +
    +
    + + + + +
    + +
    +
    +

    + Pengunjung Website +

    +
    +
    +

    + 72,540 +

    + + + + + + + 12.5% + + +
    +
    +
    +
    + +
    +
    +
    +
    +
    +

    Profile Matching

    +
    +
    +

    Profile matching merupakan proses membandingkan antara kompetensi + + individu ke dalam kompetensi jabatan sehingga dapat diketahui perbedaan + + kompetensinya (disebut juga GAP), semakin kecil GAP yang dihasilkan maka + + bobot nilainya semakin besar. Profile Matching menganggap bahwa terdapat + + tingkat predictor variables ideal yang harus dimiliki seseorang. Dalam hal ini + + tidak berarti tingkat minimal yang harus dipenuhi atau dilewati. Setelah + + diperoleh GAP pada masing-masing individu, setiap profil individu diberi + + bobot nilai sesuai dengan ketentuan. (Al Muhdi, 2024)

    +
    +
    +
    +
    +
    + +
    +

    Dosen Pembimbing

    +
    + + +
    + @php + $maxItems = 3; + @endphp + + @foreach ($alternatif->take($maxItems) as $item) + + Polije Logo + +
    + + {{ $item->name }} + + + {{ $item->nip }} + +
    +
    + @endforeach + + + @if ($alternatif->count() > $maxItems) + + View All + + @endif +
    +
    + +
    + +
    + +
    + +{{-- @section('scripts') + + +@endsection --}} diff --git a/resources/views/pages/home/index.blade.php b/resources/views/pages/home/index.blade.php new file mode 100644 index 0000000..908482b --- /dev/null +++ b/resources/views/pages/home/index.blade.php @@ -0,0 +1,711 @@ +@extends('layouts.home') + +@section('Home', 'title') + +@section('content') + + +
    +
    +
    +

    + Sistem Pendukung Keputusan
    + Pemilihan Dosen Pembimbing Skripsi +

    +

    + Sistem ini membantu mahasiswa D4-Teknik Informatika memilih dosen pembimbing skripsi dengan menggunakan + metode Profile Matching. +

    + +
    +
    + Mockup +
    +
    +
    + + + +
    +
    +
    +

    Rumusan Masalah

    +

    Rumusan masalah dari penulisan laporan + ini + adalah sebagai berikut

    +
    + + +
    +
    + + + + + + + + + +
    +

    Implementasi Metode

    +

    Bagaimana mengimplementasikan metode + Profile + Matching untuk sistem pendukung keputusan pemilihan dosen pembimbing skripsi?

    +
    + + +
    +
    + + + + +
    +

    Rancang Bangun Sistem

    +

    Bagaimana merancang dan membangun sistem + pendukung keputusan pemilihan dosen pembimbing skripsi?

    +
    + + +
    +
    + + + + + + + + +
    +

    Evaluasi Sistem

    +

    Bagaimana mengevaluasi sistem pendukung + keputusan dalam pemilihan dosen pembimbing skripsi menggunakan Profile Matching?

    +
    + +
    +
    +
    + +
    +
    +
    +
    +

    + Tujuan Penelitian +

    +

    + Penelitian ini bertujuan untuk mengembangkan sistem pendukung keputusan dalam pemilihan + dosen + pembimbing skripsi dengan metode Profile Matching. +

    +
    + + +
    + +
    + + + + + + + + +
    +

    + Kesesuaian Profile Matching dalam Pemilihan Dosen +

    +

    + Mengetahui tingkat kesesuaian metode Profile Matching dalam pemilihan dosen + pembimbing + skripsi +

    +
    +
    + + + +
    + + + + + + + + + + + + + + + + + +
    +

    + Hasil Sistem +

    +

    + Menghasilkan sistem pedukung keputusan pemilihan dosen pembimbing skripsi. +

    +
    +
    + + + +
    + + + + + + + + + + + + + + +
    +

    + Hasil Pengujian Sistem Profile Matching +

    +

    + Mengetahui hasil dari pengujian terhadap sistem pendukung keputusan menggunakan + metode + Profile Matching dalam pemilihan dosen pembimbing skripsi. +

    +
    +
    + +
    + +
    +
    +
    + +
    +
    +
    + +
    +
    +

    + Manfaat Penelitian +

    +

    Manfaat dari penelitian ini + adalah sebagai berikut

    + + + + +
    + + +
    +
    + +
    +
    + Features Image +
    + + + + +
    + + + + + +
    +
    + +
    + + + +
    +
    +
    +
    + +
    +
    +
    + +
    +
    + +
    +
    +
    +

    + Metode
    Profile + Matching

    + + +
    +

    + "Profile Matching merupakan proses membandingkan antara kompetensi individu ke dalam + kompetensi jabatan sehingga dapat diketahui perbedaan kompetensinya (disebut juga + GAP), + semakin kecil GAP yang dihasilkan maka bobot nilainya semakin besar. (Muhdi Al + Miftahurrahman, 2024)" +

    +
    + +

    + + Pelajari lebih lanjut + + + + +

    +
    +
    + + +
    + +
    +
    + +
    +

    + Proses perhitungan pada penggunaan metode Profile Matching didahului memberikan + value pada setiap variabel kriteria. + Berikut data yang telah ditentukan.
    + a. Kuota Bimbingan
    + b. Kepakaran atau Bidang Keahlian
    + c. Riset Penelitian
    + +

    +
    +
    + +
    + + +
    + +
    + + +
    + +
    + + +
    + +
    + + +
    + +
    + + +
    +
    + +
    + +
    + +
    +
    + +
    +
    +

    Pendapat Mahasiswa

    +

    Berikut pendapat mahasiswa + berdasarkan hasil pengisian kuisioner

    + +
    +
    + +
    + + +
    +
    +
    +
    + + + +
    +
    + + + +
    +
    +
    +
    +
    +
    +
    + +@endsection + +@section('scripts') + +@endsection diff --git a/resources/views/pages/home/kesimpulan.blade.php b/resources/views/pages/home/kesimpulan.blade.php new file mode 100644 index 0000000..34e133f --- /dev/null +++ b/resources/views/pages/home/kesimpulan.blade.php @@ -0,0 +1,35 @@ +@extends('layouts.home') + +@section('content') +
    +
    + + +
    +
    +

    404

    +

    Oops, something went wrong.

    +

    Sorry, we couldn't find your page.

    + +
    +
    +
    +
    +@endsection diff --git a/resources/views/pages/home/metode.blade.php b/resources/views/pages/home/metode.blade.php new file mode 100644 index 0000000..acba3d5 --- /dev/null +++ b/resources/views/pages/home/metode.blade.php @@ -0,0 +1,289 @@ +@extends('layouts.home') + +@section('content') +
    +
    + + + + +
    +
    +
    +

    + Sistem Pendukung Keputusan +

    + + +
    +

    + Metode Profile Matching +

    +
    + + +
    +

    Profile Matching adalah metode yang membandingkan kompetensi individu dengan standar penilaian untuk mengidentifikasi selisih (GAP). Semakin kecil GAP, semakin tinggi bobot nilai yang diperoleh. Metode ini mengasumsikan adanya tingkat kompetensi ideal yang tidak selalu berarti batas minimum. Setelah GAP dihitung, setiap individu diberi bobot nilai sesuai ketentuan.

    +
    + +
    +
    +
    +
    + +
    +
    + +
    +
    +
    +

    + Metode
    Profile + Matching

    + + +
    +

    + "Profile Matching merupakan proses membandingkan antara kompetensi individu ke dalam + kompetensi jabatan sehingga dapat diketahui perbedaan kompetensinya (disebut juga + GAP), + semakin kecil GAP yang dihasilkan maka bobot nilainya semakin besar. (Muhdi Al + Miftahurrahman, 2024)" +

    +
    + +

    + + Pelajari lebih lanjut + + + + +

    +
    +
    + + +
    + +
    +
    + +
    +

    + Proses perhitungan pada penggunaan metode Profile Matching didahului memberikan + value pada setiap variabel kriteria. + Berikut data yang telah ditentukan.
    + a. Kuota Bimbingan
    + b. Kepakaran atau Bidang Keahlian
    + c. Riset Penelitian
    + +

    +
    +
    + +
    + + +
    + +
    + + +
    + +
    + + +
    + +
    + + +
    + +
    + + +
    +
    + +
    + +
    + +
    +
    +
    +@endsection diff --git a/resources/views/pages/home/pendahuluan.blade.php b/resources/views/pages/home/pendahuluan.blade.php new file mode 100644 index 0000000..a52a613 --- /dev/null +++ b/resources/views/pages/home/pendahuluan.blade.php @@ -0,0 +1,371 @@ +@extends('layouts.home') + +@section('Pendahuluan', 'title') + +@section('content') +
    + +
    +
    + +
    +

    + Latar + Belakang +

    +
    + +
    +

    + Penyusunan skripsi di Program Studi D4-Teknik Informatika Politeknik Negeri Jember adalah tahap penting yang + dipengaruhi oleh kompleksitas topik, keterbatasan sumber daya, dan kualitas bimbingan. Penentuan dosen + pembimbing masih dilakukan secara manual, seringkali kurang transparan dan menyulitkan mahasiswa. Untuk + mengatasi masalah ini, penelitian ini mengusulkan Sistem Pendukung Keputusan (SPK) dengan metode Profile + Matching. Sistem ini membantu mencocokkan kriteria mahasiswa dengan profil dosen serta menyeimbangkan kuota + bimbingan. +

    +
    + + +
    +
    + +
    +
    +

    Rumusan Masalah

    +

    Rumusan masalah dari penulisan laporan + ini + adalah sebagai berikut

    +
    + + +
    +
    + + + + + + + + + +
    +

    Implementasi Metode

    +

    Bagaimana mengimplementasikan metode + Profile + Matching untuk sistem pendukung keputusan pemilihan dosen pembimbing skripsi?

    +
    + + +
    +
    + + + + +
    +

    Rancang Bangun Sistem

    +

    Bagaimana merancang dan membangun sistem + pendukung keputusan pemilihan dosen pembimbing skripsi?

    +
    + + +
    +
    + + + + + + + + +
    +

    Evaluasi Sistem

    +

    Bagaimana mengevaluasi sistem pendukung + keputusan dalam pemilihan dosen pembimbing skripsi menggunakan Profile Matching?

    +
    + +
    +
    +
    + +
    +
    +
    +
    +

    + Tujuan Penelitian +

    +

    + Penelitian ini bertujuan untuk mengembangkan sistem pendukung keputusan dalam pemilihan + dosen + pembimbing skripsi dengan metode Profile Matching. +

    +
    + + +
    + +
    + + + + + + + + +
    +

    + Kesesuaian Profile Matching dalam Pemilihan Dosen +

    +

    + Mengetahui tingkat kesesuaian metode Profile Matching dalam pemilihan dosen + pembimbing + skripsi +

    +
    +
    + + + +
    + + + + + + + + + + + + + + + + + +
    +

    + Hasil Sistem +

    +

    + Menghasilkan sistem pedukung keputusan pemilihan dosen pembimbing skripsi. +

    +
    +
    + + + +
    + + + + + + + + + + + + + + +
    +

    + Hasil Pengujian Sistem Profile Matching +

    +

    + Mengetahui hasil dari pengujian terhadap sistem pendukung keputusan menggunakan + metode + Profile Matching dalam pemilihan dosen pembimbing skripsi. +

    +
    +
    + +
    + +
    +
    +
    + +
    +
    +
    + +
    +
    +

    + Manfaat Penelitian +

    +

    Manfaat dari penelitian ini + adalah sebagai berikut

    + + + + +
    + + +
    +
    + +
    +
    + Features Image +
    + + + + +
    + + + + + +
    +
    + +
    + + + +
    +
    +
    +
    + +
    +
    +
    +
    +@endsection diff --git a/resources/views/pages/kriteria/create.blade.php b/resources/views/pages/kriteria/create.blade.php new file mode 100644 index 0000000..16959e6 --- /dev/null +++ b/resources/views/pages/kriteria/create.blade.php @@ -0,0 +1,182 @@ +@section('Breadcrumb') +
    +
    + {{ __('Data Kriteria') }} +
    +
      +
    1. + + + Home + + + + Data Kriteria + + +
    2. +
    3. + Tambah Data Kriteria +
    4. +
    +
    +@endsection + +@section('mobile-breadcrumb') +
  • + + Kriteria + + + + +
  • +
  • + Tambah Data +
  • +@endsection + + + +
    + +
    +
    +

    + {{ __('Tambah Data Kriteria') }} +

    +
    +
    + +
    + @csrf + + + @if ($errors->any()) + + @endif + +
    + +
    + +
    + + +
    +
    + +
    +
    + + +
    + +
    + +
    + +
    + +
    + +
    + + +
    + +
    + + +
    +
    + +
    +
    + + +
    + +
    + + +
    + + +
    + + Batal + + +
    +
    + +
    +
    diff --git a/resources/views/pages/kriteria/edit.blade.php b/resources/views/pages/kriteria/edit.blade.php new file mode 100644 index 0000000..5e947f5 --- /dev/null +++ b/resources/views/pages/kriteria/edit.blade.php @@ -0,0 +1,501 @@ +@section('Breadcrumb') +
    +
    + {{ __('Data Kriteria') }} +
    +
      +
    1. + + + Home + + + + Data Kriteria + + +
    2. +
    3. + Edit Data Kriteria +
    4. +
    +
    +@endsection + +@section('mobile-breadcrumb') +
  • + + Kriteria + + + + +
  • +
  • + Edit Data {{ $kriteria->kriteria_name }} +
  • +@endsection + + + +
    + +
    +
    +

    + {{ __('Edit Data Kriteria') }} +

    +
    +
    + +
    + @csrf + @method('PUT') + + + @if ($errors->any()) + + @endif + + + +
    + +
    + +
    + + +
    +
    + +
    +
    + + +
    + +
    + +
    + +
    + +
    + +
    + + +
    + +
    + + +
    +
    + +
    +
    + + +
    + +
    + + +
    + + +
    + + Batal + + +
    + + +
    + +
    + +
    +
    +

    + {{ __('Data Subkriteria') }} +

    + + {{ __('Tambah Data') }} + +
    +
    + + {{-- + + + + + + + + + + @foreach ($subkriteria as $item) + + + + + + + @endforeach + +
    + + No + + + + + Nama Subkriteria + + + + + Nilai + + + + + Tindakan + + +
    {{ $loop->iteration }}{{ $item->subkriteria_name }}{{ $item->nilai->value }} + + + + + + +
    --}} + +
    +
    +
    +
    +
    +
    + + +
    + + + + +
    +
    +
    + +
    + + + + + + + + + + + + + + @foreach ($subkriteria as $item) + + + + + + + @endforeach + +
    +
    + No + + + + +
    +
    +
    + Subkriteria + + + + +
    +
    +
    + Nilai + + + + +
    +
    + Action
    + {{ $loop->iteration }} + {{ $item->subkriteria_name }} + {{ $item->nilai->value }} +
    + + + +
    +
    +
    + + +
    +
    +
    +
    + +
    +
    diff --git a/resources/views/pages/kriteria/index.blade.php b/resources/views/pages/kriteria/index.blade.php new file mode 100644 index 0000000..33926a1 --- /dev/null +++ b/resources/views/pages/kriteria/index.blade.php @@ -0,0 +1,309 @@ +@section('Breadcrumb') +
    +
    + {{ __('Data Kriteria') }} +
    +
      +
    1. + + + Home + + +
    2. +
    3. + Data Kriteria +
    4. +
    +
    +@endsection + +@section('mobile-breadcrumb') +
  • + Kriteria +
  • +@endsection + + +
    + +
    +
    +

    + {{ __('Data Kriteria') }} +

    + + {{ __('Tambah Data') }} + +
    +
    + +
    +
    +
    +
    +
    +
    + + +
    + + + + +
    +
    +
    + +
    + + + + + + + + + + + + + + + + + + @foreach ($kriteria as $item) + + + + + + + + + @endforeach + +
    +
    + No + + + + +
    +
    +
    + Kode + + + + +
    +
    +
    + Kriteria + + + + +
    +
    +
    + Aspek + + + + +
    +
    +
    + Tipe + + + + +
    +
    + Action
    + {{ $loop->iteration }} + {{ $item->kode_kriteria }} + {{ $item->kriteria_name }} + {{ $item->aspek->aspek_name }} + {{ $item->tipe }} +
    + + + +
    +
    +
    + + +
    +
    +
    +
    + +
    +
    diff --git a/resources/views/pages/kriteria/show.blade.php b/resources/views/pages/kriteria/show.blade.php new file mode 100644 index 0000000..708065e --- /dev/null +++ b/resources/views/pages/kriteria/show.blade.php @@ -0,0 +1,438 @@ +@section('Breadcrumb') +
    +
    + {{ __('Data Kriteria') }} +
    +
      +
    1. + + + Home + + + + Data Kriteria + + +
    2. +
    3. + Lihat Detail Data Kriteria +
    4. +
    +
    +@endsection + +@section('mobile-breadcrumb') +
  • + + Kriteria + + + + +
  • +
  • + Lihat Detail Data {{ $kriteria->kriteria_name }} +
  • +@endsection + + + +
    + +
    +
    +

    + {{ __('Lihat Detail Data Kriteria') }} +

    +
    +
    + +
    + +
    + +
    + + +
    +
    + +
    +
    + + +
    + +
    + +
    + +
    + +
    + +
    + + +
    + +
    + + +
    +
    + +
    +
    + + +
    + +
    + + +
    + + + + + +
    + +
    + +
    +
    +

    + {{ __('Data Subkriteria') }} +

    +
    +
    + + {{-- + + + + + + + + + + @foreach ($subkriteria as $item) + + + + + + + @endforeach + +
    + + No + + + + + Nama Subkriteria + + + + + Nilai + + + + + Tindakan + + +
    {{ $loop->iteration }}{{ $item->subkriteria_name }}{{ $item->nilai->value }} + + + + + + +
    --}} + +
    +
    +
    +
    +
    +
    + + +
    + + + + +
    +
    +
    + +
    + + + + + + + + + + + + + + @foreach ($subkriteria as $item) + + + + + + + @endforeach + +
    +
    + No + + + + +
    +
    +
    + Subkriteria + + + + +
    +
    +
    + Nilai + + + + +
    +
    + Action
    + {{ $loop->iteration }} + {{ $item->subkriteria_name }} + {{ $item->nilai->value }} +
    + + + +
    +
    +
    + + +
    +
    +
    +
    + +
    +
    diff --git a/resources/views/pages/mahasiswa/create.blade.php b/resources/views/pages/mahasiswa/create.blade.php new file mode 100644 index 0000000..15e3706 --- /dev/null +++ b/resources/views/pages/mahasiswa/create.blade.php @@ -0,0 +1,158 @@ + + +
    +
    + {{ __('Mahasiswa') }} +
    +
      +
    1. + + {{ Auth::user()->name }} + + + + Mahasiswa + + +
    2. +
    3. + Tambah Data Mahasiswa +
    4. +
    +
    + +
    + +
    +
    +

    + {{ __('Tambah Data Mahasiswa') }} +

    +
    +
    + +
    + @csrf + + + @if ($errors->any()) + + @endif + +
    + +
    + +
    + + +
    +
    + +
    +
    + + +
    + +
    + + +
    +
    + +
    +
    + + +
    + +
    + + +
    + +
    + + +
    +
    + +
    +
    + + +
    + +
    + + +
    + + +
    + + Batal + + +
    +
    + +
    +
    diff --git a/resources/views/pages/mahasiswa/index.blade.php b/resources/views/pages/mahasiswa/index.blade.php new file mode 100644 index 0000000..91df935 --- /dev/null +++ b/resources/views/pages/mahasiswa/index.blade.php @@ -0,0 +1,308 @@ +@section('Breadcrumb') +
    +
    + {{ __('Data Aspek') }} +
    +
      +
    1. + + + Home + + +
    2. +
    3. + Data Mahasiswa +
    4. +
    +
    +@endsection + +@section('mobile-breadcrumb') +
  • + Mahasiswa +
  • +@endsection + + + +
    + +
    +
    +

    + {{ __('Data Mahasiswa') }} +

    +
    +
    + +
    +
    +
    +
    +
    +
    + + +
    + + + + +
    +
    +
    + +
    + + + + + + + + + + + + + + + + @foreach ($mahasiswa as $item) + + + + + + + + @endforeach + +
    +
    + No + + + + +
    +
    +
    + Nama + + + + +
    +
    +
    + NIM + + + + +
    +
    +
    + Email + + + + +
    +
    + Action
    + {{ $loop->iteration }} + {{ $item->nim }} + {{ $item->name }} + {{ $item->email }} +
    + + + + +
    +
    +
    + + +
    +
    +
    +
    + +
    +
    diff --git a/resources/views/pages/profile-matching/index.blade.php b/resources/views/pages/profile-matching/index.blade.php new file mode 100644 index 0000000..6abcc6f --- /dev/null +++ b/resources/views/pages/profile-matching/index.blade.php @@ -0,0 +1,189 @@ + + + @role('admin') +
    +
    + {{ __('Data Alternatif') }} +
    +
      +
    1. + + {{ Auth::user()->name }} + + +
    2. +
    3. + Data Alternatif +
    4. +
    +
    + @endrole + + @role('mahasiswa') +
    +
    + {{ __('Daftar Dosen') }} +
    +
      +
    1. + + {{ Auth::user()->name }} + + +
    2. +
    3. + Daftar Dosen +
    4. +
    +
    + @endrole + +
    + +
    +
    + @role('admin') +

    + {{ __('Data Alternatif') }} +

    + @endrole + @role('mahasiswa') +

    + {{ __('Daftar Dosen') }} +

    + @endrole + + @role('admin') + + {{ __('Tambah Data') }} + + @endrole +
    +
    + + + + + + + + + + + + @foreach ($alternatif as $item) + + + + + + + @endforeach + +
    + + No + + + + + NIP + + + + @role('admin') + + Nama Alternatif + + + @endrole + @role('mahasiswa') + + Nama Dosen + + + @endrole + + + Tindakan + + +
    {{ $loop->iteration }}{{ $item->nip }}{{ $item->name }} + + + + + + +
    + +
    +
    diff --git a/resources/views/pages/profile-method/create.blade.php b/resources/views/pages/profile-method/create.blade.php new file mode 100644 index 0000000..79cdfef --- /dev/null +++ b/resources/views/pages/profile-method/create.blade.php @@ -0,0 +1,191 @@ +@section('Breadcrumb') +
    +
    + {{ __('Data Profile Alternatif') }} +
    +
      +
    1. + + + Home + + + + Data Profil Alternatif + + +
    2. +
    3. + Tambah Data Profil Alternatif +
    4. +
    +
    +@endsection + +@section('mobile-breadcrumb') +
  • + + Profil Alternatif + + + + +
  • +
  • + Tambah Data +
  • +@endsection + + + + +
    + +
    +
    +

    + {{ __('Tambah Data Profile') }} +

    +
    +
    + +
    + @csrf + + + @if ($errors->any()) + + @endif + +
    + +
    + +
    + + +
    + +
    + + + @foreach ($kriteria->groupBy('id_kriteria') as $id_kriteria => $kriteriaGroup) +
    + +
    + + @if ($kriteriaGroup->first()->kriteria_name == 'Keahlian Utama') +
    + +
    + @else +
    + +
    + @endif + @endforeach + + +
    + + +
    + + Batal + + +
    +
    + +
    +
    diff --git a/resources/views/pages/profile-method/edit.blade.php b/resources/views/pages/profile-method/edit.blade.php new file mode 100644 index 0000000..12af918 --- /dev/null +++ b/resources/views/pages/profile-method/edit.blade.php @@ -0,0 +1,197 @@ +@section('Breadcrumb') +
    +
    + {{ __('Data Profile Alternatif') }} +
    +
      +
    1. + + + Home + + + + Data Profile Alternatif + + +
    2. +
    3. + Edit Data Profile Alternatif +
    4. +
    +
    +@endsection + +@section('mobile-breadcrumb') +
  • + + Profile Alternatif + + + + +
  • +
  • + Edit Data +
  • +@endsection + + + +
    + +
    +
    +

    + {{ __('Tambah Data Profile') }} +

    +
    +
    + +
    + @csrf + @method('PUT') + + + @if ($errors->any()) + + @endif + +
    + +
    + +
    +
    + +
    + + @foreach ($kriteria as $kriteriaItem) +
    + +
    + + @if ($kriteriaItem->kriteria_name == 'Keahlian Utama') +
    + +
    + @else +
    + +
    + @endif + @endforeach + +
    + +
    + + Batal + + +
    +
    + +
    +
    diff --git a/resources/views/pages/profile-method/index.blade.php b/resources/views/pages/profile-method/index.blade.php new file mode 100644 index 0000000..8646955 --- /dev/null +++ b/resources/views/pages/profile-method/index.blade.php @@ -0,0 +1,312 @@ +@section('Breadcrumb') +
    +
    + {{ __('Data Profil Alternatif') }} +
    +
      +
    1. + + + Home + + +
    2. +
    3. + Data Profile Alternatif +
    4. +
    +
    +@endsection + +@section('mobile-breadcrumb') +
  • + Profil Alternatif +
  • +@endsection + + +
    + +
    +
    +

    + {{ __('Data Profile Alternatif') }} +

    + + {{ __('Tambah Data') }} + +
    +
    + +
    +
    +
    +
    +
    +
    + + +
    + + + + +
    +
    +
    + +
    + + + + + + + + @foreach ($kriteria as $item) + + @endforeach + + + + + + @foreach ($profile_method->sortByDesc('nilai')->groupBy('id_alternatif') as $id_alternatif => $profileData) + + + + + @foreach ($kriteria as $kriteriaItem) + @php + $matchedProfiles = $profileData->where( + 'id_kriteria', + $kriteriaItem->id_kriteria, + ); + $alternatifId = $profileData->first()->id_alternatif ?? 'alt'; + $tooltipId = + 'tooltip-keahlian-' . + $kriteriaItem->id_kriteria . + '-' . + $alternatifId; + @endphp + + + @endforeach + + + + @endforeach + +
    +
    + No + + + + +
    +
    +
    + Alternatif + + + + +
    +
    +
    + {{ $item->kode_kriteria }} + + + + +
    +
    + Action
    + {{ $loop->iteration }} + {{ $profileData->first()->alternatif->name }} + + + @if ($kriteriaItem->kriteria_name === 'Keahlian Utama') + @if ($matchedProfiles->isNotEmpty()) + {{ $matchedProfiles->pluck('subkriteria.nilai.value')->implode(' - ') }} + @else + - + @endif + @else + @php + $single = $matchedProfiles->first(); + $nilai = $single ? $single->subkriteria->nilai->value : '-'; + @endphp + {{ $nilai }} + @endif + + + +
    + + + +
    +
    +
    + + +
    +
    +
    +
    + +
    +
    diff --git a/resources/views/pages/profile-method/show.blade.php b/resources/views/pages/profile-method/show.blade.php new file mode 100644 index 0000000..e69de29 diff --git a/resources/views/pages/settings/system.blade.php b/resources/views/pages/settings/system.blade.php new file mode 100644 index 0000000..8b13789 --- /dev/null +++ b/resources/views/pages/settings/system.blade.php @@ -0,0 +1 @@ + diff --git a/resources/views/pages/subkriteria/create.blade.php b/resources/views/pages/subkriteria/create.blade.php new file mode 100644 index 0000000..1ca666e --- /dev/null +++ b/resources/views/pages/subkriteria/create.blade.php @@ -0,0 +1,166 @@ +@section('Breadcrumb') +
    +
    + {{ __('Data Subkriteria') }} +
    +
      +
    1. + + + Home + + + + Data Subkriteria + + +
    2. +
    3. + Tambah Data Subkriteria +
    4. +
    +
    +@endsection + +@section('mobile-breadcrumb') +
  • + + Subkriteria + + + + +
  • +
  • + Tambah Data +
  • +@endsection + + + +
    + +
    +
    +

    + {{ __('Tambah Data Subkriteria') }} +

    +
    +
    + +
    + @csrf + + + @if ($errors->any()) + + @endif + +
    + +
    + +
    + +
    + +
    + +
    + +
    + + +
    +
    + +
    +
    + + +
    + +
    + + +
    + +
    + + +
    + + +
    + + Batal + + +
    +
    + +
    +
    diff --git a/resources/views/pages/subkriteria/edit.blade.php b/resources/views/pages/subkriteria/edit.blade.php new file mode 100644 index 0000000..e233591 --- /dev/null +++ b/resources/views/pages/subkriteria/edit.blade.php @@ -0,0 +1,183 @@ +@section('Breadcrumb') +
    +
    + {{ __('Data Subkriteria') }} +
    +
      +
    1. + + + Home + + + + Data Subkriteria + + +
    2. +
    3. + Edit Data Subkriteria +
    4. +
    +
    +@endsection + +@section('mobile-breadcrumb') +
  • + + Subkriteria + + + + +
  • +
  • + Edit Data +
  • +@endsection + + + +
    + +
    +
    +

    + {{ __('Edit Data Subkriteria') }} +

    +
    +
    + +
    + @csrf + @method('PUT') + + + @if ($errors->any()) + + @endif + +
    + +
    + +
    + +
    + +
    + +
    + +
    + + +
    +
    + +
    +
    + + +
    + +
    + + +
    + +
    + + + +
    + + +
    + + Batal + + +
    +
    + +
    +
    diff --git a/resources/views/pages/subkriteria/index.blade.php b/resources/views/pages/subkriteria/index.blade.php new file mode 100644 index 0000000..d38d87e --- /dev/null +++ b/resources/views/pages/subkriteria/index.blade.php @@ -0,0 +1,143 @@ + + +
    +
    + {{ __('Data Subkriteria') }} +
    +
      +
    1. + + {{ Auth::user()->name }} + + +
    2. +
    3. + Data Subkriteria +
    4. +
    +
    + +
    + +
    +
    +

    + {{ __('Data Subkriteria') }} +

    + + {{ __('Tambah Data') }} + +
    +
    + + + + + + + + + + + + + @foreach ($subkriteria as $item) + + + + + + + + @endforeach + +
    + + No + + + + + Nama Kriteria + + + + + Nama Subkriteria + + + + + Nilai + + + + + Tindakan + + +
    {{ $loop->iteration }}{{ $item->kriteria->kriteria_name }}{{ $item->subkriteria_name }}{{ $item->nilai }} + + + + + + +
    + +
    +
    diff --git a/resources/views/pages/subkriteria/show.blade.php b/resources/views/pages/subkriteria/show.blade.php new file mode 100644 index 0000000..f46dac5 --- /dev/null +++ b/resources/views/pages/subkriteria/show.blade.php @@ -0,0 +1,147 @@ +@section('Breadcrumb') +
    +
    + {{ __('Data Subkriteria') }} +
    +
      +
    1. + + + Home + + + + Data Subkriteria + + +
    2. +
    3. + Tambah Data Subkriteria +
    4. +
    +
    +@endsection + +@section('mobile-breadcrumb') +
  • + + Subkriteria + + + + +
  • +
  • + Lihat Detail Data +
  • +@endsection + + + +
    + +
    +
    +

    + {{ __('Edit Data Subkriteria') }} +

    +
    +
    + +
    + +
    + +
    + +
    + +
    + +
    + +
    + + +
    +
    + +
    +
    + + +
    + +
    + + +
    + +
    + + + +
    + + + + +
    +
    diff --git a/resources/views/pages/submissions/create.blade.php b/resources/views/pages/submissions/create.blade.php new file mode 100644 index 0000000..6233888 --- /dev/null +++ b/resources/views/pages/submissions/create.blade.php @@ -0,0 +1,271 @@ +@role('mahasiswa') + @section('Breadcrumb') +
    +
    + {{ __('Pengajuan Judul') }} +
    +
      +
    1. + + + Home + + +
    2. +
    3. + Pengajuan Judul +
    4. +
    +
    + @endsection + + @section('mobile-breadcrumb') +
  • + Pengajuan Judul +
  • + @endsection +@endrole + + +
    + + @role('mahasiswa') + @if ($izin->izin !== 'on') +
    +
    + +
    + +
    +
    + fyi +

    Oops.

    +

    Maaf, pengajuan judul belum dibuka, silahkan + hubungi Admin.

    + +
    +
    + +
    +
    +

    ©SPK_DOSBING All Rights Reserved. 2025. +

    +
    +
    +
    + @else +
    +
    +

    + {{ __('Pengajuan Judul') }} +

    + +
    +
    + + @if ($errors->any()) + + @endif + + + +
    + @csrf +
    + + + +
    + +
    + + +
    +
    + +
    +
    + + +
    + +
    + + +
    +
    + +
    +
    + + +
    + +
    + + +
    +
    + +
    +
    + + +
    + +
    + + +
    +
    + +
    +
    + + +
    + +
    + + +
    +
    + +
    +
    + + +
    + +
    + + +
    +
    + +
    +
    + + +
    + +
    + + +
    + +
    + + +
    + + +
    + +
    +
    + @endif + @endrole + +
    +
    diff --git a/resources/views/pages/submissions/index.blade.php b/resources/views/pages/submissions/index.blade.php new file mode 100644 index 0000000..3528789 --- /dev/null +++ b/resources/views/pages/submissions/index.blade.php @@ -0,0 +1,955 @@ +@role('admin') + @section('Breadcrumb') +
    +
    + {{ __('Data Pengajuan Judul') }} +
    +
      +
    1. + + + Home + + +
    2. +
    3. + Data Pengajuan Judul +
    4. +
    +
    + @endsection + + @section('mobile-breadcrumb') +
  • + Pengajuan Judul +
  • + @endsection +@endrole + +@role('mahasiswa') + @section('Breadcrumb') +
    +
    + {{ __('Pemilihan Dosen') }} +
    +
      +
    1. + + + Home + + +
    2. +
    3. + Pemilihan Dosen +
    4. +
    +
    + @endsection + + @section('mobile-breadcrumb') +
  • + Pemilihan Dosen +
  • + @endsection +@endrole + + +
    + +
    +
    + @role('admin') +

    + {{ __('Daftar Pengajuan') }} +

    + @endrole + @role('mahasiswa') +

    + {{ __('Pemilihan Dosen') }} +

    + @endrole + + @role('admin') + + @endrole +
    +
    + + @role('mahasiswa') + +
    +
    +
    +
    +
      +
    • + +
      +
      + + + 1 + + + + + + + +
    • + +
    • +
      +
      + + + 2 + + + + + + + +
    • + + {{--
    • + + + 3 + + + + + + +
    • --}} + +
    +
    + +
    + @csrf +
    + + @if ($errors->any()) + + @endif + +
    +
    +
    +

    1. Pilih + Kriteria:

    +
    +
    +
    +
    +
    + +
    +
    +
    +

    2. Pilih + Maksimal 3 Dosen:

    +
    + @php + $groupedProfiles = $profile->groupBy('id_alternatif'); + @endphp + + @foreach ($groupedProfiles as $alternatifId => $items) + @php + $firstItem = $items->first(); + $subkriteriaIds = $items + ->pluck('subkriteria.id_subkriteria') + ->filter() + ->values(); + @endphp + +
    +
    +
    +
    + + +
    + + +
    +
    +
    + + + @endforeach +
    +
    +
    +
    + + + +
    + + + + +
    +
    +
    +
    +
    +
    + + @endrole + + @role('admin') +
    +
    +
    +
    +
    +
    + + +
    + + + + +
    +
    +
    + +
    + + + + + + + + + + + + + + {{-- --}} + + + + @foreach ($submission as $item) + + + + + + @foreach ($item->submission_detail as $detail) + + @endforeach + {{-- --}} + + @endforeach + +
    +
    + No + + + + +
    +
    +
    + NIM + + + + +
    +
    +
    + Nama Mahasiswa + + + + +
    +
    +
    + Judul + + + + +
    +
    +
    + Dosen Pembimbing + + + + +
    +
    + Action
    + {{ $loop->iteration }} + {{ $item->users->nim }} + {{ $item->users->name }} + {{ $item->judul }} + {{ $detail->alternatif->name ?? '-' }} +
    + + + +
    +
    +
    + + +
    +
    +
    +
    + @endrole + +
    + + +
    diff --git a/resources/views/partials/content.blade.php b/resources/views/partials/content.blade.php new file mode 100644 index 0000000..973cac8 --- /dev/null +++ b/resources/views/partials/content.blade.php @@ -0,0 +1,7 @@ +@include('partials.header') + +
    + @yield('content') +
    + +@include('partials.footer') diff --git a/resources/views/partials/footer.blade.php b/resources/views/partials/footer.blade.php new file mode 100644 index 0000000..bc85c65 --- /dev/null +++ b/resources/views/partials/footer.blade.php @@ -0,0 +1,43 @@ +
    +
    +
    +
    +

    SPK PDP-PM

    +

    Decision Support System using Profile Matching Method

    +
    +
    +

    Quick Links

    + +
    +
    +

    Contact

    +

    Email: info@achmadzakariya.my.id

    +

    Phone: +62 878 330 2407

    +
    +
    +

    Follow Us

    + +
    +
    +
    + © 2025 SPK PDP-PM. All rights reserved. +
    +
    +
    diff --git a/resources/views/partials/header.blade.php b/resources/views/partials/header.blade.php new file mode 100644 index 0000000..7594da6 --- /dev/null +++ b/resources/views/partials/header.blade.php @@ -0,0 +1,214 @@ + +
    + + +
    diff --git a/resources/views/partials/metadata.blade.php b/resources/views/partials/metadata.blade.php new file mode 100644 index 0000000..66ba9d9 --- /dev/null +++ b/resources/views/partials/metadata.blade.php @@ -0,0 +1,6 @@ + + + + +Laravel + diff --git a/resources/views/partials/scripts.blade.php b/resources/views/partials/scripts.blade.php new file mode 100644 index 0000000..e537889 --- /dev/null +++ b/resources/views/partials/scripts.blade.php @@ -0,0 +1,5 @@ +{{-- flowbite --}} + + + +@yield('scripts') diff --git a/resources/views/partials/styles.blade.php b/resources/views/partials/styles.blade.php new file mode 100644 index 0000000..e4ef075 --- /dev/null +++ b/resources/views/partials/styles.blade.php @@ -0,0 +1,14 @@ + + + + + + + + + +@if (file_exists(public_path('build/manifest.json')) || file_exists(public_path('hot'))) + @vite(['resources/css/app.css', 'resources/js/app.js']) +@endif diff --git a/resources/views/profile-matching/result.blade.php b/resources/views/profile-matching/result.blade.php new file mode 100644 index 0000000..78769f3 --- /dev/null +++ b/resources/views/profile-matching/result.blade.php @@ -0,0 +1,443 @@ +@section('Breadcrumb') +
    +
    + {{ __('Pemilihan Dosen') }} +
    +
      +
    1. + + + Home + + +
    2. +
    3. + Pemilihan Dosen +
    4. +
    +
    +@endsection + +@section('mobile-breadcrumb') +
  • + Pemilihan Dosen +
  • +@endsection + + + +
    + +
    +
    + @role('mahasiswa') +

    + {{ __('Perhitungan Metode Profile Matching') }} +

    + @endrole +
    +
    +
    +
    + Hasil + Rekomendasi Dosen berdasarkan Metode Profile Matching: +
    +
    +
    +
    + + @role('mahasiswa') +
    +
    +
    +
    + +
    + + +
    +
    + + + + + + + @foreach ($data_kriteria as $item) + + @endforeach + + + + @foreach ($resultsGAP as $alternatif => $kriteria) + + + + @foreach ($kriteria as $item) + + @endforeach + + @endforeach + + + + + @foreach ($selectedKriteria as $item) + @php + $subkriteria = \App\Models\Subkriteria::with('nilai')->find( + $item, + ); + @endphp + + @endforeach + + +
    + No + + Kode Alternatif + + {{ $item->kode_kriteria }} +
    + {{ $loop->iteration }} + + {{ $alternatif }} + + {{ is_array($item) ? implode(', ', $item) : $item }} +
    Data + Kriteria Mahasiswa + {{ $subkriteria->nilai->value ?? 'Tidak ada nilai' }}
    + +
    +
    +
    + +
    + + +
    + +
    + + +
    + +
    + + +
    + +
    + + +
    + +
    +
    +
    +
    + @endrole +
    +
    diff --git a/resources/views/profile/edit.blade.php b/resources/views/profile/edit.blade.php new file mode 100644 index 0000000..44cfb7a --- /dev/null +++ b/resources/views/profile/edit.blade.php @@ -0,0 +1,187 @@ +@section('Breadcrumb') +
    +
    + {{ __('Profil Akun') }} +
    +
      +
    1. + + + Home + + +
    2. +
    3. + Profil Akun +
    4. +
    +
    +@endsection + +@section('mobile-breadcrumb') +
  • + Profil Akun +
  • +@endsection + + + +

    + {{ __('Profile') }} +

    +
    + +
    +
    + +
    + @csrf + @method('patch') + +
    +
    +
    + +
    + +
    +
    + + +
    + Avatar + + {{--
    + + +
    --}} +
    +
    + + @if ($errors->any()) + + @endif + + @if (session('status') === 'profile-updated') + + @endif + +
    + + + +
    + +
    + + + +
    + +
    + + + +
    + +
    + + + +
    +
    + + +
    + +
    +
    +
    + +
    + +
    +
    +
    diff --git a/resources/views/profile/partials/delete-user-form.blade.php b/resources/views/profile/partials/delete-user-form.blade.php new file mode 100644 index 0000000..b3a6382 --- /dev/null +++ b/resources/views/profile/partials/delete-user-form.blade.php @@ -0,0 +1,55 @@ +
    +
    +

    + {{ __('Delete Account') }} +

    + +

    + {{ __('Once your account is deleted, all of its resources and data will be permanently deleted. Before deleting your account, please download any data or information that you wish to retain.') }} +

    +
    + + {{ __('Delete Account') }} + + +
    + @csrf + @method('delete') + +

    + {{ __('Are you sure you want to delete your account?') }} +

    + +

    + {{ __('Once your account is deleted, all of its resources and data will be permanently deleted. Please enter your password to confirm you would like to permanently delete your account.') }} +

    + +
    + + + + + +
    + +
    + + {{ __('Cancel') }} + + + + {{ __('Delete Account') }} + +
    +
    +
    +
    diff --git a/resources/views/profile/partials/update-password-form.blade.php b/resources/views/profile/partials/update-password-form.blade.php new file mode 100644 index 0000000..acd200d --- /dev/null +++ b/resources/views/profile/partials/update-password-form.blade.php @@ -0,0 +1,48 @@ +
    +
    +

    + {{ __('Update Password') }} +

    + +

    + {{ __('Ensure your account is using a long, random password to stay secure.') }} +

    +
    + +
    + @csrf + @method('put') + +
    + + + +
    + +
    + + + +
    + +
    + + + +
    + +
    + {{ __('Save') }} + + @if (session('status') === 'password-updated') +

    {{ __('Saved.') }}

    + @endif +
    +
    +
    diff --git a/resources/views/profile/partials/update-profile-information-form.blade.php b/resources/views/profile/partials/update-profile-information-form.blade.php new file mode 100644 index 0000000..7273fff --- /dev/null +++ b/resources/views/profile/partials/update-profile-information-form.blade.php @@ -0,0 +1,64 @@ +
    +
    +

    + {{ __('Profile Information') }} +

    + +

    + {{ __("Update your account's profile information and email address.") }} +

    +
    + +
    + @csrf +
    + +
    + @csrf + @method('patch') + +
    + + + +
    + +
    + + + + + @if ($user instanceof \Illuminate\Contracts\Auth\MustVerifyEmail && ! $user->hasVerifiedEmail()) +
    +

    + {{ __('Your email address is unverified.') }} + + +

    + + @if (session('status') === 'verification-link-sent') +

    + {{ __('A new verification link has been sent to your email address.') }} +

    + @endif +
    + @endif +
    + +
    + {{ __('Save') }} + + @if (session('status') === 'profile-updated') +

    {{ __('Saved.') }}

    + @endif +
    +
    +
    diff --git a/resources/views/vendor/mail/html/button.blade.php b/resources/views/vendor/mail/html/button.blade.php new file mode 100644 index 0000000..4a9bf7d --- /dev/null +++ b/resources/views/vendor/mail/html/button.blade.php @@ -0,0 +1,24 @@ +@props([ + 'url', + 'color' => 'primary', + 'align' => 'center', +]) + + + + + diff --git a/resources/views/vendor/mail/html/footer.blade.php b/resources/views/vendor/mail/html/footer.blade.php new file mode 100644 index 0000000..3ff41f8 --- /dev/null +++ b/resources/views/vendor/mail/html/footer.blade.php @@ -0,0 +1,11 @@ + + + + + + + + + diff --git a/resources/views/vendor/mail/html/header.blade.php b/resources/views/vendor/mail/html/header.blade.php new file mode 100644 index 0000000..56197f8 --- /dev/null +++ b/resources/views/vendor/mail/html/header.blade.php @@ -0,0 +1,12 @@ +@props(['url']) + + + +@if (trim($slot) === 'Laravel') + +@else +{{ $slot }} +@endif + + + diff --git a/resources/views/vendor/mail/html/layout.blade.php b/resources/views/vendor/mail/html/layout.blade.php new file mode 100644 index 0000000..d31a01d --- /dev/null +++ b/resources/views/vendor/mail/html/layout.blade.php @@ -0,0 +1,58 @@ + + + +{{ config('app.name') }} + + + + + +{{ $head ?? '' }} + + + + + + + + + + diff --git a/resources/views/vendor/mail/html/message.blade.php b/resources/views/vendor/mail/html/message.blade.php new file mode 100644 index 0000000..1a874fc --- /dev/null +++ b/resources/views/vendor/mail/html/message.blade.php @@ -0,0 +1,27 @@ + +{{-- Header --}} + + +{{ config('app.name') }} + + + +{{-- Body --}} +{{ $slot }} + +{{-- Subcopy --}} +@isset($subcopy) + + +{{ $subcopy }} + + +@endisset + +{{-- Footer --}} + + +© {{ date('Y') }} {{ config('app.name') }}. {{ __('All rights reserved.') }} + + + diff --git a/resources/views/vendor/mail/html/panel.blade.php b/resources/views/vendor/mail/html/panel.blade.php new file mode 100644 index 0000000..2975a60 --- /dev/null +++ b/resources/views/vendor/mail/html/panel.blade.php @@ -0,0 +1,14 @@ + + + + + + diff --git a/resources/views/vendor/mail/html/subcopy.blade.php b/resources/views/vendor/mail/html/subcopy.blade.php new file mode 100644 index 0000000..790ce6c --- /dev/null +++ b/resources/views/vendor/mail/html/subcopy.blade.php @@ -0,0 +1,7 @@ + + + + + diff --git a/resources/views/vendor/mail/html/table.blade.php b/resources/views/vendor/mail/html/table.blade.php new file mode 100644 index 0000000..a5f3348 --- /dev/null +++ b/resources/views/vendor/mail/html/table.blade.php @@ -0,0 +1,3 @@ +
    +{{ Illuminate\Mail\Markdown::parse($slot) }} +
    diff --git a/resources/views/vendor/mail/html/themes/default.css b/resources/views/vendor/mail/html/themes/default.css new file mode 100644 index 0000000..09e31d8 --- /dev/null +++ b/resources/views/vendor/mail/html/themes/default.css @@ -0,0 +1,291 @@ +/* Base */ + +body, +body *:not(html):not(style):not(br):not(tr):not(code) { + box-sizing: border-box; + font-family: -apple-system, BlinkMacSystemFont, 'Segoe UI', Roboto, Helvetica, Arial, sans-serif, + 'Apple Color Emoji', 'Segoe UI Emoji', 'Segoe UI Symbol'; + position: relative; +} + +body { + -webkit-text-size-adjust: none; + background-color: #ffffff; + color: #718096; + height: 100%; + line-height: 1.4; + margin: 0; + padding: 0; + width: 100% !important; +} + +p, +ul, +ol, +blockquote { + line-height: 1.4; + text-align: left; +} + +a { + color: #3869d4; +} + +a img { + border: none; +} + +/* Typography */ + +h1 { + color: #3d4852; + font-size: 18px; + font-weight: bold; + margin-top: 0; + text-align: left; +} + +h2 { + font-size: 16px; + font-weight: bold; + margin-top: 0; + text-align: left; +} + +h3 { + font-size: 14px; + font-weight: bold; + margin-top: 0; + text-align: left; +} + +p { + font-size: 16px; + line-height: 1.5em; + margin-top: 0; + text-align: left; +} + +p.sub { + font-size: 12px; +} + +img { + max-width: 100%; +} + +/* Layout */ + +.wrapper { + -premailer-cellpadding: 0; + -premailer-cellspacing: 0; + -premailer-width: 100%; + background-color: #edf2f7; + margin: 0; + padding: 0; + width: 100%; +} + +.content { + -premailer-cellpadding: 0; + -premailer-cellspacing: 0; + -premailer-width: 100%; + margin: 0; + padding: 0; + width: 100%; +} + +/* Header */ + +.header { + padding: 25px 0; + text-align: center; +} + +.header a { + color: #3d4852; + font-size: 19px; + font-weight: bold; + text-decoration: none; +} + +/* Logo */ + +.logo { + height: 75px; + max-height: 75px; + width: 75px; +} + +/* Body */ + +.body { + -premailer-cellpadding: 0; + -premailer-cellspacing: 0; + -premailer-width: 100%; + background-color: #edf2f7; + border-bottom: 1px solid #edf2f7; + border-top: 1px solid #edf2f7; + margin: 0; + padding: 0; + width: 100%; +} + +.inner-body { + -premailer-cellpadding: 0; + -premailer-cellspacing: 0; + -premailer-width: 570px; + background-color: #ffffff; + border-color: #e8e5ef; + border-radius: 2px; + border-width: 1px; + box-shadow: 0 2px 0 rgba(0, 0, 150, 0.025), 2px 4px 0 rgba(0, 0, 150, 0.015); + margin: 0 auto; + padding: 0; + width: 570px; +} + +/* Subcopy */ + +.subcopy { + border-top: 1px solid #e8e5ef; + margin-top: 25px; + padding-top: 25px; +} + +.subcopy p { + font-size: 14px; +} + +/* Footer */ + +.footer { + -premailer-cellpadding: 0; + -premailer-cellspacing: 0; + -premailer-width: 570px; + margin: 0 auto; + padding: 0; + text-align: center; + width: 570px; +} + +.footer p { + color: #b0adc5; + font-size: 12px; + text-align: center; +} + +.footer a { + color: #b0adc5; + text-decoration: underline; +} + +/* Tables */ + +.table table { + -premailer-cellpadding: 0; + -premailer-cellspacing: 0; + -premailer-width: 100%; + margin: 30px auto; + width: 100%; +} + +.table th { + border-bottom: 1px solid #edeff2; + margin: 0; + padding-bottom: 8px; +} + +.table td { + color: #74787e; + font-size: 15px; + line-height: 18px; + margin: 0; + padding: 10px 0; +} + +.content-cell { + max-width: 100vw; + padding: 32px; +} + +/* Buttons */ + +.action { + -premailer-cellpadding: 0; + -premailer-cellspacing: 0; + -premailer-width: 100%; + margin: 30px auto; + padding: 0; + text-align: center; + width: 100%; + float: unset; +} + +.button { + -webkit-text-size-adjust: none; + border-radius: 4px; + color: #fff; + display: inline-block; + overflow: hidden; + text-decoration: none; +} + +.button-blue, +.button-primary { + background-color: #2d3748; + border-bottom: 8px solid #2d3748; + border-left: 18px solid #2d3748; + border-right: 18px solid #2d3748; + border-top: 8px solid #2d3748; +} + +.button-green, +.button-success { + background-color: #48bb78; + border-bottom: 8px solid #48bb78; + border-left: 18px solid #48bb78; + border-right: 18px solid #48bb78; + border-top: 8px solid #48bb78; +} + +.button-red, +.button-error { + background-color: #e53e3e; + border-bottom: 8px solid #e53e3e; + border-left: 18px solid #e53e3e; + border-right: 18px solid #e53e3e; + border-top: 8px solid #e53e3e; +} + +/* Panels */ + +.panel { + border-left: #2d3748 solid 4px; + margin: 21px 0; +} + +.panel-content { + background-color: #edf2f7; + color: #718096; + padding: 16px; +} + +.panel-content p { + color: #718096; +} + +.panel-item { + padding: 0; +} + +.panel-item p:last-of-type { + margin-bottom: 0; + padding-bottom: 0; +} + +/* Utilities */ + +.break-all { + word-break: break-all; +} diff --git a/resources/views/vendor/mail/text/button.blade.php b/resources/views/vendor/mail/text/button.blade.php new file mode 100644 index 0000000..97444eb --- /dev/null +++ b/resources/views/vendor/mail/text/button.blade.php @@ -0,0 +1 @@ +{{ $slot }}: {{ $url }} diff --git a/resources/views/vendor/mail/text/footer.blade.php b/resources/views/vendor/mail/text/footer.blade.php new file mode 100644 index 0000000..3338f62 --- /dev/null +++ b/resources/views/vendor/mail/text/footer.blade.php @@ -0,0 +1 @@ +{{ $slot }} diff --git a/resources/views/vendor/mail/text/header.blade.php b/resources/views/vendor/mail/text/header.blade.php new file mode 100644 index 0000000..97444eb --- /dev/null +++ b/resources/views/vendor/mail/text/header.blade.php @@ -0,0 +1 @@ +{{ $slot }}: {{ $url }} diff --git a/resources/views/vendor/mail/text/layout.blade.php b/resources/views/vendor/mail/text/layout.blade.php new file mode 100644 index 0000000..ec58e83 --- /dev/null +++ b/resources/views/vendor/mail/text/layout.blade.php @@ -0,0 +1,9 @@ +{!! strip_tags($header ?? '') !!} + +{!! strip_tags($slot) !!} +@isset($subcopy) + +{!! strip_tags($subcopy) !!} +@endisset + +{!! strip_tags($footer ?? '') !!} diff --git a/resources/views/vendor/mail/text/message.blade.php b/resources/views/vendor/mail/text/message.blade.php new file mode 100644 index 0000000..80bce21 --- /dev/null +++ b/resources/views/vendor/mail/text/message.blade.php @@ -0,0 +1,27 @@ + + {{-- Header --}} + + + {{ config('app.name') }} + + + + {{-- Body --}} + {{ $slot }} + + {{-- Subcopy --}} + @isset($subcopy) + + + {{ $subcopy }} + + + @endisset + + {{-- Footer --}} + + + © {{ date('Y') }} {{ config('app.name') }}. @lang('All rights reserved.') + + + diff --git a/resources/views/vendor/mail/text/panel.blade.php b/resources/views/vendor/mail/text/panel.blade.php new file mode 100644 index 0000000..3338f62 --- /dev/null +++ b/resources/views/vendor/mail/text/panel.blade.php @@ -0,0 +1 @@ +{{ $slot }} diff --git a/resources/views/vendor/mail/text/subcopy.blade.php b/resources/views/vendor/mail/text/subcopy.blade.php new file mode 100644 index 0000000..3338f62 --- /dev/null +++ b/resources/views/vendor/mail/text/subcopy.blade.php @@ -0,0 +1 @@ +{{ $slot }} diff --git a/resources/views/vendor/mail/text/table.blade.php b/resources/views/vendor/mail/text/table.blade.php new file mode 100644 index 0000000..3338f62 --- /dev/null +++ b/resources/views/vendor/mail/text/table.blade.php @@ -0,0 +1 @@ +{{ $slot }} diff --git a/resources/views/vendor/notifications/email.blade.php b/resources/views/vendor/notifications/email.blade.php new file mode 100644 index 0000000..79c2408 --- /dev/null +++ b/resources/views/vendor/notifications/email.blade.php @@ -0,0 +1,58 @@ + +{{-- Greeting --}} +@if (! empty($greeting)) +# {{ $greeting }} +@else +@if ($level === 'error') +# @lang('Whoops!') +@else +# @lang('Hello!') +@endif +@endif + +{{-- Intro Lines --}} +@foreach ($introLines as $line) +{{ $line }} + +@endforeach + +{{-- Action Button --}} +@isset($actionText) + $level, + default => 'primary', + }; +?> + +{{ $actionText }} + +@endisset + +{{-- Outro Lines --}} +@foreach ($outroLines as $line) +{{ $line }} + +@endforeach + +{{-- Salutation --}} +@if (! empty($salutation)) +{{ $salutation }} +@else +@lang('Regards,')
    +{{ config('app.name') }} +@endif + +{{-- Subcopy --}} +@isset($actionText) + +@lang( + "If you're having trouble clicking the \":actionText\" button, copy and paste the URL below\n". + 'into your web browser:', + [ + 'actionText' => $actionText, + ] +) [{{ $displayableActionUrl }}]({{ $actionUrl }}) + +@endisset +
    diff --git a/resources/views/vendor/pagination/bootstrap-4.blade.php b/resources/views/vendor/pagination/bootstrap-4.blade.php new file mode 100644 index 0000000..63c6f56 --- /dev/null +++ b/resources/views/vendor/pagination/bootstrap-4.blade.php @@ -0,0 +1,46 @@ +@if ($paginator->hasPages()) + +@endif diff --git a/resources/views/vendor/pagination/bootstrap-5.blade.php b/resources/views/vendor/pagination/bootstrap-5.blade.php new file mode 100644 index 0000000..a1795a4 --- /dev/null +++ b/resources/views/vendor/pagination/bootstrap-5.blade.php @@ -0,0 +1,88 @@ +@if ($paginator->hasPages()) + +@endif diff --git a/resources/views/vendor/pagination/default.blade.php b/resources/views/vendor/pagination/default.blade.php new file mode 100644 index 0000000..0db70b5 --- /dev/null +++ b/resources/views/vendor/pagination/default.blade.php @@ -0,0 +1,46 @@ +@if ($paginator->hasPages()) + +@endif diff --git a/resources/views/vendor/pagination/semantic-ui.blade.php b/resources/views/vendor/pagination/semantic-ui.blade.php new file mode 100644 index 0000000..ef0dbb1 --- /dev/null +++ b/resources/views/vendor/pagination/semantic-ui.blade.php @@ -0,0 +1,36 @@ +@if ($paginator->hasPages()) + +@endif diff --git a/resources/views/vendor/pagination/simple-bootstrap-4.blade.php b/resources/views/vendor/pagination/simple-bootstrap-4.blade.php new file mode 100644 index 0000000..4bb4917 --- /dev/null +++ b/resources/views/vendor/pagination/simple-bootstrap-4.blade.php @@ -0,0 +1,27 @@ +@if ($paginator->hasPages()) + +@endif diff --git a/resources/views/vendor/pagination/simple-bootstrap-5.blade.php b/resources/views/vendor/pagination/simple-bootstrap-5.blade.php new file mode 100644 index 0000000..a89005e --- /dev/null +++ b/resources/views/vendor/pagination/simple-bootstrap-5.blade.php @@ -0,0 +1,29 @@ +@if ($paginator->hasPages()) + +@endif diff --git a/resources/views/vendor/pagination/simple-default.blade.php b/resources/views/vendor/pagination/simple-default.blade.php new file mode 100644 index 0000000..36bdbc1 --- /dev/null +++ b/resources/views/vendor/pagination/simple-default.blade.php @@ -0,0 +1,19 @@ +@if ($paginator->hasPages()) + +@endif diff --git a/resources/views/vendor/pagination/simple-tailwind.blade.php b/resources/views/vendor/pagination/simple-tailwind.blade.php new file mode 100644 index 0000000..ea02400 --- /dev/null +++ b/resources/views/vendor/pagination/simple-tailwind.blade.php @@ -0,0 +1,25 @@ +@if ($paginator->hasPages()) + +@endif diff --git a/resources/views/vendor/pagination/tailwind.blade.php b/resources/views/vendor/pagination/tailwind.blade.php new file mode 100644 index 0000000..aee2ad2 --- /dev/null +++ b/resources/views/vendor/pagination/tailwind.blade.php @@ -0,0 +1,106 @@ +@if ($paginator->hasPages()) + +@endif diff --git a/routes/api.php b/routes/api.php new file mode 100644 index 0000000..cebce7c --- /dev/null +++ b/routes/api.php @@ -0,0 +1,30 @@ +group(function () { + Route::prefix('aspek')->group(function () { + Route::get('/', [AspekController::class, 'index']); + }); + + Route::prefix('kriteria')->group(function () { + Route::get('/', [KriteriaController::class, 'index']); + }); + + Route::prefix('alternatif')->group(function () { + Route::get('/', [AlternatifController::class, 'index']); + }); + + Route::prefix('profile-method')->group(function () { + Route::get('/', [ProfileMethodController::class, 'index']); + }); + + Route::get('/user', function (Request $request) { + return $request->user(); + })->middleware('auth:sanctum'); +}); \ No newline at end of file diff --git a/routes/auth.php b/routes/auth.php new file mode 100644 index 0000000..bf1ef68 --- /dev/null +++ b/routes/auth.php @@ -0,0 +1,65 @@ +group(function () { + Route::get('register', [RegisteredUserController::class, 'create']) + ->name('register'); + + Route::post('register', [RegisteredUserController::class, 'store']); + + Route::get('login', [AuthenticatedSessionController::class, 'create']) + ->name('login'); + + Route::post('login', [AuthenticatedSessionController::class, 'store']); + + Route::get('forgot-password', [PasswordResetLinkController::class, 'create']) + ->name('password.request'); + + Route::post('forgot-password', [PasswordResetLinkController::class, 'store']) + ->name('password.email'); + + Route::get('reset-password/{token}', [NewPasswordController::class, 'create']) + ->name('password.reset'); + + Route::post('reset-password', [NewPasswordController::class, 'store']) + ->name('password.store'); + + Route::get('login/google', [GoogleController::class, 'redirectToGoogle']) + ->name('auth.google'); + + Route::get('login/google/callback', [GoogleController::class, 'handleGoogleCallback']); +}); + +Route::middleware('auth')->group(function () { + Route::get('verify-email', EmailVerificationPromptController::class) + ->name('verification.notice'); + + Route::get('verify-email/{id}/{hash}', VerifyEmailController::class) + ->middleware(['signed', 'throttle:6,1']) + ->name('verification.verify'); + + Route::post('email/verification-notification', [EmailVerificationNotificationController::class, 'store']) + ->middleware('throttle:6,1') + ->name('verification.send'); + + Route::get('confirm-password', [ConfirmablePasswordController::class, 'show']) + ->name('password.confirm'); + + Route::post('confirm-password', [ConfirmablePasswordController::class, 'store']); + + Route::put('password', [PasswordController::class, 'update'])->name('password.update'); + + Route::post('logout', [AuthenticatedSessionController::class, 'destroy']) + ->name('logout'); +}); \ No newline at end of file diff --git a/routes/channels.php b/routes/channels.php new file mode 100644 index 0000000..df2ad28 --- /dev/null +++ b/routes/channels.php @@ -0,0 +1,7 @@ +id === (int) $id; +}); diff --git a/routes/console.php b/routes/console.php new file mode 100644 index 0000000..eff2ed2 --- /dev/null +++ b/routes/console.php @@ -0,0 +1,8 @@ +comment(Inspiring::quote()); +})->purpose('Display an inspiring quote')->hourly(); diff --git a/routes/web.php b/routes/web.php new file mode 100644 index 0000000..53810ed --- /dev/null +++ b/routes/web.php @@ -0,0 +1,64 @@ +group(function () { + Route::get('dashboard', [DashboardController::class, 'index'] )->name('dashboard.index'); + + Route::resource('aspek', AspekController::class); + + Route::prefix('kriteria')->name('kriteria.')->group(function () { + Route::resource('/', KriteriaController::class)->parameters(['' => 'kriteria']); + + Route::resource('/{kriteria}/subkriteria', SubkriteriaController::class) + ->parameters(['subkriteria' => 'subkriteria']); + }); + + Route::resource('alternatif', AlternatifController::class); + Route::resource('method-profile', ProfileMethodController::class); + Route::resource('mahasiswa', MahasiswaController::class); + Route::resource('submissions', SubmissionsController::class); + + Route::post('results', [ProfileMatchingController::class, 'handleProfileMatching'])->name('results.start'); + Route::post('results/{id}', [ProfileMatchingController::class, 'submit'])->name('results.submit'); + Route::get('results/{id}', [ProfileMatchingController::class, 'data'])->name('results.data'); + + Route::prefix('settings')->group(function () { + Route::post('submited-permission/update', [SystemController::class, 'updatePermission'])->name('system.permission.update'); + + Route::get('system', [SystemController::class, 'index'])->name('system.index'); + + Route::get('profile', [ProfileController::class, 'edit'])->name('profile.edit'); + Route::patch('profile', [ProfileController::class, 'update'])->name('profile.update'); + Route::delete('profile', [ProfileController::class, 'destroy'])->name('profile.destroy'); + }); +}); + +require __DIR__.'/auth.php'; \ No newline at end of file diff --git a/sail b/sail new file mode 100644 index 0000000..d9685f0 --- /dev/null +++ b/sail @@ -0,0 +1,603 @@ +#!/usr/bin/env bash + +UNAMEOUT="$(uname -s)" + +# Verify operating system is supported... +case "${UNAMEOUT}" in + Linux*) MACHINE=linux;; + Darwin*) MACHINE=mac;; + *) MACHINE="UNKNOWN" +esac + +if [ "$MACHINE" == "UNKNOWN" ]; then + echo "Unsupported operating system [$(uname -s)]. Laravel Sail supports macOS, Linux, and Windows (WSL2)." >&2 + + exit 1 +fi + +# Determine if stdout is a terminal... +if test -t 1; then + # Determine if colors are supported... + ncolors=$(tput colors) + + if test -n "$ncolors" && test "$ncolors" -ge 8; then + BOLD="$(tput bold)" + YELLOW="$(tput setaf 3)" + GREEN="$(tput setaf 2)" + NC="$(tput sgr0)" + fi +fi + +# Function that prints the available commands... +function display_help { + echo "Laravel Sail" + echo + echo "${YELLOW}Usage:${NC}" >&2 + echo " sail COMMAND [options] [arguments]" + echo + echo "Unknown commands are passed to the docker-compose binary." + echo + echo "${YELLOW}docker-compose Commands:${NC}" + echo " ${GREEN}sail up${NC} Start the application" + echo " ${GREEN}sail up -d${NC} Start the application in the background" + echo " ${GREEN}sail stop${NC} Stop the application" + echo " ${GREEN}sail restart${NC} Restart the application" + echo " ${GREEN}sail ps${NC} Display the status of all containers" + echo + echo "${YELLOW}Artisan Commands:${NC}" + echo " ${GREEN}sail artisan ...${NC} Run an Artisan command" + echo " ${GREEN}sail artisan queue:work${NC}" + echo + echo "${YELLOW}PHP Commands:${NC}" + echo " ${GREEN}sail php ...${NC} Run a snippet of PHP code" + echo " ${GREEN}sail php -v${NC}" + echo + echo "${YELLOW}Composer Commands:${NC}" + echo " ${GREEN}sail composer ...${NC} Run a Composer command" + echo " ${GREEN}sail composer require laravel/sanctum${NC}" + echo + echo "${YELLOW}Node Commands:${NC}" + echo " ${GREEN}sail node ...${NC} Run a Node command" + echo " ${GREEN}sail node --version${NC}" + echo + echo "${YELLOW}NPM Commands:${NC}" + echo " ${GREEN}sail npm ...${NC} Run a npm command" + echo " ${GREEN}sail npx${NC} Run a npx command" + echo " ${GREEN}sail npm run prod${NC}" + echo + echo "${YELLOW}PNPM Commands:${NC}" + echo " ${GREEN}sail pnpm ...${NC} Run a pnpm command" + echo " ${GREEN}sail pnpx${NC} Run a pnpx command" + echo " ${GREEN}sail pnpm run prod${NC}" + echo + echo "${YELLOW}Yarn Commands:${NC}" + echo " ${GREEN}sail yarn ...${NC} Run a Yarn command" + echo " ${GREEN}sail yarn run prod${NC}" + echo + echo "${YELLOW}Bun Commands:${NC}" + echo " ${GREEN}sail bun ...${NC} Run a bun command" + echo " ${GREEN}sail bunx${NC} Run a bunx command" + echo " ${GREEN}sail bun run prod${NC}" + echo + echo "${YELLOW}Database Commands:${NC}" + echo " ${GREEN}sail mysql${NC} Start a MySQL CLI session within the 'mysql' container" + echo " ${GREEN}sail mariadb${NC} Start a MySQL CLI session within the 'mariadb' container" + echo " ${GREEN}sail psql${NC} Start a PostgreSQL CLI session within the 'pgsql' container" + echo " ${GREEN}sail mongodb${NC} Start a Mongo Shell session within the 'mongodb' container" + echo " ${GREEN}sail redis${NC} Start a Redis CLI session within the 'redis' container" + echo + echo "${YELLOW}Debugging:${NC}" + echo " ${GREEN}sail debug ...${NC} Run an Artisan command in debug mode" + echo " ${GREEN}sail debug queue:work${NC}" + echo + echo "${YELLOW}Running Tests:${NC}" + echo " ${GREEN}sail test${NC} Run the PHPUnit tests via the Artisan test command" + echo " ${GREEN}sail phpunit ...${NC} Run PHPUnit" + echo " ${GREEN}sail pest ...${NC} Run Pest" + echo " ${GREEN}sail pint ...${NC} Run Pint" + echo " ${GREEN}sail dusk${NC} Run the Dusk tests (Requires the laravel/dusk package)" + echo " ${GREEN}sail dusk:fails${NC} Re-run previously failed Dusk tests (Requires the laravel/dusk package)" + echo + echo "${YELLOW}Container CLI:${NC}" + echo " ${GREEN}sail shell${NC} Start a shell session within the application container" + echo " ${GREEN}sail bash${NC} Alias for 'sail shell'" + echo " ${GREEN}sail root-shell${NC} Start a root shell session within the application container" + echo " ${GREEN}sail root-bash${NC} Alias for 'sail root-shell'" + echo " ${GREEN}sail tinker${NC} Start a new Laravel Tinker session" + echo + echo "${YELLOW}Sharing:${NC}" + echo " ${GREEN}sail share${NC} Share the application publicly via a temporary URL" + echo " ${GREEN}sail open${NC} Open the site in your browser" + echo + echo "${YELLOW}Binaries:${NC}" + echo " ${GREEN}sail bin ...${NC} Run Composer binary scripts from the vendor/bin directory" + echo + echo "${YELLOW}Customization:${NC}" + echo " ${GREEN}sail artisan sail:publish${NC} Publish the Sail configuration files" + echo " ${GREEN}sail build --no-cache${NC} Rebuild all of the Sail containers" + + exit 1 +} + +# Proxy the "help" command... +if [ $# -gt 0 ]; then + if [ "$1" == "help" ] || [ "$1" == "-h" ] || [ "$1" == "-help" ] || [ "$1" == "--help" ]; then + display_help + fi +else + display_help +fi + +# Source the ".env" file so Laravel's environment variables are available... +# shellcheck source=/dev/null +if [ -n "$APP_ENV" ] && [ -f ./.env."$APP_ENV" ]; then + source ./.env."$APP_ENV"; +elif [ -f ./.env ]; then + source ./.env; +fi + +# Define environment variables... +export APP_PORT=${APP_PORT:-80} +export APP_SERVICE=${APP_SERVICE:-"laravel.test"} +export DB_PORT=${DB_PORT:-3306} +export WWWUSER=${WWWUSER:-$UID} +export WWWGROUP=${WWWGROUP:-$(id -g)} + +export SAIL_FILES=${SAIL_FILES:-""} +export SAIL_SHARE_DASHBOARD=${SAIL_SHARE_DASHBOARD:-4040} +export SAIL_SHARE_SERVER_HOST=${SAIL_SHARE_SERVER_HOST:-"laravel-sail.site"} +export SAIL_SHARE_SERVER_PORT=${SAIL_SHARE_SERVER_PORT:-8080} +export SAIL_SHARE_SUBDOMAIN=${SAIL_SHARE_SUBDOMAIN:-""} +export SAIL_SHARE_DOMAIN=${SAIL_SHARE_DOMAIN:-"$SAIL_SHARE_SERVER_HOST"} +export SAIL_SHARE_SERVER=${SAIL_SHARE_SERVER:-""} + +# Function that outputs Sail is not running... +function sail_is_not_running { + echo "${BOLD}Sail is not running.${NC}" >&2 + echo "" >&2 + echo "${BOLD}You may Sail using the following commands:${NC} './vendor/bin/sail up' or './vendor/bin/sail up -d'" >&2 + + exit 1 +} + +# Define Docker Compose command prefix... +if docker compose &> /dev/null; then + DOCKER_COMPOSE=(docker compose) +else + DOCKER_COMPOSE=(docker-compose) +fi + +if [ -n "$SAIL_FILES" ]; then + # Convert SAIL_FILES to an array... + IFS=':' read -ra SAIL_FILES <<< "$SAIL_FILES" + + for FILE in "${SAIL_FILES[@]}"; do + if [ -f "$FILE" ]; then + DOCKER_COMPOSE+=(-f "$FILE") + else + echo "${BOLD}Unable to find Docker Compose file: '${FILE}'${NC}" >&2 + + exit 1 + fi + done +fi + +EXEC="yes" + +if [ -z "$SAIL_SKIP_CHECKS" ]; then + # Ensure that Docker is running... + if ! docker info > /dev/null 2>&1; then + echo "${BOLD}Docker is not running.${NC}" >&2 + + exit 1 + fi + + # Determine if Sail is currently up... + if "${DOCKER_COMPOSE[@]}" ps "$APP_SERVICE" 2>&1 | grep 'Exit\|exited'; then + echo "${BOLD}Shutting down old Sail processes...${NC}" >&2 + + "${DOCKER_COMPOSE[@]}" down > /dev/null 2>&1 + + EXEC="no" + elif [ -z "$("${DOCKER_COMPOSE[@]}" ps -q)" ]; then + EXEC="no" + fi +fi + +ARGS=() + +# Proxy PHP commands to the "php" binary on the application container... +if [ "$1" == "php" ]; then + shift 1 + + if [ "$EXEC" == "yes" ]; then + ARGS+=(exec -u sail) + [ ! -t 0 ] && ARGS+=(-T) + ARGS+=("$APP_SERVICE" "php") + else + sail_is_not_running + fi + +# Proxy vendor binary commands on the application container... +elif [ "$1" == "bin" ]; then + shift 1 + + if [ "$EXEC" == "yes" ]; then + CMD=$1 + shift 1 + ARGS+=(exec -u sail) + [ ! -t 0 ] && ARGS+=(-T) + ARGS+=("$APP_SERVICE" ./vendor/bin/"$CMD") + else + sail_is_not_running + fi + +# Proxy docker-compose commands to the docker-compose binary on the application container... +elif [ "$1" == "docker-compose" ]; then + shift 1 + + if [ "$EXEC" == "yes" ]; then + ARGS+=(exec -u sail) + [ ! -t 0 ] && ARGS+=(-T) + ARGS+=("$APP_SERVICE" "${DOCKER_COMPOSE[@]}") + else + sail_is_not_running + fi + +# Proxy Composer commands to the "composer" binary on the application container... +elif [ "$1" == "composer" ]; then + shift 1 + + if [ "$EXEC" == "yes" ]; then + ARGS+=(exec -u sail) + [ ! -t 0 ] && ARGS+=(-T) + ARGS+=("$APP_SERVICE" "composer") + else + sail_is_not_running + fi + +# Proxy Artisan commands to the "artisan" binary on the application container... +elif [ "$1" == "artisan" ] || [ "$1" == "art" ] || [ "$1" == "a" ]; then + shift 1 + + if [ "$EXEC" == "yes" ]; then + ARGS+=(exec -u sail) + [ ! -t 0 ] && ARGS+=(-T) + ARGS+=("$APP_SERVICE" php artisan) + else + sail_is_not_running + fi + +# Proxy the "debug" command to the "php artisan" binary on the application container with xdebug enabled... +elif [ "$1" == "debug" ]; then + shift 1 + + if [ "$EXEC" == "yes" ]; then + ARGS+=(exec -u sail -e XDEBUG_TRIGGER=1) + [ ! -t 0 ] && ARGS+=(-T) + ARGS+=("$APP_SERVICE" php artisan) + else + sail_is_not_running + fi + +# Proxy the "test" command to the "php artisan test" Artisan command... +elif [ "$1" == "test" ]; then + shift 1 + + if [ "$EXEC" == "yes" ]; then + ARGS+=(exec -u sail) + [ ! -t 0 ] && ARGS+=(-T) + ARGS+=("$APP_SERVICE" php artisan test) + else + sail_is_not_running + fi + +# Proxy the "phpunit" command to "php vendor/bin/phpunit"... +elif [ "$1" == "phpunit" ]; then + shift 1 + + if [ "$EXEC" == "yes" ]; then + ARGS+=(exec -u sail) + [ ! -t 0 ] && ARGS+=(-T) + ARGS+=("$APP_SERVICE" php vendor/bin/phpunit) + else + sail_is_not_running + fi + +# Proxy the "pest" command to "php vendor/bin/pest"... +elif [ "$1" == "pest" ]; then + shift 1 + + if [ "$EXEC" == "yes" ]; then + ARGS+=(exec -u sail) + [ ! -t 0 ] && ARGS+=(-T) + ARGS+=("$APP_SERVICE" php vendor/bin/pest) + else + sail_is_not_running + fi + +# Proxy the "pint" command to "php vendor/bin/pint"... +elif [ "$1" == "pint" ]; then + shift 1 + + if [ "$EXEC" == "yes" ]; then + ARGS+=(exec -u sail) + [ ! -t 0 ] && ARGS+=(-T) + ARGS+=("$APP_SERVICE" php vendor/bin/pint) + else + sail_is_not_running + fi + +# Proxy the "dusk" command to the "php artisan dusk" Artisan command... +elif [ "$1" == "dusk" ]; then + shift 1 + + if [ "$EXEC" == "yes" ]; then + ARGS+=(exec -u sail) + [ ! -t 0 ] && ARGS+=(-T) + ARGS+=(-e "APP_URL=http://${APP_SERVICE}") + ARGS+=(-e "DUSK_DRIVER_URL=http://selenium:4444/wd/hub") + ARGS+=("$APP_SERVICE" php artisan dusk) + else + sail_is_not_running + fi + +# Proxy the "dusk:fails" command to the "php artisan dusk:fails" Artisan command... +elif [ "$1" == "dusk:fails" ]; then + shift 1 + + if [ "$EXEC" == "yes" ]; then + ARGS+=(exec -u sail) + [ ! -t 0 ] && ARGS+=(-T) + ARGS+=(-e "APP_URL=http://${APP_SERVICE}") + ARGS+=(-e "DUSK_DRIVER_URL=http://selenium:4444/wd/hub") + ARGS+=("$APP_SERVICE" php artisan dusk:fails) + else + sail_is_not_running + fi + +# Initiate a Laravel Tinker session within the application container... +elif [ "$1" == "tinker" ]; then + shift 1 + + if [ "$EXEC" == "yes" ]; then + ARGS+=(exec -u sail) + [ ! -t 0 ] && ARGS+=(-T) + ARGS+=("$APP_SERVICE" php artisan tinker) + else + sail_is_not_running + fi + +# Proxy Node commands to the "node" binary on the application container... +elif [ "$1" == "node" ]; then + shift 1 + + if [ "$EXEC" == "yes" ]; then + ARGS+=(exec -u sail) + [ ! -t 0 ] && ARGS+=(-T) + ARGS+=("$APP_SERVICE" node) + else + sail_is_not_running + fi + +# Proxy NPM commands to the "npm" binary on the application container... +elif [ "$1" == "npm" ]; then + shift 1 + + if [ "$EXEC" == "yes" ]; then + ARGS+=(exec -u sail) + [ ! -t 0 ] && ARGS+=(-T) + ARGS+=("$APP_SERVICE" npm) + else + sail_is_not_running + fi + +# Proxy NPX commands to the "npx" binary on the application container... +elif [ "$1" == "npx" ]; then + shift 1 + + if [ "$EXEC" == "yes" ]; then + ARGS+=(exec -u sail) + [ ! -t 0 ] && ARGS+=(-T) + ARGS+=("$APP_SERVICE" npx) + else + sail_is_not_running + fi + +# Proxy PNPM commands to the "pnpm" binary on the application container... +elif [ "$1" == "pnpm" ]; then + shift 1 + + if [ "$EXEC" == "yes" ]; then + ARGS+=(exec -u sail) + [ ! -t 0 ] && ARGS+=(-T) + ARGS+=("$APP_SERVICE" pnpm) + else + sail_is_not_running + fi + +# Proxy PNPX commands to the "pnpx" binary on the application container... +elif [ "$1" == "pnpx" ]; then + shift 1 + + if [ "$EXEC" == "yes" ]; then + ARGS+=(exec -u sail) + [ ! -t 0 ] && ARGS+=(-T) + ARGS+=("$APP_SERVICE" pnpx) + else + sail_is_not_running + fi + +# Proxy Yarn commands to the "yarn" binary on the application container... +elif [ "$1" == "yarn" ]; then + shift 1 + + if [ "$EXEC" == "yes" ]; then + ARGS+=(exec -u sail) + [ ! -t 0 ] && ARGS+=(-T) + ARGS+=("$APP_SERVICE" yarn) + else + sail_is_not_running + fi + +# Proxy Bun commands to the "bun" binary on the application container... +elif [ "$1" == "bun" ]; then + shift 1 + + if [ "$EXEC" == "yes" ]; then + ARGS+=(exec -u sail) + [ ! -t 0 ] && ARGS+=(-T) + ARGS+=("$APP_SERVICE" bun) + else + sail_is_not_running + fi + +# Proxy Bun X commands to the "bunx" binary on the application container... +elif [ "$1" == "bunx" ]; then + shift 1 + + if [ "$EXEC" == "yes" ]; then + ARGS+=(exec -u sail) + [ ! -t 0 ] && ARGS+=(-T) + ARGS+=("$APP_SERVICE" bunx) + else + sail_is_not_running + fi + +# Initiate a MySQL CLI terminal session within the "mysql" container... +elif [ "$1" == "mysql" ]; then + shift 1 + + if [ "$EXEC" == "yes" ]; then + ARGS+=(exec) + [ ! -t 0 ] && ARGS+=(-T) + ARGS+=(mysql bash -c) + ARGS+=("MYSQL_PWD=\${MYSQL_PASSWORD} mysql -u \${MYSQL_USER} \${MYSQL_DATABASE}") + else + sail_is_not_running + fi + +# Initiate a MySQL CLI terminal session within the "mariadb" container... +elif [ "$1" == "mariadb" ]; then + shift 1 + + if [ "$EXEC" == "yes" ]; then + ARGS+=(exec) + [ ! -t 0 ] && ARGS+=(-T) + ARGS+=(mariadb bash -c) + ARGS+=("MYSQL_PWD=\${MYSQL_PASSWORD} mariadb -u \${MYSQL_USER} \${MYSQL_DATABASE}") + else + sail_is_not_running + fi + +# Initiate a PostgreSQL CLI terminal session within the "pgsql" container... +elif [ "$1" == "psql" ]; then + shift 1 + + if [ "$EXEC" == "yes" ]; then + ARGS+=(exec) + [ ! -t 0 ] && ARGS+=(-T) + ARGS+=(pgsql bash -c) + ARGS+=("PGPASSWORD=\${PGPASSWORD} psql -U \${POSTGRES_USER} \${POSTGRES_DB}") + else + sail_is_not_running + fi + +# Initiate a Bash shell within the application container... +elif [ "$1" == "shell" ] || [ "$1" == "bash" ]; then + shift 1 + + if [ "$EXEC" == "yes" ]; then + ARGS+=(exec -u sail) + [ ! -t 0 ] && ARGS+=(-T) + ARGS+=("$APP_SERVICE" bash) + else + sail_is_not_running + fi + +# Initiate a root user Bash shell within the application container... +elif [ "$1" == "root-shell" ] || [ "$1" == "root-bash" ]; then + shift 1 + + if [ "$EXEC" == "yes" ]; then + ARGS+=(exec -u root) + [ ! -t 0 ] && ARGS+=(-T) + ARGS+=("$APP_SERVICE" bash) + else + sail_is_not_running + fi + +# Initiate a MongoDB Shell within the "mongodb" container... +elif [ "$1" == "mongodb" ]; then + shift 1 + + if [ "$EXEC" == "yes" ]; then + ARGS+=(exec) + [ ! -t 0 ] && ARGS+=(-T) + ARGS+=(mongodb mongosh --port "${FORWARD_MONGODB_PORT:-27017}" --username "$MONGODB_USERNAME" --password "$MONGODB_PASSWORD" --authenticationDatabase admin) + else + sail_is_not_running + fi + +# Initiate a Redis CLI terminal session within the "redis" container... +elif [ "$1" == "redis" ]; then + shift 1 + + if [ "$EXEC" == "yes" ]; then + ARGS+=(exec) + [ ! -t 0 ] && ARGS+=(-T) + ARGS+=(redis redis-cli) + else + sail_is_not_running + fi + +# Share the site... +elif [ "$1" == "share" ]; then + shift 1 + + if [ "$EXEC" == "yes" ]; then + docker run --init --rm --add-host=host.docker.internal:host-gateway -p "$SAIL_SHARE_DASHBOARD":4040 -t beyondcodegmbh/expose-server:latest share http://host.docker.internal:"$APP_PORT" \ + --server-host="$SAIL_SHARE_SERVER_HOST" \ + --server-port="$SAIL_SHARE_SERVER_PORT" \ + --auth="$SAIL_SHARE_TOKEN" \ + --server="$SAIL_SHARE_SERVER" \ + --subdomain="$SAIL_SHARE_SUBDOMAIN" \ + --domain="$SAIL_SHARE_DOMAIN" \ + "$@" + + exit + else + sail_is_not_running + fi + +# Open the site... +elif [ "$1" == "open" ]; then + shift 1 + + if command -v open &>/dev/null; then + OPEN="open" + elif command -v xdg-open &>/dev/null; then + OPEN="xdg-open" + else + echo "Neither open nor xdg-open is available. Exiting." + exit 1 + fi + + if [ "$EXEC" == "yes" ]; then + + if [[ -n "$APP_PORT" && "$APP_PORT" != "80" ]]; then + FULL_URL="${APP_URL}:${APP_PORT}" + else + FULL_URL="$APP_URL" + fi + + $OPEN "$FULL_URL" + + exit + else + sail_is_not_running + fi +fi + +# Run Docker Compose with the defined arguments... +"${DOCKER_COMPOSE[@]}" "${ARGS[@]}" "$@" diff --git a/storage/app/.gitignore b/storage/app/.gitignore new file mode 100644 index 0000000..fedb287 --- /dev/null +++ b/storage/app/.gitignore @@ -0,0 +1,4 @@ +* +!private/ +!public/ +!.gitignore diff --git a/storage/app/private/.gitignore b/storage/app/private/.gitignore new file mode 100644 index 0000000..d6b7ef3 --- /dev/null +++ b/storage/app/private/.gitignore @@ -0,0 +1,2 @@ +* +!.gitignore diff --git a/storage/app/public/.gitignore b/storage/app/public/.gitignore new file mode 100644 index 0000000..d6b7ef3 --- /dev/null +++ b/storage/app/public/.gitignore @@ -0,0 +1,2 @@ +* +!.gitignore diff --git a/storage/debugbar/.gitignore b/storage/debugbar/.gitignore new file mode 100644 index 0000000..d6b7ef3 --- /dev/null +++ b/storage/debugbar/.gitignore @@ -0,0 +1,2 @@ +* +!.gitignore diff --git a/storage/framework/.gitignore b/storage/framework/.gitignore new file mode 100644 index 0000000..05c4471 --- /dev/null +++ b/storage/framework/.gitignore @@ -0,0 +1,9 @@ +compiled.php +config.php +down +events.scanned.php +maintenance.php +routes.php +routes.scanned.php +schedule-* +services.json diff --git a/storage/framework/cache/.gitignore b/storage/framework/cache/.gitignore new file mode 100644 index 0000000..01e4a6c --- /dev/null +++ b/storage/framework/cache/.gitignore @@ -0,0 +1,3 @@ +* +!data/ +!.gitignore diff --git a/storage/framework/cache/data/.gitignore b/storage/framework/cache/data/.gitignore new file mode 100644 index 0000000..d6b7ef3 --- /dev/null +++ b/storage/framework/cache/data/.gitignore @@ -0,0 +1,2 @@ +* +!.gitignore diff --git a/storage/framework/sessions/.gitignore b/storage/framework/sessions/.gitignore new file mode 100644 index 0000000..d6b7ef3 --- /dev/null +++ b/storage/framework/sessions/.gitignore @@ -0,0 +1,2 @@ +* +!.gitignore diff --git a/storage/framework/testing/.gitignore b/storage/framework/testing/.gitignore new file mode 100644 index 0000000..d6b7ef3 --- /dev/null +++ b/storage/framework/testing/.gitignore @@ -0,0 +1,2 @@ +* +!.gitignore diff --git a/storage/framework/views/.gitignore b/storage/framework/views/.gitignore new file mode 100644 index 0000000..d6b7ef3 --- /dev/null +++ b/storage/framework/views/.gitignore @@ -0,0 +1,2 @@ +* +!.gitignore diff --git a/storage/logs/.gitignore b/storage/logs/.gitignore new file mode 100644 index 0000000..d6b7ef3 --- /dev/null +++ b/storage/logs/.gitignore @@ -0,0 +1,2 @@ +* +!.gitignore diff --git a/tailwind.config.js b/tailwind.config.js new file mode 100644 index 0000000..1508cb1 --- /dev/null +++ b/tailwind.config.js @@ -0,0 +1,59 @@ +import defaultTheme from "tailwindcss/defaultTheme"; +import forms from "@tailwindcss/forms"; + +/** @type {import('tailwindcss').Config} */ +export default { + content: [ + "./vendor/laravel/framework/src/Illuminate/Pagination/resources/views/*.blade.php", + "./storage/framework/views/*.php", + "./resources/views/**/*.blade.php", + "./node_modules/flowbite/**/*.js", + "./node_modules/preline/dist/*.js", + "./node_modules/jquery/dist/jquery.min.js", + "./node_modules/datatables.net/js/dataTables.min.js", + ], + + theme: { + extend: { + keyframes: { + customBounce: { + "0%, 100%": { transform: "translateY(0)" }, + "50%": { transform: "translateY(-10px)" }, + }, + }, + fontFamily: { + primary: ["Poppins", ...defaultTheme.fontFamily.sans], + }, + colors: { + primary: "#1570EF", + secondary: "#53B1FD", + navy: "#1B2559", + purple: "#707EAE", + body: "#F4F7FE", + success: "#05CD99", + successHover: "#6FEACA", + }, + animation: { + CustomBounce : "customBounce 2s ease-in-out infinite" + } + }, + container: { + center: true, + padding: { + DEFAULT: "1rem", + sm: "2rem", + lg: "4rem", + xl: "5rem", + "2xl": "6rem", + }, + }, + }, + + plugins: [ + forms, + require("preline/plugin"), + require("flowbite/plugin")({ + datatables: true, + }), + ], +}; diff --git a/tests/Feature/Auth/AuthenticationTest.php b/tests/Feature/Auth/AuthenticationTest.php new file mode 100644 index 0000000..13dcb7c --- /dev/null +++ b/tests/Feature/Auth/AuthenticationTest.php @@ -0,0 +1,54 @@ +get('/login'); + + $response->assertStatus(200); + } + + public function test_users_can_authenticate_using_the_login_screen(): void + { + $user = User::factory()->create(); + + $response = $this->post('/login', [ + 'email' => $user->email, + 'password' => 'password', + ]); + + $this->assertAuthenticated(); + $response->assertRedirect(route('dashboard', absolute: false)); + } + + public function test_users_can_not_authenticate_with_invalid_password(): void + { + $user = User::factory()->create(); + + $this->post('/login', [ + 'email' => $user->email, + 'password' => 'wrong-password', + ]); + + $this->assertGuest(); + } + + public function test_users_can_logout(): void + { + $user = User::factory()->create(); + + $response = $this->actingAs($user)->post('/logout'); + + $this->assertGuest(); + $response->assertRedirect('/'); + } +} diff --git a/tests/Feature/Auth/EmailVerificationTest.php b/tests/Feature/Auth/EmailVerificationTest.php new file mode 100644 index 0000000..705570b --- /dev/null +++ b/tests/Feature/Auth/EmailVerificationTest.php @@ -0,0 +1,58 @@ +unverified()->create(); + + $response = $this->actingAs($user)->get('/verify-email'); + + $response->assertStatus(200); + } + + public function test_email_can_be_verified(): void + { + $user = User::factory()->unverified()->create(); + + Event::fake(); + + $verificationUrl = URL::temporarySignedRoute( + 'verification.verify', + now()->addMinutes(60), + ['id' => $user->id, 'hash' => sha1($user->email)] + ); + + $response = $this->actingAs($user)->get($verificationUrl); + + Event::assertDispatched(Verified::class); + $this->assertTrue($user->fresh()->hasVerifiedEmail()); + $response->assertRedirect(route('dashboard', absolute: false).'?verified=1'); + } + + public function test_email_is_not_verified_with_invalid_hash(): void + { + $user = User::factory()->unverified()->create(); + + $verificationUrl = URL::temporarySignedRoute( + 'verification.verify', + now()->addMinutes(60), + ['id' => $user->id, 'hash' => sha1('wrong-email')] + ); + + $this->actingAs($user)->get($verificationUrl); + + $this->assertFalse($user->fresh()->hasVerifiedEmail()); + } +} diff --git a/tests/Feature/Auth/PasswordConfirmationTest.php b/tests/Feature/Auth/PasswordConfirmationTest.php new file mode 100644 index 0000000..ff85721 --- /dev/null +++ b/tests/Feature/Auth/PasswordConfirmationTest.php @@ -0,0 +1,44 @@ +create(); + + $response = $this->actingAs($user)->get('/confirm-password'); + + $response->assertStatus(200); + } + + public function test_password_can_be_confirmed(): void + { + $user = User::factory()->create(); + + $response = $this->actingAs($user)->post('/confirm-password', [ + 'password' => 'password', + ]); + + $response->assertRedirect(); + $response->assertSessionHasNoErrors(); + } + + public function test_password_is_not_confirmed_with_invalid_password(): void + { + $user = User::factory()->create(); + + $response = $this->actingAs($user)->post('/confirm-password', [ + 'password' => 'wrong-password', + ]); + + $response->assertSessionHasErrors(); + } +} diff --git a/tests/Feature/Auth/PasswordResetTest.php b/tests/Feature/Auth/PasswordResetTest.php new file mode 100644 index 0000000..aa50350 --- /dev/null +++ b/tests/Feature/Auth/PasswordResetTest.php @@ -0,0 +1,73 @@ +get('/forgot-password'); + + $response->assertStatus(200); + } + + public function test_reset_password_link_can_be_requested(): void + { + Notification::fake(); + + $user = User::factory()->create(); + + $this->post('/forgot-password', ['email' => $user->email]); + + Notification::assertSentTo($user, ResetPassword::class); + } + + public function test_reset_password_screen_can_be_rendered(): void + { + Notification::fake(); + + $user = User::factory()->create(); + + $this->post('/forgot-password', ['email' => $user->email]); + + Notification::assertSentTo($user, ResetPassword::class, function ($notification) { + $response = $this->get('/reset-password/'.$notification->token); + + $response->assertStatus(200); + + return true; + }); + } + + public function test_password_can_be_reset_with_valid_token(): void + { + Notification::fake(); + + $user = User::factory()->create(); + + $this->post('/forgot-password', ['email' => $user->email]); + + Notification::assertSentTo($user, ResetPassword::class, function ($notification) use ($user) { + $response = $this->post('/reset-password', [ + 'token' => $notification->token, + 'email' => $user->email, + 'password' => 'password', + 'password_confirmation' => 'password', + ]); + + $response + ->assertSessionHasNoErrors() + ->assertRedirect(route('login')); + + return true; + }); + } +} diff --git a/tests/Feature/Auth/PasswordUpdateTest.php b/tests/Feature/Auth/PasswordUpdateTest.php new file mode 100644 index 0000000..ca28c6c --- /dev/null +++ b/tests/Feature/Auth/PasswordUpdateTest.php @@ -0,0 +1,51 @@ +create(); + + $response = $this + ->actingAs($user) + ->from('/profile') + ->put('/password', [ + 'current_password' => 'password', + 'password' => 'new-password', + 'password_confirmation' => 'new-password', + ]); + + $response + ->assertSessionHasNoErrors() + ->assertRedirect('/profile'); + + $this->assertTrue(Hash::check('new-password', $user->refresh()->password)); + } + + public function test_correct_password_must_be_provided_to_update_password(): void + { + $user = User::factory()->create(); + + $response = $this + ->actingAs($user) + ->from('/profile') + ->put('/password', [ + 'current_password' => 'wrong-password', + 'password' => 'new-password', + 'password_confirmation' => 'new-password', + ]); + + $response + ->assertSessionHasErrorsIn('updatePassword', 'current_password') + ->assertRedirect('/profile'); + } +} diff --git a/tests/Feature/Auth/RegistrationTest.php b/tests/Feature/Auth/RegistrationTest.php new file mode 100644 index 0000000..1489d0e --- /dev/null +++ b/tests/Feature/Auth/RegistrationTest.php @@ -0,0 +1,31 @@ +get('/register'); + + $response->assertStatus(200); + } + + public function test_new_users_can_register(): void + { + $response = $this->post('/register', [ + 'name' => 'Test User', + 'email' => 'test@example.com', + 'password' => 'password', + 'password_confirmation' => 'password', + ]); + + $this->assertAuthenticated(); + $response->assertRedirect(route('dashboard', absolute: false)); + } +} diff --git a/tests/Feature/ExampleTest.php b/tests/Feature/ExampleTest.php new file mode 100644 index 0000000..8364a84 --- /dev/null +++ b/tests/Feature/ExampleTest.php @@ -0,0 +1,19 @@ +get('/'); + + $response->assertStatus(200); + } +} diff --git a/tests/Feature/ProfileTest.php b/tests/Feature/ProfileTest.php new file mode 100644 index 0000000..252fdcc --- /dev/null +++ b/tests/Feature/ProfileTest.php @@ -0,0 +1,99 @@ +create(); + + $response = $this + ->actingAs($user) + ->get('/profile'); + + $response->assertOk(); + } + + public function test_profile_information_can_be_updated(): void + { + $user = User::factory()->create(); + + $response = $this + ->actingAs($user) + ->patch('/profile', [ + 'name' => 'Test User', + 'email' => 'test@example.com', + ]); + + $response + ->assertSessionHasNoErrors() + ->assertRedirect('/profile'); + + $user->refresh(); + + $this->assertSame('Test User', $user->name); + $this->assertSame('test@example.com', $user->email); + $this->assertNull($user->email_verified_at); + } + + public function test_email_verification_status_is_unchanged_when_the_email_address_is_unchanged(): void + { + $user = User::factory()->create(); + + $response = $this + ->actingAs($user) + ->patch('/profile', [ + 'name' => 'Test User', + 'email' => $user->email, + ]); + + $response + ->assertSessionHasNoErrors() + ->assertRedirect('/profile'); + + $this->assertNotNull($user->refresh()->email_verified_at); + } + + public function test_user_can_delete_their_account(): void + { + $user = User::factory()->create(); + + $response = $this + ->actingAs($user) + ->delete('/profile', [ + 'password' => 'password', + ]); + + $response + ->assertSessionHasNoErrors() + ->assertRedirect('/'); + + $this->assertGuest(); + $this->assertNull($user->fresh()); + } + + public function test_correct_password_must_be_provided_to_delete_account(): void + { + $user = User::factory()->create(); + + $response = $this + ->actingAs($user) + ->from('/profile') + ->delete('/profile', [ + 'password' => 'wrong-password', + ]); + + $response + ->assertSessionHasErrorsIn('userDeletion', 'password') + ->assertRedirect('/profile'); + + $this->assertNotNull($user->fresh()); + } +} diff --git a/tests/TestCase.php b/tests/TestCase.php new file mode 100644 index 0000000..fe1ffc2 --- /dev/null +++ b/tests/TestCase.php @@ -0,0 +1,10 @@ +isEmpty()) { + $this->fail("Tidak ada data alternatif dalam database."); + } + + $submissions = []; + + foreach ($mahasiswa as [$name, $nim, $tahun]) { + $user = User::where('email', strtolower($nim) . '@student.polije.ac.id')->first(); + + if (!$user) { + Log::warning("Mahasiswa dengan NIM {$nim} tidak ditemukan."); + continue; + } + + $submission = Submissions::factory()->create(['id' => $user->id]); + $submissions[] = $submission; + } + + foreach ($submissions as $submission) { + $chosenAlternatifs = $alternatifs->shuffle()->take(1)->pluck('id_alternatif'); + + foreach ($chosenAlternatifs as $id_alternatif) { + SubmissionDetail::factory()->create([ + 'id_submission' => $submission->id_submission, + 'id_alternatif' => $id_alternatif, + ]); + } + } + + $processedSubmissions = []; + + foreach ($submissions as $submission) { + if (in_array($submission->id_submission, $processedSubmissions)) { + Log::warning("Skipping duplicate dispatch for Submission ID: {$submission->id_submission}"); + continue; + } + + $chosenAlternatifs = SubmissionDetail::where('id_submission', $submission->id_submission) + ->pluck('id_alternatif') + ->toArray(); + + if (count($chosenAlternatifs) === 1) { + // Log::info("Dispatching event for Submission ID: {$submission->id_submission}"); + // Log::info("Alternatif terpilih untuk angkatan {$submission->angkatan}: " . json_encode($chosenAlternatifs)); + // event(new SubmissionCreated($submission)); + + $processedSubmissions[] = $submission->id_submission; + } else { + Log::warning("Skipping event for Submission ID: {$submission->id_submission}, expected 1 alternatives but got " . count($chosenAlternatifs)); + } + } + + $this->assertTrue(true); + } +} \ No newline at end of file diff --git a/tests/Unit/ExampleTest.php b/tests/Unit/ExampleTest.php new file mode 100644 index 0000000..5773b0c --- /dev/null +++ b/tests/Unit/ExampleTest.php @@ -0,0 +1,16 @@ +assertTrue(true); + } +} diff --git a/vite.config.js b/vite.config.js new file mode 100644 index 0000000..421b569 --- /dev/null +++ b/vite.config.js @@ -0,0 +1,11 @@ +import { defineConfig } from 'vite'; +import laravel from 'laravel-vite-plugin'; + +export default defineConfig({ + plugins: [ + laravel({ + input: ['resources/css/app.css', 'resources/js/app.js'], + refresh: true, + }), + ], +});

    -rmRc8LcX7N7^30FsJ2|R+M%39`1*UE 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 SzJC`W21rFgUA_ut8uC9?Ubw~p literal 0 HcmV?d00001 diff --git a/public/static/image/logo_polije.png b/public/static/image/logo_polije.png new file mode 100644 index 0000000000000000000000000000000000000000..5ec57712e4f8158c075543d8c9750c09ec66b663 GIT binary patch literal 21716 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 literal 0 HcmV?d00001 diff --git a/public/static/image/profile-placeholder.jpg b/public/static/image/profile-placeholder.jpg new file mode 100644 index 0000000000000000000000000000000000000000..4defc01fa419556bf8850276f9f69e2de4ece550 GIT binary patch literal 23581 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 literal 0 HcmV?d00001 diff --git a/resources/css/app.css b/resources/css/app.css new file mode 100644 index 0000000..20614e3 --- /dev/null +++ b/resources/css/app.css @@ -0,0 +1,217 @@ +@tailwind base; +@tailwind components; +@tailwind utilities; + +html, +body { + overflow: hidden !important; + scroll-behavior: smooth; +} + +.dt-layout-row:has(.dt-search), +.dt-layout-row:has(.dt-length), +.dt-layout-row:has(.dt-paging) { + display: none !important; +} + +.dt-empty { + height: 125px; + justify-content: center; + align-items: center; + text-align: center; +} + +.scroll-tab::-webkit-scrollbar { + display: none !important; +} + +.scroll-tab { + -ms-overflow-style: none !important; + scrollbar-width: none !important; +} + +.swiper-slide { + width: 248px !important; + transition: + all 1s ease, + opacity 0.5s ease !important; +} + +.swiper-slide img { + transition: all 1s ease !important; +} + +.swiper-slide-active { + width: 472px !important; + /* height: 300px !important; */ + transform: scale(1.2); + opacity: 1; + z-index: 2; + cursor: pointer; +} + +.swiper-slide img { + transition: all 500ms ease-in-out !important; + opacity: 0.5; +} + +.swiper-slide-active #profile-card { + display: flex; + flex-direction: column; + justify-content: center; + align-items: center; + text-align: center; +} + +.swiper-slide-active img { + width: 100px !important; + height: 100px !important; + opacity: 1; +} + +.swiper-slide-active .text-content-swipper { + margin-top: 1.5rem; + display: block; + opacity: 1; +} + +.swiper-pagination { + position: relative !important; + bottom: 0; + background: transparent !important; + display: flex; + align-items: center; + justify-content: center; + width: auto; +} + +#navbutton:hover .menu-line:nth-child(1) { + opacity: 0; + transform: translateY(5px); +} + +#navbutton:hover .menu-line:nth-child(2) { + transform: translateY(-5px) scale(1.2); +} + +#navbutton.open .menu-line:nth-child(1) { + opacity: 1; + transform: translateY(4px) translateX(-3px) rotate(38deg); +} + +#navbutton.open .menu-line:nth-child(2) { + transform: translateY(-3px) translateX(-3px) rotate(-38deg); +} + +.menu-wrap.menu-wrap--open { + pointer-events: auto; + opacity: 1; +} + +.frame--menu-open #navbutton { + display: flex !important; + visibility: visible !important; + opacity: 1 !important; + z-index: 100 !important; +} + +.frame--menu-open { + backdrop-filter: blur(1.5rem); +} + +.frame--menu-open #navheader-right { + position: relative; + opacity: 1; + z-index: 100; + will-change: transform, opacity; +} + +.menu-wrap.menu-wrap--open { + position: fixed; + top: 0; + left: 0; + right: 0; + bottom: 0; + z-index: 50; +} + +.hover-underline { + color: #ffffff; + position: relative; + display: inline-block; +} + +.hover-underline::after { + content: ""; + position: absolute; + width: 100%; + height: 2px; + background: #ffffff; + bottom: -5px; + left: 0; + transform: scaleX(-0); + transform-origin: left; + transition: transform 0.4s ease-out; +} + +.hover-underline:hover::after { + transform: scaleX(1); +} + +.hover-underline-expertise { + color: #000; + position: relative; +} + +.hover-underline-expertise::after { + content: ""; + position: absolute; + width: 100%; + height: 2px; + color: transparent; + background: #020617; + bottom: -5px; + left: 0; + transform: scaleX(-0); + transform-origin: left; + transition: transform 0.4s ease-out; +} + +.hover-underline-expertise:hover::after { + transform: scaleX(1); +} + +@media (max-width: 1024px) { + .swiper-slide { + width: 220px !important; + } + + .swiper-slide-active { + width: 360px !important; + } +} + +@media (max-width: 768px) { + .swiper-slide { + width: 180px !important; + } + + .swiper-slide-active { + width: 280px !important; + } +} + +@media (max-width: 480px) { + .swiper-slide { + width: 150px !important; + } + + .swiper-slide-active { + width: 250px !important; + } + + .swiper-slide-active img { + width: 80px !important; + height: 80px !important; + } +} diff --git a/resources/js/animated/navigation.js b/resources/js/animated/navigation.js new file mode 100644 index 0000000..5c3ecfe --- /dev/null +++ b/resources/js/animated/navigation.js @@ -0,0 +1,169 @@ +import gsap from "gsap"; + +// DOM elements +const DOM = { + frame: document.querySelector(".frame"), + overlayPath: document.querySelector(".overlay__path"), + menuWrap: document.querySelector(".menu-wrap"), + menuItems: document.querySelectorAll(".menu__item"), + openMenuCtrl: document.querySelector("button#navbutton"), + closeMenuCtrl: document.querySelector(".button#navbutton.open"), + menuToggle: document.querySelector("#navbutton"), + brand: document.querySelector("#brand"), + navLink: document.querySelectorAll("#nav-link"), +}; + +let isAnimating = false; + +const openMenu = () => { + if (isAnimating) return; + isAnimating = true; + DOM.menuToggle.classList.add("open"); + + gsap.timeline({ + onComplete: () => { + isAnimating = false; + }, + }) + .set(DOM.overlayPath, { + attr: { d: "M 0 100 V 100 Q 50 100 100 100 V 100 z" }, + }) + .to( + DOM.overlayPath, + { + duration: 0.8, + ease: "power4.in", + attr: { d: "M 0 100 V 50 Q 50 0 100 50 V 100 z" }, + }, + 0 + ) + .to(DOM.overlayPath, { + duration: 0.3, + ease: "power2", + attr: { d: "M 0 100 V 0 Q 50 0 100 0 V 100 z" }, + onComplete: () => { + DOM.frame.classList.add("frame--menu-open"); + DOM.menuWrap.classList.add("menu-wrap--open"); + }, + }) + .set(DOM.menuItems, { opacity: 0 }) + .set(DOM.overlayPath, { + attr: { d: "M 0 0 V 100 Q 50 100 100 100 V 0 z" }, + }) + .to(DOM.overlayPath, { + duration: 0.3, + ease: "power2.in", + attr: { d: "M 0 0 V 50 Q 50 0 100 50 V 0 z" }, + }) + .to(DOM.overlayPath, { + duration: 0.8, + ease: "power4", + attr: { d: "M 0 0 V 0 Q 50 0 100 0 V 0 z" }, + }) + .to( + DOM.menuItems, + { + duration: 1.1, + ease: "power4", + startAt: { y: 150 }, + y: 0, + opacity: 1, + stagger: 0.05, + }, + ">-=1.1" + ); +}; + +const closeMenu = () => { + if (isAnimating) return; + isAnimating = true; + DOM.menuToggle.classList.remove("open"); + + gsap.timeline({ + onComplete: () => { + isAnimating = false; + }, + }) + .set(DOM.overlayPath, { attr: { d: "M 0 0 V 0 Q 50 0 100 0 V 0 z" } }) + .to( + DOM.overlayPath, + { + duration: 0.8, + ease: "power4.in", + attr: { d: "M 0 0 V 50 Q 50 100 100 50 V 0 z" }, + }, + 0 + ) + .to(DOM.overlayPath, { + duration: 0.3, + ease: "power2", + attr: { d: "M 0 0 V 100 Q 50 100 100 100 V 0 z" }, + onComplete: () => { + DOM.frame.classList.remove("frame--menu-open"); + DOM.menuWrap.classList.remove("menu-wrap--open"); + }, + }) + .set(DOM.overlayPath, { + attr: { d: "M 0 100 V 0 Q 50 0 100 0 V 100 z" }, + }) + .to(DOM.overlayPath, { + duration: 0.3, + ease: "power2.in", + attr: { d: "M 0 100 V 50 Q 50 100 100 50 V 100 z" }, + }) + .to(DOM.overlayPath, { + duration: 0.8, + ease: "power4", + attr: { d: "M 0 100 V 100 Q 50 100 100 100 V 100 z" }, + }) + .to( + DOM.menuItems, + { + duration: 0.8, + ease: "power2.in", + y: 100, + opacity: 0, + stagger: -0.05, + }, + 0 + ); +}; + +const handleScroll = () => { + const contentSection = document.querySelector("#content-report"); + const isPendahuluan = window.location.hash === "#pendahuluan"; + + if (!contentSection) return; + const contentTop = contentSection.offsetTop; + const contentHeight = contentSection.offsetHeight; + const scrollPosition = window.scrollY; + const idInContent = scrollPosition >= contentTop && scrollPosition <= contentTop + contentHeight; + + DOM.navLink.forEach((link) => { + link.classList.toggle("text-white", !idInContent && !isPendahuluan); + link.classList.toggle("text-neutral-950", idInContent || isPendahuluan); + }); + + DOM.brand.classList.toggle("text-white", !idInContent && !isPendahuluan); + DOM.brand.classList.toggle("text-neutral-950", idInContent || isPendahuluan); +}; + +const initScrollEvents = () => { + window.addEventListener("scroll", () => requestAnimationFrame(handleScroll)); + window.addEventListener("hashchange", handleScroll); + handleScroll(); +}; + +export function initNavigation() { + if (!DOM.menuToggle) return; + + DOM.menuToggle.addEventListener("click", function () { + if (DOM.frame.classList.contains("frame--menu-open")) { + closeMenu(); + } else { + openMenu(); + } + }); + + initScrollEvents(); +} diff --git a/resources/js/app.js b/resources/js/app.js new file mode 100644 index 0000000..06a845d --- /dev/null +++ b/resources/js/app.js @@ -0,0 +1,209 @@ +import "./bootstrap"; +import "flowbite"; +import "preline"; +import Swiper from "swiper"; +import { Navigation, Pagination } from "swiper/modules"; +import "swiper/css"; +import "swiper/css/navigation"; +import "swiper/css/pagination"; +import Lenis from "lenis"; +import Alpine from "alpinejs"; +import HSStepper from "@preline/stepper"; +import HSDataTable from "@preline/datatable"; +import { initNavigation } from "./animated/navigation"; +import gsap from "gsap"; +import { ScrollTrigger } from "gsap/ScrollTrigger"; + +gsap.registerPlugin(ScrollTrigger); + +const lenis = new Lenis(); + +lenis.on("scroll", ScrollTrigger.update); + +gsap.ticker.add((time) => { + lenis.raf(time * 1000); +}); + +gsap.ticker.lagSmoothing(0); + +window.Alpine = Alpine; + +Alpine.start(); + +// if ( +// document.getElementById("pagination-table") && +// typeof simpleDatatables.DataTable !== "undefined" +// ) { +// const dataTable = new simpleDatatables.DataTable("#pagination-table", { +// paging: true, +// perPage: 10, +// perPageSelect: [10, 15, 20, 25], +// sortable: true, +// firstLast: true, +// nextPrev: true, +// searchable: true, +// sensitivity: "base", +// searchQuerySeparator: " ", +// }); +// } + +function formatPresentase(input) { + let value = parseInt(input.value.replace(/[^0-9]/g, ""), 10); + + if (isNaN(value) || value < 0) { + value = 0; + } else if (value > 100) { + value = 100; + } + + input.value = value + "%"; +} + +window.formatPresentase = formatPresentase; + +let selectedCount = 0; + +function limitCheckboxes(checkbox) { + const checkboxes = document.querySelectorAll(".checkbox"); + + if (checkbox.checked) { + selectedCount++; + } else { + selectedCount--; + } + + if (selectedCount >= 3) { + checkboxes.forEach(function (cb) { + if (!cb.checked) { + cb.disabled = true; + } + }); + } else { + checkboxes.forEach(function (cb) { + cb.disabled = false; + }); + } +} + +// window.addEventListener("load", () => { +// (function () { +// const { dataTable } = new HSDataTable("#hs-datatable-with-export"); +// const buttons = document.querySelectorAll( +// "#hs-dropdown-datatable-with-export .hs-dropdown-menu button", +// ); + +// buttons.forEach((btn) => { +// const type = btn.getAttribute("data-hs-datatable-action-type"); + +// btn.addEventListener("click", () => +// dataTable.button(`.buttons-${type}`).trigger(), +// ); +// }); +// })(); +// }); + +document.addEventListener("DOMContentLoaded", function () { + const checkboxes = document.querySelectorAll(".checkbox"); + + checkboxes.forEach(function (checkbox) { + checkbox.addEventListener("click", function () { + limitCheckboxes(checkbox); + }); + }); + + const navbar = document.querySelector(".frame"); + + window.addEventListener("scroll", function () { + if (window.scrollY > 50) { + navbar.classList.add("shadow-md"); + } else { + navbar.classList.remove("shadow-md"); + } + }); + + new Swiper(".slider-testimonials", { + modules: [Navigation, Pagination], + centeredSlides: true, + centeredSlidesBounds: false, + effect: "slide", + lazyLoadingInPrevNext: true, + preloadImages: true, + freeMode: true, + loop: true, + slidesPerView: 3, + slidesPerGroup: 1, + spaceBetween: 10, + breakpoints: { + 320: { + slidesPerView: 1.6, + spaceBetween: 10, + }, + 370: { + slidesPerView: 1.8, + spaceBetween: 15, + }, + 400: { + slidesPerView: 2, + spaceBetween: 0, + }, + 450: { + slidesPerView: 2.3, + spaceBetween: 15, + }, + 500: { + slidesPerView: 2.5, + spaceBetween: 15, + }, + 550: { + slidesPerView: 2.8, + spaceBetween: 15, + }, + 600: { + slidesPerView: 3, + spaceBetween: 20, + }, + 650: { + slidesPerView: 3.2, + }, + 700: { + slidesPerView: 3.5, + }, + 750: { + slidesPerView: 3.7, + }, + 800: { + slidesPerView: 4, + }, + 900: { + slidesPerView: 4.2, + }, + 940: { + slidesPerView: 4.5, + }, + 1024: { + slidesPerView: 4, + spaceBetween: 50, + }, + }, + speed: 800, + pagination: { + el: ".swiper-pagination", + type: "progressbar", + renderProgressbar: function (progressbarFillClass) { + return ( + '' + ); + }, + }, + navigation: { + nextEl: "#button-next", + prevEl: "#button-prev", + }, + }); + + window.HSStaticMethods.autoInit(["select"]); + + initNavigation(); +}); diff --git a/resources/js/bootstrap.js b/resources/js/bootstrap.js new file mode 100644 index 0000000..a8f152f --- /dev/null +++ b/resources/js/bootstrap.js @@ -0,0 +1,12 @@ +import axios from 'axios'; +window.axios = axios; + +window.axios.defaults.headers.common['X-Requested-With'] = 'XMLHttpRequest'; + +/** + * Echo exposes an expressive API for subscribing to channels and listening + * for events that are broadcast by Laravel. Echo and event broadcasting + * allow your team to quickly build robust real-time web applications. + */ + +// import './echo'; diff --git a/resources/js/echo.js b/resources/js/echo.js new file mode 100644 index 0000000..b314315 --- /dev/null +++ b/resources/js/echo.js @@ -0,0 +1,14 @@ +// import Echo from 'laravel-echo'; + +// import Pusher from 'pusher-js'; +// window.Pusher = Pusher; + +// window.Echo = new Echo({ +// broadcaster: 'reverb', +// key: import.meta.env.VITE_REVERB_APP_KEY, +// wsHost: import.meta.env.VITE_REVERB_HOST, +// wsPort: import.meta.env.VITE_REVERB_PORT ?? 80, +// wssPort: import.meta.env.VITE_REVERB_PORT ?? 443, +// forceTLS: (import.meta.env.VITE_REVERB_SCHEME ?? 'https') === 'https', +// enabledTransports: ['ws', 'wss'], +// }); diff --git a/resources/views/components/application-logo.blade.php b/resources/views/components/application-logo.blade.php new file mode 100644 index 0000000..b0b06de --- /dev/null +++ b/resources/views/components/application-logo.blade.php @@ -0,0 +1 @@ +logo_instansi diff --git a/resources/views/components/auth-session-error.blade.php b/resources/views/components/auth-session-error.blade.php new file mode 100644 index 0000000..e3607b6 --- /dev/null +++ b/resources/views/components/auth-session-error.blade.php @@ -0,0 +1,23 @@ +@props(['status']) + +@if ($status) +