From 115c2e318fcd35fefa39f99b63102b6187e830c5 Mon Sep 17 00:00:00 2001 From: Arlinlin <115753202+Arlinlin@users.noreply.github.com> Date: Fri, 28 Jun 2024 14:02:38 +0700 Subject: [PATCH] tugas akhir --- .editorconfig | 18 + .gitattributes | 11 + .gitignore | 19 + app/Http/Controllers/AuthController.php | 62 + app/Http/Controllers/Controller.php | 8 + app/Http/Controllers/DashboardController.php | 106 + .../JenisPelanggaranController.php | 83 + .../KriteriaPelanggaranController.php | 84 + .../Controllers/PelanggaranController.php | 305 + app/Http/Controllers/SanksiController.php | 101 + app/Http/Controllers/SiswaController.php | 98 + app/Http/Controllers/TindakanController.php | 102 + app/Http/Controllers/UserController.php | 88 + app/Http/Middleware/isAuthenticatedAs.php | 24 + app/Models/JenisPelanggaran.php | 19 + app/Models/KriteriaPelanggaran.php | 19 + app/Models/ListPelanggaran.php | 24 + app/Models/Pelanggaran.php | 34 + app/Models/Sanksi.php | 14 + app/Models/Siswa.php | 19 + app/Models/Tindakan.php | 14 + app/Models/User.php | 50 + app/Providers/AppServiceProvider.php | 24 + artisan | 15 + bootstrap/app.php | 21 + bootstrap/cache/.gitignore | 2 + bootstrap/providers.php | 5 + composer.json | 66 + composer.lock | 8153 +++++++++++++++++ config/app.php | 126 + config/auth.php | 115 + config/cache.php | 107 + config/database.php | 170 + config/filesystems.php | 76 + config/logging.php | 132 + config/mail.php | 116 + config/queue.php | 112 + config/services.php | 38 + config/session.php | 217 + database/.gitignore | 1 + database/factories/UserFactory.php | 44 + .../0001_01_01_000000_create_users_table.php | 52 + .../0001_01_01_000001_create_cache_table.php | 35 + .../0001_01_01_000002_create_jobs_table.php | 57 + .../migrations/2024_05_14_141802_siswa.php | 31 + .../migrations/2024_05_15_145837_tindakan.php | 30 + .../2024_05_15_151340_jenis_pelanggaran.php | 39 + .../2024_05_15_160058_pelanggaran.php | 31 + .../migrations/2024_05_15_171111_sanksi.php | 30 + .../2024_05_17_123537_list_pelanggaran.php | 30 + package-lock.json | 2425 +++++ package.json | 20 + phpunit.xml | 33 + postcss.config.js | 6 + public/.htaccess | 21 + public/assets/images/hero.jpeg | Bin 0 -> 26794 bytes public/assets/images/logo.png | Bin 0 -> 130877 bytes public/assets/js/app.js | 3 + public/favicon.ico | 0 public/index.php | 17 + public/robots.txt | 2 + resources/css/app.css | 3 + resources/js/app.js | 7 + resources/js/bootstrap.js | 4 + resources/views/components/flash.blade.php | 15 + resources/views/layouts/app.blade.php | 74 + resources/views/layouts/auth.blade.php | 26 + .../views/layouts/partials/navbar.blade.php | 51 + .../views/layouts/partials/sidebar.blade.php | 82 + resources/views/pages/auth/login.blade.php | 67 + resources/views/pages/auth/register.blade.php | 76 + .../views/pages/dashboard/index.blade.php | 156 + .../jenispelanggaran/create.blade.php | 36 + .../jenispelanggaran/index.blade.php | 131 + .../jenispelanggaran/update.blade.php | 36 + .../kriteriapelanggaran/create.blade.php | 30 + .../kriteriapelanggaran/update.blade.php | 24 + .../dashboard/pelanggaran/create.blade.php | 197 + .../dashboard/pelanggaran/detail.blade.php | 223 + .../dashboard/pelanggaran/index.blade.php | 79 + .../dashboard/pelanggaran/update.blade.php | 197 + .../views/pages/dashboard/profile.blade.php | 97 + .../pages/dashboard/sanksi/create.blade.php | 24 + .../pages/dashboard/sanksi/index.blade.php | 62 + .../pages/dashboard/sanksi/update.blade.php | 24 + .../pages/dashboard/siswa/create.blade.php | 53 + .../pages/dashboard/siswa/index.blade.php | 66 + .../pages/dashboard/siswa/update.blade.php | 53 + .../pages/dashboard/tindakan/create.blade.php | 24 + .../pages/dashboard/tindakan/index.blade.php | 62 + .../pages/dashboard/tindakan/update.blade.php | 24 + .../pages/dashboard/user/create.blade.php | 55 + .../pages/dashboard/user/index.blade.php | 61 + .../pages/dashboard/user/update.blade.php | 50 + routes/console.php | 8 + routes/web.php | 101 + storage/app/.gitignore | 3 + storage/app/public/.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 | 13 + tests/Feature/ExampleTest.php | 19 + tests/TestCase.php | 10 + tests/Unit/ExampleTest.php | 16 + vite.config.js | 11 + 110 files changed, 16078 insertions(+) create mode 100644 .editorconfig create mode 100644 .gitattributes create mode 100644 .gitignore create mode 100644 app/Http/Controllers/AuthController.php create mode 100644 app/Http/Controllers/Controller.php create mode 100644 app/Http/Controllers/DashboardController.php create mode 100644 app/Http/Controllers/JenisPelanggaranController.php create mode 100644 app/Http/Controllers/KriteriaPelanggaranController.php create mode 100644 app/Http/Controllers/PelanggaranController.php create mode 100644 app/Http/Controllers/SanksiController.php create mode 100644 app/Http/Controllers/SiswaController.php create mode 100644 app/Http/Controllers/TindakanController.php create mode 100644 app/Http/Controllers/UserController.php create mode 100644 app/Http/Middleware/isAuthenticatedAs.php create mode 100644 app/Models/JenisPelanggaran.php create mode 100644 app/Models/KriteriaPelanggaran.php create mode 100644 app/Models/ListPelanggaran.php create mode 100644 app/Models/Pelanggaran.php create mode 100644 app/Models/Sanksi.php create mode 100644 app/Models/Siswa.php create mode 100644 app/Models/Tindakan.php create mode 100644 app/Models/User.php create mode 100644 app/Providers/AppServiceProvider.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 composer.lock create mode 100644 config/app.php create mode 100644 config/auth.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/queue.php create mode 100644 config/services.php create mode 100644 config/session.php create mode 100644 database/.gitignore 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/2024_05_14_141802_siswa.php create mode 100644 database/migrations/2024_05_15_145837_tindakan.php create mode 100644 database/migrations/2024_05_15_151340_jenis_pelanggaran.php create mode 100644 database/migrations/2024_05_15_160058_pelanggaran.php create mode 100644 database/migrations/2024_05_15_171111_sanksi.php create mode 100644 database/migrations/2024_05_17_123537_list_pelanggaran.php 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/assets/images/hero.jpeg create mode 100644 public/assets/images/logo.png create mode 100644 public/assets/js/app.js create mode 100644 public/favicon.ico create mode 100644 public/index.php create mode 100644 public/robots.txt create mode 100644 resources/css/app.css create mode 100644 resources/js/app.js create mode 100644 resources/js/bootstrap.js create mode 100644 resources/views/components/flash.blade.php create mode 100644 resources/views/layouts/app.blade.php create mode 100644 resources/views/layouts/auth.blade.php create mode 100644 resources/views/layouts/partials/navbar.blade.php create mode 100644 resources/views/layouts/partials/sidebar.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/dashboard/index.blade.php create mode 100644 resources/views/pages/dashboard/jenispelanggaran/create.blade.php create mode 100644 resources/views/pages/dashboard/jenispelanggaran/index.blade.php create mode 100644 resources/views/pages/dashboard/jenispelanggaran/update.blade.php create mode 100644 resources/views/pages/dashboard/kriteriapelanggaran/create.blade.php create mode 100644 resources/views/pages/dashboard/kriteriapelanggaran/update.blade.php create mode 100644 resources/views/pages/dashboard/pelanggaran/create.blade.php create mode 100644 resources/views/pages/dashboard/pelanggaran/detail.blade.php create mode 100644 resources/views/pages/dashboard/pelanggaran/index.blade.php create mode 100644 resources/views/pages/dashboard/pelanggaran/update.blade.php create mode 100644 resources/views/pages/dashboard/profile.blade.php create mode 100644 resources/views/pages/dashboard/sanksi/create.blade.php create mode 100644 resources/views/pages/dashboard/sanksi/index.blade.php create mode 100644 resources/views/pages/dashboard/sanksi/update.blade.php create mode 100644 resources/views/pages/dashboard/siswa/create.blade.php create mode 100644 resources/views/pages/dashboard/siswa/index.blade.php create mode 100644 resources/views/pages/dashboard/siswa/update.blade.php create mode 100644 resources/views/pages/dashboard/tindakan/create.blade.php create mode 100644 resources/views/pages/dashboard/tindakan/index.blade.php create mode 100644 resources/views/pages/dashboard/tindakan/update.blade.php create mode 100644 resources/views/pages/dashboard/user/create.blade.php create mode 100644 resources/views/pages/dashboard/user/index.blade.php create mode 100644 resources/views/pages/dashboard/user/update.blade.php create mode 100644 routes/console.php create mode 100644 routes/web.php create mode 100644 storage/app/.gitignore create mode 100644 storage/app/public/.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/ExampleTest.php create mode 100644 tests/TestCase.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/.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/.gitignore b/.gitignore new file mode 100644 index 0000000..7fe978f --- /dev/null +++ b/.gitignore @@ -0,0 +1,19 @@ +/.phpunit.cache +/node_modules +/public/build +/public/hot +/public/storage +/storage/*.key +/vendor +.env +.env.backup +.env.production +.phpunit.result.cache +Homestead.json +Homestead.yaml +auth.json +npm-debug.log +yarn-error.log +/.fleet +/.idea +/.vscode diff --git a/app/Http/Controllers/AuthController.php b/app/Http/Controllers/AuthController.php new file mode 100644 index 0000000..96ff697 --- /dev/null +++ b/app/Http/Controllers/AuthController.php @@ -0,0 +1,62 @@ +isMethod('POST')) { + $credentials = $request->only('email', 'password'); + + $user = User::where('email', $credentials['email'])->first(); + + if (!$user) { + return response()->json(['message' => 'Email tidak ada di database!'], 409); + } + + if (!Hash::check($credentials['password'], $user->password)) { + return response()->json(['message' => 'Password salah!'], 409); + } + + if (Auth::attempt($credentials)) { + return response()->json(['message' => 'Berhasil Login!', 'redirect' => route('dashboard')], 201); + } + + if (!Auth::attempt($credentials)) { + return response()->json(['message' => 'Gagal Login!'], 409); + } + } + + return view('pages.auth.login', [ + 'title' => 'Login Page' + ]); + } + + public function register(Request $request) + { + if ($request->isMethod('post')) { + $data = $request->only(['name', 'email', 'password', 'phone']); + $data['password'] = Hash::make($data['password']); + $data['usertype'] = 'bk/guru'; + + $user = User::where('email', $data['email'])->first(); + + if ($user) { + return response()->json(['message' => 'Email sudah ada di database!'], 409); + } + + User::create($data); + return response()->json(['message' => 'Berhasil daftar!', 'redirect' => route('login')], 201); + } + + return view('pages.auth.register', [ + 'title' => 'Register Page' + ]); + } +} 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 @@ +groupBy('tingkat')->map(function ($group) { + return $group->count(); + }); + + $formattedData = $groupedData->map(function ($value, $key) { + return ['label' => $key, 'value' => $value]; + })->values(); + + + return view('pages.dashboard.index', [ + 'title' => 'Dashboard', + 'data' => $formattedData, + 'countPelanggar' => Pelanggaran::distinct('id_siswa')->count('id_siswa'), + 'countSiswa' => Siswa::count(), + 'countSubKriteria' => KriteriaPelanggaran::count(), + ]); + } + + public function updateProfile(Request $request) + { + $user = User::find(Auth::user()->id); + if ($request->isMethod('POST')) { + $request->validate([ + 'photo' => 'nullable|image|mimes:jpeg,png,jpg,gif|max:2048', + 'name' => 'required|string|max:255', + 'email' => 'required|email|max:255|unique:users,email,' . $user->id, + 'phone' => 'nullable|string|max:15', + ]); + + $data = $request->only(['name', 'email', 'phone']); + + if ($request->hasFile('photo')) { + $photoPath = $request->file('photo')->store('photos', 'public'); + $data['photo'] = $photoPath; + + if ($user->photo) { + Storage::disk('public')->delete($user->photo); + } + } + + if (!$user->update($data)) { + return redirect()->back()->withInput()->withErrors('error', 'Gagal update profile'); + } + + return redirect()->to('dashboard/profile')->with('success', 'Berhasil update profile!'); + } + + return view('pages.dashboard.profile', [ + 'title' => 'Update Profile', + 'data' => User::find(Auth::user()->id), + ]); + } + + public function updatePassword(Request $request) + { + if ($request->isMethod('POST')) { + $request->validate([ + 'old_password' => 'required', + 'new_password' => 'required|confirmed', + ]); + + $user = User::find(Auth::id()); + $old_password = $request->old_password; + $new_password = $request->new_password; + + if (!Hash::check($old_password, $user->password)) { + return redirect()->route('profile.update')->with('error', 'Gagal update password: Password lama salah.'); + } + + $user->password = Hash::make($new_password); + $user->save(); + + return redirect()->route('profile.update')->with('success', 'Berhasil update password'); + } + } + + public function logout() + { + Auth::logout(); + + return response()->json([ + 'message' => 'Berhasil Logout!', + 'code' => 201, + 'redirect' => route('login') + ]); + } +} diff --git a/app/Http/Controllers/JenisPelanggaranController.php b/app/Http/Controllers/JenisPelanggaranController.php new file mode 100644 index 0000000..5d0446b --- /dev/null +++ b/app/Http/Controllers/JenisPelanggaranController.php @@ -0,0 +1,83 @@ +sum('bobot'); + return view('pages.dashboard.jenispelanggaran.index', [ + 'title' => 'Data Kriteria Pelanggaran', + 'totalBobot' => $totalBobot, + 'jenis' => JenisPelanggaran::with('kriteria')->get(), + 'kriteria' => KriteriaPelanggaran::all(), + ]); + } + + public function create(Request $request) + { + if ($request->isMethod('POST')) { + $request->validate([ + 'kode_kriteria' => 'required|string|max:255', + 'jenis_pelanggaran' => 'required|string|max:255', + 'point' => 'required|string|max:255', + ]); + + $data = $request->only(['kode_kriteria', 'jenis_pelanggaran', 'point']); + + if (!JenisPelanggaran::create($data)) { + return redirect()->back()->withInput()->withErrors('error', 'Gagal menambah jenis pelanggaran'); + } + + return redirect()->route('jenispelanggaran')->with('success', 'Berhasil menambah jenis pelanggaran'); + } + + return view('pages.dashboard.jenispelanggaran.create', [ + 'title' => 'Tambah Jenis Pelanggaran', + 'kriteria' => KriteriaPelanggaran::all(), + ]); + } + + public function update(Request $request, $id) + { + $jenispelanggaran = JenisPelanggaran::find($id); + + if ($request->isMethod('POST')) { + $data = $request->only(['kode_kriteria', 'jenis_pelanggaran', 'point']); + + $request->validate([ + 'kode_kriteria' => 'required|string|max:255', + 'jenis_pelanggaran' => 'required|string|max:255', + 'point' => 'required|string|max:255', + ]); + + if (!$jenispelanggaran->update($data)) { + return redirect()->back()->withInput()->withErrors('error', 'Gagal menambah jenis pelanggaran'); + } + + return redirect()->route('jenispelanggaran')->with('success', 'Berhasil update jenis pelanggaran!'); + } + + return view('pages.dashboard.jenispelanggaran.update', [ + 'title' => 'Perbarui Jenis Pelanggaran', + 'data' => $jenispelanggaran, + 'kriteria' => KriteriaPelanggaran::all(), + ]); + } + + public function delete($id) + { + $data = JenisPelanggaran::findOrFail($id); + if (!$data->delete()) { + return redirect()->route('jenispelanggaran')->with('error', 'Gagal hapus jenis pelanggaran!'); + } + + return redirect()->route('jenispelanggaran')->with('success', 'Berhasil hapus jenis pelanggaran!'); + } +} diff --git a/app/Http/Controllers/KriteriaPelanggaranController.php b/app/Http/Controllers/KriteriaPelanggaranController.php new file mode 100644 index 0000000..e78689d --- /dev/null +++ b/app/Http/Controllers/KriteriaPelanggaranController.php @@ -0,0 +1,84 @@ +isMethod('POST')) { + $request->validate([ + 'kriteria' => 'required|string|max:255', + 'bobot' => 'required|numeric|min:0|max:100', + ]); + + $currentTotalBobot = KriteriaPelanggaran::sum('bobot'); + $newBobot = $request->input('bobot'); + + if ($currentTotalBobot + $newBobot > 100) { + return redirect()->back()->withInput()->withErrors('error', 'Total persentasi bobot tidak boleh melebihi 100%.'); + } + + $latestCode = KriteriaPelanggaran::max('kode'); + $lastNumber = intval(substr($latestCode, 1)); + + $nextCode = 'C' . ($lastNumber + 1); + + $data = $request->only(['kriteria', 'bobot']); + $data['kode'] = $nextCode; + + if (!KriteriaPelanggaran::create($data)) { + return redirect()->back()->withInput()->withErrors('error', 'Gagal menambah kriteria pelanggaran'); + } + + return redirect()->route('jenispelanggaran')->with('success', 'Berhasil menambah kriteria pelanggaran'); + } + + $currentTotalBobot = KriteriaPelanggaran::sum('bobot'); + $remainingBobot = 100 - $currentTotalBobot; + + return view('pages.dashboard.kriteriapelanggaran.create', [ + 'title' => 'Tambah Kriteria Pelanggaran', + 'kriteria' => KriteriaPelanggaran::all(), + 'remainingBobot' => $remainingBobot, + ]); + } + + public function update(Request $request, $id) + { + $kriteriapelanggaran = KriteriaPelanggaran::find($id); + + if ($request->isMethod('POST')) { + $request->validate([ + 'kriteria' => 'required|string|max:255', + 'bobot' => 'required|string|max:255', + ]); + + $data = $request->only(['kriteria', 'bobot']); + + if (!$kriteriapelanggaran->update($data)) { + return redirect()->back()->withInput()->withErrors('error', 'Gagal menambah kriteria pelanggaran'); + } + + return redirect()->route('jenispelanggaran')->with('success', 'Berhasil update kriteriapelanggaran!'); + } + + return view('pages.dashboard.kriteriapelanggaran.update', [ + 'title' => 'Perbarui Kriteria Pelanggaran', + 'data' => $kriteriapelanggaran, + ]); + } + + public function delete($id) + { + $data = KriteriaPelanggaran::findOrFail($id); + if (!$data->delete()) { + return redirect()->route('jenispelanggaran')->with('success', 'Berhasil hapus kriteria pelanggaran!'); + } + + return redirect()->route('jenispelanggaran')->with('success', 'Berhasil hapus kriteria pelanggaran!'); + } +} diff --git a/app/Http/Controllers/PelanggaranController.php b/app/Http/Controllers/PelanggaranController.php new file mode 100644 index 0000000..2da49e8 --- /dev/null +++ b/app/Http/Controllers/PelanggaranController.php @@ -0,0 +1,305 @@ +orderBy('updated_at', 'desc') // Menambahkan pengurutan berdasarkan updated_at secara descending + ->get(); + + return view('pages.dashboard.pelanggaran.index', [ + 'title' => 'Pelanggaran Siswa', + 'data' => $data, + ]); +} + + + function parseRange($range) + { + $parts = explode('-', $range); + if (count($parts) === 2) { + return [ + 'min' => (float) trim($parts[0]), + 'max' => (float) trim($parts[1]), + ]; + } + return null; + } + + public function create(Request $request) + { + if ($request->isMethod('POST')) { + $request->validate([ + 'id_siswa' => 'required|string|max:255', + 'id_kriteria' => 'required|array', + 'id_kriteria.*' => 'exists:kriteria_pelanggaran,id', + 'id_jenis' => 'required|array', + 'id_jenis.*' => 'exists:jenis_pelanggaran,id', + ]); + + try { + $idSiswa = $request->input('id_siswa'); + $idKriteria = $request->input('id_kriteria'); + $idJenis = $request->input('id_jenis'); + + $normalisasi = []; + foreach ($idKriteria as $kriteriaId) { + $kriteria = KriteriaPelanggaran::findOrFail($kriteriaId); + $normalisasi[$kriteria->kode][] = $kriteria->bobot / 100; + } + + + $utility = []; + foreach ($idJenis as $jenisId) { + $jenis = JenisPelanggaran::findOrFail($jenisId); + $utility[$jenis->kode_kriteria][] = intval($jenis->point); + } + + $result = []; + foreach ($normalisasi as $kode => $values1) { + if (isset($utility[$kode])) { + $values2 = $utility[$kode]; + + if (count($values1) === count($values2)) { + $result[$kode] = []; + for ($i = 0; $i < count($values1); $i++) { + $result[$kode][] = $values1[$i] * $values2[$i]; + } + } else { + $result[$kode] = null; + } + } + } + + $summedResults = []; + foreach ($result as $kode => $values) { + if (is_array($values)) { + $summedResults[$kode] = array_sum($values); + } else { + $summedResults[$kode] = null; + } + } + + $overallScore = array_sum($summedResults); + + $tindakan = Tindakan::all()->first(function ($tindakan) use ($overallScore) { + $range = $this->parseRange($tindakan->rentang_point); + if (!$range) { + return redirect()->route('pelanggaran')->with('error', 'Rentang point does not exist for Tindakan'); + } + return $overallScore >= $range['min'] && $overallScore <= $range['max']; + }); + + $sanksi = Sanksi::all()->first(function ($sanksi) use ($overallScore) { + $range = $this->parseRange($sanksi->rentang_point); + if (!$range) { + return redirect()->route('pelanggaran')->with('error', 'Rentang point does not exist for Sanksi'); + } + return $overallScore >= $range['min'] && $overallScore <= $range['max']; + }); + + $tingkat = ''; + + if ($overallScore >= 1 && $overallScore <= 2) { + $tingkat = 'Pelanggaran Ringan'; + } elseif ($overallScore >= 2.1 && $overallScore <= 8) { + $tingkat = 'Pelanggaran Sedang'; + } elseif ($overallScore >= 8.1 && $overallScore <= 20) { + $tingkat = 'Tindak Pidana Ringan (TIPIRING)'; + } elseif ($overallScore >= 20.1 && $overallScore <= 100) { + $tingkat = 'Tindak Pidana Berat (TIPIRAT)'; + } else { + return redirect()->route('pelanggaran')->with('error', 'Skor melebihi 100, silahkan kurangi kriteria'); + } + + $pelanggaran = Pelanggaran::create([ + 'id_siswa' => $idSiswa, + 'id_tindakan' => $tindakan->id, + 'id_sanksi' => $sanksi->id, + 'tingkat' => $tingkat, + ]); + + if (!$pelanggaran) { + return redirect()->route('pelanggaran')->with('error', 'gagal membuat pelanggaran'); + } + + foreach ($idKriteria as $index => $idKriteriaItem) { + ListPelanggaran::create([ + 'pelanggaran_id' => $pelanggaran->id, + 'id_kriteria' => $idKriteriaItem, + 'id_jenis' => $idJenis[$index], + ]); + } + + return redirect()->route('pelanggaran')->with('success', 'Berhasil menambah pelanggaran'); + } catch (\Exception $e) { + return redirect()->back()->withInput()->withErrors('error', 'Gagal menambah pelanggaran'); + } + } + + return view('pages.dashboard.pelanggaran.create', [ + 'title' => 'Tambah Pelanggaran', + 'siswa' => Siswa::all(), + 'kriteria_pelanggaran' => KriteriaPelanggaran::with('jenis')->get(), + ]); + } + + public function update(Request $request, $id) + { + if ($request->isMethod('POST')) { + $request->validate([ + 'id_siswa' => 'required|string|max:255', + 'id_kriteria' => 'required|array', + 'id_kriteria.*' => 'exists:kriteria_pelanggaran,id', + 'id_jenis' => 'required|array', + 'id_jenis.*' => 'exists:jenis_pelanggaran,id', + ]); + + try { + $idSiswa = $request->input('id_siswa'); + $idKriteria = $request->input('id_kriteria'); + $idJenis = $request->input('id_jenis'); + + $normalisasi = []; + foreach ($idKriteria as $kriteriaId) { + $kriteria = KriteriaPelanggaran::findOrFail($kriteriaId); + $normalisasi[$kriteria->kode][] = $kriteria->bobot / 100; + } + + + $utility = []; + foreach ($idJenis as $jenisId) { + $jenis = JenisPelanggaran::findOrFail($jenisId); + $utility[$jenis->kode_kriteria][] = intval($jenis->point); + } + + $result = []; + foreach ($normalisasi as $kode => $values1) { + if (isset($utility[$kode])) { + $values2 = $utility[$kode]; + + if (count($values1) === count($values2)) { + $result[$kode] = []; + for ($i = 0; $i < count($values1); $i++) { + $result[$kode][] = $values1[$i] * $values2[$i]; + } + } else { + $result[$kode] = null; + } + } + } + + $summedResults = []; + foreach ($result as $kode => $values) { + if (is_array($values)) { + $summedResults[$kode] = array_sum($values); + } else { + $summedResults[$kode] = null; + } + } + + $overallScore = array_sum($summedResults); + + $tindakan = Tindakan::all()->first(function ($tindakan) use ($overallScore) { + $range = $this->parseRange($tindakan->rentang_point); + if (!$range) { + return redirect()->route('pelanggaran')->with('error', 'Rentang point does not exist for Tindakan'); + } + return $overallScore >= $range['min'] && $overallScore <= $range['max']; + }); + + $sanksi = Sanksi::all()->first(function ($sanksi) use ($overallScore) { + $range = $this->parseRange($sanksi->rentang_point); + if (!$range) { + return redirect()->route('pelanggaran')->with('error', 'Rentang point does not exist for Sanksi'); + } + return $overallScore >= $range['min'] && $overallScore <= $range['max']; + }); + + $tingkat = ''; + + if ($overallScore >= 1 && $overallScore <= 2) { + $tingkat = 'Pelanggaran Ringan'; + } elseif ($overallScore >= 2.1 && $overallScore <= 8) { + $tingkat = 'Pelanggaran Sedang'; + } elseif ($overallScore >= 8.1 && $overallScore <= 20) { + $tingkat = 'Tindak Pidana Ringan (TIPIRING)'; + } elseif ($overallScore >= 20.1 && $overallScore <= 100) { + $tingkat = 'Tindak Pidana Berat (TIPIRAT)'; + } else { + return redirect()->route('pelanggaran')->with('error', 'Skor melebihi 100, silahkan kurangi kriteria'); + } + + $pelanggaran = Pelanggaran::findOrFail($id); + $pelanggaran->update([ + 'id_siswa' => $idSiswa, + 'id_tindakan' => $tindakan->id, + 'id_sanksi' => $sanksi->id, + 'tingkat' => $tingkat, + ]); + + $pelanggaran->listPelanggaran()->delete(); + + foreach ($idKriteria as $index => $idKriteriaItem) { + ListPelanggaran::create([ + 'pelanggaran_id' => $pelanggaran->id, + 'id_kriteria' => $idKriteriaItem, + 'id_jenis' => $idJenis[$index], + ]); + } + + return redirect()->route('pelanggaran')->with('success', 'Berhasil memperbarui pelanggaran'); + } catch (\Exception $e) { + return redirect()->back()->withInput()->withErrors('error', 'Gagal memperbarui pelanggaran'); + } + } + + return view('pages.dashboard.pelanggaran.update', [ + 'title' => 'Edit Pelanggaran', + 'siswa' => Siswa::all(), + 'kriteria_pelanggaran' => KriteriaPelanggaran::with('jenis')->get(), + 'pelanggaran' => Pelanggaran::findOrFail($id), + ]); + } + + public function detail($id) + { + $pelanggaran = Pelanggaran::with('sanksi', 'tindakan', 'siswa')->where('id', $id)->first(); + //dd($pelanggaran); + return view('pages.dashboard.pelanggaran.detail', [ + 'title' => 'Pelanggaran Siswa', + 'data' => $pelanggaran, + 'list' => ListPelanggaran::with('kriteria', 'jenis')->where('pelanggaran_id', $pelanggaran->id)->get(), + ]); + } + + public function delete($id) + { + $data = Pelanggaran::findOrFail($id); + + $listPelanggaran = ListPelanggaran::where('pelanggaran_id', $data->id)->get(); + + foreach($listPelanggaran as $item) { + $pelanggaran = ListPelanggaran::find($item->id); + $pelanggaran->delete(); + } + + if (!$data->delete()) { + return redirect()->route('pelanggaran')->with(['error' => 'Gagal hapus pelanggaran!']); + } + + return redirect()->route('pelanggaran')->with(['success' => 'Berhasil hapus pelanggaran!']); + } +} diff --git a/app/Http/Controllers/SanksiController.php b/app/Http/Controllers/SanksiController.php new file mode 100644 index 0000000..fca8d30 --- /dev/null +++ b/app/Http/Controllers/SanksiController.php @@ -0,0 +1,101 @@ +orderBy('kode_sanksi', 'desc') + ->first(); + + $counter = $latestCode ? intval(substr($latestCode->kode_sanksi, strlen($prefix))) + 1 : 1; + + $code = $prefix . str_pad($counter, STR_PAD_LEFT); + + return $code; + } + + + public function index() + { + return view('pages.dashboard.sanksi.index', [ + 'title' => 'Data Sanksi', + 'data' => Sanksi::all(), + ]); + } + + public function create(Request $request) + { + if ($request->isMethod('POST')) { + $request->validate([ + 'rentang_point' => 'required|string|max:255', + 'jenis_sanksi' => 'required|string|max:255', + ]); + + $data = $request->only(['rentang_point', 'jenis_sanksi']); + + $prefix = 'S'; + $code = $this->generateUniqueCode($prefix); + + $data['kode_sanksi'] = $code; + + if (!Sanksi::create($data)) { + return redirect()->back()->withInput()->withErrors(['error' => 'Gagal menambah sanksi']); + } + + return redirect()->route('sanksi')->with('success', 'Berhasil menambah sanksi'); + } + + return view('pages.dashboard.sanksi.create', [ + 'title' => 'Tambah Sanksi', + ]); + } + + public function update(Request $request, $id) + { + $sanksi = Sanksi::find($id); + + if ($request->isMethod('POST')) { + $data = $request->only(['rentang_point', 'jenis_sanksi']); + + $rules = [ + 'rentang_point' => 'required|string|max:255', + 'jenis_sanksi' => 'required|string|max:255', + ]; + + $request->validate($rules); + + if (!$sanksi->update($data)) { + return redirect()->back()->withInput()->withErrors(['error' => 'Gagal menambah sanksi']); + } + + return redirect()->route('sanksi')->with(['success' => 'Berhasil update sanksi!']); + } + + return view('pages.dashboard.sanksi.update', [ + 'title' => 'Perbarui Sanksi', + 'data' => $sanksi, + ]); + } + + public function delete($id) + { + $data = Sanksi::findOrFail($id); + if (!$data->delete()) { + return redirect()->route('sanksi')->with(['error' => 'Gagal hapus sanksi!']); + } + + return redirect()->route('sanksi')->with(['success' => 'Berhasil hapus sanksi!']); + } +} diff --git a/app/Http/Controllers/SiswaController.php b/app/Http/Controllers/SiswaController.php new file mode 100644 index 0000000..f13bf82 --- /dev/null +++ b/app/Http/Controllers/SiswaController.php @@ -0,0 +1,98 @@ + 'Data Siswa', + 'data' => Siswa::with('walikelas')->get(), + ]); + } + + public function create(Request $request) + { + if ($request->isMethod('POST')) { + $data = $request->only(['nama', 'nis', 'kelas', 'wali_kelas_id']); + + $request->validate([ + 'nama' => 'required|string|max:255', + 'nis' => 'required|numeric|unique:siswa,nis', + 'kelas' => 'required|string|max:255', + 'wali_kelas_id' => 'required|numeric', + ]); + + if (!Siswa::create($data)) { + return redirect()->back()->withInput()->withErrors(['error' => 'Gagal menambah siswa']); + } + + return redirect()->route('siswa')->with('success', 'Berhasil menambah siswa'); + } + + return view('pages.dashboard.siswa.create', [ + 'title' => 'Tambah Siswa', + 'wali' => User::where('usertype', 'bk/guru')->get() + ]); + } + + public function update(Request $request, $id) + { + $siswa = Siswa::with('walikelas')->find($id); + + if ($request->isMethod('POST')) { + $data = $request->only(['nama', 'nis', 'kelas', 'wali_kelas']); + + $rules = [ + 'nama' => 'required|string|max:255', + 'nis' => 'required|numeric|unique:siswa,nis,' . $siswa->id, + 'kelas' => 'required|string|max:255', + 'wali_kelas_id' => 'required|numeric', + ]; + + $request->validate($rules); + + if (!$siswa->update($data)) { + return redirect()->back()->withInput()->withErrors(['error' => 'Gagal menambah siswa']); + } + + return redirect()->route('siswa')->with(['success' => 'Berhasil update siswa!']); + } + + return view('pages.dashboard.siswa.update', [ + 'title' => 'Perbarui Siswa', + 'data' => $siswa, + 'wali' => User::where('usertype', 'bk/guru')->get() + ]); + } + + public function delete($id) + { + $data = Siswa::findOrFail($id); + + $pelanggaran = Pelanggaran::where('id_siswa', $id)->get(); + + foreach ($pelanggaran as $pel) { + $listPelanggaran = ListPelanggaran::where('pelanggaran_id', $pel->id)->get(); + + foreach ($listPelanggaran as $item) { + $item->delete(); + } + + $pel->delete(); + } + + if (!$data->delete()) { + return redirect()->route('siswa')->with(['error' => 'Gagal hapus siswa!']); + } + + return redirect()->route('siswa')->with(['success' => 'Berhasil hapus siswa!']); + } +} diff --git a/app/Http/Controllers/TindakanController.php b/app/Http/Controllers/TindakanController.php new file mode 100644 index 0000000..4bba6bc --- /dev/null +++ b/app/Http/Controllers/TindakanController.php @@ -0,0 +1,102 @@ +orderBy('kode_tindakan', 'desc') + ->first(); + + $counter = $latestCode ? intval(substr($latestCode->kode_tindakan, strlen($prefix))) + 1 : 1; + + $code = $prefix . str_pad($counter, STR_PAD_LEFT); + + return $code; + } + + + public function index() + { + return view('pages.dashboard.tindakan.index', [ + 'title' => 'Data Tindakan', + 'data' => Tindakan::all(), + ]); + } + + public function create(Request $request) + { + if ($request->isMethod('POST')) { + $request->validate([ + 'rentang_point' => 'required|string|max:255', + 'tindakan_sekolah' => 'required|string|max:255', + ]); + + $data = $request->only(['rentang_point', 'tindakan_sekolah']); + + $prefix = 'T'; + $code = $this->generateUniqueCode($prefix); + + $data = $request->only(['rentang_point', 'tindakan_sekolah']); + $data['kode_tindakan'] = $code; + + if (!Tindakan::create($data)) { + return redirect()->back()->withInput()->withErrors(['error' => 'Gagal menambah tindakan']); + } + + return redirect()->route('tindakan')->with('success', 'Berhasil menambah tindakan'); + } + + return view('pages.dashboard.tindakan.create', [ + 'title' => 'Tambah Tindakan', + ]); + } + + public function update(Request $request, $id) + { + $tindakan = Tindakan::find($id); + + if ($request->isMethod('POST')) { + $data = $request->only(['rentang_point', 'tindakan_sekolah']); + + $rules = [ + 'rentang_point' => 'required|string|max:255', + 'tindakan_sekolah' => 'required|string|max:255', + ]; + + $request->validate($rules); + + if (!$tindakan->update($data)) { + return redirect()->back()->withInput()->withErrors(['error' => 'Gagal menambah tindakan']); + } + + return redirect()->route('tindakan')->with(['success' => 'Berhasil update tindakan!']); + } + + return view('pages.dashboard.tindakan.update', [ + 'title' => 'Perbarui Tindakan', + 'data' => $tindakan, + ]); + } + + public function delete($id) + { + $data = Tindakan::findOrFail($id); + if (!$data->delete()) { + return redirect()->route('tindakan')->with(['error' => 'Gagal hapus tindakan!']); + } + + return redirect()->route('tindakan')->with(['success' => 'Berhasil hapus tindakan!']); + } +} diff --git a/app/Http/Controllers/UserController.php b/app/Http/Controllers/UserController.php new file mode 100644 index 0000000..e898e6d --- /dev/null +++ b/app/Http/Controllers/UserController.php @@ -0,0 +1,88 @@ + 'Data Pengguna', + 'data' => User::all(), + ]); + } + + public function create(Request $request) + { + if ($request->isMethod('POST')) { + $data = [ + 'name' => $request->name, + 'email' => $request->email, + 'phone' => $request->phone, + 'usertype' => $request->usertype, + 'password' => Hash::make($request->password), + ]; + + $request->validate([ + 'name' => 'required|string|max:255', + 'email' => 'required|email|unique:users,email', + 'phone' => 'required|numeric|unique:users,phone', + 'usertype' => 'required|string|in:admin,bk/guru', + 'password' => 'required|string|min:8|confirmed', + ]); + + if (!User::create($data)) { + return redirect()->back()->withInput()->withErrors(['error' => 'Gagal menambah pengguna']); + } + + return redirect()->route('user')->with('success', 'Berhasil menambah pengguna'); + } + + return view('pages.dashboard.user.create', [ + 'title' => 'Tambah Pengguna', + ]); + } + + public function update(Request $request, $id) + { + $user = User::find($id); + + if ($request->isMethod('POST')) { + $data = $request->only(['name', 'email', 'phone', 'usertype']); + + $rules = [ + 'name' => 'required|string|max:255', + 'email' => 'required|email|unique:users,email,' . $user->id, + 'phone' => 'required|numeric|unique:users,phone,' . $user->id, + 'usertype' => 'required|string|in:admin,bk/guru', + ]; + + $request->validate($rules); + + if (!$user->update($data)) { + return redirect()->back()->withInput()->withErrors(['error' => 'Gagal menambah pengguna']); + } + + return redirect()->route('user')->with(['success' => 'Berhasil update pengguna!']); + } + + return view('pages.dashboard.user.update', [ + 'title' => 'Perbarui Pengguna', + 'data' => $user, + ]); + } + + public function delete($id) + { + $data = User::findOrFail($id); + if (!$data->delete()) { + return redirect()->route('user')->with(['error' => 'Gagal hapus pengguna!']); + } + + return redirect()->route('user')->with(['success' => 'Berhasil hapus pengguna!']); + } +} diff --git a/app/Http/Middleware/isAuthenticatedAs.php b/app/Http/Middleware/isAuthenticatedAs.php new file mode 100644 index 0000000..197211c --- /dev/null +++ b/app/Http/Middleware/isAuthenticatedAs.php @@ -0,0 +1,24 @@ +user()->usertype !== $role) { + return redirect()->route('dashboard')->with('error', 'Akses dilarang.'); + } + + return $next($request); + } +} diff --git a/app/Models/JenisPelanggaran.php b/app/Models/JenisPelanggaran.php new file mode 100644 index 0000000..f3538e9 --- /dev/null +++ b/app/Models/JenisPelanggaran.php @@ -0,0 +1,19 @@ +belongsTo(KriteriaPelanggaran::class, 'kode_kriteria', 'kode'); + } +} diff --git a/app/Models/KriteriaPelanggaran.php b/app/Models/KriteriaPelanggaran.php new file mode 100644 index 0000000..275b917 --- /dev/null +++ b/app/Models/KriteriaPelanggaran.php @@ -0,0 +1,19 @@ +hasMany(JenisPelanggaran::class, 'kode_kriteria', 'kode'); + } +} diff --git a/app/Models/ListPelanggaran.php b/app/Models/ListPelanggaran.php new file mode 100644 index 0000000..c17a376 --- /dev/null +++ b/app/Models/ListPelanggaran.php @@ -0,0 +1,24 @@ +belongsTo(KriteriaPelanggaran::class, 'id_kriteria', 'id'); + } + + public function jenis() + { + return $this->belongsTo(JenisPelanggaran::class, 'id_jenis', 'id'); + } +} diff --git a/app/Models/Pelanggaran.php b/app/Models/Pelanggaran.php new file mode 100644 index 0000000..2188ba9 --- /dev/null +++ b/app/Models/Pelanggaran.php @@ -0,0 +1,34 @@ +hasMany(ListPelanggaran::class)->with('kriteria', 'jenis'); + } + + public function siswa() + { + return $this->belongsTo(Siswa::class, 'id_siswa', 'id'); + } + + public function tindakan() + { + return $this->belongsTo(Tindakan::class, 'id_tindakan', 'id'); + } + + public function sanksi() + { + return $this->belongsTo(Sanksi::class, 'id_sanksi', 'id'); + } +} diff --git a/app/Models/Sanksi.php b/app/Models/Sanksi.php new file mode 100644 index 0000000..604a2a1 --- /dev/null +++ b/app/Models/Sanksi.php @@ -0,0 +1,14 @@ +belongsTo(User::class, 'wali_kelas_id'); + } +} diff --git a/app/Models/Tindakan.php b/app/Models/Tindakan.php new file mode 100644 index 0000000..fd96d1c --- /dev/null +++ b/app/Models/Tindakan.php @@ -0,0 +1,14 @@ + + */ + protected $fillable = [ + 'name', + 'email', + 'password', + 'phone', + 'photo', + 'usertype' + ]; + + /** + * 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', + ]; + } +} diff --git a/app/Providers/AppServiceProvider.php b/app/Providers/AppServiceProvider.php new file mode 100644 index 0000000..452e6b6 --- /dev/null +++ b/app/Providers/AppServiceProvider.php @@ -0,0 +1,24 @@ +handleCommand(new ArgvInput); + +exit($status); diff --git a/bootstrap/app.php b/bootstrap/app.php new file mode 100644 index 0000000..66b0908 --- /dev/null +++ b/bootstrap/app.php @@ -0,0 +1,21 @@ +withRouting( + web: __DIR__.'/../routes/web.php', + commands: __DIR__.'/../routes/console.php', + health: '/up', + ) + ->withMiddleware(function (Middleware $middleware) { + $middleware->alias([ + 'isAuthenticatedAs' => isAuthenticatedAs::class + ]); + }) + ->withExceptions(function (Exceptions $exceptions) { + // + })->create(); 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..38b258d --- /dev/null +++ b/bootstrap/providers.php @@ -0,0 +1,5 @@ +=5.0.0" + }, + "require-dev": { + "doctrine/dbal": "^4.0.0", + "nesbot/carbon": "^2.71.0 || ^3.0.0", + "phpunit/phpunit": "^10.3" + }, + "type": "library", + "autoload": { + "psr-4": { + "Carbon\\Doctrine\\": "src/Carbon/Doctrine/" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "KyleKatarn", + "email": "kylekatarnls@gmail.com" + } + ], + "description": "Types to use Carbon in Doctrine", + "keywords": [ + "carbon", + "date", + "datetime", + "doctrine", + "time" + ], + "support": { + "issues": "https://github.com/CarbonPHP/carbon-doctrine-types/issues", + "source": "https://github.com/CarbonPHP/carbon-doctrine-types/tree/3.2.0" + }, + "funding": [ + { + "url": "https://github.com/kylekatarnls", + "type": "github" + }, + { + "url": "https://opencollective.com/Carbon", + "type": "open_collective" + }, + { + "url": "https://tidelift.com/funding/github/packagist/nesbot/carbon", + "type": "tidelift" + } + ], + "time": "2024-02-09T16:56:22+00:00" + }, + { + "name": "dflydev/dot-access-data", + "version": "v3.0.2", + "source": { + "type": "git", + "url": "https://github.com/dflydev/dflydev-dot-access-data.git", + "reference": "f41715465d65213d644d3141a6a93081be5d3549" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/dflydev/dflydev-dot-access-data/zipball/f41715465d65213d644d3141a6a93081be5d3549", + "reference": "f41715465d65213d644d3141a6a93081be5d3549", + "shasum": "" + }, + "require": { + "php": "^7.1 || ^8.0" + }, + "require-dev": { + "phpstan/phpstan": "^0.12.42", + "phpunit/phpunit": "^7.5 || ^8.5 || ^9.3", + "scrutinizer/ocular": "1.6.0", + "squizlabs/php_codesniffer": "^3.5", + "vimeo/psalm": "^4.0.0" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-main": "3.x-dev" + } + }, + "autoload": { + "psr-4": { + "Dflydev\\DotAccessData\\": "src/" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Dragonfly Development Inc.", + "email": "info@dflydev.com", + "homepage": "http://dflydev.com" + }, + { + "name": "Beau Simensen", + "email": "beau@dflydev.com", + "homepage": "http://beausimensen.com" + }, + { + "name": "Carlos Frutos", + "email": "carlos@kiwing.it", + "homepage": "https://github.com/cfrutos" + }, + { + "name": "Colin O'Dell", + "email": "colinodell@gmail.com", + "homepage": "https://www.colinodell.com" + } + ], + "description": "Given a deep data structure, access data by dot notation.", + "homepage": "https://github.com/dflydev/dflydev-dot-access-data", + "keywords": [ + "access", + "data", + "dot", + "notation" + ], + "support": { + "issues": "https://github.com/dflydev/dflydev-dot-access-data/issues", + "source": "https://github.com/dflydev/dflydev-dot-access-data/tree/v3.0.2" + }, + "time": "2022-10-27T11:44:00+00:00" + }, + { + "name": "doctrine/inflector", + "version": "2.0.10", + "source": { + "type": "git", + "url": "https://github.com/doctrine/inflector.git", + "reference": "5817d0659c5b50c9b950feb9af7b9668e2c436bc" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/doctrine/inflector/zipball/5817d0659c5b50c9b950feb9af7b9668e2c436bc", + "reference": "5817d0659c5b50c9b950feb9af7b9668e2c436bc", + "shasum": "" + }, + "require": { + "php": "^7.2 || ^8.0" + }, + "require-dev": { + "doctrine/coding-standard": "^11.0", + "phpstan/phpstan": "^1.8", + "phpstan/phpstan-phpunit": "^1.1", + "phpstan/phpstan-strict-rules": "^1.3", + "phpunit/phpunit": "^8.5 || ^9.5", + "vimeo/psalm": "^4.25 || ^5.4" + }, + "type": "library", + "autoload": { + "psr-4": { + "Doctrine\\Inflector\\": "lib/Doctrine/Inflector" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Guilherme Blanco", + "email": "guilhermeblanco@gmail.com" + }, + { + "name": "Roman Borschel", + "email": "roman@code-factory.org" + }, + { + "name": "Benjamin Eberlei", + "email": "kontakt@beberlei.de" + }, + { + "name": "Jonathan Wage", + "email": "jonwage@gmail.com" + }, + { + "name": "Johannes Schmitt", + "email": "schmittjoh@gmail.com" + } + ], + "description": "PHP Doctrine Inflector is a small library that can perform string manipulations with regard to upper/lowercase and singular/plural forms of words.", + "homepage": "https://www.doctrine-project.org/projects/inflector.html", + "keywords": [ + "inflection", + "inflector", + "lowercase", + "manipulation", + "php", + "plural", + "singular", + "strings", + "uppercase", + "words" + ], + "support": { + "issues": "https://github.com/doctrine/inflector/issues", + "source": "https://github.com/doctrine/inflector/tree/2.0.10" + }, + "funding": [ + { + "url": "https://www.doctrine-project.org/sponsorship.html", + "type": "custom" + }, + { + "url": "https://www.patreon.com/phpdoctrine", + "type": "patreon" + }, + { + "url": "https://tidelift.com/funding/github/packagist/doctrine%2Finflector", + "type": "tidelift" + } + ], + "time": "2024-02-18T20:23:39+00:00" + }, + { + "name": "doctrine/lexer", + "version": "3.0.1", + "source": { + "type": "git", + "url": "https://github.com/doctrine/lexer.git", + "reference": "31ad66abc0fc9e1a1f2d9bc6a42668d2fbbcd6dd" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/doctrine/lexer/zipball/31ad66abc0fc9e1a1f2d9bc6a42668d2fbbcd6dd", + "reference": "31ad66abc0fc9e1a1f2d9bc6a42668d2fbbcd6dd", + "shasum": "" + }, + "require": { + "php": "^8.1" + }, + "require-dev": { + "doctrine/coding-standard": "^12", + "phpstan/phpstan": "^1.10", + "phpunit/phpunit": "^10.5", + "psalm/plugin-phpunit": "^0.18.3", + "vimeo/psalm": "^5.21" + }, + "type": "library", + "autoload": { + "psr-4": { + "Doctrine\\Common\\Lexer\\": "src" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Guilherme Blanco", + "email": "guilhermeblanco@gmail.com" + }, + { + "name": "Roman Borschel", + "email": "roman@code-factory.org" + }, + { + "name": "Johannes Schmitt", + "email": "schmittjoh@gmail.com" + } + ], + "description": "PHP Doctrine Lexer parser library that can be used in Top-Down, Recursive Descent Parsers.", + "homepage": "https://www.doctrine-project.org/projects/lexer.html", + "keywords": [ + "annotations", + "docblock", + "lexer", + "parser", + "php" + ], + "support": { + "issues": "https://github.com/doctrine/lexer/issues", + "source": "https://github.com/doctrine/lexer/tree/3.0.1" + }, + "funding": [ + { + "url": "https://www.doctrine-project.org/sponsorship.html", + "type": "custom" + }, + { + "url": "https://www.patreon.com/phpdoctrine", + "type": "patreon" + }, + { + "url": "https://tidelift.com/funding/github/packagist/doctrine%2Flexer", + "type": "tidelift" + } + ], + "time": "2024-02-05T11:56:58+00:00" + }, + { + "name": "dragonmantank/cron-expression", + "version": "v3.3.3", + "source": { + "type": "git", + "url": "https://github.com/dragonmantank/cron-expression.git", + "reference": "adfb1f505deb6384dc8b39804c5065dd3c8c8c0a" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/dragonmantank/cron-expression/zipball/adfb1f505deb6384dc8b39804c5065dd3c8c8c0a", + "reference": "adfb1f505deb6384dc8b39804c5065dd3c8c8c0a", + "shasum": "" + }, + "require": { + "php": "^7.2|^8.0", + "webmozart/assert": "^1.0" + }, + "replace": { + "mtdowling/cron-expression": "^1.0" + }, + "require-dev": { + "phpstan/extension-installer": "^1.0", + "phpstan/phpstan": "^1.0", + "phpstan/phpstan-webmozart-assert": "^1.0", + "phpunit/phpunit": "^7.0|^8.0|^9.0" + }, + "type": "library", + "autoload": { + "psr-4": { + "Cron\\": "src/Cron/" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Chris Tankersley", + "email": "chris@ctankersley.com", + "homepage": "https://github.com/dragonmantank" + } + ], + "description": "CRON for PHP: Calculate the next or previous run date and determine if a CRON expression is due", + "keywords": [ + "cron", + "schedule" + ], + "support": { + "issues": "https://github.com/dragonmantank/cron-expression/issues", + "source": "https://github.com/dragonmantank/cron-expression/tree/v3.3.3" + }, + "funding": [ + { + "url": "https://github.com/dragonmantank", + "type": "github" + } + ], + "time": "2023-08-10T19:36:49+00:00" + }, + { + "name": "egulias/email-validator", + "version": "4.0.2", + "source": { + "type": "git", + "url": "https://github.com/egulias/EmailValidator.git", + "reference": "ebaaf5be6c0286928352e054f2d5125608e5405e" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/egulias/EmailValidator/zipball/ebaaf5be6c0286928352e054f2d5125608e5405e", + "reference": "ebaaf5be6c0286928352e054f2d5125608e5405e", + "shasum": "" + }, + "require": { + "doctrine/lexer": "^2.0 || ^3.0", + "php": ">=8.1", + "symfony/polyfill-intl-idn": "^1.26" + }, + "require-dev": { + "phpunit/phpunit": "^10.2", + "vimeo/psalm": "^5.12" + }, + "suggest": { + "ext-intl": "PHP Internationalization Libraries are required to use the SpoofChecking validation" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "4.0.x-dev" + } + }, + "autoload": { + "psr-4": { + "Egulias\\EmailValidator\\": "src" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Eduardo Gulias Davis" + } + ], + "description": "A library for validating emails against several RFCs", + "homepage": "https://github.com/egulias/EmailValidator", + "keywords": [ + "email", + "emailvalidation", + "emailvalidator", + "validation", + "validator" + ], + "support": { + "issues": "https://github.com/egulias/EmailValidator/issues", + "source": "https://github.com/egulias/EmailValidator/tree/4.0.2" + }, + "funding": [ + { + "url": "https://github.com/egulias", + "type": "github" + } + ], + "time": "2023-10-06T06:47:41+00:00" + }, + { + "name": "fruitcake/php-cors", + "version": "v1.3.0", + "source": { + "type": "git", + "url": "https://github.com/fruitcake/php-cors.git", + "reference": "3d158f36e7875e2f040f37bc0573956240a5a38b" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/fruitcake/php-cors/zipball/3d158f36e7875e2f040f37bc0573956240a5a38b", + "reference": "3d158f36e7875e2f040f37bc0573956240a5a38b", + "shasum": "" + }, + "require": { + "php": "^7.4|^8.0", + "symfony/http-foundation": "^4.4|^5.4|^6|^7" + }, + "require-dev": { + "phpstan/phpstan": "^1.4", + "phpunit/phpunit": "^9", + "squizlabs/php_codesniffer": "^3.5" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "1.2-dev" + } + }, + "autoload": { + "psr-4": { + "Fruitcake\\Cors\\": "src/" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Fruitcake", + "homepage": "https://fruitcake.nl" + }, + { + "name": "Barryvdh", + "email": "barryvdh@gmail.com" + } + ], + "description": "Cross-origin resource sharing library for the Symfony HttpFoundation", + "homepage": "https://github.com/fruitcake/php-cors", + "keywords": [ + "cors", + "laravel", + "symfony" + ], + "support": { + "issues": "https://github.com/fruitcake/php-cors/issues", + "source": "https://github.com/fruitcake/php-cors/tree/v1.3.0" + }, + "funding": [ + { + "url": "https://fruitcake.nl", + "type": "custom" + }, + { + "url": "https://github.com/barryvdh", + "type": "github" + } + ], + "time": "2023-10-12T05:21:21+00:00" + }, + { + "name": "graham-campbell/result-type", + "version": "v1.1.2", + "source": { + "type": "git", + "url": "https://github.com/GrahamCampbell/Result-Type.git", + "reference": "fbd48bce38f73f8a4ec8583362e732e4095e5862" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/GrahamCampbell/Result-Type/zipball/fbd48bce38f73f8a4ec8583362e732e4095e5862", + "reference": "fbd48bce38f73f8a4ec8583362e732e4095e5862", + "shasum": "" + }, + "require": { + "php": "^7.2.5 || ^8.0", + "phpoption/phpoption": "^1.9.2" + }, + "require-dev": { + "phpunit/phpunit": "^8.5.34 || ^9.6.13 || ^10.4.2" + }, + "type": "library", + "autoload": { + "psr-4": { + "GrahamCampbell\\ResultType\\": "src/" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Graham Campbell", + "email": "hello@gjcampbell.co.uk", + "homepage": "https://github.com/GrahamCampbell" + } + ], + "description": "An Implementation Of The Result Type", + "keywords": [ + "Graham Campbell", + "GrahamCampbell", + "Result Type", + "Result-Type", + "result" + ], + "support": { + "issues": "https://github.com/GrahamCampbell/Result-Type/issues", + "source": "https://github.com/GrahamCampbell/Result-Type/tree/v1.1.2" + }, + "funding": [ + { + "url": "https://github.com/GrahamCampbell", + "type": "github" + }, + { + "url": "https://tidelift.com/funding/github/packagist/graham-campbell/result-type", + "type": "tidelift" + } + ], + "time": "2023-11-12T22:16:48+00:00" + }, + { + "name": "guzzlehttp/guzzle", + "version": "7.8.1", + "source": { + "type": "git", + "url": "https://github.com/guzzle/guzzle.git", + "reference": "41042bc7ab002487b876a0683fc8dce04ddce104" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/guzzle/guzzle/zipball/41042bc7ab002487b876a0683fc8dce04ddce104", + "reference": "41042bc7ab002487b876a0683fc8dce04ddce104", + "shasum": "" + }, + "require": { + "ext-json": "*", + "guzzlehttp/promises": "^1.5.3 || ^2.0.1", + "guzzlehttp/psr7": "^1.9.1 || ^2.5.1", + "php": "^7.2.5 || ^8.0", + "psr/http-client": "^1.0", + "symfony/deprecation-contracts": "^2.2 || ^3.0" + }, + "provide": { + "psr/http-client-implementation": "1.0" + }, + "require-dev": { + "bamarni/composer-bin-plugin": "^1.8.2", + "ext-curl": "*", + "php-http/client-integration-tests": "dev-master#2c025848417c1135031fdf9c728ee53d0a7ceaee as 3.0.999", + "php-http/message-factory": "^1.1", + "phpunit/phpunit": "^8.5.36 || ^9.6.15", + "psr/log": "^1.1 || ^2.0 || ^3.0" + }, + "suggest": { + "ext-curl": "Required for CURL handler support", + "ext-intl": "Required for Internationalized Domain Name (IDN) support", + "psr/log": "Required for using the Log middleware" + }, + "type": "library", + "extra": { + "bamarni-bin": { + "bin-links": true, + "forward-command": false + } + }, + "autoload": { + "files": [ + "src/functions_include.php" + ], + "psr-4": { + "GuzzleHttp\\": "src/" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Graham Campbell", + "email": "hello@gjcampbell.co.uk", + "homepage": "https://github.com/GrahamCampbell" + }, + { + "name": "Michael Dowling", + "email": "mtdowling@gmail.com", + "homepage": "https://github.com/mtdowling" + }, + { + "name": "Jeremy Lindblom", + "email": "jeremeamia@gmail.com", + "homepage": "https://github.com/jeremeamia" + }, + { + "name": "George Mponos", + "email": "gmponos@gmail.com", + "homepage": "https://github.com/gmponos" + }, + { + "name": "Tobias Nyholm", + "email": "tobias.nyholm@gmail.com", + "homepage": "https://github.com/Nyholm" + }, + { + "name": "Márk Sági-Kazár", + "email": "mark.sagikazar@gmail.com", + "homepage": "https://github.com/sagikazarmark" + }, + { + "name": "Tobias Schultze", + "email": "webmaster@tubo-world.de", + "homepage": "https://github.com/Tobion" + } + ], + "description": "Guzzle is a PHP HTTP client library", + "keywords": [ + "client", + "curl", + "framework", + "http", + "http client", + "psr-18", + "psr-7", + "rest", + "web service" + ], + "support": { + "issues": "https://github.com/guzzle/guzzle/issues", + "source": "https://github.com/guzzle/guzzle/tree/7.8.1" + }, + "funding": [ + { + "url": "https://github.com/GrahamCampbell", + "type": "github" + }, + { + "url": "https://github.com/Nyholm", + "type": "github" + }, + { + "url": "https://tidelift.com/funding/github/packagist/guzzlehttp/guzzle", + "type": "tidelift" + } + ], + "time": "2023-12-03T20:35:24+00:00" + }, + { + "name": "guzzlehttp/promises", + "version": "2.0.2", + "source": { + "type": "git", + "url": "https://github.com/guzzle/promises.git", + "reference": "bbff78d96034045e58e13dedd6ad91b5d1253223" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/guzzle/promises/zipball/bbff78d96034045e58e13dedd6ad91b5d1253223", + "reference": "bbff78d96034045e58e13dedd6ad91b5d1253223", + "shasum": "" + }, + "require": { + "php": "^7.2.5 || ^8.0" + }, + "require-dev": { + "bamarni/composer-bin-plugin": "^1.8.2", + "phpunit/phpunit": "^8.5.36 || ^9.6.15" + }, + "type": "library", + "extra": { + "bamarni-bin": { + "bin-links": true, + "forward-command": false + } + }, + "autoload": { + "psr-4": { + "GuzzleHttp\\Promise\\": "src/" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Graham Campbell", + "email": "hello@gjcampbell.co.uk", + "homepage": "https://github.com/GrahamCampbell" + }, + { + "name": "Michael Dowling", + "email": "mtdowling@gmail.com", + "homepage": "https://github.com/mtdowling" + }, + { + "name": "Tobias Nyholm", + "email": "tobias.nyholm@gmail.com", + "homepage": "https://github.com/Nyholm" + }, + { + "name": "Tobias Schultze", + "email": "webmaster@tubo-world.de", + "homepage": "https://github.com/Tobion" + } + ], + "description": "Guzzle promises library", + "keywords": [ + "promise" + ], + "support": { + "issues": "https://github.com/guzzle/promises/issues", + "source": "https://github.com/guzzle/promises/tree/2.0.2" + }, + "funding": [ + { + "url": "https://github.com/GrahamCampbell", + "type": "github" + }, + { + "url": "https://github.com/Nyholm", + "type": "github" + }, + { + "url": "https://tidelift.com/funding/github/packagist/guzzlehttp/promises", + "type": "tidelift" + } + ], + "time": "2023-12-03T20:19:20+00:00" + }, + { + "name": "guzzlehttp/psr7", + "version": "2.6.2", + "source": { + "type": "git", + "url": "https://github.com/guzzle/psr7.git", + "reference": "45b30f99ac27b5ca93cb4831afe16285f57b8221" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/guzzle/psr7/zipball/45b30f99ac27b5ca93cb4831afe16285f57b8221", + "reference": "45b30f99ac27b5ca93cb4831afe16285f57b8221", + "shasum": "" + }, + "require": { + "php": "^7.2.5 || ^8.0", + "psr/http-factory": "^1.0", + "psr/http-message": "^1.1 || ^2.0", + "ralouphie/getallheaders": "^3.0" + }, + "provide": { + "psr/http-factory-implementation": "1.0", + "psr/http-message-implementation": "1.0" + }, + "require-dev": { + "bamarni/composer-bin-plugin": "^1.8.2", + "http-interop/http-factory-tests": "^0.9", + "phpunit/phpunit": "^8.5.36 || ^9.6.15" + }, + "suggest": { + "laminas/laminas-httphandlerrunner": "Emit PSR-7 responses" + }, + "type": "library", + "extra": { + "bamarni-bin": { + "bin-links": true, + "forward-command": false + } + }, + "autoload": { + "psr-4": { + "GuzzleHttp\\Psr7\\": "src/" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Graham Campbell", + "email": "hello@gjcampbell.co.uk", + "homepage": "https://github.com/GrahamCampbell" + }, + { + "name": "Michael Dowling", + "email": "mtdowling@gmail.com", + "homepage": "https://github.com/mtdowling" + }, + { + "name": "George Mponos", + "email": "gmponos@gmail.com", + "homepage": "https://github.com/gmponos" + }, + { + "name": "Tobias Nyholm", + "email": "tobias.nyholm@gmail.com", + "homepage": "https://github.com/Nyholm" + }, + { + "name": "Márk Sági-Kazár", + "email": "mark.sagikazar@gmail.com", + "homepage": "https://github.com/sagikazarmark" + }, + { + "name": "Tobias Schultze", + "email": "webmaster@tubo-world.de", + "homepage": "https://github.com/Tobion" + }, + { + "name": "Márk Sági-Kazár", + "email": "mark.sagikazar@gmail.com", + "homepage": "https://sagikazarmark.hu" + } + ], + "description": "PSR-7 message implementation that also provides common utility methods", + "keywords": [ + "http", + "message", + "psr-7", + "request", + "response", + "stream", + "uri", + "url" + ], + "support": { + "issues": "https://github.com/guzzle/psr7/issues", + "source": "https://github.com/guzzle/psr7/tree/2.6.2" + }, + "funding": [ + { + "url": "https://github.com/GrahamCampbell", + "type": "github" + }, + { + "url": "https://github.com/Nyholm", + "type": "github" + }, + { + "url": "https://tidelift.com/funding/github/packagist/guzzlehttp/psr7", + "type": "tidelift" + } + ], + "time": "2023-12-03T20:05:35+00:00" + }, + { + "name": "guzzlehttp/uri-template", + "version": "v1.0.3", + "source": { + "type": "git", + "url": "https://github.com/guzzle/uri-template.git", + "reference": "ecea8feef63bd4fef1f037ecb288386999ecc11c" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/guzzle/uri-template/zipball/ecea8feef63bd4fef1f037ecb288386999ecc11c", + "reference": "ecea8feef63bd4fef1f037ecb288386999ecc11c", + "shasum": "" + }, + "require": { + "php": "^7.2.5 || ^8.0", + "symfony/polyfill-php80": "^1.24" + }, + "require-dev": { + "bamarni/composer-bin-plugin": "^1.8.2", + "phpunit/phpunit": "^8.5.36 || ^9.6.15", + "uri-template/tests": "1.0.0" + }, + "type": "library", + "extra": { + "bamarni-bin": { + "bin-links": true, + "forward-command": false + } + }, + "autoload": { + "psr-4": { + "GuzzleHttp\\UriTemplate\\": "src" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Graham Campbell", + "email": "hello@gjcampbell.co.uk", + "homepage": "https://github.com/GrahamCampbell" + }, + { + "name": "Michael Dowling", + "email": "mtdowling@gmail.com", + "homepage": "https://github.com/mtdowling" + }, + { + "name": "George Mponos", + "email": "gmponos@gmail.com", + "homepage": "https://github.com/gmponos" + }, + { + "name": "Tobias Nyholm", + "email": "tobias.nyholm@gmail.com", + "homepage": "https://github.com/Nyholm" + } + ], + "description": "A polyfill class for uri_template of PHP", + "keywords": [ + "guzzlehttp", + "uri-template" + ], + "support": { + "issues": "https://github.com/guzzle/uri-template/issues", + "source": "https://github.com/guzzle/uri-template/tree/v1.0.3" + }, + "funding": [ + { + "url": "https://github.com/GrahamCampbell", + "type": "github" + }, + { + "url": "https://github.com/Nyholm", + "type": "github" + }, + { + "url": "https://tidelift.com/funding/github/packagist/guzzlehttp/uri-template", + "type": "tidelift" + } + ], + "time": "2023-12-03T19:50:20+00:00" + }, + { + "name": "laravel/framework", + "version": "v11.7.0", + "source": { + "type": "git", + "url": "https://github.com/laravel/framework.git", + "reference": "e5ac72f513f635f208024aa76b8a04efc1b47f93" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/laravel/framework/zipball/e5ac72f513f635f208024aa76b8a04efc1b47f93", + "reference": "e5ac72f513f635f208024aa76b8a04efc1b47f93", + "shasum": "" + }, + "require": { + "brick/math": "^0.9.3|^0.10.2|^0.11|^0.12", + "composer-runtime-api": "^2.2", + "doctrine/inflector": "^2.0.5", + "dragonmantank/cron-expression": "^3.3.2", + "egulias/email-validator": "^3.2.1|^4.0", + "ext-ctype": "*", + "ext-filter": "*", + "ext-hash": "*", + "ext-mbstring": "*", + "ext-openssl": "*", + "ext-session": "*", + "ext-tokenizer": "*", + "fruitcake/php-cors": "^1.3", + "guzzlehttp/guzzle": "^7.8", + "guzzlehttp/uri-template": "^1.0", + "laravel/prompts": "^0.1.18", + "laravel/serializable-closure": "^1.3", + "league/commonmark": "^2.2.1", + "league/flysystem": "^3.8.0", + "monolog/monolog": "^3.0", + "nesbot/carbon": "^2.72.2|^3.0", + "nunomaduro/termwind": "^2.0", + "php": "^8.2", + "psr/container": "^1.1.1|^2.0.1", + "psr/log": "^1.0|^2.0|^3.0", + "psr/simple-cache": "^1.0|^2.0|^3.0", + "ramsey/uuid": "^4.7", + "symfony/console": "^7.0", + "symfony/error-handler": "^7.0", + "symfony/finder": "^7.0", + "symfony/http-foundation": "^7.0", + "symfony/http-kernel": "^7.0", + "symfony/mailer": "^7.0", + "symfony/mime": "^7.0", + "symfony/polyfill-php83": "^1.28", + "symfony/process": "^7.0", + "symfony/routing": "^7.0", + "symfony/uid": "^7.0", + "symfony/var-dumper": "^7.0", + "tijsverkoyen/css-to-inline-styles": "^2.2.5", + "vlucas/phpdotenv": "^5.4.1", + "voku/portable-ascii": "^2.0" + }, + "conflict": { + "mockery/mockery": "1.6.8", + "tightenco/collect": "<5.5.33" + }, + "provide": { + "psr/container-implementation": "1.1|2.0", + "psr/simple-cache-implementation": "1.0|2.0|3.0" + }, + "replace": { + "illuminate/auth": "self.version", + "illuminate/broadcasting": "self.version", + "illuminate/bus": "self.version", + "illuminate/cache": "self.version", + "illuminate/collections": "self.version", + "illuminate/conditionable": "self.version", + "illuminate/config": "self.version", + "illuminate/console": "self.version", + "illuminate/container": "self.version", + "illuminate/contracts": "self.version", + "illuminate/cookie": "self.version", + "illuminate/database": "self.version", + "illuminate/encryption": "self.version", + "illuminate/events": "self.version", + "illuminate/filesystem": "self.version", + "illuminate/hashing": "self.version", + "illuminate/http": "self.version", + "illuminate/log": "self.version", + "illuminate/macroable": "self.version", + "illuminate/mail": "self.version", + "illuminate/notifications": "self.version", + "illuminate/pagination": "self.version", + "illuminate/pipeline": "self.version", + "illuminate/process": "self.version", + "illuminate/queue": "self.version", + "illuminate/redis": "self.version", + "illuminate/routing": "self.version", + "illuminate/session": "self.version", + "illuminate/support": "self.version", + "illuminate/testing": "self.version", + "illuminate/translation": "self.version", + "illuminate/validation": "self.version", + "illuminate/view": "self.version", + "spatie/once": "*" + }, + "require-dev": { + "ably/ably-php": "^1.0", + "aws/aws-sdk-php": "^3.235.5", + "ext-gmp": "*", + "fakerphp/faker": "^1.23", + "league/flysystem-aws-s3-v3": "^3.0", + "league/flysystem-ftp": "^3.0", + "league/flysystem-path-prefixing": "^3.3", + "league/flysystem-read-only": "^3.3", + "league/flysystem-sftp-v3": "^3.0", + "mockery/mockery": "^1.6", + "nyholm/psr7": "^1.2", + "orchestra/testbench-core": "^9.0.15", + "pda/pheanstalk": "^5.0", + "phpstan/phpstan": "^1.4.7", + "phpunit/phpunit": "^10.5|^11.0", + "predis/predis": "^2.0.2", + "resend/resend-php": "^0.10.0", + "symfony/cache": "^7.0", + "symfony/http-client": "^7.0", + "symfony/psr-http-message-bridge": "^7.0" + }, + "suggest": { + "ably/ably-php": "Required to use the Ably broadcast driver (^1.0).", + "aws/aws-sdk-php": "Required to use the SQS queue driver, DynamoDb failed job storage, and SES mail driver (^3.235.5).", + "brianium/paratest": "Required to run tests in parallel (^7.0|^8.0).", + "ext-apcu": "Required to use the APC cache driver.", + "ext-fileinfo": "Required to use the Filesystem class.", + "ext-ftp": "Required to use the Flysystem FTP driver.", + "ext-gd": "Required to use Illuminate\\Http\\Testing\\FileFactory::image().", + "ext-memcached": "Required to use the memcache cache driver.", + "ext-pcntl": "Required to use all features of the queue worker and console signal trapping.", + "ext-pdo": "Required to use all database features.", + "ext-posix": "Required to use all features of the queue worker.", + "ext-redis": "Required to use the Redis cache and queue drivers (^4.0|^5.0).", + "fakerphp/faker": "Required to use the eloquent factory builder (^1.9.1).", + "filp/whoops": "Required for friendly error pages in development (^2.14.3).", + "laravel/tinker": "Required to use the tinker console command (^2.0).", + "league/flysystem-aws-s3-v3": "Required to use the Flysystem S3 driver (^3.0).", + "league/flysystem-ftp": "Required to use the Flysystem FTP driver (^3.0).", + "league/flysystem-path-prefixing": "Required to use the scoped driver (^3.3).", + "league/flysystem-read-only": "Required to use read-only disks (^3.3)", + "league/flysystem-sftp-v3": "Required to use the Flysystem SFTP driver (^3.0).", + "mockery/mockery": "Required to use mocking (^1.6).", + "nyholm/psr7": "Required to use PSR-7 bridging features (^1.2).", + "pda/pheanstalk": "Required to use the beanstalk queue driver (^5.0).", + "phpunit/phpunit": "Required to use assertions and run tests (^10.5|^11.0).", + "predis/predis": "Required to use the predis connector (^2.0.2).", + "psr/http-message": "Required to allow Storage::put to accept a StreamInterface (^1.0).", + "pusher/pusher-php-server": "Required to use the Pusher broadcast driver (^6.0|^7.0).", + "resend/resend-php": "Required to enable support for the Resend mail transport (^0.10.0).", + "symfony/cache": "Required to PSR-6 cache bridge (^7.0).", + "symfony/filesystem": "Required to enable support for relative symbolic links (^7.0).", + "symfony/http-client": "Required to enable support for the Symfony API mail transports (^7.0).", + "symfony/mailgun-mailer": "Required to enable support for the Mailgun mail transport (^7.0).", + "symfony/postmark-mailer": "Required to enable support for the Postmark mail transport (^7.0).", + "symfony/psr-http-message-bridge": "Required to use PSR-7 bridging features (^7.0)." + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "11.x-dev" + } + }, + "autoload": { + "files": [ + "src/Illuminate/Collections/helpers.php", + "src/Illuminate/Events/functions.php", + "src/Illuminate/Filesystem/functions.php", + "src/Illuminate/Foundation/helpers.php", + "src/Illuminate/Support/helpers.php" + ], + "psr-4": { + "Illuminate\\": "src/Illuminate/", + "Illuminate\\Support\\": [ + "src/Illuminate/Macroable/", + "src/Illuminate/Collections/", + "src/Illuminate/Conditionable/" + ] + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Taylor Otwell", + "email": "taylor@laravel.com" + } + ], + "description": "The Laravel Framework.", + "homepage": "https://laravel.com", + "keywords": [ + "framework", + "laravel" + ], + "support": { + "issues": "https://github.com/laravel/framework/issues", + "source": "https://github.com/laravel/framework" + }, + "time": "2024-05-07T13:41:51+00:00" + }, + { + "name": "laravel/prompts", + "version": "v0.1.21", + "source": { + "type": "git", + "url": "https://github.com/laravel/prompts.git", + "reference": "23ea808e8a145653e0ab29e30d4385e49f40a920" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/laravel/prompts/zipball/23ea808e8a145653e0ab29e30d4385e49f40a920", + "reference": "23ea808e8a145653e0ab29e30d4385e49f40a920", + "shasum": "" + }, + "require": { + "ext-mbstring": "*", + "illuminate/collections": "^10.0|^11.0", + "php": "^8.1", + "symfony/console": "^6.2|^7.0" + }, + "conflict": { + "illuminate/console": ">=10.17.0 <10.25.0", + "laravel/framework": ">=10.17.0 <10.25.0" + }, + "require-dev": { + "mockery/mockery": "^1.5", + "pestphp/pest": "^2.3", + "phpstan/phpstan": "^1.11", + "phpstan/phpstan-mockery": "^1.1" + }, + "suggest": { + "ext-pcntl": "Required for the spinner to be animated." + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-main": "0.1.x-dev" + } + }, + "autoload": { + "files": [ + "src/helpers.php" + ], + "psr-4": { + "Laravel\\Prompts\\": "src/" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "description": "Add beautiful and user-friendly forms to your command-line applications.", + "support": { + "issues": "https://github.com/laravel/prompts/issues", + "source": "https://github.com/laravel/prompts/tree/v0.1.21" + }, + "time": "2024-04-30T12:46:16+00:00" + }, + { + "name": "laravel/serializable-closure", + "version": "v1.3.3", + "source": { + "type": "git", + "url": "https://github.com/laravel/serializable-closure.git", + "reference": "3dbf8a8e914634c48d389c1234552666b3d43754" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/laravel/serializable-closure/zipball/3dbf8a8e914634c48d389c1234552666b3d43754", + "reference": "3dbf8a8e914634c48d389c1234552666b3d43754", + "shasum": "" + }, + "require": { + "php": "^7.3|^8.0" + }, + "require-dev": { + "nesbot/carbon": "^2.61", + "pestphp/pest": "^1.21.3", + "phpstan/phpstan": "^1.8.2", + "symfony/var-dumper": "^5.4.11" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "1.x-dev" + } + }, + "autoload": { + "psr-4": { + "Laravel\\SerializableClosure\\": "src/" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Taylor Otwell", + "email": "taylor@laravel.com" + }, + { + "name": "Nuno Maduro", + "email": "nuno@laravel.com" + } + ], + "description": "Laravel Serializable Closure provides an easy and secure way to serialize closures in PHP.", + "keywords": [ + "closure", + "laravel", + "serializable" + ], + "support": { + "issues": "https://github.com/laravel/serializable-closure/issues", + "source": "https://github.com/laravel/serializable-closure" + }, + "time": "2023-11-08T14:08:06+00:00" + }, + { + "name": "laravel/tinker", + "version": "v2.9.0", + "source": { + "type": "git", + "url": "https://github.com/laravel/tinker.git", + "reference": "502e0fe3f0415d06d5db1f83a472f0f3b754bafe" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/laravel/tinker/zipball/502e0fe3f0415d06d5db1f83a472f0f3b754bafe", + "reference": "502e0fe3f0415d06d5db1f83a472f0f3b754bafe", + "shasum": "" + }, + "require": { + "illuminate/console": "^6.0|^7.0|^8.0|^9.0|^10.0|^11.0", + "illuminate/contracts": "^6.0|^7.0|^8.0|^9.0|^10.0|^11.0", + "illuminate/support": "^6.0|^7.0|^8.0|^9.0|^10.0|^11.0", + "php": "^7.2.5|^8.0", + "psy/psysh": "^0.11.1|^0.12.0", + "symfony/var-dumper": "^4.3.4|^5.0|^6.0|^7.0" + }, + "require-dev": { + "mockery/mockery": "~1.3.3|^1.4.2", + "phpstan/phpstan": "^1.10", + "phpunit/phpunit": "^8.5.8|^9.3.3" + }, + "suggest": { + "illuminate/database": "The Illuminate Database package (^6.0|^7.0|^8.0|^9.0|^10.0|^11.0)." + }, + "type": "library", + "extra": { + "laravel": { + "providers": [ + "Laravel\\Tinker\\TinkerServiceProvider" + ] + } + }, + "autoload": { + "psr-4": { + "Laravel\\Tinker\\": "src/" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Taylor Otwell", + "email": "taylor@laravel.com" + } + ], + "description": "Powerful REPL for the Laravel framework.", + "keywords": [ + "REPL", + "Tinker", + "laravel", + "psysh" + ], + "support": { + "issues": "https://github.com/laravel/tinker/issues", + "source": "https://github.com/laravel/tinker/tree/v2.9.0" + }, + "time": "2024-01-04T16:10:04+00:00" + }, + { + "name": "league/commonmark", + "version": "2.4.2", + "source": { + "type": "git", + "url": "https://github.com/thephpleague/commonmark.git", + "reference": "91c24291965bd6d7c46c46a12ba7492f83b1cadf" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/thephpleague/commonmark/zipball/91c24291965bd6d7c46c46a12ba7492f83b1cadf", + "reference": "91c24291965bd6d7c46c46a12ba7492f83b1cadf", + "shasum": "" + }, + "require": { + "ext-mbstring": "*", + "league/config": "^1.1.1", + "php": "^7.4 || ^8.0", + "psr/event-dispatcher": "^1.0", + "symfony/deprecation-contracts": "^2.1 || ^3.0", + "symfony/polyfill-php80": "^1.16" + }, + "require-dev": { + "cebe/markdown": "^1.0", + "commonmark/cmark": "0.30.3", + "commonmark/commonmark.js": "0.30.0", + "composer/package-versions-deprecated": "^1.8", + "embed/embed": "^4.4", + "erusev/parsedown": "^1.0", + "ext-json": "*", + "github/gfm": "0.29.0", + "michelf/php-markdown": "^1.4 || ^2.0", + "nyholm/psr7": "^1.5", + "phpstan/phpstan": "^1.8.2", + "phpunit/phpunit": "^9.5.21 || ^10.5.9 || ^11.0.0", + "scrutinizer/ocular": "^1.8.1", + "symfony/finder": "^5.3 | ^6.0 || ^7.0", + "symfony/yaml": "^2.3 | ^3.0 | ^4.0 | ^5.0 | ^6.0 || ^7.0", + "unleashedtech/php-coding-standard": "^3.1.1", + "vimeo/psalm": "^4.24.0 || ^5.0.0" + }, + "suggest": { + "symfony/yaml": "v2.3+ required if using the Front Matter extension" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-main": "2.5-dev" + } + }, + "autoload": { + "psr-4": { + "League\\CommonMark\\": "src" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "BSD-3-Clause" + ], + "authors": [ + { + "name": "Colin O'Dell", + "email": "colinodell@gmail.com", + "homepage": "https://www.colinodell.com", + "role": "Lead Developer" + } + ], + "description": "Highly-extensible PHP Markdown parser which fully supports the CommonMark spec and GitHub-Flavored Markdown (GFM)", + "homepage": "https://commonmark.thephpleague.com", + "keywords": [ + "commonmark", + "flavored", + "gfm", + "github", + "github-flavored", + "markdown", + "md", + "parser" + ], + "support": { + "docs": "https://commonmark.thephpleague.com/", + "forum": "https://github.com/thephpleague/commonmark/discussions", + "issues": "https://github.com/thephpleague/commonmark/issues", + "rss": "https://github.com/thephpleague/commonmark/releases.atom", + "source": "https://github.com/thephpleague/commonmark" + }, + "funding": [ + { + "url": "https://www.colinodell.com/sponsor", + "type": "custom" + }, + { + "url": "https://www.paypal.me/colinpodell/10.00", + "type": "custom" + }, + { + "url": "https://github.com/colinodell", + "type": "github" + }, + { + "url": "https://tidelift.com/funding/github/packagist/league/commonmark", + "type": "tidelift" + } + ], + "time": "2024-02-02T11:59:32+00:00" + }, + { + "name": "league/config", + "version": "v1.2.0", + "source": { + "type": "git", + "url": "https://github.com/thephpleague/config.git", + "reference": "754b3604fb2984c71f4af4a9cbe7b57f346ec1f3" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/thephpleague/config/zipball/754b3604fb2984c71f4af4a9cbe7b57f346ec1f3", + "reference": "754b3604fb2984c71f4af4a9cbe7b57f346ec1f3", + "shasum": "" + }, + "require": { + "dflydev/dot-access-data": "^3.0.1", + "nette/schema": "^1.2", + "php": "^7.4 || ^8.0" + }, + "require-dev": { + "phpstan/phpstan": "^1.8.2", + "phpunit/phpunit": "^9.5.5", + "scrutinizer/ocular": "^1.8.1", + "unleashedtech/php-coding-standard": "^3.1", + "vimeo/psalm": "^4.7.3" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-main": "1.2-dev" + } + }, + "autoload": { + "psr-4": { + "League\\Config\\": "src" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "BSD-3-Clause" + ], + "authors": [ + { + "name": "Colin O'Dell", + "email": "colinodell@gmail.com", + "homepage": "https://www.colinodell.com", + "role": "Lead Developer" + } + ], + "description": "Define configuration arrays with strict schemas and access values with dot notation", + "homepage": "https://config.thephpleague.com", + "keywords": [ + "array", + "config", + "configuration", + "dot", + "dot-access", + "nested", + "schema" + ], + "support": { + "docs": "https://config.thephpleague.com/", + "issues": "https://github.com/thephpleague/config/issues", + "rss": "https://github.com/thephpleague/config/releases.atom", + "source": "https://github.com/thephpleague/config" + }, + "funding": [ + { + "url": "https://www.colinodell.com/sponsor", + "type": "custom" + }, + { + "url": "https://www.paypal.me/colinpodell/10.00", + "type": "custom" + }, + { + "url": "https://github.com/colinodell", + "type": "github" + } + ], + "time": "2022-12-11T20:36:23+00:00" + }, + { + "name": "league/flysystem", + "version": "3.27.0", + "source": { + "type": "git", + "url": "https://github.com/thephpleague/flysystem.git", + "reference": "4729745b1ab737908c7d055148c9a6b3e959832f" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/thephpleague/flysystem/zipball/4729745b1ab737908c7d055148c9a6b3e959832f", + "reference": "4729745b1ab737908c7d055148c9a6b3e959832f", + "shasum": "" + }, + "require": { + "league/flysystem-local": "^3.0.0", + "league/mime-type-detection": "^1.0.0", + "php": "^8.0.2" + }, + "conflict": { + "async-aws/core": "<1.19.0", + "async-aws/s3": "<1.14.0", + "aws/aws-sdk-php": "3.209.31 || 3.210.0", + "guzzlehttp/guzzle": "<7.0", + "guzzlehttp/ringphp": "<1.1.1", + "phpseclib/phpseclib": "3.0.15", + "symfony/http-client": "<5.2" + }, + "require-dev": { + "async-aws/s3": "^1.5 || ^2.0", + "async-aws/simple-s3": "^1.1 || ^2.0", + "aws/aws-sdk-php": "^3.295.10", + "composer/semver": "^3.0", + "ext-fileinfo": "*", + "ext-ftp": "*", + "ext-zip": "*", + "friendsofphp/php-cs-fixer": "^3.5", + "google/cloud-storage": "^1.23", + "microsoft/azure-storage-blob": "^1.1", + "phpseclib/phpseclib": "^3.0.36", + "phpstan/phpstan": "^1.10", + "phpunit/phpunit": "^9.5.11|^10.0", + "sabre/dav": "^4.6.0" + }, + "type": "library", + "autoload": { + "psr-4": { + "League\\Flysystem\\": "src" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Frank de Jonge", + "email": "info@frankdejonge.nl" + } + ], + "description": "File storage abstraction for PHP", + "keywords": [ + "WebDAV", + "aws", + "cloud", + "file", + "files", + "filesystem", + "filesystems", + "ftp", + "s3", + "sftp", + "storage" + ], + "support": { + "issues": "https://github.com/thephpleague/flysystem/issues", + "source": "https://github.com/thephpleague/flysystem/tree/3.27.0" + }, + "funding": [ + { + "url": "https://ecologi.com/frankdejonge", + "type": "custom" + }, + { + "url": "https://github.com/frankdejonge", + "type": "github" + } + ], + "time": "2024-04-07T19:17:50+00:00" + }, + { + "name": "league/flysystem-local", + "version": "3.25.1", + "source": { + "type": "git", + "url": "https://github.com/thephpleague/flysystem-local.git", + "reference": "61a6a90d6e999e4ddd9ce5adb356de0939060b92" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/thephpleague/flysystem-local/zipball/61a6a90d6e999e4ddd9ce5adb356de0939060b92", + "reference": "61a6a90d6e999e4ddd9ce5adb356de0939060b92", + "shasum": "" + }, + "require": { + "ext-fileinfo": "*", + "league/flysystem": "^3.0.0", + "league/mime-type-detection": "^1.0.0", + "php": "^8.0.2" + }, + "type": "library", + "autoload": { + "psr-4": { + "League\\Flysystem\\Local\\": "" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Frank de Jonge", + "email": "info@frankdejonge.nl" + } + ], + "description": "Local filesystem adapter for Flysystem.", + "keywords": [ + "Flysystem", + "file", + "files", + "filesystem", + "local" + ], + "support": { + "source": "https://github.com/thephpleague/flysystem-local/tree/3.25.1" + }, + "funding": [ + { + "url": "https://ecologi.com/frankdejonge", + "type": "custom" + }, + { + "url": "https://github.com/frankdejonge", + "type": "github" + } + ], + "time": "2024-03-15T19:58:44+00:00" + }, + { + "name": "league/mime-type-detection", + "version": "1.15.0", + "source": { + "type": "git", + "url": "https://github.com/thephpleague/mime-type-detection.git", + "reference": "ce0f4d1e8a6f4eb0ddff33f57c69c50fd09f4301" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/thephpleague/mime-type-detection/zipball/ce0f4d1e8a6f4eb0ddff33f57c69c50fd09f4301", + "reference": "ce0f4d1e8a6f4eb0ddff33f57c69c50fd09f4301", + "shasum": "" + }, + "require": { + "ext-fileinfo": "*", + "php": "^7.4 || ^8.0" + }, + "require-dev": { + "friendsofphp/php-cs-fixer": "^3.2", + "phpstan/phpstan": "^0.12.68", + "phpunit/phpunit": "^8.5.8 || ^9.3 || ^10.0" + }, + "type": "library", + "autoload": { + "psr-4": { + "League\\MimeTypeDetection\\": "src" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Frank de Jonge", + "email": "info@frankdejonge.nl" + } + ], + "description": "Mime-type detection for Flysystem", + "support": { + "issues": "https://github.com/thephpleague/mime-type-detection/issues", + "source": "https://github.com/thephpleague/mime-type-detection/tree/1.15.0" + }, + "funding": [ + { + "url": "https://github.com/frankdejonge", + "type": "github" + }, + { + "url": "https://tidelift.com/funding/github/packagist/league/flysystem", + "type": "tidelift" + } + ], + "time": "2024-01-28T23:22:08+00:00" + }, + { + "name": "monolog/monolog", + "version": "3.6.0", + "source": { + "type": "git", + "url": "https://github.com/Seldaek/monolog.git", + "reference": "4b18b21a5527a3d5ffdac2fd35d3ab25a9597654" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/Seldaek/monolog/zipball/4b18b21a5527a3d5ffdac2fd35d3ab25a9597654", + "reference": "4b18b21a5527a3d5ffdac2fd35d3ab25a9597654", + "shasum": "" + }, + "require": { + "php": ">=8.1", + "psr/log": "^2.0 || ^3.0" + }, + "provide": { + "psr/log-implementation": "3.0.0" + }, + "require-dev": { + "aws/aws-sdk-php": "^3.0", + "doctrine/couchdb": "~1.0@dev", + "elasticsearch/elasticsearch": "^7 || ^8", + "ext-json": "*", + "graylog2/gelf-php": "^1.4.2 || ^2.0", + "guzzlehttp/guzzle": "^7.4.5", + "guzzlehttp/psr7": "^2.2", + "mongodb/mongodb": "^1.8", + "php-amqplib/php-amqplib": "~2.4 || ^3", + "phpstan/phpstan": "^1.9", + "phpstan/phpstan-deprecation-rules": "^1.0", + "phpstan/phpstan-strict-rules": "^1.4", + "phpunit/phpunit": "^10.5.17", + "predis/predis": "^1.1 || ^2", + "ruflin/elastica": "^7", + "symfony/mailer": "^5.4 || ^6", + "symfony/mime": "^5.4 || ^6" + }, + "suggest": { + "aws/aws-sdk-php": "Allow sending log messages to AWS services like DynamoDB", + "doctrine/couchdb": "Allow sending log messages to a CouchDB server", + "elasticsearch/elasticsearch": "Allow sending log messages to an Elasticsearch server via official client", + "ext-amqp": "Allow sending log messages to an AMQP server (1.0+ required)", + "ext-curl": "Required to send log messages using the IFTTTHandler, the LogglyHandler, the SendGridHandler, the SlackWebhookHandler or the TelegramBotHandler", + "ext-mbstring": "Allow to work properly with unicode symbols", + "ext-mongodb": "Allow sending log messages to a MongoDB server (via driver)", + "ext-openssl": "Required to send log messages using SSL", + "ext-sockets": "Allow sending log messages to a Syslog server (via UDP driver)", + "graylog2/gelf-php": "Allow sending log messages to a GrayLog2 server", + "mongodb/mongodb": "Allow sending log messages to a MongoDB server (via library)", + "php-amqplib/php-amqplib": "Allow sending log messages to an AMQP server using php-amqplib", + "rollbar/rollbar": "Allow sending log messages to Rollbar", + "ruflin/elastica": "Allow sending log messages to an Elastic Search server" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-main": "3.x-dev" + } + }, + "autoload": { + "psr-4": { + "Monolog\\": "src/Monolog" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Jordi Boggiano", + "email": "j.boggiano@seld.be", + "homepage": "https://seld.be" + } + ], + "description": "Sends your logs to files, sockets, inboxes, databases and various web services", + "homepage": "https://github.com/Seldaek/monolog", + "keywords": [ + "log", + "logging", + "psr-3" + ], + "support": { + "issues": "https://github.com/Seldaek/monolog/issues", + "source": "https://github.com/Seldaek/monolog/tree/3.6.0" + }, + "funding": [ + { + "url": "https://github.com/Seldaek", + "type": "github" + }, + { + "url": "https://tidelift.com/funding/github/packagist/monolog/monolog", + "type": "tidelift" + } + ], + "time": "2024-04-12T21:02:21+00:00" + }, + { + "name": "nesbot/carbon", + "version": "3.3.1", + "source": { + "type": "git", + "url": "https://github.com/briannesbitt/Carbon.git", + "reference": "8ff64b92c1b1ec84fcde9f8bb9ff2ca34cb8a77a" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/briannesbitt/Carbon/zipball/8ff64b92c1b1ec84fcde9f8bb9ff2ca34cb8a77a", + "reference": "8ff64b92c1b1ec84fcde9f8bb9ff2ca34cb8a77a", + "shasum": "" + }, + "require": { + "carbonphp/carbon-doctrine-types": "*", + "ext-json": "*", + "php": "^8.1", + "psr/clock": "^1.0", + "symfony/clock": "^6.3 || ^7.0", + "symfony/polyfill-mbstring": "^1.0", + "symfony/translation": "^4.4.18 || ^5.2.1|| ^6.0 || ^7.0" + }, + "provide": { + "psr/clock-implementation": "1.0" + }, + "require-dev": { + "doctrine/dbal": "^3.6.3 || ^4.0", + "doctrine/orm": "^2.15.2 || ^3.0", + "friendsofphp/php-cs-fixer": "^3.52.1", + "kylekatarnls/multi-tester": "^2.5.3", + "ondrejmirtes/better-reflection": "^6.25.0.4", + "phpmd/phpmd": "^2.15.0", + "phpstan/extension-installer": "^1.3.1", + "phpstan/phpstan": "^1.10.65", + "phpunit/phpunit": "^10.5.15", + "squizlabs/php_codesniffer": "^3.9.0" + }, + "bin": [ + "bin/carbon" + ], + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "3.x-dev", + "dev-2.x": "2.x-dev" + }, + "laravel": { + "providers": [ + "Carbon\\Laravel\\ServiceProvider" + ] + }, + "phpstan": { + "includes": [ + "extension.neon" + ] + } + }, + "autoload": { + "psr-4": { + "Carbon\\": "src/Carbon/" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Brian Nesbitt", + "email": "brian@nesbot.com", + "homepage": "https://markido.com" + }, + { + "name": "kylekatarnls", + "homepage": "https://github.com/kylekatarnls" + } + ], + "description": "An API extension for DateTime that supports 281 different languages.", + "homepage": "https://carbon.nesbot.com", + "keywords": [ + "date", + "datetime", + "time" + ], + "support": { + "docs": "https://carbon.nesbot.com/docs", + "issues": "https://github.com/briannesbitt/Carbon/issues", + "source": "https://github.com/briannesbitt/Carbon" + }, + "funding": [ + { + "url": "https://github.com/sponsors/kylekatarnls", + "type": "github" + }, + { + "url": "https://opencollective.com/Carbon#sponsor", + "type": "opencollective" + }, + { + "url": "https://tidelift.com/subscription/pkg/packagist-nesbot-carbon?utm_source=packagist-nesbot-carbon&utm_medium=referral&utm_campaign=readme", + "type": "tidelift" + } + ], + "time": "2024-05-01T06:54:22+00:00" + }, + { + "name": "nette/schema", + "version": "v1.3.0", + "source": { + "type": "git", + "url": "https://github.com/nette/schema.git", + "reference": "a6d3a6d1f545f01ef38e60f375d1cf1f4de98188" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/nette/schema/zipball/a6d3a6d1f545f01ef38e60f375d1cf1f4de98188", + "reference": "a6d3a6d1f545f01ef38e60f375d1cf1f4de98188", + "shasum": "" + }, + "require": { + "nette/utils": "^4.0", + "php": "8.1 - 8.3" + }, + "require-dev": { + "nette/tester": "^2.4", + "phpstan/phpstan-nette": "^1.0", + "tracy/tracy": "^2.8" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "1.3-dev" + } + }, + "autoload": { + "classmap": [ + "src/" + ] + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "BSD-3-Clause", + "GPL-2.0-only", + "GPL-3.0-only" + ], + "authors": [ + { + "name": "David Grudl", + "homepage": "https://davidgrudl.com" + }, + { + "name": "Nette Community", + "homepage": "https://nette.org/contributors" + } + ], + "description": "📐 Nette Schema: validating data structures against a given Schema.", + "homepage": "https://nette.org", + "keywords": [ + "config", + "nette" + ], + "support": { + "issues": "https://github.com/nette/schema/issues", + "source": "https://github.com/nette/schema/tree/v1.3.0" + }, + "time": "2023-12-11T11:54:22+00:00" + }, + { + "name": "nette/utils", + "version": "v4.0.4", + "source": { + "type": "git", + "url": "https://github.com/nette/utils.git", + "reference": "d3ad0aa3b9f934602cb3e3902ebccf10be34d218" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/nette/utils/zipball/d3ad0aa3b9f934602cb3e3902ebccf10be34d218", + "reference": "d3ad0aa3b9f934602cb3e3902ebccf10be34d218", + "shasum": "" + }, + "require": { + "php": ">=8.0 <8.4" + }, + "conflict": { + "nette/finder": "<3", + "nette/schema": "<1.2.2" + }, + "require-dev": { + "jetbrains/phpstorm-attributes": "dev-master", + "nette/tester": "^2.5", + "phpstan/phpstan": "^1.0", + "tracy/tracy": "^2.9" + }, + "suggest": { + "ext-gd": "to use Image", + "ext-iconv": "to use Strings::webalize(), toAscii(), chr() and reverse()", + "ext-intl": "to use Strings::webalize(), toAscii(), normalize() and compare()", + "ext-json": "to use Nette\\Utils\\Json", + "ext-mbstring": "to use Strings::lower() etc...", + "ext-tokenizer": "to use Nette\\Utils\\Reflection::getUseStatements()" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "4.0-dev" + } + }, + "autoload": { + "classmap": [ + "src/" + ] + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "BSD-3-Clause", + "GPL-2.0-only", + "GPL-3.0-only" + ], + "authors": [ + { + "name": "David Grudl", + "homepage": "https://davidgrudl.com" + }, + { + "name": "Nette Community", + "homepage": "https://nette.org/contributors" + } + ], + "description": "🛠 Nette Utils: lightweight utilities for string & array manipulation, image handling, safe JSON encoding/decoding, validation, slug or strong password generating etc.", + "homepage": "https://nette.org", + "keywords": [ + "array", + "core", + "datetime", + "images", + "json", + "nette", + "paginator", + "password", + "slugify", + "string", + "unicode", + "utf-8", + "utility", + "validation" + ], + "support": { + "issues": "https://github.com/nette/utils/issues", + "source": "https://github.com/nette/utils/tree/v4.0.4" + }, + "time": "2024-01-17T16:50:36+00:00" + }, + { + "name": "nikic/php-parser", + "version": "v5.0.2", + "source": { + "type": "git", + "url": "https://github.com/nikic/PHP-Parser.git", + "reference": "139676794dc1e9231bf7bcd123cfc0c99182cb13" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/nikic/PHP-Parser/zipball/139676794dc1e9231bf7bcd123cfc0c99182cb13", + "reference": "139676794dc1e9231bf7bcd123cfc0c99182cb13", + "shasum": "" + }, + "require": { + "ext-ctype": "*", + "ext-json": "*", + "ext-tokenizer": "*", + "php": ">=7.4" + }, + "require-dev": { + "ircmaxell/php-yacc": "^0.0.7", + "phpunit/phpunit": "^7.0 || ^8.0 || ^9.0" + }, + "bin": [ + "bin/php-parse" + ], + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "5.0-dev" + } + }, + "autoload": { + "psr-4": { + "PhpParser\\": "lib/PhpParser" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "BSD-3-Clause" + ], + "authors": [ + { + "name": "Nikita Popov" + } + ], + "description": "A PHP parser written in PHP", + "keywords": [ + "parser", + "php" + ], + "support": { + "issues": "https://github.com/nikic/PHP-Parser/issues", + "source": "https://github.com/nikic/PHP-Parser/tree/v5.0.2" + }, + "time": "2024-03-05T20:51:40+00:00" + }, + { + "name": "nunomaduro/termwind", + "version": "v2.0.1", + "source": { + "type": "git", + "url": "https://github.com/nunomaduro/termwind.git", + "reference": "58c4c58cf23df7f498daeb97092e34f5259feb6a" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/nunomaduro/termwind/zipball/58c4c58cf23df7f498daeb97092e34f5259feb6a", + "reference": "58c4c58cf23df7f498daeb97092e34f5259feb6a", + "shasum": "" + }, + "require": { + "ext-mbstring": "*", + "php": "^8.2", + "symfony/console": "^7.0.4" + }, + "require-dev": { + "ergebnis/phpstan-rules": "^2.2.0", + "illuminate/console": "^11.0.0", + "laravel/pint": "^1.14.0", + "mockery/mockery": "^1.6.7", + "pestphp/pest": "^2.34.1", + "phpstan/phpstan": "^1.10.59", + "phpstan/phpstan-strict-rules": "^1.5.2", + "symfony/var-dumper": "^7.0.4", + "thecodingmachine/phpstan-strict-rules": "^1.0.0" + }, + "type": "library", + "extra": { + "laravel": { + "providers": [ + "Termwind\\Laravel\\TermwindServiceProvider" + ] + }, + "branch-alias": { + "dev-2.x": "2.x-dev" + } + }, + "autoload": { + "files": [ + "src/Functions.php" + ], + "psr-4": { + "Termwind\\": "src/" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Nuno Maduro", + "email": "enunomaduro@gmail.com" + } + ], + "description": "Its like Tailwind CSS, but for the console.", + "keywords": [ + "cli", + "console", + "css", + "package", + "php", + "style" + ], + "support": { + "issues": "https://github.com/nunomaduro/termwind/issues", + "source": "https://github.com/nunomaduro/termwind/tree/v2.0.1" + }, + "funding": [ + { + "url": "https://www.paypal.com/paypalme/enunomaduro", + "type": "custom" + }, + { + "url": "https://github.com/nunomaduro", + "type": "github" + }, + { + "url": "https://github.com/xiCO2k", + "type": "github" + } + ], + "time": "2024-03-06T16:17:14+00:00" + }, + { + "name": "phpoption/phpoption", + "version": "1.9.2", + "source": { + "type": "git", + "url": "https://github.com/schmittjoh/php-option.git", + "reference": "80735db690fe4fc5c76dfa7f9b770634285fa820" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/schmittjoh/php-option/zipball/80735db690fe4fc5c76dfa7f9b770634285fa820", + "reference": "80735db690fe4fc5c76dfa7f9b770634285fa820", + "shasum": "" + }, + "require": { + "php": "^7.2.5 || ^8.0" + }, + "require-dev": { + "bamarni/composer-bin-plugin": "^1.8.2", + "phpunit/phpunit": "^8.5.34 || ^9.6.13 || ^10.4.2" + }, + "type": "library", + "extra": { + "bamarni-bin": { + "bin-links": true, + "forward-command": true + }, + "branch-alias": { + "dev-master": "1.9-dev" + } + }, + "autoload": { + "psr-4": { + "PhpOption\\": "src/PhpOption/" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "Apache-2.0" + ], + "authors": [ + { + "name": "Johannes M. Schmitt", + "email": "schmittjoh@gmail.com", + "homepage": "https://github.com/schmittjoh" + }, + { + "name": "Graham Campbell", + "email": "hello@gjcampbell.co.uk", + "homepage": "https://github.com/GrahamCampbell" + } + ], + "description": "Option Type for PHP", + "keywords": [ + "language", + "option", + "php", + "type" + ], + "support": { + "issues": "https://github.com/schmittjoh/php-option/issues", + "source": "https://github.com/schmittjoh/php-option/tree/1.9.2" + }, + "funding": [ + { + "url": "https://github.com/GrahamCampbell", + "type": "github" + }, + { + "url": "https://tidelift.com/funding/github/packagist/phpoption/phpoption", + "type": "tidelift" + } + ], + "time": "2023-11-12T21:59:55+00:00" + }, + { + "name": "psr/clock", + "version": "1.0.0", + "source": { + "type": "git", + "url": "https://github.com/php-fig/clock.git", + "reference": "e41a24703d4560fd0acb709162f73b8adfc3aa0d" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/php-fig/clock/zipball/e41a24703d4560fd0acb709162f73b8adfc3aa0d", + "reference": "e41a24703d4560fd0acb709162f73b8adfc3aa0d", + "shasum": "" + }, + "require": { + "php": "^7.0 || ^8.0" + }, + "type": "library", + "autoload": { + "psr-4": { + "Psr\\Clock\\": "src/" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "PHP-FIG", + "homepage": "https://www.php-fig.org/" + } + ], + "description": "Common interface for reading the clock.", + "homepage": "https://github.com/php-fig/clock", + "keywords": [ + "clock", + "now", + "psr", + "psr-20", + "time" + ], + "support": { + "issues": "https://github.com/php-fig/clock/issues", + "source": "https://github.com/php-fig/clock/tree/1.0.0" + }, + "time": "2022-11-25T14:36:26+00:00" + }, + { + "name": "psr/container", + "version": "2.0.2", + "source": { + "type": "git", + "url": "https://github.com/php-fig/container.git", + "reference": "c71ecc56dfe541dbd90c5360474fbc405f8d5963" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/php-fig/container/zipball/c71ecc56dfe541dbd90c5360474fbc405f8d5963", + "reference": "c71ecc56dfe541dbd90c5360474fbc405f8d5963", + "shasum": "" + }, + "require": { + "php": ">=7.4.0" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "2.0.x-dev" + } + }, + "autoload": { + "psr-4": { + "Psr\\Container\\": "src/" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "PHP-FIG", + "homepage": "https://www.php-fig.org/" + } + ], + "description": "Common Container Interface (PHP FIG PSR-11)", + "homepage": "https://github.com/php-fig/container", + "keywords": [ + "PSR-11", + "container", + "container-interface", + "container-interop", + "psr" + ], + "support": { + "issues": "https://github.com/php-fig/container/issues", + "source": "https://github.com/php-fig/container/tree/2.0.2" + }, + "time": "2021-11-05T16:47:00+00:00" + }, + { + "name": "psr/event-dispatcher", + "version": "1.0.0", + "source": { + "type": "git", + "url": "https://github.com/php-fig/event-dispatcher.git", + "reference": "dbefd12671e8a14ec7f180cab83036ed26714bb0" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/php-fig/event-dispatcher/zipball/dbefd12671e8a14ec7f180cab83036ed26714bb0", + "reference": "dbefd12671e8a14ec7f180cab83036ed26714bb0", + "shasum": "" + }, + "require": { + "php": ">=7.2.0" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "1.0.x-dev" + } + }, + "autoload": { + "psr-4": { + "Psr\\EventDispatcher\\": "src/" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "PHP-FIG", + "homepage": "http://www.php-fig.org/" + } + ], + "description": "Standard interfaces for event handling.", + "keywords": [ + "events", + "psr", + "psr-14" + ], + "support": { + "issues": "https://github.com/php-fig/event-dispatcher/issues", + "source": "https://github.com/php-fig/event-dispatcher/tree/1.0.0" + }, + "time": "2019-01-08T18:20:26+00:00" + }, + { + "name": "psr/http-client", + "version": "1.0.3", + "source": { + "type": "git", + "url": "https://github.com/php-fig/http-client.git", + "reference": "bb5906edc1c324c9a05aa0873d40117941e5fa90" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/php-fig/http-client/zipball/bb5906edc1c324c9a05aa0873d40117941e5fa90", + "reference": "bb5906edc1c324c9a05aa0873d40117941e5fa90", + "shasum": "" + }, + "require": { + "php": "^7.0 || ^8.0", + "psr/http-message": "^1.0 || ^2.0" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "1.0.x-dev" + } + }, + "autoload": { + "psr-4": { + "Psr\\Http\\Client\\": "src/" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "PHP-FIG", + "homepage": "https://www.php-fig.org/" + } + ], + "description": "Common interface for HTTP clients", + "homepage": "https://github.com/php-fig/http-client", + "keywords": [ + "http", + "http-client", + "psr", + "psr-18" + ], + "support": { + "source": "https://github.com/php-fig/http-client" + }, + "time": "2023-09-23T14:17:50+00:00" + }, + { + "name": "psr/http-factory", + "version": "1.1.0", + "source": { + "type": "git", + "url": "https://github.com/php-fig/http-factory.git", + "reference": "2b4765fddfe3b508ac62f829e852b1501d3f6e8a" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/php-fig/http-factory/zipball/2b4765fddfe3b508ac62f829e852b1501d3f6e8a", + "reference": "2b4765fddfe3b508ac62f829e852b1501d3f6e8a", + "shasum": "" + }, + "require": { + "php": ">=7.1", + "psr/http-message": "^1.0 || ^2.0" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "1.0.x-dev" + } + }, + "autoload": { + "psr-4": { + "Psr\\Http\\Message\\": "src/" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "PHP-FIG", + "homepage": "https://www.php-fig.org/" + } + ], + "description": "PSR-17: Common interfaces for PSR-7 HTTP message factories", + "keywords": [ + "factory", + "http", + "message", + "psr", + "psr-17", + "psr-7", + "request", + "response" + ], + "support": { + "source": "https://github.com/php-fig/http-factory" + }, + "time": "2024-04-15T12:06:14+00:00" + }, + { + "name": "psr/http-message", + "version": "2.0", + "source": { + "type": "git", + "url": "https://github.com/php-fig/http-message.git", + "reference": "402d35bcb92c70c026d1a6a9883f06b2ead23d71" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/php-fig/http-message/zipball/402d35bcb92c70c026d1a6a9883f06b2ead23d71", + "reference": "402d35bcb92c70c026d1a6a9883f06b2ead23d71", + "shasum": "" + }, + "require": { + "php": "^7.2 || ^8.0" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "2.0.x-dev" + } + }, + "autoload": { + "psr-4": { + "Psr\\Http\\Message\\": "src/" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "PHP-FIG", + "homepage": "https://www.php-fig.org/" + } + ], + "description": "Common interface for HTTP messages", + "homepage": "https://github.com/php-fig/http-message", + "keywords": [ + "http", + "http-message", + "psr", + "psr-7", + "request", + "response" + ], + "support": { + "source": "https://github.com/php-fig/http-message/tree/2.0" + }, + "time": "2023-04-04T09:54:51+00:00" + }, + { + "name": "psr/log", + "version": "3.0.0", + "source": { + "type": "git", + "url": "https://github.com/php-fig/log.git", + "reference": "fe5ea303b0887d5caefd3d431c3e61ad47037001" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/php-fig/log/zipball/fe5ea303b0887d5caefd3d431c3e61ad47037001", + "reference": "fe5ea303b0887d5caefd3d431c3e61ad47037001", + "shasum": "" + }, + "require": { + "php": ">=8.0.0" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "3.x-dev" + } + }, + "autoload": { + "psr-4": { + "Psr\\Log\\": "src" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "PHP-FIG", + "homepage": "https://www.php-fig.org/" + } + ], + "description": "Common interface for logging libraries", + "homepage": "https://github.com/php-fig/log", + "keywords": [ + "log", + "psr", + "psr-3" + ], + "support": { + "source": "https://github.com/php-fig/log/tree/3.0.0" + }, + "time": "2021-07-14T16:46:02+00:00" + }, + { + "name": "psr/simple-cache", + "version": "3.0.0", + "source": { + "type": "git", + "url": "https://github.com/php-fig/simple-cache.git", + "reference": "764e0b3939f5ca87cb904f570ef9be2d78a07865" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/php-fig/simple-cache/zipball/764e0b3939f5ca87cb904f570ef9be2d78a07865", + "reference": "764e0b3939f5ca87cb904f570ef9be2d78a07865", + "shasum": "" + }, + "require": { + "php": ">=8.0.0" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "3.0.x-dev" + } + }, + "autoload": { + "psr-4": { + "Psr\\SimpleCache\\": "src/" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "PHP-FIG", + "homepage": "https://www.php-fig.org/" + } + ], + "description": "Common interfaces for simple caching", + "keywords": [ + "cache", + "caching", + "psr", + "psr-16", + "simple-cache" + ], + "support": { + "source": "https://github.com/php-fig/simple-cache/tree/3.0.0" + }, + "time": "2021-10-29T13:26:27+00:00" + }, + { + "name": "psy/psysh", + "version": "v0.12.3", + "source": { + "type": "git", + "url": "https://github.com/bobthecow/psysh.git", + "reference": "b6b6cce7d3ee8fbf31843edce5e8f5a72eff4a73" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/bobthecow/psysh/zipball/b6b6cce7d3ee8fbf31843edce5e8f5a72eff4a73", + "reference": "b6b6cce7d3ee8fbf31843edce5e8f5a72eff4a73", + "shasum": "" + }, + "require": { + "ext-json": "*", + "ext-tokenizer": "*", + "nikic/php-parser": "^5.0 || ^4.0", + "php": "^8.0 || ^7.4", + "symfony/console": "^7.0 || ^6.0 || ^5.0 || ^4.0 || ^3.4", + "symfony/var-dumper": "^7.0 || ^6.0 || ^5.0 || ^4.0 || ^3.4" + }, + "conflict": { + "symfony/console": "4.4.37 || 5.3.14 || 5.3.15 || 5.4.3 || 5.4.4 || 6.0.3 || 6.0.4" + }, + "require-dev": { + "bamarni/composer-bin-plugin": "^1.2" + }, + "suggest": { + "ext-pcntl": "Enabling the PCNTL extension makes PsySH a lot happier :)", + "ext-pdo-sqlite": "The doc command requires SQLite to work.", + "ext-posix": "If you have PCNTL, you'll want the POSIX extension as well." + }, + "bin": [ + "bin/psysh" + ], + "type": "library", + "extra": { + "branch-alias": { + "dev-main": "0.12.x-dev" + }, + "bamarni-bin": { + "bin-links": false, + "forward-command": false + } + }, + "autoload": { + "files": [ + "src/functions.php" + ], + "psr-4": { + "Psy\\": "src/" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Justin Hileman", + "email": "justin@justinhileman.info", + "homepage": "http://justinhileman.com" + } + ], + "description": "An interactive shell for modern PHP.", + "homepage": "http://psysh.org", + "keywords": [ + "REPL", + "console", + "interactive", + "shell" + ], + "support": { + "issues": "https://github.com/bobthecow/psysh/issues", + "source": "https://github.com/bobthecow/psysh/tree/v0.12.3" + }, + "time": "2024-04-02T15:57:53+00:00" + }, + { + "name": "ralouphie/getallheaders", + "version": "3.0.3", + "source": { + "type": "git", + "url": "https://github.com/ralouphie/getallheaders.git", + "reference": "120b605dfeb996808c31b6477290a714d356e822" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/ralouphie/getallheaders/zipball/120b605dfeb996808c31b6477290a714d356e822", + "reference": "120b605dfeb996808c31b6477290a714d356e822", + "shasum": "" + }, + "require": { + "php": ">=5.6" + }, + "require-dev": { + "php-coveralls/php-coveralls": "^2.1", + "phpunit/phpunit": "^5 || ^6.5" + }, + "type": "library", + "autoload": { + "files": [ + "src/getallheaders.php" + ] + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Ralph Khattar", + "email": "ralph.khattar@gmail.com" + } + ], + "description": "A polyfill for getallheaders.", + "support": { + "issues": "https://github.com/ralouphie/getallheaders/issues", + "source": "https://github.com/ralouphie/getallheaders/tree/develop" + }, + "time": "2019-03-08T08:55:37+00:00" + }, + { + "name": "ramsey/collection", + "version": "2.0.0", + "source": { + "type": "git", + "url": "https://github.com/ramsey/collection.git", + "reference": "a4b48764bfbb8f3a6a4d1aeb1a35bb5e9ecac4a5" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/ramsey/collection/zipball/a4b48764bfbb8f3a6a4d1aeb1a35bb5e9ecac4a5", + "reference": "a4b48764bfbb8f3a6a4d1aeb1a35bb5e9ecac4a5", + "shasum": "" + }, + "require": { + "php": "^8.1" + }, + "require-dev": { + "captainhook/plugin-composer": "^5.3", + "ergebnis/composer-normalize": "^2.28.3", + "fakerphp/faker": "^1.21", + "hamcrest/hamcrest-php": "^2.0", + "jangregor/phpstan-prophecy": "^1.0", + "mockery/mockery": "^1.5", + "php-parallel-lint/php-console-highlighter": "^1.0", + "php-parallel-lint/php-parallel-lint": "^1.3", + "phpcsstandards/phpcsutils": "^1.0.0-rc1", + "phpspec/prophecy-phpunit": "^2.0", + "phpstan/extension-installer": "^1.2", + "phpstan/phpstan": "^1.9", + "phpstan/phpstan-mockery": "^1.1", + "phpstan/phpstan-phpunit": "^1.3", + "phpunit/phpunit": "^9.5", + "psalm/plugin-mockery": "^1.1", + "psalm/plugin-phpunit": "^0.18.4", + "ramsey/coding-standard": "^2.0.3", + "ramsey/conventional-commits": "^1.3", + "vimeo/psalm": "^5.4" + }, + "type": "library", + "extra": { + "captainhook": { + "force-install": true + }, + "ramsey/conventional-commits": { + "configFile": "conventional-commits.json" + } + }, + "autoload": { + "psr-4": { + "Ramsey\\Collection\\": "src/" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Ben Ramsey", + "email": "ben@benramsey.com", + "homepage": "https://benramsey.com" + } + ], + "description": "A PHP library for representing and manipulating collections.", + "keywords": [ + "array", + "collection", + "hash", + "map", + "queue", + "set" + ], + "support": { + "issues": "https://github.com/ramsey/collection/issues", + "source": "https://github.com/ramsey/collection/tree/2.0.0" + }, + "funding": [ + { + "url": "https://github.com/ramsey", + "type": "github" + }, + { + "url": "https://tidelift.com/funding/github/packagist/ramsey/collection", + "type": "tidelift" + } + ], + "time": "2022-12-31T21:50:55+00:00" + }, + { + "name": "ramsey/uuid", + "version": "4.7.6", + "source": { + "type": "git", + "url": "https://github.com/ramsey/uuid.git", + "reference": "91039bc1faa45ba123c4328958e620d382ec7088" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/ramsey/uuid/zipball/91039bc1faa45ba123c4328958e620d382ec7088", + "reference": "91039bc1faa45ba123c4328958e620d382ec7088", + "shasum": "" + }, + "require": { + "brick/math": "^0.8.8 || ^0.9 || ^0.10 || ^0.11 || ^0.12", + "ext-json": "*", + "php": "^8.0", + "ramsey/collection": "^1.2 || ^2.0" + }, + "replace": { + "rhumsaa/uuid": "self.version" + }, + "require-dev": { + "captainhook/captainhook": "^5.10", + "captainhook/plugin-composer": "^5.3", + "dealerdirect/phpcodesniffer-composer-installer": "^0.7.0", + "doctrine/annotations": "^1.8", + "ergebnis/composer-normalize": "^2.15", + "mockery/mockery": "^1.3", + "paragonie/random-lib": "^2", + "php-mock/php-mock": "^2.2", + "php-mock/php-mock-mockery": "^1.3", + "php-parallel-lint/php-parallel-lint": "^1.1", + "phpbench/phpbench": "^1.0", + "phpstan/extension-installer": "^1.1", + "phpstan/phpstan": "^1.8", + "phpstan/phpstan-mockery": "^1.1", + "phpstan/phpstan-phpunit": "^1.1", + "phpunit/phpunit": "^8.5 || ^9", + "ramsey/composer-repl": "^1.4", + "slevomat/coding-standard": "^8.4", + "squizlabs/php_codesniffer": "^3.5", + "vimeo/psalm": "^4.9" + }, + "suggest": { + "ext-bcmath": "Enables faster math with arbitrary-precision integers using BCMath.", + "ext-gmp": "Enables faster math with arbitrary-precision integers using GMP.", + "ext-uuid": "Enables the use of PeclUuidTimeGenerator and PeclUuidRandomGenerator.", + "paragonie/random-lib": "Provides RandomLib for use with the RandomLibAdapter", + "ramsey/uuid-doctrine": "Allows the use of Ramsey\\Uuid\\Uuid as Doctrine field type." + }, + "type": "library", + "extra": { + "captainhook": { + "force-install": true + } + }, + "autoload": { + "files": [ + "src/functions.php" + ], + "psr-4": { + "Ramsey\\Uuid\\": "src/" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "description": "A PHP library for generating and working with universally unique identifiers (UUIDs).", + "keywords": [ + "guid", + "identifier", + "uuid" + ], + "support": { + "issues": "https://github.com/ramsey/uuid/issues", + "source": "https://github.com/ramsey/uuid/tree/4.7.6" + }, + "funding": [ + { + "url": "https://github.com/ramsey", + "type": "github" + }, + { + "url": "https://tidelift.com/funding/github/packagist/ramsey/uuid", + "type": "tidelift" + } + ], + "time": "2024-04-27T21:32:50+00:00" + }, + { + "name": "symfony/clock", + "version": "v7.0.7", + "source": { + "type": "git", + "url": "https://github.com/symfony/clock.git", + "reference": "2008671acb4a30b01c453de193cf9c80549ebda6" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/symfony/clock/zipball/2008671acb4a30b01c453de193cf9c80549ebda6", + "reference": "2008671acb4a30b01c453de193cf9c80549ebda6", + "shasum": "" + }, + "require": { + "php": ">=8.2", + "psr/clock": "^1.0", + "symfony/polyfill-php83": "^1.28" + }, + "provide": { + "psr/clock-implementation": "1.0" + }, + "type": "library", + "autoload": { + "files": [ + "Resources/now.php" + ], + "psr-4": { + "Symfony\\Component\\Clock\\": "" + }, + "exclude-from-classmap": [ + "/Tests/" + ] + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Nicolas Grekas", + "email": "p@tchwork.com" + }, + { + "name": "Symfony Community", + "homepage": "https://symfony.com/contributors" + } + ], + "description": "Decouples applications from the system clock", + "homepage": "https://symfony.com", + "keywords": [ + "clock", + "psr20", + "time" + ], + "support": { + "source": "https://github.com/symfony/clock/tree/v7.0.7" + }, + "funding": [ + { + "url": "https://symfony.com/sponsor", + "type": "custom" + }, + { + "url": "https://github.com/fabpot", + "type": "github" + }, + { + "url": "https://tidelift.com/funding/github/packagist/symfony/symfony", + "type": "tidelift" + } + ], + "time": "2024-04-18T09:29:19+00:00" + }, + { + "name": "symfony/console", + "version": "v7.0.7", + "source": { + "type": "git", + "url": "https://github.com/symfony/console.git", + "reference": "c981e0e9380ce9f146416bde3150c79197ce9986" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/symfony/console/zipball/c981e0e9380ce9f146416bde3150c79197ce9986", + "reference": "c981e0e9380ce9f146416bde3150c79197ce9986", + "shasum": "" + }, + "require": { + "php": ">=8.2", + "symfony/polyfill-mbstring": "~1.0", + "symfony/service-contracts": "^2.5|^3", + "symfony/string": "^6.4|^7.0" + }, + "conflict": { + "symfony/dependency-injection": "<6.4", + "symfony/dotenv": "<6.4", + "symfony/event-dispatcher": "<6.4", + "symfony/lock": "<6.4", + "symfony/process": "<6.4" + }, + "provide": { + "psr/log-implementation": "1.0|2.0|3.0" + }, + "require-dev": { + "psr/log": "^1|^2|^3", + "symfony/config": "^6.4|^7.0", + "symfony/dependency-injection": "^6.4|^7.0", + "symfony/event-dispatcher": "^6.4|^7.0", + "symfony/http-foundation": "^6.4|^7.0", + "symfony/http-kernel": "^6.4|^7.0", + "symfony/lock": "^6.4|^7.0", + "symfony/messenger": "^6.4|^7.0", + "symfony/process": "^6.4|^7.0", + "symfony/stopwatch": "^6.4|^7.0", + "symfony/var-dumper": "^6.4|^7.0" + }, + "type": "library", + "autoload": { + "psr-4": { + "Symfony\\Component\\Console\\": "" + }, + "exclude-from-classmap": [ + "/Tests/" + ] + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Fabien Potencier", + "email": "fabien@symfony.com" + }, + { + "name": "Symfony Community", + "homepage": "https://symfony.com/contributors" + } + ], + "description": "Eases the creation of beautiful and testable command line interfaces", + "homepage": "https://symfony.com", + "keywords": [ + "cli", + "command-line", + "console", + "terminal" + ], + "support": { + "source": "https://github.com/symfony/console/tree/v7.0.7" + }, + "funding": [ + { + "url": "https://symfony.com/sponsor", + "type": "custom" + }, + { + "url": "https://github.com/fabpot", + "type": "github" + }, + { + "url": "https://tidelift.com/funding/github/packagist/symfony/symfony", + "type": "tidelift" + } + ], + "time": "2024-04-18T09:29:19+00:00" + }, + { + "name": "symfony/css-selector", + "version": "v7.0.7", + "source": { + "type": "git", + "url": "https://github.com/symfony/css-selector.git", + "reference": "b08a4ad89e84b29cec285b7b1f781a7ae51cf4bc" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/symfony/css-selector/zipball/b08a4ad89e84b29cec285b7b1f781a7ae51cf4bc", + "reference": "b08a4ad89e84b29cec285b7b1f781a7ae51cf4bc", + "shasum": "" + }, + "require": { + "php": ">=8.2" + }, + "type": "library", + "autoload": { + "psr-4": { + "Symfony\\Component\\CssSelector\\": "" + }, + "exclude-from-classmap": [ + "/Tests/" + ] + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Fabien Potencier", + "email": "fabien@symfony.com" + }, + { + "name": "Jean-François Simon", + "email": "jeanfrancois.simon@sensiolabs.com" + }, + { + "name": "Symfony Community", + "homepage": "https://symfony.com/contributors" + } + ], + "description": "Converts CSS selectors to XPath expressions", + "homepage": "https://symfony.com", + "support": { + "source": "https://github.com/symfony/css-selector/tree/v7.0.7" + }, + "funding": [ + { + "url": "https://symfony.com/sponsor", + "type": "custom" + }, + { + "url": "https://github.com/fabpot", + "type": "github" + }, + { + "url": "https://tidelift.com/funding/github/packagist/symfony/symfony", + "type": "tidelift" + } + ], + "time": "2024-04-18T09:29:19+00:00" + }, + { + "name": "symfony/deprecation-contracts", + "version": "v3.5.0", + "source": { + "type": "git", + "url": "https://github.com/symfony/deprecation-contracts.git", + "reference": "0e0d29ce1f20deffb4ab1b016a7257c4f1e789a1" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/symfony/deprecation-contracts/zipball/0e0d29ce1f20deffb4ab1b016a7257c4f1e789a1", + "reference": "0e0d29ce1f20deffb4ab1b016a7257c4f1e789a1", + "shasum": "" + }, + "require": { + "php": ">=8.1" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-main": "3.5-dev" + }, + "thanks": { + "name": "symfony/contracts", + "url": "https://github.com/symfony/contracts" + } + }, + "autoload": { + "files": [ + "function.php" + ] + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Nicolas Grekas", + "email": "p@tchwork.com" + }, + { + "name": "Symfony Community", + "homepage": "https://symfony.com/contributors" + } + ], + "description": "A generic function and convention to trigger deprecation notices", + "homepage": "https://symfony.com", + "support": { + "source": "https://github.com/symfony/deprecation-contracts/tree/v3.5.0" + }, + "funding": [ + { + "url": "https://symfony.com/sponsor", + "type": "custom" + }, + { + "url": "https://github.com/fabpot", + "type": "github" + }, + { + "url": "https://tidelift.com/funding/github/packagist/symfony/symfony", + "type": "tidelift" + } + ], + "time": "2024-04-18T09:32:20+00:00" + }, + { + "name": "symfony/error-handler", + "version": "v7.0.7", + "source": { + "type": "git", + "url": "https://github.com/symfony/error-handler.git", + "reference": "cf97429887e40480c847bfeb6c3991e1e2c086ab" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/symfony/error-handler/zipball/cf97429887e40480c847bfeb6c3991e1e2c086ab", + "reference": "cf97429887e40480c847bfeb6c3991e1e2c086ab", + "shasum": "" + }, + "require": { + "php": ">=8.2", + "psr/log": "^1|^2|^3", + "symfony/var-dumper": "^6.4|^7.0" + }, + "conflict": { + "symfony/deprecation-contracts": "<2.5", + "symfony/http-kernel": "<6.4" + }, + "require-dev": { + "symfony/deprecation-contracts": "^2.5|^3", + "symfony/http-kernel": "^6.4|^7.0", + "symfony/serializer": "^6.4|^7.0" + }, + "bin": [ + "Resources/bin/patch-type-declarations" + ], + "type": "library", + "autoload": { + "psr-4": { + "Symfony\\Component\\ErrorHandler\\": "" + }, + "exclude-from-classmap": [ + "/Tests/" + ] + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Fabien Potencier", + "email": "fabien@symfony.com" + }, + { + "name": "Symfony Community", + "homepage": "https://symfony.com/contributors" + } + ], + "description": "Provides tools to manage errors and ease debugging PHP code", + "homepage": "https://symfony.com", + "support": { + "source": "https://github.com/symfony/error-handler/tree/v7.0.7" + }, + "funding": [ + { + "url": "https://symfony.com/sponsor", + "type": "custom" + }, + { + "url": "https://github.com/fabpot", + "type": "github" + }, + { + "url": "https://tidelift.com/funding/github/packagist/symfony/symfony", + "type": "tidelift" + } + ], + "time": "2024-04-18T09:29:19+00:00" + }, + { + "name": "symfony/event-dispatcher", + "version": "v7.0.7", + "source": { + "type": "git", + "url": "https://github.com/symfony/event-dispatcher.git", + "reference": "db2a7fab994d67d92356bb39c367db115d9d30f9" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/symfony/event-dispatcher/zipball/db2a7fab994d67d92356bb39c367db115d9d30f9", + "reference": "db2a7fab994d67d92356bb39c367db115d9d30f9", + "shasum": "" + }, + "require": { + "php": ">=8.2", + "symfony/event-dispatcher-contracts": "^2.5|^3" + }, + "conflict": { + "symfony/dependency-injection": "<6.4", + "symfony/service-contracts": "<2.5" + }, + "provide": { + "psr/event-dispatcher-implementation": "1.0", + "symfony/event-dispatcher-implementation": "2.0|3.0" + }, + "require-dev": { + "psr/log": "^1|^2|^3", + "symfony/config": "^6.4|^7.0", + "symfony/dependency-injection": "^6.4|^7.0", + "symfony/error-handler": "^6.4|^7.0", + "symfony/expression-language": "^6.4|^7.0", + "symfony/http-foundation": "^6.4|^7.0", + "symfony/service-contracts": "^2.5|^3", + "symfony/stopwatch": "^6.4|^7.0" + }, + "type": "library", + "autoload": { + "psr-4": { + "Symfony\\Component\\EventDispatcher\\": "" + }, + "exclude-from-classmap": [ + "/Tests/" + ] + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Fabien Potencier", + "email": "fabien@symfony.com" + }, + { + "name": "Symfony Community", + "homepage": "https://symfony.com/contributors" + } + ], + "description": "Provides tools that allow your application components to communicate with each other by dispatching events and listening to them", + "homepage": "https://symfony.com", + "support": { + "source": "https://github.com/symfony/event-dispatcher/tree/v7.0.7" + }, + "funding": [ + { + "url": "https://symfony.com/sponsor", + "type": "custom" + }, + { + "url": "https://github.com/fabpot", + "type": "github" + }, + { + "url": "https://tidelift.com/funding/github/packagist/symfony/symfony", + "type": "tidelift" + } + ], + "time": "2024-04-18T09:29:19+00:00" + }, + { + "name": "symfony/event-dispatcher-contracts", + "version": "v3.5.0", + "source": { + "type": "git", + "url": "https://github.com/symfony/event-dispatcher-contracts.git", + "reference": "8f93aec25d41b72493c6ddff14e916177c9efc50" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/symfony/event-dispatcher-contracts/zipball/8f93aec25d41b72493c6ddff14e916177c9efc50", + "reference": "8f93aec25d41b72493c6ddff14e916177c9efc50", + "shasum": "" + }, + "require": { + "php": ">=8.1", + "psr/event-dispatcher": "^1" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-main": "3.5-dev" + }, + "thanks": { + "name": "symfony/contracts", + "url": "https://github.com/symfony/contracts" + } + }, + "autoload": { + "psr-4": { + "Symfony\\Contracts\\EventDispatcher\\": "" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Nicolas Grekas", + "email": "p@tchwork.com" + }, + { + "name": "Symfony Community", + "homepage": "https://symfony.com/contributors" + } + ], + "description": "Generic abstractions related to dispatching event", + "homepage": "https://symfony.com", + "keywords": [ + "abstractions", + "contracts", + "decoupling", + "interfaces", + "interoperability", + "standards" + ], + "support": { + "source": "https://github.com/symfony/event-dispatcher-contracts/tree/v3.5.0" + }, + "funding": [ + { + "url": "https://symfony.com/sponsor", + "type": "custom" + }, + { + "url": "https://github.com/fabpot", + "type": "github" + }, + { + "url": "https://tidelift.com/funding/github/packagist/symfony/symfony", + "type": "tidelift" + } + ], + "time": "2024-04-18T09:32:20+00:00" + }, + { + "name": "symfony/finder", + "version": "v7.0.7", + "source": { + "type": "git", + "url": "https://github.com/symfony/finder.git", + "reference": "4d58f0f4fe95a30d7b538d71197135483560b97c" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/symfony/finder/zipball/4d58f0f4fe95a30d7b538d71197135483560b97c", + "reference": "4d58f0f4fe95a30d7b538d71197135483560b97c", + "shasum": "" + }, + "require": { + "php": ">=8.2" + }, + "require-dev": { + "symfony/filesystem": "^6.4|^7.0" + }, + "type": "library", + "autoload": { + "psr-4": { + "Symfony\\Component\\Finder\\": "" + }, + "exclude-from-classmap": [ + "/Tests/" + ] + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Fabien Potencier", + "email": "fabien@symfony.com" + }, + { + "name": "Symfony Community", + "homepage": "https://symfony.com/contributors" + } + ], + "description": "Finds files and directories via an intuitive fluent interface", + "homepage": "https://symfony.com", + "support": { + "source": "https://github.com/symfony/finder/tree/v7.0.7" + }, + "funding": [ + { + "url": "https://symfony.com/sponsor", + "type": "custom" + }, + { + "url": "https://github.com/fabpot", + "type": "github" + }, + { + "url": "https://tidelift.com/funding/github/packagist/symfony/symfony", + "type": "tidelift" + } + ], + "time": "2024-04-28T11:44:19+00:00" + }, + { + "name": "symfony/http-foundation", + "version": "v7.0.7", + "source": { + "type": "git", + "url": "https://github.com/symfony/http-foundation.git", + "reference": "0194e064b8bdc29381462f790bab04e1cac8fdc8" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/symfony/http-foundation/zipball/0194e064b8bdc29381462f790bab04e1cac8fdc8", + "reference": "0194e064b8bdc29381462f790bab04e1cac8fdc8", + "shasum": "" + }, + "require": { + "php": ">=8.2", + "symfony/polyfill-mbstring": "~1.1", + "symfony/polyfill-php83": "^1.27" + }, + "conflict": { + "doctrine/dbal": "<3.6", + "symfony/cache": "<6.4" + }, + "require-dev": { + "doctrine/dbal": "^3.6|^4", + "predis/predis": "^1.1|^2.0", + "symfony/cache": "^6.4|^7.0", + "symfony/dependency-injection": "^6.4|^7.0", + "symfony/expression-language": "^6.4|^7.0", + "symfony/http-kernel": "^6.4|^7.0", + "symfony/mime": "^6.4|^7.0", + "symfony/rate-limiter": "^6.4|^7.0" + }, + "type": "library", + "autoload": { + "psr-4": { + "Symfony\\Component\\HttpFoundation\\": "" + }, + "exclude-from-classmap": [ + "/Tests/" + ] + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Fabien Potencier", + "email": "fabien@symfony.com" + }, + { + "name": "Symfony Community", + "homepage": "https://symfony.com/contributors" + } + ], + "description": "Defines an object-oriented layer for the HTTP specification", + "homepage": "https://symfony.com", + "support": { + "source": "https://github.com/symfony/http-foundation/tree/v7.0.7" + }, + "funding": [ + { + "url": "https://symfony.com/sponsor", + "type": "custom" + }, + { + "url": "https://github.com/fabpot", + "type": "github" + }, + { + "url": "https://tidelift.com/funding/github/packagist/symfony/symfony", + "type": "tidelift" + } + ], + "time": "2024-04-18T09:29:19+00:00" + }, + { + "name": "symfony/http-kernel", + "version": "v7.0.7", + "source": { + "type": "git", + "url": "https://github.com/symfony/http-kernel.git", + "reference": "e07bb9bd86e7cd8ba2d3d9c618eec9d1bbe06d25" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/symfony/http-kernel/zipball/e07bb9bd86e7cd8ba2d3d9c618eec9d1bbe06d25", + "reference": "e07bb9bd86e7cd8ba2d3d9c618eec9d1bbe06d25", + "shasum": "" + }, + "require": { + "php": ">=8.2", + "psr/log": "^1|^2|^3", + "symfony/error-handler": "^6.4|^7.0", + "symfony/event-dispatcher": "^6.4|^7.0", + "symfony/http-foundation": "^6.4|^7.0", + "symfony/polyfill-ctype": "^1.8" + }, + "conflict": { + "symfony/browser-kit": "<6.4", + "symfony/cache": "<6.4", + "symfony/config": "<6.4", + "symfony/console": "<6.4", + "symfony/dependency-injection": "<6.4", + "symfony/doctrine-bridge": "<6.4", + "symfony/form": "<6.4", + "symfony/http-client": "<6.4", + "symfony/http-client-contracts": "<2.5", + "symfony/mailer": "<6.4", + "symfony/messenger": "<6.4", + "symfony/translation": "<6.4", + "symfony/translation-contracts": "<2.5", + "symfony/twig-bridge": "<6.4", + "symfony/validator": "<6.4", + "symfony/var-dumper": "<6.4", + "twig/twig": "<3.0.4" + }, + "provide": { + "psr/log-implementation": "1.0|2.0|3.0" + }, + "require-dev": { + "psr/cache": "^1.0|^2.0|^3.0", + "symfony/browser-kit": "^6.4|^7.0", + "symfony/clock": "^6.4|^7.0", + "symfony/config": "^6.4|^7.0", + "symfony/console": "^6.4|^7.0", + "symfony/css-selector": "^6.4|^7.0", + "symfony/dependency-injection": "^6.4|^7.0", + "symfony/dom-crawler": "^6.4|^7.0", + "symfony/expression-language": "^6.4|^7.0", + "symfony/finder": "^6.4|^7.0", + "symfony/http-client-contracts": "^2.5|^3", + "symfony/process": "^6.4|^7.0", + "symfony/property-access": "^6.4|^7.0", + "symfony/routing": "^6.4|^7.0", + "symfony/serializer": "^6.4.4|^7.0.4", + "symfony/stopwatch": "^6.4|^7.0", + "symfony/translation": "^6.4|^7.0", + "symfony/translation-contracts": "^2.5|^3", + "symfony/uid": "^6.4|^7.0", + "symfony/validator": "^6.4|^7.0", + "symfony/var-dumper": "^6.4|^7.0", + "symfony/var-exporter": "^6.4|^7.0", + "twig/twig": "^3.0.4" + }, + "type": "library", + "autoload": { + "psr-4": { + "Symfony\\Component\\HttpKernel\\": "" + }, + "exclude-from-classmap": [ + "/Tests/" + ] + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Fabien Potencier", + "email": "fabien@symfony.com" + }, + { + "name": "Symfony Community", + "homepage": "https://symfony.com/contributors" + } + ], + "description": "Provides a structured process for converting a Request into a Response", + "homepage": "https://symfony.com", + "support": { + "source": "https://github.com/symfony/http-kernel/tree/v7.0.7" + }, + "funding": [ + { + "url": "https://symfony.com/sponsor", + "type": "custom" + }, + { + "url": "https://github.com/fabpot", + "type": "github" + }, + { + "url": "https://tidelift.com/funding/github/packagist/symfony/symfony", + "type": "tidelift" + } + ], + "time": "2024-04-29T12:20:25+00:00" + }, + { + "name": "symfony/mailer", + "version": "v7.0.7", + "source": { + "type": "git", + "url": "https://github.com/symfony/mailer.git", + "reference": "4ff41a7c7998a88cfdc31b5841ef64d9246fc56a" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/symfony/mailer/zipball/4ff41a7c7998a88cfdc31b5841ef64d9246fc56a", + "reference": "4ff41a7c7998a88cfdc31b5841ef64d9246fc56a", + "shasum": "" + }, + "require": { + "egulias/email-validator": "^2.1.10|^3|^4", + "php": ">=8.2", + "psr/event-dispatcher": "^1", + "psr/log": "^1|^2|^3", + "symfony/event-dispatcher": "^6.4|^7.0", + "symfony/mime": "^6.4|^7.0", + "symfony/service-contracts": "^2.5|^3" + }, + "conflict": { + "symfony/http-client-contracts": "<2.5", + "symfony/http-kernel": "<6.4", + "symfony/messenger": "<6.4", + "symfony/mime": "<6.4", + "symfony/twig-bridge": "<6.4" + }, + "require-dev": { + "symfony/console": "^6.4|^7.0", + "symfony/http-client": "^6.4|^7.0", + "symfony/messenger": "^6.4|^7.0", + "symfony/twig-bridge": "^6.4|^7.0" + }, + "type": "library", + "autoload": { + "psr-4": { + "Symfony\\Component\\Mailer\\": "" + }, + "exclude-from-classmap": [ + "/Tests/" + ] + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Fabien Potencier", + "email": "fabien@symfony.com" + }, + { + "name": "Symfony Community", + "homepage": "https://symfony.com/contributors" + } + ], + "description": "Helps sending emails", + "homepage": "https://symfony.com", + "support": { + "source": "https://github.com/symfony/mailer/tree/v7.0.7" + }, + "funding": [ + { + "url": "https://symfony.com/sponsor", + "type": "custom" + }, + { + "url": "https://github.com/fabpot", + "type": "github" + }, + { + "url": "https://tidelift.com/funding/github/packagist/symfony/symfony", + "type": "tidelift" + } + ], + "time": "2024-04-18T09:29:19+00:00" + }, + { + "name": "symfony/mime", + "version": "v7.0.7", + "source": { + "type": "git", + "url": "https://github.com/symfony/mime.git", + "reference": "3adbf110c306546f6f00337f421d2edca0e8d3c0" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/symfony/mime/zipball/3adbf110c306546f6f00337f421d2edca0e8d3c0", + "reference": "3adbf110c306546f6f00337f421d2edca0e8d3c0", + "shasum": "" + }, + "require": { + "php": ">=8.2", + "symfony/polyfill-intl-idn": "^1.10", + "symfony/polyfill-mbstring": "^1.0" + }, + "conflict": { + "egulias/email-validator": "~3.0.0", + "phpdocumentor/reflection-docblock": "<3.2.2", + "phpdocumentor/type-resolver": "<1.4.0", + "symfony/mailer": "<6.4", + "symfony/serializer": "<6.4" + }, + "require-dev": { + "egulias/email-validator": "^2.1.10|^3.1|^4", + "league/html-to-markdown": "^5.0", + "phpdocumentor/reflection-docblock": "^3.0|^4.0|^5.0", + "symfony/dependency-injection": "^6.4|^7.0", + "symfony/process": "^6.4|^7.0", + "symfony/property-access": "^6.4|^7.0", + "symfony/property-info": "^6.4|^7.0", + "symfony/serializer": "^6.4|^7.0" + }, + "type": "library", + "autoload": { + "psr-4": { + "Symfony\\Component\\Mime\\": "" + }, + "exclude-from-classmap": [ + "/Tests/" + ] + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Fabien Potencier", + "email": "fabien@symfony.com" + }, + { + "name": "Symfony Community", + "homepage": "https://symfony.com/contributors" + } + ], + "description": "Allows manipulating MIME messages", + "homepage": "https://symfony.com", + "keywords": [ + "mime", + "mime-type" + ], + "support": { + "source": "https://github.com/symfony/mime/tree/v7.0.7" + }, + "funding": [ + { + "url": "https://symfony.com/sponsor", + "type": "custom" + }, + { + "url": "https://github.com/fabpot", + "type": "github" + }, + { + "url": "https://tidelift.com/funding/github/packagist/symfony/symfony", + "type": "tidelift" + } + ], + "time": "2024-04-18T09:29:19+00:00" + }, + { + "name": "symfony/polyfill-ctype", + "version": "v1.29.0", + "source": { + "type": "git", + "url": "https://github.com/symfony/polyfill-ctype.git", + "reference": "ef4d7e442ca910c4764bce785146269b30cb5fc4" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/symfony/polyfill-ctype/zipball/ef4d7e442ca910c4764bce785146269b30cb5fc4", + "reference": "ef4d7e442ca910c4764bce785146269b30cb5fc4", + "shasum": "" + }, + "require": { + "php": ">=7.1" + }, + "provide": { + "ext-ctype": "*" + }, + "suggest": { + "ext-ctype": "For best performance" + }, + "type": "library", + "extra": { + "thanks": { + "name": "symfony/polyfill", + "url": "https://github.com/symfony/polyfill" + } + }, + "autoload": { + "files": [ + "bootstrap.php" + ], + "psr-4": { + "Symfony\\Polyfill\\Ctype\\": "" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Gert de Pagter", + "email": "BackEndTea@gmail.com" + }, + { + "name": "Symfony Community", + "homepage": "https://symfony.com/contributors" + } + ], + "description": "Symfony polyfill for ctype functions", + "homepage": "https://symfony.com", + "keywords": [ + "compatibility", + "ctype", + "polyfill", + "portable" + ], + "support": { + "source": "https://github.com/symfony/polyfill-ctype/tree/v1.29.0" + }, + "funding": [ + { + "url": "https://symfony.com/sponsor", + "type": "custom" + }, + { + "url": "https://github.com/fabpot", + "type": "github" + }, + { + "url": "https://tidelift.com/funding/github/packagist/symfony/symfony", + "type": "tidelift" + } + ], + "time": "2024-01-29T20:11:03+00:00" + }, + { + "name": "symfony/polyfill-intl-grapheme", + "version": "v1.29.0", + "source": { + "type": "git", + "url": "https://github.com/symfony/polyfill-intl-grapheme.git", + "reference": "32a9da87d7b3245e09ac426c83d334ae9f06f80f" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/symfony/polyfill-intl-grapheme/zipball/32a9da87d7b3245e09ac426c83d334ae9f06f80f", + "reference": "32a9da87d7b3245e09ac426c83d334ae9f06f80f", + "shasum": "" + }, + "require": { + "php": ">=7.1" + }, + "suggest": { + "ext-intl": "For best performance" + }, + "type": "library", + "extra": { + "thanks": { + "name": "symfony/polyfill", + "url": "https://github.com/symfony/polyfill" + } + }, + "autoload": { + "files": [ + "bootstrap.php" + ], + "psr-4": { + "Symfony\\Polyfill\\Intl\\Grapheme\\": "" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Nicolas Grekas", + "email": "p@tchwork.com" + }, + { + "name": "Symfony Community", + "homepage": "https://symfony.com/contributors" + } + ], + "description": "Symfony polyfill for intl's grapheme_* functions", + "homepage": "https://symfony.com", + "keywords": [ + "compatibility", + "grapheme", + "intl", + "polyfill", + "portable", + "shim" + ], + "support": { + "source": "https://github.com/symfony/polyfill-intl-grapheme/tree/v1.29.0" + }, + "funding": [ + { + "url": "https://symfony.com/sponsor", + "type": "custom" + }, + { + "url": "https://github.com/fabpot", + "type": "github" + }, + { + "url": "https://tidelift.com/funding/github/packagist/symfony/symfony", + "type": "tidelift" + } + ], + "time": "2024-01-29T20:11:03+00:00" + }, + { + "name": "symfony/polyfill-intl-idn", + "version": "v1.29.0", + "source": { + "type": "git", + "url": "https://github.com/symfony/polyfill-intl-idn.git", + "reference": "a287ed7475f85bf6f61890146edbc932c0fff919" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/symfony/polyfill-intl-idn/zipball/a287ed7475f85bf6f61890146edbc932c0fff919", + "reference": "a287ed7475f85bf6f61890146edbc932c0fff919", + "shasum": "" + }, + "require": { + "php": ">=7.1", + "symfony/polyfill-intl-normalizer": "^1.10", + "symfony/polyfill-php72": "^1.10" + }, + "suggest": { + "ext-intl": "For best performance" + }, + "type": "library", + "extra": { + "thanks": { + "name": "symfony/polyfill", + "url": "https://github.com/symfony/polyfill" + } + }, + "autoload": { + "files": [ + "bootstrap.php" + ], + "psr-4": { + "Symfony\\Polyfill\\Intl\\Idn\\": "" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Laurent Bassin", + "email": "laurent@bassin.info" + }, + { + "name": "Trevor Rowbotham", + "email": "trevor.rowbotham@pm.me" + }, + { + "name": "Symfony Community", + "homepage": "https://symfony.com/contributors" + } + ], + "description": "Symfony polyfill for intl's idn_to_ascii and idn_to_utf8 functions", + "homepage": "https://symfony.com", + "keywords": [ + "compatibility", + "idn", + "intl", + "polyfill", + "portable", + "shim" + ], + "support": { + "source": "https://github.com/symfony/polyfill-intl-idn/tree/v1.29.0" + }, + "funding": [ + { + "url": "https://symfony.com/sponsor", + "type": "custom" + }, + { + "url": "https://github.com/fabpot", + "type": "github" + }, + { + "url": "https://tidelift.com/funding/github/packagist/symfony/symfony", + "type": "tidelift" + } + ], + "time": "2024-01-29T20:11:03+00:00" + }, + { + "name": "symfony/polyfill-intl-normalizer", + "version": "v1.29.0", + "source": { + "type": "git", + "url": "https://github.com/symfony/polyfill-intl-normalizer.git", + "reference": "bc45c394692b948b4d383a08d7753968bed9a83d" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/symfony/polyfill-intl-normalizer/zipball/bc45c394692b948b4d383a08d7753968bed9a83d", + "reference": "bc45c394692b948b4d383a08d7753968bed9a83d", + "shasum": "" + }, + "require": { + "php": ">=7.1" + }, + "suggest": { + "ext-intl": "For best performance" + }, + "type": "library", + "extra": { + "thanks": { + "name": "symfony/polyfill", + "url": "https://github.com/symfony/polyfill" + } + }, + "autoload": { + "files": [ + "bootstrap.php" + ], + "psr-4": { + "Symfony\\Polyfill\\Intl\\Normalizer\\": "" + }, + "classmap": [ + "Resources/stubs" + ] + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Nicolas Grekas", + "email": "p@tchwork.com" + }, + { + "name": "Symfony Community", + "homepage": "https://symfony.com/contributors" + } + ], + "description": "Symfony polyfill for intl's Normalizer class and related functions", + "homepage": "https://symfony.com", + "keywords": [ + "compatibility", + "intl", + "normalizer", + "polyfill", + "portable", + "shim" + ], + "support": { + "source": "https://github.com/symfony/polyfill-intl-normalizer/tree/v1.29.0" + }, + "funding": [ + { + "url": "https://symfony.com/sponsor", + "type": "custom" + }, + { + "url": "https://github.com/fabpot", + "type": "github" + }, + { + "url": "https://tidelift.com/funding/github/packagist/symfony/symfony", + "type": "tidelift" + } + ], + "time": "2024-01-29T20:11:03+00:00" + }, + { + "name": "symfony/polyfill-mbstring", + "version": "v1.29.0", + "source": { + "type": "git", + "url": "https://github.com/symfony/polyfill-mbstring.git", + "reference": "9773676c8a1bb1f8d4340a62efe641cf76eda7ec" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/symfony/polyfill-mbstring/zipball/9773676c8a1bb1f8d4340a62efe641cf76eda7ec", + "reference": "9773676c8a1bb1f8d4340a62efe641cf76eda7ec", + "shasum": "" + }, + "require": { + "php": ">=7.1" + }, + "provide": { + "ext-mbstring": "*" + }, + "suggest": { + "ext-mbstring": "For best performance" + }, + "type": "library", + "extra": { + "thanks": { + "name": "symfony/polyfill", + "url": "https://github.com/symfony/polyfill" + } + }, + "autoload": { + "files": [ + "bootstrap.php" + ], + "psr-4": { + "Symfony\\Polyfill\\Mbstring\\": "" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Nicolas Grekas", + "email": "p@tchwork.com" + }, + { + "name": "Symfony Community", + "homepage": "https://symfony.com/contributors" + } + ], + "description": "Symfony polyfill for the Mbstring extension", + "homepage": "https://symfony.com", + "keywords": [ + "compatibility", + "mbstring", + "polyfill", + "portable", + "shim" + ], + "support": { + "source": "https://github.com/symfony/polyfill-mbstring/tree/v1.29.0" + }, + "funding": [ + { + "url": "https://symfony.com/sponsor", + "type": "custom" + }, + { + "url": "https://github.com/fabpot", + "type": "github" + }, + { + "url": "https://tidelift.com/funding/github/packagist/symfony/symfony", + "type": "tidelift" + } + ], + "time": "2024-01-29T20:11:03+00:00" + }, + { + "name": "symfony/polyfill-php72", + "version": "v1.29.0", + "source": { + "type": "git", + "url": "https://github.com/symfony/polyfill-php72.git", + "reference": "861391a8da9a04cbad2d232ddd9e4893220d6e25" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/symfony/polyfill-php72/zipball/861391a8da9a04cbad2d232ddd9e4893220d6e25", + "reference": "861391a8da9a04cbad2d232ddd9e4893220d6e25", + "shasum": "" + }, + "require": { + "php": ">=7.1" + }, + "type": "library", + "extra": { + "thanks": { + "name": "symfony/polyfill", + "url": "https://github.com/symfony/polyfill" + } + }, + "autoload": { + "files": [ + "bootstrap.php" + ], + "psr-4": { + "Symfony\\Polyfill\\Php72\\": "" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Nicolas Grekas", + "email": "p@tchwork.com" + }, + { + "name": "Symfony Community", + "homepage": "https://symfony.com/contributors" + } + ], + "description": "Symfony polyfill backporting some PHP 7.2+ features to lower PHP versions", + "homepage": "https://symfony.com", + "keywords": [ + "compatibility", + "polyfill", + "portable", + "shim" + ], + "support": { + "source": "https://github.com/symfony/polyfill-php72/tree/v1.29.0" + }, + "funding": [ + { + "url": "https://symfony.com/sponsor", + "type": "custom" + }, + { + "url": "https://github.com/fabpot", + "type": "github" + }, + { + "url": "https://tidelift.com/funding/github/packagist/symfony/symfony", + "type": "tidelift" + } + ], + "time": "2024-01-29T20:11:03+00:00" + }, + { + "name": "symfony/polyfill-php80", + "version": "v1.29.0", + "source": { + "type": "git", + "url": "https://github.com/symfony/polyfill-php80.git", + "reference": "87b68208d5c1188808dd7839ee1e6c8ec3b02f1b" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/symfony/polyfill-php80/zipball/87b68208d5c1188808dd7839ee1e6c8ec3b02f1b", + "reference": "87b68208d5c1188808dd7839ee1e6c8ec3b02f1b", + "shasum": "" + }, + "require": { + "php": ">=7.1" + }, + "type": "library", + "extra": { + "thanks": { + "name": "symfony/polyfill", + "url": "https://github.com/symfony/polyfill" + } + }, + "autoload": { + "files": [ + "bootstrap.php" + ], + "psr-4": { + "Symfony\\Polyfill\\Php80\\": "" + }, + "classmap": [ + "Resources/stubs" + ] + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Ion Bazan", + "email": "ion.bazan@gmail.com" + }, + { + "name": "Nicolas Grekas", + "email": "p@tchwork.com" + }, + { + "name": "Symfony Community", + "homepage": "https://symfony.com/contributors" + } + ], + "description": "Symfony polyfill backporting some PHP 8.0+ features to lower PHP versions", + "homepage": "https://symfony.com", + "keywords": [ + "compatibility", + "polyfill", + "portable", + "shim" + ], + "support": { + "source": "https://github.com/symfony/polyfill-php80/tree/v1.29.0" + }, + "funding": [ + { + "url": "https://symfony.com/sponsor", + "type": "custom" + }, + { + "url": "https://github.com/fabpot", + "type": "github" + }, + { + "url": "https://tidelift.com/funding/github/packagist/symfony/symfony", + "type": "tidelift" + } + ], + "time": "2024-01-29T20:11:03+00:00" + }, + { + "name": "symfony/polyfill-php83", + "version": "v1.29.0", + "source": { + "type": "git", + "url": "https://github.com/symfony/polyfill-php83.git", + "reference": "86fcae159633351e5fd145d1c47de6c528f8caff" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/symfony/polyfill-php83/zipball/86fcae159633351e5fd145d1c47de6c528f8caff", + "reference": "86fcae159633351e5fd145d1c47de6c528f8caff", + "shasum": "" + }, + "require": { + "php": ">=7.1", + "symfony/polyfill-php80": "^1.14" + }, + "type": "library", + "extra": { + "thanks": { + "name": "symfony/polyfill", + "url": "https://github.com/symfony/polyfill" + } + }, + "autoload": { + "files": [ + "bootstrap.php" + ], + "psr-4": { + "Symfony\\Polyfill\\Php83\\": "" + }, + "classmap": [ + "Resources/stubs" + ] + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Nicolas Grekas", + "email": "p@tchwork.com" + }, + { + "name": "Symfony Community", + "homepage": "https://symfony.com/contributors" + } + ], + "description": "Symfony polyfill backporting some PHP 8.3+ features to lower PHP versions", + "homepage": "https://symfony.com", + "keywords": [ + "compatibility", + "polyfill", + "portable", + "shim" + ], + "support": { + "source": "https://github.com/symfony/polyfill-php83/tree/v1.29.0" + }, + "funding": [ + { + "url": "https://symfony.com/sponsor", + "type": "custom" + }, + { + "url": "https://github.com/fabpot", + "type": "github" + }, + { + "url": "https://tidelift.com/funding/github/packagist/symfony/symfony", + "type": "tidelift" + } + ], + "time": "2024-01-29T20:11:03+00:00" + }, + { + "name": "symfony/polyfill-uuid", + "version": "v1.29.0", + "source": { + "type": "git", + "url": "https://github.com/symfony/polyfill-uuid.git", + "reference": "3abdd21b0ceaa3000ee950097bc3cf9efc137853" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/symfony/polyfill-uuid/zipball/3abdd21b0ceaa3000ee950097bc3cf9efc137853", + "reference": "3abdd21b0ceaa3000ee950097bc3cf9efc137853", + "shasum": "" + }, + "require": { + "php": ">=7.1" + }, + "provide": { + "ext-uuid": "*" + }, + "suggest": { + "ext-uuid": "For best performance" + }, + "type": "library", + "extra": { + "thanks": { + "name": "symfony/polyfill", + "url": "https://github.com/symfony/polyfill" + } + }, + "autoload": { + "files": [ + "bootstrap.php" + ], + "psr-4": { + "Symfony\\Polyfill\\Uuid\\": "" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Grégoire Pineau", + "email": "lyrixx@lyrixx.info" + }, + { + "name": "Symfony Community", + "homepage": "https://symfony.com/contributors" + } + ], + "description": "Symfony polyfill for uuid functions", + "homepage": "https://symfony.com", + "keywords": [ + "compatibility", + "polyfill", + "portable", + "uuid" + ], + "support": { + "source": "https://github.com/symfony/polyfill-uuid/tree/v1.29.0" + }, + "funding": [ + { + "url": "https://symfony.com/sponsor", + "type": "custom" + }, + { + "url": "https://github.com/fabpot", + "type": "github" + }, + { + "url": "https://tidelift.com/funding/github/packagist/symfony/symfony", + "type": "tidelift" + } + ], + "time": "2024-01-29T20:11:03+00:00" + }, + { + "name": "symfony/process", + "version": "v7.0.7", + "source": { + "type": "git", + "url": "https://github.com/symfony/process.git", + "reference": "3839e56b94dd1dbd13235d27504e66baf23faba0" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/symfony/process/zipball/3839e56b94dd1dbd13235d27504e66baf23faba0", + "reference": "3839e56b94dd1dbd13235d27504e66baf23faba0", + "shasum": "" + }, + "require": { + "php": ">=8.2" + }, + "type": "library", + "autoload": { + "psr-4": { + "Symfony\\Component\\Process\\": "" + }, + "exclude-from-classmap": [ + "/Tests/" + ] + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Fabien Potencier", + "email": "fabien@symfony.com" + }, + { + "name": "Symfony Community", + "homepage": "https://symfony.com/contributors" + } + ], + "description": "Executes commands in sub-processes", + "homepage": "https://symfony.com", + "support": { + "source": "https://github.com/symfony/process/tree/v7.0.7" + }, + "funding": [ + { + "url": "https://symfony.com/sponsor", + "type": "custom" + }, + { + "url": "https://github.com/fabpot", + "type": "github" + }, + { + "url": "https://tidelift.com/funding/github/packagist/symfony/symfony", + "type": "tidelift" + } + ], + "time": "2024-04-18T09:29:19+00:00" + }, + { + "name": "symfony/routing", + "version": "v7.0.7", + "source": { + "type": "git", + "url": "https://github.com/symfony/routing.git", + "reference": "9f82bf7766ccc9c22ab7aeb9bebb98351483fa5b" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/symfony/routing/zipball/9f82bf7766ccc9c22ab7aeb9bebb98351483fa5b", + "reference": "9f82bf7766ccc9c22ab7aeb9bebb98351483fa5b", + "shasum": "" + }, + "require": { + "php": ">=8.2", + "symfony/deprecation-contracts": "^2.5|^3" + }, + "conflict": { + "symfony/config": "<6.4", + "symfony/dependency-injection": "<6.4", + "symfony/yaml": "<6.4" + }, + "require-dev": { + "psr/log": "^1|^2|^3", + "symfony/config": "^6.4|^7.0", + "symfony/dependency-injection": "^6.4|^7.0", + "symfony/expression-language": "^6.4|^7.0", + "symfony/http-foundation": "^6.4|^7.0", + "symfony/yaml": "^6.4|^7.0" + }, + "type": "library", + "autoload": { + "psr-4": { + "Symfony\\Component\\Routing\\": "" + }, + "exclude-from-classmap": [ + "/Tests/" + ] + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Fabien Potencier", + "email": "fabien@symfony.com" + }, + { + "name": "Symfony Community", + "homepage": "https://symfony.com/contributors" + } + ], + "description": "Maps an HTTP request to a set of configuration variables", + "homepage": "https://symfony.com", + "keywords": [ + "router", + "routing", + "uri", + "url" + ], + "support": { + "source": "https://github.com/symfony/routing/tree/v7.0.7" + }, + "funding": [ + { + "url": "https://symfony.com/sponsor", + "type": "custom" + }, + { + "url": "https://github.com/fabpot", + "type": "github" + }, + { + "url": "https://tidelift.com/funding/github/packagist/symfony/symfony", + "type": "tidelift" + } + ], + "time": "2024-04-18T09:29:19+00:00" + }, + { + "name": "symfony/service-contracts", + "version": "v3.5.0", + "source": { + "type": "git", + "url": "https://github.com/symfony/service-contracts.git", + "reference": "bd1d9e59a81d8fa4acdcea3f617c581f7475a80f" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/symfony/service-contracts/zipball/bd1d9e59a81d8fa4acdcea3f617c581f7475a80f", + "reference": "bd1d9e59a81d8fa4acdcea3f617c581f7475a80f", + "shasum": "" + }, + "require": { + "php": ">=8.1", + "psr/container": "^1.1|^2.0", + "symfony/deprecation-contracts": "^2.5|^3" + }, + "conflict": { + "ext-psr": "<1.1|>=2" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-main": "3.5-dev" + }, + "thanks": { + "name": "symfony/contracts", + "url": "https://github.com/symfony/contracts" + } + }, + "autoload": { + "psr-4": { + "Symfony\\Contracts\\Service\\": "" + }, + "exclude-from-classmap": [ + "/Test/" + ] + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Nicolas Grekas", + "email": "p@tchwork.com" + }, + { + "name": "Symfony Community", + "homepage": "https://symfony.com/contributors" + } + ], + "description": "Generic abstractions related to writing services", + "homepage": "https://symfony.com", + "keywords": [ + "abstractions", + "contracts", + "decoupling", + "interfaces", + "interoperability", + "standards" + ], + "support": { + "source": "https://github.com/symfony/service-contracts/tree/v3.5.0" + }, + "funding": [ + { + "url": "https://symfony.com/sponsor", + "type": "custom" + }, + { + "url": "https://github.com/fabpot", + "type": "github" + }, + { + "url": "https://tidelift.com/funding/github/packagist/symfony/symfony", + "type": "tidelift" + } + ], + "time": "2024-04-18T09:32:20+00:00" + }, + { + "name": "symfony/string", + "version": "v7.0.7", + "source": { + "type": "git", + "url": "https://github.com/symfony/string.git", + "reference": "e405b5424dc2528e02e31ba26b83a79fd4eb8f63" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/symfony/string/zipball/e405b5424dc2528e02e31ba26b83a79fd4eb8f63", + "reference": "e405b5424dc2528e02e31ba26b83a79fd4eb8f63", + "shasum": "" + }, + "require": { + "php": ">=8.2", + "symfony/polyfill-ctype": "~1.8", + "symfony/polyfill-intl-grapheme": "~1.0", + "symfony/polyfill-intl-normalizer": "~1.0", + "symfony/polyfill-mbstring": "~1.0" + }, + "conflict": { + "symfony/translation-contracts": "<2.5" + }, + "require-dev": { + "symfony/error-handler": "^6.4|^7.0", + "symfony/http-client": "^6.4|^7.0", + "symfony/intl": "^6.4|^7.0", + "symfony/translation-contracts": "^2.5|^3.0", + "symfony/var-exporter": "^6.4|^7.0" + }, + "type": "library", + "autoload": { + "files": [ + "Resources/functions.php" + ], + "psr-4": { + "Symfony\\Component\\String\\": "" + }, + "exclude-from-classmap": [ + "/Tests/" + ] + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Nicolas Grekas", + "email": "p@tchwork.com" + }, + { + "name": "Symfony Community", + "homepage": "https://symfony.com/contributors" + } + ], + "description": "Provides an object-oriented API to strings and deals with bytes, UTF-8 code points and grapheme clusters in a unified way", + "homepage": "https://symfony.com", + "keywords": [ + "grapheme", + "i18n", + "string", + "unicode", + "utf-8", + "utf8" + ], + "support": { + "source": "https://github.com/symfony/string/tree/v7.0.7" + }, + "funding": [ + { + "url": "https://symfony.com/sponsor", + "type": "custom" + }, + { + "url": "https://github.com/fabpot", + "type": "github" + }, + { + "url": "https://tidelift.com/funding/github/packagist/symfony/symfony", + "type": "tidelift" + } + ], + "time": "2024-04-18T09:29:19+00:00" + }, + { + "name": "symfony/translation", + "version": "v7.0.7", + "source": { + "type": "git", + "url": "https://github.com/symfony/translation.git", + "reference": "1515e03afaa93e6419aba5d5c9d209159317100b" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/symfony/translation/zipball/1515e03afaa93e6419aba5d5c9d209159317100b", + "reference": "1515e03afaa93e6419aba5d5c9d209159317100b", + "shasum": "" + }, + "require": { + "php": ">=8.2", + "symfony/polyfill-mbstring": "~1.0", + "symfony/translation-contracts": "^2.5|^3.0" + }, + "conflict": { + "symfony/config": "<6.4", + "symfony/console": "<6.4", + "symfony/dependency-injection": "<6.4", + "symfony/http-client-contracts": "<2.5", + "symfony/http-kernel": "<6.4", + "symfony/service-contracts": "<2.5", + "symfony/twig-bundle": "<6.4", + "symfony/yaml": "<6.4" + }, + "provide": { + "symfony/translation-implementation": "2.3|3.0" + }, + "require-dev": { + "nikic/php-parser": "^4.18|^5.0", + "psr/log": "^1|^2|^3", + "symfony/config": "^6.4|^7.0", + "symfony/console": "^6.4|^7.0", + "symfony/dependency-injection": "^6.4|^7.0", + "symfony/finder": "^6.4|^7.0", + "symfony/http-client-contracts": "^2.5|^3.0", + "symfony/http-kernel": "^6.4|^7.0", + "symfony/intl": "^6.4|^7.0", + "symfony/polyfill-intl-icu": "^1.21", + "symfony/routing": "^6.4|^7.0", + "symfony/service-contracts": "^2.5|^3", + "symfony/yaml": "^6.4|^7.0" + }, + "type": "library", + "autoload": { + "files": [ + "Resources/functions.php" + ], + "psr-4": { + "Symfony\\Component\\Translation\\": "" + }, + "exclude-from-classmap": [ + "/Tests/" + ] + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Fabien Potencier", + "email": "fabien@symfony.com" + }, + { + "name": "Symfony Community", + "homepage": "https://symfony.com/contributors" + } + ], + "description": "Provides tools to internationalize your application", + "homepage": "https://symfony.com", + "support": { + "source": "https://github.com/symfony/translation/tree/v7.0.7" + }, + "funding": [ + { + "url": "https://symfony.com/sponsor", + "type": "custom" + }, + { + "url": "https://github.com/fabpot", + "type": "github" + }, + { + "url": "https://tidelift.com/funding/github/packagist/symfony/symfony", + "type": "tidelift" + } + ], + "time": "2024-04-18T09:29:19+00:00" + }, + { + "name": "symfony/translation-contracts", + "version": "v3.5.0", + "source": { + "type": "git", + "url": "https://github.com/symfony/translation-contracts.git", + "reference": "b9d2189887bb6b2e0367a9fc7136c5239ab9b05a" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/symfony/translation-contracts/zipball/b9d2189887bb6b2e0367a9fc7136c5239ab9b05a", + "reference": "b9d2189887bb6b2e0367a9fc7136c5239ab9b05a", + "shasum": "" + }, + "require": { + "php": ">=8.1" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-main": "3.5-dev" + }, + "thanks": { + "name": "symfony/contracts", + "url": "https://github.com/symfony/contracts" + } + }, + "autoload": { + "psr-4": { + "Symfony\\Contracts\\Translation\\": "" + }, + "exclude-from-classmap": [ + "/Test/" + ] + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Nicolas Grekas", + "email": "p@tchwork.com" + }, + { + "name": "Symfony Community", + "homepage": "https://symfony.com/contributors" + } + ], + "description": "Generic abstractions related to translation", + "homepage": "https://symfony.com", + "keywords": [ + "abstractions", + "contracts", + "decoupling", + "interfaces", + "interoperability", + "standards" + ], + "support": { + "source": "https://github.com/symfony/translation-contracts/tree/v3.5.0" + }, + "funding": [ + { + "url": "https://symfony.com/sponsor", + "type": "custom" + }, + { + "url": "https://github.com/fabpot", + "type": "github" + }, + { + "url": "https://tidelift.com/funding/github/packagist/symfony/symfony", + "type": "tidelift" + } + ], + "time": "2024-04-18T09:32:20+00:00" + }, + { + "name": "symfony/uid", + "version": "v7.0.7", + "source": { + "type": "git", + "url": "https://github.com/symfony/uid.git", + "reference": "4f3a5d181999e25918586c8369de09e7814e7be2" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/symfony/uid/zipball/4f3a5d181999e25918586c8369de09e7814e7be2", + "reference": "4f3a5d181999e25918586c8369de09e7814e7be2", + "shasum": "" + }, + "require": { + "php": ">=8.2", + "symfony/polyfill-uuid": "^1.15" + }, + "require-dev": { + "symfony/console": "^6.4|^7.0" + }, + "type": "library", + "autoload": { + "psr-4": { + "Symfony\\Component\\Uid\\": "" + }, + "exclude-from-classmap": [ + "/Tests/" + ] + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Grégoire Pineau", + "email": "lyrixx@lyrixx.info" + }, + { + "name": "Nicolas Grekas", + "email": "p@tchwork.com" + }, + { + "name": "Symfony Community", + "homepage": "https://symfony.com/contributors" + } + ], + "description": "Provides an object-oriented API to generate and represent UIDs", + "homepage": "https://symfony.com", + "keywords": [ + "UID", + "ulid", + "uuid" + ], + "support": { + "source": "https://github.com/symfony/uid/tree/v7.0.7" + }, + "funding": [ + { + "url": "https://symfony.com/sponsor", + "type": "custom" + }, + { + "url": "https://github.com/fabpot", + "type": "github" + }, + { + "url": "https://tidelift.com/funding/github/packagist/symfony/symfony", + "type": "tidelift" + } + ], + "time": "2024-04-18T09:29:19+00:00" + }, + { + "name": "symfony/var-dumper", + "version": "v7.0.7", + "source": { + "type": "git", + "url": "https://github.com/symfony/var-dumper.git", + "reference": "d1627b66fd87c8b4d90cabe5671c29d575690924" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/symfony/var-dumper/zipball/d1627b66fd87c8b4d90cabe5671c29d575690924", + "reference": "d1627b66fd87c8b4d90cabe5671c29d575690924", + "shasum": "" + }, + "require": { + "php": ">=8.2", + "symfony/polyfill-mbstring": "~1.0" + }, + "conflict": { + "symfony/console": "<6.4" + }, + "require-dev": { + "ext-iconv": "*", + "symfony/console": "^6.4|^7.0", + "symfony/http-kernel": "^6.4|^7.0", + "symfony/process": "^6.4|^7.0", + "symfony/uid": "^6.4|^7.0", + "twig/twig": "^3.0.4" + }, + "bin": [ + "Resources/bin/var-dump-server" + ], + "type": "library", + "autoload": { + "files": [ + "Resources/functions/dump.php" + ], + "psr-4": { + "Symfony\\Component\\VarDumper\\": "" + }, + "exclude-from-classmap": [ + "/Tests/" + ] + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Nicolas Grekas", + "email": "p@tchwork.com" + }, + { + "name": "Symfony Community", + "homepage": "https://symfony.com/contributors" + } + ], + "description": "Provides mechanisms for walking through any arbitrary PHP variable", + "homepage": "https://symfony.com", + "keywords": [ + "debug", + "dump" + ], + "support": { + "source": "https://github.com/symfony/var-dumper/tree/v7.0.7" + }, + "funding": [ + { + "url": "https://symfony.com/sponsor", + "type": "custom" + }, + { + "url": "https://github.com/fabpot", + "type": "github" + }, + { + "url": "https://tidelift.com/funding/github/packagist/symfony/symfony", + "type": "tidelift" + } + ], + "time": "2024-04-18T09:29:19+00:00" + }, + { + "name": "tijsverkoyen/css-to-inline-styles", + "version": "v2.2.7", + "source": { + "type": "git", + "url": "https://github.com/tijsverkoyen/CssToInlineStyles.git", + "reference": "83ee6f38df0a63106a9e4536e3060458b74ccedb" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/tijsverkoyen/CssToInlineStyles/zipball/83ee6f38df0a63106a9e4536e3060458b74ccedb", + "reference": "83ee6f38df0a63106a9e4536e3060458b74ccedb", + "shasum": "" + }, + "require": { + "ext-dom": "*", + "ext-libxml": "*", + "php": "^5.5 || ^7.0 || ^8.0", + "symfony/css-selector": "^2.7 || ^3.0 || ^4.0 || ^5.0 || ^6.0 || ^7.0" + }, + "require-dev": { + "phpunit/phpunit": "^4.8.35 || ^5.7 || ^6.0 || ^7.5 || ^8.5.21 || ^9.5.10" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "2.2.x-dev" + } + }, + "autoload": { + "psr-4": { + "TijsVerkoyen\\CssToInlineStyles\\": "src" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "BSD-3-Clause" + ], + "authors": [ + { + "name": "Tijs Verkoyen", + "email": "css_to_inline_styles@verkoyen.eu", + "role": "Developer" + } + ], + "description": "CssToInlineStyles is a class that enables you to convert HTML-pages/files into HTML-pages/files with inline styles. This is very useful when you're sending emails.", + "homepage": "https://github.com/tijsverkoyen/CssToInlineStyles", + "support": { + "issues": "https://github.com/tijsverkoyen/CssToInlineStyles/issues", + "source": "https://github.com/tijsverkoyen/CssToInlineStyles/tree/v2.2.7" + }, + "time": "2023-12-08T13:03:43+00:00" + }, + { + "name": "vlucas/phpdotenv", + "version": "v5.6.0", + "source": { + "type": "git", + "url": "https://github.com/vlucas/phpdotenv.git", + "reference": "2cf9fb6054c2bb1d59d1f3817706ecdb9d2934c4" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/vlucas/phpdotenv/zipball/2cf9fb6054c2bb1d59d1f3817706ecdb9d2934c4", + "reference": "2cf9fb6054c2bb1d59d1f3817706ecdb9d2934c4", + "shasum": "" + }, + "require": { + "ext-pcre": "*", + "graham-campbell/result-type": "^1.1.2", + "php": "^7.2.5 || ^8.0", + "phpoption/phpoption": "^1.9.2", + "symfony/polyfill-ctype": "^1.24", + "symfony/polyfill-mbstring": "^1.24", + "symfony/polyfill-php80": "^1.24" + }, + "require-dev": { + "bamarni/composer-bin-plugin": "^1.8.2", + "ext-filter": "*", + "phpunit/phpunit": "^8.5.34 || ^9.6.13 || ^10.4.2" + }, + "suggest": { + "ext-filter": "Required to use the boolean validator." + }, + "type": "library", + "extra": { + "bamarni-bin": { + "bin-links": true, + "forward-command": true + }, + "branch-alias": { + "dev-master": "5.6-dev" + } + }, + "autoload": { + "psr-4": { + "Dotenv\\": "src/" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "BSD-3-Clause" + ], + "authors": [ + { + "name": "Graham Campbell", + "email": "hello@gjcampbell.co.uk", + "homepage": "https://github.com/GrahamCampbell" + }, + { + "name": "Vance Lucas", + "email": "vance@vancelucas.com", + "homepage": "https://github.com/vlucas" + } + ], + "description": "Loads environment variables from `.env` to `getenv()`, `$_ENV` and `$_SERVER` automagically.", + "keywords": [ + "dotenv", + "env", + "environment" + ], + "support": { + "issues": "https://github.com/vlucas/phpdotenv/issues", + "source": "https://github.com/vlucas/phpdotenv/tree/v5.6.0" + }, + "funding": [ + { + "url": "https://github.com/GrahamCampbell", + "type": "github" + }, + { + "url": "https://tidelift.com/funding/github/packagist/vlucas/phpdotenv", + "type": "tidelift" + } + ], + "time": "2023-11-12T22:43:29+00:00" + }, + { + "name": "voku/portable-ascii", + "version": "2.0.1", + "source": { + "type": "git", + "url": "https://github.com/voku/portable-ascii.git", + "reference": "b56450eed252f6801410d810c8e1727224ae0743" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/voku/portable-ascii/zipball/b56450eed252f6801410d810c8e1727224ae0743", + "reference": "b56450eed252f6801410d810c8e1727224ae0743", + "shasum": "" + }, + "require": { + "php": ">=7.0.0" + }, + "require-dev": { + "phpunit/phpunit": "~6.0 || ~7.0 || ~9.0" + }, + "suggest": { + "ext-intl": "Use Intl for transliterator_transliterate() support" + }, + "type": "library", + "autoload": { + "psr-4": { + "voku\\": "src/voku/" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Lars Moelleken", + "homepage": "http://www.moelleken.org/" + } + ], + "description": "Portable ASCII library - performance optimized (ascii) string functions for php.", + "homepage": "https://github.com/voku/portable-ascii", + "keywords": [ + "ascii", + "clean", + "php" + ], + "support": { + "issues": "https://github.com/voku/portable-ascii/issues", + "source": "https://github.com/voku/portable-ascii/tree/2.0.1" + }, + "funding": [ + { + "url": "https://www.paypal.me/moelleken", + "type": "custom" + }, + { + "url": "https://github.com/voku", + "type": "github" + }, + { + "url": "https://opencollective.com/portable-ascii", + "type": "open_collective" + }, + { + "url": "https://www.patreon.com/voku", + "type": "patreon" + }, + { + "url": "https://tidelift.com/funding/github/packagist/voku/portable-ascii", + "type": "tidelift" + } + ], + "time": "2022-03-08T17:03:00+00:00" + }, + { + "name": "webmozart/assert", + "version": "1.11.0", + "source": { + "type": "git", + "url": "https://github.com/webmozarts/assert.git", + "reference": "11cb2199493b2f8a3b53e7f19068fc6aac760991" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/webmozarts/assert/zipball/11cb2199493b2f8a3b53e7f19068fc6aac760991", + "reference": "11cb2199493b2f8a3b53e7f19068fc6aac760991", + "shasum": "" + }, + "require": { + "ext-ctype": "*", + "php": "^7.2 || ^8.0" + }, + "conflict": { + "phpstan/phpstan": "<0.12.20", + "vimeo/psalm": "<4.6.1 || 4.6.2" + }, + "require-dev": { + "phpunit/phpunit": "^8.5.13" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "1.10-dev" + } + }, + "autoload": { + "psr-4": { + "Webmozart\\Assert\\": "src/" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Bernhard Schussek", + "email": "bschussek@gmail.com" + } + ], + "description": "Assertions to validate method input/output with nice error messages.", + "keywords": [ + "assert", + "check", + "validate" + ], + "support": { + "issues": "https://github.com/webmozarts/assert/issues", + "source": "https://github.com/webmozarts/assert/tree/1.11.0" + }, + "time": "2022-06-03T18:03:27+00:00" + } + ], + "packages-dev": [ + { + "name": "fakerphp/faker", + "version": "v1.23.1", + "source": { + "type": "git", + "url": "https://github.com/FakerPHP/Faker.git", + "reference": "bfb4fe148adbf78eff521199619b93a52ae3554b" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/FakerPHP/Faker/zipball/bfb4fe148adbf78eff521199619b93a52ae3554b", + "reference": "bfb4fe148adbf78eff521199619b93a52ae3554b", + "shasum": "" + }, + "require": { + "php": "^7.4 || ^8.0", + "psr/container": "^1.0 || ^2.0", + "symfony/deprecation-contracts": "^2.2 || ^3.0" + }, + "conflict": { + "fzaninotto/faker": "*" + }, + "require-dev": { + "bamarni/composer-bin-plugin": "^1.4.1", + "doctrine/persistence": "^1.3 || ^2.0", + "ext-intl": "*", + "phpunit/phpunit": "^9.5.26", + "symfony/phpunit-bridge": "^5.4.16" + }, + "suggest": { + "doctrine/orm": "Required to use Faker\\ORM\\Doctrine", + "ext-curl": "Required by Faker\\Provider\\Image to download images.", + "ext-dom": "Required by Faker\\Provider\\HtmlLorem for generating random HTML.", + "ext-iconv": "Required by Faker\\Provider\\ru_RU\\Text::realText() for generating real Russian text.", + "ext-mbstring": "Required for multibyte Unicode string functionality." + }, + "type": "library", + "autoload": { + "psr-4": { + "Faker\\": "src/Faker/" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "François Zaninotto" + } + ], + "description": "Faker is a PHP library that generates fake data for you.", + "keywords": [ + "data", + "faker", + "fixtures" + ], + "support": { + "issues": "https://github.com/FakerPHP/Faker/issues", + "source": "https://github.com/FakerPHP/Faker/tree/v1.23.1" + }, + "time": "2024-01-02T13:46:09+00:00" + }, + { + "name": "filp/whoops", + "version": "2.15.4", + "source": { + "type": "git", + "url": "https://github.com/filp/whoops.git", + "reference": "a139776fa3f5985a50b509f2a02ff0f709d2a546" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/filp/whoops/zipball/a139776fa3f5985a50b509f2a02ff0f709d2a546", + "reference": "a139776fa3f5985a50b509f2a02ff0f709d2a546", + "shasum": "" + }, + "require": { + "php": "^5.5.9 || ^7.0 || ^8.0", + "psr/log": "^1.0.1 || ^2.0 || ^3.0" + }, + "require-dev": { + "mockery/mockery": "^0.9 || ^1.0", + "phpunit/phpunit": "^4.8.36 || ^5.7.27 || ^6.5.14 || ^7.5.20 || ^8.5.8 || ^9.3.3", + "symfony/var-dumper": "^2.6 || ^3.0 || ^4.0 || ^5.0" + }, + "suggest": { + "symfony/var-dumper": "Pretty print complex values better with var-dumper available", + "whoops/soap": "Formats errors as SOAP responses" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "2.7-dev" + } + }, + "autoload": { + "psr-4": { + "Whoops\\": "src/Whoops/" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Filipe Dobreira", + "homepage": "https://github.com/filp", + "role": "Developer" + } + ], + "description": "php error handling for cool kids", + "homepage": "https://filp.github.io/whoops/", + "keywords": [ + "error", + "exception", + "handling", + "library", + "throwable", + "whoops" + ], + "support": { + "issues": "https://github.com/filp/whoops/issues", + "source": "https://github.com/filp/whoops/tree/2.15.4" + }, + "funding": [ + { + "url": "https://github.com/denis-sokolov", + "type": "github" + } + ], + "time": "2023-11-03T12:00:00+00:00" + }, + { + "name": "hamcrest/hamcrest-php", + "version": "v2.0.1", + "source": { + "type": "git", + "url": "https://github.com/hamcrest/hamcrest-php.git", + "reference": "8c3d0a3f6af734494ad8f6fbbee0ba92422859f3" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/hamcrest/hamcrest-php/zipball/8c3d0a3f6af734494ad8f6fbbee0ba92422859f3", + "reference": "8c3d0a3f6af734494ad8f6fbbee0ba92422859f3", + "shasum": "" + }, + "require": { + "php": "^5.3|^7.0|^8.0" + }, + "replace": { + "cordoval/hamcrest-php": "*", + "davedevelopment/hamcrest-php": "*", + "kodova/hamcrest-php": "*" + }, + "require-dev": { + "phpunit/php-file-iterator": "^1.4 || ^2.0", + "phpunit/phpunit": "^4.8.36 || ^5.7 || ^6.5 || ^7.0" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "2.1-dev" + } + }, + "autoload": { + "classmap": [ + "hamcrest" + ] + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "BSD-3-Clause" + ], + "description": "This is the PHP port of Hamcrest Matchers", + "keywords": [ + "test" + ], + "support": { + "issues": "https://github.com/hamcrest/hamcrest-php/issues", + "source": "https://github.com/hamcrest/hamcrest-php/tree/v2.0.1" + }, + "time": "2020-07-09T08:09:16+00:00" + }, + { + "name": "laravel/pint", + "version": "v1.15.3", + "source": { + "type": "git", + "url": "https://github.com/laravel/pint.git", + "reference": "3600b5d17aff52f6100ea4921849deacbbeb8656" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/laravel/pint/zipball/3600b5d17aff52f6100ea4921849deacbbeb8656", + "reference": "3600b5d17aff52f6100ea4921849deacbbeb8656", + "shasum": "" + }, + "require": { + "ext-json": "*", + "ext-mbstring": "*", + "ext-tokenizer": "*", + "ext-xml": "*", + "php": "^8.1.0" + }, + "require-dev": { + "friendsofphp/php-cs-fixer": "^3.54.0", + "illuminate/view": "^10.48.8", + "larastan/larastan": "^2.9.5", + "laravel-zero/framework": "^10.3.0", + "mockery/mockery": "^1.6.11", + "nunomaduro/termwind": "^1.15.1", + "pestphp/pest": "^2.34.7" + }, + "bin": [ + "builds/pint" + ], + "type": "project", + "autoload": { + "psr-4": { + "App\\": "app/", + "Database\\Seeders\\": "database/seeders/", + "Database\\Factories\\": "database/factories/" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Nuno Maduro", + "email": "enunomaduro@gmail.com" + } + ], + "description": "An opinionated code formatter for PHP.", + "homepage": "https://laravel.com", + "keywords": [ + "format", + "formatter", + "lint", + "linter", + "php" + ], + "support": { + "issues": "https://github.com/laravel/pint/issues", + "source": "https://github.com/laravel/pint" + }, + "time": "2024-04-30T15:02:26+00:00" + }, + { + "name": "laravel/sail", + "version": "v1.29.1", + "source": { + "type": "git", + "url": "https://github.com/laravel/sail.git", + "reference": "8be4a31150eab3b46af11a2e7b2c4632eefaad7e" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/laravel/sail/zipball/8be4a31150eab3b46af11a2e7b2c4632eefaad7e", + "reference": "8be4a31150eab3b46af11a2e7b2c4632eefaad7e", + "shasum": "" + }, + "require": { + "illuminate/console": "^9.52.16|^10.0|^11.0", + "illuminate/contracts": "^9.52.16|^10.0|^11.0", + "illuminate/support": "^9.52.16|^10.0|^11.0", + "php": "^8.0", + "symfony/console": "^6.0|^7.0", + "symfony/yaml": "^6.0|^7.0" + }, + "require-dev": { + "orchestra/testbench": "^7.0|^8.0|^9.0", + "phpstan/phpstan": "^1.10" + }, + "bin": [ + "bin/sail" + ], + "type": "library", + "extra": { + "laravel": { + "providers": [ + "Laravel\\Sail\\SailServiceProvider" + ] + } + }, + "autoload": { + "psr-4": { + "Laravel\\Sail\\": "src/" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Taylor Otwell", + "email": "taylor@laravel.com" + } + ], + "description": "Docker files for running a basic Laravel application.", + "keywords": [ + "docker", + "laravel" + ], + "support": { + "issues": "https://github.com/laravel/sail/issues", + "source": "https://github.com/laravel/sail" + }, + "time": "2024-03-20T20:09:31+00:00" + }, + { + "name": "mockery/mockery", + "version": "1.6.11", + "source": { + "type": "git", + "url": "https://github.com/mockery/mockery.git", + "reference": "81a161d0b135df89951abd52296adf97deb0723d" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/mockery/mockery/zipball/81a161d0b135df89951abd52296adf97deb0723d", + "reference": "81a161d0b135df89951abd52296adf97deb0723d", + "shasum": "" + }, + "require": { + "hamcrest/hamcrest-php": "^2.0.1", + "lib-pcre": ">=7.0", + "php": ">=7.3" + }, + "conflict": { + "phpunit/phpunit": "<8.0" + }, + "require-dev": { + "phpunit/phpunit": "^8.5 || ^9.6.17", + "symplify/easy-coding-standard": "^12.1.14" + }, + "type": "library", + "autoload": { + "files": [ + "library/helpers.php", + "library/Mockery.php" + ], + "psr-4": { + "Mockery\\": "library/Mockery" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "BSD-3-Clause" + ], + "authors": [ + { + "name": "Pádraic Brady", + "email": "padraic.brady@gmail.com", + "homepage": "https://github.com/padraic", + "role": "Author" + }, + { + "name": "Dave Marshall", + "email": "dave.marshall@atstsolutions.co.uk", + "homepage": "https://davedevelopment.co.uk", + "role": "Developer" + }, + { + "name": "Nathanael Esayeas", + "email": "nathanael.esayeas@protonmail.com", + "homepage": "https://github.com/ghostwriter", + "role": "Lead Developer" + } + ], + "description": "Mockery is a simple yet flexible PHP mock object framework", + "homepage": "https://github.com/mockery/mockery", + "keywords": [ + "BDD", + "TDD", + "library", + "mock", + "mock objects", + "mockery", + "stub", + "test", + "test double", + "testing" + ], + "support": { + "docs": "https://docs.mockery.io/", + "issues": "https://github.com/mockery/mockery/issues", + "rss": "https://github.com/mockery/mockery/releases.atom", + "security": "https://github.com/mockery/mockery/security/advisories", + "source": "https://github.com/mockery/mockery" + }, + "time": "2024-03-21T18:34:15+00:00" + }, + { + "name": "myclabs/deep-copy", + "version": "1.11.1", + "source": { + "type": "git", + "url": "https://github.com/myclabs/DeepCopy.git", + "reference": "7284c22080590fb39f2ffa3e9057f10a4ddd0e0c" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/myclabs/DeepCopy/zipball/7284c22080590fb39f2ffa3e9057f10a4ddd0e0c", + "reference": "7284c22080590fb39f2ffa3e9057f10a4ddd0e0c", + "shasum": "" + }, + "require": { + "php": "^7.1 || ^8.0" + }, + "conflict": { + "doctrine/collections": "<1.6.8", + "doctrine/common": "<2.13.3 || >=3,<3.2.2" + }, + "require-dev": { + "doctrine/collections": "^1.6.8", + "doctrine/common": "^2.13.3 || ^3.2.2", + "phpunit/phpunit": "^7.5.20 || ^8.5.23 || ^9.5.13" + }, + "type": "library", + "autoload": { + "files": [ + "src/DeepCopy/deep_copy.php" + ], + "psr-4": { + "DeepCopy\\": "src/DeepCopy/" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "description": "Create deep copies (clones) of your objects", + "keywords": [ + "clone", + "copy", + "duplicate", + "object", + "object graph" + ], + "support": { + "issues": "https://github.com/myclabs/DeepCopy/issues", + "source": "https://github.com/myclabs/DeepCopy/tree/1.11.1" + }, + "funding": [ + { + "url": "https://tidelift.com/funding/github/packagist/myclabs/deep-copy", + "type": "tidelift" + } + ], + "time": "2023-03-08T13:26:56+00:00" + }, + { + "name": "nunomaduro/collision", + "version": "v8.1.1", + "source": { + "type": "git", + "url": "https://github.com/nunomaduro/collision.git", + "reference": "13e5d538b95a744d85f447a321ce10adb28e9af9" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/nunomaduro/collision/zipball/13e5d538b95a744d85f447a321ce10adb28e9af9", + "reference": "13e5d538b95a744d85f447a321ce10adb28e9af9", + "shasum": "" + }, + "require": { + "filp/whoops": "^2.15.4", + "nunomaduro/termwind": "^2.0.1", + "php": "^8.2.0", + "symfony/console": "^7.0.4" + }, + "conflict": { + "laravel/framework": "<11.0.0 || >=12.0.0", + "phpunit/phpunit": "<10.5.1 || >=12.0.0" + }, + "require-dev": { + "larastan/larastan": "^2.9.2", + "laravel/framework": "^11.0.0", + "laravel/pint": "^1.14.0", + "laravel/sail": "^1.28.2", + "laravel/sanctum": "^4.0.0", + "laravel/tinker": "^2.9.0", + "orchestra/testbench-core": "^9.0.0", + "pestphp/pest": "^2.34.1 || ^3.0.0", + "sebastian/environment": "^6.0.1 || ^7.0.0" + }, + "type": "library", + "extra": { + "laravel": { + "providers": [ + "NunoMaduro\\Collision\\Adapters\\Laravel\\CollisionServiceProvider" + ] + }, + "branch-alias": { + "dev-8.x": "8.x-dev" + } + }, + "autoload": { + "files": [ + "./src/Adapters/Phpunit/Autoload.php" + ], + "psr-4": { + "NunoMaduro\\Collision\\": "src/" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Nuno Maduro", + "email": "enunomaduro@gmail.com" + } + ], + "description": "Cli error handling for console/command-line PHP applications.", + "keywords": [ + "artisan", + "cli", + "command-line", + "console", + "error", + "handling", + "laravel", + "laravel-zero", + "php", + "symfony" + ], + "support": { + "issues": "https://github.com/nunomaduro/collision/issues", + "source": "https://github.com/nunomaduro/collision" + }, + "funding": [ + { + "url": "https://www.paypal.com/paypalme/enunomaduro", + "type": "custom" + }, + { + "url": "https://github.com/nunomaduro", + "type": "github" + }, + { + "url": "https://www.patreon.com/nunomaduro", + "type": "patreon" + } + ], + "time": "2024-03-06T16:20:09+00:00" + }, + { + "name": "phar-io/manifest", + "version": "2.0.4", + "source": { + "type": "git", + "url": "https://github.com/phar-io/manifest.git", + "reference": "54750ef60c58e43759730615a392c31c80e23176" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/phar-io/manifest/zipball/54750ef60c58e43759730615a392c31c80e23176", + "reference": "54750ef60c58e43759730615a392c31c80e23176", + "shasum": "" + }, + "require": { + "ext-dom": "*", + "ext-libxml": "*", + "ext-phar": "*", + "ext-xmlwriter": "*", + "phar-io/version": "^3.0.1", + "php": "^7.2 || ^8.0" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "2.0.x-dev" + } + }, + "autoload": { + "classmap": [ + "src/" + ] + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "BSD-3-Clause" + ], + "authors": [ + { + "name": "Arne Blankerts", + "email": "arne@blankerts.de", + "role": "Developer" + }, + { + "name": "Sebastian Heuer", + "email": "sebastian@phpeople.de", + "role": "Developer" + }, + { + "name": "Sebastian Bergmann", + "email": "sebastian@phpunit.de", + "role": "Developer" + } + ], + "description": "Component for reading phar.io manifest information from a PHP Archive (PHAR)", + "support": { + "issues": "https://github.com/phar-io/manifest/issues", + "source": "https://github.com/phar-io/manifest/tree/2.0.4" + }, + "funding": [ + { + "url": "https://github.com/theseer", + "type": "github" + } + ], + "time": "2024-03-03T12:33:53+00:00" + }, + { + "name": "phar-io/version", + "version": "3.2.1", + "source": { + "type": "git", + "url": "https://github.com/phar-io/version.git", + "reference": "4f7fd7836c6f332bb2933569e566a0d6c4cbed74" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/phar-io/version/zipball/4f7fd7836c6f332bb2933569e566a0d6c4cbed74", + "reference": "4f7fd7836c6f332bb2933569e566a0d6c4cbed74", + "shasum": "" + }, + "require": { + "php": "^7.2 || ^8.0" + }, + "type": "library", + "autoload": { + "classmap": [ + "src/" + ] + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "BSD-3-Clause" + ], + "authors": [ + { + "name": "Arne Blankerts", + "email": "arne@blankerts.de", + "role": "Developer" + }, + { + "name": "Sebastian Heuer", + "email": "sebastian@phpeople.de", + "role": "Developer" + }, + { + "name": "Sebastian Bergmann", + "email": "sebastian@phpunit.de", + "role": "Developer" + } + ], + "description": "Library for handling version information and constraints", + "support": { + "issues": "https://github.com/phar-io/version/issues", + "source": "https://github.com/phar-io/version/tree/3.2.1" + }, + "time": "2022-02-21T01:04:05+00:00" + }, + { + "name": "phpunit/php-code-coverage", + "version": "11.0.3", + "source": { + "type": "git", + "url": "https://github.com/sebastianbergmann/php-code-coverage.git", + "reference": "7e35a2cbcabac0e6865fd373742ea432a3c34f92" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/sebastianbergmann/php-code-coverage/zipball/7e35a2cbcabac0e6865fd373742ea432a3c34f92", + "reference": "7e35a2cbcabac0e6865fd373742ea432a3c34f92", + "shasum": "" + }, + "require": { + "ext-dom": "*", + "ext-libxml": "*", + "ext-xmlwriter": "*", + "nikic/php-parser": "^5.0", + "php": ">=8.2", + "phpunit/php-file-iterator": "^5.0", + "phpunit/php-text-template": "^4.0", + "sebastian/code-unit-reverse-lookup": "^4.0", + "sebastian/complexity": "^4.0", + "sebastian/environment": "^7.0", + "sebastian/lines-of-code": "^3.0", + "sebastian/version": "^5.0", + "theseer/tokenizer": "^1.2.0" + }, + "require-dev": { + "phpunit/phpunit": "^11.0" + }, + "suggest": { + "ext-pcov": "PHP extension that provides line coverage", + "ext-xdebug": "PHP extension that provides line coverage as well as branch and path coverage" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-main": "11.0-dev" + } + }, + "autoload": { + "classmap": [ + "src/" + ] + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "BSD-3-Clause" + ], + "authors": [ + { + "name": "Sebastian Bergmann", + "email": "sebastian@phpunit.de", + "role": "lead" + } + ], + "description": "Library that provides collection, processing, and rendering functionality for PHP code coverage information.", + "homepage": "https://github.com/sebastianbergmann/php-code-coverage", + "keywords": [ + "coverage", + "testing", + "xunit" + ], + "support": { + "issues": "https://github.com/sebastianbergmann/php-code-coverage/issues", + "security": "https://github.com/sebastianbergmann/php-code-coverage/security/policy", + "source": "https://github.com/sebastianbergmann/php-code-coverage/tree/11.0.3" + }, + "funding": [ + { + "url": "https://github.com/sebastianbergmann", + "type": "github" + } + ], + "time": "2024-03-12T15:35:40+00:00" + }, + { + "name": "phpunit/php-file-iterator", + "version": "5.0.0", + "source": { + "type": "git", + "url": "https://github.com/sebastianbergmann/php-file-iterator.git", + "reference": "99e95c94ad9500daca992354fa09d7b99abe2210" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/sebastianbergmann/php-file-iterator/zipball/99e95c94ad9500daca992354fa09d7b99abe2210", + "reference": "99e95c94ad9500daca992354fa09d7b99abe2210", + "shasum": "" + }, + "require": { + "php": ">=8.2" + }, + "require-dev": { + "phpunit/phpunit": "^11.0" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-main": "5.0-dev" + } + }, + "autoload": { + "classmap": [ + "src/" + ] + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "BSD-3-Clause" + ], + "authors": [ + { + "name": "Sebastian Bergmann", + "email": "sebastian@phpunit.de", + "role": "lead" + } + ], + "description": "FilterIterator implementation that filters files based on a list of suffixes.", + "homepage": "https://github.com/sebastianbergmann/php-file-iterator/", + "keywords": [ + "filesystem", + "iterator" + ], + "support": { + "issues": "https://github.com/sebastianbergmann/php-file-iterator/issues", + "security": "https://github.com/sebastianbergmann/php-file-iterator/security/policy", + "source": "https://github.com/sebastianbergmann/php-file-iterator/tree/5.0.0" + }, + "funding": [ + { + "url": "https://github.com/sebastianbergmann", + "type": "github" + } + ], + "time": "2024-02-02T06:05:04+00:00" + }, + { + "name": "phpunit/php-invoker", + "version": "5.0.0", + "source": { + "type": "git", + "url": "https://github.com/sebastianbergmann/php-invoker.git", + "reference": "5d8d9355a16d8cc5a1305b0a85342cfa420612be" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/sebastianbergmann/php-invoker/zipball/5d8d9355a16d8cc5a1305b0a85342cfa420612be", + "reference": "5d8d9355a16d8cc5a1305b0a85342cfa420612be", + "shasum": "" + }, + "require": { + "php": ">=8.2" + }, + "require-dev": { + "ext-pcntl": "*", + "phpunit/phpunit": "^11.0" + }, + "suggest": { + "ext-pcntl": "*" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-main": "5.0-dev" + } + }, + "autoload": { + "classmap": [ + "src/" + ] + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "BSD-3-Clause" + ], + "authors": [ + { + "name": "Sebastian Bergmann", + "email": "sebastian@phpunit.de", + "role": "lead" + } + ], + "description": "Invoke callables with a timeout", + "homepage": "https://github.com/sebastianbergmann/php-invoker/", + "keywords": [ + "process" + ], + "support": { + "issues": "https://github.com/sebastianbergmann/php-invoker/issues", + "security": "https://github.com/sebastianbergmann/php-invoker/security/policy", + "source": "https://github.com/sebastianbergmann/php-invoker/tree/5.0.0" + }, + "funding": [ + { + "url": "https://github.com/sebastianbergmann", + "type": "github" + } + ], + "time": "2024-02-02T06:05:50+00:00" + }, + { + "name": "phpunit/php-text-template", + "version": "4.0.0", + "source": { + "type": "git", + "url": "https://github.com/sebastianbergmann/php-text-template.git", + "reference": "d38f6cbff1cdb6f40b03c9811421561668cc133e" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/sebastianbergmann/php-text-template/zipball/d38f6cbff1cdb6f40b03c9811421561668cc133e", + "reference": "d38f6cbff1cdb6f40b03c9811421561668cc133e", + "shasum": "" + }, + "require": { + "php": ">=8.2" + }, + "require-dev": { + "phpunit/phpunit": "^11.0" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-main": "4.0-dev" + } + }, + "autoload": { + "classmap": [ + "src/" + ] + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "BSD-3-Clause" + ], + "authors": [ + { + "name": "Sebastian Bergmann", + "email": "sebastian@phpunit.de", + "role": "lead" + } + ], + "description": "Simple template engine.", + "homepage": "https://github.com/sebastianbergmann/php-text-template/", + "keywords": [ + "template" + ], + "support": { + "issues": "https://github.com/sebastianbergmann/php-text-template/issues", + "security": "https://github.com/sebastianbergmann/php-text-template/security/policy", + "source": "https://github.com/sebastianbergmann/php-text-template/tree/4.0.0" + }, + "funding": [ + { + "url": "https://github.com/sebastianbergmann", + "type": "github" + } + ], + "time": "2024-02-02T06:06:56+00:00" + }, + { + "name": "phpunit/php-timer", + "version": "7.0.0", + "source": { + "type": "git", + "url": "https://github.com/sebastianbergmann/php-timer.git", + "reference": "8a59d9e25720482ee7fcdf296595e08795b84dc5" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/sebastianbergmann/php-timer/zipball/8a59d9e25720482ee7fcdf296595e08795b84dc5", + "reference": "8a59d9e25720482ee7fcdf296595e08795b84dc5", + "shasum": "" + }, + "require": { + "php": ">=8.2" + }, + "require-dev": { + "phpunit/phpunit": "^11.0" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-main": "7.0-dev" + } + }, + "autoload": { + "classmap": [ + "src/" + ] + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "BSD-3-Clause" + ], + "authors": [ + { + "name": "Sebastian Bergmann", + "email": "sebastian@phpunit.de", + "role": "lead" + } + ], + "description": "Utility class for timing", + "homepage": "https://github.com/sebastianbergmann/php-timer/", + "keywords": [ + "timer" + ], + "support": { + "issues": "https://github.com/sebastianbergmann/php-timer/issues", + "security": "https://github.com/sebastianbergmann/php-timer/security/policy", + "source": "https://github.com/sebastianbergmann/php-timer/tree/7.0.0" + }, + "funding": [ + { + "url": "https://github.com/sebastianbergmann", + "type": "github" + } + ], + "time": "2024-02-02T06:08:01+00:00" + }, + { + "name": "phpunit/phpunit", + "version": "11.1.3", + "source": { + "type": "git", + "url": "https://github.com/sebastianbergmann/phpunit.git", + "reference": "d475be032238173ca3b0a516f5cc291d174708ae" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/sebastianbergmann/phpunit/zipball/d475be032238173ca3b0a516f5cc291d174708ae", + "reference": "d475be032238173ca3b0a516f5cc291d174708ae", + "shasum": "" + }, + "require": { + "ext-dom": "*", + "ext-json": "*", + "ext-libxml": "*", + "ext-mbstring": "*", + "ext-xml": "*", + "ext-xmlwriter": "*", + "myclabs/deep-copy": "^1.10.1", + "phar-io/manifest": "^2.0.3", + "phar-io/version": "^3.0.2", + "php": ">=8.2", + "phpunit/php-code-coverage": "^11.0", + "phpunit/php-file-iterator": "^5.0", + "phpunit/php-invoker": "^5.0", + "phpunit/php-text-template": "^4.0", + "phpunit/php-timer": "^7.0", + "sebastian/cli-parser": "^3.0", + "sebastian/code-unit": "^3.0", + "sebastian/comparator": "^6.0", + "sebastian/diff": "^6.0", + "sebastian/environment": "^7.0", + "sebastian/exporter": "^6.0", + "sebastian/global-state": "^7.0", + "sebastian/object-enumerator": "^6.0", + "sebastian/type": "^5.0", + "sebastian/version": "^5.0" + }, + "suggest": { + "ext-soap": "To be able to generate mocks based on WSDL files" + }, + "bin": [ + "phpunit" + ], + "type": "library", + "extra": { + "branch-alias": { + "dev-main": "11.1-dev" + } + }, + "autoload": { + "files": [ + "src/Framework/Assert/Functions.php" + ], + "classmap": [ + "src/" + ] + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "BSD-3-Clause" + ], + "authors": [ + { + "name": "Sebastian Bergmann", + "email": "sebastian@phpunit.de", + "role": "lead" + } + ], + "description": "The PHP Unit Testing framework.", + "homepage": "https://phpunit.de/", + "keywords": [ + "phpunit", + "testing", + "xunit" + ], + "support": { + "issues": "https://github.com/sebastianbergmann/phpunit/issues", + "security": "https://github.com/sebastianbergmann/phpunit/security/policy", + "source": "https://github.com/sebastianbergmann/phpunit/tree/11.1.3" + }, + "funding": [ + { + "url": "https://phpunit.de/sponsors.html", + "type": "custom" + }, + { + "url": "https://github.com/sebastianbergmann", + "type": "github" + }, + { + "url": "https://tidelift.com/funding/github/packagist/phpunit/phpunit", + "type": "tidelift" + } + ], + "time": "2024-04-24T06:34:25+00:00" + }, + { + "name": "sebastian/cli-parser", + "version": "3.0.1", + "source": { + "type": "git", + "url": "https://github.com/sebastianbergmann/cli-parser.git", + "reference": "00a74d5568694711f0222e54fb281e1d15fdf04a" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/sebastianbergmann/cli-parser/zipball/00a74d5568694711f0222e54fb281e1d15fdf04a", + "reference": "00a74d5568694711f0222e54fb281e1d15fdf04a", + "shasum": "" + }, + "require": { + "php": ">=8.2" + }, + "require-dev": { + "phpunit/phpunit": "^11.0" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-main": "3.0-dev" + } + }, + "autoload": { + "classmap": [ + "src/" + ] + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "BSD-3-Clause" + ], + "authors": [ + { + "name": "Sebastian Bergmann", + "email": "sebastian@phpunit.de", + "role": "lead" + } + ], + "description": "Library for parsing CLI options", + "homepage": "https://github.com/sebastianbergmann/cli-parser", + "support": { + "issues": "https://github.com/sebastianbergmann/cli-parser/issues", + "security": "https://github.com/sebastianbergmann/cli-parser/security/policy", + "source": "https://github.com/sebastianbergmann/cli-parser/tree/3.0.1" + }, + "funding": [ + { + "url": "https://github.com/sebastianbergmann", + "type": "github" + } + ], + "time": "2024-03-02T07:26:58+00:00" + }, + { + "name": "sebastian/code-unit", + "version": "3.0.0", + "source": { + "type": "git", + "url": "https://github.com/sebastianbergmann/code-unit.git", + "reference": "6634549cb8d702282a04a774e36a7477d2bd9015" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/sebastianbergmann/code-unit/zipball/6634549cb8d702282a04a774e36a7477d2bd9015", + "reference": "6634549cb8d702282a04a774e36a7477d2bd9015", + "shasum": "" + }, + "require": { + "php": ">=8.2" + }, + "require-dev": { + "phpunit/phpunit": "^11.0" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-main": "3.0-dev" + } + }, + "autoload": { + "classmap": [ + "src/" + ] + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "BSD-3-Clause" + ], + "authors": [ + { + "name": "Sebastian Bergmann", + "email": "sebastian@phpunit.de", + "role": "lead" + } + ], + "description": "Collection of value objects that represent the PHP code units", + "homepage": "https://github.com/sebastianbergmann/code-unit", + "support": { + "issues": "https://github.com/sebastianbergmann/code-unit/issues", + "security": "https://github.com/sebastianbergmann/code-unit/security/policy", + "source": "https://github.com/sebastianbergmann/code-unit/tree/3.0.0" + }, + "funding": [ + { + "url": "https://github.com/sebastianbergmann", + "type": "github" + } + ], + "time": "2024-02-02T05:50:41+00:00" + }, + { + "name": "sebastian/code-unit-reverse-lookup", + "version": "4.0.0", + "source": { + "type": "git", + "url": "https://github.com/sebastianbergmann/code-unit-reverse-lookup.git", + "reference": "df80c875d3e459b45c6039e4d9b71d4fbccae25d" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/sebastianbergmann/code-unit-reverse-lookup/zipball/df80c875d3e459b45c6039e4d9b71d4fbccae25d", + "reference": "df80c875d3e459b45c6039e4d9b71d4fbccae25d", + "shasum": "" + }, + "require": { + "php": ">=8.2" + }, + "require-dev": { + "phpunit/phpunit": "^11.0" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-main": "4.0-dev" + } + }, + "autoload": { + "classmap": [ + "src/" + ] + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "BSD-3-Clause" + ], + "authors": [ + { + "name": "Sebastian Bergmann", + "email": "sebastian@phpunit.de" + } + ], + "description": "Looks up which function or method a line of code belongs to", + "homepage": "https://github.com/sebastianbergmann/code-unit-reverse-lookup/", + "support": { + "issues": "https://github.com/sebastianbergmann/code-unit-reverse-lookup/issues", + "security": "https://github.com/sebastianbergmann/code-unit-reverse-lookup/security/policy", + "source": "https://github.com/sebastianbergmann/code-unit-reverse-lookup/tree/4.0.0" + }, + "funding": [ + { + "url": "https://github.com/sebastianbergmann", + "type": "github" + } + ], + "time": "2024-02-02T05:52:17+00:00" + }, + { + "name": "sebastian/comparator", + "version": "6.0.0", + "source": { + "type": "git", + "url": "https://github.com/sebastianbergmann/comparator.git", + "reference": "bd0f2fa5b9257c69903537b266ccb80fcf940db8" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/sebastianbergmann/comparator/zipball/bd0f2fa5b9257c69903537b266ccb80fcf940db8", + "reference": "bd0f2fa5b9257c69903537b266ccb80fcf940db8", + "shasum": "" + }, + "require": { + "ext-dom": "*", + "ext-mbstring": "*", + "php": ">=8.2", + "sebastian/diff": "^6.0", + "sebastian/exporter": "^6.0" + }, + "require-dev": { + "phpunit/phpunit": "^11.0" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-main": "6.0-dev" + } + }, + "autoload": { + "classmap": [ + "src/" + ] + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "BSD-3-Clause" + ], + "authors": [ + { + "name": "Sebastian Bergmann", + "email": "sebastian@phpunit.de" + }, + { + "name": "Jeff Welch", + "email": "whatthejeff@gmail.com" + }, + { + "name": "Volker Dusch", + "email": "github@wallbash.com" + }, + { + "name": "Bernhard Schussek", + "email": "bschussek@2bepublished.at" + } + ], + "description": "Provides the functionality to compare PHP values for equality", + "homepage": "https://github.com/sebastianbergmann/comparator", + "keywords": [ + "comparator", + "compare", + "equality" + ], + "support": { + "issues": "https://github.com/sebastianbergmann/comparator/issues", + "security": "https://github.com/sebastianbergmann/comparator/security/policy", + "source": "https://github.com/sebastianbergmann/comparator/tree/6.0.0" + }, + "funding": [ + { + "url": "https://github.com/sebastianbergmann", + "type": "github" + } + ], + "time": "2024-02-02T05:53:45+00:00" + }, + { + "name": "sebastian/complexity", + "version": "4.0.0", + "source": { + "type": "git", + "url": "https://github.com/sebastianbergmann/complexity.git", + "reference": "88a434ad86150e11a606ac4866b09130712671f0" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/sebastianbergmann/complexity/zipball/88a434ad86150e11a606ac4866b09130712671f0", + "reference": "88a434ad86150e11a606ac4866b09130712671f0", + "shasum": "" + }, + "require": { + "nikic/php-parser": "^5.0", + "php": ">=8.2" + }, + "require-dev": { + "phpunit/phpunit": "^11.0" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-main": "4.0-dev" + } + }, + "autoload": { + "classmap": [ + "src/" + ] + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "BSD-3-Clause" + ], + "authors": [ + { + "name": "Sebastian Bergmann", + "email": "sebastian@phpunit.de", + "role": "lead" + } + ], + "description": "Library for calculating the complexity of PHP code units", + "homepage": "https://github.com/sebastianbergmann/complexity", + "support": { + "issues": "https://github.com/sebastianbergmann/complexity/issues", + "security": "https://github.com/sebastianbergmann/complexity/security/policy", + "source": "https://github.com/sebastianbergmann/complexity/tree/4.0.0" + }, + "funding": [ + { + "url": "https://github.com/sebastianbergmann", + "type": "github" + } + ], + "time": "2024-02-02T05:55:19+00:00" + }, + { + "name": "sebastian/diff", + "version": "6.0.1", + "source": { + "type": "git", + "url": "https://github.com/sebastianbergmann/diff.git", + "reference": "ab83243ecc233de5655b76f577711de9f842e712" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/sebastianbergmann/diff/zipball/ab83243ecc233de5655b76f577711de9f842e712", + "reference": "ab83243ecc233de5655b76f577711de9f842e712", + "shasum": "" + }, + "require": { + "php": ">=8.2" + }, + "require-dev": { + "phpunit/phpunit": "^11.0", + "symfony/process": "^4.2 || ^5" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-main": "6.0-dev" + } + }, + "autoload": { + "classmap": [ + "src/" + ] + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "BSD-3-Clause" + ], + "authors": [ + { + "name": "Sebastian Bergmann", + "email": "sebastian@phpunit.de" + }, + { + "name": "Kore Nordmann", + "email": "mail@kore-nordmann.de" + } + ], + "description": "Diff implementation", + "homepage": "https://github.com/sebastianbergmann/diff", + "keywords": [ + "diff", + "udiff", + "unidiff", + "unified diff" + ], + "support": { + "issues": "https://github.com/sebastianbergmann/diff/issues", + "security": "https://github.com/sebastianbergmann/diff/security/policy", + "source": "https://github.com/sebastianbergmann/diff/tree/6.0.1" + }, + "funding": [ + { + "url": "https://github.com/sebastianbergmann", + "type": "github" + } + ], + "time": "2024-03-02T07:30:33+00:00" + }, + { + "name": "sebastian/environment", + "version": "7.1.0", + "source": { + "type": "git", + "url": "https://github.com/sebastianbergmann/environment.git", + "reference": "4eb3a442574d0e9d141aab209cd4aaf25701b09a" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/sebastianbergmann/environment/zipball/4eb3a442574d0e9d141aab209cd4aaf25701b09a", + "reference": "4eb3a442574d0e9d141aab209cd4aaf25701b09a", + "shasum": "" + }, + "require": { + "php": ">=8.2" + }, + "require-dev": { + "phpunit/phpunit": "^11.0" + }, + "suggest": { + "ext-posix": "*" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-main": "7.1-dev" + } + }, + "autoload": { + "classmap": [ + "src/" + ] + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "BSD-3-Clause" + ], + "authors": [ + { + "name": "Sebastian Bergmann", + "email": "sebastian@phpunit.de" + } + ], + "description": "Provides functionality to handle HHVM/PHP environments", + "homepage": "https://github.com/sebastianbergmann/environment", + "keywords": [ + "Xdebug", + "environment", + "hhvm" + ], + "support": { + "issues": "https://github.com/sebastianbergmann/environment/issues", + "security": "https://github.com/sebastianbergmann/environment/security/policy", + "source": "https://github.com/sebastianbergmann/environment/tree/7.1.0" + }, + "funding": [ + { + "url": "https://github.com/sebastianbergmann", + "type": "github" + } + ], + "time": "2024-03-23T08:56:34+00:00" + }, + { + "name": "sebastian/exporter", + "version": "6.0.1", + "source": { + "type": "git", + "url": "https://github.com/sebastianbergmann/exporter.git", + "reference": "f291e5a317c321c0381fa9ecc796fa2d21b186da" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/sebastianbergmann/exporter/zipball/f291e5a317c321c0381fa9ecc796fa2d21b186da", + "reference": "f291e5a317c321c0381fa9ecc796fa2d21b186da", + "shasum": "" + }, + "require": { + "ext-mbstring": "*", + "php": ">=8.2", + "sebastian/recursion-context": "^6.0" + }, + "require-dev": { + "phpunit/phpunit": "^11.0" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-main": "6.0-dev" + } + }, + "autoload": { + "classmap": [ + "src/" + ] + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "BSD-3-Clause" + ], + "authors": [ + { + "name": "Sebastian Bergmann", + "email": "sebastian@phpunit.de" + }, + { + "name": "Jeff Welch", + "email": "whatthejeff@gmail.com" + }, + { + "name": "Volker Dusch", + "email": "github@wallbash.com" + }, + { + "name": "Adam Harvey", + "email": "aharvey@php.net" + }, + { + "name": "Bernhard Schussek", + "email": "bschussek@gmail.com" + } + ], + "description": "Provides the functionality to export PHP variables for visualization", + "homepage": "https://www.github.com/sebastianbergmann/exporter", + "keywords": [ + "export", + "exporter" + ], + "support": { + "issues": "https://github.com/sebastianbergmann/exporter/issues", + "security": "https://github.com/sebastianbergmann/exporter/security/policy", + "source": "https://github.com/sebastianbergmann/exporter/tree/6.0.1" + }, + "funding": [ + { + "url": "https://github.com/sebastianbergmann", + "type": "github" + } + ], + "time": "2024-03-02T07:28:20+00:00" + }, + { + "name": "sebastian/global-state", + "version": "7.0.1", + "source": { + "type": "git", + "url": "https://github.com/sebastianbergmann/global-state.git", + "reference": "c3a307e832f2e69c7ef869e31fc644fde0e7cb3e" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/sebastianbergmann/global-state/zipball/c3a307e832f2e69c7ef869e31fc644fde0e7cb3e", + "reference": "c3a307e832f2e69c7ef869e31fc644fde0e7cb3e", + "shasum": "" + }, + "require": { + "php": ">=8.2", + "sebastian/object-reflector": "^4.0", + "sebastian/recursion-context": "^6.0" + }, + "require-dev": { + "ext-dom": "*", + "phpunit/phpunit": "^11.0" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-main": "7.0-dev" + } + }, + "autoload": { + "classmap": [ + "src/" + ] + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "BSD-3-Clause" + ], + "authors": [ + { + "name": "Sebastian Bergmann", + "email": "sebastian@phpunit.de" + } + ], + "description": "Snapshotting of global state", + "homepage": "https://www.github.com/sebastianbergmann/global-state", + "keywords": [ + "global state" + ], + "support": { + "issues": "https://github.com/sebastianbergmann/global-state/issues", + "security": "https://github.com/sebastianbergmann/global-state/security/policy", + "source": "https://github.com/sebastianbergmann/global-state/tree/7.0.1" + }, + "funding": [ + { + "url": "https://github.com/sebastianbergmann", + "type": "github" + } + ], + "time": "2024-03-02T07:32:10+00:00" + }, + { + "name": "sebastian/lines-of-code", + "version": "3.0.0", + "source": { + "type": "git", + "url": "https://github.com/sebastianbergmann/lines-of-code.git", + "reference": "376c5b3f6b43c78fdc049740bca76a7c846706c0" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/sebastianbergmann/lines-of-code/zipball/376c5b3f6b43c78fdc049740bca76a7c846706c0", + "reference": "376c5b3f6b43c78fdc049740bca76a7c846706c0", + "shasum": "" + }, + "require": { + "nikic/php-parser": "^5.0", + "php": ">=8.2" + }, + "require-dev": { + "phpunit/phpunit": "^11.0" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-main": "3.0-dev" + } + }, + "autoload": { + "classmap": [ + "src/" + ] + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "BSD-3-Clause" + ], + "authors": [ + { + "name": "Sebastian Bergmann", + "email": "sebastian@phpunit.de", + "role": "lead" + } + ], + "description": "Library for counting the lines of code in PHP source code", + "homepage": "https://github.com/sebastianbergmann/lines-of-code", + "support": { + "issues": "https://github.com/sebastianbergmann/lines-of-code/issues", + "security": "https://github.com/sebastianbergmann/lines-of-code/security/policy", + "source": "https://github.com/sebastianbergmann/lines-of-code/tree/3.0.0" + }, + "funding": [ + { + "url": "https://github.com/sebastianbergmann", + "type": "github" + } + ], + "time": "2024-02-02T06:00:36+00:00" + }, + { + "name": "sebastian/object-enumerator", + "version": "6.0.0", + "source": { + "type": "git", + "url": "https://github.com/sebastianbergmann/object-enumerator.git", + "reference": "f75f6c460da0bbd9668f43a3dde0ec0ba7faa678" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/sebastianbergmann/object-enumerator/zipball/f75f6c460da0bbd9668f43a3dde0ec0ba7faa678", + "reference": "f75f6c460da0bbd9668f43a3dde0ec0ba7faa678", + "shasum": "" + }, + "require": { + "php": ">=8.2", + "sebastian/object-reflector": "^4.0", + "sebastian/recursion-context": "^6.0" + }, + "require-dev": { + "phpunit/phpunit": "^11.0" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-main": "6.0-dev" + } + }, + "autoload": { + "classmap": [ + "src/" + ] + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "BSD-3-Clause" + ], + "authors": [ + { + "name": "Sebastian Bergmann", + "email": "sebastian@phpunit.de" + } + ], + "description": "Traverses array structures and object graphs to enumerate all referenced objects", + "homepage": "https://github.com/sebastianbergmann/object-enumerator/", + "support": { + "issues": "https://github.com/sebastianbergmann/object-enumerator/issues", + "security": "https://github.com/sebastianbergmann/object-enumerator/security/policy", + "source": "https://github.com/sebastianbergmann/object-enumerator/tree/6.0.0" + }, + "funding": [ + { + "url": "https://github.com/sebastianbergmann", + "type": "github" + } + ], + "time": "2024-02-02T06:01:29+00:00" + }, + { + "name": "sebastian/object-reflector", + "version": "4.0.0", + "source": { + "type": "git", + "url": "https://github.com/sebastianbergmann/object-reflector.git", + "reference": "bb2a6255d30853425fd38f032eb64ced9f7f132d" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/sebastianbergmann/object-reflector/zipball/bb2a6255d30853425fd38f032eb64ced9f7f132d", + "reference": "bb2a6255d30853425fd38f032eb64ced9f7f132d", + "shasum": "" + }, + "require": { + "php": ">=8.2" + }, + "require-dev": { + "phpunit/phpunit": "^11.0" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-main": "4.0-dev" + } + }, + "autoload": { + "classmap": [ + "src/" + ] + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "BSD-3-Clause" + ], + "authors": [ + { + "name": "Sebastian Bergmann", + "email": "sebastian@phpunit.de" + } + ], + "description": "Allows reflection of object attributes, including inherited and non-public ones", + "homepage": "https://github.com/sebastianbergmann/object-reflector/", + "support": { + "issues": "https://github.com/sebastianbergmann/object-reflector/issues", + "security": "https://github.com/sebastianbergmann/object-reflector/security/policy", + "source": "https://github.com/sebastianbergmann/object-reflector/tree/4.0.0" + }, + "funding": [ + { + "url": "https://github.com/sebastianbergmann", + "type": "github" + } + ], + "time": "2024-02-02T06:02:18+00:00" + }, + { + "name": "sebastian/recursion-context", + "version": "6.0.0", + "source": { + "type": "git", + "url": "https://github.com/sebastianbergmann/recursion-context.git", + "reference": "b75224967b5a466925c6d54e68edd0edf8dd4ed4" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/sebastianbergmann/recursion-context/zipball/b75224967b5a466925c6d54e68edd0edf8dd4ed4", + "reference": "b75224967b5a466925c6d54e68edd0edf8dd4ed4", + "shasum": "" + }, + "require": { + "php": ">=8.2" + }, + "require-dev": { + "phpunit/phpunit": "^11.0" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-main": "6.0-dev" + } + }, + "autoload": { + "classmap": [ + "src/" + ] + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "BSD-3-Clause" + ], + "authors": [ + { + "name": "Sebastian Bergmann", + "email": "sebastian@phpunit.de" + }, + { + "name": "Jeff Welch", + "email": "whatthejeff@gmail.com" + }, + { + "name": "Adam Harvey", + "email": "aharvey@php.net" + } + ], + "description": "Provides functionality to recursively process PHP variables", + "homepage": "https://github.com/sebastianbergmann/recursion-context", + "support": { + "issues": "https://github.com/sebastianbergmann/recursion-context/issues", + "security": "https://github.com/sebastianbergmann/recursion-context/security/policy", + "source": "https://github.com/sebastianbergmann/recursion-context/tree/6.0.0" + }, + "funding": [ + { + "url": "https://github.com/sebastianbergmann", + "type": "github" + } + ], + "time": "2024-02-02T06:08:48+00:00" + }, + { + "name": "sebastian/type", + "version": "5.0.0", + "source": { + "type": "git", + "url": "https://github.com/sebastianbergmann/type.git", + "reference": "b8502785eb3523ca0dd4afe9ca62235590020f3f" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/sebastianbergmann/type/zipball/b8502785eb3523ca0dd4afe9ca62235590020f3f", + "reference": "b8502785eb3523ca0dd4afe9ca62235590020f3f", + "shasum": "" + }, + "require": { + "php": ">=8.2" + }, + "require-dev": { + "phpunit/phpunit": "^11.0" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-main": "5.0-dev" + } + }, + "autoload": { + "classmap": [ + "src/" + ] + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "BSD-3-Clause" + ], + "authors": [ + { + "name": "Sebastian Bergmann", + "email": "sebastian@phpunit.de", + "role": "lead" + } + ], + "description": "Collection of value objects that represent the types of the PHP type system", + "homepage": "https://github.com/sebastianbergmann/type", + "support": { + "issues": "https://github.com/sebastianbergmann/type/issues", + "security": "https://github.com/sebastianbergmann/type/security/policy", + "source": "https://github.com/sebastianbergmann/type/tree/5.0.0" + }, + "funding": [ + { + "url": "https://github.com/sebastianbergmann", + "type": "github" + } + ], + "time": "2024-02-02T06:09:34+00:00" + }, + { + "name": "sebastian/version", + "version": "5.0.0", + "source": { + "type": "git", + "url": "https://github.com/sebastianbergmann/version.git", + "reference": "13999475d2cb1ab33cb73403ba356a814fdbb001" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/sebastianbergmann/version/zipball/13999475d2cb1ab33cb73403ba356a814fdbb001", + "reference": "13999475d2cb1ab33cb73403ba356a814fdbb001", + "shasum": "" + }, + "require": { + "php": ">=8.2" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-main": "5.0-dev" + } + }, + "autoload": { + "classmap": [ + "src/" + ] + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "BSD-3-Clause" + ], + "authors": [ + { + "name": "Sebastian Bergmann", + "email": "sebastian@phpunit.de", + "role": "lead" + } + ], + "description": "Library that helps with managing the version number of Git-hosted PHP projects", + "homepage": "https://github.com/sebastianbergmann/version", + "support": { + "issues": "https://github.com/sebastianbergmann/version/issues", + "security": "https://github.com/sebastianbergmann/version/security/policy", + "source": "https://github.com/sebastianbergmann/version/tree/5.0.0" + }, + "funding": [ + { + "url": "https://github.com/sebastianbergmann", + "type": "github" + } + ], + "time": "2024-02-02T06:10:47+00:00" + }, + { + "name": "spatie/backtrace", + "version": "1.6.1", + "source": { + "type": "git", + "url": "https://github.com/spatie/backtrace.git", + "reference": "8373b9d51638292e3bfd736a9c19a654111b4a23" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/spatie/backtrace/zipball/8373b9d51638292e3bfd736a9c19a654111b4a23", + "reference": "8373b9d51638292e3bfd736a9c19a654111b4a23", + "shasum": "" + }, + "require": { + "php": "^7.3|^8.0" + }, + "require-dev": { + "ext-json": "*", + "laravel/serializable-closure": "^1.3", + "phpunit/phpunit": "^9.3", + "spatie/phpunit-snapshot-assertions": "^4.2", + "symfony/var-dumper": "^5.1" + }, + "type": "library", + "autoload": { + "psr-4": { + "Spatie\\Backtrace\\": "src" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Freek Van de Herten", + "email": "freek@spatie.be", + "homepage": "https://spatie.be", + "role": "Developer" + } + ], + "description": "A better backtrace", + "homepage": "https://github.com/spatie/backtrace", + "keywords": [ + "Backtrace", + "spatie" + ], + "support": { + "source": "https://github.com/spatie/backtrace/tree/1.6.1" + }, + "funding": [ + { + "url": "https://github.com/sponsors/spatie", + "type": "github" + }, + { + "url": "https://spatie.be/open-source/support-us", + "type": "other" + } + ], + "time": "2024-04-24T13:22:11+00:00" + }, + { + "name": "spatie/flare-client-php", + "version": "1.5.1", + "source": { + "type": "git", + "url": "https://github.com/spatie/flare-client-php.git", + "reference": "e27977d534eefe04c154c6fd8460217024054c05" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/spatie/flare-client-php/zipball/e27977d534eefe04c154c6fd8460217024054c05", + "reference": "e27977d534eefe04c154c6fd8460217024054c05", + "shasum": "" + }, + "require": { + "illuminate/pipeline": "^8.0|^9.0|^10.0|^11.0", + "php": "^8.0", + "spatie/backtrace": "^1.5.2", + "symfony/http-foundation": "^5.2|^6.0|^7.0", + "symfony/mime": "^5.2|^6.0|^7.0", + "symfony/process": "^5.2|^6.0|^7.0", + "symfony/var-dumper": "^5.2|^6.0|^7.0" + }, + "require-dev": { + "dms/phpunit-arraysubset-asserts": "^0.5.0", + "pestphp/pest": "^1.20|^2.0", + "phpstan/extension-installer": "^1.1", + "phpstan/phpstan-deprecation-rules": "^1.0", + "phpstan/phpstan-phpunit": "^1.0", + "spatie/phpunit-snapshot-assertions": "^4.0|^5.0" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-main": "1.3.x-dev" + } + }, + "autoload": { + "files": [ + "src/helpers.php" + ], + "psr-4": { + "Spatie\\FlareClient\\": "src" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "description": "Send PHP errors to Flare", + "homepage": "https://github.com/spatie/flare-client-php", + "keywords": [ + "exception", + "flare", + "reporting", + "spatie" + ], + "support": { + "issues": "https://github.com/spatie/flare-client-php/issues", + "source": "https://github.com/spatie/flare-client-php/tree/1.5.1" + }, + "funding": [ + { + "url": "https://github.com/spatie", + "type": "github" + } + ], + "time": "2024-05-03T15:43:14+00:00" + }, + { + "name": "spatie/ignition", + "version": "1.14.1", + "source": { + "type": "git", + "url": "https://github.com/spatie/ignition.git", + "reference": "c23cc018c5f423d2f413b99f84655fceb6549811" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/spatie/ignition/zipball/c23cc018c5f423d2f413b99f84655fceb6549811", + "reference": "c23cc018c5f423d2f413b99f84655fceb6549811", + "shasum": "" + }, + "require": { + "ext-json": "*", + "ext-mbstring": "*", + "php": "^8.0", + "spatie/backtrace": "^1.5.3", + "spatie/flare-client-php": "^1.4.0", + "symfony/console": "^5.4|^6.0|^7.0", + "symfony/var-dumper": "^5.4|^6.0|^7.0" + }, + "require-dev": { + "illuminate/cache": "^9.52|^10.0|^11.0", + "mockery/mockery": "^1.4", + "pestphp/pest": "^1.20|^2.0", + "phpstan/extension-installer": "^1.1", + "phpstan/phpstan-deprecation-rules": "^1.0", + "phpstan/phpstan-phpunit": "^1.0", + "psr/simple-cache-implementation": "*", + "symfony/cache": "^5.4|^6.0|^7.0", + "symfony/process": "^5.4|^6.0|^7.0", + "vlucas/phpdotenv": "^5.5" + }, + "suggest": { + "openai-php/client": "Require get solutions from OpenAI", + "simple-cache-implementation": "To cache solutions from OpenAI" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-main": "1.5.x-dev" + } + }, + "autoload": { + "psr-4": { + "Spatie\\Ignition\\": "src" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Spatie", + "email": "info@spatie.be", + "role": "Developer" + } + ], + "description": "A beautiful error page for PHP applications.", + "homepage": "https://flareapp.io/ignition", + "keywords": [ + "error", + "flare", + "laravel", + "page" + ], + "support": { + "docs": "https://flareapp.io/docs/ignition-for-laravel/introduction", + "forum": "https://twitter.com/flareappio", + "issues": "https://github.com/spatie/ignition/issues", + "source": "https://github.com/spatie/ignition" + }, + "funding": [ + { + "url": "https://github.com/spatie", + "type": "github" + } + ], + "time": "2024-05-03T15:56:16+00:00" + }, + { + "name": "spatie/laravel-ignition", + "version": "2.7.0", + "source": { + "type": "git", + "url": "https://github.com/spatie/laravel-ignition.git", + "reference": "f52124d50122611e8a40f628cef5c19ff6cc5b57" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/spatie/laravel-ignition/zipball/f52124d50122611e8a40f628cef5c19ff6cc5b57", + "reference": "f52124d50122611e8a40f628cef5c19ff6cc5b57", + "shasum": "" + }, + "require": { + "ext-curl": "*", + "ext-json": "*", + "ext-mbstring": "*", + "illuminate/support": "^10.0|^11.0", + "php": "^8.1", + "spatie/flare-client-php": "^1.5", + "spatie/ignition": "^1.14", + "symfony/console": "^6.2.3|^7.0", + "symfony/var-dumper": "^6.2.3|^7.0" + }, + "require-dev": { + "livewire/livewire": "^2.11|^3.3.5", + "mockery/mockery": "^1.5.1", + "openai-php/client": "^0.8.1", + "orchestra/testbench": "8.22.3|^9.0", + "pestphp/pest": "^2.34", + "phpstan/extension-installer": "^1.3.1", + "phpstan/phpstan-deprecation-rules": "^1.1.1", + "phpstan/phpstan-phpunit": "^1.3.16", + "vlucas/phpdotenv": "^5.5" + }, + "suggest": { + "openai-php/client": "Require get solutions from OpenAI", + "psr/simple-cache-implementation": "Needed to cache solutions from OpenAI" + }, + "type": "library", + "extra": { + "laravel": { + "providers": [ + "Spatie\\LaravelIgnition\\IgnitionServiceProvider" + ], + "aliases": { + "Flare": "Spatie\\LaravelIgnition\\Facades\\Flare" + } + } + }, + "autoload": { + "files": [ + "src/helpers.php" + ], + "psr-4": { + "Spatie\\LaravelIgnition\\": "src" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Spatie", + "email": "info@spatie.be", + "role": "Developer" + } + ], + "description": "A beautiful error page for Laravel applications.", + "homepage": "https://flareapp.io/ignition", + "keywords": [ + "error", + "flare", + "laravel", + "page" + ], + "support": { + "docs": "https://flareapp.io/docs/ignition-for-laravel/introduction", + "forum": "https://twitter.com/flareappio", + "issues": "https://github.com/spatie/laravel-ignition/issues", + "source": "https://github.com/spatie/laravel-ignition" + }, + "funding": [ + { + "url": "https://github.com/spatie", + "type": "github" + } + ], + "time": "2024-05-02T13:42:49+00:00" + }, + { + "name": "symfony/yaml", + "version": "v7.0.7", + "source": { + "type": "git", + "url": "https://github.com/symfony/yaml.git", + "reference": "0d3916ae69ea28b59d94b60c4f2b50f4e25adb5c" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/symfony/yaml/zipball/0d3916ae69ea28b59d94b60c4f2b50f4e25adb5c", + "reference": "0d3916ae69ea28b59d94b60c4f2b50f4e25adb5c", + "shasum": "" + }, + "require": { + "php": ">=8.2", + "symfony/polyfill-ctype": "^1.8" + }, + "conflict": { + "symfony/console": "<6.4" + }, + "require-dev": { + "symfony/console": "^6.4|^7.0" + }, + "bin": [ + "Resources/bin/yaml-lint" + ], + "type": "library", + "autoload": { + "psr-4": { + "Symfony\\Component\\Yaml\\": "" + }, + "exclude-from-classmap": [ + "/Tests/" + ] + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Fabien Potencier", + "email": "fabien@symfony.com" + }, + { + "name": "Symfony Community", + "homepage": "https://symfony.com/contributors" + } + ], + "description": "Loads and dumps YAML files", + "homepage": "https://symfony.com", + "support": { + "source": "https://github.com/symfony/yaml/tree/v7.0.7" + }, + "funding": [ + { + "url": "https://symfony.com/sponsor", + "type": "custom" + }, + { + "url": "https://github.com/fabpot", + "type": "github" + }, + { + "url": "https://tidelift.com/funding/github/packagist/symfony/symfony", + "type": "tidelift" + } + ], + "time": "2024-04-28T11:44:19+00:00" + }, + { + "name": "theseer/tokenizer", + "version": "1.2.3", + "source": { + "type": "git", + "url": "https://github.com/theseer/tokenizer.git", + "reference": "737eda637ed5e28c3413cb1ebe8bb52cbf1ca7a2" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/theseer/tokenizer/zipball/737eda637ed5e28c3413cb1ebe8bb52cbf1ca7a2", + "reference": "737eda637ed5e28c3413cb1ebe8bb52cbf1ca7a2", + "shasum": "" + }, + "require": { + "ext-dom": "*", + "ext-tokenizer": "*", + "ext-xmlwriter": "*", + "php": "^7.2 || ^8.0" + }, + "type": "library", + "autoload": { + "classmap": [ + "src/" + ] + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "BSD-3-Clause" + ], + "authors": [ + { + "name": "Arne Blankerts", + "email": "arne@blankerts.de", + "role": "Developer" + } + ], + "description": "A small library for converting tokenized PHP source code into XML and potentially other formats", + "support": { + "issues": "https://github.com/theseer/tokenizer/issues", + "source": "https://github.com/theseer/tokenizer/tree/1.2.3" + }, + "funding": [ + { + "url": "https://github.com/theseer", + "type": "github" + } + ], + "time": "2024-03-03T12:36:25+00:00" + } + ], + "aliases": [], + "minimum-stability": "stable", + "stability-flags": [], + "prefer-stable": true, + "prefer-lowest": false, + "platform": { + "php": "^8.2" + }, + "platform-dev": [], + "plugin-api-version": "2.6.0" +} diff --git a/config/app.php b/config/app.php new file mode 100644 index 0000000..f467267 --- /dev/null +++ b/config/app.php @@ -0,0 +1,126 @@ + 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/cache.php b/config/cache.php new file mode 100644 index 0000000..6b57b18 --- /dev/null +++ b/config/cache.php @@ -0,0 +1,107 @@ + 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', + 'table' => env('DB_CACHE_TABLE', 'cache'), + 'connection' => env('DB_CACHE_CONNECTION'), + 'lock_connection' => env('DB_CACHE_LOCK_CONNECTION'), + ], + + '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..f8e8dcb --- /dev/null +++ b/config/database.php @@ -0,0 +1,170 @@ + 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), + ], + + '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..44fe9c8 --- /dev/null +++ b/config/filesystems.php @@ -0,0 +1,76 @@ + 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'), + '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..d526b64 --- /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..07342fc --- /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'), + ], + + '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/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/services.php b/config/services.php new file mode 100644 index 0000000..27a3617 --- /dev/null +++ b/config/services.php @@ -0,0 +1,38 @@ + [ + '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'), + ], + ], + +]; 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/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/UserFactory.php b/database/factories/UserFactory.php new file mode 100644 index 0000000..584104c --- /dev/null +++ b/database/factories/UserFactory.php @@ -0,0 +1,44 @@ + + */ +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 [ + '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, + ]); + } +} 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..5b0f45c --- /dev/null +++ b/database/migrations/0001_01_01_000000_create_users_table.php @@ -0,0 +1,52 @@ +id(); + $table->string('name'); + $table->string('email')->unique(); + $table->string('phone')->nullable(); + $table->string('photo')->nullable(); + $table->enum('usertype', ['bk/guru', 'admin'])->nullable(); + $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'); + } +}; 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/2024_05_14_141802_siswa.php b/database/migrations/2024_05_14_141802_siswa.php new file mode 100644 index 0000000..8e43b13 --- /dev/null +++ b/database/migrations/2024_05_14_141802_siswa.php @@ -0,0 +1,31 @@ +id(); + $table->string('nama'); + $table->string('nis')->unique(); + $table->string('kelas'); + $table->unsignedBigInteger('wali_kelas_id'); + $table->timestamps(); + }); + } + + /** + * Reverse the migrations. + */ + public function down(): void + { + Schema::dropIfExists('siswa'); + } +}; diff --git a/database/migrations/2024_05_15_145837_tindakan.php b/database/migrations/2024_05_15_145837_tindakan.php new file mode 100644 index 0000000..7703ad6 --- /dev/null +++ b/database/migrations/2024_05_15_145837_tindakan.php @@ -0,0 +1,30 @@ +id(); + $table->string('kode_tindakan'); + $table->string('rentang_point'); + $table->string('tindakan_sekolah'); + $table->timestamps(); + }); + } + + /** + * Reverse the migrations. + */ + public function down(): void + { + Schema::dropIfExists('tindakan'); + } +}; diff --git a/database/migrations/2024_05_15_151340_jenis_pelanggaran.php b/database/migrations/2024_05_15_151340_jenis_pelanggaran.php new file mode 100644 index 0000000..90c672c --- /dev/null +++ b/database/migrations/2024_05_15_151340_jenis_pelanggaran.php @@ -0,0 +1,39 @@ +id(); + $table->string('kode')->unique(); + $table->string('kriteria'); + $table->string('bobot'); + $table->timestamps(); + }); + + Schema::create('jenis_pelanggaran', function (Blueprint $table) { + $table->id(); + $table->string('kode_kriteria'); + $table->string('jenis_pelanggaran'); + $table->string('point'); + $table->timestamps(); + }); + } + + /** + * Reverse the migrations. + */ + public function down(): void + { + Schema::dropIfExists('kriteria_pelanggaran'); + Schema::dropIfExists('jenis_pelanggaran'); + } +}; diff --git a/database/migrations/2024_05_15_160058_pelanggaran.php b/database/migrations/2024_05_15_160058_pelanggaran.php new file mode 100644 index 0000000..d5a07d9 --- /dev/null +++ b/database/migrations/2024_05_15_160058_pelanggaran.php @@ -0,0 +1,31 @@ +id(); + $table->string('id_siswa'); + $table->string('id_tindakan'); + $table->string('id_sanksi'); + $table->enum('tingkat', ['Pelanggaran Ringan', 'Pelanggaran Sedang', 'Tindak Pidana Ringan (TIPIRING)', 'Tindak Pidana Berat (TIPIRAT)']); + $table->timestamps(); + }); + } + + /** + * Reverse the migrations. + */ + public function down(): void + { + Schema::dropIfExists('pelanggaran'); + } +}; diff --git a/database/migrations/2024_05_15_171111_sanksi.php b/database/migrations/2024_05_15_171111_sanksi.php new file mode 100644 index 0000000..ece6578 --- /dev/null +++ b/database/migrations/2024_05_15_171111_sanksi.php @@ -0,0 +1,30 @@ +id(); + $table->string('kode_sanksi'); + $table->string('rentang_point'); + $table->string('jenis_sanksi'); + $table->timestamps(); + }); + } + + /** + * Reverse the migrations. + */ + public function down(): void + { + Schema::dropIfExists('sanksi'); + } +}; diff --git a/database/migrations/2024_05_17_123537_list_pelanggaran.php b/database/migrations/2024_05_17_123537_list_pelanggaran.php new file mode 100644 index 0000000..921e902 --- /dev/null +++ b/database/migrations/2024_05_17_123537_list_pelanggaran.php @@ -0,0 +1,30 @@ +id(); + $table->string('pelanggaran_id'); + $table->string('id_kriteria'); + $table->string('id_jenis'); + $table->timestamps(); + }); + } + + /** + * Reverse the migrations. + */ + public function down(): void + { + Schema::dropIfExists('list_pelanggaran'); + } +}; diff --git a/package-lock.json b/package-lock.json new file mode 100644 index 0000000..0b6a0ee --- /dev/null +++ b/package-lock.json @@ -0,0 +1,2425 @@ +{ + "name": "smart_spks-main", + "lockfileVersion": 3, + "requires": true, + "packages": { + "": { + "dependencies": { + "alpinejs": "^3.13.10", + "chart.js": "^4.4.3" + }, + "devDependencies": { + "autoprefixer": "^10.4.19", + "axios": "^1.6.4", + "laravel-vite-plugin": "^1.0", + "postcss": "^8.4.38", + "tailwindcss": "^3.4.3", + "vite": "^5.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, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/@esbuild/aix-ppc64": { + "version": "0.20.2", + "resolved": "https://registry.npmjs.org/@esbuild/aix-ppc64/-/aix-ppc64-0.20.2.tgz", + "integrity": "sha512-D+EBOJHXdNZcLJRBkhENNG8Wji2kgc9AZ9KiPr1JuZjsNtyHzrsfLRrY0tk2H2aoFu6RANO1y1iPPUCDYWkb5g==", + "cpu": [ + "ppc64" + ], + "dev": true, + "optional": true, + "os": [ + "aix" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/@esbuild/android-arm": { + "version": "0.20.2", + "resolved": "https://registry.npmjs.org/@esbuild/android-arm/-/android-arm-0.20.2.tgz", + "integrity": "sha512-t98Ra6pw2VaDhqNWO2Oph2LXbz/EJcnLmKLGBJwEwXX/JAN83Fym1rU8l0JUWK6HkIbWONCSSatf4sf2NBRx/w==", + "cpu": [ + "arm" + ], + "dev": true, + "optional": true, + "os": [ + "android" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/@esbuild/android-arm64": { + "version": "0.20.2", + "resolved": "https://registry.npmjs.org/@esbuild/android-arm64/-/android-arm64-0.20.2.tgz", + "integrity": "sha512-mRzjLacRtl/tWU0SvD8lUEwb61yP9cqQo6noDZP/O8VkwafSYwZ4yWy24kan8jE/IMERpYncRt2dw438LP3Xmg==", + "cpu": [ + "arm64" + ], + "dev": true, + "optional": true, + "os": [ + "android" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/@esbuild/android-x64": { + "version": "0.20.2", + "resolved": "https://registry.npmjs.org/@esbuild/android-x64/-/android-x64-0.20.2.tgz", + "integrity": "sha512-btzExgV+/lMGDDa194CcUQm53ncxzeBrWJcncOBxuC6ndBkKxnHdFJn86mCIgTELsooUmwUm9FkhSp5HYu00Rg==", + "cpu": [ + "x64" + ], + "dev": true, + "optional": true, + "os": [ + "android" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/@esbuild/darwin-arm64": { + "version": "0.20.2", + "resolved": "https://registry.npmjs.org/@esbuild/darwin-arm64/-/darwin-arm64-0.20.2.tgz", + "integrity": "sha512-4J6IRT+10J3aJH3l1yzEg9y3wkTDgDk7TSDFX+wKFiWjqWp/iCfLIYzGyasx9l0SAFPT1HwSCR+0w/h1ES/MjA==", + "cpu": [ + "arm64" + ], + "dev": true, + "optional": true, + "os": [ + "darwin" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/@esbuild/darwin-x64": { + "version": "0.20.2", + "resolved": "https://registry.npmjs.org/@esbuild/darwin-x64/-/darwin-x64-0.20.2.tgz", + "integrity": "sha512-tBcXp9KNphnNH0dfhv8KYkZhjc+H3XBkF5DKtswJblV7KlT9EI2+jeA8DgBjp908WEuYll6pF+UStUCfEpdysA==", + "cpu": [ + "x64" + ], + "dev": true, + "optional": true, + "os": [ + "darwin" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/@esbuild/freebsd-arm64": { + "version": "0.20.2", + "resolved": "https://registry.npmjs.org/@esbuild/freebsd-arm64/-/freebsd-arm64-0.20.2.tgz", + "integrity": "sha512-d3qI41G4SuLiCGCFGUrKsSeTXyWG6yem1KcGZVS+3FYlYhtNoNgYrWcvkOoaqMhwXSMrZRl69ArHsGJ9mYdbbw==", + "cpu": [ + "arm64" + ], + "dev": true, + "optional": true, + "os": [ + "freebsd" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/@esbuild/freebsd-x64": { + "version": "0.20.2", + "resolved": "https://registry.npmjs.org/@esbuild/freebsd-x64/-/freebsd-x64-0.20.2.tgz", + "integrity": "sha512-d+DipyvHRuqEeM5zDivKV1KuXn9WeRX6vqSqIDgwIfPQtwMP4jaDsQsDncjTDDsExT4lR/91OLjRo8bmC1e+Cw==", + "cpu": [ + "x64" + ], + "dev": true, + "optional": true, + "os": [ + "freebsd" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/@esbuild/linux-arm": { + "version": "0.20.2", + "resolved": "https://registry.npmjs.org/@esbuild/linux-arm/-/linux-arm-0.20.2.tgz", + "integrity": "sha512-VhLPeR8HTMPccbuWWcEUD1Az68TqaTYyj6nfE4QByZIQEQVWBB8vup8PpR7y1QHL3CpcF6xd5WVBU/+SBEvGTg==", + "cpu": [ + "arm" + ], + "dev": true, + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/@esbuild/linux-arm64": { + "version": "0.20.2", + "resolved": "https://registry.npmjs.org/@esbuild/linux-arm64/-/linux-arm64-0.20.2.tgz", + "integrity": "sha512-9pb6rBjGvTFNira2FLIWqDk/uaf42sSyLE8j1rnUpuzsODBq7FvpwHYZxQ/It/8b+QOS1RYfqgGFNLRI+qlq2A==", + "cpu": [ + "arm64" + ], + "dev": true, + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/@esbuild/linux-ia32": { + "version": "0.20.2", + "resolved": "https://registry.npmjs.org/@esbuild/linux-ia32/-/linux-ia32-0.20.2.tgz", + "integrity": "sha512-o10utieEkNPFDZFQm9CoP7Tvb33UutoJqg3qKf1PWVeeJhJw0Q347PxMvBgVVFgouYLGIhFYG0UGdBumROyiig==", + "cpu": [ + "ia32" + ], + "dev": true, + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/@esbuild/linux-loong64": { + "version": "0.20.2", + "resolved": "https://registry.npmjs.org/@esbuild/linux-loong64/-/linux-loong64-0.20.2.tgz", + "integrity": "sha512-PR7sp6R/UC4CFVomVINKJ80pMFlfDfMQMYynX7t1tNTeivQ6XdX5r2XovMmha/VjR1YN/HgHWsVcTRIMkymrgQ==", + "cpu": [ + "loong64" + ], + "dev": true, + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/@esbuild/linux-mips64el": { + "version": "0.20.2", + "resolved": "https://registry.npmjs.org/@esbuild/linux-mips64el/-/linux-mips64el-0.20.2.tgz", + "integrity": "sha512-4BlTqeutE/KnOiTG5Y6Sb/Hw6hsBOZapOVF6njAESHInhlQAghVVZL1ZpIctBOoTFbQyGW+LsVYZ8lSSB3wkjA==", + "cpu": [ + "mips64el" + ], + "dev": true, + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/@esbuild/linux-ppc64": { + "version": "0.20.2", + "resolved": "https://registry.npmjs.org/@esbuild/linux-ppc64/-/linux-ppc64-0.20.2.tgz", + "integrity": "sha512-rD3KsaDprDcfajSKdn25ooz5J5/fWBylaaXkuotBDGnMnDP1Uv5DLAN/45qfnf3JDYyJv/ytGHQaziHUdyzaAg==", + "cpu": [ + "ppc64" + ], + "dev": true, + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/@esbuild/linux-riscv64": { + "version": "0.20.2", + "resolved": "https://registry.npmjs.org/@esbuild/linux-riscv64/-/linux-riscv64-0.20.2.tgz", + "integrity": "sha512-snwmBKacKmwTMmhLlz/3aH1Q9T8v45bKYGE3j26TsaOVtjIag4wLfWSiZykXzXuE1kbCE+zJRmwp+ZbIHinnVg==", + "cpu": [ + "riscv64" + ], + "dev": true, + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/@esbuild/linux-s390x": { + "version": "0.20.2", + "resolved": "https://registry.npmjs.org/@esbuild/linux-s390x/-/linux-s390x-0.20.2.tgz", + "integrity": "sha512-wcWISOobRWNm3cezm5HOZcYz1sKoHLd8VL1dl309DiixxVFoFe/o8HnwuIwn6sXre88Nwj+VwZUvJf4AFxkyrQ==", + "cpu": [ + "s390x" + ], + "dev": true, + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/@esbuild/linux-x64": { + "version": "0.20.2", + "resolved": "https://registry.npmjs.org/@esbuild/linux-x64/-/linux-x64-0.20.2.tgz", + "integrity": "sha512-1MdwI6OOTsfQfek8sLwgyjOXAu+wKhLEoaOLTjbijk6E2WONYpH9ZU2mNtR+lZ2B4uwr+usqGuVfFT9tMtGvGw==", + "cpu": [ + "x64" + ], + "dev": true, + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/@esbuild/netbsd-x64": { + "version": "0.20.2", + "resolved": "https://registry.npmjs.org/@esbuild/netbsd-x64/-/netbsd-x64-0.20.2.tgz", + "integrity": "sha512-K8/DhBxcVQkzYc43yJXDSyjlFeHQJBiowJ0uVL6Tor3jGQfSGHNNJcWxNbOI8v5k82prYqzPuwkzHt3J1T1iZQ==", + "cpu": [ + "x64" + ], + "dev": true, + "optional": true, + "os": [ + "netbsd" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/@esbuild/openbsd-x64": { + "version": "0.20.2", + "resolved": "https://registry.npmjs.org/@esbuild/openbsd-x64/-/openbsd-x64-0.20.2.tgz", + "integrity": "sha512-eMpKlV0SThJmmJgiVyN9jTPJ2VBPquf6Kt/nAoo6DgHAoN57K15ZghiHaMvqjCye/uU4X5u3YSMgVBI1h3vKrQ==", + "cpu": [ + "x64" + ], + "dev": true, + "optional": true, + "os": [ + "openbsd" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/@esbuild/sunos-x64": { + "version": "0.20.2", + "resolved": "https://registry.npmjs.org/@esbuild/sunos-x64/-/sunos-x64-0.20.2.tgz", + "integrity": "sha512-2UyFtRC6cXLyejf/YEld4Hajo7UHILetzE1vsRcGL3earZEW77JxrFjH4Ez2qaTiEfMgAXxfAZCm1fvM/G/o8w==", + "cpu": [ + "x64" + ], + "dev": true, + "optional": true, + "os": [ + "sunos" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/@esbuild/win32-arm64": { + "version": "0.20.2", + "resolved": "https://registry.npmjs.org/@esbuild/win32-arm64/-/win32-arm64-0.20.2.tgz", + "integrity": "sha512-GRibxoawM9ZCnDxnP3usoUDO9vUkpAxIIZ6GQI+IlVmr5kP3zUq+l17xELTHMWTWzjxa2guPNyrpq1GWmPvcGQ==", + "cpu": [ + "arm64" + ], + "dev": true, + "optional": true, + "os": [ + "win32" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/@esbuild/win32-ia32": { + "version": "0.20.2", + "resolved": "https://registry.npmjs.org/@esbuild/win32-ia32/-/win32-ia32-0.20.2.tgz", + "integrity": "sha512-HfLOfn9YWmkSKRQqovpnITazdtquEW8/SoHW7pWpuEeguaZI4QnCRW6b+oZTztdBnZOS2hqJ6im/D5cPzBTTlQ==", + "cpu": [ + "ia32" + ], + "dev": true, + "optional": true, + "os": [ + "win32" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/@esbuild/win32-x64": { + "version": "0.20.2", + "resolved": "https://registry.npmjs.org/@esbuild/win32-x64/-/win32-x64-0.20.2.tgz", + "integrity": "sha512-N49X4lJX27+l9jbLKSqZ6bKNjzQvHaT8IIFUy+YIqmXQdjYCToGWwOItDrfby14c78aDd5NHQl29xingXfCdLQ==", + "cpu": [ + "x64" + ], + "dev": true, + "optional": true, + "os": [ + "win32" + ], + "engines": { + "node": ">=12" + } + }, + "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, + "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.5", + "resolved": "https://registry.npmjs.org/@jridgewell/gen-mapping/-/gen-mapping-0.3.5.tgz", + "integrity": "sha512-IzL8ZoEDIBRWEzlCcRhOaCupYyN5gdIK+Q6fbFdPDg6HqX6jpkItn7DFIpW9LQzXG6Df9sA7+OKnq0qlz/GaQg==", + "dev": true, + "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, + "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, + "engines": { + "node": ">=6.0.0" + } + }, + "node_modules/@jridgewell/sourcemap-codec": { + "version": "1.4.15", + "resolved": "https://registry.npmjs.org/@jridgewell/sourcemap-codec/-/sourcemap-codec-1.4.15.tgz", + "integrity": "sha512-eF2rxCRulEKXHTRiDrDy6erMYWqNw4LPdQ8UQA4huuxaQsVeRPFl2oM8oDGxMFhJUWZf9McpLtJasDDZb/Bpeg==", + "dev": true + }, + "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, + "dependencies": { + "@jridgewell/resolve-uri": "^3.1.0", + "@jridgewell/sourcemap-codec": "^1.4.14" + } + }, + "node_modules/@kurkle/color": { + "version": "0.3.2", + "resolved": "https://registry.npmjs.org/@kurkle/color/-/color-0.3.2.tgz", + "integrity": "sha512-fuscdXJ9G1qb7W8VdHi+IwRqij3lBkosAm4ydQtEmbY58OzHXqQhvlxqEkoz0yssNVn38bcpRWgA9PP+OGoisw==" + }, + "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, + "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, + "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, + "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, + "optional": true, + "engines": { + "node": ">=14" + } + }, + "node_modules/@rollup/rollup-android-arm-eabi": { + "version": "4.17.2", + "resolved": "https://registry.npmjs.org/@rollup/rollup-android-arm-eabi/-/rollup-android-arm-eabi-4.17.2.tgz", + "integrity": "sha512-NM0jFxY8bB8QLkoKxIQeObCaDlJKewVlIEkuyYKm5An1tdVZ966w2+MPQ2l8LBZLjR+SgyV+nRkTIunzOYBMLQ==", + "cpu": [ + "arm" + ], + "dev": true, + "optional": true, + "os": [ + "android" + ] + }, + "node_modules/@rollup/rollup-android-arm64": { + "version": "4.17.2", + "resolved": "https://registry.npmjs.org/@rollup/rollup-android-arm64/-/rollup-android-arm64-4.17.2.tgz", + "integrity": "sha512-yeX/Usk7daNIVwkq2uGoq2BYJKZY1JfyLTaHO/jaiSwi/lsf8fTFoQW/n6IdAsx5tx+iotu2zCJwz8MxI6D/Bw==", + "cpu": [ + "arm64" + ], + "dev": true, + "optional": true, + "os": [ + "android" + ] + }, + "node_modules/@rollup/rollup-darwin-arm64": { + "version": "4.17.2", + "resolved": "https://registry.npmjs.org/@rollup/rollup-darwin-arm64/-/rollup-darwin-arm64-4.17.2.tgz", + "integrity": "sha512-kcMLpE6uCwls023+kknm71ug7MZOrtXo+y5p/tsg6jltpDtgQY1Eq5sGfHcQfb+lfuKwhBmEURDga9N0ol4YPw==", + "cpu": [ + "arm64" + ], + "dev": true, + "optional": true, + "os": [ + "darwin" + ] + }, + "node_modules/@rollup/rollup-darwin-x64": { + "version": "4.17.2", + "resolved": "https://registry.npmjs.org/@rollup/rollup-darwin-x64/-/rollup-darwin-x64-4.17.2.tgz", + "integrity": "sha512-AtKwD0VEx0zWkL0ZjixEkp5tbNLzX+FCqGG1SvOu993HnSz4qDI6S4kGzubrEJAljpVkhRSlg5bzpV//E6ysTQ==", + "cpu": [ + "x64" + ], + "dev": true, + "optional": true, + "os": [ + "darwin" + ] + }, + "node_modules/@rollup/rollup-linux-arm-gnueabihf": { + "version": "4.17.2", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-arm-gnueabihf/-/rollup-linux-arm-gnueabihf-4.17.2.tgz", + "integrity": "sha512-3reX2fUHqN7sffBNqmEyMQVj/CKhIHZd4y631duy0hZqI8Qoqf6lTtmAKvJFYa6bhU95B1D0WgzHkmTg33In0A==", + "cpu": [ + "arm" + ], + "dev": true, + "optional": true, + "os": [ + "linux" + ] + }, + "node_modules/@rollup/rollup-linux-arm-musleabihf": { + "version": "4.17.2", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-arm-musleabihf/-/rollup-linux-arm-musleabihf-4.17.2.tgz", + "integrity": "sha512-uSqpsp91mheRgw96xtyAGP9FW5ChctTFEoXP0r5FAzj/3ZRv3Uxjtc7taRQSaQM/q85KEKjKsZuiZM3GyUivRg==", + "cpu": [ + "arm" + ], + "dev": true, + "optional": true, + "os": [ + "linux" + ] + }, + "node_modules/@rollup/rollup-linux-arm64-gnu": { + "version": "4.17.2", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-arm64-gnu/-/rollup-linux-arm64-gnu-4.17.2.tgz", + "integrity": "sha512-EMMPHkiCRtE8Wdk3Qhtciq6BndLtstqZIroHiiGzB3C5LDJmIZcSzVtLRbwuXuUft1Cnv+9fxuDtDxz3k3EW2A==", + "cpu": [ + "arm64" + ], + "dev": true, + "optional": true, + "os": [ + "linux" + ] + }, + "node_modules/@rollup/rollup-linux-arm64-musl": { + "version": "4.17.2", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-arm64-musl/-/rollup-linux-arm64-musl-4.17.2.tgz", + "integrity": "sha512-NMPylUUZ1i0z/xJUIx6VUhISZDRT+uTWpBcjdv0/zkp7b/bQDF+NfnfdzuTiB1G6HTodgoFa93hp0O1xl+/UbA==", + "cpu": [ + "arm64" + ], + "dev": true, + "optional": true, + "os": [ + "linux" + ] + }, + "node_modules/@rollup/rollup-linux-powerpc64le-gnu": { + "version": "4.17.2", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-powerpc64le-gnu/-/rollup-linux-powerpc64le-gnu-4.17.2.tgz", + "integrity": "sha512-T19My13y8uYXPw/L/k0JYaX1fJKFT/PWdXiHr8mTbXWxjVF1t+8Xl31DgBBvEKclw+1b00Chg0hxE2O7bTG7GQ==", + "cpu": [ + "ppc64" + ], + "dev": true, + "optional": true, + "os": [ + "linux" + ] + }, + "node_modules/@rollup/rollup-linux-riscv64-gnu": { + "version": "4.17.2", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-riscv64-gnu/-/rollup-linux-riscv64-gnu-4.17.2.tgz", + "integrity": "sha512-BOaNfthf3X3fOWAB+IJ9kxTgPmMqPPH5f5k2DcCsRrBIbWnaJCgX2ll77dV1TdSy9SaXTR5iDXRL8n7AnoP5cg==", + "cpu": [ + "riscv64" + ], + "dev": true, + "optional": true, + "os": [ + "linux" + ] + }, + "node_modules/@rollup/rollup-linux-s390x-gnu": { + "version": "4.17.2", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-s390x-gnu/-/rollup-linux-s390x-gnu-4.17.2.tgz", + "integrity": "sha512-W0UP/x7bnn3xN2eYMql2T/+wpASLE5SjObXILTMPUBDB/Fg/FxC+gX4nvCfPBCbNhz51C+HcqQp2qQ4u25ok6g==", + "cpu": [ + "s390x" + ], + "dev": true, + "optional": true, + "os": [ + "linux" + ] + }, + "node_modules/@rollup/rollup-linux-x64-gnu": { + "version": "4.17.2", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-x64-gnu/-/rollup-linux-x64-gnu-4.17.2.tgz", + "integrity": "sha512-Hy7pLwByUOuyaFC6mAr7m+oMC+V7qyifzs/nW2OJfC8H4hbCzOX07Ov0VFk/zP3kBsELWNFi7rJtgbKYsav9QQ==", + "cpu": [ + "x64" + ], + "dev": true, + "optional": true, + "os": [ + "linux" + ] + }, + "node_modules/@rollup/rollup-linux-x64-musl": { + "version": "4.17.2", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-x64-musl/-/rollup-linux-x64-musl-4.17.2.tgz", + "integrity": "sha512-h1+yTWeYbRdAyJ/jMiVw0l6fOOm/0D1vNLui9iPuqgRGnXA0u21gAqOyB5iHjlM9MMfNOm9RHCQ7zLIzT0x11Q==", + "cpu": [ + "x64" + ], + "dev": true, + "optional": true, + "os": [ + "linux" + ] + }, + "node_modules/@rollup/rollup-win32-arm64-msvc": { + "version": "4.17.2", + "resolved": "https://registry.npmjs.org/@rollup/rollup-win32-arm64-msvc/-/rollup-win32-arm64-msvc-4.17.2.tgz", + "integrity": "sha512-tmdtXMfKAjy5+IQsVtDiCfqbynAQE/TQRpWdVataHmhMb9DCoJxp9vLcCBjEQWMiUYxO1QprH/HbY9ragCEFLA==", + "cpu": [ + "arm64" + ], + "dev": true, + "optional": true, + "os": [ + "win32" + ] + }, + "node_modules/@rollup/rollup-win32-ia32-msvc": { + "version": "4.17.2", + "resolved": "https://registry.npmjs.org/@rollup/rollup-win32-ia32-msvc/-/rollup-win32-ia32-msvc-4.17.2.tgz", + "integrity": "sha512-7II/QCSTAHuE5vdZaQEwJq2ZACkBpQDOmQsE6D6XUbnBHW8IAhm4eTufL6msLJorzrHDFv3CF8oCA/hSIRuZeQ==", + "cpu": [ + "ia32" + ], + "dev": true, + "optional": true, + "os": [ + "win32" + ] + }, + "node_modules/@rollup/rollup-win32-x64-msvc": { + "version": "4.17.2", + "resolved": "https://registry.npmjs.org/@rollup/rollup-win32-x64-msvc/-/rollup-win32-x64-msvc-4.17.2.tgz", + "integrity": "sha512-TGGO7v7qOq4CYmSBVEYpI1Y5xDuCEnbVC5Vth8mOsW0gDSzxNrVERPc790IGHsrT2dQSimgMr9Ub3Y1Jci5/8w==", + "cpu": [ + "x64" + ], + "dev": true, + "optional": true, + "os": [ + "win32" + ] + }, + "node_modules/@types/estree": { + "version": "1.0.5", + "resolved": "https://registry.npmjs.org/@types/estree/-/estree-1.0.5.tgz", + "integrity": "sha512-/kYRxGDLWzHOB7q+wtSUQlFrtcdUccpfy+X+9iMBpHK8QLLhx2wIPYuS5DYtR9Wa/YlZAbIovy7qVdB1Aq6Lyw==", + "dev": true + }, + "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==", + "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==" + }, + "node_modules/alpinejs": { + "version": "3.13.10", + "resolved": "https://registry.npmjs.org/alpinejs/-/alpinejs-3.13.10.tgz", + "integrity": "sha512-86RB307VWICex0vG15Eq0x058cNNsvS57ohrjN6n/TJAVSFV+zXOK/E34nNHDHc6Poq+yTNCLqEzPqEkRBTMRQ==", + "dependencies": { + "@vue/reactivity": "~3.1.1" + } + }, + "node_modules/ansi-regex": { + "version": "6.0.1", + "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-6.0.1.tgz", + "integrity": "sha512-n5M855fKb2SsfMIiFFoVrABHJC8QtHwVx+mHWP3QcEqBHYienj5dHSgjbxtC0WEZXYt4wcD6zrQElDPhFuZgfA==", + "dev": true, + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/chalk/ansi-regex?sponsor=1" + } + }, + "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, + "engines": { + "node": ">=12" + }, + "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 + }, + "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, + "dependencies": { + "normalize-path": "^3.0.0", + "picomatch": "^2.0.4" + }, + "engines": { + "node": ">= 8" + } + }, + "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 + }, + "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 + }, + "node_modules/autoprefixer": { + "version": "10.4.19", + "resolved": "https://registry.npmjs.org/autoprefixer/-/autoprefixer-10.4.19.tgz", + "integrity": "sha512-BaENR2+zBZ8xXhM4pUaKUxlVdxZ0EZhjvbopwnXmxRUfqDmwSpC2lAi/QXvx7NRdPCo1WKEcEF6mV64si1z4Ew==", + "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" + } + ], + "dependencies": { + "browserslist": "^4.23.0", + "caniuse-lite": "^1.0.30001599", + "fraction.js": "^4.3.7", + "normalize-range": "^0.1.2", + "picocolors": "^1.0.0", + "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.6.8", + "resolved": "https://registry.npmjs.org/axios/-/axios-1.6.8.tgz", + "integrity": "sha512-v/ZHtJDU39mDpyBoFVkETcd/uNdxrWRrg3bKpOKzXFA6Bvqopts6ALSMU3y6ijYxbw2B+wPrIv46egTzJXCLGQ==", + "dev": true, + "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 + }, + "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, + "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, + "dependencies": { + "balanced-match": "^1.0.0" + } + }, + "node_modules/braces": { + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/braces/-/braces-3.0.2.tgz", + "integrity": "sha512-b8um+L1RzM3WDSzvhm6gIz1yfTbBt6YTlcEKAvsmqCZZFw46z626lVj9j1yEPW33H5H+lBQpZMP1k8l+78Ha0A==", + "dev": true, + "dependencies": { + "fill-range": "^7.0.1" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/browserslist": { + "version": "4.23.0", + "resolved": "https://registry.npmjs.org/browserslist/-/browserslist-4.23.0.tgz", + "integrity": "sha512-QW8HiM1shhT2GuzkvklfjcKDiWFXHOeFCIA/huJPwHsslwcydgk7X+z2zXpEijP98UCY7HbubZt5J2Zgvf0CaQ==", + "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" + } + ], + "dependencies": { + "caniuse-lite": "^1.0.30001587", + "electron-to-chromium": "^1.4.668", + "node-releases": "^2.0.14", + "update-browserslist-db": "^1.0.13" + }, + "bin": { + "browserslist": "cli.js" + }, + "engines": { + "node": "^6 || ^7 || ^8 || ^9 || ^10 || ^11 || ^12 || >=13.7" + } + }, + "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, + "engines": { + "node": ">= 6" + } + }, + "node_modules/caniuse-lite": { + "version": "1.0.30001618", + "resolved": "https://registry.npmjs.org/caniuse-lite/-/caniuse-lite-1.0.30001618.tgz", + "integrity": "sha512-p407+D1tIkDvsEAPS22lJxLQQaG8OTBEqo0KhzfABGk0TU4juBNDSfH0hyAp/HRyx+M8L17z/ltyhxh27FTfQg==", + "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" + } + ] + }, + "node_modules/chart.js": { + "version": "4.4.3", + "resolved": "https://registry.npmjs.org/chart.js/-/chart.js-4.4.3.tgz", + "integrity": "sha512-qK1gkGSRYcJzqrrzdR6a+I0vQ4/R+SoODXyAjscQ/4mzuNzySaMCd+hyVxitSY1+L2fjPD1Gbn+ibNqRmwQeLw==", + "dependencies": { + "@kurkle/color": "^0.3.0" + }, + "engines": { + "pnpm": ">=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, + "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, + "dependencies": { + "is-glob": "^4.0.1" + }, + "engines": { + "node": ">= 6" + } + }, + "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, + "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 + }, + "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, + "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, + "engines": { + "node": ">= 6" + } + }, + "node_modules/cross-spawn": { + "version": "7.0.3", + "resolved": "https://registry.npmjs.org/cross-spawn/-/cross-spawn-7.0.3.tgz", + "integrity": "sha512-iRDPJKUPVEND7dHPO8rkbOnPpyDygcDFtWjpeWNCgy8WP2rXcxXL8TskReQl6OrB2G7+UJrags1q15Fudc7G6w==", + "dev": true, + "dependencies": { + "path-key": "^3.1.0", + "shebang-command": "^2.0.0", + "which": "^2.0.1" + }, + "engines": { + "node": ">= 8" + } + }, + "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, + "bin": { + "cssesc": "bin/cssesc" + }, + "engines": { + "node": ">=4" + } + }, + "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, + "engines": { + "node": ">=0.4.0" + } + }, + "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 + }, + "node_modules/dlv": { + "version": "1.1.3", + "resolved": "https://registry.npmjs.org/dlv/-/dlv-1.1.3.tgz", + "integrity": "sha512-+HlytyjlPKnIG8XuRG8WvmBP8xs8P71y+SKKS6ZXWoEgLuePxtDoUEiH7WkdePWrQ5JBpE6aoVqfZfJUQkjXwA==", + "dev": true + }, + "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 + }, + "node_modules/electron-to-chromium": { + "version": "1.4.769", + "resolved": "https://registry.npmjs.org/electron-to-chromium/-/electron-to-chromium-1.4.769.tgz", + "integrity": "sha512-bZu7p623NEA2rHTc9K1vykl57ektSPQYFFqQir8BOYf6EKOB+yIsbFB9Kpm7Cgt6tsLr9sRkqfqSZUw7LP1XxQ==", + "dev": true + }, + "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 + }, + "node_modules/esbuild": { + "version": "0.20.2", + "resolved": "https://registry.npmjs.org/esbuild/-/esbuild-0.20.2.tgz", + "integrity": "sha512-WdOOppmUNU+IbZ0PaDiTst80zjnrOkyJNHoKupIcVyU8Lvla3Ugx94VzkQ32Ijqd7UhHJy75gNWDMUekcrSJ6g==", + "dev": true, + "hasInstallScript": true, + "bin": { + "esbuild": "bin/esbuild" + }, + "engines": { + "node": ">=12" + }, + "optionalDependencies": { + "@esbuild/aix-ppc64": "0.20.2", + "@esbuild/android-arm": "0.20.2", + "@esbuild/android-arm64": "0.20.2", + "@esbuild/android-x64": "0.20.2", + "@esbuild/darwin-arm64": "0.20.2", + "@esbuild/darwin-x64": "0.20.2", + "@esbuild/freebsd-arm64": "0.20.2", + "@esbuild/freebsd-x64": "0.20.2", + "@esbuild/linux-arm": "0.20.2", + "@esbuild/linux-arm64": "0.20.2", + "@esbuild/linux-ia32": "0.20.2", + "@esbuild/linux-loong64": "0.20.2", + "@esbuild/linux-mips64el": "0.20.2", + "@esbuild/linux-ppc64": "0.20.2", + "@esbuild/linux-riscv64": "0.20.2", + "@esbuild/linux-s390x": "0.20.2", + "@esbuild/linux-x64": "0.20.2", + "@esbuild/netbsd-x64": "0.20.2", + "@esbuild/openbsd-x64": "0.20.2", + "@esbuild/sunos-x64": "0.20.2", + "@esbuild/win32-arm64": "0.20.2", + "@esbuild/win32-ia32": "0.20.2", + "@esbuild/win32-x64": "0.20.2" + } + }, + "node_modules/escalade": { + "version": "3.1.2", + "resolved": "https://registry.npmjs.org/escalade/-/escalade-3.1.2.tgz", + "integrity": "sha512-ErCHMCae19vR8vQGe50xIsVomy19rg6gFu3+r3jkEO46suLMWBksvVyoGgQV+jOfl84ZSOSlmv6Gxa89PmTGmA==", + "dev": true, + "engines": { + "node": ">=6" + } + }, + "node_modules/fast-glob": { + "version": "3.3.2", + "resolved": "https://registry.npmjs.org/fast-glob/-/fast-glob-3.3.2.tgz", + "integrity": "sha512-oX2ruAFQwf/Orj8m737Y5adxDQO0LAB7/S5MnxCdTNDd4p6BsyIVsv9JQsATbTSq8KHRpLwIHbVlUNatxd+1Ow==", + "dev": true, + "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.4" + }, + "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, + "dependencies": { + "is-glob": "^4.0.1" + }, + "engines": { + "node": ">= 6" + } + }, + "node_modules/fastq": { + "version": "1.17.1", + "resolved": "https://registry.npmjs.org/fastq/-/fastq-1.17.1.tgz", + "integrity": "sha512-sRVD3lWVIXWg6By68ZN7vho9a1pQcN/WBFaAAsDDFzlJjvoGx0P8z7V1t72grFJfJhu3YPZBuu25f7Kaw2jN1w==", + "dev": true, + "dependencies": { + "reusify": "^1.0.4" + } + }, + "node_modules/fill-range": { + "version": "7.0.1", + "resolved": "https://registry.npmjs.org/fill-range/-/fill-range-7.0.1.tgz", + "integrity": "sha512-qOo9F+dMUmC2Lcb4BbVvnKJxTPjCm+RRpe4gDuGrzkL7mEVl/djYSu2OdQ2Pa302N4oqkSg9ir6jaLWJ2USVpQ==", + "dev": true, + "dependencies": { + "to-regex-range": "^5.0.1" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/follow-redirects": { + "version": "1.15.6", + "resolved": "https://registry.npmjs.org/follow-redirects/-/follow-redirects-1.15.6.tgz", + "integrity": "sha512-wWN62YITEaOpSK584EZXJafH1AGpO8RVgElfkuXbTOrPX4fIfOyEpW/CsiNd8JdYrAoOvafRTOEnvsO++qCqFA==", + "dev": true, + "funding": [ + { + "type": "individual", + "url": "https://github.com/sponsors/RubenVerborgh" + } + ], + "engines": { + "node": ">=4.0" + }, + "peerDependenciesMeta": { + "debug": { + "optional": true + } + } + }, + "node_modules/foreground-child": { + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/foreground-child/-/foreground-child-3.1.1.tgz", + "integrity": "sha512-TMKDUnIte6bfb5nWv7V/caI169OHgvwjb7V4WkeUvbQQdjr5rWKqHFiKWb/fcOwB+CzBT+qbWjvj+DVwRskpIg==", + "dev": true, + "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.0", + "resolved": "https://registry.npmjs.org/form-data/-/form-data-4.0.0.tgz", + "integrity": "sha512-ETEklSGi5t0QMZuiXoA/Q6vcnxcLQP5vdugSpuAyi6SVGi2clPPp+xgEhuMaHC+zGgn31Kd235W35f7Hykkaww==", + "dev": true, + "dependencies": { + "asynckit": "^0.4.0", + "combined-stream": "^1.0.8", + "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, + "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, + "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==", + "dev": true, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/glob": { + "version": "10.3.15", + "resolved": "https://registry.npmjs.org/glob/-/glob-10.3.15.tgz", + "integrity": "sha512-0c6RlJt1TICLyvJYIApxb8GsXoai0KUP7AxKKAtsYXdgJR1mGEUa7DgwShbdk1nly0PYoZj01xd4hzbq3fsjpw==", + "dev": true, + "dependencies": { + "foreground-child": "^3.1.0", + "jackspeak": "^2.3.6", + "minimatch": "^9.0.1", + "minipass": "^7.0.4", + "path-scurry": "^1.11.0" + }, + "bin": { + "glob": "dist/esm/bin.mjs" + }, + "engines": { + "node": ">=16 || 14 >=14.18" + }, + "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, + "dependencies": { + "is-glob": "^4.0.3" + }, + "engines": { + "node": ">=10.13.0" + } + }, + "node_modules/hasown": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/hasown/-/hasown-2.0.2.tgz", + "integrity": "sha512-0hJU9SCPvmMzIBdZFqNPXWa6dqh7WdH0cII9y+CyS8rG3nL48Bclra9HmKhVVUHyPWNH5Y7xDwAB7bfgSjkUMQ==", + "dev": true, + "dependencies": { + "function-bind": "^1.1.2" + }, + "engines": { + "node": ">= 0.4" + } + }, + "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, + "dependencies": { + "binary-extensions": "^2.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/is-core-module": { + "version": "2.13.1", + "resolved": "https://registry.npmjs.org/is-core-module/-/is-core-module-2.13.1.tgz", + "integrity": "sha512-hHrIjvZsftOsvKSn2TRYl63zvxsgE0K+0mYMoH6gD4omR5IWB2KynivBQczo3+wF1cCkjzvptnI9Q0sPU66ilw==", + "dev": true, + "dependencies": { + "hasown": "^2.0.0" + }, + "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, + "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, + "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, + "dependencies": { + "is-extglob": "^2.1.1" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "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, + "engines": { + "node": ">=0.12.0" + } + }, + "node_modules/isexe": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/isexe/-/isexe-2.0.0.tgz", + "integrity": "sha512-RHxMLp9lnKHGHRng9QFhRCMbYAcVpn69smSGcq3f36xjgVVWThj4qqLbTLlq7Ssj8B+fIQ1EuCEGI2lKsyQeIw==", + "dev": true + }, + "node_modules/jackspeak": { + "version": "2.3.6", + "resolved": "https://registry.npmjs.org/jackspeak/-/jackspeak-2.3.6.tgz", + "integrity": "sha512-N3yCS/NegsOBokc8GAdM8UcmfsKiSS8cipheD/nivzr700H+nsMOxJjQnvwOcRYVuFkdH0wGUvW2WbXGmrZGbQ==", + "dev": true, + "dependencies": { + "@isaacs/cliui": "^8.0.2" + }, + "engines": { + "node": ">=14" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" + }, + "optionalDependencies": { + "@pkgjs/parseargs": "^0.11.0" + } + }, + "node_modules/jiti": { + "version": "1.21.0", + "resolved": "https://registry.npmjs.org/jiti/-/jiti-1.21.0.tgz", + "integrity": "sha512-gFqAIbuKyyso/3G2qhiO2OM6shY6EPP/R0+mkDbyspxKazh8BXDC5FiFsUjlczgdNz/vfra0da2y+aHrusLG/Q==", + "dev": true, + "bin": { + "jiti": "bin/jiti.js" + } + }, + "node_modules/laravel-vite-plugin": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/laravel-vite-plugin/-/laravel-vite-plugin-1.0.2.tgz", + "integrity": "sha512-Mcclml10khYzBVxDwJro8wnVDwD4i7XOSEMACQNnarvTnHjrjXLLL+B/Snif2wYAyElsOqagJZ7VAinb/2vF5g==", + "dev": true, + "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" + }, + "peerDependencies": { + "vite": "^5.0.0" + } + }, + "node_modules/lilconfig": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/lilconfig/-/lilconfig-2.1.0.tgz", + "integrity": "sha512-utWOt/GHzuUxnLKxB6dk81RoOeoNeHgbrXiuGk4yyF5qlRz+iIVWu56E2fqGHFrXz0QNUhLB/8nKqvRH66JKGQ==", + "dev": true, + "engines": { + "node": ">=10" + } + }, + "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 + }, + "node_modules/lru-cache": { + "version": "10.2.2", + "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-10.2.2.tgz", + "integrity": "sha512-9hp3Vp2/hFQUiIwKo8XCeFVnrg8Pk3TYNPIR7tJADKi5YfcF7vEaK7avFHTlSy3kOKYaJQaalfEo6YuXdceBOQ==", + "dev": true, + "engines": { + "node": "14 || >=16.14" + } + }, + "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, + "engines": { + "node": ">= 8" + } + }, + "node_modules/micromatch": { + "version": "4.0.5", + "resolved": "https://registry.npmjs.org/micromatch/-/micromatch-4.0.5.tgz", + "integrity": "sha512-DMy+ERcEW2q8Z2Po+WNXuw3c5YaUSFjAO5GsJqfEl7UjvtIuFKO6ZrKvcItdy98dwFI2N1tg3zNIdKaQT+aNdA==", + "dev": true, + "dependencies": { + "braces": "^3.0.2", + "picomatch": "^2.3.1" + }, + "engines": { + "node": ">=8.6" + } + }, + "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, + "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, + "dependencies": { + "mime-db": "1.52.0" + }, + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/minimatch": { + "version": "9.0.4", + "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-9.0.4.tgz", + "integrity": "sha512-KqWh+VchfxcMNRAJjj2tnsSJdNbHsVgnkBhTNrW7AjVo6OvLtxw8zfT9oLw1JSohlFzJ8jCoTgaoXvJ+kHt6fw==", + "dev": true, + "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.1", + "resolved": "https://registry.npmjs.org/minipass/-/minipass-7.1.1.tgz", + "integrity": "sha512-UZ7eQ+h8ywIRAW1hIEl2AqdwzJucU/Kp59+8kkZeSvafXhZjul247BvIJjEVFVeON6d7lM46XX1HXCduKAS8VA==", + "dev": true, + "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, + "dependencies": { + "any-promise": "^1.0.0", + "object-assign": "^4.0.1", + "thenify-all": "^1.0.0" + } + }, + "node_modules/nanoid": { + "version": "3.3.7", + "resolved": "https://registry.npmjs.org/nanoid/-/nanoid-3.3.7.tgz", + "integrity": "sha512-eSRppjcPIatRIMC1U6UngP8XFcz8MQWGQdt1MTBQ7NaAmvXDfvNxbvWV3x2y6CdEUciCSsDHDQZbhYaB8QEo2g==", + "dev": true, + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/ai" + } + ], + "bin": { + "nanoid": "bin/nanoid.cjs" + }, + "engines": { + "node": "^10 || ^12 || ^13.7 || ^14 || >=15.0.1" + } + }, + "node_modules/node-releases": { + "version": "2.0.14", + "resolved": "https://registry.npmjs.org/node-releases/-/node-releases-2.0.14.tgz", + "integrity": "sha512-y10wOWt8yZpqXmOgRo77WaHEmhYQYGNA6y421PKsKYWEK8aW+cqAphborZDhqfyKrbZEN92CN1X2KbafY2s7Yw==", + "dev": true + }, + "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, + "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, + "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, + "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, + "engines": { + "node": ">= 6" + } + }, + "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, + "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 + }, + "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, + "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/picocolors": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/picocolors/-/picocolors-1.0.1.tgz", + "integrity": "sha512-anP1Z8qwhkbmu7MFP5iTt+wQKXgwzf7zTyGlcdzabySa9vd0Xt392U0rVmz9poOaBj0uHJKyyo9/upk0HrEQew==", + "dev": true + }, + "node_modules/picomatch": { + "version": "2.3.1", + "resolved": "https://registry.npmjs.org/picomatch/-/picomatch-2.3.1.tgz", + "integrity": "sha512-JU3teHTNjmE2VCGFzuY8EXzCDVwEqB2a8fsIvwaStHhAWJEeVd1o1QD80CU6+ZdEXXSLbSsuLwJjkCBWqRQUVA==", + "dev": true, + "engines": { + "node": ">=8.6" + }, + "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, + "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, + "engines": { + "node": ">= 6" + } + }, + "node_modules/postcss": { + "version": "8.4.38", + "resolved": "https://registry.npmjs.org/postcss/-/postcss-8.4.38.tgz", + "integrity": "sha512-Wglpdk03BSfXkHoQa3b/oulrotAkwrlLDRSOb9D0bN86FdRyE9lppSp33aHNPgBa0JKCoB+drFLZkQoRRYae5A==", + "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" + } + ], + "dependencies": { + "nanoid": "^3.3.7", + "picocolors": "^1.0.0", + "source-map-js": "^1.2.0" + }, + "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, + "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, + "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" + } + ], + "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-load-config/node_modules/lilconfig": { + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/lilconfig/-/lilconfig-3.1.1.tgz", + "integrity": "sha512-O18pf7nyvHTckunPWCV1XUNXU1piu01y2b7ATJ0ppkUkk8ocqVWBrYjJBCwHDjD/ZWcfyrA0P4gKhzWGi5EINQ==", + "dev": true, + "engines": { + "node": ">=14" + }, + "funding": { + "url": "https://github.com/sponsors/antonk52" + } + }, + "node_modules/postcss-nested": { + "version": "6.0.1", + "resolved": "https://registry.npmjs.org/postcss-nested/-/postcss-nested-6.0.1.tgz", + "integrity": "sha512-mEp4xPMi5bSWiMbsgoPfcP74lsWLHkQbZc3sY+jWYd65CUwXrUaTp0fmNpa01ZcETKlIgUdFN/MpS2xZtqL9dQ==", + "dev": true, + "dependencies": { + "postcss-selector-parser": "^6.0.11" + }, + "engines": { + "node": ">=12.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/postcss/" + }, + "peerDependencies": { + "postcss": "^8.2.14" + } + }, + "node_modules/postcss-selector-parser": { + "version": "6.0.16", + "resolved": "https://registry.npmjs.org/postcss-selector-parser/-/postcss-selector-parser-6.0.16.tgz", + "integrity": "sha512-A0RVJrX+IUkVZbW3ClroRWurercFhieevHB38sr2+l9eUClMqome3LmEmnhlNy+5Mr2EYN6B2Kaw9wYdd+VHiw==", + "dev": true, + "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 + }, + "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 + }, + "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" + } + ] + }, + "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, + "dependencies": { + "pify": "^2.3.0" + } + }, + "node_modules/readdirp": { + "version": "3.6.0", + "resolved": "https://registry.npmjs.org/readdirp/-/readdirp-3.6.0.tgz", + "integrity": "sha512-hOS089on8RduqdbhvQ5Z37A0ESjsqz6qnRcffsMU3495FuTdqSm+7bhJ29JvIOsBDEEnan5DPu9t3To9VRlMzA==", + "dev": true, + "dependencies": { + "picomatch": "^2.2.1" + }, + "engines": { + "node": ">=8.10.0" + } + }, + "node_modules/resolve": { + "version": "1.22.8", + "resolved": "https://registry.npmjs.org/resolve/-/resolve-1.22.8.tgz", + "integrity": "sha512-oKWePCxqpd6FlLvGV1VU0x7bkPmmCNolxzjMf4NczoDnQcIWrAF+cPtZn5i6n+RfD2d9i0tzpKnG6Yk168yIyw==", + "dev": true, + "dependencies": { + "is-core-module": "^2.13.0", + "path-parse": "^1.0.7", + "supports-preserve-symlinks-flag": "^1.0.0" + }, + "bin": { + "resolve": "bin/resolve" + }, + "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, + "engines": { + "iojs": ">=1.0.0", + "node": ">=0.10.0" + } + }, + "node_modules/rollup": { + "version": "4.17.2", + "resolved": "https://registry.npmjs.org/rollup/-/rollup-4.17.2.tgz", + "integrity": "sha512-/9ClTJPByC0U4zNLowV1tMBe8yMEAxewtR3cUNX5BoEpGH3dQEWpJLr6CLp0fPdYRF/fzVOgvDb1zXuakwF5kQ==", + "dev": true, + "dependencies": { + "@types/estree": "1.0.5" + }, + "bin": { + "rollup": "dist/bin/rollup" + }, + "engines": { + "node": ">=18.0.0", + "npm": ">=8.0.0" + }, + "optionalDependencies": { + "@rollup/rollup-android-arm-eabi": "4.17.2", + "@rollup/rollup-android-arm64": "4.17.2", + "@rollup/rollup-darwin-arm64": "4.17.2", + "@rollup/rollup-darwin-x64": "4.17.2", + "@rollup/rollup-linux-arm-gnueabihf": "4.17.2", + "@rollup/rollup-linux-arm-musleabihf": "4.17.2", + "@rollup/rollup-linux-arm64-gnu": "4.17.2", + "@rollup/rollup-linux-arm64-musl": "4.17.2", + "@rollup/rollup-linux-powerpc64le-gnu": "4.17.2", + "@rollup/rollup-linux-riscv64-gnu": "4.17.2", + "@rollup/rollup-linux-s390x-gnu": "4.17.2", + "@rollup/rollup-linux-x64-gnu": "4.17.2", + "@rollup/rollup-linux-x64-musl": "4.17.2", + "@rollup/rollup-win32-arm64-msvc": "4.17.2", + "@rollup/rollup-win32-ia32-msvc": "4.17.2", + "@rollup/rollup-win32-x64-msvc": "4.17.2", + "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" + } + ], + "dependencies": { + "queue-microtask": "^1.2.2" + } + }, + "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, + "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, + "engines": { + "node": ">=8" + } + }, + "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, + "engines": { + "node": ">=14" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" + } + }, + "node_modules/source-map-js": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/source-map-js/-/source-map-js-1.2.0.tgz", + "integrity": "sha512-itJW8lvSA0TXEphiRoawsCksnlf8SyvmFzIhltqAHluXd88pkCd+cXJVHTDwdCr0IzwptSm035IHQktUu1QUMg==", + "dev": true, + "engines": { + "node": ">=0.10.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, + "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, + "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, + "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 + }, + "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, + "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, + "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, + "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, + "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, + "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-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, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/tailwindcss": { + "version": "3.4.3", + "resolved": "https://registry.npmjs.org/tailwindcss/-/tailwindcss-3.4.3.tgz", + "integrity": "sha512-U7sxQk/n397Bmx4JHbJx/iSOOv5G+II3f1kpLpY2QeUv5DcPdcTsYLlusZfq1NthHS1c1cZoyFmmkex1rzke0A==", + "dev": true, + "dependencies": { + "@alloc/quick-lru": "^5.2.0", + "arg": "^5.0.2", + "chokidar": "^3.5.3", + "didyoumean": "^1.2.2", + "dlv": "^1.1.3", + "fast-glob": "^3.3.0", + "glob-parent": "^6.0.2", + "is-glob": "^4.0.3", + "jiti": "^1.21.0", + "lilconfig": "^2.1.0", + "micromatch": "^4.0.5", + "normalize-path": "^3.0.0", + "object-hash": "^3.0.0", + "picocolors": "^1.0.0", + "postcss": "^8.4.23", + "postcss-import": "^15.1.0", + "postcss-js": "^4.0.1", + "postcss-load-config": "^4.0.1", + "postcss-nested": "^6.0.1", + "postcss-selector-parser": "^6.0.11", + "resolve": "^1.22.2", + "sucrase": "^3.32.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, + "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, + "dependencies": { + "thenify": ">= 3.1.0 < 4" + }, + "engines": { + "node": ">=0.8" + } + }, + "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, + "dependencies": { + "is-number": "^7.0.0" + }, + "engines": { + "node": ">=8.0" + } + }, + "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 + }, + "node_modules/update-browserslist-db": { + "version": "1.0.16", + "resolved": "https://registry.npmjs.org/update-browserslist-db/-/update-browserslist-db-1.0.16.tgz", + "integrity": "sha512-KVbTxlBYlckhF5wgfyZXTWnMn7MMZjMu9XG8bPlliUOP9ThaF4QnhP8qrjrH7DRzHfSk0oQv1wToW+iA5GajEQ==", + "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" + } + ], + "dependencies": { + "escalade": "^3.1.2", + "picocolors": "^1.0.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==", + "dev": true + }, + "node_modules/vite": { + "version": "5.2.11", + "resolved": "https://registry.npmjs.org/vite/-/vite-5.2.11.tgz", + "integrity": "sha512-HndV31LWW05i1BLPMUCE1B9E9GFbOu1MbenhS58FuK6owSO5qHm7GiCotrNY1YE5rMeQSFBGmT5ZaLEjFizgiQ==", + "dev": true, + "dependencies": { + "esbuild": "^0.20.1", + "postcss": "^8.4.38", + "rollup": "^4.13.0" + }, + "bin": { + "vite": "bin/vite.js" + }, + "engines": { + "node": "^18.0.0 || >=20.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", + "less": "*", + "lightningcss": "^1.21.0", + "sass": "*", + "stylus": "*", + "sugarss": "*", + "terser": "^5.4.0" + }, + "peerDependenciesMeta": { + "@types/node": { + "optional": true + }, + "less": { + "optional": true + }, + "lightningcss": { + "optional": true + }, + "sass": { + "optional": true + }, + "stylus": { + "optional": true + }, + "sugarss": { + "optional": true + }, + "terser": { + "optional": true + } + } + }, + "node_modules/vite-plugin-full-reload": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/vite-plugin-full-reload/-/vite-plugin-full-reload-1.1.0.tgz", + "integrity": "sha512-3cObNDzX6DdfhD9E7kf6w2mNunFpD7drxyNgHLw+XwIYAgb+Xt16SEXo0Up4VH+TMf3n+DSVJZtW2POBGcBYAA==", + "dev": true, + "dependencies": { + "picocolors": "^1.0.0", + "picomatch": "^2.3.1" + } + }, + "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, + "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, + "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, + "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, + "engines": { + "node": ">=8" + } + }, + "node_modules/wrap-ansi-cjs/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, + "dependencies": { + "color-convert": "^2.0.1" + }, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/chalk/ansi-styles?sponsor=1" + } + }, + "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 + }, + "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, + "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, + "dependencies": { + "ansi-regex": "^5.0.1" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/yaml": { + "version": "2.4.2", + "resolved": "https://registry.npmjs.org/yaml/-/yaml-2.4.2.tgz", + "integrity": "sha512-B3VqDZ+JAg1nZpaEmWtTXUlBneoGx6CPM9b0TENK6aoSu5t73dItudwdgmi6tHlIZZId4dZ9skcAQ2UbcyAeVA==", + "dev": true, + "bin": { + "yaml": "bin.mjs" + }, + "engines": { + "node": ">= 14" + } + } + } +} diff --git a/package.json b/package.json new file mode 100644 index 0000000..1554bb0 --- /dev/null +++ b/package.json @@ -0,0 +1,20 @@ +{ + "private": true, + "type": "module", + "scripts": { + "dev": "vite", + "build": "vite build" + }, + "devDependencies": { + "autoprefixer": "^10.4.19", + "axios": "^1.6.4", + "laravel-vite-plugin": "^1.0", + "postcss": "^8.4.38", + "tailwindcss": "^3.4.3", + "vite": "^5.0" + }, + "dependencies": { + "alpinejs": "^3.13.10", + "chart.js": "^4.4.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..2e7af2b --- /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/assets/images/hero.jpeg b/public/assets/images/hero.jpeg new file mode 100644 index 0000000000000000000000000000000000000000..42bd2e2c12de25f71f828968b9d629445a53b958 GIT binary patch literal 26794 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 W|GBe>kO}mL+z0;;;KK0F@_zv`e?-3k literal 0 HcmV?d00001 diff --git a/public/assets/images/logo.png b/public/assets/images/logo.png new file mode 100644 index 0000000000000000000000000000000000000000..113ce993910fd7a48b04b18d308504632c6a95d7 GIT binary patch literal 130877 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 a`Xh#_oIs4Plqu^I)K67O3t9`YiuxbFFFTq5 literal 0 HcmV?d00001 diff --git a/public/assets/js/app.js b/public/assets/js/app.js new file mode 100644 index 0000000..0f49247 --- /dev/null +++ b/public/assets/js/app.js @@ -0,0 +1,3 @@ +function confirmDelete() { + return confirm('Are you sure you want to delete this record?'); +} \ No newline at end of file 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/resources/css/app.css b/resources/css/app.css new file mode 100644 index 0000000..bd6213e --- /dev/null +++ b/resources/css/app.css @@ -0,0 +1,3 @@ +@tailwind base; +@tailwind components; +@tailwind utilities; \ No newline at end of file diff --git a/resources/js/app.js b/resources/js/app.js new file mode 100644 index 0000000..38f96ce --- /dev/null +++ b/resources/js/app.js @@ -0,0 +1,7 @@ +import './bootstrap'; +import Alpine from 'alpinejs'; +import Chart from 'chart.js/auto'; + +window.Alpine = Alpine + +Alpine.start() \ No newline at end of file diff --git a/resources/js/bootstrap.js b/resources/js/bootstrap.js new file mode 100644 index 0000000..5f1390b --- /dev/null +++ b/resources/js/bootstrap.js @@ -0,0 +1,4 @@ +import axios from 'axios'; +window.axios = axios; + +window.axios.defaults.headers.common['X-Requested-With'] = 'XMLHttpRequest'; diff --git a/resources/views/components/flash.blade.php b/resources/views/components/flash.blade.php new file mode 100644 index 0000000..231e887 --- /dev/null +++ b/resources/views/components/flash.blade.php @@ -0,0 +1,15 @@ +

+ + diff --git a/resources/views/layouts/app.blade.php b/resources/views/layouts/app.blade.php new file mode 100644 index 0000000..dc62874 --- /dev/null +++ b/resources/views/layouts/app.blade.php @@ -0,0 +1,74 @@ + + + + + + {{ config('app.name') }} | {{ $title }} + @vite('resources/css/app.css') + + + + + + @include('layouts.partials.navbar') + +
+ @include('layouts.partials.sidebar') + +
+
+ {{ $title }} +
+
+
+ @include('components.flash') +
+ @yield('content') +
+ + @yield('secondtable') +
+
+ + + + + + + @vite('resources/js/app.js') + @yield('script') + + + diff --git a/resources/views/layouts/auth.blade.php b/resources/views/layouts/auth.blade.php new file mode 100644 index 0000000..f6973d7 --- /dev/null +++ b/resources/views/layouts/auth.blade.php @@ -0,0 +1,26 @@ + + + + + + {{ config('app.name') }} | {{ $title }} + @vite('resources/css/app.css') + + +
+
+
+ +
+
+
+ @yield('content') +
+
+
+
+ + @vite('resources/js/app.js') + @yield('script') + + \ No newline at end of file diff --git a/resources/views/layouts/partials/navbar.blade.php b/resources/views/layouts/partials/navbar.blade.php new file mode 100644 index 0000000..5f94ec0 --- /dev/null +++ b/resources/views/layouts/partials/navbar.blade.php @@ -0,0 +1,51 @@ +
diff --git a/resources/views/layouts/partials/sidebar.blade.php b/resources/views/layouts/partials/sidebar.blade.php new file mode 100644 index 0000000..5390124 --- /dev/null +++ b/resources/views/layouts/partials/sidebar.blade.php @@ -0,0 +1,82 @@ +
+ +
\ No newline at end of file diff --git a/resources/views/pages/auth/login.blade.php b/resources/views/pages/auth/login.blade.php new file mode 100644 index 0000000..6a74716 --- /dev/null +++ b/resources/views/pages/auth/login.blade.php @@ -0,0 +1,67 @@ +@extends('layouts.auth') + +@section('content') + +
+
Sign In to Your Account
+
+ @csrf +
+ + +
+
+ + +
+
+ +
+
+ + Don’t have account? Create an account + +
+ +
+
+ +@endsection + +@section('script') + +@endsection diff --git a/resources/views/pages/auth/register.blade.php b/resources/views/pages/auth/register.blade.php new file mode 100644 index 0000000..2c7e2e6 --- /dev/null +++ b/resources/views/pages/auth/register.blade.php @@ -0,0 +1,76 @@ +@extends('layouts.auth') + +@section('content') +
+
Create an Account
+
+ @csrf +
+ + +
+
+ + +
+
+ + +
+
+ + +
+
+ +
+
+ + Already have an account? Sign in + +
+
+
+@endsection + +@section('script') + +@endsection diff --git a/resources/views/pages/dashboard/index.blade.php b/resources/views/pages/dashboard/index.blade.php new file mode 100644 index 0000000..3e7a28c --- /dev/null +++ b/resources/views/pages/dashboard/index.blade.php @@ -0,0 +1,156 @@ +@extends('layouts.app') + +@section('content') + +
+
+
+
+ Siswa Yang Melakukan Pelanggaran +
+
+
+ + + +
+
+ {{ $countPelanggar }} +
+
+
+
+
+
+
+ Jumlah Siswa +
+
+
+ + + +
+
+ {{ $countSiswa }} +
+
+
+
+
+
+
+ Kriteria Pelanggaran +
+
+
+ + + +
+
+ {{ $countSubKriteria }} +
+
+
+
+
+ +{{--
+
+ +
+
+
+
+
+
+
+

Pelanggaran Ringan

+
+
+
+
+

Pelanggaran Sedang

+
+
+
+
+

Tindak Pidana Ringan (TIPIRING)

+
+
+
+
+

Tindak Pidana Berat (TIPIRAT)

+
+
+
+
+
--}} + +
+
+ +
+
+ + + + + + + + + + + + + + + + + + + + + + + + + +
Range NilaiKeterangan
1 - 2Pelanggaran Ringan
2.1 - 8Pelanggaran Sedang
8.1 - 20Tindak Pidana Ringan (TIPIRING)
20.1 - 100Tindak Pidana Berat (TIPIRAT)
+
+
+ +@endsection + +@section('script') + + + +@endsection diff --git a/resources/views/pages/dashboard/jenispelanggaran/create.blade.php b/resources/views/pages/dashboard/jenispelanggaran/create.blade.php new file mode 100644 index 0000000..c178c96 --- /dev/null +++ b/resources/views/pages/dashboard/jenispelanggaran/create.blade.php @@ -0,0 +1,36 @@ +@extends('layouts.app') + +@section('content') + +
+ @csrf +
+ + + @if($errors->has('kode_kriteria')) + {{ $errors->first('kode_kriteria') }} + @endif +
+
+ + + @if($errors->has('jenis_pelanggaran')) + {{ $errors->first('jenis_pelanggaran') }} + @endif +
+
+ + + @if($errors->has('point')) + {{ $errors->first('point') }} + @endif +
+ +
+ +@endsection diff --git a/resources/views/pages/dashboard/jenispelanggaran/index.blade.php b/resources/views/pages/dashboard/jenispelanggaran/index.blade.php new file mode 100644 index 0000000..3325b5f --- /dev/null +++ b/resources/views/pages/dashboard/jenispelanggaran/index.blade.php @@ -0,0 +1,131 @@ +@extends('layouts.app') + +@section('content') + +
+ @if (Auth::user()->usertype === 'admin') + = 100 ? 'aria-disabled="true"' : '' }}> + + + + Tambah Data + + @endif +
+ +@if($totalBobot != 100) +
+ Peringatan: Total Persentase Bobot adalah {{ $totalBobot }}%. Total harus tepat 100%. +
+@endif + + + + + + + + + @if (Auth::user()->usertype === 'admin') + + @endif + + + + @foreach ($kriteria as $index => $kriteriapelanggaran ) + + + + + + @if (Auth::user()->usertype === 'admin') + + @endif + + @endforeach + + +
NoKodeKriteriaPersentasi BobotAction
{{ $index + 1 }}{{ $kriteriapelanggaran->kode }}{{ $kriteriapelanggaran->kriteria }}{{ $kriteriapelanggaran->bobot }}% + + + + + + + + + + +
+ +@endsection + +@section('secondtable') + +
+ Jenis Pelanggaran +
+ +
+
+ @if (Auth::user()->usertype === 'admin') + + + + + Tambah Data + + @endif +
+ + + + + + + + @if (Auth::user()->usertype === 'admin') + + @endif + + + + @foreach ($jenis as $index => $jenispelanggaran ) + + + + + + @if (Auth::user()->usertype === 'admin') + + @endif + + @endforeach + + +
NoKode KriteriaJenis PelanggaranPointAction
{{ $index + 1 }}{{ $jenispelanggaran->kode_kriteria }}{{ $jenispelanggaran->jenis_pelanggaran }}{{ $jenispelanggaran->point }} + + + + + + + + + + +
+
+ +@endsection + +@section('script') + +@endsection \ No newline at end of file diff --git a/resources/views/pages/dashboard/jenispelanggaran/update.blade.php b/resources/views/pages/dashboard/jenispelanggaran/update.blade.php new file mode 100644 index 0000000..beee7a2 --- /dev/null +++ b/resources/views/pages/dashboard/jenispelanggaran/update.blade.php @@ -0,0 +1,36 @@ +@extends('layouts.app') + +@section('content') + +
+ @csrf +
+ + + @if($errors->has('kode_kriteria')) + {{ $errors->first('kode_kriteria') }} + @endif +
+
+ + + @if($errors->has('jenis_pelanggaran')) + {{ $errors->first('jenis_pelanggaran') }} + @endif +
+
+ + + @if($errors->has('point')) + {{ $errors->first('point') }} + @endif +
+ +
+ +@endsection diff --git a/resources/views/pages/dashboard/kriteriapelanggaran/create.blade.php b/resources/views/pages/dashboard/kriteriapelanggaran/create.blade.php new file mode 100644 index 0000000..b7e73a3 --- /dev/null +++ b/resources/views/pages/dashboard/kriteriapelanggaran/create.blade.php @@ -0,0 +1,30 @@ +@extends('layouts.app') + +@section('content') + +
+ @csrf +
+ + + @if($errors->has('kriteria')) + {{ $errors->first('kriteria') }} + @endif +
+
+ + @php + $currentTotalBobot = App\Models\KriteriaPelanggaran::sum('bobot'); + $remainingBobot = 100 - $currentTotalBobot; + $suggestedBobot = min($remainingBobot, old('bobot', $remainingBobot)); // Calculate suggested bobot + @endphp + + @if($errors->has('bobot')) + {{ $errors->first('bobot') }} + @endif + Saran: {{ $suggestedBobot }}% +
+ +
+ +@endsection diff --git a/resources/views/pages/dashboard/kriteriapelanggaran/update.blade.php b/resources/views/pages/dashboard/kriteriapelanggaran/update.blade.php new file mode 100644 index 0000000..9eac683 --- /dev/null +++ b/resources/views/pages/dashboard/kriteriapelanggaran/update.blade.php @@ -0,0 +1,24 @@ +@extends('layouts.app') + +@section('content') + +
+ @csrf +
+ + + @if($errors->has('kriteria')) + {{ $errors->first('kriteria') }} + @endif +
+
+ + + @if($errors->has('bobot')) + {{ $errors->first('bobot') }} + @endif +
+ +
+ +@endsection diff --git a/resources/views/pages/dashboard/pelanggaran/create.blade.php b/resources/views/pages/dashboard/pelanggaran/create.blade.php new file mode 100644 index 0000000..9bdea71 --- /dev/null +++ b/resources/views/pages/dashboard/pelanggaran/create.blade.php @@ -0,0 +1,197 @@ +@extends('layouts.app') + +@section('content') + +
+ @csrf +
+ + + @if($errors->has('id_siswa')) + {{ $errors->first('id_siswa') }} + @endif +
+ +
Klik "Tambah Baris" untuk memulai.
+ + + + + + + + + + + + +
KriteriaJenis Pelanggaran
+ + +
+ +@endsection + +@section('script') + + + +@endsection diff --git a/resources/views/pages/dashboard/pelanggaran/detail.blade.php b/resources/views/pages/dashboard/pelanggaran/detail.blade.php new file mode 100644 index 0000000..bc2ecab --- /dev/null +++ b/resources/views/pages/dashboard/pelanggaran/detail.blade.php @@ -0,0 +1,223 @@ +{{-- @extends('layouts.app') + +@section('content') +
+
+
+ Detail Pelanggaran +
+ +
+
+

Nama : {{ $data->siswa->nama }}

+

NIS : {{ $data->siswa->nis }}

+

Kelas : {{ $data->siswa->kelas }}

+
+
+ + + + + + + + + + + @php + $totalSmart = 0; + $rowCount = count($list); + @endphp + + @foreach ($list as $index => $item) + @php + $utility = $item->kriteria->bobot / 100 * $item->jenis->point; + $totalSmart += $utility; + @endphp + + + + + + + @endforeach + +
No.PelanggaranPoinUtility
{{ $index + 1 }}{{ $item->jenis->jenis_pelanggaran }}{{ $item->jenis->point }}{{ $utility }}
+ + + + + + + + + + + + + + + +
Nilai SMARTTindakanSanksi
{{ $totalSmart }}{{ $data->tindakan->tindakan_sekolah }}{{ $data->sanksi->jenis_sanksi }}
+
+
+ + +@endsection --}} + +{{-- @extends('layouts.app') + +@section('content') +
+
+
+ Detail Pelanggaran +
+ +
+
+

Nama : {{ $data->siswa->nama }}

+

NIS : {{ $data->siswa->nis }}

+

Kelas : {{ $data->siswa->kelas }}

+
+
+ + + + + + + + + + + + + + @php + $totalSmart = 0; + $rowCount = count($list); + @endphp + + @foreach ($list as $index => $item) + @php + $utility = $item->kriteria->bobot / 100 * $item->jenis->point; + $totalSmart += $utility; + @endphp + + + + + + @if ($index === 0) + + + + @endif + + @endforeach + +
No.PelanggaranPoinUtilityNilai SMARTTindakanSanksi
{{ $index + 1 }}{{ $item->jenis->jenis_pelanggaran }}{{ $item->jenis->point }}{{ $utility }}{{ $totalSmart }}{{ $data->tindakan->tindakan_sekolah }}{{ $data->sanksi->jenis_sanksi }}
+
+
+ + +@endsection --}} + +@extends('layouts.app') + +@section('content') +
+
+
+ Detail Pelanggaran +
+ +
+
+

Nama : {{ $data->siswa->nama }}

+

NIS : {{ $data->siswa->nis }}

+

Kelas : {{ $data->siswa->kelas }}

+
+
+ + + + + + + + + + + + + + @php + $totalUtility = 0; + $totalSmart = 0; + $rowCount = count($list); + @endphp + + @foreach ($list as $index => $item) + @php + $utility = $item->kriteria->bobot / 100 * $item->jenis->point; + $totalUtility += $utility; + @endphp + + + + + + @if ($index === $rowCount - 1) + + + + @endif + + @endforeach + +
No.PelanggaranPoinnilai ter-normalisasiNilai SMARTTindakanSanksi
{{ $index + 1 }}{{ $item->jenis->jenis_pelanggaran }}{{ $item->jenis->point }}{{ $utility }}{{ $totalUtility }}{{ $data->tindakan->tindakan_sekolah }}{{ $data->sanksi->jenis_sanksi }}
+
+
+ + +@endsection + + diff --git a/resources/views/pages/dashboard/pelanggaran/index.blade.php b/resources/views/pages/dashboard/pelanggaran/index.blade.php new file mode 100644 index 0000000..bbd1747 --- /dev/null +++ b/resources/views/pages/dashboard/pelanggaran/index.blade.php @@ -0,0 +1,79 @@ +@extends('layouts.app') + +@section('content') + + + + + + + + + + + + + + + + + + + @foreach ($data as $index => $pelanggaran ) + @php + $sum = 0; + + foreach ($pelanggaran->listPelanggaran as $item) { + $sum += ($item->jenis->point) * ($item->kriteria->bobot / 100); + } + @endphp + + + + + + + + + + + + + @endforeach + + +
NoNamaNISKelasWali KelasTanggalNilai SmartTindakanSanksiAction
{{ $index + 1 }}{{ $pelanggaran->siswa->nama }}{{ $pelanggaran->siswa->nis }}{{ $pelanggaran->siswa->kelas }}{{ $pelanggaran->siswa->walikelas->name}}{{ $pelanggaran->updated_at }}{{ $sum }}{{ $pelanggaran->tindakan->tindakan_sekolah }}{{ $pelanggaran->sanksi->jenis_sanksi}} + + + + + + + + + + + + + + + + +
+ +@endsection + +@section('script') + +@endsection \ No newline at end of file diff --git a/resources/views/pages/dashboard/pelanggaran/update.blade.php b/resources/views/pages/dashboard/pelanggaran/update.blade.php new file mode 100644 index 0000000..72136e3 --- /dev/null +++ b/resources/views/pages/dashboard/pelanggaran/update.blade.php @@ -0,0 +1,197 @@ +@extends('layouts.app') + +@section('content') + +
+ @csrf +
+ + + @if($errors->has('id_siswa')) + {{ $errors->first('id_siswa') }} + @endif +
+ +
Klik "Tambah Baris" untuk memulai.
+ + + + + + + + + + + + + @foreach ($pelanggaran->listPelanggaran as $list) + + + + + + @endforeach + +
KriteriaJenis Pelanggaran
+ + + + + +
+ + +
+ +@endsection + +@section('script') + + + +@endsection diff --git a/resources/views/pages/dashboard/profile.blade.php b/resources/views/pages/dashboard/profile.blade.php new file mode 100644 index 0000000..d17b218 --- /dev/null +++ b/resources/views/pages/dashboard/profile.blade.php @@ -0,0 +1,97 @@ +@extends('layouts.app') + +@section('content') + +
+
+ @if (Auth::user()->photo) +
+ User Photo +
+ @else +
+ + + +
+ @endif +
+
+
+
+ Edit Profile +
+
+ Ubah Password +
+
+
+
+
+
+ @csrf +
+ + + @error('photo') + {{ $message }} + @enderror +
+
+ + + @error('name') + {{ $message }} + @enderror +
+
+ + + @error('email') + {{ $message }} + @enderror +
+
+ + + @error('phone') + {{ $message }} + @enderror +
+ +
+
+
+
+
+
+ @csrf +
+ + + @error('old_password') + {{ $message }} + @enderror +
+
+ + + @error('new_password') + {{ $message }} + @enderror +
+
+ + + @error('new_password_confirmation') + {{ $message }} + @enderror +
+ +
+
+
+
+
+ +@endsection diff --git a/resources/views/pages/dashboard/sanksi/create.blade.php b/resources/views/pages/dashboard/sanksi/create.blade.php new file mode 100644 index 0000000..defc4ce --- /dev/null +++ b/resources/views/pages/dashboard/sanksi/create.blade.php @@ -0,0 +1,24 @@ +@extends('layouts.app') + +@section('content') + +
+ @csrf +
+ + + @if($errors->has('rentang_point')) + {{ $errors->first('rentang_point') }} + @endif +
+
+ + + @if($errors->has('jenis_sanksi')) + {{ $errors->first('jenis_sanksi') }} + @endif +
+ +
+ +@endsection diff --git a/resources/views/pages/dashboard/sanksi/index.blade.php b/resources/views/pages/dashboard/sanksi/index.blade.php new file mode 100644 index 0000000..d890ea2 --- /dev/null +++ b/resources/views/pages/dashboard/sanksi/index.blade.php @@ -0,0 +1,62 @@ +@extends('layouts.app') + +@section('content') + +
+ @if (Auth::user()->usertype === 'admin') + + + + + Tambah Data + + @endif +
+ + + + + + + + @if (Auth::user()->usertype === 'admin') + + @endif + + + + @foreach ($data as $index => $sanksi ) + + + + + + @if (Auth::user()->usertype === 'admin') + + @endif + + @endforeach + + +
NoKode SanksiRentang PointJenis SanksiAction
{{ $index + 1 }}{{ $sanksi->kode_sanksi }}{{ $sanksi->rentang_point }}{{ $sanksi->jenis_sanksi }} + + + + + + + + + + +
+ +@endsection + +@section('script') + +@endsection \ No newline at end of file diff --git a/resources/views/pages/dashboard/sanksi/update.blade.php b/resources/views/pages/dashboard/sanksi/update.blade.php new file mode 100644 index 0000000..f63599b --- /dev/null +++ b/resources/views/pages/dashboard/sanksi/update.blade.php @@ -0,0 +1,24 @@ +@extends('layouts.app') + +@section('content') + +
+ @csrf +
+ + + @if($errors->has('rentang_point')) + {{ $errors->first('rentang_point') }} + @endif +
+
+ + + @if($errors->has('jenis_sanksi')) + {{ $errors->first('jenis_sanksi') }} + @endif +
+ +
+ +@endsection diff --git a/resources/views/pages/dashboard/siswa/create.blade.php b/resources/views/pages/dashboard/siswa/create.blade.php new file mode 100644 index 0000000..8f3de52 --- /dev/null +++ b/resources/views/pages/dashboard/siswa/create.blade.php @@ -0,0 +1,53 @@ +@extends('layouts.app') + +@section('content') + +
+ @csrf +
+ + + @if($errors->has('nama')) + {{ $errors->first('nama') }} + @endif +
+
+ + + @if($errors->has('nis')) + {{ $errors->first('nis') }} + @endif +
+
+ + + @if($errors->has('kelas')) + {{ $errors->first('kelas') }} + @endif +
+
+ + + @if($errors->has('wali_kelas_id')) + {{ $errors->first('wali_kelas_id') }} + @endif +
+ +
+ +@endsection + +@section('script') + +@endsection diff --git a/resources/views/pages/dashboard/siswa/index.blade.php b/resources/views/pages/dashboard/siswa/index.blade.php new file mode 100644 index 0000000..39edb73 --- /dev/null +++ b/resources/views/pages/dashboard/siswa/index.blade.php @@ -0,0 +1,66 @@ +@extends('layouts.app') + +@section('content') + +
+ @if (Auth::user()->usertype === 'admin') + + + + + Tambah Data + + @endif +
+ + + + + + + + + + @if (Auth::user()->usertype === 'admin') + + @endif + + + + @foreach ($data as $index => $siswa ) + + + + + + + + @if (Auth::user()->usertype === 'admin') + + @endif + + @endforeach + + +
NoNamaTanggalNISKelasWali KelasAction
{{ $index + 1 }}{{ $siswa->nama }}{{ $siswa->created_at }}{{ $siswa->nis }}{{ $siswa->kelas }}{{ $siswa->walikelas->name }} + + + + + + + + + + +
+ +@endsection + +@section('script') + +@endsection \ No newline at end of file diff --git a/resources/views/pages/dashboard/siswa/update.blade.php b/resources/views/pages/dashboard/siswa/update.blade.php new file mode 100644 index 0000000..46a830f --- /dev/null +++ b/resources/views/pages/dashboard/siswa/update.blade.php @@ -0,0 +1,53 @@ +@extends('layouts.app') + +@section('content') + +
+ @csrf +
+ + + @error('nama') +
{{ $message }}
+ @enderror +
+
+ + + @error('nis') +
{{ $message }}
+ @enderror +
+
+ + + @error('kelas') +
{{ $message }}
+ @enderror +
+
+ + + @error('wali_kelas_id') +
{{ $message }}
+ @enderror +
+ +
+ +@endsection + +@section('script') + +@endsection \ No newline at end of file diff --git a/resources/views/pages/dashboard/tindakan/create.blade.php b/resources/views/pages/dashboard/tindakan/create.blade.php new file mode 100644 index 0000000..d05131a --- /dev/null +++ b/resources/views/pages/dashboard/tindakan/create.blade.php @@ -0,0 +1,24 @@ +@extends('layouts.app') + +@section('content') + +
+ @csrf +
+ + + @if($errors->has('rentang_point')) + {{ $errors->first('rentang_point') }} + @endif +
+
+ + + @if($errors->has('tindakan_sekolah')) + {{ $errors->first('tindakan_sekolah') }} + @endif +
+ +
+ +@endsection diff --git a/resources/views/pages/dashboard/tindakan/index.blade.php b/resources/views/pages/dashboard/tindakan/index.blade.php new file mode 100644 index 0000000..aafe737 --- /dev/null +++ b/resources/views/pages/dashboard/tindakan/index.blade.php @@ -0,0 +1,62 @@ +@extends('layouts.app') + +@section('content') + +
+ @if (Auth::user()->usertype === 'admin') + + + + + Tambah Data + + @endif +
+ + + + + + + + @if (Auth::user()->usertype === 'admin') + + @endif + + + + @foreach ($data as $index => $tindakan ) + + + + + + @if (Auth::user()->usertype === 'admin') + + @endif + + @endforeach + + +
NoKode TindakanRentang PointTindakan SekolahAction
{{ $index + 1 }}{{ $tindakan->kode_tindakan }}{{ $tindakan->rentang_point }}{{ $tindakan->tindakan_sekolah }} + + + + + + + + + + +
+ +@endsection + +@section('script') + +@endsection \ No newline at end of file diff --git a/resources/views/pages/dashboard/tindakan/update.blade.php b/resources/views/pages/dashboard/tindakan/update.blade.php new file mode 100644 index 0000000..ca1c209 --- /dev/null +++ b/resources/views/pages/dashboard/tindakan/update.blade.php @@ -0,0 +1,24 @@ +@extends('layouts.app') + +@section('content') + +
+ @csrf +
+ + + @if($errors->has('rentang_point')) + {{ $errors->first('rentang_point') }} + @endif +
+
+ + + @if($errors->has('tindakan_sekolah')) + {{ $errors->first('tindakan_sekolah') }} + @endif +
+ +
+ +@endsection diff --git a/resources/views/pages/dashboard/user/create.blade.php b/resources/views/pages/dashboard/user/create.blade.php new file mode 100644 index 0000000..9805ca7 --- /dev/null +++ b/resources/views/pages/dashboard/user/create.blade.php @@ -0,0 +1,55 @@ +@extends('layouts.app') + +@section('content') + +
+ @csrf +
+ + + @error('name') +

{{ $message }}

+ @enderror +
+
+ + + @error('email') +

{{ $message }}

+ @enderror +
+
+ + + @error('password') +

{{ $message }}

+ @enderror +
+
+ + + @error('password_confirmation') +

{{ $message }}

+ @enderror +
+
+ + + @error('phone') +

{{ $message }}

+ @enderror +
+
+ + + @error('usertype') +

{{ $message }}

+ @enderror +
+ +
+ +@endsection diff --git a/resources/views/pages/dashboard/user/index.blade.php b/resources/views/pages/dashboard/user/index.blade.php new file mode 100644 index 0000000..468c6ad --- /dev/null +++ b/resources/views/pages/dashboard/user/index.blade.php @@ -0,0 +1,61 @@ +@extends('layouts.app') + +@section('content') + +
+ @if (Auth::user()->usertype === 'admin') + + + + + Tambah Data + + @endif +
+ + + + + + + + @if (Auth::user()->usertype === 'admin') + + @endif + + + + @foreach ($data as $index => $user ) + + + + + + @if (Auth::user()->usertype === 'admin') + + @endif + + @endforeach + +
NoNamaEmailPhoneAction
{{ $index + 1 }}{{ $user->name }}{{ $user->email }}{{ $user->phone }} + + + + + + + + + + +
+ +@endsection + +@section('script') + +@endsection \ No newline at end of file diff --git a/resources/views/pages/dashboard/user/update.blade.php b/resources/views/pages/dashboard/user/update.blade.php new file mode 100644 index 0000000..ec871f7 --- /dev/null +++ b/resources/views/pages/dashboard/user/update.blade.php @@ -0,0 +1,50 @@ +@extends('layouts.app') + +@section('content') + +
+ @csrf +
+ + + @if($errors->has('name')) +
+ {{ $errors->first('name') }} +
+ @endif +
+
+ + + @if($errors->has('email')) +
+ {{ $errors->first('email') }} +
+ @endif +
+
+ + + @if($errors->has('phone')) +
+ {{ $errors->first('phone') }} +
+ @endif +
+
+ + + @if($errors->has('usertype')) +
+ {{ $errors->first('usertype') }} +
+ @endif +
+ +
+ +@endsection 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..0faa641 --- /dev/null +++ b/routes/web.php @@ -0,0 +1,101 @@ +group(function () { + Route::controller(AuthController::class)->group(function () { + Route::match(['GET', 'POST'], '/', 'login')->name('login'); + Route::match(['GET', 'POST'], 'register', 'register')->name('register'); + }); +}); + +Route::middleware('auth')->group(function () { + Route::prefix('dashboard')->group(function () { + Route::controller(DashboardController::class)->group(function () { + Route::match(['GET', 'POST'], '/', 'index')->name('dashboard'); + Route::match(['GET'], 'logout', 'logout')->name('dashboard.logout'); + Route::prefix('profile')->group(function () { + Route::match(['GET', 'POST'], '/', 'updateProfile')->name('profile.update'); + Route::match(['POST'], 'password', 'updatePassword')->name('password.update'); + }); + }); + Route::middleware('isAuthenticatedAs:admin')->group(function() { + Route::prefix('user')->group(function () { + Route::controller(UserController::class)->group(function () { + Route::match(['GET'], '/', 'index')->name('user'); + Route::match(['GET', 'POST'], 'create', 'create')->name('user.create'); + Route::match(['GET', 'POST'], 'update/{id}', 'update')->name('user.update'); + Route::match(['GET'], 'delete/{id}', 'delete')->name('user.delete'); + }); + }); + }); + Route::prefix('sanksi')->group(function () { + Route::controller(SanksiController::class)->group(function () { + Route::match(['GET'], '/', 'index')->name('sanksi'); + Route::middleware('isAuthenticatedAs:admin')->group(function() { + Route::match(['GET', 'POST'], 'create', 'create')->name('sanksi.create'); + Route::match(['GET', 'POST'], 'update/{id}', 'update')->name('sanksi.update'); + Route::match(['GET'], 'delete/{id}', 'delete')->name('sanksi.delete'); + }); + }); + }); + Route::prefix('siswa')->group(function () { + Route::controller(SiswaController::class)->group(function () { + Route::match(['GET'], '/', 'index')->name('siswa'); + Route::middleware('isAuthenticatedAs:admin')->group(function() { + Route::match(['GET', 'POST'], 'create', 'create')->name('siswa.create'); + Route::match(['GET', 'POST'], 'update/{id}', 'update')->name('siswa.update'); + Route::match(['GET'], 'delete/{id}', 'delete')->name('siswa.delete'); + }); + }); + }); + Route::prefix('tindakan')->group(function () { + Route::controller(TindakanController::class)->group(function () { + Route::match(['GET'], '/', 'index')->name('tindakan'); + Route::middleware('isAuthenticatedAs:admin')->group(function() { + Route::match(['GET', 'POST'], 'create', 'create')->name('tindakan.create'); + Route::match(['GET', 'POST'], 'update/{id}', 'update')->name('tindakan.update'); + Route::match(['GET'], 'delete/{id}', 'delete')->name('tindakan.delete'); + }); + }); + }); + Route::prefix('pelanggaran')->group(function () { + Route::controller(PelanggaranController::class)->group(function () { + Route::match(['GET'], '/', 'index')->name('pelanggaran'); + Route::match(['GET', 'POST'], 'create', 'create')->name('pelanggaran.create'); + Route::match(['GET', 'POST'], 'detail/{id}', 'detail')->name('pelanggaran.detail'); + Route::match(['GET', 'POST'], 'update/{id}', 'update')->name('pelanggaran.update'); + Route::match(['GET'], 'delete/{id}', 'delete')->name('pelanggaran.delete'); + }); + }); + Route::middleware('isAuthenticatedAs:admin')->group(function() { + Route::prefix('kriteriapelanggaran')->group(function () { + Route::controller(KriteriaPelanggaranController::class)->group(function () { + Route::match(['GET', 'POST'], 'create', 'create')->name('kriteriapelanggaran.create'); + Route::match(['GET', 'POST'], 'update/{id}', 'update')->name('kriteriapelanggaran.update'); + Route::match(['GET'], 'delete/{id}', 'delete')->name('kriteriapelanggaran.delete'); + }); + }); + }); + Route::prefix('jenispelanggaran')->group(function () { + Route::controller(JenisPelanggaranController::class)->group(function () { + Route::match(['GET'], '/', 'index')->name('jenispelanggaran'); + Route::middleware('isAuthenticatedAs:admin')->group(function() { + Route::match(['GET', 'POST'], 'create', 'create')->name('jenispelanggaran.create'); + Route::match(['GET', 'POST'], 'update/{id}', 'update')->name('jenispelanggaran.update'); + Route::match(['GET'], 'delete/{id}', 'delete')->name('jenispelanggaran.delete'); + }); + }); + }); + }); +}); \ No newline at end of file diff --git a/storage/app/.gitignore b/storage/app/.gitignore new file mode 100644 index 0000000..8f4803c --- /dev/null +++ b/storage/app/.gitignore @@ -0,0 +1,3 @@ +* +!public/ +!.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/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..1edee2c --- /dev/null +++ b/tailwind.config.js @@ -0,0 +1,13 @@ +/** @type {import('tailwindcss').Config} */ +export default { + content: [ + "./resources/**/*.blade.php", + "./resources/**/*.js", + "./resources/**/*.vue", + ], + theme: { + extend: {}, + }, + plugins: [], +} + 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/TestCase.php b/tests/TestCase.php new file mode 100644 index 0000000..fe1ffc2 --- /dev/null +++ b/tests/TestCase.php @@ -0,0 +1,10 @@ +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, + }), + ], +});